feat:replace boost library with C++11 std library
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
/* 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
|
||||
|
||||
void *dlopen(const char *path, int mode);
|
||||
void *dlsym(void *handle, const char *symbol);
|
||||
const char *dlerror(void);
|
||||
int dlclose(void *handle);
|
||||
|
||||
struct apr_dso_handle_t {
|
||||
apr_pool_t *pool;
|
||||
void *handle;
|
||||
const char *errormsg;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,41 @@
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains private declarations common to all architectures.
|
||||
*/
|
||||
|
||||
#ifndef APR_PRIVATE_COMMON_H
|
||||
#define APR_PRIVATE_COMMON_H
|
||||
|
||||
#include "apr_pools.h"
|
||||
#include "apr_tables.h"
|
||||
|
||||
apr_status_t apr_filepath_list_split_impl(apr_array_header_t **pathelts,
|
||||
const char *liststr,
|
||||
char separator,
|
||||
apr_pool_t *p);
|
||||
|
||||
apr_status_t apr_filepath_list_merge_impl(char **liststr,
|
||||
apr_array_header_t *pathelts,
|
||||
char separator,
|
||||
apr_pool_t *p);
|
||||
|
||||
/* temporary defines to handle 64bit compile mismatches */
|
||||
#define APR_INT_TRUNC_CAST int
|
||||
#define APR_UINT32_TRUNC_CAST apr_uint32_t
|
||||
|
||||
#endif /*APR_PRIVATE_COMMON_H*/
|
||||
@@ -0,0 +1,41 @@
|
||||
/* 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_errno.h"
|
||||
#include "apr_dso.h"
|
||||
#include "apr.h"
|
||||
#include <kernel/image.h>
|
||||
#include <string.h>
|
||||
|
||||
#if APR_HAS_DSO
|
||||
|
||||
struct apr_dso_handle_t {
|
||||
image_id handle; /* Handle to the DSO loaded */
|
||||
apr_pool_t *pool;
|
||||
const char *errormsg; /* if the load fails, we have an error
|
||||
* message here :)
|
||||
*/
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -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 PROC_MUTEX_H
|
||||
#define PROC_MUTEX_H
|
||||
|
||||
#include "apr_pools.h"
|
||||
#include "apr_proc_mutex.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_portable.h"
|
||||
|
||||
struct apr_proc_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
|
||||
/* Our lock :) */
|
||||
sem_id Lock;
|
||||
int32 LockCount;
|
||||
};
|
||||
|
||||
#endif /* PROC_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/* 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 <kernel/OS.h>
|
||||
#include "apr_pools.h"
|
||||
#include "apr_thread_cond.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_portable.h"
|
||||
#include "apr_ring.h"
|
||||
|
||||
struct waiter_t {
|
||||
APR_RING_ENTRY(waiter_t) link;
|
||||
sem_id sem;
|
||||
};
|
||||
|
||||
struct apr_thread_cond_t {
|
||||
apr_pool_t *pool;
|
||||
sem_id lock;
|
||||
apr_thread_mutex_t *condlock;
|
||||
thread_id owner;
|
||||
/* active list */
|
||||
APR_RING_HEAD(active_list, waiter_t) alist;
|
||||
/* free list */
|
||||
APR_RING_HEAD(free_list, waiter_t) flist;
|
||||
};
|
||||
|
||||
#endif /* THREAD_COND_H */
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/* 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 <kernel/OS.h>
|
||||
#include "apr_pools.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_portable.h"
|
||||
|
||||
struct apr_thread_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
|
||||
/* Our lock :) */
|
||||
sem_id Lock;
|
||||
int32 LockCount;
|
||||
|
||||
/* If we nest locks we need these... */
|
||||
int nested;
|
||||
apr_os_thread_t owner;
|
||||
int owner_ref;
|
||||
};
|
||||
|
||||
#endif /* THREAD_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/* 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 <kernel/OS.h>
|
||||
#include "apr_pools.h"
|
||||
#include "apr_thread_rwlock.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_portable.h"
|
||||
|
||||
struct apr_thread_rwlock_t {
|
||||
apr_pool_t *pool;
|
||||
|
||||
/* Our lock :) */
|
||||
sem_id Lock;
|
||||
int32 LockCount;
|
||||
/* Read/Write lock stuff */
|
||||
sem_id Read;
|
||||
int32 ReadCount;
|
||||
sem_id Write;
|
||||
int32 WriteCount;
|
||||
int32 Nested;
|
||||
|
||||
thread_id writer;
|
||||
};
|
||||
|
||||
#endif /* THREAD_RWLOCK_H */
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/* 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_thread_proc.h"
|
||||
#include "apr_arch_file_io.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_thread_proc.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_portable.h"
|
||||
#include <kernel/OS.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <sys/wait.h>
|
||||
#include <image.h>
|
||||
|
||||
#ifndef THREAD_PROC_H
|
||||
#define THREAD_PROC_H
|
||||
|
||||
#define SHELL_PATH "/bin/sh"
|
||||
|
||||
#define PTHREAD_CANCEL_AYNCHRONOUS CANCEL_ASYNCH;
|
||||
#define PTHREAD_CANCEL_DEFERRED CANCEL_DEFER;
|
||||
|
||||
#define PTHREAD_CANCEL_ENABLE CANCEL_ENABLE;
|
||||
#define PTHREAD_CANCEL_DISABLE CANCEL_DISABLE;
|
||||
|
||||
#define BEOS_MAX_DATAKEYS 128
|
||||
|
||||
struct apr_thread_t {
|
||||
apr_pool_t *pool;
|
||||
thread_id td;
|
||||
void *data;
|
||||
apr_thread_start_t func;
|
||||
apr_status_t exitval;
|
||||
};
|
||||
|
||||
struct apr_threadattr_t {
|
||||
apr_pool_t *pool;
|
||||
int32 attr;
|
||||
int detached;
|
||||
int joinable;
|
||||
};
|
||||
|
||||
struct apr_threadkey_t {
|
||||
apr_pool_t *pool;
|
||||
int32 key;
|
||||
};
|
||||
|
||||
struct beos_private_data {
|
||||
const void ** data;
|
||||
int count;
|
||||
volatile thread_id td;
|
||||
};
|
||||
|
||||
struct beos_key {
|
||||
int assigned;
|
||||
int count;
|
||||
sem_id lock;
|
||||
int32 ben_lock;
|
||||
void (* destructor) (void *);
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
struct apr_thread_once_t {
|
||||
sem_id sem;
|
||||
int hit;
|
||||
};
|
||||
|
||||
#endif /* ! THREAD_PROC_H */
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/* 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"
|
||||
|
||||
#include <dlfcn.h>
|
||||
|
||||
typedef struct sym_list sym_list;
|
||||
|
||||
struct sym_list {
|
||||
sym_list *next;
|
||||
char *symbol;
|
||||
};
|
||||
|
||||
struct apr_dso_handle_t {
|
||||
apr_pool_t *pool;
|
||||
void *handle;
|
||||
const char *errormsg;
|
||||
sym_list *symbols;
|
||||
char *path;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,176 @@
|
||||
/* 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_general.h"
|
||||
#include "apr_tables.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_file_info.h"
|
||||
#include "apr_errno.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_poll.h"
|
||||
|
||||
/* System headers the file I/O library needs */
|
||||
#if APR_HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#if APR_HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
#if APR_HAVE_DIRENT_H
|
||||
#include <dirent.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
#if APR_HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if APR_HAVE_STDIO_H
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#if APR_HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_UIO_H
|
||||
#include <sys/uio.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#include <fsio.h>
|
||||
|
||||
/* End System headers */
|
||||
|
||||
#define APR_FILE_DEFAULT_BUFSIZE 4096
|
||||
/* For backwards compat */
|
||||
#define APR_FILE_BUFSIZE APR_FILE_DEFAULT_BUFSIZE
|
||||
|
||||
#if APR_HAS_THREADS
|
||||
#define file_lock(f) do { \
|
||||
if ((f)->thlock) \
|
||||
apr_thread_mutex_lock((f)->thlock); \
|
||||
} while (0)
|
||||
#define file_unlock(f) do { \
|
||||
if ((f)->thlock) \
|
||||
apr_thread_mutex_unlock((f)->thlock); \
|
||||
} while (0)
|
||||
#else
|
||||
#define file_lock(f) do {} while (0)
|
||||
#define file_unlock(f) do {} while (0)
|
||||
#endif
|
||||
|
||||
#if APR_HAS_LARGE_FILES
|
||||
#define lseek(f,o,w) lseek64(f,o,w)
|
||||
#define ftruncate(f,l) ftruncate64(f,l)
|
||||
#endif
|
||||
|
||||
typedef struct stat struct_stat;
|
||||
|
||||
struct apr_file_t {
|
||||
apr_pool_t *pool;
|
||||
int filedes;
|
||||
char *fname;
|
||||
apr_int32_t flags;
|
||||
int eof_hit;
|
||||
int is_pipe;
|
||||
apr_interval_time_t timeout;
|
||||
int buffered;
|
||||
enum {BLK_UNKNOWN, BLK_OFF, BLK_ON } blocking;
|
||||
int ungetchar; /* Last char provided by an unget op. (-1 = no char)*/
|
||||
|
||||
/* if there is a timeout set, then this pollset is used */
|
||||
apr_pollset_t *pollset;
|
||||
|
||||
/* Stuff for buffered mode */
|
||||
char *buffer;
|
||||
apr_size_t bufpos; /* Read/Write position in buffer */
|
||||
apr_size_t bufsize; /* The buffer size */
|
||||
apr_off_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 */
|
||||
#if APR_HAS_THREADS
|
||||
struct apr_thread_mutex_t *thlock;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct apr_dir_t {
|
||||
apr_pool_t *pool;
|
||||
char *dirname;
|
||||
DIR *dirstruct;
|
||||
struct dirent *entry;
|
||||
};
|
||||
|
||||
typedef struct apr_stat_entry_t apr_stat_entry_t;
|
||||
|
||||
struct apr_stat_entry_t {
|
||||
struct stat info;
|
||||
char *casedName;
|
||||
apr_time_t expire;
|
||||
NXPathCtx_t pathCtx;
|
||||
};
|
||||
|
||||
#define MAX_SERVER_NAME 64
|
||||
#define MAX_VOLUME_NAME 64
|
||||
#define MAX_PATH_NAME 256
|
||||
#define MAX_FILE_NAME 256
|
||||
|
||||
#define DRIVE_ONLY 1
|
||||
|
||||
/* 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);
|
||||
|
||||
/* This function check to see of the given path includes a drive/volume
|
||||
* specifier. If the _only_ parameter is set to DRIVE_ONLY then it
|
||||
* check to see of the path only contains a drive/volume specifier and
|
||||
* nothing else.
|
||||
*/
|
||||
apr_status_t filepath_has_drive(const char *rootpath, int only, apr_pool_t *p);
|
||||
|
||||
/* This function compares the drive/volume specifiers for each given path.
|
||||
* It returns zero if they match or non-zero if not.
|
||||
*/
|
||||
apr_status_t filepath_compare_drive(const char *path1, const char *path2, apr_pool_t *p);
|
||||
|
||||
apr_status_t apr_unix_file_cleanup(void *);
|
||||
apr_status_t apr_unix_child_file_cleanup(void *);
|
||||
|
||||
mode_t apr_unix_perms2mode(apr_fileperms_t perms);
|
||||
apr_fileperms_t apr_unix_mode2perms(mode_t mode);
|
||||
|
||||
apr_status_t apr_file_flush_locked(apr_file_t *thefile);
|
||||
apr_status_t apr_file_info_get_locked(apr_finfo_t *finfo, apr_int32_t wanted,
|
||||
apr_file_t *thefile);
|
||||
|
||||
#endif /* ! FILE_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 GLOBAL_MUTEX_H
|
||||
#define GLOBAL_MUTEX_H
|
||||
|
||||
#include "apr_global_mutex.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
|
||||
struct apr_global_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
apr_thread_mutex_t *mutex;
|
||||
};
|
||||
|
||||
#endif /* GLOBAL_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/* 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 TIME_INTERNAL_H
|
||||
#define TIME_INTERNAL_H
|
||||
|
||||
#include "apr.h"
|
||||
|
||||
#define TZONE (*___timezone())
|
||||
|
||||
void apr_netware_setup_time(void);
|
||||
|
||||
#endif /* TIME_INTERNAL_H */
|
||||
@@ -0,0 +1,31 @@
|
||||
/* 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
|
||||
|
||||
#ifdef USE_WINSOCK
|
||||
/* Making sure that we include the correct networkio.h since the
|
||||
the project file is configured to first look for headers in
|
||||
arch/netware and then arch/unix. But in this specific case we
|
||||
want arch/win32.
|
||||
*/
|
||||
#include <../win32/apr_arch_networkio.h>
|
||||
#else
|
||||
#include <../unix/apr_arch_networkio.h>
|
||||
#endif
|
||||
|
||||
#endif /* ! NETWORK_IO_H */
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/* 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 __pre_nw__
|
||||
#define __pre_nw__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma precompile_target "precomp.mch"
|
||||
#endif
|
||||
|
||||
#define NETWARE
|
||||
|
||||
#define N_PLAT_NLM
|
||||
|
||||
#define FAR
|
||||
#define far
|
||||
|
||||
/* no-op for Codewarrior C compiler; a functions are cdecl
|
||||
by default */
|
||||
#define cdecl
|
||||
|
||||
/* if we have wchar_t enabled in C++, predefine this type to avoid
|
||||
a conflict in Novell's header files */
|
||||
#ifndef __GNUC__
|
||||
#ifndef DOXYGEN
|
||||
#if (__option(cplusplus) && __option(wchar_type))
|
||||
#define _WCHAR_T
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* C9X defintion used by MSL C++ library */
|
||||
#define DECIMAL_DIG 17
|
||||
|
||||
/* some code may want to use the MS convention for long long */
|
||||
#ifndef __int64
|
||||
#define __int64 long long
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -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"
|
||||
#include "apr_thread_mutex.h"
|
||||
|
||||
struct apr_proc_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
apr_thread_mutex_t *mutex;
|
||||
};
|
||||
|
||||
#endif /* PROC_MUTEX_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 THREAD_COND_H
|
||||
#define THREAD_COND_H
|
||||
|
||||
#include "apr_thread_cond.h"
|
||||
#include <nks/synch.h>
|
||||
|
||||
struct apr_thread_cond_t {
|
||||
apr_pool_t *pool;
|
||||
NXCond_t *cond;
|
||||
};
|
||||
|
||||
#endif /* THREAD_COND_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 THREAD_MUTEX_H
|
||||
#define THREAD_MUTEX_H
|
||||
|
||||
#include "apr_thread_mutex.h"
|
||||
#include <nks/synch.h>
|
||||
|
||||
struct apr_thread_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
NXMutex_t *mutex;
|
||||
};
|
||||
|
||||
#endif /* THREAD_MUTEX_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 THREAD_RWLOCK_H
|
||||
#define THREAD_RWLOCK_H
|
||||
|
||||
#include "apr_thread_rwlock.h"
|
||||
#include <nks/synch.h>
|
||||
|
||||
struct apr_thread_rwlock_t {
|
||||
apr_pool_t *pool;
|
||||
NXRwLock_t *rwlock;
|
||||
};
|
||||
|
||||
#endif /* THREAD_RWLOCK_H */
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/* 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.h"
|
||||
#include "apr_thread_proc.h"
|
||||
#include "apr_file_io.h"
|
||||
|
||||
#include <sys/wait.h>
|
||||
|
||||
#ifndef THREAD_PROC_H
|
||||
#define THREAD_PROC_H
|
||||
|
||||
#define SHELL_PATH ""
|
||||
#define APR_DEFAULT_STACK_SIZE 65536
|
||||
|
||||
struct apr_thread_t {
|
||||
apr_pool_t *pool;
|
||||
NXContext_t ctx;
|
||||
NXThreadId_t td;
|
||||
char *thread_name;
|
||||
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_size_t stack_size;
|
||||
apr_int32_t detach;
|
||||
char *thread_name;
|
||||
};
|
||||
|
||||
struct apr_threadkey_t {
|
||||
apr_pool_t *pool;
|
||||
NXKey_t 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_int32_t addrspace;
|
||||
};
|
||||
|
||||
struct apr_thread_once_t {
|
||||
unsigned long value;
|
||||
};
|
||||
|
||||
/*
|
||||
struct apr_proc_t {
|
||||
apr_pool_t *pool;
|
||||
pid_t pid;
|
||||
apr_procattr_t *attr;
|
||||
};
|
||||
*/
|
||||
|
||||
#endif /* ! THREAD_PROC_H */
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
/* 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 netware-specific autoconf-like config file
|
||||
* which unix creates at ./configure time.
|
||||
*/
|
||||
|
||||
#ifdef NETWARE
|
||||
|
||||
#ifndef APR_PRIVATE_H
|
||||
#define APR_PRIVATE_H
|
||||
|
||||
/* Pick up publicly advertised headers and symbols before the
|
||||
* APR internal private headers and symbols
|
||||
*/
|
||||
#include <apr.h>
|
||||
|
||||
/* Pick up privately consumed headers */
|
||||
#include <ndkvers.h>
|
||||
|
||||
/* Include alloca.h to get compiler-dependent defines */
|
||||
#include <alloca.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <library.h>
|
||||
#include <netware.h>
|
||||
|
||||
/* Use this section to define all of the HAVE_FOO_H
|
||||
* that are required to build properly.
|
||||
*/
|
||||
#define HAVE_DLFCN_H 1
|
||||
#define HAVE_LIMITS_H 1
|
||||
#define HAVE_SIGNAL_H 1
|
||||
#define HAVE_STDDEF_H 1
|
||||
#define HAVE_STDLIB_H 1
|
||||
#ifndef USE_WINSOCK
|
||||
#define HAVE_SYS_SELECT_H 1
|
||||
#define HAVE_WRITEV 1
|
||||
#endif
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
#define HAVE_SYS_MMAN_H 1
|
||||
#define HAVE_FCNTL_H 1
|
||||
#define HAVE_ICONV_H 1
|
||||
#define HAVE_UTIME_H 1
|
||||
|
||||
#define HAVE_STRICMP 1
|
||||
#define HAVE_STRNICMP 1
|
||||
#define HAVE_STRDUP 1
|
||||
#define HAVE_STRSTR 1
|
||||
#define HAVE_MEMCHR 1
|
||||
#define HAVE_CALLOC 1
|
||||
#define HAVE_UTIME 1
|
||||
|
||||
#define HAVE_GETENV 1
|
||||
#define HAVE_SETENV 1
|
||||
#define HAVE_UNSETENV 1
|
||||
|
||||
#define HAVE_WRITEV 1
|
||||
|
||||
#define HAVE_GETPASS_R 1
|
||||
/*
|
||||
* Hack around older NDKs which have only the getpassword() function,
|
||||
* a threadsafe, API-equivalent of getpass_r().
|
||||
*/
|
||||
#if (CURRENT_NDK_THRESHOLD < 709060000)
|
||||
#define getpass_r getpassword
|
||||
#endif
|
||||
|
||||
/*#define DSO_USE_DLFCN */
|
||||
|
||||
#ifdef NW_BUILD_IPV6
|
||||
#define HAVE_GETADDRINFO 1
|
||||
#define HAVE_GETNAMEINFO 1
|
||||
#endif
|
||||
|
||||
/* 1 is used for SIGABRT on netware */
|
||||
/* 2 is used for SIGFPE on netware */
|
||||
/* 3 is used for SIGILL on netware */
|
||||
/* 4 is used for SIGINT on netware */
|
||||
/* 5 is used for SIGSEGV on netware */
|
||||
/* 6 is used for SIGTERM on netware */
|
||||
/* 7 is used for SIGPOLL on netware */
|
||||
|
||||
#if (CURRENT_NDK_THRESHOLD < 306030000)
|
||||
#define SIGKILL 11
|
||||
#define SIGALRM 13
|
||||
#define SIGCHLD 14
|
||||
#define SIGCONT 15
|
||||
#define SIGHUP 16
|
||||
#define SIGPIPE 17
|
||||
#define SIGQUIT 18
|
||||
#define SIGSTOP 19
|
||||
#define SIGTSTP 20
|
||||
#define SIGTTIN 21
|
||||
#define SIGTTOU 22
|
||||
#define SIGUSR1 23
|
||||
#define SIGUSR2 24
|
||||
#endif
|
||||
|
||||
#define SIGTRAP 25
|
||||
#define SIGIOT 26
|
||||
#define SIGSTKFLT 28
|
||||
#define SIGURG 29
|
||||
#define SIGXCPU 30
|
||||
#define SIGXFSZ 31
|
||||
#define SIGVTALRM 32
|
||||
#define SIGPROF 33
|
||||
#define SIGWINCH 34
|
||||
#define SIGIO 35
|
||||
|
||||
#if (CURRENT_NDK_THRESHOLD < 406230000)
|
||||
#undef SA_NOCLDSTOP
|
||||
#define SA_NOCLDSTOP 0x00000001
|
||||
#endif
|
||||
#ifndef SIGBUS
|
||||
#define SIGBUS SIGSEGV
|
||||
#endif
|
||||
|
||||
#define _getch getcharacter
|
||||
|
||||
#define SIZEOF_SHORT 2
|
||||
#define SIZEOF_INT 4
|
||||
#define SIZEOF_LONGLONG 8
|
||||
#define SIZEOF_CHAR 1
|
||||
#define SIZEOF_SSIZE_T SIZEOF_INT
|
||||
|
||||
void netware_pool_proc_cleanup();
|
||||
|
||||
/* NLM registration routines for managing which NLMs
|
||||
are using the library. */
|
||||
int register_NLM(void *NLMHandle);
|
||||
int unregister_NLM(void *NLMHandle);
|
||||
|
||||
/* Application global data management */
|
||||
extern int gLibId;
|
||||
extern void *gLibHandle;
|
||||
|
||||
typedef struct app_data {
|
||||
int initialized;
|
||||
void* gPool;
|
||||
void* gs_aHooksToSort;
|
||||
void* gs_phOptionalHooks;
|
||||
void* gs_phOptionalFunctions;
|
||||
void* gs_nlmhandle;
|
||||
rtag_t gs_startup_rtag;
|
||||
rtag_t gs_socket_rtag;
|
||||
rtag_t gs_lookup_rtag;
|
||||
rtag_t gs_event_rtag;
|
||||
rtag_t gs_pcp_rtag;
|
||||
void* gs_ldap_xref_lock;
|
||||
void* gs_xref_head;
|
||||
} APP_DATA;
|
||||
|
||||
int setGlobalPool(void *data);
|
||||
void* getGlobalPool();
|
||||
int setStatCache(void *data);
|
||||
void* getStatCache();
|
||||
|
||||
/* Redefine malloc to use the library malloc call so
|
||||
that all of the memory resources will be owned
|
||||
and can be shared by the library. */
|
||||
#undef malloc
|
||||
#define malloc(x) library_malloc(gLibHandle,x)
|
||||
#ifndef __MWERKS__
|
||||
#define _alloca alloca
|
||||
#endif
|
||||
|
||||
/* 64-bit integer conversion function */
|
||||
#define APR_INT64_STRFN strtoll
|
||||
|
||||
#if APR_HAS_LARGE_FILES
|
||||
#define APR_OFF_T_STRFN strtoll
|
||||
#else
|
||||
#define APR_OFF_T_STRFN strtol
|
||||
#endif
|
||||
|
||||
/* used to check DWORD overflow for 64bit compiles */
|
||||
#define APR_DWORD_MAX 0xFFFFFFFFUL
|
||||
|
||||
/*
|
||||
* Include common private declarations.
|
||||
*/
|
||||
#include "../apr_private_common.h"
|
||||
|
||||
#endif /*APR_PRIVATE_H*/
|
||||
#endif /*NETWARE*/
|
||||
@@ -0,0 +1,37 @@
|
||||
/* 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; /* Context for returning error strings */
|
||||
HMODULE handle; /* Handle to the DSO loaded */
|
||||
apr_status_t load_error;
|
||||
char *failed_module;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,86 @@
|
||||
/* 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_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_file_info.h"
|
||||
#include "apr_errno.h"
|
||||
#include "apr_poll.h"
|
||||
|
||||
/* We have an implementation of mkstemp but it's not very multi-threading
|
||||
* friendly & is part of the POSIX emulation rather than native so don't
|
||||
* use it.
|
||||
*/
|
||||
#undef HAVE_MKSTEMP
|
||||
|
||||
#define APR_FILE_DEFAULT_BUFSIZE 4096
|
||||
#define APR_FILE_BUFSIZE APR_FILE_DEFAULT_BUFSIZE
|
||||
|
||||
struct apr_file_t {
|
||||
apr_pool_t *pool;
|
||||
HFILE filedes;
|
||||
char * fname;
|
||||
int isopen;
|
||||
int buffered;
|
||||
int eof_hit;
|
||||
apr_int32_t flags;
|
||||
int timeout;
|
||||
int pipe;
|
||||
HEV pipeSem;
|
||||
enum { BLK_UNKNOWN, BLK_OFF, BLK_ON } blocking;
|
||||
|
||||
/* Stuff for buffered mode */
|
||||
char *buffer;
|
||||
apr_size_t bufsize; /* Read/Write position in buffer */
|
||||
apr_size_t bufpos; /* Read/Write position in buffer */
|
||||
unsigned long dataRead; /* amount of valid data read into buffer */
|
||||
int direction; /* buffer being used for 0 = read, 1 = write */
|
||||
unsigned long filePtr; /* position in file of handle */
|
||||
apr_thread_mutex_t *mutex; /* mutex semaphore, must be owned to access
|
||||
the above fields */
|
||||
};
|
||||
|
||||
struct apr_dir_t {
|
||||
apr_pool_t *pool;
|
||||
char *dirname;
|
||||
ULONG handle;
|
||||
FILEFINDBUF3 entry;
|
||||
int validentry;
|
||||
};
|
||||
|
||||
apr_status_t apr_file_cleanup(void *);
|
||||
apr_status_t apr_os2_time_to_apr_time(apr_time_t *result, FDATE os2date,
|
||||
FTIME os2time);
|
||||
apr_status_t apr_apr_time_to_os2_time(FDATE *os2date, FTIME *os2time,
|
||||
apr_time_t aprtime);
|
||||
|
||||
/* see win32/fileio.h for description of these */
|
||||
extern const char c_is_fnchar[256];
|
||||
|
||||
#define IS_FNCHAR(c) c_is_fnchar[(unsigned char)c]
|
||||
|
||||
apr_status_t filepath_root_test(char *path, apr_pool_t *p);
|
||||
apr_status_t filepath_drive_get(char **rootpath, char drive,
|
||||
apr_int32_t flags, apr_pool_t *p);
|
||||
apr_status_t filepath_root_case(char **rootpath, char *root, apr_pool_t *p);
|
||||
|
||||
#endif /* ! FILE_IO_H */
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/* 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 */
|
||||
|
||||
#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup) \
|
||||
APR_DECLARE(apr_status_t) apr_##name##_inherit_set(apr_##name##_t *the##name) \
|
||||
{ \
|
||||
int rv; \
|
||||
ULONG state; \
|
||||
if (((rv = DosQueryFHState(attr->parent_err->filedes, &state)) \
|
||||
!= 0) || \
|
||||
((rv = DosSetFHState(attr->parent_err->filedes, \
|
||||
state & ~OPEN_FLAGS_NOINHERIT)) != 0)) \
|
||||
return APR_FROM_OS_ERROR(rv); \
|
||||
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)\
|
||||
{ \
|
||||
int rv; \
|
||||
ULONG state; \
|
||||
if (((rv = DosQueryFHState(attr->parent_err->filedes, &state)) \
|
||||
!= 0) || \
|
||||
((rv = DosSetFHState(attr->parent_err->filedes, \
|
||||
state | OPEN_FLAGS_NOINHERIT)) != 0)) \
|
||||
return APR_FROM_OS_ERROR(rv); \
|
||||
return APR_SUCCESS; \
|
||||
}
|
||||
|
||||
#endif /* ! INHERIT_H */
|
||||
@@ -0,0 +1,76 @@
|
||||
/* 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_private.h"
|
||||
#include "apr_network_io.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_arch_os2calls.h"
|
||||
#include "apr_poll.h"
|
||||
|
||||
#if APR_HAVE_NETDB_H
|
||||
#include <netdb.h>
|
||||
#endif
|
||||
|
||||
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;
|
||||
int socketdes;
|
||||
int type;
|
||||
int protocol;
|
||||
apr_sockaddr_t *local_addr;
|
||||
apr_sockaddr_t *remote_addr;
|
||||
apr_interval_time_t timeout;
|
||||
int nonblock;
|
||||
int local_port_unknown;
|
||||
int local_interface_unknown;
|
||||
int remote_addr_unknown;
|
||||
apr_int32_t options;
|
||||
apr_int32_t inherit;
|
||||
sock_userdata_t *userdata;
|
||||
|
||||
/* if there is a timeout set, then this pollset is used */
|
||||
apr_pollset_t *pollset;
|
||||
};
|
||||
|
||||
/* Error codes returned from sock_errno() */
|
||||
#define SOCBASEERR 10000
|
||||
#define SOCEPERM (SOCBASEERR+1) /* Not owner */
|
||||
#define SOCESRCH (SOCBASEERR+3) /* No such process */
|
||||
#define SOCEINTR (SOCBASEERR+4) /* Interrupted system call */
|
||||
#define SOCENXIO (SOCBASEERR+6) /* No such device or address */
|
||||
#define SOCEBADF (SOCBASEERR+9) /* Bad file number */
|
||||
#define SOCEACCES (SOCBASEERR+13) /* Permission denied */
|
||||
#define SOCEFAULT (SOCBASEERR+14) /* Bad address */
|
||||
#define SOCEINVAL (SOCBASEERR+22) /* Invalid argument */
|
||||
#define SOCEMFILE (SOCBASEERR+24) /* Too many open files */
|
||||
#define SOCEPIPE (SOCBASEERR+32) /* Broken pipe */
|
||||
#define SOCEOS2ERR (SOCBASEERR+100) /* OS/2 Error */
|
||||
|
||||
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);
|
||||
|
||||
#endif /* ! NETWORK_IO_H */
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/* 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_errno.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
extern int (*apr_os2_socket)(int, int, int);
|
||||
extern int (*apr_os2_select)(int *, int, int, int, long);
|
||||
extern int (*apr_os2_sock_errno)();
|
||||
extern int (*apr_os2_accept)(int, struct sockaddr *, int *);
|
||||
extern int (*apr_os2_bind)(int, struct sockaddr *, int);
|
||||
extern int (*apr_os2_connect)(int, struct sockaddr *, int);
|
||||
extern int (*apr_os2_getpeername)(int, struct sockaddr *, int *);
|
||||
extern int (*apr_os2_getsockname)(int, struct sockaddr *, int *);
|
||||
extern int (*apr_os2_getsockopt)(int, int, int, char *, int *);
|
||||
extern int (*apr_os2_ioctl)(int, int, caddr_t, int);
|
||||
extern int (*apr_os2_listen)(int, int);
|
||||
extern int (*apr_os2_recv)(int, char *, int, int);
|
||||
extern int (*apr_os2_send)(int, const char *, int, int);
|
||||
extern int (*apr_os2_setsockopt)(int, int, int, char *, int);
|
||||
extern int (*apr_os2_shutdown)(int, int);
|
||||
extern int (*apr_os2_soclose)(int);
|
||||
extern int (*apr_os2_writev)(int, struct iovec *, int);
|
||||
extern int (*apr_os2_sendto)(int, const char *, int, int, const struct sockaddr *, int);
|
||||
extern int (*apr_os2_recvfrom)(int, char *, int, int, struct sockaddr *, int *);
|
||||
|
||||
#define socket apr_os2_socket
|
||||
#define select apr_os2_select
|
||||
#define sock_errno apr_os2_sock_errno
|
||||
#define accept apr_os2_accept
|
||||
#define bind apr_os2_bind
|
||||
#define connect apr_os2_connect
|
||||
#define getpeername apr_os2_getpeername
|
||||
#define getsockname apr_os2_getsockname
|
||||
#define getsockopt apr_os2_getsockopt
|
||||
#define ioctl apr_os2_ioctl
|
||||
#define listen apr_os2_listen
|
||||
#define recv apr_os2_recv
|
||||
#define send apr_os2_send
|
||||
#define setsockopt apr_os2_setsockopt
|
||||
#define shutdown apr_os2_shutdown
|
||||
#define soclose apr_os2_soclose
|
||||
#define writev apr_os2_writev
|
||||
#define sendto apr_os2_sendto
|
||||
#define recvfrom apr_os2_recvfrom
|
||||
@@ -0,0 +1,31 @@
|
||||
/* 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"
|
||||
#include "apr_file_io.h"
|
||||
|
||||
struct apr_proc_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
HMTX hMutex;
|
||||
TID owner;
|
||||
int lock_count;
|
||||
};
|
||||
|
||||
#endif /* PROC_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/* 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"
|
||||
#include "apr_file_io.h"
|
||||
|
||||
struct apr_thread_cond_t {
|
||||
apr_pool_t *pool;
|
||||
};
|
||||
|
||||
#endif /* THREAD_COND_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 THREAD_MUTEX_H
|
||||
#define THREAD_MUTEX_H
|
||||
|
||||
#include "apr_thread_mutex.h"
|
||||
#include "apr_file_io.h"
|
||||
|
||||
struct apr_thread_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
HMTX hMutex;
|
||||
};
|
||||
|
||||
#endif /* THREAD_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/* 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"
|
||||
#include "apr_file_io.h"
|
||||
|
||||
struct apr_thread_rwlock_t {
|
||||
apr_pool_t *pool;
|
||||
int readers;
|
||||
HMTX write_lock;
|
||||
HEV read_done;
|
||||
};
|
||||
|
||||
#endif /* THREAD_RWLOCK_H */
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
/* 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_thread_proc.h"
|
||||
#include "apr_file_io.h"
|
||||
|
||||
#ifndef THREAD_PROC_H
|
||||
#define THREAD_PROC_H
|
||||
|
||||
#define APR_THREADATTR_DETACHED 1
|
||||
|
||||
#define SHELL_PATH "cmd.exe"
|
||||
#define APR_THREAD_STACKSIZE 65536
|
||||
|
||||
struct apr_threadattr_t {
|
||||
apr_pool_t *pool;
|
||||
unsigned long attr;
|
||||
apr_size_t stacksize;
|
||||
};
|
||||
|
||||
struct apr_thread_t {
|
||||
apr_pool_t *pool;
|
||||
struct apr_threadattr_t *attr;
|
||||
unsigned long tid;
|
||||
apr_thread_start_t func;
|
||||
void *data;
|
||||
apr_status_t exitval;
|
||||
};
|
||||
|
||||
struct apr_threadkey_t {
|
||||
apr_pool_t *pool;
|
||||
unsigned long *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;
|
||||
};
|
||||
|
||||
struct apr_thread_once_t {
|
||||
unsigned long sem;
|
||||
char hit;
|
||||
};
|
||||
|
||||
#endif /* ! THREAD_PROC_H */
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/* 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
|
||||
|
||||
#include <dll.h>
|
||||
|
||||
struct apr_dso_handle_t {
|
||||
dllhandle *handle; /* Handle to the DSO loaded */
|
||||
int failing_errno; /* Don't save the buffer returned by
|
||||
strerror(); it gets reused */
|
||||
apr_pool_t *pool;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,45 @@
|
||||
/* 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 ATOMIC_H
|
||||
#define ATOMIC_H
|
||||
|
||||
#include "apr.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_atomic.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
|
||||
#if defined(USE_ATOMICS_GENERIC)
|
||||
/* noop */
|
||||
#elif defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
/* force use of generic atomics if building e.g. with -std=c89, which
|
||||
* doesn't allow inline asm */
|
||||
# define USE_ATOMICS_GENERIC
|
||||
#elif HAVE_ATOMIC_BUILTINS
|
||||
# define USE_ATOMICS_BUILTINS
|
||||
#elif defined(SOLARIS2) && SOLARIS2 >= 10
|
||||
# define USE_ATOMICS_SOLARIS
|
||||
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
||||
# define USE_ATOMICS_IA32
|
||||
#elif defined(__GNUC__) && (defined(__PPC__) || defined(__ppc__))
|
||||
# define USE_ATOMICS_PPC
|
||||
#elif defined(__GNUC__) && (defined(__s390__) || defined(__s390x__))
|
||||
# define USE_ATOMICS_S390
|
||||
#else
|
||||
# define USE_ATOMICS_GENERIC
|
||||
#endif
|
||||
|
||||
#endif /* ATOMIC_H */
|
||||
@@ -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 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
|
||||
|
||||
#ifdef HAVE_MACH_O_DYLD_H
|
||||
#include <mach-o/dyld.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DLFCN_H
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DL_H
|
||||
#include <dl.h>
|
||||
#endif
|
||||
|
||||
#ifndef RTLD_NOW
|
||||
#define RTLD_NOW 1
|
||||
#endif
|
||||
|
||||
#ifndef RTLD_GLOBAL
|
||||
#define RTLD_GLOBAL 0
|
||||
#endif
|
||||
|
||||
#if (defined(__DragonFly__) ||\
|
||||
defined(__FreeBSD__) ||\
|
||||
defined(__OpenBSD__) ||\
|
||||
defined(__NetBSD__) ) && !defined(__ELF__)
|
||||
#define DLSYM_NEEDS_UNDERSCORE
|
||||
#endif
|
||||
|
||||
struct apr_dso_handle_t {
|
||||
apr_pool_t *pool;
|
||||
void *handle;
|
||||
const char *errormsg;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,174 @@
|
||||
/* 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_general.h"
|
||||
#include "apr_tables.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_file_info.h"
|
||||
#include "apr_errno.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
#ifndef WAITIO_USES_POLL
|
||||
#include "apr_poll.h"
|
||||
#endif
|
||||
|
||||
/* System headers the file I/O library needs */
|
||||
#if APR_HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#if APR_HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
#if APR_HAVE_DIRENT_H
|
||||
#include <dirent.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
#if APR_HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if APR_HAVE_STDIO_H
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#if APR_HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_UIO_H
|
||||
#include <sys/uio.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#ifdef BEOS
|
||||
#include <kernel/OS.h>
|
||||
#endif
|
||||
/* Hunting down DEV_BSIZE if not from dirent.h, sys/stat.h etc */
|
||||
#ifdef HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#if BEOS_BONE
|
||||
# ifndef BONE7
|
||||
/* prior to BONE/7 fd_set & select were defined in sys/socket.h */
|
||||
# include <sys/socket.h>
|
||||
# else
|
||||
/* Be moved the fd_set stuff and also the FIONBIO definition... */
|
||||
# include <sys/ioctl.h>
|
||||
# endif
|
||||
#endif
|
||||
/* End System headers */
|
||||
|
||||
#define APR_FILE_DEFAULT_BUFSIZE 4096
|
||||
/* For backwards-compat */
|
||||
#define APR_FILE_BUFSIZE APR_FILE_DEFAULT_BUFSIZE
|
||||
|
||||
struct apr_file_t {
|
||||
apr_pool_t *pool;
|
||||
int filedes;
|
||||
char *fname;
|
||||
apr_int32_t flags;
|
||||
int eof_hit;
|
||||
int is_pipe;
|
||||
apr_interval_time_t timeout;
|
||||
int buffered;
|
||||
enum {BLK_UNKNOWN, BLK_OFF, BLK_ON } blocking;
|
||||
int ungetchar; /* Last char provided by an unget op. (-1 = no char)*/
|
||||
#ifndef WAITIO_USES_POLL
|
||||
/* if there is a timeout set, then this pollset is used */
|
||||
apr_pollset_t *pollset;
|
||||
#endif
|
||||
/* Stuff for buffered mode */
|
||||
char *buffer;
|
||||
apr_size_t bufpos; /* Read/Write position in buffer */
|
||||
apr_size_t bufsize; /* The size of the buffer */
|
||||
unsigned long 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 */
|
||||
#if APR_HAS_THREADS
|
||||
struct apr_thread_mutex_t *thlock;
|
||||
#endif
|
||||
};
|
||||
|
||||
#if APR_HAS_THREADS
|
||||
#define file_lock(f) do { \
|
||||
if ((f)->thlock) \
|
||||
apr_thread_mutex_lock((f)->thlock); \
|
||||
} while (0)
|
||||
#define file_unlock(f) do { \
|
||||
if ((f)->thlock) \
|
||||
apr_thread_mutex_unlock((f)->thlock); \
|
||||
} while (0)
|
||||
#else
|
||||
#define file_lock(f) do {} while (0)
|
||||
#define file_unlock(f) do {} while (0)
|
||||
#endif
|
||||
|
||||
#if APR_HAS_LARGE_FILES && defined(_LARGEFILE64_SOURCE)
|
||||
#define stat(f,b) stat64(f,b)
|
||||
#define lstat(f,b) lstat64(f,b)
|
||||
#define fstat(f,b) fstat64(f,b)
|
||||
#define lseek(f,o,w) lseek64(f,o,w)
|
||||
#define ftruncate(f,l) ftruncate64(f,l)
|
||||
typedef struct stat64 struct_stat;
|
||||
#else
|
||||
typedef struct stat struct_stat;
|
||||
#endif
|
||||
|
||||
/* readdir64_r is only used in specific cases: */
|
||||
#if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) \
|
||||
&& !defined(READDIR_IS_THREAD_SAFE) && defined(HAVE_READDIR64_R)
|
||||
#define APR_USE_READDIR64_R
|
||||
#endif
|
||||
|
||||
struct apr_dir_t {
|
||||
apr_pool_t *pool;
|
||||
char *dirname;
|
||||
DIR *dirstruct;
|
||||
#ifdef APR_USE_READDIR64_R
|
||||
struct dirent64 *entry;
|
||||
#else
|
||||
struct dirent *entry;
|
||||
#endif
|
||||
};
|
||||
|
||||
apr_status_t apr_unix_file_cleanup(void *);
|
||||
apr_status_t apr_unix_child_file_cleanup(void *);
|
||||
|
||||
mode_t apr_unix_perms2mode(apr_fileperms_t perms);
|
||||
apr_fileperms_t apr_unix_mode2perms(mode_t mode);
|
||||
|
||||
apr_status_t apr_file_flush_locked(apr_file_t *thefile);
|
||||
apr_status_t apr_file_info_get_locked(apr_finfo_t *finfo, apr_int32_t wanted,
|
||||
apr_file_t *thefile);
|
||||
|
||||
|
||||
#endif /* ! FILE_IO_H */
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/* 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 GLOBAL_MUTEX_H
|
||||
#define GLOBAL_MUTEX_H
|
||||
|
||||
#include "apr.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_global_mutex.h"
|
||||
#include "apr_arch_proc_mutex.h"
|
||||
#include "apr_arch_thread_mutex.h"
|
||||
|
||||
struct apr_global_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
apr_proc_mutex_t *proc_mutex;
|
||||
#if APR_HAS_THREADS
|
||||
apr_thread_mutex_t *thread_mutex;
|
||||
#endif /* APR_HAS_THREADS */
|
||||
};
|
||||
|
||||
#endif /* GLOBAL_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/* 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 */
|
||||
|
||||
#define APR_IMPLEMENT_INHERIT_SET(name, flag, pool, cleanup) \
|
||||
apr_status_t apr_##name##_inherit_set(apr_##name##_t *the##name) \
|
||||
{ \
|
||||
if (the##name->flag & APR_FOPEN_NOCLEANUP) \
|
||||
return APR_EINVAL; \
|
||||
if (!(the##name->flag & APR_INHERIT)) { \
|
||||
int flags = fcntl(the##name->name##des, F_GETFD); \
|
||||
if (flags == -1) \
|
||||
return errno; \
|
||||
flags &= ~(FD_CLOEXEC); \
|
||||
if (fcntl(the##name->name##des, F_SETFD, flags) == -1) \
|
||||
return errno; \
|
||||
the##name->flag |= APR_INHERIT; \
|
||||
apr_pool_child_cleanup_set(the##name->pool, \
|
||||
(void *)the##name, \
|
||||
cleanup, apr_pool_cleanup_null); \
|
||||
} \
|
||||
return APR_SUCCESS; \
|
||||
}
|
||||
|
||||
#define APR_IMPLEMENT_INHERIT_UNSET(name, flag, pool, cleanup) \
|
||||
apr_status_t apr_##name##_inherit_unset(apr_##name##_t *the##name) \
|
||||
{ \
|
||||
if (the##name->flag & APR_FOPEN_NOCLEANUP) \
|
||||
return APR_EINVAL; \
|
||||
if (the##name->flag & APR_INHERIT) { \
|
||||
int flags; \
|
||||
if ((flags = fcntl(the##name->name##des, F_GETFD)) == -1) \
|
||||
return errno; \
|
||||
flags |= FD_CLOEXEC; \
|
||||
if (fcntl(the##name->name##des, F_SETFD, flags) == -1) \
|
||||
return errno; \
|
||||
the##name->flag &= ~APR_INHERIT; \
|
||||
apr_pool_child_cleanup_set(the##name->pool, \
|
||||
(void *)the##name, \
|
||||
cleanup, cleanup); \
|
||||
} \
|
||||
return APR_SUCCESS; \
|
||||
}
|
||||
|
||||
#endif /* ! INHERIT_H */
|
||||
@@ -0,0 +1,24 @@
|
||||
/* 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 TIME_INTERNAL_H
|
||||
#define TIME_INTERNAL_H
|
||||
|
||||
#include "apr.h"
|
||||
|
||||
void apr_unix_setup_time(void);
|
||||
|
||||
#endif /* TIME_INTERNAL_H */
|
||||
@@ -0,0 +1,67 @@
|
||||
/* 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
|
||||
|
||||
#ifdef BEOS
|
||||
#include <kernel/OS.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;
|
||||
};
|
||||
|
||||
#if defined(WIN32) || defined(NETWARE)
|
||||
#define WSAHighByte 2
|
||||
#define WSALowByte 0
|
||||
#endif
|
||||
|
||||
#endif /* ! MISC_H */
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
/* 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.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_network_io.h"
|
||||
#include "apr_errno.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#ifndef WAITIO_USES_POLL
|
||||
#include "apr_poll.h"
|
||||
#endif
|
||||
|
||||
/* System headers the network I/O library needs */
|
||||
#if APR_HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_UIO_H
|
||||
#include <sys/uio.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#if APR_HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_TIME_H
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
#if APR_HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#if APR_HAVE_NETINET_TCP_H
|
||||
#include <netinet/tcp.h>
|
||||
#endif
|
||||
#if APR_HAVE_NETINET_SCTP_UIO_H
|
||||
#include <netinet/sctp_uio.h>
|
||||
#endif
|
||||
#if APR_HAVE_NETINET_SCTP_H
|
||||
#include <netinet/sctp.h>
|
||||
#endif
|
||||
#if APR_HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
#if APR_HAVE_ARPA_INET_H
|
||||
#include <arpa/inet.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_SOCKET_H
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_SOCKIO_H
|
||||
#include <sys/sockio.h>
|
||||
#endif
|
||||
#if APR_HAVE_NETDB_H
|
||||
#include <netdb.h>
|
||||
#endif
|
||||
#if APR_HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_SENDFILE_H
|
||||
#include <sys/sendfile.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_IOCTL_H
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
/* End System Headers */
|
||||
|
||||
#ifndef HAVE_POLLIN
|
||||
#define POLLIN 1
|
||||
#define POLLPRI 2
|
||||
#define POLLOUT 4
|
||||
#define POLLERR 8
|
||||
#define POLLHUP 16
|
||||
#define POLLNVAL 32
|
||||
#endif
|
||||
|
||||
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;
|
||||
int socketdes;
|
||||
int type;
|
||||
int protocol;
|
||||
apr_sockaddr_t *local_addr;
|
||||
apr_sockaddr_t *remote_addr;
|
||||
apr_interval_time_t timeout;
|
||||
#ifndef HAVE_POLL
|
||||
int connected;
|
||||
#endif
|
||||
#if APR_HAVE_SOCKADDR_UN
|
||||
int bound;
|
||||
#endif
|
||||
int local_port_unknown;
|
||||
int local_interface_unknown;
|
||||
int remote_addr_unknown;
|
||||
apr_int32_t options;
|
||||
apr_int32_t inherit;
|
||||
sock_userdata_t *userdata;
|
||||
#ifndef WAITIO_USES_POLL
|
||||
/* if there is a timeout set, then this pollset is used */
|
||||
apr_pollset_t *pollset;
|
||||
#endif
|
||||
};
|
||||
|
||||
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,189 @@
|
||||
/* 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_ARCH_POLL_PRIVATE_H
|
||||
#define APR_ARCH_POLL_PRIVATE_H
|
||||
|
||||
#if HAVE_POLL_H
|
||||
#include <poll.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_SYS_POLL_H
|
||||
#include <sys/poll.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_PORT_CREATE
|
||||
#include <port.h>
|
||||
#include <sys/port_impl.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_KQUEUE
|
||||
#include <sys/types.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_EPOLL
|
||||
#include <sys/epoll.h>
|
||||
#endif
|
||||
|
||||
#ifdef NETWARE
|
||||
#define HAS_SOCKETS(dt) (dt == APR_POLL_SOCKET) ? 1 : 0
|
||||
#define HAS_PIPES(dt) (dt == APR_POLL_FILE) ? 1 : 0
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_AIO_H) && defined(HAVE_AIO_MSGQ)
|
||||
#define _AIO_OS390 /* enable a bunch of z/OS aio.h definitions */
|
||||
#include <aio.h> /* aiocb */
|
||||
#endif
|
||||
|
||||
/* Choose the best method platform specific to use in apr_pollset */
|
||||
#ifdef HAVE_KQUEUE
|
||||
#define POLLSET_USES_KQUEUE
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_KQUEUE
|
||||
#elif defined(HAVE_PORT_CREATE)
|
||||
#define POLLSET_USES_PORT
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_PORT
|
||||
#elif defined(HAVE_EPOLL)
|
||||
#define POLLSET_USES_EPOLL
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_EPOLL
|
||||
#elif defined(HAVE_AIO_MSGQ)
|
||||
#define POLLSET_USES_AIO_MSGQ
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_AIO_MSGQ
|
||||
#elif defined(HAVE_POLL)
|
||||
#define POLLSET_USES_POLL
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_POLL
|
||||
#else
|
||||
#define POLLSET_USES_SELECT
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_SELECT
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#define POLL_USES_SELECT
|
||||
#undef POLLSET_DEFAULT_METHOD
|
||||
#define POLLSET_DEFAULT_METHOD APR_POLLSET_SELECT
|
||||
#else
|
||||
#ifdef HAVE_POLL
|
||||
#define POLL_USES_POLL
|
||||
#else
|
||||
#define POLL_USES_SELECT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(POLLSET_USES_KQUEUE) || defined(POLLSET_USES_EPOLL) || defined(POLLSET_USES_PORT) || defined(POLLSET_USES_AIO_MSGQ)
|
||||
|
||||
#include "apr_ring.h"
|
||||
|
||||
#if APR_HAS_THREADS
|
||||
#include "apr_thread_mutex.h"
|
||||
#define pollset_lock_rings() \
|
||||
if (pollset->flags & APR_POLLSET_THREADSAFE) \
|
||||
apr_thread_mutex_lock(pollset->p->ring_lock);
|
||||
#define pollset_unlock_rings() \
|
||||
if (pollset->flags & APR_POLLSET_THREADSAFE) \
|
||||
apr_thread_mutex_unlock(pollset->p->ring_lock);
|
||||
#else
|
||||
#define pollset_lock_rings()
|
||||
#define pollset_unlock_rings()
|
||||
#endif
|
||||
|
||||
typedef struct pfd_elem_t pfd_elem_t;
|
||||
|
||||
struct pfd_elem_t {
|
||||
APR_RING_ENTRY(pfd_elem_t) link;
|
||||
apr_pollfd_t pfd;
|
||||
#ifdef HAVE_PORT_CREATE
|
||||
int on_query_ring;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
typedef struct apr_pollset_private_t apr_pollset_private_t;
|
||||
typedef struct apr_pollset_provider_t apr_pollset_provider_t;
|
||||
typedef struct apr_pollcb_provider_t apr_pollcb_provider_t;
|
||||
|
||||
struct apr_pollset_t
|
||||
{
|
||||
apr_pool_t *pool;
|
||||
apr_uint32_t nelts;
|
||||
apr_uint32_t nalloc;
|
||||
apr_uint32_t flags;
|
||||
/* Pipe descriptors used for wakeup */
|
||||
apr_file_t *wakeup_pipe[2];
|
||||
apr_pollfd_t wakeup_pfd;
|
||||
apr_pollset_private_t *p;
|
||||
const apr_pollset_provider_t *provider;
|
||||
};
|
||||
|
||||
typedef union {
|
||||
#if defined(HAVE_EPOLL)
|
||||
struct epoll_event *epoll;
|
||||
#endif
|
||||
#if defined(HAVE_PORT_CREATE)
|
||||
port_event_t *port;
|
||||
#endif
|
||||
#if defined(HAVE_KQUEUE)
|
||||
struct kevent *ke;
|
||||
#endif
|
||||
#if defined(HAVE_POLL)
|
||||
struct pollfd *ps;
|
||||
#endif
|
||||
void *undef;
|
||||
} apr_pollcb_pset;
|
||||
|
||||
struct apr_pollcb_t {
|
||||
apr_pool_t *pool;
|
||||
apr_uint32_t nelts;
|
||||
apr_uint32_t nalloc;
|
||||
apr_uint32_t flags;
|
||||
/* Pipe descriptors used for wakeup */
|
||||
apr_file_t *wakeup_pipe[2];
|
||||
apr_pollfd_t wakeup_pfd;
|
||||
int fd;
|
||||
apr_pollcb_pset pollset;
|
||||
apr_pollfd_t **copyset;
|
||||
const apr_pollcb_provider_t *provider;
|
||||
};
|
||||
|
||||
struct apr_pollset_provider_t {
|
||||
apr_status_t (*create)(apr_pollset_t *, apr_uint32_t, apr_pool_t *, apr_uint32_t);
|
||||
apr_status_t (*add)(apr_pollset_t *, const apr_pollfd_t *);
|
||||
apr_status_t (*remove)(apr_pollset_t *, const apr_pollfd_t *);
|
||||
apr_status_t (*poll)(apr_pollset_t *, apr_interval_time_t, apr_int32_t *, const apr_pollfd_t **);
|
||||
apr_status_t (*cleanup)(apr_pollset_t *);
|
||||
const char *name;
|
||||
};
|
||||
|
||||
struct apr_pollcb_provider_t {
|
||||
apr_status_t (*create)(apr_pollcb_t *, apr_uint32_t, apr_pool_t *, apr_uint32_t);
|
||||
apr_status_t (*add)(apr_pollcb_t *, apr_pollfd_t *);
|
||||
apr_status_t (*remove)(apr_pollcb_t *, apr_pollfd_t *);
|
||||
apr_status_t (*poll)(apr_pollcb_t *, apr_interval_time_t, apr_pollcb_cb_t, void *);
|
||||
apr_status_t (*cleanup)(apr_pollcb_t *);
|
||||
const char *name;
|
||||
};
|
||||
|
||||
/*
|
||||
* Private functions used for the implementation of both apr_pollcb_* and
|
||||
* apr_pollset_*
|
||||
*/
|
||||
apr_status_t apr_poll_create_wakeup_pipe(apr_pool_t *pool, apr_pollfd_t *pfd,
|
||||
apr_file_t **wakeup_pipe);
|
||||
apr_status_t apr_poll_close_wakeup_pipe(apr_file_t **wakeup_pipe);
|
||||
void apr_poll_drain_wakeup_pipe(apr_file_t **wakeup_pipe);
|
||||
|
||||
#endif /* APR_ARCH_POLL_PRIVATE_H */
|
||||
@@ -0,0 +1,119 @@
|
||||
/* 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.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_proc_mutex.h"
|
||||
#include "apr_pools.h"
|
||||
#include "apr_portable.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_arch_file_io.h"
|
||||
|
||||
/* System headers required by Locks library */
|
||||
#if APR_HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#if APR_HAVE_STDIO_H
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#if APR_HAVE_FCNTL_H
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_IPC_H
|
||||
#include <sys/ipc.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SEM_H
|
||||
#include <sys/sem.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_FILE_H
|
||||
#include <sys/file.h>
|
||||
#endif
|
||||
#if APR_HAVE_STDLIB_H
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#if APR_HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MMAN_H
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
#if APR_HAVE_PTHREAD_H
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
/* End System Headers */
|
||||
|
||||
struct apr_proc_mutex_unix_lock_methods_t {
|
||||
unsigned int flags;
|
||||
apr_status_t (*create)(apr_proc_mutex_t *, const char *);
|
||||
apr_status_t (*acquire)(apr_proc_mutex_t *);
|
||||
apr_status_t (*tryacquire)(apr_proc_mutex_t *);
|
||||
apr_status_t (*release)(apr_proc_mutex_t *);
|
||||
apr_status_t (*cleanup)(void *);
|
||||
apr_status_t (*child_init)(apr_proc_mutex_t **, apr_pool_t *, const char *);
|
||||
apr_status_t (*perms_set)(apr_proc_mutex_t *, apr_fileperms_t, apr_uid_t, apr_gid_t);
|
||||
apr_lockmech_e mech;
|
||||
const char *name;
|
||||
};
|
||||
typedef struct apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_lock_methods_t;
|
||||
|
||||
/* bit values for flags field in apr_unix_lock_methods_t */
|
||||
#define APR_PROCESS_LOCK_MECH_IS_GLOBAL 1
|
||||
|
||||
#if !APR_HAVE_UNION_SEMUN && defined(APR_HAS_SYSVSEM_SERIALIZE)
|
||||
union semun {
|
||||
int val;
|
||||
struct semid_ds *buf;
|
||||
unsigned short *array;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct apr_proc_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
const apr_proc_mutex_unix_lock_methods_t *meth;
|
||||
int curr_locked;
|
||||
char *fname;
|
||||
|
||||
apr_os_proc_mutex_t os; /* Native mutex holder. */
|
||||
|
||||
#if APR_HAS_FCNTL_SERIALIZE || APR_HAS_FLOCK_SERIALIZE
|
||||
apr_file_t *interproc; /* For apr_file_ calls on native fd. */
|
||||
int interproc_closing; /* whether the native fd is opened/closed with
|
||||
* 'interproc' or apr_os_file_put()ed (hence
|
||||
* needing an an explicit close for consistency
|
||||
* with other methods).
|
||||
*/
|
||||
#endif
|
||||
#if APR_HAS_PROC_PTHREAD_SERIALIZE
|
||||
int pthread_refcounting; /* Whether the native mutex is refcounted or
|
||||
* apr_os_proc_mutex_put()ed, which makes
|
||||
* refcounting impossible/undesirable.
|
||||
*/
|
||||
#endif
|
||||
};
|
||||
|
||||
void apr_proc_mutex_unix_setup_lock(void);
|
||||
|
||||
#endif /* PROC_MUTEX_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.
|
||||
*/
|
||||
|
||||
#ifndef SHM_H
|
||||
#define SHM_H
|
||||
|
||||
#include "apr.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_shm.h"
|
||||
#include "apr_pools.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_network_io.h"
|
||||
#include "apr_portable.h"
|
||||
|
||||
#if APR_HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MMAN_H
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_IPC_H
|
||||
#include <sys/ipc.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_MUTEX_H
|
||||
#include <sys/mutex.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SHM_H
|
||||
#include <sys/shm.h>
|
||||
#endif
|
||||
#if !defined(SHM_R)
|
||||
#define SHM_R 0400
|
||||
#endif
|
||||
#if !defined(SHM_W)
|
||||
#define SHM_W 0200
|
||||
#endif
|
||||
#ifdef HAVE_SYS_FILE_H
|
||||
#include <sys/file.h>
|
||||
#endif
|
||||
|
||||
/* Not all systems seem to have MAP_FAILED defined, but it should always
|
||||
* just be (void *)-1. */
|
||||
#ifndef MAP_FAILED
|
||||
#define MAP_FAILED ((void *)-1)
|
||||
#endif
|
||||
|
||||
struct apr_shm_t {
|
||||
apr_pool_t *pool;
|
||||
void *base; /* base real address */
|
||||
void *usable; /* base usable address */
|
||||
apr_size_t reqsize; /* requested segment size */
|
||||
apr_size_t realsize; /* actual segment size */
|
||||
const char *filename; /* NULL if anonymous */
|
||||
#if APR_USE_SHMEM_SHMGET || APR_USE_SHMEM_SHMGET_ANON
|
||||
int shmid; /* shmem ID returned from shmget() */
|
||||
key_t shmkey; /* shmem key IPC_ANON or returned from ftok() */
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif /* SHM_H */
|
||||
@@ -0,0 +1,42 @@
|
||||
/* 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.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_lib.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
#include "apr_thread_cond.h"
|
||||
#include "apr_pools.h"
|
||||
|
||||
#if APR_HAVE_PTHREAD_H
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
/* XXX: Should we have a better autoconf search, something like
|
||||
* APR_HAS_PTHREAD_COND? -aaron */
|
||||
#if APR_HAS_THREADS
|
||||
struct apr_thread_cond_t {
|
||||
apr_pool_t *pool;
|
||||
pthread_cond_t cond;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* THREAD_COND_H */
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/* 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.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_thread_mutex.h"
|
||||
#include "apr_portable.h"
|
||||
#include "apr_atomic.h"
|
||||
|
||||
#if APR_HAVE_PTHREAD_H
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#if APR_HAS_THREADS
|
||||
struct apr_thread_mutex_t {
|
||||
apr_pool_t *pool;
|
||||
pthread_mutex_t mutex;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif /* THREAD_MUTEX_H */
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/* 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.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_general.h"
|
||||
#include "apr_thread_rwlock.h"
|
||||
#include "apr_pools.h"
|
||||
|
||||
#if APR_HAVE_PTHREAD_H
|
||||
/* this gives us pthread_rwlock_t */
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
|
||||
#if APR_HAS_THREADS
|
||||
#ifdef HAVE_PTHREAD_RWLOCKS
|
||||
|
||||
struct apr_thread_rwlock_t {
|
||||
apr_pool_t *pool;
|
||||
pthread_rwlock_t rwlock;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
struct apr_thread_rwlock_t {
|
||||
apr_pool_t *pool;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* THREAD_RWLOCK_H */
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
/* 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.h"
|
||||
#include "apr_private.h"
|
||||
#include "apr_thread_proc.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_arch_file_io.h"
|
||||
#include "apr_perms_set.h"
|
||||
|
||||
/* System headers required for thread/process library */
|
||||
#if APR_HAVE_PTHREAD_H
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_RESOURCE_H
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
#if APR_HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#if APR_HAVE_SYS_WAIT_H
|
||||
#include <sys/wait.h>
|
||||
#endif
|
||||
#if APR_HAVE_STRING_H
|
||||
#include <string.h>
|
||||
#endif
|
||||
#ifdef HAVE_SCHED_H
|
||||
#include <sched.h>
|
||||
#endif
|
||||
/* End System Headers */
|
||||
|
||||
|
||||
#ifndef THREAD_PROC_H
|
||||
#define THREAD_PROC_H
|
||||
|
||||
#define SHELL_PATH "/bin/sh"
|
||||
|
||||
#if APR_HAS_THREADS
|
||||
|
||||
struct apr_thread_t {
|
||||
apr_pool_t *pool;
|
||||
pthread_t *td;
|
||||
void *data;
|
||||
apr_thread_start_t func;
|
||||
apr_status_t exitval;
|
||||
};
|
||||
|
||||
struct apr_threadattr_t {
|
||||
apr_pool_t *pool;
|
||||
pthread_attr_t attr;
|
||||
};
|
||||
|
||||
struct apr_threadkey_t {
|
||||
apr_pool_t *pool;
|
||||
pthread_key_t key;
|
||||
};
|
||||
|
||||
struct apr_thread_once_t {
|
||||
pthread_once_t once;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
typedef struct apr_procattr_pscb_t apr_procattr_pscb_t;
|
||||
struct apr_procattr_pscb_t {
|
||||
struct apr_procattr_pscb_t *next;
|
||||
apr_perms_setfn_t *perms_set_fn;
|
||||
apr_fileperms_t perms;
|
||||
const void *data;
|
||||
};
|
||||
|
||||
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;
|
||||
#ifdef RLIMIT_CPU
|
||||
struct rlimit *limit_cpu;
|
||||
#endif
|
||||
#if defined (RLIMIT_DATA) || defined (RLIMIT_VMEM) || defined(RLIMIT_AS)
|
||||
struct rlimit *limit_mem;
|
||||
#endif
|
||||
#ifdef RLIMIT_NPROC
|
||||
struct rlimit *limit_nproc;
|
||||
#endif
|
||||
#ifdef RLIMIT_NOFILE
|
||||
struct rlimit *limit_nofile;
|
||||
#endif
|
||||
apr_child_errfn_t *errfn;
|
||||
apr_int32_t errchk;
|
||||
apr_uid_t uid;
|
||||
apr_gid_t gid;
|
||||
apr_procattr_pscb_t *perms_set_callbacks;
|
||||
};
|
||||
|
||||
#endif /* ! THREAD_PROC_H */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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