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