The Pedigree Project 0.1
modunload/main.c
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include <dirent.h>
21#include <libgen.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25
26extern void pedigree_module_unload(char* name);
27extern int pedigree_module_is_loaded(char* name);
28extern int pedigree_module_get_depending(char* name, char* buf, size_t bufsz);
29int unload_module(char* name);
30
31int unload_module(char* name) {
32 if (!pedigree_module_is_loaded(name)) {
33 printf("Module %s isn't loaded!\n", name);
34 return -1;
35 }
36 printf("Module %s being unloaded...\n", name);
37
38 // First unload all dependencies
39 char* dep = (char*)malloc(256);
40 while (pedigree_module_get_depending(name, dep, 256)) {
41 if (unload_module(dep) == -1)
42 return -1;
43 }
44 free(dep);
45 // Finally unload the module
46 pedigree_module_unload(name);
47 if (!pedigree_module_is_loaded(name))
48 return 0;
49 printf("Module %s couldn't been unloaded\n", name);
50 return -1;
51}
52
53int main(int argc, char** argv) {
54 if (argc < 2) {
55 printf("Usage: %s <module name>\n", argv[0]);
56 return 0;
57 } else
58 return unload_module(argv[1]);
59}