source: MondoRescue/branches/3.3/mindi-busybox/modutils/rmmod.c@ 3865

Last change on this file since 3865 was 3621, checked in by Bruno Cornec, 10 years ago

New 3?3 banch for incorporation of latest busybox 1.25. Changing minor version to handle potential incompatibilities.

File size: 1.8 KB
RevLine 
[821]1/* vi: set sw=4 ts=4: */
2/*
3 * Mini rmmod implementation for busybox
4 *
5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
[2725]6 * Copyright (C) 2008 Timo Teras <timo.teras@iki.fi>
[821]7 *
[2725]8 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
[821]9 */
10
[3232]11//applet:IF_RMMOD(APPLET(rmmod, BB_DIR_SBIN, BB_SUID_DROP))
[821]12
[2725]13//usage:#if !ENABLE_MODPROBE_SMALL
14//usage:#define rmmod_trivial_usage
15//usage: "[-wfa] [MODULE]..."
16//usage:#define rmmod_full_usage "\n\n"
17//usage: "Unload kernel modules\n"
18//usage: "\n -w Wait until the module is no longer used"
19//usage: "\n -f Force unload"
20//usage: "\n -a Remove all unused modules (recursively)"
21//usage:#define rmmod_example_usage
22//usage: "$ rmmod tulip\n"
23//usage:#endif
[821]24
[2725]25#include "libbb.h"
26#include "modutils.h"
[1765]27
[2725]28int rmmod_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
29int rmmod_main(int argc UNUSED_PARAM, char **argv)
[821]30{
[3621]31 int n, err;
[2725]32 unsigned flags = O_NONBLOCK | O_EXCL;
[821]33
34 /* Parse command line. */
[2725]35 n = getopt32(argv, "wfas"); // -s ignored
36 argv += optind;
37 if (n & 1) // --wait
[821]38 flags &= ~O_NONBLOCK;
[2725]39 if (n & 2) // --force
[821]40 flags |= O_TRUNC;
[1765]41 if (n & 4) {
[821]42 /* Unload _all_ unused modules via NULL delete_module() call */
[3621]43 err = bb_delete_module(NULL, flags);
44 if (err && err != EFAULT)
[2725]45 bb_perror_msg_and_die("rmmod");
[821]46 return EXIT_SUCCESS;
47 }
48
[2725]49 if (!*argv)
[821]50 bb_show_usage();
51
[2725]52 n = ENABLE_FEATURE_2_4_MODULES && get_linux_version_code() < KERNEL_VERSION(2,6,0);
53 while (*argv) {
54 char modname[MODULE_NAME_LEN];
55 const char *bname;
[821]56
[2725]57 bname = bb_basename(*argv++);
58 if (n)
59 safe_strncpy(modname, bname, MODULE_NAME_LEN);
60 else
61 filename2modname(bname, modname);
[3621]62 err = bb_delete_module(modname, flags);
63 if (err)
64 bb_perror_msg_and_die("can't unload module '%s'",
65 modname);
[821]66 }
67
[2725]68 return EXIT_SUCCESS;
[821]69}
Note: See TracBrowser for help on using the repository browser.