aboutsummaryrefslogtreecommitdiffstats
path: root/cygwin/cygloader.c
blob: 0d48c0f6cbc153b9ef6f7237e42cbf5348767263 (plain)
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
#include <unistd.h>
#include <dlfcn.h>
#include <stdio.h>

#define OK					0
#define MODULE_NOT_FOUND			1
#define INVALID_NUMBER_ARGUMENTS	2

int main(int argc, char **argv) {
	/* Asterisk entry point */
	char* error = NULL;
	int (*ast_main)(int argc, char **argv);

	void *handle = dlopen ("asterisk.dll", RTLD_GLOBAL);
	if (handle == NULL) {
		fputs (dlerror(), stderr);
		fputs ("\r\n", stderr);
		return MODULE_NOT_FOUND;
	}
	printf("\r\nAsterisk module loaded successfully");
	ast_main = dlsym(handle, "main");
		if ((error = dlerror()) != NULL) {
			fputs("Asterisk main not found", stderr);
			fputs(error, stderr);
			exit(1);
		}
	printf("\r\nAsterisk entry point found");
	/* run asterisk main */
	(*ast_main)(argc, argv);
	dlclose(handle);
	printf("\r\nAsterisk stopped");
	return OK;
}