ls,ps,watch: measure terminal width on fd 0, not 1
This commit is contained in:
		@@ -811,7 +811,7 @@ int ls_main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
#if ENABLE_FEATURE_AUTOWIDTH
 | 
			
		||||
	/* Obtain the terminal width */
 | 
			
		||||
	get_terminal_width_height(STDOUT_FILENO, &terminal_width, NULL);
 | 
			
		||||
	get_terminal_width_height(STDIN_FILENO, &terminal_width, NULL);
 | 
			
		||||
	/* Go one less... */
 | 
			
		||||
	terminal_width--;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -803,7 +803,8 @@ extern int crypt_make_salt(char *p, int cnt, int rnd);
 | 
			
		||||
extern int update_passwd(const char *filename, const char *username,
 | 
			
		||||
			const char *new_pw);
 | 
			
		||||
 | 
			
		||||
int get_terminal_width_height(const int fd, int *width, int *height);
 | 
			
		||||
/* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */
 | 
			
		||||
int get_terminal_width_height(int fd, int *width, int *height);
 | 
			
		||||
 | 
			
		||||
int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
 | 
			
		||||
void ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5)));
 | 
			
		||||
 
 | 
			
		||||
@@ -612,7 +612,7 @@ void selinux_or_die(void)
 | 
			
		||||
 | 
			
		||||
/* It is perfectly ok to pass in a NULL for either width or for
 | 
			
		||||
 * height, in which case that value will not be set.  */
 | 
			
		||||
int get_terminal_width_height(const int fd, int *width, int *height)
 | 
			
		||||
int get_terminal_width_height(int fd, int *width, int *height)
 | 
			
		||||
{
 | 
			
		||||
	struct winsize win = { 0, 0, 0, 0 };
 | 
			
		||||
	int ret = ioctl(fd, TIOCGWINSZ, &win);
 | 
			
		||||
 
 | 
			
		||||
@@ -322,7 +322,7 @@ int ps_main(int argc, char **argv)
 | 
			
		||||
	 * and such large widths */
 | 
			
		||||
	terminal_width = MAX_WIDTH;
 | 
			
		||||
	if (isatty(1)) {
 | 
			
		||||
		get_terminal_width_height(1, &terminal_width, NULL);
 | 
			
		||||
		get_terminal_width_height(0, &terminal_width, NULL);
 | 
			
		||||
		if (--terminal_width > MAX_WIDTH)
 | 
			
		||||
			terminal_width = MAX_WIDTH;
 | 
			
		||||
	}
 | 
			
		||||
@@ -364,7 +364,7 @@ int ps_main(int argc, char **argv)
 | 
			
		||||
	if (w_count) {
 | 
			
		||||
		terminal_width = (w_count==1) ? 132 : MAX_WIDTH;
 | 
			
		||||
	} else {
 | 
			
		||||
		get_terminal_width_height(1, &terminal_width, NULL);
 | 
			
		||||
		get_terminal_width_height(0, &terminal_width, NULL);
 | 
			
		||||
		/* Go one less... */
 | 
			
		||||
		if (--terminal_width > MAX_WIDTH)
 | 
			
		||||
			terminal_width = MAX_WIDTH;
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ int watch_main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	unsigned opt;
 | 
			
		||||
	unsigned period = 2;
 | 
			
		||||
	unsigned cmdlen = 1; // 1 for terminal NUL
 | 
			
		||||
	unsigned cmdlen;
 | 
			
		||||
	char *header = NULL;
 | 
			
		||||
	char *cmd;
 | 
			
		||||
	char *tmp;
 | 
			
		||||
@@ -42,6 +42,7 @@ int watch_main(int argc, char **argv)
 | 
			
		||||
	argv += optind;
 | 
			
		||||
 | 
			
		||||
	p = argv;
 | 
			
		||||
	cmdlen = 1; // 1 for terminal NUL
 | 
			
		||||
	while (*p)
 | 
			
		||||
		cmdlen += strlen(*p++) + 1;
 | 
			
		||||
	tmp = cmd = xmalloc(cmdlen);
 | 
			
		||||
@@ -58,7 +59,7 @@ int watch_main(int argc, char **argv)
 | 
			
		||||
			char *thyme;
 | 
			
		||||
			time_t t;
 | 
			
		||||
 | 
			
		||||
			get_terminal_width_height(STDOUT_FILENO, &width, 0);
 | 
			
		||||
			get_terminal_width_height(STDIN_FILENO, &width, 0);
 | 
			
		||||
			header = xrealloc(header, width--);
 | 
			
		||||
			// '%-*s' pads header with spaces to the full width
 | 
			
		||||
			snprintf(header, width, "Every %ds: %-*s", period, width, cmd);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user