File: module.c

package info (click to toggle)
netatalk 3.1.12~ds-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 14,756 kB
  • sloc: ansic: 104,976; sh: 8,247; xml: 7,394; perl: 1,936; makefile: 1,430; python: 1,342; yacc: 309; lex: 49
file content (71 lines) | stat: -rw-r--r-- 1,345 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
 */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */

#include <stdlib.h>
#include <string.h>
#include <atalk/util.h>

#ifndef HAVE_DLFCN_H
#ifdef MACOSX_SERVER
#include <mach-o/dyld.h>

void *mod_open(const char *path)
{
  NSObjectFileImage file;

  if (NSCreateObjectFileImageFromFile(path, &file) != 
      NSObjectFileImageSuccess)
    return NULL;
  return NSLinkModule(file, path, TRUE);
}

void *mod_symbol(void *module, const char *name)
{
   NSSymbol symbol;
   char *underscore;

   if ((underscore = (char *) malloc(strlen(name) + 2)) == NULL)
     return NULL;
   strcpy(underscore, "_");
   strcat(underscore, name);
   symbol = NSLookupAndBindSymbol(underscore);
   free(underscore);

   return NSAddressOfSymbol(symbol);
}

void mod_close(void *module)
{
  NSUnLinkModule(module, FALSE);
}
#endif /* MACOSX_SERVER */

#else /* HAVE_DLFCN_H */

#include <dlfcn.h>

#ifdef DLSYM_PREPEND_UNDERSCORE
void *mod_symbol(void *module, const char *name)
{
   void *symbol;
   char *underscore;

   if (!module)
     return NULL;

   if ((underscore = (char *) malloc(strlen(name) + 2)) == NULL)
     return NULL;

   strcpy(underscore, "_");
   strcat(underscore, name);
   symbol = dlsym(module, underscore);
   free(underscore);

   return symbol;
}
#endif /* DLSYM_PREPEND_UNDERSCORE */
#endif /* HAVE_DLFCN_H */