/* Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#ifndef APR_H
#define APR_H

/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
 *
 * You must modify apr.hnw instead.
 *
 * And please, make an effort to stub apr.hw and apr.h.in in the process.
 *
 * This is the NetWare specific version of apr.h.  It is copied from
 * apr.hnw at the start of a NetWare build by the ./build/NWGNmakefile.
 */

#if defined(NETWARE) || defined(DOXYGEN)

#undef  FD_SETSIZE
#define FD_SETSIZE 1024

#include <sys/types.h>
#include <stddef.h>
#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <netware.h>
#include <library.h>
#include <nks/thread.h>
#include <nks/synch.h>
#include <nks/time.h>
#include <signal.h>
#ifdef USE_WINSOCK
#include <novsock2.h>
#ifdef NW_BUILD_IPV6
#include <novtcpip.h>
#endif
#else
#include <sys/socket.h>
#include <sys/select.h>
#endif
#include <sys/types.h>

#define _POSIX_THREAD_SAFE_FUNCTIONS    1
#define READDIR_IS_THREAD_SAFE          1

/* Keep #include'd headers from within the __cplusplus or doxyblocks */

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @defgroup apr_platform Platform Definitions
 * @ingroup APR
 * @{
 */

#define APR_INLINE
#define APR_HAS_INLINE                  0
#ifndef __attribute__
#define __attribute__(__x)
#endif
#define ENUM_BITFIELD(e,n,w)  signed int n : w

#define APR_HAVE_CONIO_H                0
#define APR_HAVE_CRYPT_H                0
#define APR_HAVE_CTYPE_H                1
#define APR_HAVE_DIRENT_H               1
#define APR_HAVE_ERRNO_H                1
#define APR_HAVE_FCNTL_H                1
#define APR_HAVE_IO_H                   0
#define APR_HAVE_LIMITS_H               1
#ifdef USE_WINSOCK
#define APR_HAVE_ARPA_INET_H            0
#define APR_HAVE_NETDB_H                0
#define APR_HAVE_NETINET_IN_H           0
#else
#define APR_HAVE_ARPA_INET_H            1
#define APR_HAVE_NETDB_H                1
#define APR_HAVE_NETINET_IN_H           1
#endif
#define APR_HAVE_NETINET_SCTP_H         0
#define APR_HAVE_NETINET_SCTP_UIO_H     0
#define APR_HAVE_NETINET_TCP_H          0
#define APR_HAVE_PTHREAD_H              0
#define APR_HAVE_SIGNAL_H               1
#define APR_HAVE_STDARG_H               1
#define APR_HAVE_STDINT_H               0
#define APR_HAVE_STDIO_H                1
#define APR_HAVE_STDLIB_H               1
#define APR_HAVE_STRING_H               1
#define APR_HAVE_STRINGS_H              0
#define APR_HAVE_STRTOLL                1
#define APR_HAVE_SYS_SENDFILE_H         0
#define APR_HAVE_SYS_SYSLIMITS_H        0
#ifdef USE_WINSOCK
#define APR_HAVE_SYS_SOCKET_H           0
#define APR_HAVE_SYS_SOCKIO_H           0
#define APR_HAVE_SYS_UN_H               0
#else
#define APR_HAVE_SYS_SOCKET_H           1
#define APR_HAVE_SYS_SOCKIO_H           1
#define APR_HAVE_SYS_UN_H               1
#endif
#define APR_HAVE_SYS_SIGNAL_H           1
#define APR_HAVE_SYS_TIME_H             1
#define APR_HAVE_SYS_TYPES_H            1
#define APR_HAVE_SYS_UIO_H              1
#define APR_HAVE_SYS_WAIT_H             1
#define APR_HAVE_TIME_H                 1
#define APR_HAVE_UNISTD_H               1

#define APR_HAVE_SHMEM_MMAP_TMP         0
#define APR_HAVE_SHMEM_MMAP_SHM         0
#define APR_HAVE_SHMEM_MMAP_ZERO        0
#define APR_HAVE_SHMEM_SHMGET_ANON      0
#define APR_HAVE_SHMEM_SHMGET           0
#define APR_HAVE_SHMEM_MMAP_ANON        0
#define APR_HAVE_SHMEM_BEOS             0

#define APR_USE_SHMEM_MMAP_TMP          0
#define APR_USE_SHMEM_MMAP_SHM          0
#define APR_USE_SHMEM_MMAP_ZERO         0
#define APR_USE_SHMEM_SHMGET_ANON       0
#define APR_USE_SHMEM_SHMGET            0
#define APR_USE_SHMEM_MMAP_ANON         0
#define APR_USE_SHMEM_BEOS              0

#define APR_USE_FLOCK_SERIALIZE         0
#define APR_USE_SYSVSEM_SERIALIZE       0
#define APR_USE_FCNTL_SERIALIZE         0
#define APR_USE_PROC_PTHREAD_SERIALIZE  0
#define APR_USE_PTHREAD_SERIALIZE       0

#define APR_HAS_FLOCK_SERIALIZE         0
#define APR_HAS_SYSVSEM_SERIALIZE       0
#define APR_HAS_FCNTL_SERIALIZE         0
#define APR_HAS_PROC_PTHREAD_SERIALIZE  0
#define APR_HAS_RWLOCK_SERIALIZE        0

#define APR_HAS_LOCK_CREATE_NP          0

#define APR_PROCESS_LOCK_IS_GLOBAL      1

#define APR_FILE_BASED_SHM              0

#define APR_HAVE_CORKABLE_TCP           0
#define APR_HAVE_GETRLIMIT              0
#define APR_HAVE_ICONV                  0
#define APR_HAVE_IN_ADDR                1
#define APR_HAVE_INET_ADDR              1
#define APR_HAVE_INET_NETWORK           0
#ifdef NW_BUILD_IPV6
#define APR_HAVE_IPV6                   1
#else
#define APR_HAVE_IPV6                   0
#endif
#ifdef USE_WINSOCK
#define APR_HAVE_SOCKADDR_UN            0
#else
#define APR_HAVE_SOCKADDR_UN            1
#endif
#define APR_HAVE_MEMCHR                 1
#define APR_HAVE_MEMMOVE                1
#define APR_HAVE_SETRLIMIT              0
#define APR_HAVE_SIGACTION              0
#define APR_HAVE_SIGSUSPEND             0
#define APR_HAVE_SIGWAIT                0
#define APR_HAVE_STRCASECMP             1
#define APR_HAVE_STRDUP                 1
#define APR_HAVE_STRICMP                1
#define APR_HAVE_STRNCASECMP            1
#define APR_HAVE_STRNICMP               1
#define APR_HAVE_STRSTR                 1
#define APR_HAVE_STRUCT_RLIMIT          0
#define APR_HAVE_UNION_SEMUN            0
#define APR_HAVE_SCTP                   0
#define APR_HAVE_IOVEC                  1

/*  APR Feature Macros */
#define APR_HAS_SHARED_MEMORY           0
#define APR_HAS_THREADS                 1
#define APR_HAS_SENDFILE                0
#define APR_HAS_MMAP                    0
#define APR_HAS_FORK                    0
#define APR_HAS_RANDOM                  1
#define APR_HAS_OTHER_CHILD             0
#define APR_HAS_DSO                     1
#define APR_HAS_SO_ACCEPTFILTER         0
#define APR_HAS_UNICODE_FS              0
#define APR_HAS_PROC_INVOKED            0
#define APR_HAS_USER                    1
#define APR_HAS_LARGE_FILES             1
#define APR_HAS_XTHREAD_FILES           0
#define APR_HAS_OS_UUID                 0

#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0

/* Netware can poll on files/pipes.
 */
#define APR_FILES_AS_SOCKETS            1

/* This macro indicates whether or not EBCDIC is the native character set.
 */
#define APR_CHARSET_EBCDIC              0

/* Is the TCP_NODELAY socket option inherited from listening sockets?
 */
#define APR_TCP_NODELAY_INHERITED       1

/* Is the O_NONBLOCK flag inherited from listening sockets?
 */
#define APR_O_NONBLOCK_INHERITED        1

/* Typedefs that APR needs. */

typedef  unsigned char     apr_byte_t;

typedef  short             apr_int16_t;
typedef  unsigned short    apr_uint16_t;

typedef  int               apr_int32_t;
typedef  unsigned int      apr_uint32_t;

typedef  long long          apr_int64_t;
typedef  unsigned long long apr_uint64_t;

typedef  size_t            apr_size_t;
typedef  ssize_t           apr_ssize_t;
#if APR_HAS_LARGE_FILES
typedef  off64_t           apr_off_t;
#else
typedef  off_t             apr_off_t;
#endif
#ifdef USE_WINSOCK
typedef  int               apr_socklen_t;
#else
typedef  size_t            apr_socklen_t;
#endif
typedef  apr_uint64_t      apr_ino_t;

/* Are we big endian? */
/* XXX: Fatal assumption on Alpha platforms */
#define APR_IS_BIGENDIAN   0

#ifdef UNKNOWN_NETWARE_64BIT_FLAG_NEEDED
#define APR_SIZEOF_VOIDP   8
#else
#define APR_SIZEOF_VOIDP   4
#endif
#if APR_HAS_LARGE_FILES
#define APR_SIZEOF_OFF_T   8
#else
#define APR_SIZEOF_OFF_T   4
#endif

#if APR_SIZEOF_VOIDP == 8
typedef  apr_uint64_t            apr_uintptr_t;
typedef  apr_int64_t             apr_intptr_t;
#else
typedef  apr_uint32_t            apr_uintptr_t;
typedef  apr_int32_t             apr_intptr_t;
#endif

/* Mechanisms to properly type numeric literals */
#define APR_INT64_C(val) (val##LL)
#define APR_UINT64_C(val) (val##ULL)

#ifdef INT16_MIN
#define APR_INT16_MIN   INT16_MIN
#else
#define APR_INT16_MIN   (-0x7fff - 1)
#endif

#ifdef INT16_MAX
#define APR_INT16_MAX  INT16_MAX
#else
#define APR_INT16_MAX   (0x7fff)
#endif

#ifdef UINT16_MAX
#define APR_UINT16_MAX  UINT16_MAX
#else
#define APR_UINT16_MAX  (0xffff)
#endif

#ifdef INT32_MIN
#define APR_INT32_MIN   INT32_MIN
#else
#define APR_INT32_MIN   (-0x7fffffff - 1)
#endif

#ifdef INT32_MAX
#define APR_INT32_MAX  INT32_MAX
#else
#define APR_INT32_MAX  0x7fffffff
#endif

#ifdef UINT32_MAX
#define APR_UINT32_MAX  UINT32_MAX
#else
#define APR_UINT32_MAX  (0xffffffffU)
#endif

#ifdef INT64_MIN
#define APR_INT64_MIN   INT64_MIN
#else
#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
#endif

#ifdef INT64_MAX
#define APR_INT64_MAX   INT64_MAX
#else
#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
#endif

#ifdef UINT64_MAX
#define APR_UINT64_MAX  UINT64_MAX
#else
#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
#endif

#define APR_SIZE_MAX    (~((apr_size_t)0))

/* PROC mutex is a GLOBAL mutex on Netware */
#define APR_PROC_MUTEX_IS_GLOBAL        1

/* Definitions that APR programs need to work properly. */

/**
 * APR public API wrap for C++ compilers.
 */
#ifdef __cplusplus
#define APR_BEGIN_DECLS     extern "C" {
#define APR_END_DECLS       }
#else
#define APR_BEGIN_DECLS
#define APR_END_DECLS
#endif

/**
 * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC,
 * so that they follow the platform's calling convention.
 * @example
 */
/** void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
 */
#define APR_THREAD_FUNC

/**
 * The public APR functions are declared with APR_DECLARE(), so they may
 * use the most appropriate calling convention.  Public APR functions with
 * variable arguments must use APR_DECLARE_NONSTD().
 *
 * @remark Both the declaration and implementations must use the same macro.
 * @example
 */
/** APR_DECLARE(rettype) apr_func(args)
 * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
 * @remark Note that when APR compiles the library itself, it passes the
 * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32)
 * to export public symbols from the dynamic library build.\n
 * The user must define the APR_DECLARE_STATIC when compiling to target
 * the static APR library on some platforms (e.g. Win32.)  The public symbols
 * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
 * By default, compiling an application and including the APR public
 * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
 * linked to the dynamic library.
 */
#define APR_DECLARE(type)            type

/**
 * The public APR functions using variable arguments are declared with
 * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
 * @see APR_DECLARE @see APR_DECLARE_DATA
 * @remark Both the declaration and implementations must use the same macro.
 * @example
 */
/** APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
 */
#define APR_DECLARE_NONSTD(type)     type

/**
 * The public APR variables are declared with APR_DECLARE_DATA.
 * This assures the appropriate indirection is invoked at compile time.
 * @see APR_DECLARE @see APR_DECLARE_NONSTD
 * @remark Note that the declaration and implementations use different forms,
 * but both must include the macro.
 * @example
 */
/** extern APR_DECLARE_DATA type apr_variable;\n
 * APR_DECLARE_DATA type apr_variable = value;
 */
#define APR_DECLARE_DATA

#if !defined(WIN32) || defined(APU_MODULE_DECLARE_STATIC)
/**
 * Declare a dso module's exported module structure as APR_MODULE_DECLARE_DATA.
 *
 * Unless APR_MODULE_DECLARE_STATIC is defined at compile time, symbols
 * declared with APR_MODULE_DECLARE_DATA are always exported.
 * @code
 * module APR_MODULE_DECLARE_DATA mod_tag
 * @endcode
 */
#define APR_MODULE_DECLARE_DATA
#else
#define APR_MODULE_DECLARE_DATA           __declspec(dllexport)
#endif

/**
 * @deprecated
 * @see APR_MODULE_DECLARE_DATA
 */
#define APU_MODULE_DECLARE_DATA           APR_MODULE_DECLARE_DATA

#define APR_SSIZE_T_FMT          "d"

#define APR_SIZE_T_FMT           "d"

#if APR_HAS_LARGE_FILES
#define APR_OFF_T_FMT            "lld"
#else
#define APR_OFF_T_FMT            "ld"
#endif

#define APR_PID_T_FMT            "d"

/* Local machine definition for console and log output. */
#define APR_EOL_STR              "\r\n"

typedef int apr_wait_t;

#define APR_PATH_MAX PATH_MAX

#define APR_DSOPATH "PATH"

#define APR_INT64_T_FMT          "lld"
#define APR_UINT64_T_FMT         "llu"
#define APR_UINT64_T_HEX_FMT     "llx"
#define APR_TIME_T_FMT APR_INT64_T_FMT

/*
 * we always have SDBM (it's in our codebase)
 */
#define APU_HAVE_SDBM           1

#ifndef APU_DSO_MODULE_BUILD
#define APU_HAVE_GDBM           0
#define APU_HAVE_NDBM           0
#define APU_HAVE_DB             0

#if APU_HAVE_DB
#define APU_HAVE_DB_VERSION     0
#endif
#endif

/*
 * we always enable dynamic driver loads within apr_dbd
 */
#ifndef APU_DSO_MODULE_BUILD
#define APU_HAVE_PGSQL          0
#define APU_HAVE_MYSQL          0
#define APU_HAVE_SQLITE3        0
#define APU_HAVE_SQLITE2        0
#define APU_HAVE_ORACLE         0
#define APU_HAVE_ODBC           0
#endif

#define APU_HAVE_CRYPTO         0

#ifndef APU_DSO_MODULE_BUILD
#define APU_HAVE_OPENSSL        0
#define APU_HAVE_NSS            0
#define APU_HAVE_COMMONCRYPTO   0
#endif

#define APU_HAVE_ICONV          1
#define APR_HAS_XLATE           (APU_HAVE_ICONV)

/** @} */

#ifdef __cplusplus
}
#endif

#endif /* NETWARE */

#endif /* APR_H */
