1c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#ifndef _sw_platform_h 2c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define _sw_platform_h 3c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 4c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* 5c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Copyright 2003, 2004 Porchdog Software, Inc. All rights reserved. 6c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 7c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Redistribution and use in source and binary forms, with or without modification, 8c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * are permitted provided that the following conditions are met: 9c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 10c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 1. Redistributions of source code must retain the above copyright notice, 11a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering * this list of conditions and the following disclaimer. 12c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 2. Redistributions in binary form must reproduce the above copyright notice, 13c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * this list of conditions and the following disclaimer in the documentation 14c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * and/or other materials provided with the distribution. 15c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 16c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * THIS SOFTWARE IS PROVIDED BY PORCHDOG SOFTWARE ``AS IS'' AND ANY 17c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * IN NO EVENT SHALL THE HOWL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 20c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 24c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 25c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * OF THE POSSIBILITY OF SUCH DAMAGE. 26c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 27c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * The views and conclusions contained in the software and documentation are those 28c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * of the authors and should not be interpreted as representing official policies, 29c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * either expressed or implied, of Porchdog Software, Inc. 30c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 31c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 32c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 33c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#ifdef __cplusplus 34c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringextern "C" 35c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering{ 36a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering#endif 37c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 38c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 39c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if defined(__VXWORKS__) 40c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 41c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define HOWL_API 42c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <vxworks.h> 43c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <sysLib.h> 44c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 45c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_snooze(SECS) taskDelay(sysClkRateGet() * SECS) 46c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 47c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#elif defined(WIN32) 48c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 49c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define WIN32_LEAN_AND_MEAN 50c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define HOWL_API __stdcall 51c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# pragma warning(disable:4127) 52c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <windows.h> 53c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <stdlib.h> 54c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 55c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef signed char int8_t; 56c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef unsigned char u_int8_t; 57c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef signed short int16_t; 58c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef unsigned short u_int16_t; 59c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef signed long int32_t; 60c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef unsigned long u_int32_t; 61c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef _int64 int64_t; 62c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef _int64 u_int64_t; 63c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 64c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_snooze(SECS) Sleep(SECS * 1000) 65c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 66c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#else 67c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 68c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define HOWL_API 69c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# if defined(HOWL_KERNEL) 70c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <howl_config.h> 71c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# endif 72c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <sys/types.h> 73c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <stdlib.h> 74c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <unistd.h> 75c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 76c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_snooze(SECS) sleep(SECS) 77c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 78c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 79c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 80c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if defined(__sun) 81c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 82c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define u_int8_t uint8_t 83c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define u_int16_t uint16_t 84c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define u_int32_t uint32_t 85c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define u_int64_t uint64_t 86c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 87c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 88c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 89c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef void * sw_opaque; 90c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef void * sw_opaque_t; 91c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int8_t sw_int8; 92c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef u_int8_t sw_uint8; 93c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef u_int8_t sw_bool; 94c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int16_t sw_int16; 95c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef u_int16_t sw_uint16; 96c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int32_t sw_int32; 97c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef u_int32_t sw_uint32; 98c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int64_t sw_int64; 99c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef u_int64_t sw_uint64; 100c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef char * sw_string; 101c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef sw_uint8 * sw_octets; 102c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if !defined(__VXWORKS__) || defined(__cplusplus) 103c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef const char * sw_const_string; 104c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef const u_int8_t * sw_const_octets; 105c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#else 106c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef char * sw_const_string; 107c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef u_int8_t * sw_const_octets; 108c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 109c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef size_t sw_size_t; 110c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int sw_result; 111c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 112c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 113c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 114c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* -------------------------------------------------------- 115c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 116c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Endian-osity 117c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 118c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * SW_ENDIAN is 0 for big endian platforms, 1 119c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * for little endian platforms. 120c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 121c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * The macro WORDS_BIGENDIAN will be defined 122a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering * by autoconf. If you are using Howl on 123c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * a platform that doesn't have autoconf, define 124c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * SW_ENDIAN directly 125c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * -------------------------------------------------------- 126c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 127c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 128c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if !defined(SW_ENDIAN) 129c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 130564b9dd0f1da53ee73e667618d5bb1d65b0c309fLennart Poettering# if defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN == 1 131c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 132c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_ENDIAN 0 133c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 134c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# else 135c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 136c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_ENDIAN 1 137c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 138c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# endif 139c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 140c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 141c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 142c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 143c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* -------------------------------------------------------- 144c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 145c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Strings 146c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 147c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * These macros supports cross platform string functions 148c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * for the following OSes 149c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 150c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Win32 151c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * *NIX 152c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * PalmOS 153c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * VxWorks 154c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 155c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * -------------------------------------------------------- 156c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 157c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 158c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if defined(WIN32) 159c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 160c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <string.h> 161c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 162c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memset(ARG1, ARG2, ARG3) memset((char*) ARG1, ARG2, ARG3) 163c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memcpy(ARG1, ARG2, ARG3) memmove((char*) ARG1, (char*) ARG2, ARG3) 164c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memcmp(ARG1, ARG2, ARG3) memcmp((char*) ARG1, ARG2, ARG3) 165c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcasecmp(ARG1, ARG2) stricmp(ARG1, ARG2) 166c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncasecmp(ARG1, ARG2) strnicmp(ARG1, ARG2) 167c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcat(ARG1, ARG2) strcat(ARG1, ARG2) 168c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncat(ARG1, ARG2) strncat(ARG1, ARG2) 169c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strchr(ARG1, ARG2) strchr(ARG1, ARG2) 170c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcmp(ARG1, ARG2) strcmp(ARG1, ARG2) 171c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncmp(ARG1, ARG2) strncmp(ARG1, ARG2) 172c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2) 173c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcpy(ARG1, ARG2) (ARG2) ? strcpy(ARG1, ARG2) : strcpy(ARG1, "") 174c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncpy(ARG1, ARG2, N) (ARG2) ? strncpy(ARG1, ARG2, N) : strcpy(ARG1, "") 175c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2) 176c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strlen(ARG1) strlen(ARG1) 177c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2) 178c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strtok_r(ARG1, ARG2, ARG3) strtok_r(ARG1, ARG2, ARG3) 179c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 180c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#elif defined(__VXWORKS__) 181c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 182c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <string.h> 183c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 184c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringextern sw_int32 185c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_strcasecmp( 186c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string arg1, 187c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string arg2); 188a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering 189c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringextern sw_int32 190c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_strncasecmp( 191c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string arg1, 192c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string arg2, 193c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_len n); 194a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering 195c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringextern sw_string 196c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_strtok_r( 197c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_string arg1, 198c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string arg2, 199c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_string * lasts); 200a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering 201c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memset(ARG1, ARG2, ARG3) memset((char*) ARG1, ARG2, ARG3) 202c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memcpy(ARG1, ARG2, ARG3) memcpy((char*) ARG1, (char*) ARG2, ARG3) 203c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memcmp(ARG1, ARG2, ARG3) memcmp((char*) ARG1, ARG2, ARG3) 204c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcat(ARG1, ARG2) strcat(ARG1, ARG2) 205c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncat(ARG1, ARG2) strncat(ARG1, ARG2) 206c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strchr(ARG1, ARG2) strchr(ARG1, ARG2) 207c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcmp(ARG1, ARG2) strcmp(ARG1, ARG2) 208c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncmp(ARG1, ARG2) strncmp(ARG1, ARG2) 209c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2) 210c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcpy(ARG1, ARG2) ARG2 ? strcpy(ARG1, ARG2) : strcpy(ARG1, "") 211c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncpy(ARG1, ARG2, N) ARG2 ? strncpy(ARG1, ARG2, N) : strcpy(ARG1, "") 212c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2) 213c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strlen(ARG1) strlen(ARG1) 214c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2) 215c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 216c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#elif defined(__PALMOS__) 217c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 218c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <StringMgr.h> 219c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 220c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcasecmp(ARG1, ARG2) strcasecmp(ARG1, ARG2) 221c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncasecmp(ARG1, ARG2) strncasecmp(ARG1, ARG2) 222c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcat(ARG1, ARG2) StrCat(ARG1, ARG2) 223c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncat(ARG1, ARG2) StrNCat(ARG1, ARG2) 224c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strchr(ARG1, ARG2) StrChr(ARG1, ARG2) 225c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcmp(ARG1, ARG2) StrCampare(ARG1, ARG2) 226c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncmp(ARG1, ARG2) StrNCompare(ARG1, ARG2) 227c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2) 228c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcpy(ARG1, ARG2) ARG2 ? StrCopy(ARG1, ARG2) : StrCopy(ARG1, "") 229c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncpy(ARG1, ARG2, N) ARG2 ? StrNCopy(ARG1, ARG2, N) : StrCopy(ARG1, "") 230c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2) 231c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strlen(ARG1) StrLen(ARG1) 232c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2) 233c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strtok_r(ARG1, ARG2, ARG3) strtok_r(ARG1, ARG2, ARG3) 234c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 235c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#else 236c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 237c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <string.h> 238c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 239c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# if defined(__Lynx__) 240c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering char * strchr(char*, int); 241c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# endif 242c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 243c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memset(ARG1, ARG2, ARG3) memset((char*) ARG1, ARG2, ARG3) 244c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memcpy(ARG1, ARG2, ARG3) memcpy((char*) ARG1, (char*) ARG2, ARG3) 245c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_memcmp(ARG1, ARG2, ARG3) memcmp((char*) ARG1, ARG2, ARG3) 246c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcasecmp(ARG1, ARG2) strcasecmp(ARG1, ARG2) 247c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncasecmp(ARG1, ARG2) strncasecmp(ARG1, ARG2) 248c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcat(ARG1, ARG2) strcat(ARG1, ARG2) 249c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncat(ARG1, ARG2) strncat(ARG1, ARG2) 250c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strchr(ARG1, ARG2) strchr(ARG1, ARG2) 251c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcmp(ARG1, ARG2) strcmp(ARG1, ARG2) 252c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncmp(ARG1, ARG2) strncmp(ARG1, ARG2) 253c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcoll(ARG1, ARG2) strcoll(ARG1, ARG2) 254c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcpy(ARG1, ARG2) ARG2 ? strcpy(ARG1, ARG2) : strcpy(ARG1, "") 255c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strncpy(ARG1, ARG2, N) ARG2 ? strncpy(ARG1, ARG2, N) : strcpy(ARG1, "") 256c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strcspn(ARG1, ARG2) strcspn(ARG1, ARG2) 257c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strlen(ARG1) strlen(ARG1) 258c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strstr(ARG1, ARG2) strstr(ARG1, ARG2) 259c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_strtok_r(ARG1, ARG2, ARG3) strtok_r(ARG1, ARG2, ARG3) 260c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 261c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 262c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 263c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 264c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_string 265c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_strdup( 266c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string str); 267c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 268c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 269c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* -------------------------------------------------------- 270c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 271c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Memory 272c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 273c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * These macros support cross platform heap functions. 274c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * When compiling with DEBUG, some extra checking is 275c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * done which can aid in tracking down heap corruption 276c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * problems 277c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 278c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * -------------------------------------------------------- 279c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 280c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 281c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if defined(NDEBUG) 282c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 283c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_malloc(SIZE) malloc(SIZE) 284c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_realloc(MEM,SIZE) realloc(MEM, SIZE) 285c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_free(MEM) if (MEM) free(MEM) 286c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 287c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#else 288c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 289c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_malloc(SIZE) _sw_debug_malloc(SIZE, __SW_FUNCTION__, __FILE__, __LINE__) 290c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_realloc(MEM,SIZE) _sw_debug_realloc(MEM, SIZE, __SW_FUNCTION__, __FILE__, __LINE__) 291c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_free(MEM) if (MEM) _sw_debug_free(MEM, __SW_FUNCTION__, __FILE__, __LINE__) 292c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 293c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 294c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 295c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 296c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_opaque HOWL_API 297c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering_sw_debug_malloc( 298c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_size_t size, 299c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string function, 300c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string file, 301c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_uint32 line); 302c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 303c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 304c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_opaque HOWL_API 305c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering_sw_debug_realloc( 306c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_opaque_t mem, 307c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_size_t size, 308c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string function, 309c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string file, 310c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_uint32 line); 311c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 312c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 313c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringvoid HOWL_API 314c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering_sw_debug_free( 315c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_opaque_t mem, 316c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string function, 317c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_const_string file, 318c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering sw_uint32 line); 319c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 320c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 321c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 322c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* -------------------------------------------------------- 323c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 324c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Sockets 325c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 326c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * These macros and APIs support cross platform socket 327c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * calls. I am relying on BSD APIs, but even with those 328c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * there are subtle and not so subtle platform differences 329c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 330c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * -------------------------------------------------------- 331c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 332c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 333c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#if defined(__VXWORKS__) 334c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 335c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <vxworks.h> 336c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <hostLib.h> 337c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <sockLib.h> 338c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <ioLib.h> 339c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <inetLib.h> 340c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 341c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int sw_sockdesc_t; 342c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef socklen_t sw_socklen_t; 343c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 344c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#elif defined(WIN32) 345c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 346c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <winsock2.h> 347c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 348c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef SOCKET sw_sockdesc_t; 349c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef int sw_socklen_t; 350c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 351c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_E_WOULDBLOCK WSAEWOULDBLOCK 352c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_INVALID_SOCKET INVALID_SOCKET 353c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_SOCKET_ERROR SOCKET_ERROR 354c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 355c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_close_socket(X) closesocket(X) 356c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 357c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#else 358c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 359c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# if defined(sun) 360c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 361c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <unistd.h> 362c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 363c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# endif 364c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 365c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <sys/types.h> 366c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <signal.h> 367c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 368c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# if defined(__Lynx__) 369c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 370c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <socket.h> 371c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 372c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# else 373c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 374c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <sys/socket.h> 375c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 376c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# endif 377c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 378c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <netinet/in.h> 379c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <netinet/tcp.h> 380c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <netdb.h> 381c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <arpa/inet.h> 382c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <stdlib.h> 383c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <unistd.h> 384c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <sys/ioctl.h> 385c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <stdio.h> 386c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# include <errno.h> 387c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 388c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef sw_int32 sw_sockdesc_t; 389c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringtypedef socklen_t sw_socklen_t; 390c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 391c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_E_WOULDBLOCK EWOULDBLOCK 392c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_INVALID_SOCKET -1 393c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define SW_SOCKET_ERROR -1 394c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 395c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering# define sw_close_socket(X) close(X) 396c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 397c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 398c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 399c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 400c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* -------------------------------------------------------- 401c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 402c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * strerror() 403c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 404c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * This function will print a string rep of a system error 405c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * code 406c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * 407c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * -------------------------------------------------------- 408c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 409c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 410c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_const_string 411c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poetteringsw_strerror(); 412c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 413c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 414c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering/* 415c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * Obsolete types and macros. 416a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering * 417c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * These are here for backwards compatibility, but will 418c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering * be removed in the future 419c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering */ 420c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_char sw_int8 421c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_uchar sw_uint8 422c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_octet sw_uint8 423c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_short sw_int16 424c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_ushort sw_uint16 425c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_long sw_int32 426c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define sw_ulong sw_uint32 427c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 428c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 429c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define SW_TRY(EXPR) { sw_result result; if ((result = EXPR) != SW_OKAY) return result; } ((void) 0) 430c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#define SW_TRY_GOTO(EXPR) { if ((result = EXPR) != SW_OKAY) goto exit; } ((void) 0) 431c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 432c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 433c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#ifdef __cplusplus 434c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering} 435c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 436c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 437c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering 438c6bf0e465bceac2ef0e5f3a3ba97ae1f8b251a40Lennart Poettering#endif 439