Annotation of win32/apache22/include/os.h, revision 1.1

1.1     ! moko        1: /* Licensed to the Apache Software Foundation (ASF) under one or more
        !             2:  * contributor license agreements.  See the NOTICE file distributed with
        !             3:  * this work for additional information regarding copyright ownership.
        !             4:  * The ASF licenses this file to You under the Apache License, Version 2.0
        !             5:  * (the "License"); you may not use this file except in compliance with
        !             6:  * the License.  You may obtain a copy of the License at
        !             7:  *
        !             8:  *     http://www.apache.org/licenses/LICENSE-2.0
        !             9:  *
        !            10:  * Unless required by applicable law or agreed to in writing, software
        !            11:  * distributed under the License is distributed on an "AS IS" BASIS,
        !            12:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        !            13:  * See the License for the specific language governing permissions and
        !            14:  * limitations under the License.
        !            15:  */
        !            16: 
        !            17: /**
        !            18:  * @file win32/os.h
        !            19:  * @brief This file in included in all Apache source code. It contains definitions
        !            20:  * of facilities available on _this_ operating system (HAVE_* macros),
        !            21:  * and prototypes of OS specific functions defined in os.c or os-inline.c
        !            22:  * 
        !            23:  * @defgroup APACHE_OS_WIN32 win32
        !            24:  * @ingroup  APACHE_OS
        !            25:  * @{
        !            26:  */
        !            27: 
        !            28: #ifdef WIN32
        !            29: 
        !            30: #ifndef AP_OS_H
        !            31: #define AP_OS_H
        !            32: /* Delegate windows include to the apr.h header, if USER or GDI declarations
        !            33:  * are required (for a window rather than console application), include
        !            34:  * windows.h prior to any other Apache header files.
        !            35:  */
        !            36: #include "apr_pools.h"
        !            37: 
        !            38: #include <io.h>
        !            39: #include <fcntl.h>
        !            40: 
        !            41: #ifdef _WIN64
        !            42: #define PLATFORM "Win64"
        !            43: #else
        !            44: #define PLATFORM "Win32"
        !            45: #endif
        !            46: 
        !            47: /* going away shortly... */
        !            48: #define HAVE_DRIVE_LETTERS
        !            49: #define HAVE_UNC_PATHS
        !            50: #define CASE_BLIND_FILESYSTEM
        !            51: 
        !            52: #define APACHE_MPM_DIR  "server/mpm/winnt" /* generated on unix */
        !            53: 
        !            54: #include <stddef.h>
        !            55: #include <stdlib.h> /* for exit() */
        !            56: 
        !            57: #ifdef __cplusplus
        !            58: extern "C" {
        !            59: #endif
        !            60: 
        !            61: /* BIG RED WARNING: exit() is mapped to allow us to capture the exit
        !            62:  * status.  This header must only be included from modules linked into
        !            63:  * the ApacheCore.dll - since it's a horrible behavior to exit() from
        !            64:  * any module outside the main() block, and we -will- assume it's a
        !            65:  * fatal error.
        !            66:  */
        !            67: 
        !            68: AP_DECLARE_DATA extern int ap_real_exit_code;
        !            69: 
        !            70: #define exit(status) ((exit)((ap_real_exit_code==2) \
        !            71:                                 ? (ap_real_exit_code = (status)) \
        !            72:                                 : ((ap_real_exit_code = 0), (status))))
        !            73: 
        !            74: #ifdef AP_DECLARE_EXPORT
        !            75: 
        !            76: /* Defined in util_win32.c and available only to the core module for
        !            77:  * win32 MPM design.
        !            78:  */
        !            79: 
        !            80: AP_DECLARE(apr_status_t) ap_os_proc_filepath(char **binpath, apr_pool_t *p);
        !            81: 
        !            82: typedef enum {
        !            83:     AP_DLL_WINBASEAPI = 0,    // kernel32 From WinBase.h
        !            84:     AP_DLL_WINADVAPI = 1,     // advapi32 From WinBase.h
        !            85:     AP_DLL_WINSOCKAPI = 2,    // mswsock  From WinSock.h
        !            86:     AP_DLL_WINSOCK2API = 3,   // ws2_32   From WinSock2.h
        !            87:     AP_DLL_defined = 4        // must define as last idx_ + 1
        !            88: } ap_dlltoken_e;
        !            89: 
        !            90: FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal);
        !            91: 
        !            92: PSECURITY_ATTRIBUTES GetNullACL(void);
        !            93: void CleanNullACL(void *sa);
        !            94: 
        !            95: int set_listeners_noninheritable(apr_pool_t *p);
        !            96: 
        !            97: 
        !            98: #define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
        !            99:     typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
        !           100:     static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
        !           101:     static APR_INLINE rettype ap_winapi_##fn args \
        !           102:     {   if (!ap_winapi_pfn_##fn) \
        !           103:             ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
        !           104:         return (*(ap_winapi_pfn_##fn)) names; }; \
        !           105: 
        !           106: /* Win2K kernel only */
        !           107: AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINADVAPI, BOOL, WINAPI, ChangeServiceConfig2A, 0, (
        !           108:     SC_HANDLE hService, 
        !           109:     DWORD dwInfoLevel, 
        !           110:     LPVOID lpInfo),
        !           111:     (hService, dwInfoLevel, lpInfo));
        !           112: #undef ChangeServiceConfig2
        !           113: #define ChangeServiceConfig2 ap_winapi_ChangeServiceConfig2A
        !           114: 
        !           115: /* WinNT kernel only */
        !           116: AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
        !           117:     IN HANDLE hFile),
        !           118:     (hFile));
        !           119: #undef CancelIo
        !           120: #define CancelIo ap_winapi_CancelIo
        !           121: 
        !           122: /* Win9x kernel only */
        !           123: AP_DECLARE_LATE_DLL_FUNC(AP_DLL_WINBASEAPI, DWORD, WINAPI, RegisterServiceProcess, 0, (
        !           124:     DWORD dwProcessId,
        !           125:     DWORD dwType),
        !           126:     (dwProcessId, dwType));
        !           127: #define RegisterServiceProcess ap_winapi_RegisterServiceProcess
        !           128: 
        !           129: #endif /* def AP_DECLARE_EXPORT */
        !           130: 
        !           131: #ifdef __cplusplus
        !           132: }
        !           133: #endif
        !           134: 
        !           135: #endif  /* ndef AP_OS_H */
        !           136: #endif  /* def WIN32 */
        !           137: /** @} */

E-mail: