Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Pledge on OpenBSD
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
46c954b
..
b9750f2
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-28,6
+28,10
@@
#include <libutil.h>
#endif
#include <libutil.h>
#endif
+#ifndef __OpenBSD__
+#define pledge(a,b) 0
+#endif
+
/* Arbitrary sizes */
#define UTF_INVALID 0xFFFD
#define UTF_SIZ 4
/* Arbitrary sizes */
#define UTF_INVALID 0xFFFD
#define UTF_SIZ 4
@@
-256,10
+260,10
@@
xwrite(int fd, const char *s, size_t len)
void *
xmalloc(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;
}
return p;
}
@@
-268,7
+272,7
@@
void *
xrealloc(void *p, size_t len)
{
if ((p = realloc(p, len)) == NULL)
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;
}
return p;
}
@@
-277,7
+281,7
@@
char *
xstrdup(char *s)
{
if ((s = strdup(s)) == NULL)
xstrdup(char *s)
{
if ((s = strdup(s)) == NULL)
- die("
Out of memory\n"
);
+ die("
strdup: %s\n", strerror(errno)
);
return s;
}
return s;
}
@@
-446,6
+450,7
@@
selstart(int col, int row, int snap)
selclear();
sel.mode = SEL_EMPTY;
sel.type = SEL_REGULAR;
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;
sel.snap = snap;
sel.oe.x = sel.ob.x = col;
sel.oe.y = sel.ob.y = row;
@@
-474,7
+479,6
@@
selextend(int col, int row, int type, int done)
oldsey = sel.ne.y;
oldtype = sel.type;
oldsey = sel.ne.y;
oldtype = sel.type;
- sel.alt = IS_SET(MODE_ALTSCREEN);
sel.oe.x = col;
sel.oe.y = row;
selnormalize();
sel.oe.x = col;
sel.oe.y = row;
selnormalize();
@@
-687,7
+691,7
@@
execsh(char *cmd, char **args)
errno = 0;
if ((pw = getpwuid(getuid())) == NULL) {
if (errno)
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");
}
else
die("who are you?\n");
}
@@
-730,7
+734,7
@@
sigchld(int a)
pid_t p;
if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
pid_t p;
if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
- die("
W
aiting for pid %hd failed: %s\n", pid, strerror(errno));
+ die("
w
aiting for pid %hd failed: %s\n", pid, strerror(errno));
if (pid != p)
return;
if (pid != p)
return;
@@
-781,7
+785,8
@@
ttynew(char *line, char *cmd, char *out, char **args)
if (line) {
if ((cmdfd = open(line, O_RDWR)) < 0)
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;
dup2(cmdfd, 0);
stty(args);
return cmdfd;
@@
-793,7
+798,7
@@
ttynew(char *line, char *cmd, char *out, char **args)
switch (pid = fork()) {
case -1:
switch (pid = fork()) {
case -1:
- die("fork failed
\n"
);
+ die("fork failed
: %s\n", strerror(errno)
);
break;
case 0:
close(iofd);
break;
case 0:
close(iofd);
@@
-805,9
+810,13
@@
ttynew(char *line, char *cmd, char *out, char **args)
die("ioctl TIOCSCTTY failed: %s\n", strerror(errno));
close(s);
close(m);
die("ioctl TIOCSCTTY failed: %s\n", strerror(errno));
close(s);
close(m);
+ if (pledge("stdio getpw proc exec", NULL) == -1)
+ die("pledge\n");
execsh(cmd, args);
break;
default:
execsh(cmd, args);
break;
default:
+ if (pledge("stdio rpath tty proc", NULL) == -1)
+ die("pledge\n");
close(s);
cmdfd = m;
signal(SIGCHLD, sigchld);
close(s);
cmdfd = m;
signal(SIGCHLD, sigchld);
@@
-826,7
+835,7
@@
ttyread(void)
/* append read bytes to unprocessed bytes */
if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
/* append read bytes to unprocessed bytes */
if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
- die("
C
ouldn't read from shell: %s\n", strerror(errno));
+ die("
c
ouldn't read from shell: %s\n", strerror(errno));
buflen += ret;
written = twrite(buf, buflen, 0);
buflen += ret;
written = twrite(buf, buflen, 0);