+
+// xstat() - a stat() which dies on failure with meaningful error message
+void xstat(char *name, struct stat *stat_buf)
+{
+ if (stat(name, stat_buf))
+ bb_perror_msg_and_die("can't stat '%s'", name);
+}
+
+/* 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(int fd, int *width, int *height)
+{
+ struct winsize win = { 0, 0, 0, 0 };
+ int ret = ioctl(fd, TIOCGWINSZ, &win);
+ if (!win.ws_row) {
+ char *s = getenv("LINES");
+ if (s) win.ws_row = atoi(s);
+ }
+ if (win.ws_row <= 1) win.ws_row = 24;
+ if (!win.ws_col) {
+ char *s = getenv("COLUMNS");
+ if (s) win.ws_col = atoi(s);
+ }
+ if (win.ws_col <= 1) win.ws_col = 80;
+ if (height) *height = (int) win.ws_row;
+ if (width) *width = (int) win.ws_col;
+
+ return ret;
+}