Fix error handling in spawn()
[surf.git] / surf.c
diff --git a/surf.c b/surf.c
index d43535d..32c1920 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -259,7 +259,8 @@ sigchld(int unused)
 {
        if (signal(SIGCHLD, sigchld) == SIG_ERR)
                die("Can't install SIGCHLD handler");
-       while (0 < waitpid(-1, NULL, WNOHANG));
+       while (waitpid(-1, NULL, WNOHANG) > 0)
+               ;
 }
 
 char *
@@ -332,14 +333,12 @@ newclient(Client *rc)
        if (!(c = calloc(1, sizeof(Client))))
                die("Cannot malloc!\n");
 
-       c->title = NULL;
-       c->progress = 100;
-
        c->next = clients;
        clients = c;
 
-       c->view = newview(c, rc ? rc->view : NULL);
+       c->progress = 100;
        c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1;
+       c->view = newview(c, rc ? rc->view : NULL);
 
        return c;
 }
@@ -434,26 +433,24 @@ void
 updatetitle(Client *c)
 {
        char *title;
+       const char *name = c->targeturi ? c->targeturi :
+                          c->title ? c->title : "";
 
        if (showindicators) {
                gettogglestats(c);
                getpagestats(c);
 
-               if (c->progress != 100) {
+               if (c->progress != 100)
                        title = g_strdup_printf("[%i%%] %s:%s | %s",
-                               c->progress, togglestats, pagestats,
-                               c->targeturi ? c->targeturi : c->title);
-               } else {
+                               c->progress, togglestats, pagestats, name);
+               else
                        title = g_strdup_printf("%s:%s | %s",
-                               togglestats, pagestats,
-                               c->targeturi ? c->targeturi : c->title);
-               }
+                               togglestats, pagestats, name);
 
                gtk_window_set_title(GTK_WINDOW(c->win), title);
                g_free(title);
        } else {
-               gtk_window_set_title(GTK_WINDOW(c->win), c->title ?
-                                    c->title : "");
+               gtk_window_set_title(GTK_WINDOW(c->win), name);
        }
 }
 
@@ -488,12 +485,11 @@ cookiepolicy_get(void)
                return WEBKIT_COOKIE_POLICY_ACCEPT_NEVER;
        case '@':
                return WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY;
+       default: /* fallthrough */
        case 'A':
-       default:
-               break;
+               return WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS;
        }
 
-       return WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS;
 }
 
 char
@@ -504,12 +500,11 @@ cookiepolicy_set(const WebKitCookieAcceptPolicy p)
                return 'a';
        case WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY:
                return '@';
+       default: /* fallthrough */
        case WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS:
-       default:
-               break;
+               return 'A';
        }
 
-       return 'A';
 }
 
 const char *
@@ -648,9 +643,9 @@ spawn(Client *c, const Arg *a)
                        close(ConnectionNumber(dpy));
                setsid();
                execvp(((char **)a->v)[0], (char **)a->v);
-               fprintf(stderr, "surf: execvp %s", ((char **)a->v)[0]);
+               fprintf(stderr, "%s: execvp %s", argv0, ((char **)a->v)[0]);
                perror(" failed");
-               exit(0);
+               exit(1);
        }
 }
 
@@ -1219,7 +1214,7 @@ void
 pasteuri(GtkClipboard *clipboard, const char *text, gpointer d)
 {
        Arg a = {.v = text };
-       if (!text)
+       if (text)
                loaduri((Client *) d, &a);
 }
 
@@ -1542,15 +1537,15 @@ main(int argc, char *argv[])
        } ARGEND;
        if (argc > 0)
                arg.v = argv[0];
+       else
+               arg.v = "about:blank";
 
        setup();
        c = newclient(NULL);
        showview(NULL, c);
 
-       if (arg.v)
-               loaduri(clients, &arg);
-       else
-               updatetitle(c);
+       loaduri(c, &arg);
+       updatetitle(c);
 
        gtk_main();
        cleanup();