]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - string.c
Merge topic branch t/sf_float into pu
[paraslash.git] / string.c
index d8bd027b7010a149be59b8883b3e5ee685fb3c01..9fffad13f3586796c2f66d66b884375f71c6570e 100644 (file)
--- 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;
 }
 
 /**