feat:replace boost library with C++11 std library

This commit is contained in:
Livox-SDK
2020-04-01 20:53:55 +08:00
parent 6d06233944
commit d3258bbd97
1936 changed files with 241862 additions and 60153 deletions
@@ -0,0 +1,63 @@
/* 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 ATIME_H
#define ATIME_H
#include "apr_private.h"
#include "apr_time.h"
#if APR_HAVE_TIME_H
#include <time.h>
#endif
struct atime_t {
apr_pool_t *cntxt;
apr_time_t currtime;
SYSTEMTIME *explodedtime;
};
/* Number of micro-seconds between the beginning of the Windows epoch
* (Jan. 1, 1601) and the Unix epoch (Jan. 1, 1970)
*/
#define APR_DELTA_EPOCH_IN_USEC APR_TIME_C(11644473600000000);
static APR_INLINE void FileTimeToAprTime(apr_time_t *result, FILETIME *input)
{
/* Convert FILETIME one 64 bit number so we can work with it. */
*result = input->dwHighDateTime;
*result = (*result) << 32;
*result |= input->dwLowDateTime;
*result /= 10; /* Convert from 100 nano-sec periods to micro-seconds. */
*result -= APR_DELTA_EPOCH_IN_USEC; /* Convert from Windows epoch to Unix epoch */
return;
}
static APR_INLINE void AprTimeToFileTime(LPFILETIME pft, apr_time_t t)
{
LONGLONG ll;
t += APR_DELTA_EPOCH_IN_USEC;
ll = t * 10;
pft->dwLowDateTime = (DWORD)ll;
pft->dwHighDateTime = (DWORD) (ll >> 32);
return;
}
#endif /* ! ATIME_H */
@@ -0,0 +1,36 @@
/* 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 DSO_H
#define DSO_H
#include "apr_private.h"
#include "apr_general.h"
#include "apr_pools.h"
#include "apr_dso.h"
#include "apr.h"
#if APR_HAS_DSO
struct apr_dso_handle_t {
apr_pool_t *cont;
void *handle;
apr_status_t load_error;
};
#endif
#endif
@@ -0,0 +1,265 @@
/* 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 FILE_IO_H
#define FILE_IO_H
#include "apr.h"
#include "apr_private.h"
#include "apr_pools.h"
#include "apr_general.h"
#include "apr_tables.h"
#include "apr_thread_mutex.h"
#include "apr_file_io.h"
#include "apr_file_info.h"
#include "apr_errno.h"
#include "apr_arch_misc.h"
#include "apr_poll.h"
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#if APR_HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_TIME_H
#include <time.h>
#endif
#if APR_HAVE_DIRENT_H
#include <dirent.h>
#endif
#ifdef HAVE_MALLOC_H
#include <malloc.h>
#endif
#if APR_HAS_UNICODE_FS
#include "arch/win32/apr_arch_utf8.h"
#include <wchar.h>
/* Helper functions for the WinNT ApiW() functions. APR treats all
* resource identifiers (files, etc) by their UTF-8 name, to provide
* access to all named identifiers. [UTF-8 completely maps Unicode
* into char type strings.]
*
* The _path flavors below provide us fast mappings of the
* Unicode filename //?/D:/path and //?/UNC/mach/share/path mappings,
* which allow unlimited (well, 32000 wide character) length names.
* These prefixes may appear in Unicode, but must not appear in the
* Ascii API calls. So we tack them on in utf8_to_unicode_path, and
* strip them right back off in unicode_to_utf8_path.
*/
apr_status_t utf8_to_unicode_path(apr_wchar_t* dststr, apr_size_t dstchars,
const char* srcstr);
apr_status_t unicode_to_utf8_path(char* dststr, apr_size_t dstchars,
const apr_wchar_t* srcstr);
#endif /* APR_HAS_UNICODE_FS */
/* Another Helper functions for the WinNT ApiW() functions. We need to
* derive some 'resource' names (max length 255 characters, prefixed with
* Global/ or Local/ on WinNT) from something that looks like a filename.
* Since 'resource' names never contain slashes, convert these to '_'s
* and return the appropriate char* or wchar* for ApiA or ApiW calls.
*/
void *res_name_from_filename(const char *file, int global, apr_pool_t *pool);
#define APR_FILE_MAX MAX_PATH
#define APR_FILE_DEFAULT_BUFSIZE 4096
/* For backwards-compat */
#define APR_FILE_BUFSIZE APR_FILE_DEFAULT_BUFSIZE
/* obscure ommissions from msvc's sys/stat.h */
#ifdef _MSC_VER
#define S_IFIFO _S_IFIFO /* pipe */
#define S_IFBLK 0060000 /* Block Special */
#define S_IFLNK 0120000 /* Symbolic Link */
#define S_IFSOCK 0140000 /* Socket */
#define S_IFWHT 0160000 /* Whiteout */
#endif
/* Internal Flags for apr_file_open */
#define APR_OPENINFO 0x00100000 /* Open without READ or WRITE access */
#define APR_OPENLINK 0x00200000 /* Open a link itself, if supported */
#define APR_READCONTROL 0x00400000 /* Read the file's owner/perms */
#define APR_WRITECONTROL 0x00800000 /* Modify the file's owner/perms */
/* #define APR_INHERIT 0x01000000 -- Defined in apr_arch_inherit.h! */
#define APR_STDIN_FLAG 0x02000000 /* Obtained via apr_file_open_stdin() */
#define APR_STDOUT_FLAG 0x04000000 /* Obtained via apr_file_open_stdout() */
#define APR_STDERR_FLAG 0x06000000 /* Obtained via apr_file_open_stderr() */
#define APR_STD_FLAGS (APR_STDIN_FLAG | APR_STDOUT_FLAG | APR_STDERR_FLAG)
#define APR_WRITEATTRS 0x08000000 /* Modify the file's attributes */
/* Entries missing from the MSVC 5.0 Win32 SDK:
*/
#ifndef FILE_ATTRIBUTE_DEVICE
#define FILE_ATTRIBUTE_DEVICE 0x00000040
#endif
#ifndef FILE_ATTRIBUTE_REPARSE_POINT
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
#endif
#ifndef FILE_FLAG_OPEN_NO_RECALL
#define FILE_FLAG_OPEN_NO_RECALL 0x00100000
#endif
#ifndef FILE_FLAG_OPEN_REPARSE_POINT
#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
#endif
#ifndef TRUSTEE_IS_WELL_KNOWN_GROUP
#define TRUSTEE_IS_WELL_KNOWN_GROUP 5
#endif
/* Information bits available from the WIN32 FindFirstFile function */
#define APR_FINFO_WIN32_DIR (APR_FINFO_NAME | APR_FINFO_TYPE \
| APR_FINFO_CTIME | APR_FINFO_ATIME \
| APR_FINFO_MTIME | APR_FINFO_SIZE)
/* Sneak the Readonly bit through finfo->protection for internal use _only_ */
#define APR_FREADONLY 0x10000000
/* Private function for apr_stat/lstat/getfileinfo/dir_read */
int fillin_fileinfo(apr_finfo_t *finfo, WIN32_FILE_ATTRIBUTE_DATA *wininfo,
int byhandle, apr_int32_t wanted);
/* Private function that extends apr_stat/lstat/getfileinfo/dir_read */
apr_status_t more_finfo(apr_finfo_t *finfo, const void *ufile,
apr_int32_t wanted, int whatfile);
/* whatfile types for the ufile arg */
#define MORE_OF_HANDLE 0
#define MORE_OF_FSPEC 1
#define MORE_OF_WFSPEC 2
/* quick run-down of fields in windows' apr_file_t structure that may have
* obvious uses.
* fname -- the filename as passed to the open call.
* dwFileAttricutes -- Attributes used to open the file.
* append -- Windows doesn't support the append concept when opening files.
* APR needs to keep track of this, and always make sure we append
* correctly when writing to a file with this flag set TRUE.
*/
/* for apr_poll.c */
#define filedes filehand
struct apr_file_t {
apr_pool_t *pool;
HANDLE filehand;
BOOLEAN pipe; /* Is this a pipe of a file? */
OVERLAPPED *pOverlapped;
apr_interval_time_t timeout;
apr_int32_t flags;
/* File specific info */
apr_finfo_t *finfo;
char *fname;
DWORD dwFileAttributes;
int eof_hit;
BOOLEAN buffered; /* Use buffered I/O? */
int ungetchar; /* Last char provided by an unget op. (-1 = no char) */
int append;
/* Stuff for buffered mode */
char *buffer;
apr_size_t bufpos; /* Read/Write position in buffer */
apr_size_t bufsize; /* The size of the buffer */
apr_size_t dataRead; /* amount of valid data read into buffer */
int direction; /* buffer being used for 0 = read, 1 = write */
apr_off_t filePtr; /* position in file of handle */
apr_thread_mutex_t *mutex; /* mutex semaphore, must be owned to access
* the above fields */
#if APR_FILES_AS_SOCKETS
/* if there is a timeout set, then this pollset is used */
apr_pollset_t *pollset;
#endif
/* Pipe specific info */
};
struct apr_dir_t {
apr_pool_t *pool;
HANDLE dirhand;
apr_size_t rootlen;
char *dirname;
char *name;
union {
#if APR_HAS_UNICODE_FS
struct {
WIN32_FIND_DATAW *entry;
} w;
#endif
#if APR_HAS_ANSI_FS
struct {
WIN32_FIND_DATAA *entry;
} n;
#endif
};
int bof;
};
/* There are many goofy characters the filesystem can't accept
* or can confound the cmd.exe shell. Here's the list
* [declared in filesys.c]
*/
extern const char apr_c_is_fnchar[256];
#define IS_FNCHAR(c) (apr_c_is_fnchar[(unsigned char)(c)] & 1)
#define IS_SHCHAR(c) ((apr_c_is_fnchar[(unsigned char)(c)] & 2) == 2)
/* If the user passes APR_FILEPATH_TRUENAME to either
* apr_filepath_root or apr_filepath_merge, this fn determines
* that the root really exists. It's expensive, wouldn't want
* to do this too frequenly.
*/
apr_status_t filepath_root_test(char *path, apr_pool_t *p);
/* The apr_filepath_merge wants to canonicalize the cwd to the
* addpath if the user passes NULL as the old root path (this
* isn't true of an empty string "", which won't be concatenated.
*
* But we need to figure out what the cwd of a given volume is,
* when the user passes D:foo. This fn will determine D:'s cwd.
*
* If flags includes the bit APR_FILEPATH_NATIVE, the path returned
* is in the os-native format.
*/
apr_status_t filepath_drive_get(char **rootpath, char drive,
apr_int32_t flags, apr_pool_t *p);
/* If the user passes d: vs. D: (or //mach/share vs. //MACH/SHARE),
* we need to fold the case to canonical form. This function is
* supposed to do so.
*/
apr_status_t filepath_root_case(char **rootpath, char *root, apr_pool_t *p);
apr_status_t file_cleanup(void *);
extern apr_status_t
apr_file_socket_pipe_create(apr_file_t **in,
apr_file_t **out,
apr_pool_t *p);
extern apr_status_t
apr_file_socket_pipe_close(apr_file_t *file);
#endif /* ! FILE_IO_H */
@@ -0,0 +1,123 @@
/* 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 INHERIT_H
#define INHERIT_H
#include "apr_inherit.h"
#define APR_INHERIT (1 << 24) /* Must not conflict with other bits */
#if APR_HAS_UNICODE_FS && APR_HAS_ANSI_FS
/* !defined(_WIN32_WCE) is implicit here */
#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup) \
APR_DECLARE(apr_status_t) apr_##name##_inherit_set(apr_##name##_t *the##name) \
{ \
IF_WIN_OS_IS_UNICODE \
{ \
/* if (!SetHandleInformation(the##name->filehand, \
* HANDLE_FLAG_INHERIT, \
* HANDLE_FLAG_INHERIT)) \
* return apr_get_os_error(); \
*/ } \
ELSE_WIN_OS_IS_ANSI \
{ \
HANDLE temp, hproc = GetCurrentProcess(); \
if (!DuplicateHandle(hproc, the##name->filehand, \
hproc, &temp, 0, TRUE, \
DUPLICATE_SAME_ACCESS)) \
return apr_get_os_error(); \
CloseHandle(the##name->filehand); \
the##name->filehand = temp; \
} \
return APR_SUCCESS; \
}
#define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup) \
APR_DECLARE(apr_status_t) apr_##name##_inherit_unset(apr_##name##_t *the##name)\
{ \
IF_WIN_OS_IS_UNICODE \
{ \
/* if (!SetHandleInformation(the##name->filehand, \
* HANDLE_FLAG_INHERIT, 0)) \
* return apr_get_os_error(); \
*/ } \
ELSE_WIN_OS_IS_ANSI \
{ \
HANDLE temp, hproc = GetCurrentProcess(); \
if (!DuplicateHandle(hproc, the##name->filehand, \
hproc, &temp, 0, FALSE, \
DUPLICATE_SAME_ACCESS)) \
return apr_get_os_error(); \
CloseHandle(the##name->filehand); \
the##name->filehand = temp; \
} \
return APR_SUCCESS; \
}
#elif APR_HAS_ANSI_FS || defined(_WIN32_WCE)
#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup) \
APR_DECLARE(apr_status_t) apr_##name##_inherit_set(apr_##name##_t *the##name) \
{ \
HANDLE temp, hproc = GetCurrentProcess(); \
if (!DuplicateHandle(hproc, the##name->filehand, \
hproc, &temp, 0, TRUE, \
DUPLICATE_SAME_ACCESS)) \
return apr_get_os_error(); \
CloseHandle(the##name->filehand); \
the##name->filehand = temp; \
return APR_SUCCESS; \
}
#define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup) \
APR_DECLARE(apr_status_t) apr_##name##_inherit_unset(apr_##name##_t *the##name)\
{ \
HANDLE temp, hproc = GetCurrentProcess(); \
if (!DuplicateHandle(hproc, the##name->filehand, \
hproc, &temp, 0, FALSE, \
DUPLICATE_SAME_ACCESS)) \
return apr_get_os_error(); \
CloseHandle(the##name->filehand); \
the##name->filehand = temp; \
return APR_SUCCESS; \
}
#else /* APR_HAS_UNICODE_FS && !APR_HAS_ANSI_FS && !defined(_WIN32_WCE) */
#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup) \
APR_DECLARE(apr_status_t) apr_##name##_inherit_set(apr_##name##_t *the##name) \
{ \
/* if (!SetHandleInformation(the##name->filehand, \
* HANDLE_FLAG_INHERIT, \
* HANDLE_FLAG_INHERIT)) \
* return apr_get_os_error(); \
*/ return APR_SUCCESS; \
}
#define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup) \
APR_DECLARE(apr_status_t) apr_##name##_inherit_unset(apr_##name##_t *the##name)\
{ \
/* if (!SetHandleInformation(the##name->filehand, \
* HANDLE_FLAG_INHERIT, 0)) \
* return apr_get_os_error(); \
*/ return APR_SUCCESS; \
}
#endif /* defined(APR_HAS_UNICODE_FS) */
#endif /* ! INHERIT_H */
@@ -0,0 +1,487 @@
/* 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 MISC_H
#define MISC_H
#include "apr.h"
#include "apr_portable.h"
#include "apr_private.h"
#include "apr_general.h"
#include "apr_pools.h"
#include "apr_getopt.h"
#include "apr_thread_proc.h"
#include "apr_file_io.h"
#include "apr_errno.h"
#include "apr_getopt.h"
#if APR_HAVE_STDIO_H
#include <stdio.h>
#endif
#if APR_HAVE_SIGNAL_H
#include <signal.h>
#endif
#if APR_HAVE_PTHREAD_H
#include <pthread.h>
#endif
#if APR_HAVE_STDLIB_H
#include <stdlib.h>
#endif
#if APR_HAVE_STRING_H
#include <string.h>
#endif
#ifndef _WIN32_WCE
#include <tlhelp32.h>
#endif
struct apr_other_child_rec_t {
apr_pool_t *p;
struct apr_other_child_rec_t *next;
apr_proc_t *proc;
void (*maintenance) (int, void *, int);
void *data;
apr_os_file_t write_fd;
};
#define WSAHighByte 2
#define WSALowByte 0
/* start.c and apr_app.c helpers and communication within misc.c
*
* They are not for public consumption, although apr_app_init_complete
* must be an exported symbol to avoid reinitialization.
*/
extern int APR_DECLARE_DATA apr_app_init_complete;
int apr_wastrtoastr(char const * const * *retarr,
wchar_t const * const *arr, int args);
/* Platform specific designation of run time os version.
* Gaps allow for specific service pack levels that
* export new kernel or winsock functions or behavior.
*/
typedef enum {
APR_WIN_UNK = 0,
APR_WIN_UNSUP = 1,
APR_WIN_95 = 10,
APR_WIN_95_B = 11,
APR_WIN_95_OSR2 = 12,
APR_WIN_98 = 14,
APR_WIN_98_SE = 16,
APR_WIN_ME = 18,
APR_WIN_UNICODE = 20, /* Prior versions support only narrow chars */
APR_WIN_CE_3 = 23, /* CE is an odd beast, not supporting */
/* some pre-NT features, such as the */
APR_WIN_NT = 30, /* narrow charset APIs (fooA fns), while */
APR_WIN_NT_3_5 = 35, /* not supporting some NT-family features. */
APR_WIN_NT_3_51 = 36,
APR_WIN_NT_4 = 40,
APR_WIN_NT_4_SP2 = 42,
APR_WIN_NT_4_SP3 = 43,
APR_WIN_NT_4_SP4 = 44,
APR_WIN_NT_4_SP5 = 45,
APR_WIN_NT_4_SP6 = 46,
APR_WIN_2000 = 50,
APR_WIN_2000_SP1 = 51,
APR_WIN_2000_SP2 = 52,
APR_WIN_XP = 60,
APR_WIN_XP_SP1 = 61,
APR_WIN_XP_SP2 = 62,
APR_WIN_2003 = 70,
APR_WIN_VISTA = 80,
APR_WIN_7 = 90
} apr_oslevel_e;
extern APR_DECLARE_DATA apr_oslevel_e apr_os_level;
apr_status_t apr_get_oslevel(apr_oslevel_e *);
/* The APR_HAS_ANSI_FS symbol is PRIVATE, and internal to APR.
* APR only supports char data for filenames. Like most applications,
* characters >127 are essentially undefined. APR_HAS_UNICODE_FS lets
* the application know that utf-8 is the encoding method of APR, and
* only incidently hints that we have Wide OS calls.
*
* APR_HAS_ANSI_FS is simply an OS flag to tell us all calls must be
* the unicode eqivilant.
*/
#if defined(_WIN32_WCE) || defined(WINNT)
#define APR_HAS_ANSI_FS 0
#else
#define APR_HAS_ANSI_FS 1
#endif
/* IF_WIN_OS_IS_UNICODE / ELSE_WIN_OS_IS_ANSI help us keep the code trivial
* where have runtime tests for unicode-ness, that aren't needed in any
* build which supports only WINNT or WCE.
*/
#if APR_HAS_ANSI_FS && APR_HAS_UNICODE_FS
#define IF_WIN_OS_IS_UNICODE if (apr_os_level >= APR_WIN_UNICODE)
#define ELSE_WIN_OS_IS_ANSI else
#else /* APR_HAS_UNICODE_FS */
#define IF_WIN_OS_IS_UNICODE
#define ELSE_WIN_OS_IS_ANSI
#endif /* WINNT */
#if defined(_MSC_VER) && !defined(_WIN32_WCE)
#include "crtdbg.h"
static APR_INLINE void* apr_malloc_dbg(size_t size, const char* filename,
int linenumber)
{
return _malloc_dbg(size, _CRT_BLOCK, filename, linenumber);
}
static APR_INLINE void* apr_realloc_dbg(void* userData, size_t newSize,
const char* filename, int linenumber)
{
return _realloc_dbg(userData, newSize, _CRT_BLOCK, filename, linenumber);
}
#else
static APR_INLINE void* apr_malloc_dbg(size_t size, const char* filename,
int linenumber)
{
return malloc(size);
}
static APR_INLINE void* apr_realloc_dbg(void* userData, size_t newSize,
const char* filename, int linenumber)
{
return realloc(userData, newSize);
}
#endif /* ! _MSC_VER */
typedef enum {
DLL_WINBASEAPI = 0, /* kernel32 From WinBase.h */
DLL_WINADVAPI = 1, /* advapi32 From WinBase.h */
DLL_WINSOCKAPI = 2, /* mswsock From WinSock.h */
DLL_WINSOCK2API = 3, /* ws2_32 From WinSock2.h */
DLL_SHSTDAPI = 4, /* shell32 From ShellAPI.h */
DLL_NTDLL = 5, /* shell32 From our real kernel */
DLL_defined = 6 /* must define as last idx_ + 1 */
} apr_dlltoken_e;
FARPROC apr_load_dll_func(apr_dlltoken_e fnLib, char *fnName, int ordinal);
/* The apr_load_dll_func call WILL return 0 set error to
* ERROR_INVALID_FUNCTION if the function cannot be loaded
*/
#define APR_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
typedef rettype (calltype *apr_winapi_fpt_##fn) args; \
static apr_winapi_fpt_##fn apr_winapi_pfn_##fn = NULL; \
static int apr_winapi_chk_##fn = 0; \
static APR_INLINE int apr_winapi_ld_##fn(void) \
{ if (apr_winapi_pfn_##fn) return 1; \
if (apr_winapi_chk_##fn ++) return 0; \
if (!apr_winapi_pfn_##fn) \
apr_winapi_pfn_##fn = (apr_winapi_fpt_##fn) \
apr_load_dll_func(lib, #fn, ord); \
if (apr_winapi_pfn_##fn) return 1; else return 0; }; \
static APR_INLINE rettype apr_winapi_##fn args \
{ if (apr_winapi_ld_##fn()) \
return (*(apr_winapi_pfn_##fn)) names; \
else { SetLastError(ERROR_INVALID_FUNCTION); return 0;} }; \
#define APR_HAVE_LATE_DLL_FUNC(fn) apr_winapi_ld_##fn()
/* Provide late bound declarations of every API function missing from
* one or more supported releases of the Win32 API
*
* lib is the enumerated token from apr_dlltoken_e, and must correspond
* to the string table entry in start.c used by the apr_load_dll_func().
* Token names (attempt to) follow Windows.h declarations prefixed by DLL_
* in order to facilitate comparison. Use the exact declaration syntax
* and names from Windows.h to prevent ambigutity and bugs.
*
* rettype and calltype follow the original declaration in Windows.h
* fn is the true function name - beware Ansi/Unicode #defined macros
* ord is the ordinal within the library, use 0 if it varies between versions
* args is the parameter list following the original declaration, in parens
* names is the parameter list sans data types, enclosed in parens
*
* #undef/re#define the Ansi/Unicode generic name to abate confusion
* In the case of non-text functions, simply #define the original name
*/
#if !defined(_WIN32_WCE) && !defined(WINNT)
/* This group is available to all versions of WINNT 4.0 SP6 and later */
#ifdef GetFileAttributesExA
#undef GetFileAttributesExA
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, GetFileAttributesExA, 0, (
IN LPCSTR lpFileName,
IN GET_FILEEX_INFO_LEVELS fInfoLevelId,
OUT LPVOID lpFileInformation),
(lpFileName, fInfoLevelId, lpFileInformation));
#define GetFileAttributesExA apr_winapi_GetFileAttributesExA
#undef GetFileAttributesEx
#define GetFileAttributesEx apr_winapi_GetFileAttributesExA
#ifdef GetFileAttributesExW
#undef GetFileAttributesExW
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, GetFileAttributesExW, 0, (
IN LPCWSTR lpFileName,
IN GET_FILEEX_INFO_LEVELS fInfoLevelId,
OUT LPVOID lpFileInformation),
(lpFileName, fInfoLevelId, lpFileInformation));
#define GetFileAttributesExW apr_winapi_GetFileAttributesExW
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
IN HANDLE hFile),
(hFile));
#define CancelIo apr_winapi_CancelIo
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, TryEnterCriticalSection, 0, (
LPCRITICAL_SECTION lpCriticalSection),
(lpCriticalSection));
#define TryEnterCriticalSection apr_winapi_TryEnterCriticalSection
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, SwitchToThread, 0, (
void),
());
#define SwitchToThread apr_winapi_SwitchToThread
APR_DECLARE_LATE_DLL_FUNC(DLL_WINADVAPI, BOOL, WINAPI, GetEffectiveRightsFromAclW, 0, (
IN PACL pacl,
IN PTRUSTEE_W pTrustee,
OUT PACCESS_MASK pAccessRights),
(pacl, pTrustee, pAccessRights));
#define GetEffectiveRightsFromAclW apr_winapi_GetEffectiveRightsFromAclW
APR_DECLARE_LATE_DLL_FUNC(DLL_WINADVAPI, BOOL, WINAPI, GetNamedSecurityInfoW, 0, (
IN LPWSTR pObjectName,
IN SE_OBJECT_TYPE ObjectType,
IN SECURITY_INFORMATION SecurityInfo,
OUT PSID *ppsidOwner,
OUT PSID *ppsidGroup,
OUT PACL *ppDacl,
OUT PACL *ppSacl,
OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor),
(pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup,
ppDacl, ppSacl, ppSecurityDescriptor));
#define GetNamedSecurityInfoW apr_winapi_GetNamedSecurityInfoW
APR_DECLARE_LATE_DLL_FUNC(DLL_WINADVAPI, BOOL, WINAPI, GetNamedSecurityInfoA, 0, (
IN LPSTR pObjectName,
IN SE_OBJECT_TYPE ObjectType,
IN SECURITY_INFORMATION SecurityInfo,
OUT PSID *ppsidOwner,
OUT PSID *ppsidGroup,
OUT PACL *ppDacl,
OUT PACL *ppSacl,
OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor),
(pObjectName, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup,
ppDacl, ppSacl, ppSecurityDescriptor));
#define GetNamedSecurityInfoA apr_winapi_GetNamedSecurityInfoA
#undef GetNamedSecurityInfo
#define GetNamedSecurityInfo apr_winapi_GetNamedSecurityInfoA
APR_DECLARE_LATE_DLL_FUNC(DLL_WINADVAPI, BOOL, WINAPI, GetSecurityInfo, 0, (
IN HANDLE handle,
IN SE_OBJECT_TYPE ObjectType,
IN SECURITY_INFORMATION SecurityInfo,
OUT PSID *ppsidOwner,
OUT PSID *ppsidGroup,
OUT PACL *ppDacl,
OUT PACL *ppSacl,
OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor),
(handle, ObjectType, SecurityInfo, ppsidOwner, ppsidGroup,
ppDacl, ppSacl, ppSecurityDescriptor));
#define GetSecurityInfo apr_winapi_GetSecurityInfo
APR_DECLARE_LATE_DLL_FUNC(DLL_SHSTDAPI, LPWSTR *, WINAPI, CommandLineToArgvW, 0, (
LPCWSTR lpCmdLine,
int *pNumArgs),
(lpCmdLine, pNumArgs));
#define CommandLineToArgvW apr_winapi_CommandLineToArgvW
#endif /* !defined(_WIN32_WCE) && !defined(WINNT) */
#if !defined(_WIN32_WCE)
/* This group is NOT available to all versions of WinNT,
* these we must always look up
*/
#ifdef GetCompressedFileSizeA
#undef GetCompressedFileSizeA
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, DWORD, WINAPI, GetCompressedFileSizeA, 0, (
IN LPCSTR lpFileName,
OUT LPDWORD lpFileSizeHigh),
(lpFileName, lpFileSizeHigh));
#define GetCompressedFileSizeA apr_winapi_GetCompressedFileSizeA
#undef GetCompressedFileSize
#define GetCompressedFileSize apr_winapi_GetCompressedFileSizeA
#ifdef GetCompressedFileSizeW
#undef GetCompressedFileSizeW
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, DWORD, WINAPI, GetCompressedFileSizeW, 0, (
IN LPCWSTR lpFileName,
OUT LPDWORD lpFileSizeHigh),
(lpFileName, lpFileSizeHigh));
#define GetCompressedFileSizeW apr_winapi_GetCompressedFileSizeW
APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, LONG, WINAPI, NtQueryTimerResolution, 0, (
ULONG *pMaxRes, /* Minimum NS Resolution */
ULONG *pMinRes, /* Maximum NS Resolution */
ULONG *pCurRes), /* Current NS Resolution */
(pMaxRes, pMinRes, pCurRes));
#define QueryTimerResolution apr_winapi_NtQueryTimerResolution
APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, LONG, WINAPI, NtSetTimerResolution, 0, (
ULONG ReqRes, /* Requested NS Clock Resolution */
BOOL Acquire, /* Aquire (1) or Release (0) our interest */
ULONG *pNewRes), /* The NS Clock Resolution granted */
(ReqRes, Acquire, pNewRes));
#define SetTimerResolution apr_winapi_NtSetTimerResolution
typedef struct PBI {
LONG ExitStatus;
PVOID PebBaseAddress;
apr_uintptr_t AffinityMask;
LONG BasePriority;
apr_uintptr_t UniqueProcessId;
apr_uintptr_t InheritedFromUniqueProcessId;
} PBI, *PPBI;
APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, LONG, WINAPI, NtQueryInformationProcess, 0, (
HANDLE hProcess, /* Obvious */
INT info, /* Use 0 for PBI documented above */
PVOID pPI, /* The PIB buffer */
ULONG LenPI, /* Use sizeof(PBI) */
ULONG *pSizePI), /* returns pPI buffer used (may pass NULL) */
(hProcess, info, pPI, LenPI, pSizePI));
#define QueryInformationProcess apr_winapi_NtQueryInformationProcess
APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, LONG, WINAPI, NtQueryObject, 0, (
HANDLE hObject, /* Obvious */
INT info, /* Use 0 for PBI documented above */
PVOID pOI, /* The PIB buffer */
ULONG LenOI, /* Use sizeof(PBI) */
ULONG *pSizeOI), /* returns pPI buffer used (may pass NULL) */
(hObject, info, pOI, LenOI, pSizeOI));
#define QueryObject apr_winapi_NtQueryObject
typedef struct IOSB {
union {
UINT Status;
PVOID reserved;
};
apr_uintptr_t Information; /* Varies by op, consumed buffer size for FSI below */
} IOSB, *PIOSB;
typedef struct FSI {
LONGLONG AllocationSize;
LONGLONG EndOfFile;
ULONG NumberOfLinks;
BOOL DeletePending;
BOOL Directory;
} FSI, *PFSI;
APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, LONG, WINAPI, ZwQueryInformationFile, 0, (
HANDLE hObject, /* Obvious */
PVOID pIOSB, /* Point to the IOSB buffer for detailed return results */
PVOID pFI, /* The buffer, using FIB above */
ULONG LenFI, /* Use sizeof(FI) */
ULONG info), /* Use 5 for FSI documented above*/
(hObject, pIOSB, pFI, LenFI, info));
#define ZwQueryInformationFile apr_winapi_ZwQueryInformationFile
#ifdef CreateToolhelp32Snapshot
#undef CreateToolhelp32Snapshot
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, HANDLE, WINAPI, CreateToolhelp32Snapshot, 0, (
DWORD dwFlags,
DWORD th32ProcessID),
(dwFlags, th32ProcessID));
#define CreateToolhelp32Snapshot apr_winapi_CreateToolhelp32Snapshot
#ifdef Process32FirstW
#undef Process32FirstW
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, Process32FirstW, 0, (
HANDLE hSnapshot,
LPPROCESSENTRY32W lppe),
(hSnapshot, lppe));
#define Process32FirstW apr_winapi_Process32FirstW
#ifdef Process32NextW
#undef Process32NextW
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, Process32NextW, 0, (
HANDLE hSnapshot,
LPPROCESSENTRY32W lppe),
(hSnapshot, lppe));
#define Process32NextW apr_winapi_Process32NextW
#if !defined(POLLERR)
/* Event flag definitions for WSAPoll(). */
#define POLLRDNORM 0x0100
#define POLLRDBAND 0x0200
#define POLLIN (POLLRDNORM | POLLRDBAND)
#define POLLPRI 0x0400
#define POLLWRNORM 0x0010
#define POLLOUT (POLLWRNORM)
#define POLLWRBAND 0x0020
#define POLLERR 0x0001
#define POLLHUP 0x0002
#define POLLNVAL 0x0004
typedef struct pollfd {
SOCKET fd;
SHORT events;
SHORT revents;
} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
#endif /* !defined(POLLERR) */
#ifdef WSAPoll
#undef WSAPoll
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINSOCK2API, int, WSAAPI, WSAPoll, 0, (
IN OUT LPWSAPOLLFD fdArray,
IN ULONG fds,
IN INT timeout),
(fdArray, fds, timeout));
#define WSAPoll apr_winapi_WSAPoll
#define HAVE_POLL 1
#ifdef SetDllDirectoryW
#undef SetDllDirectoryW
#endif
APR_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, SetDllDirectoryW, 0, (
IN LPCWSTR lpPathName),
(lpPathName));
#define SetDllDirectoryW apr_winapi_SetDllDirectoryW
#endif /* !defined(_WIN32_WCE) */
#endif /* ! MISC_H */
@@ -0,0 +1,90 @@
/* 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 NETWORK_IO_H
#define NETWORK_IO_H
#include "apr_network_io.h"
#include "apr_general.h"
#include "apr_poll.h"
typedef struct sock_userdata_t sock_userdata_t;
struct sock_userdata_t {
sock_userdata_t *next;
const char *key;
void *data;
};
struct apr_socket_t {
apr_pool_t *pool;
SOCKET socketdes;
int type; /* SOCK_STREAM, SOCK_DGRAM */
int protocol;
apr_sockaddr_t *local_addr;
apr_sockaddr_t *remote_addr;
int timeout_ms; /* MUST MATCH if timeout > 0 */
apr_interval_time_t timeout;
apr_int32_t disconnected;
int local_port_unknown;
int local_interface_unknown;
int remote_addr_unknown;
apr_int32_t options;
apr_int32_t inherit;
#if APR_HAS_SENDFILE
/* As of 07.20.04, the overlapped structure is only used by
* apr_socket_sendfile and that's where it will be allocated
* and initialized.
*/
OVERLAPPED *overlapped;
#endif
sock_userdata_t *userdata;
/* if there is a timeout set, then this pollset is used */
apr_pollset_t *pollset;
};
#ifdef _WIN32_WCE
#ifndef WSABUF
typedef struct _WSABUF {
u_long len; /* the length of the buffer */
char FAR * buf; /* the pointer to the buffer */
} WSABUF, FAR * LPWSABUF;
#endif
#else
#ifdef _MSC_VER
#define HAVE_STRUCT_IPMREQ
#endif
#endif
apr_status_t status_from_res_error(int);
const char *apr_inet_ntop(int af, const void *src, char *dst, apr_size_t size);
int apr_inet_pton(int af, const char *src, void *dst);
void apr_sockaddr_vars_set(apr_sockaddr_t *, int, apr_port_t);
#define apr_is_option_set(skt, option) \
(((skt)->options & (option)) == (option))
#define apr_set_option(skt, option, on) \
do { \
if (on) \
(skt)->options |= (option); \
else \
(skt)->options &= ~(option); \
} while (0)
#endif /* ! NETWORK_IO_H */
@@ -0,0 +1,29 @@
/* 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 PROC_MUTEX_H
#define PROC_MUTEX_H
#include "apr_proc_mutex.h"
struct apr_proc_mutex_t {
apr_pool_t *pool;
HANDLE handle;
const char *fname;
};
#endif /* PROC_MUTEX_H */
@@ -0,0 +1,32 @@
/* 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 THREAD_COND_H
#define THREAD_COND_H
#include "apr_thread_cond.h"
struct apr_thread_cond_t {
apr_pool_t *pool;
HANDLE semaphore;
CRITICAL_SECTION csection;
unsigned long num_waiting;
unsigned long num_wake;
unsigned long generation;
};
#endif /* THREAD_COND_H */
@@ -0,0 +1,40 @@
/* 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 THREAD_MUTEX_H
#define THREAD_MUTEX_H
#include "apr_pools.h"
typedef enum thread_mutex_type {
thread_mutex_critical_section,
thread_mutex_unnested_event,
thread_mutex_nested_mutex
} thread_mutex_type;
/* handle applies only to unnested_event on all platforms
* and nested_mutex on Win9x only. Otherwise critical_section
* is used for NT nexted mutexes providing optimal performance.
*/
struct apr_thread_mutex_t {
apr_pool_t *pool;
thread_mutex_type type;
HANDLE handle;
CRITICAL_SECTION section;
};
#endif /* THREAD_MUTEX_H */
@@ -0,0 +1,30 @@
/* 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 THREAD_RWLOCK_H
#define THREAD_RWLOCK_H
#include "apr_thread_rwlock.h"
struct apr_thread_rwlock_t {
apr_pool_t *pool;
HANDLE write_mutex;
HANDLE read_event;
LONG readers;
};
#endif /* THREAD_RWLOCK_H */
@@ -0,0 +1,74 @@
/* 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.
*/
#include "apr_private.h"
#include "apr_thread_proc.h"
#include "apr_file_io.h"
#ifndef THREAD_PROC_H
#define THREAD_PROC_H
#define SHELL_PATH "cmd.exe"
struct apr_thread_t {
apr_pool_t *pool;
HANDLE td;
apr_int32_t cancel;
apr_int32_t cancel_how;
void *data;
apr_thread_start_t func;
apr_status_t exitval;
};
struct apr_threadattr_t {
apr_pool_t *pool;
apr_int32_t detach;
apr_size_t stacksize;
};
struct apr_threadkey_t {
apr_pool_t *pool;
DWORD key;
};
struct apr_procattr_t {
apr_pool_t *pool;
apr_file_t *parent_in;
apr_file_t *child_in;
apr_file_t *parent_out;
apr_file_t *child_out;
apr_file_t *parent_err;
apr_file_t *child_err;
char *currdir;
apr_int32_t cmdtype;
apr_int32_t detached;
apr_child_errfn_t *errfn;
apr_int32_t errchk;
#ifndef _WIN32_WCE
HANDLE user_token;
LPSECURITY_ATTRIBUTES sa;
LPVOID sd;
#endif
};
struct apr_thread_once_t {
long value;
};
extern apr_status_t apr_threadproc_init(apr_pool_t *pool);
#endif /* ! THREAD_PROC_H */
@@ -0,0 +1,56 @@
/* 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 UTF8_H
#define UTF8_H
#include "apr.h"
#include "apr_lib.h"
#include "apr_errno.h"
/* If we ever support anything more exciting than char... this could move.
*/
typedef apr_uint16_t apr_wchar_t;
/**
* An APR internal function for fast utf-8 octet-encoded Unicode conversion
* to the ucs-2 wide Unicode format. This function is used for filename and
* other resource conversions for platforms providing native Unicode support.
*
* @tip Only the errors APR_EINVAL and APR_INCOMPLETE may occur, the former
* when the character code is invalid (in or out of context) and the later
* when more characters were expected, but insufficient characters remain.
*/
APR_DECLARE(apr_status_t) apr_conv_utf8_to_ucs2(const char *in,
apr_size_t *inbytes,
apr_wchar_t *out,
apr_size_t *outwords);
/**
* An APR internal function for fast ucs-2 wide Unicode format conversion to
* the utf-8 octet-encoded Unicode. This function is used for filename and
* other resource conversions for platforms providing native Unicode support.
*
* @tip Only the errors APR_EINVAL and APR_INCOMPLETE may occur, the former
* when the character code is invalid (in or out of context) and the later
* when more words were expected, but insufficient words remain.
*/
APR_DECLARE(apr_status_t) apr_conv_ucs2_to_utf8(const apr_wchar_t *in,
apr_size_t *inwords,
char *out,
apr_size_t *outbytes);
#endif /* def UTF8_H */
@@ -0,0 +1,217 @@
/* 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_DBG_WIN32_HANDLES_H
#define APR_DBG_WIN32_HANDLES_H
#ifdef __cplusplus
extern "C" {
#endif
/* USAGE:
*
* Add the following include to apr_private.h for internal debugging,
* or copy this header into apr/include add the include below to apr.h
* for really global debugging;
*
* #include "apr_dbg_win32_handles.h"
*
* apr_dbg_log is the crux of this function ... it uses Win32 API and
* no apr calls itself to log all activity to a file named for the
* executing application with a .pid suffix. Ergo several instances
* may be executing and logged at once.
*
* HANDLE apr_dbg_log(char* fn, HANDLE ha, char* fl, int ln, int nh
* [, HANDLE *hv, char *dsc...])
*
* returns: the handle passed in ha, which is cast back to the real return type.
*
* formats one line into the debug log file if nh is zero;
* ha (hex) seq(hex) tid(hex) fn fl ln
* xxxxxxxx xxxxxxxx xxxxxxxx func() sourcefile:lineno
* The macro apr_dbg_rv makes this simple to implement for many APIs
* that simply take args that don't interest us, and return a handle.
*
* formats multiple lines (nh) into the debug log file for each hv/dsc pair
* (nh must correspond to the number of pairs);
* hv (hex) seq(hex) tid(hex) fn dsc fl ln
* xxxxxxxx xxxxxxxx xxxxxxxx func(arg) sourcefile:lineno
* In this later usage, hv is the still the return value but is not
* treated as a handle.
*/
APR_DECLARE_NONSTD(HANDLE) apr_dbg_log(char* fn, HANDLE ha, char* fl, int ln,
int nh,/* HANDLE *hv, char *dsc */...);
#define apr_dbg_rv(fn, args) (apr_dbg_log(#fn,(fn) args,__FILE__,__LINE__,0))
#define CloseHandle(h) \
((BOOL)apr_dbg_log("CloseHandle", \
(HANDLE)(CloseHandle)(h), \
__FILE__,__LINE__,1, \
&(h),""))
#define CreateEventA(sd,b1,b2,nm) apr_dbg_rv(CreateEventA,(sd,b1,b2,nm))
#define CreateEventW(sd,b1,b2,nm) apr_dbg_rv(CreateEventW,(sd,b1,b2,nm))
#define CreateFileA(nm,d1,d2,sd,d3,d4,h) apr_dbg_rv(CreateFileA,(nm,d1,d2,sd,d3,d4,h))
#define CreateFileW(nm,d1,d2,sd,d3,d4,h) apr_dbg_rv(CreateFileW,(nm,d1,d2,sd,d3,d4,h))
#define CreateFileMappingA(fh,sd,d1,d2,d3,nm) apr_dbg_rv(CreateFileMappingA,(fh,sd,d1,d2,d3,nm))
#define CreateFileMappingW(fh,sd,d1,d2,d3,nm) apr_dbg_rv(CreateFileMappingW,(fh,sd,d1,d2,d3,nm))
#define CreateMutexA(sd,b,nm) apr_dbg_rv(CreateMutexA,(sd,b,nm))
#define CreateMutexW(sd,b,nm) apr_dbg_rv(CreateMutexW,(sd,b,nm))
#define CreateIoCompletionPort(h1,h2,pd1,d2) apr_dbg_rv(CreateIoCompletionPort,(h1,h2,pd1,d2))
#define CreateNamedPipeA(nm,d1,d2,d3,d4,d5,d6,sd) apr_dbg_rv(CreateNamedPipeA,(nm,d1,d2,d3,d4,d5,d6,sd))
#define CreateNamedPipeW(nm,d1,d2,d3,d4,d5,d6,sd) apr_dbg_rv(CreateNamedPipeW,(nm,d1,d2,d3,d4,d5,d6,sd))
#define CreatePipe(ph1,ph2,sd,d) \
((BOOL)apr_dbg_log("CreatePipe", \
(HANDLE)(CreatePipe)(ph1,ph2,sd,d), \
__FILE__,__LINE__,2, \
(ph1),"hRead", \
(ph2),"hWrite"))
#define CreateProcessA(s1,s2,sd1,sd2,b,d1,s3,s4,pd2,hr) \
((BOOL)apr_dbg_log("CreateProcessA", \
(HANDLE)(CreateProcessA)(s1,s2,sd1,sd2,b,d1,s3,s4,pd2,hr), \
__FILE__,__LINE__,2, \
&((hr)->hProcess),"hProcess", \
&((hr)->hThread),"hThread"))
#define CreateProcessW(s1,s2,sd1,sd2,b,d1,s3,s4,pd2,hr) \
((BOOL)apr_dbg_log("CreateProcessW", \
(HANDLE)(CreateProcessW)(s1,s2,sd1,sd2,b,d1,s3,s4,pd2,hr), \
__FILE__,__LINE__,2, \
&((hr)->hProcess),"hProcess", \
&((hr)->hThread),"hThread"))
#define CreateSemaphoreA(sd,d1,d2,nm) apr_dbg_rv(CreateSemaphoreA,(sd,d1,d2,nm))
#define CreateSemaphoreW(sd,d1,d2,nm) apr_dbg_rv(CreateSemaphoreW,(sd,d1,d2,nm))
#define CreateThread(sd,d1,fn,pv,d2,pd3) apr_dbg_rv(CreateThread,(sd,d1,fn,pv,d2,pd3))
#define DeregisterEventSource(h) \
((BOOL)apr_dbg_log("DeregisterEventSource", \
(HANDLE)(DeregisterEventSource)(h), \
__FILE__,__LINE__,1, \
&(h),""))
#define DuplicateHandle(h1,h2,h3,ph4,d1,b,d2) \
((BOOL)apr_dbg_log("DuplicateHandle", \
(HANDLE)(DuplicateHandle)(h1,h2,h3,ph4,d1,b,d2), \
__FILE__,__LINE__,2, \
(ph4),((h3)==GetCurrentProcess()) \
? "Target" : "EXTERN Target", \
&(h2),((h1)==GetCurrentProcess()) \
? "Source" : "EXTERN Source"))
#define GetCurrentProcess() \
(apr_dbg_log("GetCurrentProcess", \
(GetCurrentProcess)(),__FILE__,__LINE__,0))
#define GetCurrentThread() \
(apr_dbg_log("GetCurrentThread", \
(GetCurrentThread)(),__FILE__,__LINE__,0))
#define GetModuleHandleA(nm) apr_dbg_rv(GetModuleHandleA,(nm))
#define GetModuleHandleW(nm) apr_dbg_rv(GetModuleHandleW,(nm))
#define GetStdHandle(d) apr_dbg_rv(GetStdHandle,(d))
#define LoadLibraryA(nm) apr_dbg_rv(LoadLibraryA,(nm))
#define LoadLibraryW(nm) apr_dbg_rv(LoadLibraryW,(nm))
#define LoadLibraryExA(nm,h,d) apr_dbg_rv(LoadLibraryExA,(nm,h,d))
#define LoadLibraryExW(nm,h,d) apr_dbg_rv(LoadLibraryExW,(nm,h,d))
#define OpenEventA(d,b,nm) apr_dbg_rv(OpenEventA,(d,b,nm))
#define OpenEventW(d,b,nm) apr_dbg_rv(OpenEventW,(d,b,nm))
#define OpenFileMappingA(d,b,nm) apr_dbg_rv(OpenFileMappingA,(d,b,nm))
#define OpenFileMappingW(d,b,nm) apr_dbg_rv(OpenFileMappingW,(d,b,nm))
#define RegisterEventSourceA(s1,s2) apr_dbg_rv(RegisterEventSourceA,(s1,s2))
#define RegisterEventSourceW(s1,s2) apr_dbg_rv(RegisterEventSourceW,(s1,s2))
#define SetEvent(h) \
((BOOL)apr_dbg_log("SetEvent", \
(HANDLE)(SetEvent)(h), \
__FILE__,__LINE__,1, \
&(h),""))
#define SetStdHandle(d,h) \
((BOOL)apr_dbg_log("SetStdHandle", \
(HANDLE)(SetStdHandle)(d,h), \
__FILE__,__LINE__,1,&(h),""))
#define socket(i1,i2,i3) \
((SOCKET)apr_dbg_log("socket", \
(HANDLE)(socket)(i1,i2,i3), \
__FILE__,__LINE__,0))
#define WaitForSingleObject(h,d) \
((DWORD)apr_dbg_log("WaitForSingleObject", \
(HANDLE)(WaitForSingleObject)(h,d), \
__FILE__,__LINE__,1,&(h),"Signaled"))
#define WaitForSingleObjectEx(h,d,b) \
((DWORD)apr_dbg_log("WaitForSingleObjectEx", \
(HANDLE)(WaitForSingleObjectEx)(h,d,b), \
__FILE__,__LINE__,1,&(h),"Signaled"))
#define WaitForMultipleObjects(d1,ah,b,d2) \
((DWORD)apr_dbg_log("WaitForMultipleObjects", \
(HANDLE)(WaitForMultipleObjects)(d1,ah,b,d2), \
__FILE__,__LINE__,1,ah,"Signaled"))
#define WaitForMultipleObjectsEx(d1,ah,b1,d2,b2) \
((DWORD)apr_dbg_log("WaitForMultipleObjectsEx", \
(HANDLE)(WaitForMultipleObjectsEx)(d1,ah,b1,d2,b2), \
__FILE__,__LINE__,1,ah,"Signaled"))
#define WSASocketA(i1,i2,i3,pi,g,dw) \
((SOCKET)apr_dbg_log("WSASocketA", \
(HANDLE)(WSASocketA)(i1,i2,i3,pi,g,dw), \
__FILE__,__LINE__,0))
#define WSASocketW(i1,i2,i3,pi,g,dw) \
((SOCKET)apr_dbg_log("WSASocketW", \
(HANDLE)(WSASocketW)(i1,i2,i3,pi,g,dw), \
__FILE__,__LINE__,0))
#define closesocket(sh) \
((int)apr_dbg_log("closesocket", \
(HANDLE)(closesocket)(sh), \
__FILE__,__LINE__,1,&(sh),""))
#define _beginthread(fn,d,pv) \
((unsigned long)apr_dbg_log("_beginthread", \
(HANDLE)(_beginthread)(fn,d,pv), \
__FILE__,__LINE__,0))
#define _beginthreadex(sd,d1,fn,pv,d2,pd3) \
((unsigned long)apr_dbg_log("_beginthreadex", \
(HANDLE)(_beginthreadex)(sd,d1,fn,pv,d2,pd3), \
__FILE__,__LINE__,0))
#ifdef __cplusplus
}
#endif
#endif /* !defined(APR_DBG_WIN32_HANDLES_H) */
@@ -0,0 +1,173 @@
/* 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.
*/
/*
* Note:
* This is the windows specific autoconf-like config file
* which unix would create at build time.
*/
#ifdef WIN32
#ifndef APR_PRIVATE_H
#define APR_PRIVATE_H
/* Include the public APR symbols, include our idea of the 'right'
* subset of the Windows.h header. This saves us repetition.
*/
#include "apr.h"
/*
* Add a _very_few_ declarations missing from the restricted set of headers
* (If this list becomes extensive, re-enable the required headers above!)
* winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
*/
#ifndef SW_HIDE
#define SW_HIDE 0
#endif
/* For the misc.h late-loaded dynamic symbols, we need some obscure types
* Avoid dragging in wtypes.h unless it's absolutely necessary [generally
* not with APR itself, until some GUI-related security is introduced.]
*/
#ifndef _WIN32_WCE
#define HAVE_ACLAPI 1
#ifdef __wtypes_h__
#include <accctrl.h>
#else
#define __wtypes_h__
#include <accctrl.h>
#undef __wtypes_h__
#endif
#else
#define HAVE_ACLAPI 0
#endif
#if APR_HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if APR_HAVE_STDDEF_H
#include <stddef.h>
#endif
#include <stdio.h>
#if APR_HAVE_TIME_H
#include <time.h>
#endif
/* Use this section to define all of the HAVE_FOO_H
* that are required to build properly.
*/
#define HAVE_LIMITS_H 1
#define HAVE_MALLOC_H 1
#define HAVE_SIGNAL_H 1
/* #define HAVE_STDDEF_H 1 why not? */
#define HAVE_STDLIB_H 1
#define HAVE_STRICMP 1
#define HAVE_STRNICMP 1
#define HAVE_STRDUP 1
#define HAVE_STRSTR 1
#define HAVE_MEMCHR 1
#define SIGHUP 1
/* 2 is used for SIGINT on windows */
#define SIGQUIT 3
/* 4 is used for SIGILL on windows */
#define SIGTRAP 5
#define SIGIOT 6
#define SIGBUS 7
/* 8 is used for SIGFPE on windows */
#define SIGKILL 9
#define SIGUSR1 10
/* 11 is used for SIGSEGV on windows */
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
/* 15 is used for SIGTERM on windows */
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
/* 21 is used for SIGBREAK on windows */
/* 22 is used for SIGABRT on windows */
#define SIGTTIN 23
#define SIGTTOU 24
#define SIGURG 25
#define SIGXCPU 26
#define SIGXFSZ 27
#define SIGVTALRM 28
#define SIGPROF 29
#define SIGWINCH 30
#define SIGIO 31
/* APR COMPATABILITY FUNCTIONS
* This section should be used to define functions and
* macros which are need to make Windows features look
* like POSIX features.
*/
typedef void (Sigfunc)(int);
#define sleep(t) Sleep((t) * 1000)
#define SIZEOF_SHORT 2
#define SIZEOF_INT 4
#define SIZEOF_LONGLONG 8
#define SIZEOF_CHAR 1
#define SIZEOF_SSIZE_T SIZEOF_INT
unsigned __stdcall SignalHandling(void *);
int thread_ready(void);
#if !APR_HAVE_ERRNO_H
APR_DECLARE_DATA int errno;
#define ENOSPC 1
#endif
#if APR_HAVE_IPV6
#define HAVE_GETADDRINFO 1
#define HAVE_GETNAMEINFO 1
#endif
/* MSVC 7.0 introduced _strtoi64 */
#if _MSC_VER >= 1300 && _INTEGRAL_MAX_BITS >= 64 && !defined(_WIN32_WCE)
#define APR_INT64_STRFN _strtoi64
#endif
#if APR_HAS_LARGE_FILES
#ifdef APR_INT64_STRFN
#define APR_OFF_T_STRFN APR_INT64_STRFN
#else
#define APR_OFF_T_STRFN apr_strtoi64
#endif
#else
#if defined(_WIN32_WCE)
#define APR_OFF_T_STRFN strtol
#else
#define APR_OFF_T_STRFN strtoi
#endif
#endif
/* used to check for DWORD overflow in 64bit compiles */
#define APR_DWORD_MAX 0xFFFFFFFFUL
/*
* Include common private declarations.
*/
#include "../apr_private_common.h"
#endif /*APR_PRIVATE_H*/
#endif /*WIN32*/