Xinqi Bao's Git
projects
/
st.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Enforce a terminal size to reduce race conditions in too efficient apps.
[st.git]
/
st.c
diff --git
a/st.c
b/st.c
index
900534b
..
3a0a519
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-1440,6
+1440,8
@@
ttynew(void)
if (openpty(&m, &s, NULL, NULL, &w) < 0)
die("openpty failed: %s\n", strerror(errno));
if (openpty(&m, &s, NULL, NULL, &w) < 0)
die("openpty failed: %s\n", strerror(errno));
+ ttyresize();
+
switch (pid = fork()) {
case -1:
die("fork failed\n");
switch (pid = fork()) {
case -1:
die("fork failed\n");
@@
-1518,15
+1520,13
@@
ttywrite(const char *s, size_t n)
continue;
die("select failed: %s\n", strerror(errno));
}
continue;
die("select failed: %s\n", strerror(errno));
}
- if (FD_ISSET(cmdfd, &rfd))
- lim = ttyread();
if (FD_ISSET(cmdfd, &wfd)) {
/*
if (FD_ISSET(cmdfd, &wfd)) {
/*
- * Only write
256 bytes at maximum. This seems to be a
- *
reasonable value for a serial line. Bigger values
- * might clog the I/O.
+ * Only write
the bytes written by ttywrite() or the
+ *
default of 256. This seems to be a reasonable value
+ *
for a serial line. Bigger values
might clog the I/O.
*/
*/
- if ((r = write(cmdfd, s, (n <
256)? n : 256
)) < 0)
+ if ((r = write(cmdfd, s, (n <
lim)? n : lim
)) < 0)
goto write_error;
if (r < n) {
/*
goto write_error;
if (r < n) {
/*
@@
-1543,6
+1543,8
@@
ttywrite(const char *s, size_t n)
break;
}
}
break;
}
}
+ if (FD_ISSET(cmdfd, &rfd))
+ lim = ttyread();
}
return;
}
return;
@@
-3237,7
+3239,7
@@
xclear(int x1, int y1, int x2, int y2)
void
xhints(void)
{
void
xhints(void)
{
- XClassHint class = {
opt_class ? opt_class : termname,
termname};
+ XClassHint class = {
termname, opt_class ? opt_class :
termname};
XWMHints wm = {.flags = InputHint, .input = 1};
XSizeHints *sizeh = NULL;
XWMHints wm = {.flags = InputHint, .input = 1};
XSizeHints *sizeh = NULL;
@@
-3469,7
+3471,7
@@
xinit(void)
if (xw.gm & XNegative)
xw.l += DisplayWidth(xw.dpy, xw.scr) - xw.w - 2;
if (xw.gm & YNegative)
if (xw.gm & XNegative)
xw.l += DisplayWidth(xw.dpy, xw.scr) - xw.w - 2;
if (xw.gm & YNegative)
- xw.t += Display
Width
(xw.dpy, xw.scr) - xw.h - 2;
+ xw.t += Display
Height
(xw.dpy, xw.scr) - xw.h - 2;
/* Events */
xw.attrs.background_pixel = dc.col[defaultbg].pixel;
/* Events */
xw.attrs.background_pixel = dc.col[defaultbg].pixel;
@@
-4329,7
+4331,7
@@
run(void)
void
usage(void)
{
void
usage(void)
{
- die("%s " VERSION " (c) 2010-201
5
st engineers\n"
+ die("%s " VERSION " (c) 2010-201
6
st engineers\n"
"usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
" [-i] [-t title] [-T title] [-w windowid] [-e command ...]"
" [command ...]\n"
"usage: st [-a] [-v] [-c class] [-f font] [-g geometry] [-o file]\n"
" [-i] [-t title] [-T title] [-w windowid] [-e command ...]"
" [command ...]\n"