summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2012-12-17 23:03:41 +0000
committerokan <okan>2012-12-17 23:03:41 +0000
commit75f65f399e2cfc0fd73f6ae9f68e60313cfdd7e5 (patch)
tree6c0f8397fa8cf5e64d5cb2bf2bf22b9961a0c554
parentfe44d1dfce326c846fa199d6972ca77649176046 (diff)
downloadcwm-75f65f399e2cfc0fd73f6ae9f68e60313cfdd7e5.tar.gz
cwm-75f65f399e2cfc0fd73f6ae9f68e60313cfdd7e5.tar.xz
cwm-75f65f399e2cfc0fd73f6ae9f68e60313cfdd7e5.zip
pull user home directory via getenv or getpwuid and stash it so we don't
need to do this everytime; with Tiago Cunha
-rw-r--r--calmwm.c11
-rw-r--r--calmwm.h1
-rw-r--r--conf.c6
-rw-r--r--kbfunc.c7
4 files changed, 15 insertions, 10 deletions
diff --git a/calmwm.c b/calmwm.c
index c699751..2c02342 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <getopt.h>
 #include <locale.h>
+#include <pwd.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -48,6 +49,7 @@ struct client_ctx_q		 Clientq = TAILQ_HEAD_INITIALIZER(Clientq);
 
 int				 HasRandr, Randr_ev;
 struct conf			 Conf;
+char				*homedir;
 
 static void	sigchld_cb(int);
 static void	dpy_init(const char *);
@@ -62,6 +64,7 @@ main(int argc, char **argv)
 	const char	*conf_file = NULL;
 	char		*display_name = NULL;
 	int		 ch;
+	struct passwd	*pw;
 
 	if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
 		warnx("no locale support");
@@ -86,6 +89,14 @@ main(int argc, char **argv)
 	if (signal(SIGCHLD, sigchld_cb) == SIG_ERR)
 		err(1, "signal");
 
+	if ((homedir = getenv("HOME")) == NULL || *homedir == '\0') {
+		pw = getpwuid(getuid());
+		if (pw != NULL && pw->pw_dir != NULL && *pw->pw_dir != '\0')
+			homedir = pw->pw_dir;
+		else
+			homedir = "/";
+	}
+
 	dpy_init(display_name);
 
 	bzero(&Conf, sizeof(Conf));
diff --git a/calmwm.h b/calmwm.h
index 3f3ad23..87be644 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -519,6 +519,7 @@ extern Cursor				 Cursor_resize;
 extern struct screen_ctx_q		 Screenq;
 extern struct client_ctx_q		 Clientq;
 extern struct conf			 Conf;
+extern char				*homedir;
 
 extern int				 HasRandr, Randr_ev;
 
diff --git a/conf.c b/conf.c
index 5d4ec23..9bdea9b 100644
--- a/conf.c
+++ b/conf.c
@@ -243,18 +243,14 @@ void
 conf_setup(struct conf *c, const char *conf_file)
 {
 	char		 conf_path[MAXPATHLEN];
-	char		*home;
 	struct stat	 sb;
 	int		 parse = 0;
 
 	conf_init(c);
 
 	if (conf_file == NULL) {
-		if ((home = getenv("HOME")) == NULL)
-			errx(1, "No HOME directory.");
-
 		(void)snprintf(conf_path, sizeof(conf_path), "%s/%s",
-		    home, CONFFILE);
+		    homedir, CONFFILE);
 
 		if (stat(conf_path, &sb) == 0 && (sb.st_mode & S_IFREG))
 			parse = 1;
diff --git a/kbfunc.c b/kbfunc.c
index 023069d..d62867d 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -324,16 +324,13 @@ kbfunc_ssh(struct client_ctx *cc, union arg *arg)
 	struct menu		*mi;
 	struct menu_q		 menuq;
 	FILE			*fp;
-	char			*buf, *lbuf, *p, *home;
+	char			*buf, *lbuf, *p;
 	char			 hostbuf[MAXHOSTNAMELEN], filename[MAXPATHLEN];
 	char			 cmd[256];
 	int			 l;
 	size_t			 len;
 
-	if ((home = getenv("HOME")) == NULL)
-		return;
-
-	l = snprintf(filename, sizeof(filename), "%s/%s", home, KNOWN_HOSTS);
+	l = snprintf(filename, sizeof(filename), "%s/%s", homedir, KNOWN_HOSTS);
 	if (l == -1 || l >= sizeof(filename))
 		return;