]> git.armaanb.net Git - st.git/blobdiff - st.c
Revert "Simplify cursor color handling"
[st.git] / st.c
diff --git a/st.c b/st.c
index 65a0cb61197400aa7dbb79a4ff42a261bad1423f..76bb3eafbe0ba110af5c85465f3a40906cf5f886 100644 (file)
--- a/st.c
+++ b/st.c
@@ -256,10 +256,10 @@ xwrite(int fd, const char *s, size_t len)
 void *
 xmalloc(size_t len)
 {
-       void *p = malloc(len);
+       void *p;
 
-       if (!p)
-               die("Out of memory\n");
+       if (!(p = malloc(len)))
+               die("malloc: %s\n", strerror(errno));
 
        return p;
 }
@@ -268,7 +268,7 @@ void *
 xrealloc(void *p, size_t len)
 {
        if ((p = realloc(p, len)) == NULL)
-               die("Out of memory\n");
+               die("realloc: %s\n", strerror(errno));
 
        return p;
 }
@@ -277,7 +277,7 @@ char *
 xstrdup(char *s)
 {
        if ((s = strdup(s)) == NULL)
-               die("Out of memory\n");
+               die("strdup: %s\n", strerror(errno));
 
        return s;
 }
@@ -446,6 +446,7 @@ selstart(int col, int row, int snap)
        selclear();
        sel.mode = SEL_EMPTY;
        sel.type = SEL_REGULAR;
+       sel.alt = IS_SET(MODE_ALTSCREEN);
        sel.snap = snap;
        sel.oe.x = sel.ob.x = col;
        sel.oe.y = sel.ob.y = row;
@@ -461,7 +462,7 @@ selextend(int col, int row, int type, int done)
 {
        int oldey, oldex, oldsby, oldsey, oldtype;
 
-       if (!sel.mode)
+       if (sel.mode == SEL_IDLE)
                return;
        if (done && sel.mode == SEL_EMPTY) {
                selclear();
@@ -474,7 +475,6 @@ selextend(int col, int row, int type, int done)
        oldsey = sel.ne.y;
        oldtype = sel.type;
 
-       sel.alt = IS_SET(MODE_ALTSCREEN);
        sel.oe.x = col;
        sel.oe.y = row;
        selnormalize();
@@ -687,7 +687,7 @@ execsh(char *cmd, char **args)
        errno = 0;
        if ((pw = getpwuid(getuid())) == NULL) {
                if (errno)
-                       die("getpwuid:%s\n", strerror(errno));
+                       die("getpwuid: %s\n", strerror(errno));
                else
                        die("who are you?\n");
        }
@@ -730,7 +730,7 @@ sigchld(int a)
        pid_t p;
 
        if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
-               die("Waiting for pid %hd failed: %s\n", pid, strerror(errno));
+               die("waiting for pid %hd failed: %s\n", pid, strerror(errno));
 
        if (pid != p)
                return;
@@ -740,7 +740,6 @@ sigchld(int a)
        exit(0);
 }
 
-
 void
 stty(char **args)
 {
@@ -762,7 +761,7 @@ stty(char **args)
        }
        *q = '\0';
        if (system(cmd) != 0)
-           perror("Couldn't call stty");
+               perror("Couldn't call stty");
 }
 
 int
@@ -782,7 +781,8 @@ ttynew(char *line, char *cmd, char *out, char **args)
 
        if (line) {
                if ((cmdfd = open(line, O_RDWR)) < 0)
-                       die("open line failed: %s\n", strerror(errno));
+                       die("open line '%s' failed: %s\n",
+                           line, strerror(errno));
                dup2(cmdfd, 0);
                stty(args);
                return cmdfd;
@@ -794,7 +794,7 @@ ttynew(char *line, char *cmd, char *out, char **args)
 
        switch (pid = fork()) {
        case -1:
-               die("fork failed\n");
+               die("fork failed: %s\n", strerror(errno));
                break;
        case 0:
                close(iofd);
@@ -806,9 +806,17 @@ ttynew(char *line, char *cmd, char *out, char **args)
                        die("ioctl TIOCSCTTY failed: %s\n", strerror(errno));
                close(s);
                close(m);
+#ifdef __OpenBSD__
+               if (pledge("stdio getpw proc exec", NULL) == -1)
+                       die("pledge\n");
+#endif
                execsh(cmd, args);
                break;
        default:
+#ifdef __OpenBSD__
+               if (pledge("stdio rpath tty proc", NULL) == -1)
+                       die("pledge\n");
+#endif
                close(s);
                cmdfd = m;
                signal(SIGCHLD, sigchld);
@@ -827,7 +835,7 @@ ttyread(void)
 
        /* append read bytes to unprocessed bytes */
        if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
-               die("Couldn't read from shell: %s\n", strerror(errno));
+               die("couldn't read from shell: %s\n", strerror(errno));
        buflen += ret;
 
        written = twrite(buf, buflen, 0);