int loadModule(char * modName) { char * objName; int status; pid_t childpid; objName = alloca(strlen(modName) + 5 + strlen(MODULES_PATH)); strcpy(objName, MODULES_PATH); strcat(objName, modName); strcat(objName, ".o"); if (testing) { messageWindow("Module", "Installing module %s now", modName); return 0; } logMessage("running command: insmod %s", objName); if (!(childpid = fork())) { close(1); close(2); dup2(logfd, 1); dup2(logfd, 2); execl("/bin/insmod", "/bin/insmod", objName, NULL); exit(1); } waitpid(childpid, &status, 0); if (!WIFEXITED(status) || WEXITSTATUS(status)) { logMessage("insmod failed!"); return 1; } return 0; }