JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix window_get_pid().
[spectrwm.git] / spectrwm.c
index ce27a4d..4831ac0 100644 (file)
@@ -425,7 +425,7 @@ TAILQ_HEAD(ws_win_list, ws_win);
 /* pid goo */
 struct pid_e {
        TAILQ_ENTRY(pid_e)      entry;
-       long                    pid;
+       pid_t                   pid;
        int                     ws;
 };
 TAILQ_HEAD(pid_list, pid_e);
@@ -842,33 +842,33 @@ teardown_ewmh(void)
 void
 ewmh_autoquirk(struct ws_win *win)
 {
-       int                     i;
-       unsigned long           n;
-       xcb_atom_t              type;
+       uint32_t                i, n;
+       xcb_atom_t              *type;
 
        xcb_get_property_cookie_t       c;
        xcb_get_property_reply_t        *r;
 
        c = xcb_get_property(conn, False, win->id,
-           ewmh[_NET_WM_WINDOW_TYPE].atom, XCB_ATOM_ATOM, 0, (~0L));
+           ewmh[_NET_WM_WINDOW_TYPE].atom, XCB_ATOM_ATOM, 0, UINT32_MAX);
        r = xcb_get_property_reply(conn, c, NULL);
        if (!r)
                return;
-       n = xcb_get_property_value_length(r);
 
+       n = xcb_get_property_value_length(r);
+       type = xcb_get_property_value(r);
+       
        for (i = 0; i < n; i++) {
-               type = *((xcb_atom_t *)xcb_get_property_value(r));
-               if (type == ewmh[_NET_WM_WINDOW_TYPE_NORMAL].atom)
+               if (type[i] == ewmh[_NET_WM_WINDOW_TYPE_NORMAL].atom)
                        break;
-               if (type == ewmh[_NET_WM_WINDOW_TYPE_DOCK].atom ||
-                   type == ewmh[_NET_WM_WINDOW_TYPE_TOOLBAR].atom ||
-                   type == ewmh[_NET_WM_WINDOW_TYPE_UTILITY].atom) {
+               if (type[i] == ewmh[_NET_WM_WINDOW_TYPE_DOCK].atom ||
+                   type[i] == ewmh[_NET_WM_WINDOW_TYPE_TOOLBAR].atom ||
+                   type[i] == ewmh[_NET_WM_WINDOW_TYPE_UTILITY].atom) {
                        win->floating = 1;
                        win->quirks = SWM_Q_FLOAT | SWM_Q_ANYWHERE;
                        break;
                }
-               if (type == ewmh[_NET_WM_WINDOW_TYPE_SPLASH].atom ||
-                   type == ewmh[_NET_WM_WINDOW_TYPE_DIALOG].atom) {
+               if (type[i] == ewmh[_NET_WM_WINDOW_TYPE_SPLASH].atom ||
+                   type[i] == ewmh[_NET_WM_WINDOW_TYPE_DIALOG].atom) {
                        win->floating = 1;
                        win->quirks = SWM_Q_FLOAT;
                        break;
@@ -1032,7 +1032,7 @@ ewmh_get_win_state(struct ws_win *win)
                win->ewmh_flags |= SWM_F_MANUAL;
 
        c = xcb_get_property(conn, False, win->id, ewmh[_NET_WM_STATE].atom,
-           XCB_ATOM_ATOM, 0, (~0L));
+           XCB_ATOM_ATOM, 0, UINT32_MAX);
        r = xcb_get_property_reply(conn, c, NULL);
        if (!r)
                return;
@@ -1166,11 +1166,11 @@ sighdlr(int sig)
 }
 
 struct pid_e *
-find_pid(long pid)
+find_pid(pid_t pid)
 {
        struct pid_e            *p = NULL;
 
-       DNPRINTF(SWM_D_MISC, "find_pid: %lu\n", pid);
+       DNPRINTF(SWM_D_MISC, "find_pid: %d\n", pid);
 
        if (pid == 0)
                return (NULL);
@@ -5908,7 +5908,7 @@ setautorun(char *selector, char *value, int flags)
        char                    *ap, *sp = s;
        union arg               a;
        int                     argc = 0;
-       long                    pid;
+       pid_t                   pid;
        struct pid_e            *p;
 
        if (getenv("SWM_STARTED"))
@@ -6249,10 +6249,10 @@ set_child_transient(struct ws_win *win, xcb_window_t *trans)
        }
 }
 
-long
+pid_t
 window_get_pid(xcb_window_t win)
 {
-       long                            ret = 0;
+       pid_t                           ret = 0;
        const char                      *errstr;
        xcb_atom_t                      apid;
        xcb_get_property_cookie_t       pc;
@@ -6266,10 +6266,12 @@ window_get_pid(xcb_window_t win)
        pr = xcb_get_property_reply(conn, pc, NULL);
        if (!pr)
                goto tryharder;
-       if (pr->type != XCB_ATOM_CARDINAL)
+       if (pr->type != XCB_ATOM_CARDINAL) {
+               free(pr);
                goto tryharder;
+       }
 
-       ret = *(long *)xcb_get_property_value(pr);
+       ret = *((pid_t *)xcb_get_property_value(pr));
        free(pr);
 
        return (ret);
@@ -6281,9 +6283,11 @@ tryharder:
        pr = xcb_get_property_reply(conn, pc, NULL);
        if (!pr)
                return (0);
-       if (pr->type != XCB_ATOM_STRING)
+       if (pr->type != XCB_ATOM_STRING) {
                free(pr);
                return (0);
+       }
+
        ret = strtonum(xcb_get_property_value(pr), 0, UINT_MAX, &errstr);
        free(pr);