/* Licensed under GPLv3+ - see LICENSE file for details */
#include <ccan/opt/opt.h>
+#if HAVE_SYS_TERMIOS_H
#include <sys/ioctl.h>
#include <sys/termios.h> /* Required on Solaris for struct winsize */
+#endif
#include <sys/unistd.h> /* Required on Solaris for ioctl */
#include <string.h>
#include <stdlib.h>
static unsigned int get_columns(void)
{
- struct winsize w;
+ int ws_col = 0;
const char *env = getenv("COLUMNS");
- w.ws_col = 0;
if (env)
- w.ws_col = atoi(env);
- if (!w.ws_col)
- if (ioctl(0, TIOCGWINSZ, &w) == -1)
- w.ws_col = 0;
- if (!w.ws_col)
- w.ws_col = 80;
-
- return w.ws_col;
+ ws_col = atoi(env);
+
+#ifdef TIOCGWINSZ
+ if (!ws_col)
+ {
+ struct winsize w;
+ if (ioctl(0, TIOCGWINSZ, &w) != -1)
+ ws_col = w.ws_col;
+ }
+#endif
+ if (!ws_col)
+ ws_col = 80;
+
+ return ws_col;
}
/* Return number of chars of words to put on this line.
size_t oldlen, len;
/* Swallow leading whitespace. */
- *prefix = strspn(words, " ");
+ *prefix = strspn(words, " \n");
words += *prefix;
/* Use at least one word, even if it takes us over maxlen. */
while (len <= maxlen) {
oldlen = len;
len += strspn(words+len, " ");
- len += strcspn(words+len, " ");
+ if (words[len] == '\n')
+ break;
+ len += strcspn(words+len, " \n");
if (len == oldlen)
break;
}