diff --git a/src/common.h b/src/common.h index 8757c35..f1eab8c 100644 --- a/src/common.h +++ b/src/common.h @@ -184,8 +184,6 @@ int ATTR_PRINTFLIKE(3, 4) nfsnprintf( char *buf, int blen, const char *fmt, ... void ATTR_NORETURN oob( void ); void ATTR_NORETURN oom( void ); -char *expand_strdup( const char *s ); - int map_name( const char *arg, char **result, uint reserve, const char *in, const char *out ); #define DEFINE_ARRAY_TYPE(T) \ diff --git a/src/config.c b/src/config.c index 0de5eb4..e896bdd 100644 --- a/src/config.c +++ b/src/config.c @@ -20,6 +20,40 @@ char FieldDelimiter = ':'; static store_conf_t *stores; +char * +expand_strdup( const char *s ) +{ + struct passwd *pw; + const char *p, *q; + char *r; + + if (*s == '~') { + s++; + if (!*s) { + p = NULL; + q = Home; + } else if (*s == '/') { + p = s; + q = Home; + } else { + if ((p = strchr( s, '/' ))) { + r = nfstrndup( s, (size_t)(p - s) ); + pw = getpwnam( r ); + free( r ); + } else { + pw = getpwnam( s ); + } + if (!pw) + return NULL; + q = pw->pw_dir; + } + nfasprintf( &r, "%s%s", q, p ? p : "" ); + return r; + } else { + return nfstrdup( s ); + } +} + char * get_arg( conffile_t *cfile, int required, int *comment ) { diff --git a/src/config.h b/src/config.h index 375ef8c..063c128 100644 --- a/src/config.h +++ b/src/config.h @@ -26,6 +26,8 @@ extern char FieldDelimiter; #define ARG_OPTIONAL 0 #define ARG_REQUIRED 1 +char *expand_strdup( const char *s ); + char *get_arg( conffile_t *cfile, int required, int *comment ); char parse_bool( conffile_t *cfile ); diff --git a/src/util.c b/src/util.c index 19b2bf5..01e9e80 100644 --- a/src/util.c +++ b/src/util.c @@ -480,40 +480,6 @@ cur_user( void ) } */ -char * -expand_strdup( const char *s ) -{ - struct passwd *pw; - const char *p, *q; - char *r; - - if (*s == '~') { - s++; - if (!*s) { - p = NULL; - q = Home; - } else if (*s == '/') { - p = s; - q = Home; - } else { - if ((p = strchr( s, '/' ))) { - r = nfstrndup( s, (size_t)(p - s) ); - pw = getpwnam( r ); - free( r ); - } else { - pw = getpwnam( s ); - } - if (!pw) - return NULL; - q = pw->pw_dir; - } - nfasprintf( &r, "%s%s", q, p ? p : "" ); - return r; - } else { - return nfstrdup( s ); - } -} - /* Return value: 0 = ok, -1 = out found in arg, -2 = in found in arg but no out specified */ int map_name( const char *arg, char **result, uint reserve, const char *in, const char *out )