From 9364c40afd64846065c3cfe33a58477ec1422d86 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 15 Jul 2004 02:00:43 +0000 Subject: [PATCH] Add generic expand_filename function to handle expanding ~/ svn:r2047 --- src/common/util.c | 21 +++++++++++++++++++++ src/common/util.h | 1 + 2 files changed, 22 insertions(+) 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 ip (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();