On Wed, 8 Jul 2015 20:45:23 +0200 FRIGN <[email protected]> wrote: >
After further discussion on IRC with k0ga and 20h, here are the first two patches in an updated version without excessive line-lengths. The rest will come later. Cheers FRIGN -- FRIGN <[email protected]>
>From 76b9a96242b11fb20adcff4b5c7121ff9734876f Mon Sep 17 00:00:00 2001 From: FRIGN <[email protected]> Date: Wed, 8 Jul 2015 23:49:25 +0200 Subject: [PATCH 1/2] Remove insane *_FILENO and EXIT_* usage Any system having different assignments than the usual 0, 1, 2 for the standard file numbers and 0, 1 for the exit-statuses is broken beyond repair. Let's keep it simple and just use the numbers, no reason to fall out of the window here and bend down for POSIX. In one occasion, the ret-variable was not necessary. The check was rewritten. --- st.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/st.c b/st.c index b89d094..46c0b6e 100644 --- a/st.c +++ b/st.c @@ -513,7 +513,7 @@ static STREscape strescseq; static int cmdfd; static pid_t pid; static Selection sel; -static int iofd = STDOUT_FILENO; +static int iofd = 1; static char **opt_cmd = NULL; static char *opt_io = NULL; static char *opt_title = NULL; @@ -1207,7 +1207,7 @@ die(const char *errstr, ...) { va_start(ap, errstr); vfprintf(stderr, errstr, ap); va_end(ap); - exit(EXIT_FAILURE); + exit(1); } void @@ -1256,12 +1256,12 @@ execsh(void) { signal(SIGALRM, SIG_DFL); execvp(prog, args); - _exit(EXIT_FAILURE); + _exit(1); } void sigchld(int a) { - int stat, ret; + int stat; pid_t p; if((p = waitpid(pid, &stat, WNOHANG)) < 0) @@ -1270,10 +1270,9 @@ sigchld(int a) { if(pid != p) return; - ret = WIFEXITED(stat) ? WEXITSTATUS(stat) : EXIT_FAILURE; - if (ret != EXIT_SUCCESS) + if (!WIFEXITED(stat) || WEXITSTATUS(stat)) die("child finished with error '%d'\n", stat); - exit(EXIT_SUCCESS); + exit(0); } @@ -1309,8 +1308,7 @@ ttynew(void) { if(opt_io) { term.mode |= MODE_PRINT; iofd = (!strcmp(opt_io, "-")) ? - STDOUT_FILENO : - open(opt_io, O_WRONLY | O_CREAT, 0666); + 1 : open(opt_io, O_WRONLY | O_CREAT, 0666); if(iofd < 0) { fprintf(stderr, "Error opening %s:%s\n", opt_io, strerror(errno)); @@ -1320,7 +1318,7 @@ ttynew(void) { if (opt_line) { if((cmdfd = open(opt_line, O_RDWR)) < 0) die("open line failed: %s\n", strerror(errno)); - close(STDIN_FILENO); + close(0); dup(cmdfd); stty(); return; @@ -1337,9 +1335,9 @@ ttynew(void) { case 0: close(iofd); setsid(); /* create a new process group */ - dup2(s, STDIN_FILENO); - dup2(s, STDOUT_FILENO); - dup2(s, STDERR_FILENO); + dup2(s, 0); + dup2(s, 1); + dup2(s, 2); if(ioctl(s, TIOCSCTTY, NULL) < 0) die("ioctl TIOCSCTTY failed: %s\n", strerror(errno)); close(s); @@ -3871,7 +3869,7 @@ cmessage(XEvent *e) { } else if(e->xclient.data.l[0] == xw.wmdeletewin) { /* Send SIGHUP to shell */ kill(pid, SIGHUP); - exit(EXIT_SUCCESS); + exit(0); } } -- 1.8.5.5
>From c277d0bc8b685ec33109eb2fa524c241cfc904ed Mon Sep 17 00:00:00 2001 From: FRIGN <[email protected]> Date: Wed, 8 Jul 2015 23:56:55 +0200 Subject: [PATCH 2/2] Unboolify st This practice proved itself in sbase, ubase and a couple of other projects. Also remove the True and False defined in X11 and FcTrue and FcFalse defined in Fontconfig. --- config.def.h | 2 +- st.c | 56 +++++++++++++++++++++++++++----------------------------- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/config.def.h b/config.def.h index 64e75b8..e246e3c 100644 --- a/config.def.h +++ b/config.def.h @@ -30,7 +30,7 @@ static unsigned int doubleclicktimeout = 300; static unsigned int tripleclicktimeout = 600; /* alt screens */ -static bool allowaltscreen = true; +static int allowaltscreen = 1; /* frames per second st should at maximum draw to the screen */ static unsigned int xfps = 120; diff --git a/st.c b/st.c index 46c0b6e..b052b2b 100644 --- a/st.c +++ b/st.c @@ -6,7 +6,6 @@ #include <locale.h> #include <pwd.h> #include <stdarg.h> -#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -231,7 +230,7 @@ typedef struct { int col; /* nb col */ Line *line; /* screen */ Line *alt; /* alternate screen */ - bool *dirty; /* dirtyness of lines */ + int *dirty; /* dirtyness of lines */ XftGlyphFontSpec *specbuf; /* font spec buffer used for rendering */ TCursor c; /* cursor */ int top; /* top scroll limit */ @@ -241,8 +240,8 @@ typedef struct { char trantbl[4]; /* charset table translation */ int charset; /* current charset */ int icharset; /* selected charset for sequence */ - bool numlock; /* lock numbers in keyboard */ - bool *tabs; + int numlock; /* lock numbers in keyboard */ + int *tabs; } Term; /* Purely graphic info */ @@ -258,7 +257,7 @@ typedef struct { Visual *vis; XSetWindowAttributes attrs; int scr; - bool isfixed; /* is fixed geometry? */ + int isfixed; /* is fixed geometry? */ int l, t; /* left and top offset */ int gm; /* geometry mask */ int tw, th; /* tty width and height */ @@ -302,7 +301,7 @@ typedef struct { char *primary, *clipboard; Atom xtarget; - bool alt; + int alt; struct timespec tclick1; struct timespec tclick2; } Selection; @@ -403,14 +402,14 @@ static void tsetscroll(int, int); static void tswapscreen(void); static void tsetdirt(int, int); static void tsetdirtattr(int); -static void tsetmode(bool, bool, int *, int); +static void tsetmode(int, int, int *, int); static void tfulldirt(void); static void techo(Rune); static void tcontrolcode(uchar ); static void tdectest(char ); static int32_t tdefcolor(int *, int *, int); static void tdeftran(char); -static inline bool match(uint, uint); +static inline int match(uint, uint); static void ttynew(void); static void ttyread(void); static void ttyresize(void); @@ -459,7 +458,7 @@ static void selrequest(XEvent *); static void selinit(void); static void selnormalize(void); -static inline bool selected(int, int); +static inline int selected(int, int); static char *getsel(void); static void selcopy(Time); static void selscroll(int, int); @@ -734,10 +733,10 @@ selnormalize(void) { sel.ne.x = term.col - 1; } -bool +int selected(int x, int y) { if(sel.mode == SEL_EMPTY) - return false; + return 0; if(sel.type == SEL_RECTANGULAR) return BETWEEN(y, sel.nb.y, sel.ne.y) @@ -751,7 +750,7 @@ selected(int x, int y) { void selsnap(int *x, int *y, int direction) { int newx, newy, xt, yt; - bool delim, prevdelim; + int delim, prevdelim; Glyph *gp, *prevgp; switch(sel.snap) { @@ -1143,7 +1142,7 @@ selrequest(XEvent *e) { } /* all done, send a notification to the listener */ - if(!XSendEvent(xsre->display, xsre->requestor, True, 0, (XEvent *) &xev)) + if(!XSendEvent(xsre->display, xsre->requestor, 1, 0, (XEvent *) &xev)) fprintf(stderr, "Error sending SelectionNotify event\n"); } @@ -1457,7 +1456,7 @@ tfulldirt(void) { void tcursor(int mode) { static TCursor c[2]; - bool alt = IS_SET(MODE_ALTSCREEN); + int alt = IS_SET(MODE_ALTSCREEN); if(mode == CURSOR_SAVE) { c[alt] = term.c; @@ -1916,9 +1915,9 @@ tsetscroll(int t, int b) { } void -tsetmode(bool priv, bool set, int *args, int narg) { +tsetmode(int priv, int set, int *args, int narg) { int *lim, mode; - bool alt; + int alt; for(lim = args + narg; args < lim; ++args) { if(priv) { @@ -2684,7 +2683,7 @@ eschandle(uchar ascii) { void tputc(Rune u) { char c[UTF_SIZ]; - bool control; + int control; int width, len; Glyph *gp; @@ -2808,7 +2807,7 @@ tresize(int col, int row) { int i; int minrow = MIN(row, term.row); int mincol = MIN(col, term.col); - bool *bp; + int *bp; TCursor c; if(col < 1 || row < 1) { @@ -2904,7 +2903,7 @@ sixd_to_16bit(int x) { return x == 0 ? 0 : 0x3737 + 0x2828 * x; } -bool +int xloadcolor(int i, const char *name, Color *ncolor) { XRenderColor color = { .alpha = 0xffff }; @@ -2929,7 +2928,7 @@ xloadcolor(int i, const char *name, Color *ncolor) { void xloadcols(void) { int i; - static bool loaded; + static int loaded; Color *cp; if(loaded) { @@ -2944,7 +2943,7 @@ xloadcols(void) { else die("Could not allocate color %d\n", i); } - loaded = true; + loaded = 1; } int @@ -2998,7 +2997,7 @@ xhints(void) { sizeh->width_inc = xw.cw; sizeh->base_height = 2 * borderpx; sizeh->base_width = 2 * borderpx; - if(xw.isfixed == True) { + if(xw.isfixed) { sizeh->flags |= PMaxSize | PMinSize; sizeh->min_width = sizeh->max_width = xw.w; sizeh->min_height = sizeh->max_height = xw.h; @@ -3349,7 +3348,7 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x if(f >= frclen) { if(!font->set) font->set = FcFontSort(0, font->pattern, - FcTrue, 0, &fcres); + 1, 0, &fcres); fcsets[0] = font->set; /* @@ -3365,8 +3364,7 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x FcCharSetAddChar(fccharset, rune); FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset); - FcPatternAddBool(fcpattern, FC_SCALABLE, - FcTrue); + FcPatternAddBool(fcpattern, FC_SCALABLE, 1); FcConfigSubstitute(0, fcpattern, FcMatchPattern); @@ -3664,7 +3662,7 @@ drawregion(int x1, int y1, int x2, int y2) { int i, x, y, ox, numspecs; Glyph base, new; XftGlyphFontSpec* specs; - bool ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN); + int ena_sel = sel.ob.x != -1 && sel.alt == IS_SET(MODE_ALTSCREEN); if(!(xw.state & WIN_VISIBLE)) return; @@ -3757,7 +3755,7 @@ focus(XEvent *ev) { } } -bool +int match(uint mask, uint state) { return mask == XK_ANY_MOD || mask == (state & ~ignoremod); } @@ -4025,7 +4023,7 @@ main(int argc, char *argv[]) { ARGBEGIN { case 'a': - allowaltscreen = false; + allowaltscreen = 0; break; case 'c': opt_class = EARGF(usage()); @@ -4042,7 +4040,7 @@ main(int argc, char *argv[]) { &xw.l, &xw.t, &cols, &rows); break; case 'i': - xw.isfixed = True; + xw.isfixed = 1; break; case 'o': opt_io = EARGF(usage()); -- 1.8.5.5
