⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os.c

📁 apache 安装教程 apache 安装教程
💻 C
字号:
/* 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 will include OS specific functions which are not inlineable. * Any inlineable functions should be defined in os-inline.c instead. */#include "ap_config.h"#include "os.h"/* some linkers complain unless there's at least one function in each * .o file... and extra prototype is for gcc -Wmissing-prototypes */extern void ap_is_not_here(void);void ap_is_not_here(void) {}/* * Insert the DSO emulation code for AIX for releases of AIX prior * to 4.3. Use the native DSO code for 4.3 and later. */#if defined(AIX) && !defined(NO_DL_NEEDED)#if AIX < 430#include "os-aix-dso.c"#endif#endif/* *  Abstraction layer for loading *  Apache modules under run-time via  *  dynamic shared object (DSO) mechanism */#ifdef HAVE_DYLD		/* NeXT/Apple dynamic linker */#include <mach-o/dyld.h>/* * NSUnlinkModule() is a noop in old versions of dyld. * Let's install an error handler to deal with "multiply defined * symbol" runtime errors. */#ifdef DYLD_CANT_UNLOAD#include "httpd.h"#include "http_log.h"ap_private_externvoid undefined_symbol_handler(const char *symbolName){    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, NULL,                 "dyld found undefined symbol: %s\n"                 "Aborting.\n",                 symbolName);    abort();}ap_private_externNSModule multiple_symbol_handler (NSSymbol s, NSModule old, NSModule new){    /*     * Since we can't unload symbols, we're going to run into this     * every time we reload a module. Workaround here is to just     * rebind to the new symbol, and forget about the old one.     * This is crummy, because it's basically a memory leak.     */#ifdef DEBUG    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, NULL,                 "dyld found a multiply defined symbol %s in modules:\n"                 "%s\n%s\n",                 NSNameOfSymbol(s),                 NSNameOfModule(old), NSNameOfModule(new));#endif    return(new);}ap_private_externvoid linkEdit_symbol_handler (NSLinkEditErrors c, int errorNumber,                              const char *fileName, const char *errorString){    ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_EMERG, NULL,                 "dyld errors during link edit for file %s\n%s\n",                 fileName, errorString);    abort();}#endif /* DYLD_CANT_UNLOAD */#endif /* HAVE_DYLD */void ap_os_dso_init(void){#if defined(HAVE_DYLD) && defined(DYLD_CANT_UNLOAD)    NSLinkEditErrorHandlers handlers;    handlers.undefined = undefined_symbol_handler;    handlers.multiple  = multiple_symbol_handler;    handlers.linkEdit  = linkEdit_symbol_handler;    NSInstallLinkEditErrorHandlers(&handlers);#endif}void *ap_os_dso_load(const char *path){#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)    shl_t handle;    handle = shl_load(path, BIND_IMMEDIATE|BIND_VERBOSE, 0L);    return (void *)handle;#elif defined(HAVE_DYLD)    NSObjectFileImage image;    NSModule handle;    if (NSCreateObjectFileImageFromFile(path, &image) !=        NSObjectFileImageSuccess)        return NULL;#if defined(NSLINKMODULE_OPTION_RETURN_ON_ERROR) && defined(NSLINKMODULE_OPTION_NONE)    handle = NSLinkModule(image, path,                          NSLINKMODULE_OPTION_RETURN_ON_ERROR |                          NSLINKMODULE_OPTION_NONE);#else    handle = NSLinkModule(image, path, FALSE);#endif    NSDestroyObjectFileImage(image);    return handle;#elif defined(OSF1) || defined(SEQUENT) ||\    (defined(__FreeBSD_version) && (__FreeBSD_version >= 220000))    return dlopen((char *)path, RTLD_NOW | RTLD_GLOBAL);#else    return dlopen(path, RTLD_NOW | RTLD_GLOBAL);#endif}void ap_os_dso_unload(void *handle){#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)    shl_unload((shl_t)handle);#elif defined(HAVE_DYLD)    NSUnLinkModule(handle,FALSE);#else    dlclose(handle);#endif    return;}void *ap_os_dso_sym(void *handle, const char *symname){#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)    void *symaddr = NULL;    int status;    errno = 0;    status = shl_findsym((shl_t *)&handle, symname, TYPE_PROCEDURE, &symaddr);    if (status == -1 && errno == 0) /* try TYPE_DATA instead */        status = shl_findsym((shl_t *)&handle, symname, TYPE_DATA, &symaddr);    return (status == -1 ? NULL : symaddr);#elif defined(HAVE_DYLD)    NSSymbol symbol;    char *symname2 = (char*)malloc(sizeof(char)*(strlen(symname)+2));    sprintf(symname2, "_%s", symname);    symbol = NSLookupAndBindSymbol(symname2);    free(symname2);    return NSAddressOfSymbol(symbol);#elif defined(DLSYM_NEEDS_UNDERSCORE)    char *symbol = (char*)malloc(sizeof(char)*(strlen(symname)+2));    void *retval;    sprintf(symbol, "_%s", symname);    retval = dlsym(handle, symbol);    free(symbol);    return retval;#elif defined(SEQUENT)    return dlsym(handle, (char *)symname);#else    return dlsym(handle, symname);#endif}const char *ap_os_dso_error(void){#if defined(HPUX) || defined(HPUX10) || defined(HPUX11)    return strerror(errno);#elif defined(HAVE_DYLD)    return NULL;#else    return dlerror();#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -