"Fossies" - the Fresh Open Source Software Archive

Member "libpcap-1.10.1/./portability.h" (7 Jun 2021, 5302 Bytes) of package /linux/misc/libpcap-1.10.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "portability.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 1.10.0_vs_1.10.1.

    1 /*
    2  * Copyright (c) 1994, 1995, 1996
    3  *  The Regents of the University of California.  All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. All advertising materials mentioning features or use of this software
   14  *    must display the following acknowledgement:
   15  *  This product includes software developed by the Computer Systems
   16  *  Engineering Group at Lawrence Berkeley Laboratory.
   17  * 4. Neither the name of the University nor of the Laboratory may be used
   18  *    to endorse or promote products derived from this software without
   19  *    specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  */
   33 
   34 #ifndef portability_h
   35 #define portability_h
   36 
   37 /*
   38  * Helpers for portability between Windows and UN*X and between different
   39  * flavors of UN*X.
   40  */
   41 #include <stdarg.h> /* we declare varargs functions on some platforms */
   42 
   43 #include "pcap/funcattrs.h"
   44 
   45 #ifdef __cplusplus
   46 extern "C" {
   47 #endif
   48 
   49 #ifdef HAVE_STRLCAT
   50   #define pcap_strlcat  strlcat
   51 #else
   52   #if defined(_MSC_VER) || defined(__MINGW32__)
   53     /*
   54      * strncat_s() is supported at least back to Visual
   55      * Studio 2005; we require Visual Studio 2015 or later.
   56      */
   57     #define pcap_strlcat(x, y, z) \
   58     strncat_s((x), (z), (y), _TRUNCATE)
   59   #else
   60     /*
   61      * Define it ourselves.
   62      */
   63     extern size_t pcap_strlcat(char * restrict dst, const char * restrict src, size_t dstsize);
   64   #endif
   65 #endif
   66 
   67 #ifdef HAVE_STRLCPY
   68   #define pcap_strlcpy  strlcpy
   69 #else
   70   #if defined(_MSC_VER) || defined(__MINGW32__)
   71     /*
   72      * strncpy_s() is supported at least back to Visual
   73      * Studio 2005; we require Visual Studio 2015 or later.
   74      */
   75     #define pcap_strlcpy(x, y, z) \
   76     strncpy_s((x), (z), (y), _TRUNCATE)
   77   #else
   78     /*
   79      * Define it ourselves.
   80      */
   81     extern size_t pcap_strlcpy(char * restrict dst, const char * restrict src, size_t dstsize);
   82   #endif
   83 #endif
   84 
   85 #ifdef _MSC_VER
   86   /*
   87    * If <crtdbg.h> has been included, and _DEBUG is defined, and
   88    * __STDC__ is zero, <crtdbg.h> will define strdup() to call
   89    * _strdup_dbg().  So if it's already defined, don't redefine
   90    * it.
   91    */
   92   #ifndef strdup
   93   #define strdup    _strdup
   94   #endif
   95 #endif
   96 
   97 /*
   98  * We want asprintf(), for some cases where we use it to construct
   99  * dynamically-allocated variable-length strings; it's present on
  100  * some, but not all, platforms.
  101  */
  102 #ifdef HAVE_ASPRINTF
  103 #define pcap_asprintf asprintf
  104 #else
  105 extern int pcap_asprintf(char **, PCAP_FORMAT_STRING(const char *), ...)
  106     PCAP_PRINTFLIKE(2, 3);
  107 #endif
  108 
  109 #ifdef HAVE_VASPRINTF
  110 #define pcap_vasprintf vasprintf
  111 #else
  112 extern int pcap_vasprintf(char **, const char *, va_list ap);
  113 #endif
  114 
  115 /* For Solaris before 11. */
  116 #ifndef timeradd
  117 #define timeradd(a, b, result)                       \
  118   do {                                               \
  119     (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;    \
  120     (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
  121     if ((result)->tv_usec >= 1000000) {              \
  122       ++(result)->tv_sec;                            \
  123       (result)->tv_usec -= 1000000;                  \
  124     }                                                \
  125   } while (0)
  126 #endif /* timeradd */
  127 #ifndef timersub
  128 #define timersub(a, b, result)                       \
  129   do {                                               \
  130     (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;    \
  131     (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
  132     if ((result)->tv_usec < 0) {                     \
  133       --(result)->tv_sec;                            \
  134       (result)->tv_usec += 1000000;                  \
  135     }                                                \
  136   } while (0)
  137 #endif /* timersub */
  138 
  139 #ifdef HAVE_STRTOK_R
  140   #define pcap_strtok_r strtok_r
  141 #else
  142   #ifdef _WIN32
  143     /*
  144      * Microsoft gives it a different name.
  145      */
  146     #define pcap_strtok_r   strtok_s
  147   #else
  148     /*
  149      * Define it ourselves.
  150      */
  151     extern char *pcap_strtok_r(char *, const char *, char **);
  152   #endif
  153 #endif /* HAVE_STRTOK_R */
  154 
  155 #ifdef _WIN32
  156   #if !defined(__cplusplus)
  157     #define inline __inline
  158   #endif
  159 #endif /* _WIN32 */
  160 
  161 #ifdef __cplusplus
  162 }
  163 #endif
  164 
  165 #endif