Move *BSD compatibility layer to extra file.
authorMalte S. Stretz <mss@apache.org>
Mon, 20 Jun 2011 13:32:52 +0000 (15:32 +0200)
committerEmil Mikulic <emikulic@gmail.com>
Sun, 26 Jun 2011 06:45:20 +0000 (16:45 +1000)
This makes it easier to silence some warnings.

Makefile.in
bsd.c [new file with mode: 0644]
bsd.h [new file with mode: 0644]
configure.ac
conv.c
conv.h
dns.c
err.c
localip.c
ncache.c
release.sh

index 2f89152..0a6beb5 100644 (file)
@@ -27,6 +27,7 @@ mandir = @mandir@
 SRCS = \
 acct.c         \
 addr.c         \
+bsd.c          \
 cap.c          \
 conv.c         \
 darkstat.c     \
@@ -119,9 +120,10 @@ am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
 am__v_at_0 = @
 
 # Automatically generated dependencies
-acct.o: acct.c acct.h decode.h addr.h conv.h config.h daylog.h graph_db.h \
err.h cdefs.h hosts_db.h localip.h now.h opt.h
+acct.o: acct.c acct.h decode.h addr.h conv.h daylog.h graph_db.h err.h \
+ cdefs.h hosts_db.h localip.h now.h opt.h
 addr.o: addr.c addr.h
+bsd.o: bsd.c bsd.h config.h
 cap.o: cap.c cdefs.h cap.h config.h conv.h decode.h addr.h hosts_db.h \
  localip.h opt.h err.h
 conv.o: conv.c cdefs.h config.h conv.h err.h
@@ -133,17 +135,17 @@ db.o: db.c cdefs.h err.h hosts_db.h addr.h graph_db.h db.h
 decode.o: decode.c cdefs.h acct.h cap.h config.h decode.h addr.h err.h \
  opt.h
 dns.o: dns.c cdefs.h conv.h config.h decode.h addr.h dns.h err.h \
- hosts_db.h queue.h str.h tree.h
-err.o: err.c cdefs.h conv.h config.h err.h opt.h pidfile.h
-graph_db.o: graph_db.c cap.h conv.h config.h db.h acct.h err.h cdefs.h \
str.h html.h graph_db.h now.h opt.h
-hosts_db.o: hosts_db.c cdefs.h conv.h config.h decode.h addr.h dns.h \
err.h hosts_db.h db.h html.h ncache.h now.h opt.h str.h
+ hosts_db.h queue.h str.h tree.h bsd.h
+err.o: err.c cdefs.h err.h opt.h pidfile.h bsd.h config.h
+graph_db.o: graph_db.c cap.h conv.h db.h acct.h err.h cdefs.h str.h \
+ html.h graph_db.h now.h opt.h
+hosts_db.o: hosts_db.c cdefs.h conv.h decode.h addr.h dns.h err.h \
+ hosts_db.h db.h html.h ncache.h now.h opt.h str.h
 hosts_sort.o: hosts_sort.c cdefs.h err.h hosts_db.h addr.h
 html.o: html.c config.h str.h html.h opt.h
 http.o: http.c cdefs.h config.h conv.h err.h graph_db.h hosts_db.h addr.h \
  http.h now.h queue.h str.h stylecss.h graphjs.h
-localip.o: localip.c addr.h config.h conv.h err.h cdefs.h localip.h
-ncache.o: ncache.c conv.h config.h err.h cdefs.h ncache.h tree.h
+localip.o: localip.c addr.h config.h err.h cdefs.h localip.h bsd.h
+ncache.o: ncache.c conv.h err.h cdefs.h ncache.h tree.h bsd.h config.h
 pidfile.o: pidfile.c err.h cdefs.h str.h pidfile.h
-str.o: str.c conv.h config.h err.h cdefs.h str.h
+str.o: str.c conv.h err.h cdefs.h str.h
diff --git a/bsd.c b/bsd.c
new file mode 100644 (file)
index 0000000..71939fd
--- /dev/null
+++ b/bsd.c
@@ -0,0 +1,127 @@
+/* darkstat 3
+ * copyright (c) 2001-2011 Emil Mikulic.
+ *
+ * bsd.c: *BSD compatibility.
+ *
+ * Permission to use, copy, modify, and distribute this file for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "bsd.h"
+
+/* strlcpy() and strlcat() are derived from:
+ *
+ * $OpenBSD: strlcpy.c,v 1.4
+ * $FreeBSD: src/lib/libc/string/strlcpy.c,v 1.8
+ *
+ * $OpenBSD: strlcat.c,v 1.2
+ * $FreeBSD: src/lib/libc/string/strlcat.c,v 1.10
+ *
+ * under the following license:
+ *
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef HAVE_STRLCPY
+/*
+ * Copy src to string dst of size siz.  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcpy(char * restrict dst, const char * restrict src, const size_t siz)
+{
+        char *d = dst;
+        const char *s = src;
+        size_t n = siz;
+
+        /* Copy as many bytes as will fit */
+        if (n != 0 && --n != 0) {
+                do {
+                        if ((*d++ = *s++) == 0)
+                                break;
+                } while (--n != 0);
+        }
+
+        /* Not enough room in dst, add NUL and traverse rest of src */
+        if (n == 0) {
+                if (siz != 0)
+                        *d = '\0';              /* NUL-terminate dst */
+                while (*s++)
+                        ;
+        }
+
+        return (size_t)(s - src - 1); /* count does not include NUL */
+}
+#endif
+
+#ifndef HAVE_STRLCAT
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left).  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+size_t
+strlcat(char * restrict dst, const char * restrict src, const size_t siz)
+{
+        char *d = dst;
+        const char *s = src;
+        size_t n = siz;
+        size_t dlen;
+
+        /* Find the end of dst and adjust bytes left but don't go past end */
+        while (n-- != 0 && *d != '\0')
+                d++;
+        dlen = (size_t)(d - dst);
+        n = siz - dlen;
+
+        if (n == 0)
+                return(dlen + strlen(s));
+        while (*s != '\0') {
+                if (n != 1) {
+                        *d++ = *s;
+                        n--;
+                }
+                s++;
+        }
+        *d = '\0';
+
+        return (dlen + (size_t)(s - src)); /* count does not include NUL */
+}
+#endif
+
+/* vim:set ts=3 sw=3 tw=78 expandtab: */
diff --git a/bsd.h b/bsd.h
new file mode 100644 (file)
index 0000000..38ad70a
--- /dev/null
+++ b/bsd.h
@@ -0,0 +1,27 @@
+/* darkstat 3
+ * copyright (c) 2001-2011 Emil Mikulic.
+ *
+ * bsd.h: *BSD compatibility.
+ */
+
+#include <sys/types.h>
+
+#include "config.h"
+
+#ifndef HAVE_REAL_STRLCPY
+size_t strlcpy(char *dst, const char *src, size_t siz);
+#endif
+
+#ifndef HAVE_REAL_STRLCAT
+size_t strlcat(char *dst, const char *src, size_t siz);
+#endif
+
+#ifndef HAVE_REAL_SETPROCTITLE
+#ifdef HAVE_SETPROCTITLE
+void setproctitle(const char *fmt, ...);
+#else
+#define setproctitle(fmt, ...)
+#endif
+#endif
+
+/* vim:set ts=3 sw=3 tw=78 expandtab: */
index c9b68ab..e9b6568 100644 (file)
@@ -299,17 +299,24 @@ END_MSG
 fi
 
 
-
-# A real OS will have setproctitle()
+# Check for BSD routines.
+AC_CHECK_FUNC(setproctitle,
+ AC_DEFINE(HAVE_REAL_SETPROCTITLE, 1,
+  [Define to 1 if your C lib has setproctitle().]))
+AC_CHECK_FUNC(strlcpy,
+ AC_DEFINE(HAVE_REAL_STRLCPY, 1,
+  [Define to 1 if your C lib has strlcpy().]))
+AC_CHECK_FUNC(strlcat,
+ AC_DEFINE(HAVE_REAL_STRLCAT, 1,
+  [Define to 1 if your C lib has strlcat().]))
+
+# We might find these in libbsd.
 AC_SEARCH_LIBS(setproctitle, [bsd],
  AC_DEFINE(HAVE_SETPROCTITLE, 1,
   [Define to 1 if you have setproctitle().]))
-
-# A real OS will have safe string functions
 AC_SEARCH_LIBS(strlcpy, [bsd],
  AC_DEFINE(HAVE_STRLCPY, 1,
   [Define to 1 if you have strlcpy().]))
-
 AC_SEARCH_LIBS(strlcat, [bsd],
  AC_DEFINE(HAVE_STRLCAT, 1,
   [Define to 1 if you have strlcat().]))
diff --git a/conv.c b/conv.c
index 9512643..431744e 100644 (file)
--- a/conv.c
+++ b/conv.c
@@ -346,111 +346,3 @@ fd_set_block(const int fd)
       err(1, "fcntl(fd %d) to unset O_NONBLOCK", fd);
    assert( (fcntl(fd, F_GETFL, 0) & O_NONBLOCK ) == 0 );
 }
-
-/* strlcpy() and strlcat() are derived from:
- *
- * $OpenBSD: strlcpy.c,v 1.4
- * $FreeBSD: src/lib/libc/string/strlcpy.c,v 1.8
- *
- * $OpenBSD: strlcat.c,v 1.2
- * $FreeBSD: src/lib/libc/string/strlcat.c,v 1.10
- *
- * under the following license:
- *
- * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
- * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef HAVE_STRLCPY
-/*
- * Copy src to string dst of size siz.  At most siz-1 characters
- * will be copied.  Always NUL terminates (unless siz == 0).
- * Returns strlen(src); if retval >= siz, truncation occurred.
- */
-size_t
-strlcpy(char * restrict dst, const char * restrict src, const size_t siz)
-{
-        char *d = dst;
-        const char *s = src;
-        size_t n = siz;
-
-        /* Copy as many bytes as will fit */
-        if (n != 0 && --n != 0) {
-                do {
-                        if ((*d++ = *s++) == 0)
-                                break;
-                } while (--n != 0);
-        }
-
-        /* Not enough room in dst, add NUL and traverse rest of src */
-        if (n == 0) {
-                if (siz != 0)
-                        *d = '\0';              /* NUL-terminate dst */
-                while (*s++)
-                        ;
-        }
-
-        return (size_t)(s - src - 1); /* count does not include NUL */
-}
-#endif
-
-#ifndef HAVE_STRLCAT
-/*
- * Appends src to string dst of size siz (unlike strncat, siz is the
- * full size of dst, not space left).  At most siz-1 characters
- * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).
- * Returns strlen(src) + MIN(siz, strlen(initial dst)).
- * If retval >= siz, truncation occurred.
- */
-size_t
-strlcat(char * restrict dst, const char * restrict src, const size_t siz)
-{
-        char *d = dst;
-        const char *s = src;
-        size_t n = siz;
-        size_t dlen;
-
-        /* Find the end of dst and adjust bytes left but don't go past end */
-        while (n-- != 0 && *d != '\0')
-                d++;
-        dlen = (size_t)(d - dst);
-        n = siz - dlen;
-
-        if (n == 0)
-                return(dlen + strlen(s));
-        while (*s != '\0') {
-                if (n != 1) {
-                        *d++ = *s;
-                        n--;
-                }
-                s++;
-        }
-        *d = '\0';
-
-        return (dlen + (size_t)(s - src)); /* count does not include NUL */
-}
-#endif
-
-/* vim:set ts=3 sw=3 tw=78 expandtab: */
diff --git a/conv.h b/conv.h
index c505f22..223ba53 100644 (file)
--- a/conv.h
+++ b/conv.h
@@ -5,7 +5,6 @@
  */
 
 #include <sys/types.h>
-#include "config.h"
 
 void *xmalloc(const size_t size);
 void *xcalloc(const size_t num, const size_t size);
@@ -23,12 +22,4 @@ void  privdrop(const char *chroot_dir, const char *privdrop_user);
 void  fd_set_nonblock(const int fd);
 void  fd_set_block(const int fd);
 
-#ifndef HAVE_STRLCPY
-size_t strlcpy(char *dst, const char *src, size_t siz);
-#endif
-
-#ifndef HAVE_STRLCAT
-size_t strlcat(char *dst, const char *src, size_t siz);
-#endif
-
 /* vim:set ts=3 sw=3 tw=78 expandtab: */
diff --git a/dns.c b/dns.c
index e1960d8..d9e8247 100644 (file)
--- a/dns.c
+++ b/dns.c
@@ -17,6 +17,7 @@
 #include "queue.h"
 #include "str.h"
 #include "tree.h"
+#include "bsd.h" /* for setproctitle, strlcpy */
 
 #include <sys/param.h>
 #include <sys/socket.h>
@@ -295,9 +296,7 @@ dns_main(void)
 {
    struct addr ip;
 
-#ifdef HAVE_SETPROCTITLE
    setproctitle("DNS child");
-#endif
    fd_set_nonblock(sock[CHILD]);
    verbosef("DNS child entering main DNS loop");
    for (;;) {
diff --git a/err.c b/err.c
index e42a1ba..358e564 100644 (file)
--- a/err.c
+++ b/err.c
  */
 
 #include "cdefs.h"
-#include "conv.h"
 #include "err.h"
 #include "opt.h"
 #include "pidfile.h"
+#include "bsd.h" /* for strlcpy */
 
 #include <errno.h>
 #include <stdarg.h>
index 15daa46..c698bcf 100644 (file)
--- a/localip.c
+++ b/localip.c
@@ -9,9 +9,9 @@
 
 #include "addr.h"
 #include "config.h" /* for HAVE_IFADDRS_H */
-#include "conv.h" /* for strlcpy */
 #include "err.h"
 #include "localip.h"
+#include "bsd.h" /* for strlcpy */
 
 #include <sys/socket.h>
 #include <net/if.h>
index 5ac2b05..96e052f 100644 (file)
--- a/ncache.c
+++ b/ncache.c
@@ -11,6 +11,7 @@
 #include "err.h"
 #include "ncache.h"
 #include "tree.h"
+#include "bsd.h" /* for strlcpy */
 
 #include <netinet/in.h> /* ntohs */
 #include <netdb.h>
index 0b3e4fc..e831e1e 100755 (executable)
@@ -27,6 +27,8 @@ acct.c \
 acct.h \
 addr.c \
 addr.h \
+bsd.c \
+bsd.h \
 cap.c \
 cap.h \
 cdefs.h \