diff options
author | Adrien Schildknecht <adrien+dev@schischi.me> | 2013-05-21 15:54:12 +0200 |
---|---|---|
committer | Adrien Schildknecht <adrien+dev@schischi.me> | 2013-05-21 15:54:12 +0200 |
commit | c04fa192545d6dc33b4e1c24de2b6cb7d9cea12d (patch) | |
tree | 01c4af81f558991eae754cda7bf4e0398a8cca73 /xcwd.c | |
parent | 58b31130e4065b2d00f470902f0c741c3d5315e8 (diff) |
handle fscanf failure
Diffstat (limited to 'xcwd.c')
-rw-r--r-- | xcwd.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -158,8 +158,9 @@ static processes_t getProcesses(void) tn = fopen(name, "r"); if (tn == NULL) continue; - fscanf(tn, "%ld (%32[^)] %*3c %ld", &p->ps[j].pid, p->ps[j].name, - &p->ps[j].ppid); + if(fscanf(tn, "%ld (%32[^)] %*3c %ld", &p->ps[j].pid, + p->ps[j].name, &p->ps[j].ppid) != 3) + return NULL; LOG("\t%-20s\tpid=%6ld\tppid=%6ld\n", p->ps[j].name, p->ps[j].pid, p->ps[j].ppid); fclose(tn); @@ -215,6 +216,13 @@ static void cwdOfDeepestChild(processes_t p, long pid) return; } +int getHomeDirectory() +{ + LOG("%s", "getenv $HOME...\n"); + fprintf(stdout, "%s\n", getenv("HOME")); + return EXIT_FAILURE; +} + int main(int argc, const char *argv[]) { (void)argc; @@ -223,14 +231,13 @@ int main(int argc, const char *argv[]) processes_t p; long pid; Window w = focusedWindow(); - if (w == 0) { - LOG("%s", "getenv $HOME...\n"); - fprintf(stdout, "%s\n", getenv("HOME")); - return EXIT_FAILURE; - } + if (w == 0) + return getHomeDirectory(); pid = windowPid(w); p = getProcesses(); + if(p == NULL) + return getHomeDirectory(); if (pid != -1) { qsort(p->ps, p->n, sizeof(struct proc_s), ppidCmp); } |