Fix warnings, bring in restrict keyword, modernize strl{cpy,cat}
authorEmil Mikulic <emikulic@gmail.com>
Sun, 15 May 2011 13:04:39 +0000 (23:04 +1000)
committerEmil Mikulic <emikulic@gmail.com>
Sat, 4 Jun 2011 14:00:30 +0000 (00:00 +1000)
acct.c
conv.c
conv.h
darkstat.c
darkstat.h
decode.c
dns.c
err.c
err.h
hosts_db.c

diff --git a/acct.c b/acct.c
index 4b04793..e245e36 100644 (file)
--- a/acct.c
+++ b/acct.c
@@ -46,7 +46,8 @@ void
 acct_init_localnet(const char *spec)
 {
    char **tokens;
-   int num_tokens, isnum, j, ret;
+   unsigned int num_tokens;
+   int isnum, j, ret;
    int pfxlen, octets, remainder;
    struct addr localnet, localmask;
 
@@ -84,8 +85,9 @@ acct_init_localnet(const char *spec)
       localmask.family = localnet.family;
 
       /* Compute the prefix length.  */
-      pfxlen = strtonum(tokens[1], 1,
-                        (localnet.family == IPv6) ? 128 : 32, NULL);
+      pfxlen = (int)strtonum(tokens[1], 1,
+         (localnet.family == IPv6) ? 128 : 32, NULL);
+
       if (pfxlen == 0)
          errx(1, "invalid network prefix length \"%s\"", tokens[1]);
 
@@ -103,7 +105,7 @@ acct_init_localnet(const char *spec)
       for (j = 0; j < octets; ++j)
          p[j] = 0xff;
 
-      frac = 0xff << (8 - remainder);
+      frac = (uint8_t)(0xff << (8 - remainder));
       if (frac)
          p[j] = frac;   /* Have contribution for next position.  */
    }
diff --git a/conv.c b/conv.c
index 52c249a..f45ae6e 100644 (file)
--- a/conv.c
+++ b/conv.c
@@ -136,9 +136,9 @@ str_starts_with(const char *haystack, const char *needle)
  *    num_chunks = 2, chunks = { "one", "two", NULL }
  */
 char **
-split(const char delimiter, const char *str, int *num_chunks)
+split(const char delimiter, const char *str, unsigned int *num_chunks)
 {
-   int num = 0;
+   unsigned int num = 0;
    char **chunks = NULL;
    size_t left, right = 0;
 
@@ -244,7 +244,8 @@ daemonize_start(void)
       verbosef("parent waiting");
       if (close(lifeline[1]) == -1)
          warn("close lifeline in parent");
-      read(lifeline[0], tmp, sizeof(tmp));
+      if (read(lifeline[0], tmp, sizeof(tmp)) != 0) /* expecting EOF */
+         err(1, "lifeline read() failed");
       verbosef("parent done reading, calling waitpid");
       w = waitpid(f, &status, WNOHANG);
       verbosef("waitpid ret %d, status is %d", w, status);
@@ -387,10 +388,8 @@ fd_set_block(const int fd)
  * will be copied.  Always NUL terminates (unless siz == 0).
  * Returns strlen(src); if retval >= siz, truncation occurred.
  */
-size_t strlcpy(dst, src, siz)
-        char *dst;
-        const char *src;
-        size_t siz;
+size_t
+strlcpy(char * restrict dst, const char * restrict src, const size_t siz)
 {
         char *d = dst;
         const char *s = src;
@@ -412,7 +411,7 @@ size_t strlcpy(dst, src, siz)
                         ;
         }
 
-        return(s - src - 1);    /* count does not include NUL */
+        return (size_t)(s - src - 1); /* count does not include NUL */
 }
 #endif
 
@@ -425,10 +424,7 @@ size_t strlcpy(dst, src, siz)
  * If retval >= siz, truncation occurred.
  */
 size_t
-strlcat(dst, src, siz)
-        char *dst;
-        const char *src;
-        size_t siz;
+strlcat(char * restrict dst, const char * restrict src, const size_t siz)
 {
         char *d = dst;
         const char *s = src;
@@ -438,7 +434,7 @@ strlcat(dst, src, siz)
         /* Find the end of dst and adjust bytes left but don't go past end */
         while (n-- != 0 && *d != '\0')
                 d++;
-        dlen = d - dst;
+        dlen = (size_t)(d - dst);
         n = siz - dlen;
 
         if (n == 0)
@@ -452,7 +448,7 @@ strlcat(dst, src, siz)
         }
         *d = '\0';
 
-        return(dlen + (s - src));       /* count does not include NUL */
+        return (dlen + (size_t)(s - src)); /* count does not include NUL */
 }
 #endif
 
diff --git a/conv.h b/conv.h
index 4377c0d..b354b0a 100644 (file)
--- a/conv.h
+++ b/conv.h
@@ -13,7 +13,7 @@ char *xstrdup(const char *s);
 char *split_string(const char *src, const size_t left, const size_t right);
 void  strntoupper(char *str, const size_t length);
 int   str_starts_with(const char *haystack, const char *needle);
-char**split(const char delimiter, const char *str, int *num_chunks);
+char**split(const char delimiter, const char *str, unsigned int *num_chunks);
 char *qs_get(const char *qs, const char *key);
 
 void  daemonize_start(void);
index c2c2418..7c8f19d 100644 (file)
@@ -79,7 +79,8 @@ const char *capfile = NULL;
 static void cb_capfile(const char *arg) { capfile = arg; }
 
 int want_snaplen = -1;
-static void cb_snaplen(const char *arg) { want_snaplen = parsenum(arg, 0); }
+static void cb_snaplen(const char *arg)
+{ want_snaplen = (int)parsenum(arg, 0); }
 
 int want_pppoe = 0;
 static void cb_pppoe(const char *arg _unused_) { want_pppoe = 1; }
@@ -104,7 +105,8 @@ int want_lastseen = 1;
 static void cb_no_lastseen(const char *arg _unused_) { want_lastseen = 0; }
 
 unsigned short bindport = 667;
-static void cb_port(const char *arg) { bindport = parsenum(arg, 65536); }
+static void cb_port(const char *arg)
+{ bindport = (unsigned short)parsenum(arg, 65536); }
 
 const char *bindaddr = NULL;
 static void cb_bindaddr(const char *arg)
@@ -202,7 +204,7 @@ static void cb_highest_port(const char *arg)
 
 int wait_secs = -1;
 static void cb_wait_secs(const char *arg)
-{ wait_secs = parsenum(arg, 0); }
+{ wait_secs = (int)parsenum(arg, 0); }
 
 int want_hexdump = 0;
 static void cb_hexdump(const char *arg _unused_) { want_hexdump = 1; }
index 0b909b3..0124cdc 100644 (file)
 #ifdef __GNUC__
 # define _unused_ __attribute__((__unused__))
 # define _noreturn_ __attribute__((__noreturn__))
+# define _printflike_(fmtarg, firstvararg) \
+   __attribute__((__format__ (__printf__, fmtarg, firstvararg) ))
 #else
 # define _unused_
 # define _noreturn_
+# define _printflike_(fmtarg, firstvararg)
 #endif
 
 #if __GNUC__ == 2
 # endif
 #endif
 
+#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901
+#define restrict __restrict
+#endif
+
 #ifndef max
 # define max(a,b) ((a) > (b) ? (a) : (b))
 #endif
index 766b769..b6f0449 100644 (file)
--- a/decode.c
+++ b/decode.c
@@ -127,9 +127,7 @@ getlinkhdr(const int linktype)
 int
 getsnaplen(const struct linkhdr *lh)
 {
-   assert(lh != NULL);
-   /* TODO MEA Investigate why the supplementary value 20 is needed on GNU/Linux.  */
-   return (20 + lh->hdrlen + IPV6_HDR_LEN + max(TCP_HDR_LEN, UDP_HDR_LEN));
+   return (int)(lh->hdrlen + IPV6_HDR_LEN + max(TCP_HDR_LEN, UDP_HDR_LEN));
 }
 
 /* Decoding functions. */
diff --git a/dns.c b/dns.c
index 1c6dc24..74dfd25 100644 (file)
--- a/dns.c
+++ b/dns.c
@@ -28,7 +28,7 @@
 #include <string.h>
 #include <unistd.h>
 
-static void dns_main(void); /* this is what the child process runs */
+static void dns_main(void) _noreturn_; /* the child process runs this */
 
 #define CHILD 0 /* child process uses this socket */
 #define PARENT 1
diff --git a/err.c b/err.c
index eb2a24a..6c6ecfd 100644 (file)
--- a/err.c
+++ b/err.c
@@ -30,6 +30,9 @@
 #include <unistd.h>
 #include <unistd.h>
 
+static void to_syslog(const char *type, const int want_err,
+          const char *format, va_list va) _printflike_(3, 0);
+
 static void
 to_syslog(const char *type, const int want_err,
           const char *format, va_list va)
diff --git a/err.h b/err.h
index 8efe0b1..92cb079 100644 (file)
--- a/err.h
+++ b/err.h
 
 #include "darkstat.h"
 
-void err(const int code, const char *format, ...) _noreturn_;
-void errx(const int code, const char *format, ...) _noreturn_;
+void err(const int code, const char *format, ...)
+   _noreturn_ _printflike_(2, 3);
+void errx(const int code, const char *format, ...)
+   _noreturn_ _printflike_(2, 3);
 
-void warn(const char *format, ...);
-void warnx(const char *format, ...);
+void warn(const char *format, ...) _printflike_(1, 2);
+void warnx(const char *format, ...) _printflike_(1, 2);
 
 extern int want_verbose, want_syslog;
-void verbosef(const char *format, ...);
+void verbosef(const char *format, ...) _printflike_(1, 2);
 void dverbosef(const char *format _unused_, ...);
 
 /* vim:set ts=3 sw=3 tw=78 expandtab: */
index 184ea91..10f8a9a 100644 (file)
@@ -856,7 +856,7 @@ static struct str *html_hosts_detail(const char *ip);
 struct str *
 html_hosts(const char *uri, const char *query)
 {
-   int i, num_elems;
+   unsigned int i, num_elems;
    char **elem = split('/', uri, &num_elems);
    struct str *buf = NULL;
 
@@ -881,11 +881,11 @@ html_hosts(const char *uri, const char *query)
  * Format hashtable into HTML.
  */
 static void
-format_table(struct str *buf, struct hashtable *ht, int start,
+format_table(struct str *buf, struct hashtable *ht, unsigned int start,
    const enum sort_dir sort, const int full)
 {
    const struct bucket **table;
-   uint32_t i, pos, end;
+   unsigned int i, pos, end;
    int alt = 0;
 
    if ((ht == NULL) || (ht->count == 0)) {
@@ -982,7 +982,9 @@ html_hosts_main(const char *qs)
    sortstr = qs_sort;
    if (sortstr == NULL) sortstr = "total";
    if (start > 0) {
-      int prev = max(start - MAX_ENTRIES, 0);
+      int prev = start - MAX_ENTRIES;
+      if (prev < 0)
+         prev = 0;
       str_appendf(buf, "<a href=\"?start=%d&sort=%s\">" PREV "</a>",
          prev, sortstr);
    } else