+++ /dev/null
-#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 defined(WORDS_BIGENDIAN) && 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