commit 846f724983f098541df0d6f44b1a617b60602aa2 from: MvA via: Dan Cross date: Sun Sep 11 13:55:17 2022 UTC fix double free bug, simplify error handling, reduce X11 calls commit - 3e764832bc3423e58772ad6e35f4c03d7fa5c867 commit + 846f724983f098541df0d6f44b1a617b60602aa2 blob - 48c8d9e6a1eac5c340b6e7d844195f29f404b375 blob + 410f7bd71eec24dfa21f01c4f9c0068ab01377b9 --- src/cmd/rio/winwatch.c +++ src/cmd/rio/winwatch.c @@ -24,7 +24,6 @@ struct Win { XDisplay *dpy; XWindow root; - Atom net_active_window; Reprog *exclude = nil; Win *win; @@ -38,8 +37,7 @@ Font *font; Image *lightblue; -enum -{ +enum { PAD = 3, MARGIN = 5 }; @@ -60,7 +58,7 @@ void* erealloc(void *v, ulong n) { v = realloc(v, n); - if(v == nil) + if(v==nil) sysfatal("out of memory reallocating"); return v; } @@ -69,9 +67,9 @@ char* estrdup(char *s) { s = strdup(s); - if(s == nil) + if(s==nil) sysfatal("out of memory allocating"); - return s; + return(s); } char* @@ -88,12 +86,12 @@ getproperty(XWindow w, Atom a) s = XGetWindowProperty(dpy, w, a, 0, 100L, 0, AnyPropertyType, &type, &fmt, &n, &dummy, &p); - if(s != 0){ + if(s!=0){ XFree(p); - return nil; + return(nil); } - return (char*)p; + return((char*)p); } XWindow @@ -109,28 +107,28 @@ findname(XWindow w) p = getproperty(w, XA_WM_NAME); if(p){ free(p); - return w; + return(w); } net_wm_name = XInternAtom(dpy, "_NET_WM_NAME", FALSE); p = getproperty(w, net_wm_name); if(p){ free(p); - return w; + return(w); } rwin = 0; s = XQueryTree(dpy, w, &dw1, &dw2, &xwin, &nxwin); - if(s != 0){ + if(s!=0){ for (i = 0; i < nxwin; i++){ - w = findname(xwin[i]); - if(w != 0){ - rwin = w; - break ; + w = findname(xwin[i]); + if(w != 0){ + rwin = w; + break ; + } } - } XFree(xwin); } @@ -144,6 +142,7 @@ wcmp(const void *w1, const void *w2) } /* unicode-aware case-insensitive strcmp, taken from golang’s gc/subr.c */ + int _cistrcmp(char *p, char *q) { @@ -189,49 +188,48 @@ refreshwin(void) s = XQueryTree(dpy, root, &dw1, &dw2, &xwin, &nxwin); - if(s == 0){ - if(xwin != NULL) + if(s==0){ + if(xwin!=NULL) XFree(xwin); return; } - qsort(xwin, nxwin, sizeof(xwin[0]), wcmp); nw = 0; - for(i=0; i < nxwin; i++){ + for(i=0; i= mwin){ + if(nw>=mwin){ mwin += 8; win = erealloc(win, mwin * sizeof(win[0])); } - win[nw].n = xwin[i]; win[nw].label = estrdup(label); win[nw].dirty = 1; @@ -270,11 +267,11 @@ refreshwin(void) XFree(xwin); - while(nwin > nw) + while(nwin>nw) free(win[--nwin].label); nwin = nw; - if(sortlabels == 1) + if(sortlabels==1) qsort(win, nwin, sizeof(struct Win), winlabelcmp); } @@ -313,16 +310,16 @@ geometry(void) rows = (Dy(screen->r) - 2 * MARGIN + PAD) / (font->height + PAD); if(rows*cols=nwin*2){ ncols = 1; - if(nwin > 0) + if(nwin>0) ncols = (nwin + rows - 1) / rows; - if(ncols != cols){ + if(ncols!=cols){ cols = ncols; z = 1; } } r = Rect(0, 0, (Dx(screen->r) - 2 * MARGIN + PAD) / cols - PAD, font->height); - for(i=0; i r, lightblue, nil, ZP); - for(i=0; i < nwin; i++) + for(i=0; i