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

/**
 * @file apr.h
 * @brief APR Platform Definitions
 * @remark This is a generated header generated from include/apr.h.in by
 * ./configure, or copied from include/apr.hw or include/apr.hnw
 * for Win32 or Netware by those build environments, respectively.
 */

#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 <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
#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;
#else
typedef  apr_uint32_t            apr_uintptr_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

#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

/** @} */

#ifdef __cplusplus
}
#endif

#endif /* NETWARE */

#endif /* APR_H */
