/* 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_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 */
