Show
Ignore:
Timestamp:
01/26/08 20:48:28 (10 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1201380508 +0000
git-parent:

[2c65def60e6630d515d47a2135e89e7961c4c5b9]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1201380508 +0000
Message:

glue up some actual XML

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/noit_module.c

    r0268e62 rcaa7b86  
    55 
    66#include "noit_defines.h" 
     7 
     8#include <stdio.h> 
     9#include <dlfcn.h> 
     10 
    711#include "noit_module.h" 
     12#include "noit_conf.h" 
    813#include "utils/noit_hash.h" 
     14#include "utils/noit_log.h" 
    915 
    1016static noit_hash_table modules = NOIT_HASH_EMPTY; 
    1117 
    1218int noit_module_load(const char *file, const char *name) { 
     19  char module_file[PATH_MAX]; 
     20  char *base; 
     21  void *dlhandle; 
     22  void *dlsymbol; 
     23  noit_module_t *module; 
     24 
     25  if(!noit_conf_get_string("/global/modules/directory", &base)) 
     26    base = strdup(""); 
     27 
     28  if(file[0] == '/') 
     29    strlcpy(module_file, file, sizeof(module_file)); 
     30  else 
     31    snprintf(module_file, sizeof(module_file), "%s/%s.%s", 
     32             base, name, MODULEEXT); 
     33  free(base); 
     34 
     35  dlhandle = dlopen(module_file, RTLD_LAZY | RTLD_GLOBAL); 
     36  if(!dlhandle) { 
     37    noit_log(noit_stderr, NULL, "Cannot open image '%s': %s\n", 
     38             module_file, dlerror()); 
     39    return -1; 
     40  } 
     41 
     42  dlsymbol = dlsym(dlhandle, name); 
     43  if(!dlsymbol) { 
     44    noit_log(noit_stderr, NULL, "Cannot find '%s' in image '%s': %s\n", 
     45             name, module_file, dlerror()); 
     46    dlclose(dlhandle); 
     47    return -1; 
     48  } 
     49 
     50  module = (noit_module_t *)dlsymbol; 
     51  if(noit_module_validate_magic(module) == -1) { 
     52    noit_log(noit_stderr, NULL, "I can't understand module %s\n", name); 
     53    dlclose(dlhandle); 
     54    return -1; 
     55  } 
     56 
     57  noit_hash_store(&modules, module->name, strlen(module->name), module); 
     58  return 0; 
    1359} 
     60 
    1461noit_module_t * noit_module_lookup(const char *name) { 
    1562  noit_module_t *module;