os.c revision 2cfdca5be0c69f65b43a888d6d3da846489b8fa5
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding/*
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding * This file will include OS specific functions which are not inlineable.
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding * Any inlineable functions should be defined in os-inline.c instead.
bc8fd1b0b1afdf89b8d28eefa8cd74e26ba97986fielding */
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include "ap_config.h"
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include "os.h"
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingint ap_os_is_path_absolute(const char *file)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return file[0] == '/';
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding/* some linkers complain unless there's at least one function in each
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * .o file... and extra prototype is for gcc -Wmissing-prototypes
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding */
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingextern void ap_is_not_here(void);
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffieldingvoid ap_is_not_here(void) {}
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding/*
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding * Abstraction layer for loading
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding * Apache modules under run-time via
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding * dynamic shared object (DSO) mechanism
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding */
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffieldingvoid ap_os_dso_init(void)
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding{
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding /* Nothing required to be done! */
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffieldingvoid* ap_os_dso_load(const char *path)
64185f9824e42f21ca7b9ae6c004484215c031a7rbb{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return (void*) load_add_on(path);
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding}
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffieldingvoid ap_os_dso_unload(void* handle)
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding unload_add_on((image_id)handle);
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding}
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffieldingvoid *ap_os_dso_sym(void *handle, const char *symname)
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding{
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding void * retval = 0;
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding#if defined(DLSYM_NEEDS_UNDERSCORE)
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding char *symbol = (char*)malloc(sizeof(char)*(strlen(symname)+2));
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding sprintf(symbol, "_%s", symname);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding get_image_symbol((image_id)handle, symbol, B_SYMBOL_TYPE_ANY, (void **)&retval);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding free(symbol);
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding return retval;
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding#endif
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding get_image_symbol((image_id)handle, symname, B_SYMBOL_TYPE_ANY, (void **)&retval);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return retval;
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding}
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffielding
7e79e8fd53348f9fc6e8009a4a2522425ab6f08ffieldingconst char *ap_os_dso_error(void)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return NULL;
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding