
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;
}
    
