From c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 12 Oct 2005 22:37:25 +0000 Subject: add howl headers git-svn-id: file:///home/lennart/svn/public/avahi/trunk@747 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-compat-howl/include/salt/platform.h | 438 ++++++++++++++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 avahi-compat-howl/include/salt/platform.h (limited to 'avahi-compat-howl/include/salt/platform.h') 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 +# include + +# define sw_snooze(SECS) taskDelay(sysClkRateGet() * SECS) + +#elif defined(WIN32) + +# define WIN32_LEAN_AND_MEAN +# define HOWL_API __stdcall +# pragma warning(disable:4127) +# include +# include + +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 +# endif +# include +# include +# include + +# 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 + +# 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 + +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 + +# 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 + +# 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 +# include +# include +# include +# include + +typedef int sw_sockdesc_t; +typedef socklen_t sw_socklen_t; + +#elif defined(WIN32) + +# include + +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 + +# endif + +# include +# include + +# if defined(__Lynx__) + +# include + +# else + +# include + +# endif + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +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 -- cgit