Mercurial > dovecot > core-2.2
view src/lib/home-expand.c @ 18137:3009a1a6f6d5
global: freshen copyright
Robomatically:
git ls-files | xargs perl -p -i -e 's/(\d+)-201[0-4]/$1-2015/g;s/ (201[0-4]) Dovecot/ $1-2015 Dovecot/'
Happy 2015 everyone!
Signed-off-by: Phil Carmody <phil@dovecot.fi>
author | Phil Carmody <phil@dovecot.fi> |
---|---|
date | Mon, 05 Jan 2015 22:20:10 +0200 |
parents | add8c00fb3cc |
children | 9e120590e0ef |
line wrap: on
line source
/* Copyright (c) 2003-2015 Dovecot authors, see the included COPYING file */ #include "lib.h" #include "ipwd.h" #include "home-expand.h" #include <stdlib.h> int home_try_expand(const char **_path) { const char *path = *_path; const char *name, *home, *p; struct passwd pw; if (path == NULL || *path != '~') return 0; path++; if (*path == '/' || *path == '\0') { home = getenv("HOME"); if (*path != '\0') path++; } else { p = strchr(path, '/'); if (p == NULL) { name = path; path = ""; } else { name = t_strdup_until(path, p); path = p+1; } switch (i_getpwnam(name, &pw)) { case -1: i_error("getpwnam(%s) failed: %m", name); home = NULL; break; case 0: home = NULL; break; default: home = pw.pw_dir; break; } } if (home == NULL) return -1; if (*path == '\0') *_path = t_strdup(home); else *_path = t_strconcat(home, "/", path, NULL); return 0; } const char *home_expand(const char *path) { (void)home_try_expand(&path); return path; } const char *home_expand_tilde(const char *path, const char *home) { if (path == NULL || *path != '~') return path; if (path[1] == '\0') return home; if (path[1] != '/') return path; /* ~/ used */ return t_strconcat(home, path + 1, NULL); }