1251875Speter/* Licensed to the Apache Software Foundation (ASF) under one or more 2251875Speter * contributor license agreements. See the NOTICE file distributed with 3251875Speter * this work for additional information regarding copyright ownership. 4251875Speter * The ASF licenses this file to You under the Apache License, Version 2.0 5251875Speter * (the "License"); you may not use this file except in compliance with 6251875Speter * the License. You may obtain a copy of the License at 7251875Speter * 8251875Speter * http://www.apache.org/licenses/LICENSE-2.0 9251875Speter * 10251875Speter * Unless required by applicable law or agreed to in writing, software 11251875Speter * distributed under the License is distributed on an "AS IS" BASIS, 12251875Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251875Speter * See the License for the specific language governing permissions and 14251875Speter * limitations under the License. 15251875Speter */ 16251875Speter 17251875Speter/* This header file is where you should put ANY platform specific information. 18251875Speter * This should be the only header file that programs need to include that 19251875Speter * actually has platform dependent code which refers to the . 20251875Speter */ 21251875Speter#ifndef APR_PORTABLE_H 22251875Speter#define APR_PORTABLE_H 23251875Speter/** 24251875Speter * @file apr_portable.h 25251875Speter * @brief APR Portability Routines 26251875Speter */ 27251875Speter 28251875Speter#include "apr.h" 29251875Speter#include "apr_pools.h" 30251875Speter#include "apr_thread_proc.h" 31251875Speter#include "apr_file_io.h" 32251875Speter#include "apr_network_io.h" 33251875Speter#include "apr_errno.h" 34251875Speter#include "apr_global_mutex.h" 35251875Speter#include "apr_proc_mutex.h" 36251875Speter#include "apr_time.h" 37251875Speter#include "apr_dso.h" 38251875Speter#include "apr_shm.h" 39251875Speter 40251875Speter#if APR_HAVE_DIRENT_H 41251875Speter#include <dirent.h> 42251875Speter#endif 43251875Speter#if APR_HAVE_FCNTL_H 44251875Speter#include <fcntl.h> 45251875Speter#endif 46251875Speter#if APR_HAVE_PTHREAD_H 47251875Speter#include <pthread.h> 48251875Speter#endif 49362181Sdim#if APR_HAVE_SEMAPHORE_H 50362181Sdim#include <semaphore.h> 51362181Sdim#endif 52251875Speter 53251875Speter#ifdef __cplusplus 54251875Speterextern "C" { 55251875Speter#endif /* __cplusplus */ 56251875Speter 57251875Speter/** 58251875Speter * @defgroup apr_portabile Portability Routines 59251875Speter * @ingroup APR 60251875Speter * @{ 61251875Speter */ 62251875Speter 63251875Speter#ifdef WIN32 64251875Speter/* The primitives for Windows types */ 65251875Spetertypedef HANDLE apr_os_file_t; 66251875Spetertypedef HANDLE apr_os_dir_t; 67251875Spetertypedef SOCKET apr_os_sock_t; 68251875Spetertypedef HANDLE apr_os_proc_mutex_t; 69251875Spetertypedef HANDLE apr_os_thread_t; 70251875Spetertypedef HANDLE apr_os_proc_t; 71251875Spetertypedef DWORD apr_os_threadkey_t; 72251875Spetertypedef FILETIME apr_os_imp_time_t; 73251875Spetertypedef SYSTEMTIME apr_os_exp_time_t; 74251875Spetertypedef HANDLE apr_os_dso_handle_t; 75251875Spetertypedef HANDLE apr_os_shm_t; 76251875Speter 77251875Speter#elif defined(OS2) 78251875Spetertypedef HFILE apr_os_file_t; 79251875Spetertypedef HDIR apr_os_dir_t; 80251875Spetertypedef int apr_os_sock_t; 81251875Spetertypedef HMTX apr_os_proc_mutex_t; 82251875Spetertypedef TID apr_os_thread_t; 83251875Spetertypedef PID apr_os_proc_t; 84251875Spetertypedef PULONG apr_os_threadkey_t; 85251875Spetertypedef struct timeval apr_os_imp_time_t; 86251875Spetertypedef struct tm apr_os_exp_time_t; 87251875Spetertypedef HMODULE apr_os_dso_handle_t; 88251875Spetertypedef void* apr_os_shm_t; 89251875Speter 90251875Speter#elif defined(__BEOS__) 91251875Speter#include <kernel/OS.h> 92251875Speter#include <kernel/image.h> 93251875Speter 94251875Speterstruct apr_os_proc_mutex_t { 95251875Speter sem_id sem; 96251875Speter int32 ben; 97251875Speter}; 98251875Speter 99251875Spetertypedef int apr_os_file_t; 100251875Spetertypedef DIR apr_os_dir_t; 101251875Spetertypedef int apr_os_sock_t; 102251875Spetertypedef struct apr_os_proc_mutex_t apr_os_proc_mutex_t; 103251875Spetertypedef thread_id apr_os_thread_t; 104251875Spetertypedef thread_id apr_os_proc_t; 105251875Spetertypedef int apr_os_threadkey_t; 106251875Spetertypedef struct timeval apr_os_imp_time_t; 107251875Spetertypedef struct tm apr_os_exp_time_t; 108251875Spetertypedef image_id apr_os_dso_handle_t; 109251875Spetertypedef void* apr_os_shm_t; 110251875Speter 111251875Speter#elif defined(NETWARE) 112251875Spetertypedef int apr_os_file_t; 113251875Spetertypedef DIR apr_os_dir_t; 114251875Spetertypedef int apr_os_sock_t; 115251875Spetertypedef NXMutex_t apr_os_proc_mutex_t; 116251875Spetertypedef NXThreadId_t apr_os_thread_t; 117251875Spetertypedef long apr_os_proc_t; 118251875Spetertypedef NXKey_t apr_os_threadkey_t; 119251875Spetertypedef struct timeval apr_os_imp_time_t; 120251875Spetertypedef struct tm apr_os_exp_time_t; 121251875Spetertypedef void * apr_os_dso_handle_t; 122251875Spetertypedef void* apr_os_shm_t; 123251875Speter 124251875Speter#else 125251875Speter/* Any other OS should go above this one. This is the lowest common 126251875Speter * denominator typedefs for all UNIX-like systems. :) 127251875Speter */ 128251875Speter 129251875Speter/** Basic OS process mutex structure. */ 130251875Speterstruct apr_os_proc_mutex_t { 131251875Speter#if APR_HAS_SYSVSEM_SERIALIZE || APR_HAS_FCNTL_SERIALIZE || APR_HAS_FLOCK_SERIALIZE 132251875Speter /** Value used for SYS V Semaphore, FCNTL and FLOCK serialization */ 133251875Speter int crossproc; 134251875Speter#endif 135251875Speter#if APR_HAS_PROC_PTHREAD_SERIALIZE 136251875Speter /** Value used for PTHREAD serialization */ 137251875Speter pthread_mutex_t *pthread_interproc; 138251875Speter#endif 139251875Speter#if APR_HAS_THREADS 140251875Speter /* If no threads, no need for thread locks */ 141251875Speter#if APR_USE_PTHREAD_SERIALIZE 142251875Speter /** This value is currently unused within APR and Apache */ 143251875Speter pthread_mutex_t *intraproc; 144251875Speter#endif 145251875Speter#endif 146362181Sdim#if APR_HAS_POSIXSEM_SERIALIZE 147362181Sdim /** Value used for POSIX semaphores serialization */ 148362181Sdim sem_t *psem_interproc; 149362181Sdim#endif 150251875Speter}; 151251875Speter 152251875Spetertypedef int apr_os_file_t; /**< native file */ 153251875Spetertypedef DIR apr_os_dir_t; /**< native dir */ 154251875Spetertypedef int apr_os_sock_t; /**< native dir */ 155251875Spetertypedef struct apr_os_proc_mutex_t apr_os_proc_mutex_t; /**< native process 156251875Speter * mutex 157251875Speter */ 158251875Speter#if APR_HAS_THREADS && APR_HAVE_PTHREAD_H 159251875Spetertypedef pthread_t apr_os_thread_t; /**< native thread */ 160251875Spetertypedef pthread_key_t apr_os_threadkey_t; /**< native thread address 161251875Speter * space */ 162251875Speter#endif 163251875Spetertypedef pid_t apr_os_proc_t; /**< native pid */ 164251875Spetertypedef struct timeval apr_os_imp_time_t; /**< native timeval */ 165251875Spetertypedef struct tm apr_os_exp_time_t; /**< native tm */ 166251875Speter/** @var apr_os_dso_handle_t 167251875Speter * native dso types 168251875Speter */ 169251875Speter#if defined(HPUX) || defined(HPUX10) || defined(HPUX11) 170251875Speter#include <dl.h> 171251875Spetertypedef shl_t apr_os_dso_handle_t; 172251875Speter#elif defined(DARWIN) 173251875Speter#include <mach-o/dyld.h> 174251875Spetertypedef NSModule apr_os_dso_handle_t; 175251875Speter#else 176251875Spetertypedef void * apr_os_dso_handle_t; 177251875Speter#endif 178251875Spetertypedef void* apr_os_shm_t; /**< native SHM */ 179251875Speter 180251875Speter#endif 181251875Speter 182251875Speter/** 183251875Speter * @typedef apr_os_sock_info_t 184251875Speter * @brief alias for local OS socket 185251875Speter */ 186251875Speter/** 187251875Speter * everything APR needs to know about an active socket to construct 188251875Speter * an APR socket from it; currently, this is platform-independent 189251875Speter */ 190251875Speterstruct apr_os_sock_info_t { 191251875Speter apr_os_sock_t *os_sock; /**< always required */ 192251875Speter struct sockaddr *local; /**< NULL if not yet bound */ 193251875Speter struct sockaddr *remote; /**< NULL if not connected */ 194251875Speter int family; /**< always required (APR_INET, APR_INET6, etc.) */ 195251875Speter int type; /**< always required (SOCK_STREAM, SOCK_DGRAM, etc.) */ 196251875Speter int protocol; /**< 0 or actual protocol (APR_PROTO_SCTP, APR_PROTO_TCP, etc.) */ 197251875Speter}; 198251875Speter 199251875Spetertypedef struct apr_os_sock_info_t apr_os_sock_info_t; 200251875Speter 201251875Speter#if APR_PROC_MUTEX_IS_GLOBAL || defined(DOXYGEN) 202251875Speter/** Opaque global mutex type */ 203251875Speter#define apr_os_global_mutex_t apr_os_proc_mutex_t 204251875Speter/** @return apr_os_global_mutex */ 205251875Speter#define apr_os_global_mutex_get apr_os_proc_mutex_get 206251875Speter#else 207251875Speter /** Thread and process mutex for those platforms where process mutexes 208251875Speter * are not held in threads. 209251875Speter */ 210251875Speter struct apr_os_global_mutex_t { 211251875Speter apr_pool_t *pool; 212251875Speter apr_proc_mutex_t *proc_mutex; 213251875Speter#if APR_HAS_THREADS 214251875Speter apr_thread_mutex_t *thread_mutex; 215251875Speter#endif /* APR_HAS_THREADS */ 216251875Speter }; 217251875Speter typedef struct apr_os_global_mutex_t apr_os_global_mutex_t; 218251875Speter 219251875SpeterAPR_DECLARE(apr_status_t) apr_os_global_mutex_get(apr_os_global_mutex_t *ospmutex, 220251875Speter apr_global_mutex_t *pmutex); 221251875Speter#endif 222251875Speter 223251875Speter 224251875Speter/** 225251875Speter * convert the file from apr type to os specific type. 226251875Speter * @param thefile The os specific file we are converting to 227251875Speter * @param file The apr file to convert. 228251875Speter * @remark On Unix, it is only possible to get a file descriptor from 229251875Speter * an apr file type. 230251875Speter */ 231251875SpeterAPR_DECLARE(apr_status_t) apr_os_file_get(apr_os_file_t *thefile, 232251875Speter apr_file_t *file); 233251875Speter 234251875Speter/** 235251875Speter * convert the dir from apr type to os specific type. 236251875Speter * @param thedir The os specific dir we are converting to 237251875Speter * @param dir The apr dir to convert. 238251875Speter */ 239251875SpeterAPR_DECLARE(apr_status_t) apr_os_dir_get(apr_os_dir_t **thedir, 240251875Speter apr_dir_t *dir); 241251875Speter 242251875Speter/** 243251875Speter * Convert the socket from an apr type to an OS specific socket 244251875Speter * @param thesock The socket to convert. 245251875Speter * @param sock The os specific equivalent of the apr socket.. 246251875Speter */ 247251875SpeterAPR_DECLARE(apr_status_t) apr_os_sock_get(apr_os_sock_t *thesock, 248251875Speter apr_socket_t *sock); 249251875Speter 250251875Speter/** 251362181Sdim * Convert the proc mutex from apr type to os specific type 252251875Speter * @param ospmutex The os specific proc mutex we are converting to. 253251875Speter * @param pmutex The apr proc mutex to convert. 254251875Speter */ 255251875SpeterAPR_DECLARE(apr_status_t) apr_os_proc_mutex_get(apr_os_proc_mutex_t *ospmutex, 256251875Speter apr_proc_mutex_t *pmutex); 257251875Speter 258251875Speter/** 259362181Sdim * Convert the proc mutex from apr type to os specific type, also 260362181Sdim * providing the mechanism used by the apr mutex. 261362181Sdim * @param ospmutex The os specific proc mutex we are converting to. 262362181Sdim * @param pmutex The apr proc mutex to convert. 263362181Sdim * @param mech The mechanism used by the apr proc mutex (if not NULL). 264362181Sdim * @remark Allows for disambiguation for platforms with multiple mechanisms 265362181Sdim * available. 266362181Sdim */ 267362181SdimAPR_DECLARE(apr_status_t) apr_os_proc_mutex_get_ex(apr_os_proc_mutex_t *ospmutex, 268362181Sdim apr_proc_mutex_t *pmutex, 269362181Sdim apr_lockmech_e *mech); 270362181Sdim 271362181Sdim/** 272251875Speter * Get the exploded time in the platforms native format. 273251875Speter * @param ostime the native time format 274251875Speter * @param aprtime the time to convert 275251875Speter */ 276251875SpeterAPR_DECLARE(apr_status_t) apr_os_exp_time_get(apr_os_exp_time_t **ostime, 277251875Speter apr_time_exp_t *aprtime); 278251875Speter 279251875Speter/** 280251875Speter * Get the imploded time in the platforms native format. 281251875Speter * @param ostime the native time format 282251875Speter * @param aprtime the time to convert 283251875Speter */ 284251875SpeterAPR_DECLARE(apr_status_t) apr_os_imp_time_get(apr_os_imp_time_t **ostime, 285251875Speter apr_time_t *aprtime); 286251875Speter 287251875Speter/** 288251875Speter * convert the shm from apr type to os specific type. 289251875Speter * @param osshm The os specific shm representation 290251875Speter * @param shm The apr shm to convert. 291251875Speter */ 292251875SpeterAPR_DECLARE(apr_status_t) apr_os_shm_get(apr_os_shm_t *osshm, 293251875Speter apr_shm_t *shm); 294251875Speter 295251875Speter#if APR_HAS_THREADS || defined(DOXYGEN) 296251875Speter/** 297251875Speter * @defgroup apr_os_thread Thread portability Routines 298251875Speter * @{ 299251875Speter */ 300251875Speter/** 301251875Speter * convert the thread to os specific type from apr type. 302251875Speter * @param thethd The apr thread to convert 303251875Speter * @param thd The os specific thread we are converting to 304251875Speter */ 305251875SpeterAPR_DECLARE(apr_status_t) apr_os_thread_get(apr_os_thread_t **thethd, 306251875Speter apr_thread_t *thd); 307251875Speter 308251875Speter/** 309251875Speter * convert the thread private memory key to os specific type from an apr type. 310251875Speter * @param thekey The apr handle we are converting from. 311251875Speter * @param key The os specific handle we are converting to. 312251875Speter */ 313251875SpeterAPR_DECLARE(apr_status_t) apr_os_threadkey_get(apr_os_threadkey_t *thekey, 314251875Speter apr_threadkey_t *key); 315251875Speter 316251875Speter/** 317251875Speter * convert the thread from os specific type to apr type. 318251875Speter * @param thd The apr thread we are converting to. 319251875Speter * @param thethd The os specific thread to convert 320251875Speter * @param cont The pool to use if it is needed. 321251875Speter */ 322251875SpeterAPR_DECLARE(apr_status_t) apr_os_thread_put(apr_thread_t **thd, 323251875Speter apr_os_thread_t *thethd, 324251875Speter apr_pool_t *cont); 325251875Speter 326251875Speter/** 327251875Speter * convert the thread private memory key from os specific type to apr type. 328251875Speter * @param key The apr handle we are converting to. 329251875Speter * @param thekey The os specific handle to convert 330251875Speter * @param cont The pool to use if it is needed. 331251875Speter */ 332251875SpeterAPR_DECLARE(apr_status_t) apr_os_threadkey_put(apr_threadkey_t **key, 333251875Speter apr_os_threadkey_t *thekey, 334251875Speter apr_pool_t *cont); 335251875Speter/** 336251875Speter * Get the thread ID 337251875Speter */ 338251875SpeterAPR_DECLARE(apr_os_thread_t) apr_os_thread_current(void); 339251875Speter 340251875Speter/** 341251875Speter * Compare two thread id's 342251875Speter * @param tid1 1st Thread ID to compare 343251875Speter * @param tid2 2nd Thread ID to compare 344251875Speter * @return non-zero if the two threads are equal, zero otherwise 345251875Speter */ 346251875SpeterAPR_DECLARE(int) apr_os_thread_equal(apr_os_thread_t tid1, 347251875Speter apr_os_thread_t tid2); 348251875Speter 349251875Speter/** @} */ 350251875Speter#endif /* APR_HAS_THREADS */ 351251875Speter 352251875Speter/** 353251875Speter * convert the file from os specific type to apr type. 354251875Speter * @param file The apr file we are converting to. 355251875Speter * @param thefile The os specific file to convert 356251875Speter * @param flags The flags that were used to open this file. 357251875Speter * @param cont The pool to use if it is needed. 358251875Speter * @remark On Unix, it is only possible to put a file descriptor into 359251875Speter * an apr file type. 360251875Speter */ 361251875SpeterAPR_DECLARE(apr_status_t) apr_os_file_put(apr_file_t **file, 362251875Speter apr_os_file_t *thefile, 363251875Speter apr_int32_t flags, apr_pool_t *cont); 364251875Speter 365251875Speter/** 366251875Speter * convert the file from os specific type to apr type. 367251875Speter * @param file The apr file we are converting to. 368251875Speter * @param thefile The os specific pipe to convert 369251875Speter * @param cont The pool to use if it is needed. 370251875Speter * @remark On Unix, it is only possible to put a file descriptor into 371251875Speter * an apr file type. 372251875Speter */ 373251875SpeterAPR_DECLARE(apr_status_t) apr_os_pipe_put(apr_file_t **file, 374251875Speter apr_os_file_t *thefile, 375251875Speter apr_pool_t *cont); 376251875Speter 377251875Speter/** 378251875Speter * convert the file from os specific type to apr type. 379251875Speter * @param file The apr file we are converting to. 380251875Speter * @param thefile The os specific pipe to convert 381251875Speter * @param register_cleanup A cleanup will be registered on the apr_file_t 382251875Speter * to issue apr_file_close(). 383251875Speter * @param cont The pool to use if it is needed. 384251875Speter * @remark On Unix, it is only possible to put a file descriptor into 385251875Speter * an apr file type. 386251875Speter */ 387251875SpeterAPR_DECLARE(apr_status_t) apr_os_pipe_put_ex(apr_file_t **file, 388251875Speter apr_os_file_t *thefile, 389251875Speter int register_cleanup, 390251875Speter apr_pool_t *cont); 391251875Speter 392251875Speter/** 393251875Speter * convert the dir from os specific type to apr type. 394251875Speter * @param dir The apr dir we are converting to. 395251875Speter * @param thedir The os specific dir to convert 396251875Speter * @param cont The pool to use when creating to apr directory. 397251875Speter */ 398251875SpeterAPR_DECLARE(apr_status_t) apr_os_dir_put(apr_dir_t **dir, 399251875Speter apr_os_dir_t *thedir, 400251875Speter apr_pool_t *cont); 401251875Speter 402251875Speter/** 403362181Sdim * Convert a socket from the os specific type to the APR type. If 404362181Sdim * sock points to NULL, a socket will be created from the pool 405362181Sdim * provided. If **sock does not point to NULL, the structure pointed 406362181Sdim * to by sock will be reused and updated with the given socket. 407251875Speter * @param sock The pool to use. 408251875Speter * @param thesock The socket to convert to. 409251875Speter * @param cont The socket we are converting to an apr type. 410251875Speter * @remark If it is a true socket, it is best to call apr_os_sock_make() 411251875Speter * and provide APR with more information about the socket. 412251875Speter */ 413251875SpeterAPR_DECLARE(apr_status_t) apr_os_sock_put(apr_socket_t **sock, 414251875Speter apr_os_sock_t *thesock, 415251875Speter apr_pool_t *cont); 416251875Speter 417251875Speter/** 418251875Speter * Create a socket from an existing descriptor and local and remote 419251875Speter * socket addresses. 420251875Speter * @param apr_sock The new socket that has been set up 421251875Speter * @param os_sock_info The os representation of the socket handle and 422251875Speter * other characteristics of the socket 423251875Speter * @param cont The pool to use 424251875Speter * @remark If you only know the descriptor/handle or if it isn't really 425251875Speter * a true socket, use apr_os_sock_put() instead. 426251875Speter */ 427251875SpeterAPR_DECLARE(apr_status_t) apr_os_sock_make(apr_socket_t **apr_sock, 428251875Speter apr_os_sock_info_t *os_sock_info, 429251875Speter apr_pool_t *cont); 430251875Speter 431251875Speter/** 432251875Speter * Convert the proc mutex from os specific type to apr type 433251875Speter * @param pmutex The apr proc mutex we are converting to. 434251875Speter * @param ospmutex The os specific proc mutex to convert. 435251875Speter * @param cont The pool to use if it is needed. 436251875Speter */ 437251875SpeterAPR_DECLARE(apr_status_t) apr_os_proc_mutex_put(apr_proc_mutex_t **pmutex, 438251875Speter apr_os_proc_mutex_t *ospmutex, 439251875Speter apr_pool_t *cont); 440251875Speter 441251875Speter/** 442362181Sdim * Convert the proc mutex from os specific type to apr type, using the 443362181Sdim * specified mechanism. 444362181Sdim * @param pmutex The apr proc mutex we are converting to. 445362181Sdim * @param ospmutex The os specific proc mutex to convert. 446362181Sdim * @param mech The apr mutex locking mechanism 447362181Sdim * @param register_cleanup Whether to destroy the os mutex with the apr 448362181Sdim * one (either on explicit destroy or pool cleanup). 449362181Sdim * @param cont The pool to use if it is needed. 450362181Sdim * @remark Allows for disambiguation for platforms with multiple mechanisms 451362181Sdim * available. 452362181Sdim */ 453362181SdimAPR_DECLARE(apr_status_t) apr_os_proc_mutex_put_ex(apr_proc_mutex_t **pmutex, 454362181Sdim apr_os_proc_mutex_t *ospmutex, 455362181Sdim apr_lockmech_e mech, 456362181Sdim int register_cleanup, 457362181Sdim apr_pool_t *cont); 458362181Sdim 459362181Sdim/** 460251875Speter * Put the imploded time in the APR format. 461251875Speter * @param aprtime the APR time format 462251875Speter * @param ostime the time to convert 463251875Speter * @param cont the pool to use if necessary 464251875Speter */ 465251875SpeterAPR_DECLARE(apr_status_t) apr_os_imp_time_put(apr_time_t *aprtime, 466251875Speter apr_os_imp_time_t **ostime, 467251875Speter apr_pool_t *cont); 468251875Speter 469251875Speter/** 470251875Speter * Put the exploded time in the APR format. 471251875Speter * @param aprtime the APR time format 472251875Speter * @param ostime the time to convert 473251875Speter * @param cont the pool to use if necessary 474251875Speter */ 475251875SpeterAPR_DECLARE(apr_status_t) apr_os_exp_time_put(apr_time_exp_t *aprtime, 476251875Speter apr_os_exp_time_t **ostime, 477251875Speter apr_pool_t *cont); 478251875Speter 479251875Speter/** 480251875Speter * convert the shared memory from os specific type to apr type. 481251875Speter * @param shm The apr shm representation of osshm 482251875Speter * @param osshm The os specific shm identity 483251875Speter * @param cont The pool to use if it is needed. 484251875Speter * @remark On fork()ed architectures, this is typically nothing more than 485251875Speter * the memory block mapped. On non-fork architectures, this is typically 486251875Speter * some internal handle to pass the mapping from process to process. 487251875Speter */ 488251875SpeterAPR_DECLARE(apr_status_t) apr_os_shm_put(apr_shm_t **shm, 489251875Speter apr_os_shm_t *osshm, 490251875Speter apr_pool_t *cont); 491251875Speter 492251875Speter 493251875Speter#if APR_HAS_DSO || defined(DOXYGEN) 494251875Speter/** 495251875Speter * @defgroup apr_os_dso DSO (Dynamic Loading) Portability Routines 496251875Speter * @{ 497251875Speter */ 498251875Speter/** 499251875Speter * convert the dso handle from os specific to apr 500251875Speter * @param dso The apr handle we are converting to 501251875Speter * @param thedso the os specific handle to convert 502251875Speter * @param pool the pool to use if it is needed 503251875Speter */ 504251875SpeterAPR_DECLARE(apr_status_t) apr_os_dso_handle_put(apr_dso_handle_t **dso, 505251875Speter apr_os_dso_handle_t thedso, 506251875Speter apr_pool_t *pool); 507251875Speter 508251875Speter/** 509251875Speter * convert the apr dso handle into an os specific one 510251875Speter * @param aprdso The apr dso handle to convert 511251875Speter * @param dso The os specific dso to return 512251875Speter */ 513251875SpeterAPR_DECLARE(apr_status_t) apr_os_dso_handle_get(apr_os_dso_handle_t *dso, 514251875Speter apr_dso_handle_t *aprdso); 515251875Speter 516251875Speter/** @} */ 517251875Speter#endif /* APR_HAS_DSO */ 518251875Speter 519251875Speter 520251875Speter#if APR_HAS_OS_UUID 521251875Speter/** 522251875Speter * Private: apr-util's apr_uuid module when supported by the platform 523251875Speter */ 524251875SpeterAPR_DECLARE(apr_status_t) apr_os_uuid_get(unsigned char *uuid_data); 525251875Speter#endif 526251875Speter 527251875Speter 528251875Speter/** 529251875Speter * Get the name of the system default character set. 530251875Speter * @param pool the pool to allocate the name from, if needed 531251875Speter */ 532251875SpeterAPR_DECLARE(const char*) apr_os_default_encoding(apr_pool_t *pool); 533251875Speter 534251875Speter 535251875Speter/** 536251875Speter * Get the name of the current locale character set. 537251875Speter * @param pool the pool to allocate the name from, if needed 538362181Sdim * @remark Defers to apr_os_default_encoding() if the current locale's 539251875Speter * data can't be retrieved on this system. 540251875Speter */ 541251875SpeterAPR_DECLARE(const char*) apr_os_locale_encoding(apr_pool_t *pool); 542251875Speter 543251875Speter/** @} */ 544251875Speter 545251875Speter#ifdef __cplusplus 546251875Speter} 547251875Speter#endif 548251875Speter 549251875Speter#endif /* ! APR_PORTABLE_H */ 550