diff options
author | Rob Landley <rob@landley.net> | 2013-11-07 09:04:50 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2013-11-07 09:04:50 -0600 |
commit | 10bdaa42275810fa2828a7e6235a219779e1d85b (patch) | |
tree | cd2c6baff0c25e2f23fb6ddeb8f9690033104294 /lib | |
parent | 938b830abadd2a9dd4260bea3636e188f925959e (diff) | |
download | toybox-10bdaa42275810fa2828a7e6235a219779e1d85b.tar.gz |
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
(If you set $COLUMNS but not $ROWS, we assume you're happy with the 80x25 default for the other.)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/lib.c | 16 | ||||
-rw-r--r-- | lib/lib.h | 2 |
2 files changed, 11 insertions, 7 deletions
@@ -482,15 +482,16 @@ void crc_init(unsigned int *crc_table, int little_endian) } // Quick and dirty query size of terminal, doesn't do ANSI probe fallback. -// set *x=0 and *y=0 before calling to detect failure to set either, or -// x=80 y=25 to provide defaults +// set x=80 y=25 before calling to provide defaults. Returns 0 if couldn't +// determine size. -void terminal_size(unsigned *xx, unsigned *yy) +int terminal_size(unsigned *xx, unsigned *yy) { struct winsize ws; - unsigned i, x = xx ? *xx : 0, y = yy ? *yy : 0; + unsigned i, x = 0, y = 0; char *s; + // stdin, stdout, stderr for (i=0; i<3; i++) { memset(&ws, 0, sizeof(ws)); if (!ioctl(i, TIOCGWINSZ, &ws)) { @@ -505,8 +506,11 @@ void terminal_size(unsigned *xx, unsigned *yy) s = getenv("ROWS"); if (s) sscanf(s, "%u", &y); - if (xx) *xx = x; - if (yy) *yy = y; + // Never return 0 for either value, leave it at default instead. + if (xx && x) *xx = x; + if (yy && y) *yy = y; + + return x || y; } int yesno(char *prompt, int def) @@ -156,7 +156,7 @@ int copy_tempfile(int fdin, char *name, char **tempname); void delete_tempfile(int fdin, int fdout, char **tempname); void replace_tempfile(int fdin, int fdout, char **tempname); void crc_init(unsigned int *crc_table, int little_endian); -void terminal_size(unsigned *x, unsigned *y); +int terminal_size(unsigned *x, unsigned *y); int yesno(char *prompt, int def); void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)); |