mirror of
https://github.com/XaverKlemenschits/jupyter-c-kernel.git
synced 2025-04-16 19:36:08 +00:00
32 lines
884 B
C
32 lines
884 B
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <dlfcn.h>
|
|
|
|
typedef int (*main_t)(int, char **, char **);
|
|
|
|
int main(int argc, char **argv, char **envp)
|
|
{
|
|
char *error = NULL;
|
|
|
|
setbuf(stdout, NULL);
|
|
setbuf(stderr, NULL);
|
|
if (argc < 2) {
|
|
fprintf(stderr, "USAGE: %s PROGRAM\nWhere PROGRAM is the user's program to supervise\n", argv[0]);
|
|
return EXIT_FAILURE;
|
|
}
|
|
void *userhandle = dlopen(argv[1], RTLD_LAZY);
|
|
if (userhandle == NULL) {
|
|
fprintf(stderr, "%s: %s\n", argv[0], dlerror());
|
|
return EXIT_FAILURE;
|
|
}
|
|
dlerror();
|
|
main_t usermain = dlsym(userhandle, "main");
|
|
if ((error = dlerror()) != NULL) {
|
|
fprintf(stderr, "%s: %s\n", argv[0], error);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
/* Call Users main, but make master.c invisible by removing first argument */
|
|
return usermain(argc-1, argv+1, envp);
|
|
}
|