rbb 99/07/02 10:46:45
Modified: apr/file_io/unix dir.c open.c apr/locks/unix locks.c apr/network_io/unix sockets.c apr/threadproc/unix proc.c thread.c threadpriv.c apr/time/unix time.c Added: include apr_portable.h Log: Added a group of functions to take the apr type and return the platfor specific type that is underneath it. These are written in a portable manner, and are important because without them any APR program can only use code that is APR'ized. with them, that is no longer true. Revision Changes Path 1.15 +6 -0 apache-apr/apr/file_io/unix/dir.c Index: dir.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/unix/dir.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- dir.c 1999/06/15 19:43:20 1.14 +++ dir.c 1999/07/02 17:46:38 1.15 @@ -61,6 +61,7 @@ #include "fileio.h" #include "apr_file_io.h" #include "apr_lib.h" +#include "apr_portable.h" ap_status_t dir_cleanup(void *thedir) { @@ -279,3 +280,8 @@ return APR_SUCCESS; } +ap_os_dir_t *ap_get_os_dir(struct dir_t *dir) +{ + return dir->dirstruct; +} + 1.29 +6 -0 apache-apr/apr/file_io/unix/open.c Index: open.c =================================================================== RCS file: /home/cvs/apache-apr/apr/file_io/unix/open.c,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- open.c 1999/06/02 18:44:33 1.28 +++ open.c 1999/07/02 17:46:39 1.29 @@ -56,6 +56,7 @@ #include "fileio.h" #include "apr_file_io.h" #include "apr_general.h" +#include "apr_portable.h" #include "apr_lib.h" #include <errno.h> #include <string.h> @@ -188,5 +189,10 @@ else { return errno; } +} + +ap_os_file_t *ap_get_os_file(struct file_t *file) +{ + return &(file->filedes); } 1.11 +22 -0 apache-apr/apr/locks/unix/locks.c Index: locks.c =================================================================== RCS file: /home/cvs/apache-apr/apr/locks/unix/locks.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- locks.c 1999/06/22 16:57:29 1.10 +++ locks.c 1999/07/02 17:46:40 1.11 @@ -54,6 +54,7 @@ */ #include "apr_general.h" +#include "apr_portable.h" #include "locks.h" #include <string.h> @@ -174,6 +175,27 @@ data = NULL; return APR_ENOLOCK; } +} + +ap_os_lock_t *ap_get_os_lock_t(struct lock_t *lock) +{ + ap_os_lock_t *oslock; + + oslock = (ap_os_lock_t *)malloc(sizeof(ap_os_lock_t)); + + oslock->crossproc = lock->interproc; +#if defined (USE_SYSVSEM_SERIALIZE) + oslock->op_on = lock->op_on; + oslock->op_off = lock->op_off; +#elif defined (USE_FCNTL_SERIALIZE) + oslock->lock_it = lock->lock_it; + oslock->unlock_it = lock->unlock_it; +#endif +#if defined (USE_PTHREAD_SERIALIZE) + oslock->intraproc = lock->intraproc; +#endif + + return oslock; } 1.21 +5 -0 apache-apr/apr/network_io/unix/sockets.c Index: sockets.c =================================================================== RCS file: /home/cvs/apache-apr/apr/network_io/unix/sockets.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- sockets.c 1999/06/22 16:57:31 1.20 +++ sockets.c 1999/07/02 17:46:42 1.21 @@ -56,6 +56,7 @@ #include "networkio.h" #include "apr_network_io.h" #include "apr_general.h" +#include "apr_portable.h" #include "apr_lib.h" #include <errno.h> #include <string.h> @@ -241,4 +242,8 @@ } } +ap_os_sock_t *ap_get_os_sock(struct socket_t *sock) +{ + return &(sock->socketdes); +} 1.19 +6 -0 apache-apr/apr/threadproc/unix/proc.c Index: proc.c =================================================================== RCS file: /home/cvs/apache-apr/apr/threadproc/unix/proc.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- proc.c 1999/06/17 15:05:22 1.18 +++ proc.c 1999/07/02 17:46:43 1.19 @@ -60,6 +60,7 @@ #include "apr_file_io.h" #include "apr_general.h" #include "apr_lib.h" +#include "apr_portable.h" #include <signal.h> #include <string.h> #include <sys/wait.h> @@ -280,4 +281,9 @@ } return errno; } + +ap_os_proc_t *ap_get_os_proc(ap_proc_t *proc) +{ + return &(proc->pid); +} 1.10 +6 -1 apache-apr/apr/threadproc/unix/thread.c Index: thread.c =================================================================== RCS file: /home/cvs/apache-apr/apr/threadproc/unix/thread.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- thread.c 1999/06/22 16:57:34 1.9 +++ thread.c 1999/07/02 17:46:43 1.10 @@ -56,8 +56,8 @@ #include "threadproc.h" #include "apr_thread_proc.h" #include "apr_general.h" +#include "apr_portable.h" - ap_status_t ap_create_threadattr(ap_context_t *cont, struct threadattr_t **new) { ap_status_t stat; @@ -202,5 +202,10 @@ data = NULL; return APR_ENOTHREAD; } +} + +ap_os_thread_t *ap_get_os_thread(struct thread_t *thd) +{ + return thd->td; } 1.8 +6 -0 apache-apr/apr/threadproc/unix/threadpriv.c Index: threadpriv.c =================================================================== RCS file: /home/cvs/apache-apr/apr/threadproc/unix/threadpriv.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- threadpriv.c 1999/06/22 16:57:34 1.7 +++ threadpriv.c 1999/07/02 17:46:43 1.8 @@ -57,6 +57,7 @@ #include "apr_thread_proc.h" #include "apr_general.h" #include "apr_errno.h" +#include "apr_portable.h" ap_status_t ap_create_thread_private(ap_context_t *cont, void (*dest)(void *), struct threadkey_t **key) @@ -134,5 +135,10 @@ data = NULL; return APR_ENOTHDKEY; } +} + +ap_os_threadkey_t *ap_get_os_threadkey(ap_key_t *key) +{ + return key->key; } 1.6 +10 -0 apache-apr/apr/time/unix/time.c Index: time.c =================================================================== RCS file: /home/cvs/apache-apr/apr/time/unix/time.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- time.c 1999/06/02 18:45:04 1.5 +++ time.c 1999/07/02 17:46:44 1.6 @@ -57,6 +57,7 @@ #include "apr_time.h" #include "apr_general.h" #include "apr_lib.h" +#include "apr_portable.h" #include <time.h> #include <errno.h> #include <string.h> @@ -71,6 +72,7 @@ (*new)->cntxt = cont; (*new)->explodedtime = NULL; + (*new)->currtime = -1; return APR_SUCCESS; } @@ -130,5 +132,13 @@ } time->currtime = days; /* must be a valid time */ return APR_SUCCESS; +} + +ap_os_time_t *ap_get_os_time(struct atime_t *thetime) +{ + if (thetime->currtime == -1) { + ap_implode_time(thetime); + } + return &(thetime->currtime); } 1.1 apache-apr/include/apr_portable.h Index: apr_portable.h =================================================================== /* ==================================================================== * Copyright (c) 1999 The Apache Group. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * 4. The names "Apache Server" and "Apache Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the Apache Group * for use in the Apache HTTP server project (http://www.apache.org/)." * * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Group. * For more information on the Apache Group and the Apache HTTP server * project, please see <http://www.apache.org/>. * */ /* This header file is where you should put ANY platform specific information. * This should be the only header file that programs need to include that * actually has platform dependant code which refers to the . */ #include "apr_general.h" #include "apr_thread_proc.h" #include "apr_file_io.h" #include "apr_network_io.h" #include "apr_errno.h" #include "apr_lock.h" #include "apr_time.h" #ifdef HAVE_PTHREAD_H #include <pthread.h> #endif #ifdef HAVE_TIME_H #include <time.h> #endif #ifdef WIN32 /* The primitives for Windows types */ typedef HANDLE ap_os_file_t; typedef HANDLE ap_os_dir_t; typedef HANDLE ap_os_sock_t; typedef HANDLE ap_os_lock_t; typedef HANDLE ap_os_thread_t; typedef HANDLE ap_os_proc_t; typedef DWORD ap_os_threadkey_t; typedef SYSTEMTIME ap_os_time_t; #else /* Any other OS should go above this one. This is the lowest common * denominator typedefs for all UNIX-like systems. :) */ #ifdef NEED_UNION_SEMUN /* it makes no sense, but this isn't defined on solaris */ union semun { long val; struct semid_ds *buf; ushort *array; }; #endif struct os_lock_t { #if defined USE_SYSVSEM_SERIALIZE int crossproc; struct sembuf op_on; struct sembuf op_off; #elif defined (USE_FCNTL_SERIALIZE) int crossproc; struct flock lock_it; struct flock unlock_it; #elif defined (USE_PROC_PTHREAD_SERIALIZE) pthread_mutex_t *crossproc; #elif defined (USE_FLOCK_SERIALIZE) int crossproc; #else /* No Interprocess serialization, too bad. */ #endif #if defined (USE_PTHREAD_SERIALIZE) pthread_mutex_t *intraproc; #endif }; typedef int ap_os_file_t; typedef DIR ap_os_dir_t; typedef int ap_os_sock_t; typedef struct os_lock_t ap_os_lock_t; typedef pthread_t ap_os_thread_t; typedef pid_t ap_os_proc_t; typedef pthread_key_t ap_os_threadkey_t; typedef time_t ap_os_time_t; #endif ap_os_file_t *ap_get_os_file(ap_file_t *); ap_os_dir_t *ap_get_os_dir(ap_dir_t *); ap_os_sock_t *ap_get_os_sock(ap_socket_t *); ap_os_lock_t *ap_get_os_lock(ap_lock_t *); ap_os_thread_t *ap_get_os_thread(ap_thread_t *); ap_os_proc_t *ap_get_os_proc(ap_proc_t *); ap_os_time_t *ap_get_os_time(ap_time_t *); ap_os_threadkey_t *ap_get_os_threadkey(ap_key_t *);