#include <stdio.h> | |
#include <string.h> | |
#include <fcntl.h> | |
#include <unistd.h> | |
#include <malloc.h> | |
#include <errno.h> | |
#include <asm/unistd.h> | |
extern int delete_module(const char *, unsigned int); | |
int rmmod_main(int argc, char **argv) | |
{ | |
int ret; | |
char *modname, *dot; | |
/* make sure we've got an argument */ | |
if (argc < 2) { | |
fprintf(stderr, "usage: rmmod <module>\n"); | |
return -1; | |
} | |
/* if given /foo/bar/blah.ko, make a weak attempt | |
* to convert to "blah", just for convenience | |
*/ | |
modname = strrchr(argv[1], '/'); | |
if (!modname) | |
modname = argv[1]; | |
dot = strchr(argv[1], '.'); | |
if (dot) | |
*dot = '\0'; | |
/* pass it to the kernel */ | |
ret = delete_module(modname, O_NONBLOCK | O_EXCL); | |
if (ret != 0) { | |
fprintf(stderr, "rmmod: delete_module '%s' failed (errno %d)\n", | |
modname, errno); | |
return -1; | |
} | |
return 0; | |
} | |