]>
git.ipfire.org Git - thirdparty/kmod.git/blob - tools/kmod.c
2 * kmod - one tool to rule them all
4 * Copyright (C) 2011 ProFUSION embedded systems
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
28 static const char options_s
[] = "+hV";
29 static const struct option options
[] = {
30 { "help", no_argument
, NULL
, 'h' },
31 { "version", no_argument
, NULL
, 'V' },
35 static const struct kmod_cmd kmod_cmd_help
;
37 static const struct kmod_cmd
*kmod_cmds
[] = {
42 static const struct kmod_cmd
*kmod_compat_cmds
[] = {
43 &kmod_cmd_compat_lsmod
,
44 &kmod_cmd_compat_rmmod
,
45 &kmod_cmd_compat_insmod
,
46 &kmod_cmd_compat_modinfo
,
47 &kmod_cmd_compat_modprobe
,
48 &kmod_cmd_compat_depmod
,
51 static int kmod_help(int argc
, char *argv
[])
55 printf("kmod - Manage kernel modules: list, load, unload, etc\n"
57 "\t%s [options] command [command_options]\n\n"
59 "\t-V, --version show version\n"
60 "\t-h, --help show this help\n\n"
61 "Commands:\n", basename(argv
[0]));
63 for (i
= 0; i
< ARRAY_SIZE(kmod_cmds
); i
++) {
64 if (kmod_cmds
[i
]->help
!= NULL
) {
65 printf(" %-12s %s\n", kmod_cmds
[i
]->name
,
70 puts("\nkmod also handles gracefully if called from following symlinks:");
72 for (i
= 0; i
< ARRAY_SIZE(kmod_compat_cmds
); i
++) {
73 if (kmod_compat_cmds
[i
]->help
!= NULL
) {
74 printf(" %-12s %s\n", kmod_compat_cmds
[i
]->name
,
75 kmod_compat_cmds
[i
]->help
);
82 static const struct kmod_cmd kmod_cmd_help
= {
85 .help
= "Show help message",
88 static int handle_kmod_commands(int argc
, char *argv
[])
97 c
= getopt_long(argc
, argv
, options_s
, options
, NULL
);
103 kmod_help(argc
, argv
);
106 puts("kmod version " VERSION
);
111 fprintf(stderr
, "Error: unexpected getopt_long() value '%c'.\n", c
);
116 if (optind
>= argc
) {
117 fputs("missing command\n", stderr
);
123 for (i
= 0, err
= -EINVAL
; i
< ARRAY_SIZE(kmod_cmds
); i
++) {
124 if (strcmp(kmod_cmds
[i
]->name
, cmd
) != 0)
127 err
= kmod_cmds
[i
]->cmd(--argc
, ++argv
);
131 fprintf(stderr
, "invalid command '%s'\n", cmd
);
138 kmod_help(argc
, argv
);
143 static int handle_kmod_compat_commands(int argc
, char *argv
[])
148 cmd
= basename(argv
[0]);
150 for (i
= 0; i
< ARRAY_SIZE(kmod_compat_cmds
); i
++) {
151 if (strcmp(kmod_compat_cmds
[i
]->name
, cmd
) == 0)
152 return kmod_compat_cmds
[i
]->cmd(argc
, argv
);
158 int main(int argc
, char *argv
[])
160 const char *binname
= basename(argv
[0]);
163 if (strcmp(binname
, "kmod") == 0)
164 err
= handle_kmod_commands(argc
, argv
);
166 err
= handle_kmod_compat_commands(argc
, argv
);