/*	$CoreSDI: sysdep.h,v 1.16 2001/09/28 22:03:22 claudio Exp $	*/

/*
 *   Copyright (c) 2000, 2001, Core SDI S.A., Argentina
 *   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.
 *   3. Neither name of the Core SDI S.A. nor the names of its contributors
 *      may be used to endorse or promote products derived from this software
 *      without specific prior written permission.
 *  
 *   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
 */

#ifndef SYSDEP_H
#define SYSDEP_H

#ifdef WIN32

#include <wtypes.h>

typedef __int32			socklen_t;
typedef unsigned long		in_addr_t;
typedef long			off_t;
typedef int			ssize_t;
typedef unsigned char		u_int8_t;
typedef __int16			u_int16_t;
typedef __int32			int32_t;

#define EXPORT			__declspec(dllexport)
#define STDIN_FILENO		0
#define STDOUT_FILENO		1
#define STDERR_FILENO		2
#define	O_CREAT			_O_CREAT
#define	O_APPEND		_O_APPEND
#define	S_IRUSR			_S_IREAD
#define	S_IWUSR			_S_IWRITE
#define F_OK			0x00
#define W_OK			0x02
#define R_OK			0x04
#define MAXPATHLEN		_MAX_PATH
#define MAXHOSTNAMELEN		256
#define LINE_MAX		2048
#define NOHAVE_STRLCPY

#define dlclose(handle)		FreeLibrary(handle)
#define	open			_open
#define read(fd, buf, siz)	_read(fd, (char *) buf, siz)
#define write(fd, buf, siz)	_write(fd, (char *) buf, siz)
#define lseek			_lseek
#define	snprintf		_snprintf
#define vsnprintf		_vsnprintf
#define bzero(dst, count)	memset(dst, 0, count)
#define realpath(path, rpath)	_fullpath(rpath, path, MAXPATHLEN)

void	init_windows_wsa();
char *	strsep (char **, char *);
int	getopt (int, char * const *, const char *);
const char * getpass (const char *);

#else	/* !WIN32 */

#define EXPORT

#endif /* WIN32 */

#if !defined(__ELF__) && !defined(WIN32)
#define SYMBOL_PREFIX	"_"
#else
#define SYMBOL_PREFIX	""
#endif /* !__ELF__ && !WIN32 */

#ifdef NOHAVE_STRLCPY
size_t strlcpy (char *, const char *, size_t);
size_t strlcat (char *, const char *, size_t);
#endif /* NOHAVE_STRLCPY */

#ifndef _PASSWORD_LEN
#define _PASSWORD_LEN	128
#endif

#if defined(__FreeBSD__)
typedef int32_t in_addr_t;
#endif /* __FreeBSD__ */

int init_socket ();

#endif /* SYSDEP */

