PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
win32.c
Go to the documentation of this file.
1 /* src/backend/port/dynloader/win32.c */
2 
3 #include "postgres.h"
4 
5 char *dlerror(void);
6 int dlclose(void *handle);
7 void *dlsym(void *handle, const char *symbol);
8 void *dlopen(const char *path, int mode);
9 
10 static char last_dyn_error[512];
11 
12 static void
14 {
15  DWORD err = GetLastError();
16 
17  if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS |
18  FORMAT_MESSAGE_FROM_SYSTEM,
19  NULL,
20  err,
21  MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
23  sizeof(last_dyn_error) - 1,
24  NULL) == 0)
25  {
27  "unknown error %lu", err);
28  }
29 }
30 
31 char *
32 dlerror(void)
33 {
34  if (last_dyn_error[0])
35  return last_dyn_error;
36  else
37  return NULL;
38 }
39 
40 int
41 dlclose(void *handle)
42 {
43  if (!FreeLibrary((HMODULE) handle))
44  {
45  set_dl_error();
46  return 1;
47  }
48  last_dyn_error[0] = 0;
49  return 0;
50 }
51 
52 void *
53 dlsym(void *handle, const char *symbol)
54 {
55  void *ptr;
56 
57  ptr = GetProcAddress((HMODULE) handle, symbol);
58  if (!ptr)
59  {
60  set_dl_error();
61  return NULL;
62  }
63  last_dyn_error[0] = 0;
64  return ptr;
65 }
66 
67 void *
68 dlopen(const char *path, int mode)
69 {
70  HMODULE h;
71  int prevmode;
72 
73  /* Disable popup error messages when loading DLLs */
74  prevmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
75  h = LoadLibrary(path);
76  SetErrorMode(prevmode);
77 
78  if (!h)
79  {
80  set_dl_error();
81  return NULL;
82  }
83  last_dyn_error[0] = 0;
84  return (void *) h;
85 }
char * dlerror(void)
Definition: win32.c:32
int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3
int dlclose(void *handle)
Definition: win32.c:41
void * dlsym(void *handle, const char *symbol)
Definition: win32.c:53
static char last_dyn_error[512]
Definition: win32.c:10
#define NULL
Definition: c.h:229
static void set_dl_error(void)
Definition: win32.c:13
void * dlopen(const char *path, int mode)
Definition: win32.c:68
unsigned char symbol
Definition: api.h:2