X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=string.c;h=198e9f1d286ee2228638a2a7994fe9e65f41ccac;hp=d8bd027b7010a149be59b8883b3e5ee685fb3c01;hb=refs%2Fheads%2Fpu;hpb=3e0b33d1daabc885c6fb9a8f9efca307a724bc40 diff --git a/string.c b/string.c index d8bd027b..9fffad13 100644 --- a/string.c +++ b/string.c @@ -308,32 +308,28 @@ __must_check __malloc char *para_logname(void) } /** - * Get the home directory of the calling user. + * Return the expansion of $HOME/.paraslash. * - * \return A dynamically allocated string that must be freed by the caller. If - * no entry is found which matches the UID of the calling process, or any other - * error occurs, the function prints an error message and aborts. + * \return A pointer to memory that must not be freed by the caller. If the + * environment variable HOME is unset or empty, the function prints an error + * message and aborts. * - * \sa getpwuid(3), getuid(2). + * \sa getenv(3), getuid(2). */ -__must_check __malloc char *para_homedir(void) +const char *get_confdir(void) { - struct passwd *pw; - - /* - * To distinguish between the error case and the "not found" case we - * have to check errno after getpwuid(3). The manual page recommends to - * set it to zero before the call. - */ - errno = 0; - pw = getpwuid(getuid()); - if (pw) - return para_strdup(pw->pw_dir); - if (errno != 0) - PARA_EMERG_LOG("getpwuid error: %s\n", strerror(errno)); - else - PARA_EMERG_LOG("no pw entry for uid %u\n", (unsigned)getuid()); - exit(EXIT_FAILURE); + static const char *dot_para; + const char *home; + + if (dot_para) + return dot_para; + home = getenv("HOME"); + if (!home || !*home) { + PARA_EMERG_LOG("fatal: HOME is unset or empty"); + exit(EXIT_FAILURE); + } + dot_para = make_message("%s/.paraslash", home); + return dot_para; } /**