]> The Tcpdump Group git mirrors - libpcap/commitdiff
Move portability declarations/definitions to portability.h.
authorGuy Harris <[email protected]>
Thu, 28 Jul 2016 21:17:51 +0000 (14:17 -0700)
committerGuy Harris <[email protected]>
Thu, 28 Jul 2016 21:17:51 +0000 (14:17 -0700)
sockutils.c needs them, but doesn't need pcap-int.h, so create a
separate header for them.

Consistently use _WIN32 as the #ifdef test in sockutils.c, while we're
at it.

Makefile.in
pcap-int.h
portability.h [new file with mode: 0644]
sockutils.c

index 061c102528d47a14b6b4e0973bd9d12ff7f70243..14be970feaa5794bbb42e2ca7c4d32fb31b6f672 100644 (file)
@@ -121,6 +121,7 @@ HDR = $(PUBHDR) \
        pcap-common.h \
        pcap-int.h \
        pcap-stdinc.h \
+       portability.h \
        ppp.h \
        sf-pcap.h \
        sf-pcap-ng.h \
index 288e6ae39cabd8fa4ae333df029df53874943e40..8baa7ada6e88873c1e7381c80651d2a6d7aea952 100644 (file)
@@ -364,75 +364,9 @@ struct oneshot_userdata {
 
 int    pcap_offline_read(pcap_t *, int, pcap_handler, u_char *);
 
-#ifndef HAVE_STRLCPY
- /*
-  * Macro that does the same thing as strlcpy().
-  */
- #ifdef _WIN32
-  /*
-   * strncpy_s() is supported at least back to Visual
-   * Studio 2005.
-   */
-  #define strlcpy(x, y, z) \
-       strncpy_s((x), (z), (y), _TRUNCATE)
-
- #else
-  #define strlcpy(x, y, z) \
-       (strncpy((x), (y), (z)), \
-        ((z) <= 0 ? 0 : ((x)[(z) - 1] = '\0')), \
-        (void) strlen((y)))
- #endif
-#endif
-
 #include <stdarg.h>
 
-/*
- * For flagging arguments as format strings in MSVC.
- */
-#if _MSC_VER >= 1400
- #include <sal.h>
- #if _MSC_VER > 1400
-  #define FORMAT_STRING(p) _Printf_format_string_ p
- #else
-  #define FORMAT_STRING(p) __format_string p
- #endif
-#else
- #define FORMAT_STRING(p) p
-#endif
-
-/*
- * On Windows, snprintf(), with that name and with C99 behavior - i.e.,
- * guaranteeing that the formatted string is null-terminated - didn't
- * appear until Visual Studio 2015.  Prior to that, the C runtime had
- * only _snprintf(), which *doesn't* guarantee that the string is
- * null-terminated if it is truncated due to the buffer being too
- * small.  We therefore can't just define snprintf to be _snprintf
- * and define vsnprintf to be _vsnprintf, as we're relying on null-
- * termination of strings in all cases.
- *
- * We also want to allow this to be built with versions of Visual Studio
- * prior to VS 2015, so we can't rely on snprintf() being present.
- *
- * And we want to make sure that, if we support plugins in the future,
- * a routine with C99 snprintf() behavior will be available to them.
- * We also don't want it to collide with the C library snprintf() if
- * there is one.
- *
- * So we make pcap_snprintf() and pcap_vsnprintf() available, either by
- * #defining them to be snprintf or vsnprintf, respectively, or by
- * defining our own versions and exporting them.
- */
-#ifdef HAVE_SNPRINTF
-#define pcap_snprintf snprintf
-#else
-extern int pcap_snprintf(char *, size_t, FORMAT_STRING(const char *), ...);
-#endif
-
-#ifdef HAVE_VSNPRINTF
-#define pcap_vsnprintf vsnprintf
-#else
-extern int pcap_vsnprintf(char *, size_t, const char *, va_list ap);
-#endif
+#include "portability.h"
 
 /*
  * Does the packet count argument to a module's read routine say
diff --git a/portability.h b/portability.h
new file mode 100644 (file)
index 0000000..536abdf
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 1994, 1995, 1996
+ *     The Regents of the University of California.  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. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the Computer Systems
+ *     Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ *    to endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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 portability_h
+#define        portability_h
+
+/*
+ * Helpers for portability between Windows and UN*X and between different
+ * flavors of UN*X.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef HAVE_STRLCPY
+ /*
+  * Macro that does the same thing as strlcpy().
+  */
+ #ifdef _WIN32
+  /*
+   * strncpy_s() is supported at least back to Visual
+   * Studio 2005.
+   */
+  #define strlcpy(x, y, z) \
+       strncpy_s((x), (z), (y), _TRUNCATE)
+
+ #else
+  #define strlcpy(x, y, z) \
+       (strncpy((x), (y), (z)), \
+        ((z) <= 0 ? 0 : ((x)[(z) - 1] = '\0')), \
+        (void) strlen((y)))
+ #endif
+#endif
+
+/*
+ * For flagging arguments as format strings in MSVC.
+ */
+#if _MSC_VER >= 1400
+ #include <sal.h>
+ #if _MSC_VER > 1400
+  #define FORMAT_STRING(p) _Printf_format_string_ p
+ #else
+  #define FORMAT_STRING(p) __format_string p
+ #endif
+#else
+ #define FORMAT_STRING(p) p
+#endif
+
+/*
+ * On Windows, snprintf(), with that name and with C99 behavior - i.e.,
+ * guaranteeing that the formatted string is null-terminated - didn't
+ * appear until Visual Studio 2015.  Prior to that, the C runtime had
+ * only _snprintf(), which *doesn't* guarantee that the string is
+ * null-terminated if it is truncated due to the buffer being too
+ * small.  We therefore can't just define snprintf to be _snprintf
+ * and define vsnprintf to be _vsnprintf, as we're relying on null-
+ * termination of strings in all cases.
+ *
+ * We also want to allow this to be built with versions of Visual Studio
+ * prior to VS 2015, so we can't rely on snprintf() being present.
+ *
+ * And we want to make sure that, if we support plugins in the future,
+ * a routine with C99 snprintf() behavior will be available to them.
+ * We also don't want it to collide with the C library snprintf() if
+ * there is one.
+ *
+ * So we make pcap_snprintf() and pcap_vsnprintf() available, either by
+ * #defining them to be snprintf or vsnprintf, respectively, or by
+ * defining our own versions and exporting them.
+ */
+#ifdef HAVE_SNPRINTF
+#define pcap_snprintf snprintf
+#else
+extern int pcap_snprintf(char *, size_t, FORMAT_STRING(const char *), ...);
+#endif
+
+#ifdef HAVE_VSNPRINTF
+#define pcap_vsnprintf vsnprintf
+#else
+extern int pcap_vsnprintf(char *, size_t, const char *, va_list ap);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index 4fbf589176bbcbf7ff926cf9f7ba58a65a32d89b..f8805536ad0554dc593bcef34b6a5412778a3407 100644 (file)
  */
 
 
-#include "sockutils.h"
 #include <string.h>    /* for strerror() */
 #include <errno.h>     /* for the errno variable */
 #include <stdio.h>     /* for the stderr file */
 #include <stdlib.h>    /* for malloc() and free() */
 
-
-
-
-
+#include "portability.h"
+#include "sockutils.h"
 
 /* Winsock Initialization */
-#ifdef WIN32
+#ifdef _WIN32
 #define WINSOCK_MAJOR_VERSION 2                /* Ask for Winsock 2.2 */
 #define WINSOCK_MINOR_VERSION 2                /* Ask for Winsock 2.2 */
 int sockcount = 0;                                     /* Variable that allows calling the WSAStartup() only one time */
 #endif
 
 /* Some minor differences between UNIX and Win32 */
-#ifdef WIN32
+#ifdef _WIN32
 #define SHUT_WR SD_SEND                        /* The control code for shutdown() is different in Win32 */
 #endif
 
@@ -122,7 +119,7 @@ int sock_ismcastaddr(const struct sockaddr *saddr);
  */
 void sock_geterror(const char *caller, char *errbuf, int errbuflen)
 {
-#ifdef WIN32
+#ifdef _WIN32
        int retval;
        int code;
        TCHAR message[SOCK_ERRBUF_SIZE];        /* It will be char (if we're using ascii) or wchar_t (if we're using unicode) */
@@ -192,7 +189,7 @@ void sock_geterror(const char *caller, char *errbuf, int errbuflen)
  */
 int sock_init(char *errbuf, int errbuflen)
 {
-#ifdef WIN32
+#ifdef _WIN32
        if (sockcount == 0)
        {
                WSADATA wsaData;                        /* helper variable needed to initialize Winsock */
@@ -227,7 +224,7 @@ int sock_init(char *errbuf, int errbuflen)
  */
 void sock_cleanup()
 {
-#ifdef WIN32
+#ifdef _WIN32
        sockcount--;
 
        if (sockcount == 0)
@@ -505,7 +502,7 @@ struct addrinfo *hints, struct addrinfo **addrinfo, char *errbuf, int errbuflen)
                 * error routines (errno) in UNIX; WIN32 suggests using the GetLastError() instead.
                 */
                if (errbuf)
-#ifdef WIN32
+#ifdef _WIN32
                        sock_geterror("getaddrinfo(): ", errbuf, errbuflen);
 #else
                        if (errbuf)
@@ -1104,7 +1101,7 @@ int sock_getascii_addrport(const struct sockaddr_storage *sockaddr, char *addres
 
        retval = -1;
 
-#ifdef WIN32
+#ifdef _WIN32
        if (sockaddr->ss_family == AF_INET)
                sockaddrlen = sizeof(struct sockaddr_in);
        else