Browse Source

move expand_strdup() to config.c

it's not really a generic function.
wip/maildir-path-under-inbox
Oswald Buddenhagen 3 years ago
parent
commit
603e740b63
  1. 2
      src/common.h
  2. 34
      src/config.c
  3. 2
      src/config.h
  4. 34
      src/util.c

2
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) \

34
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 )
{

2
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 );

34
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 )

Loading…
Cancel
Save