feat:replace boost library with C++11 std library
This commit is contained in:
@@ -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*/
|
||||
Reference in New Issue
Block a user