tLimit usage of extern to config.h globals - st - [fork] customized build of st… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 30683c70ab62fd37b5921cf72077b9aef2cb842e | |
parent a3beb626d2dae9d4d0883c7c8cb6ba58b0609105 | |
Author: Devin J. Pohly <[email protected]> | |
Date: Sat, 24 Feb 2018 16:16:12 -0600 | |
Limit usage of extern to config.h globals | |
Prefer passing arguments to declaring external global variables. The | |
only remaining usage of extern is for config.h variables which are | |
needed in st.c instead of x.c (where it is now included). | |
Signed-off-by: Devin J. Pohly <[email protected]> | |
Diffstat: | |
M config.def.h | 2 +- | |
M st.c | 29 +++++++++++++++++------------ | |
M st.h | 9 ++------- | |
M x.c | 16 +++++++++------- | |
4 files changed, 29 insertions(+), 27 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -16,7 +16,7 @@ static int borderpx = 2; | |
* 4: value of shell in /etc/passwd | |
* 5: value of shell in config.h | |
*/ | |
-char *shell = "/bin/sh"; | |
+static char *shell = "/bin/sh"; | |
char *utmp = NULL; | |
char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; | |
diff --git a/st.c b/st.c | |
t@@ -136,8 +136,7 @@ typedef struct { | |
int narg; /* nb of args */ | |
} STREscape; | |
- | |
-static void execsh(char **); | |
+static void execsh(char *, char **); | |
static void stty(char **); | |
static void sigchld(int); | |
static void ttywriteraw(const char *, size_t); | |
t@@ -201,15 +200,13 @@ static char *base64dec(const char *); | |
static ssize_t xwrite(int, const char *, size_t); | |
/* Globals */ | |
-int cmdfd; | |
-pid_t pid; | |
-int oldbutton = 3; /* button event on startup: 3 = release */ | |
- | |
static Term term; | |
static Selection sel; | |
static CSIEscape csiescseq; | |
static STREscape strescseq; | |
static int iofd = 1; | |
+static int cmdfd; | |
+static pid_t pid; | |
static uchar utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0}; | |
static uchar utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8}; | |
t@@ -659,7 +656,7 @@ die(const char *errstr, ...) | |
} | |
void | |
-execsh(char **args) | |
+execsh(char *cmd, char **args) | |
{ | |
char *sh, *prog; | |
const struct passwd *pw; | |
t@@ -673,7 +670,7 @@ execsh(char **args) | |
} | |
if ((sh = getenv("SHELL")) == NULL) | |
- sh = (pw->pw_shell[0]) ? pw->pw_shell : shell; | |
+ sh = (pw->pw_shell[0]) ? pw->pw_shell : cmd; | |
if (args) | |
prog = args[0]; | |
t@@ -745,8 +742,8 @@ stty(char **args) | |
perror("Couldn't call stty"); | |
} | |
-void | |
-ttynew(char *line, char *out, char **args) | |
+int | |
+ttynew(char *line, char *cmd, char *out, char **args) | |
{ | |
int m, s; | |
t@@ -765,7 +762,7 @@ ttynew(char *line, char *out, char **args) | |
die("open line failed: %s\n", strerror(errno)); | |
dup2(cmdfd, 0); | |
stty(args); | |
- return; | |
+ return cmdfd; | |
} | |
/* seems to work fine on linux, openbsd and freebsd */ | |
t@@ -786,7 +783,7 @@ ttynew(char *line, char *out, char **args) | |
die("ioctl TIOCSCTTY failed: %s\n", strerror(errno)); | |
close(s); | |
close(m); | |
- execsh(args); | |
+ execsh(cmd, args); | |
break; | |
default: | |
close(s); | |
t@@ -794,6 +791,7 @@ ttynew(char *line, char *out, char **args) | |
signal(SIGCHLD, sigchld); | |
break; | |
} | |
+ return cmdfd; | |
} | |
size_t | |
t@@ -916,6 +914,13 @@ ttyresize(int tw, int th) | |
fprintf(stderr, "Couldn't set window size: %s\n", strerror(err… | |
} | |
+void | |
+ttyhangup() | |
+{ | |
+ /* Send SIGHUP to shell */ | |
+ kill(pid, SIGHUP); | |
+} | |
+ | |
int | |
tattrset(int attr) | |
{ | |
diff --git a/st.h b/st.h | |
t@@ -125,7 +125,8 @@ int tattrset(int); | |
void tnew(int, int); | |
void tresize(int, int); | |
void tsetdirtattr(int); | |
-void ttynew(char *, char *, char **); | |
+void ttyhangup(void); | |
+int ttynew(char *, char *, char *, char **); | |
size_t ttyread(void); | |
void ttyresize(int, int); | |
void ttywrite(const char *, size_t, int); | |
t@@ -147,13 +148,7 @@ void *xmalloc(size_t); | |
void *xrealloc(void *, size_t); | |
char *xstrdup(char *); | |
-/* Globals */ | |
-extern int cmdfd; | |
-extern pid_t pid; | |
-extern int oldbutton; | |
- | |
/* config.h globals */ | |
-extern char *shell; | |
extern char *utmp; | |
extern char *stty_args; | |
extern char *vtiden; | |
diff --git a/x.c b/x.c | |
t@@ -227,6 +227,8 @@ static char *opt_line = NULL; | |
static char *opt_name = NULL; | |
static char *opt_title = NULL; | |
+static int oldbutton = 3; /* button event on startup: 3 = release */ | |
+ | |
void | |
clipcopy(const Arg *dummy) | |
{ | |
t@@ -1733,8 +1735,7 @@ cmessage(XEvent *e) | |
win.mode &= ~MODE_FOCUSED; | |
} | |
} else if (e->xclient.data.l[0] == xw.wmdeletewin) { | |
- /* Send SIGHUP to shell */ | |
- kill(pid, SIGHUP); | |
+ ttyhangup(); | |
exit(0); | |
} | |
} | |
t@@ -1755,6 +1756,7 @@ run(void) | |
int w = win.w, h = win.h; | |
fd_set rfd; | |
int xfd = XConnectionNumber(xw.dpy), xev, blinkset = 0, dodraw = 0; | |
+ int ttyfd; | |
struct timespec drawtimeout, *tv = NULL, now, last, lastblink; | |
long deltatime; | |
t@@ -1774,7 +1776,7 @@ run(void) | |
} | |
} while (ev.type != MapNotify); | |
- ttynew(opt_line, opt_io, opt_cmd); | |
+ ttyfd = ttynew(opt_line, shell, opt_io, opt_cmd); | |
cresize(w, h); | |
clock_gettime(CLOCK_MONOTONIC, &last); | |
t@@ -1782,15 +1784,15 @@ run(void) | |
for (xev = actionfps;;) { | |
FD_ZERO(&rfd); | |
- FD_SET(cmdfd, &rfd); | |
+ FD_SET(ttyfd, &rfd); | |
FD_SET(xfd, &rfd); | |
- if (pselect(MAX(xfd, cmdfd)+1, &rfd, NULL, NULL, tv, NULL) < 0… | |
+ if (pselect(MAX(xfd, ttyfd)+1, &rfd, NULL, NULL, tv, NULL) < 0… | |
if (errno == EINTR) | |
continue; | |
die("select failed: %s\n", strerror(errno)); | |
} | |
- if (FD_ISSET(cmdfd, &rfd)) { | |
+ if (FD_ISSET(ttyfd, &rfd)) { | |
ttyread(); | |
if (blinktimeout) { | |
blinkset = tattrset(ATTR_BLINK); | |
t@@ -1834,7 +1836,7 @@ run(void) | |
if (xev && !FD_ISSET(xfd, &rfd)) | |
xev--; | |
- if (!FD_ISSET(cmdfd, &rfd) && !FD_ISSET(xfd, &rfd)) { | |
+ if (!FD_ISSET(ttyfd, &rfd) && !FD_ISSET(xfd, &rfd)) { | |
if (blinkset) { | |
if (TIMEDIFF(now, lastblink) \ | |
> blinktimeout) { |