]> git.ozlabs.org Git - ccan/blobdiff - ccan/opt/usage.c
opt: only use termios if HAVE_SYS_TERMIOS_H is defined
[ccan] / ccan / opt / usage.c
index 7c1971c2e48ed919db13625c027ffcfc328c8f6c..ef33f9188dd304f41b12f19c6bbd29b3f8a69849 100644 (file)
@@ -1,7 +1,9 @@
 /* Licensed under GPLv3+ - see LICENSE file for details */
 #include <ccan/opt/opt.h>
+#ifdef 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>
@@ -17,19 +19,23 @@ const char opt_hidden[1];
 
 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 HAVE_SYS_TERMIOS_H
+       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.
@@ -60,7 +66,7 @@ static char *add_str_len(char *base, size_t *len, size_t *max,
                         const char *str, size_t slen)
 {
        if (slen >= *max - *len)
-               base = realloc(base, *max = (*max * 2 + slen + 1));
+               base = opt_alloc.realloc(base, *max = (*max * 2 + slen + 1));
        memcpy(base + *len, str, slen);
        *len += slen;
        return base;
@@ -74,7 +80,7 @@ static char *add_str(char *base, size_t *len, size_t *max, const char *str)
 static char *add_indent(char *base, size_t *len, size_t *max, size_t indent)
 {
        if (indent >= *max - *len)
-               base = realloc(base, *max = (*max * 2 + indent + 1));
+               base = opt_alloc.realloc(base, *max = (*max * 2 + indent + 1));
        memset(base + *len, ' ', indent);
        *len += indent;
        return base;