summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-07-15 02:00:43 +0000
committerNick Mathewson <nickm@torproject.org>2004-07-15 02:00:43 +0000
commit9364c40afd64846065c3cfe33a58477ec1422d86 (patch)
treec8b67b0577d04b96ba5149294821a5b8358a6530 /src/common
parentc458f33ef1ec48357d008e44a3c03422ed1366ea (diff)
downloadtor-9364c40afd64846065c3cfe33a58477ec1422d86.tar.gz
tor-9364c40afd64846065c3cfe33a58477ec1422d86.zip
Add generic expand_filename function to handle expanding ~/
svn:r2047
Diffstat (limited to 'src/common')
-rw-r--r--src/common/util.c21
-rw-r--r--src/common/util.h1
2 files changed, 22 insertions, 0 deletions
diff --git a/src/common/util.c b/src/common/util.c
index 7b22bb973a..2f0d693944 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1453,6 +1453,27 @@ try_next_line:
return 1;
}
+/** Expand any homedir prefix on 'filename'; return a newly allocated
+ * string. */
+char *expand_filename(const char *filename)
+{
+ tor_assert(filename);
+ if (!strncmp(filename,"~/",2)) {
+ const char *home = getenv("HOME");
+ char *result;
+ if (!home) {
+ log_fn(LOG_ERR, "Couldn't find $HOME environment variable while expanding %s", filename);
+ return NULL;
+ }
+ /* minus two characters for ~/, plus one for /, plus one for NUL. */
+ result = tor_malloc(strlen(home)+strlen(filename)+16);
+ sprintf(result,"%s/%s",home,filename+2);
+ return result;
+ } else {
+ return tor_strdup(filename);
+ }
+}
+
/** Return true iff <b>ip</b> (in host order) is an IP reserved to localhost,
* or reserved for local networks by RFC 1918.
*/
diff --git a/src/common/util.h b/src/common/util.h
index cfcfaafece..51a5440051 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -217,6 +217,7 @@ int check_private_dir(const char *dirname, int create);
int write_str_to_file(const char *fname, const char *str);
char *read_file_to_str(const char *filename);
int parse_line_from_file(char *line, int maxlen, FILE *f, char **key_out, char **value_out);
+char *expand_filename(const char *filename);
int spawn_func(int (*func)(void *), void *data);
void spawn_exit();