summaryrefslogtreecommitdiffstats
path: root/avahi-compat-howl/include/salt/platform.h
diff options
context:
space:
mode:
Diffstat (limited to 'avahi-compat-howl/include/salt/platform.h')
-rw-r--r--avahi-compat-howl/include/salt/platform.h438
1 files changed, 438 insertions, 0 deletions
diff --git a/avahi-compat-howl/include/salt/platform.h b/avahi-compat-howl/include/salt/platform.h
new file mode 100644
index 0000000..d0553e7
--- /dev/null
+++ b/avahi-compat-howl/include/salt/platform.h
@@ -0,0 +1,438 @@
+#ifndef _sw_platform_h
+#define _sw_platform_h
+
+/*
+ * Copyright 2003, 2004 Porchdog Software, Inc. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``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 HOWL PROJECT 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.
+ *
+ * The views and conclusions contained in the software and documentation are those
+ * of the authors and should not be interpreted as representing official policies,
+ * either expressed or implied, of Porchdog Software, Inc.
+ */
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#if defined(__VXWORKS__)
+
+# define HOWL_API
+# include <vxworks.h>
+# include <sysLib.h>
+
+# define sw_snooze(SECS) taskDelay(sysClkRateGet() * SECS)
+
+#elif defined(WIN32)
+
+# define WIN32_LEAN_AND_MEAN
+# define HOWL_API __stdcall
+# pragma warning(disable:4127)
+# include <windows.h>
+# include <stdlib.h>
+
+typedef signed char int8_t;
+typedef unsigned char u_int8_t;
+typedef signed short int16_t;
+typedef unsigned short u_int16_t;
+typedef signed long int32_t;
+typedef unsigned long u_int32_t;
+typedef _int64 int64_t;
+typedef _int64 u_int64_t;
+
+# define sw_snooze(SECS) Sleep(SECS * 1000)
+
+#else
+
+# define HOWL_API
+# if defined(HOWL_KERNEL)
+# include <howl_config.h>
+# endif
+# include <sys/types.h>
+# include <stdlib.h>
+# include <unistd.h>
+
+# define sw_snooze(SECS) sleep(SECS)
+
+#endif
+
+#if defined(__sun)
+
+# define u_int8_t uint8_t
+# define u_int16_t uint16_t
+# define u_int32_t uint32_t
+# define u_int64_t uint64_t
+
+#endif
+
+typedef void * sw_opaque;
+typedef void * sw_opaque_t;
+typedef int8_t sw_int8;
+typedef u_int8_t sw_uint8;
+typedef u_int8_t sw_bool;
+typedef int16_t sw_int16;
+typedef u_int16_t sw_uint16;
+typedef int32_t sw_int32;
+typedef u_int32_t sw_uint32;
+typedef int64_t sw_int64;
+typedef u_int64_t sw_uint64;
+typedef char * sw_string;
+typedef sw_uint8 * sw_octets;
+#if !defined(__VXWORKS__) || defined(__cplusplus)
+typedef const char * sw_const_string;
+typedef const u_int8_t * sw_const_octets;
+#else
+typedef char * sw_const_string;
+typedef u_int8_t * sw_const_octets;
+#endif
+typedef size_t sw_size_t;
+typedef int sw_result;
+
+
+
+/* --------------------------------------------------------
+ *
+ * Endian-osity
+ *
+ * SW_ENDIAN is 0 for big endian platforms, 1
+ * for little endian platforms.
+ *
+ * The macro WORDS_BIGENDIAN will be defined
+ * by autoconf. If you are using Howl on
+ * a platform that doesn't have autoconf, define
+ * SW_ENDIAN directly
+ * --------------------------------------------------------
+ */
+
+#if !defined(SW_ENDIAN)
+
+# if WORDS_BIGENDIAN == 1
+
+# define SW_ENDIAN 0
+
+# else
+
+# define SW_ENDIAN 1
+
+# endif
+
+#endif
+
+
+/* --------------------------------------------------------
+ *
+ * Strings
+ *
+ * These macros supports cross platform string functions
+ * for the following OSes
+ *
+ * Win32
+ * *NIX
+ * PalmOS
+ * VxWorks
+ *
+ * --------------------------------------------------------
+ */
+
+#if defined(WIN32)
+
+# include <string.h>
+
+# define sw_memset(ARG1, ARG2, ARG3) memset((char*) ARG1, ARG2, ARG3)
+# define sw_memcpy(ARG1, ARG2, ARG3) memmove((char*) ARG1, (char*) ARG2, ARG3)
+# define sw_memcmp(ARG1, ARG2, ARG3) memcmp((char*) ARG1, ARG2, ARG3)
+# define sw_strcasecmp(ARG1, ARG2) stricmp(ARG1, ARG2)
+# define sw_strncasecmp(ARG1, ARG2) strnicmp(ARG1, ARG2)
+# define sw_strcat(ARG1, ARG2) strcat(ARG1, ARG2)
+# define sw_strncat(ARG1, ARG2) strncat(ARG1, ARG2)
+# define sw_strchr(ARG1, ARG2) strchr(ARG1, ARG2)
+# define sw_strcmp(ARG1, ARG2) strcmp(ARG1, ARG2)
+# define sw_strncmp(ARG1, ARG2) strncmp(ARG1, ARG2)
+# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2)
+# define sw_strcpy(ARG1, ARG2) (ARG2) ? strcpy(ARG1, ARG2) : strcpy(ARG1, "")
+# define sw_strncpy(ARG1, ARG2, N) (ARG2) ? strncpy(ARG1, ARG2, N) : strcpy(ARG1, "")
+# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2)
+# define sw_strlen(ARG1) strlen(ARG1)
+# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2)
+# define sw_strtok_r(ARG1, ARG2, ARG3) strtok_r(ARG1, ARG2, ARG3)
+
+#elif defined(__VXWORKS__)
+
+# include <string.h>
+
+extern sw_int32
+sw_strcasecmp(
+ sw_const_string arg1,
+ sw_const_string arg2);
+
+extern sw_int32
+sw_strncasecmp(
+ sw_const_string arg1,
+ sw_const_string arg2,
+ sw_len n);
+
+extern sw_string
+sw_strtok_r(
+ sw_string arg1,
+ sw_const_string arg2,
+ sw_string * lasts);
+
+# define sw_memset(ARG1, ARG2, ARG3) memset((char*) ARG1, ARG2, ARG3)
+# define sw_memcpy(ARG1, ARG2, ARG3) memcpy((char*) ARG1, (char*) ARG2, ARG3)
+# define sw_memcmp(ARG1, ARG2, ARG3) memcmp((char*) ARG1, ARG2, ARG3)
+# define sw_strcat(ARG1, ARG2) strcat(ARG1, ARG2)
+# define sw_strncat(ARG1, ARG2) strncat(ARG1, ARG2)
+# define sw_strchr(ARG1, ARG2) strchr(ARG1, ARG2)
+# define sw_strcmp(ARG1, ARG2) strcmp(ARG1, ARG2)
+# define sw_strncmp(ARG1, ARG2) strncmp(ARG1, ARG2)
+# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2)
+# define sw_strcpy(ARG1, ARG2) ARG2 ? strcpy(ARG1, ARG2) : strcpy(ARG1, "")
+# define sw_strncpy(ARG1, ARG2, N) ARG2 ? strncpy(ARG1, ARG2, N) : strcpy(ARG1, "")
+# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2)
+# define sw_strlen(ARG1) strlen(ARG1)
+# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2)
+
+#elif defined(__PALMOS__)
+
+# include <StringMgr.h>
+
+# define sw_strcasecmp(ARG1, ARG2) strcasecmp(ARG1, ARG2)
+# define sw_strncasecmp(ARG1, ARG2) strncasecmp(ARG1, ARG2)
+# define sw_strcat(ARG1, ARG2) StrCat(ARG1, ARG2)
+# define sw_strncat(ARG1, ARG2) StrNCat(ARG1, ARG2)
+# define sw_strchr(ARG1, ARG2) StrChr(ARG1, ARG2)
+# define sw_strcmp(ARG1, ARG2) StrCampare(ARG1, ARG2)
+# define sw_strncmp(ARG1, ARG2) StrNCompare(ARG1, ARG2)
+# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2)
+# define sw_strcpy(ARG1, ARG2) ARG2 ? StrCopy(ARG1, ARG2) : StrCopy(ARG1, "")
+# define sw_strncpy(ARG1, ARG2, N) ARG2 ? StrNCopy(ARG1, ARG2, N) : StrCopy(ARG1, "")
+# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2)
+# define sw_strlen(ARG1) StrLen(ARG1)
+# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2)
+# define sw_strtok_r(ARG1, ARG2, ARG3) strtok_r(ARG1, ARG2, ARG3)
+
+#else
+
+# include <string.h>
+
+# if defined(__Lynx__)
+ char * strchr(char*, int);
+# endif
+
+# define sw_memset(ARG1, ARG2, ARG3) memset((char*) ARG1, ARG2, ARG3)
+# define sw_memcpy(ARG1, ARG2, ARG3) memcpy((char*) ARG1, (char*) ARG2, ARG3)
+# define sw_memcmp(ARG1, ARG2, ARG3) memcmp((char*) ARG1, ARG2, ARG3)
+# define sw_strcasecmp(ARG1, ARG2) strcasecmp(ARG1, ARG2)
+# define sw_strncasecmp(ARG1, ARG2) strncasecmp(ARG1, ARG2)
+# define sw_strcat(ARG1, ARG2) strcat(ARG1, ARG2)
+# define sw_strncat(ARG1, ARG2) strncat(ARG1, ARG2)
+# define sw_strchr(ARG1, ARG2) strchr(ARG1, ARG2)
+# define sw_strcmp(ARG1, ARG2) strcmp(ARG1, ARG2)
+# define sw_strncmp(ARG1, ARG2) strncmp(ARG1, ARG2)
+# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2)
+# define sw_strcpy(ARG1, ARG2) ARG2 ? strcpy(ARG1, ARG2) : strcpy(ARG1, "")
+# define sw_strncpy(ARG1, ARG2, N) ARG2 ? strncpy(ARG1, ARG2, N) : strcpy(ARG1, "")
+# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2)
+# define sw_strlen(ARG1) strlen(ARG1)
+# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2)
+# define sw_strtok_r(ARG1, ARG2, ARG3) strtok_r(ARG1, ARG2, ARG3)
+
+#endif
+
+
+sw_string
+sw_strdup(
+ sw_const_string str);
+
+
+/* --------------------------------------------------------
+ *
+ * Memory
+ *
+ * These macros support cross platform heap functions.
+ * When compiling with DEBUG, some extra checking is
+ * done which can aid in tracking down heap corruption
+ * problems
+ *
+ * --------------------------------------------------------
+ */
+
+#if defined(NDEBUG)
+
+# define sw_malloc(SIZE) malloc(SIZE)
+# define sw_realloc(MEM,SIZE) realloc(MEM, SIZE)
+# define sw_free(MEM) if (MEM) free(MEM)
+
+#else
+
+# define sw_malloc(SIZE) _sw_debug_malloc(SIZE, __SW_FUNCTION__, __FILE__, __LINE__)
+# define sw_realloc(MEM,SIZE) _sw_debug_realloc(MEM, SIZE, __SW_FUNCTION__, __FILE__, __LINE__)
+# define sw_free(MEM) if (MEM) _sw_debug_free(MEM, __SW_FUNCTION__, __FILE__, __LINE__)
+
+#endif
+
+
+sw_opaque HOWL_API
+_sw_debug_malloc(
+ sw_size_t size,
+ sw_const_string function,
+ sw_const_string file,
+ sw_uint32 line);
+
+
+sw_opaque HOWL_API
+_sw_debug_realloc(
+ sw_opaque_t mem,
+ sw_size_t size,
+ sw_const_string function,
+ sw_const_string file,
+ sw_uint32 line);
+
+
+void HOWL_API
+_sw_debug_free(
+ sw_opaque_t mem,
+ sw_const_string function,
+ sw_const_string file,
+ sw_uint32 line);
+
+
+
+/* --------------------------------------------------------
+ *
+ * Sockets
+ *
+ * These macros and APIs support cross platform socket
+ * calls. I am relying on BSD APIs, but even with those
+ * there are subtle and not so subtle platform differences
+ *
+ * --------------------------------------------------------
+ */
+
+#if defined(__VXWORKS__)
+
+# include <vxworks.h>
+# include <hostLib.h>
+# include <sockLib.h>
+# include <ioLib.h>
+# include <inetLib.h>
+
+typedef int sw_sockdesc_t;
+typedef socklen_t sw_socklen_t;
+
+#elif defined(WIN32)
+
+# include <winsock2.h>
+
+typedef SOCKET sw_sockdesc_t;
+typedef int sw_socklen_t;
+
+# define SW_E_WOULDBLOCK WSAEWOULDBLOCK
+# define SW_INVALID_SOCKET INVALID_SOCKET
+# define SW_SOCKET_ERROR SOCKET_ERROR
+
+# define sw_close_socket(X) closesocket(X)
+
+#else
+
+# if defined(sun)
+
+# include <unistd.h>
+
+# endif
+
+# include <sys/types.h>
+# include <signal.h>
+
+# if defined(__Lynx__)
+
+# include <socket.h>
+
+# else
+
+# include <sys/socket.h>
+
+# endif
+
+# include <netinet/in.h>
+# include <netinet/tcp.h>
+# include <netdb.h>
+# include <arpa/inet.h>
+# include <stdlib.h>
+# include <unistd.h>
+# include <sys/ioctl.h>
+# include <stdio.h>
+# include <errno.h>
+
+typedef sw_int32 sw_sockdesc_t;
+typedef socklen_t sw_socklen_t;
+
+# define SW_E_WOULDBLOCK EWOULDBLOCK
+# define SW_INVALID_SOCKET -1
+# define SW_SOCKET_ERROR -1
+
+# define sw_close_socket(X) close(X)
+
+#endif
+
+
+/* --------------------------------------------------------
+ *
+ * strerror()
+ *
+ * This function will print a string rep of a system error
+ * code
+ *
+ * --------------------------------------------------------
+ */
+
+sw_const_string
+sw_strerror();
+
+
+/*
+ * Obsolete types and macros.
+ *
+ * These are here for backwards compatibility, but will
+ * be removed in the future
+ */
+#define sw_char sw_int8
+#define sw_uchar sw_uint8
+#define sw_octet sw_uint8
+#define sw_short sw_int16
+#define sw_ushort sw_uint16
+#define sw_long sw_int32
+#define sw_ulong sw_uint32
+
+
+#define SW_TRY(EXPR) { sw_result result; if ((result = EXPR) != SW_OKAY) return result; } ((void) 0)
+#define SW_TRY_GOTO(EXPR) { if ((result = EXPR) != SW_OKAY) goto exit; } ((void) 0)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif