diff options
author | Rob Landley <rob@landley.net> | 2012-08-25 14:25:22 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2012-08-25 14:25:22 -0500 |
commit | 3a9241add947cb6d24b5de7a8927517426a78795 (patch) | |
tree | d122ab6570439cd6b17c7d73ed8d4e085e0b8a95 /toys/modinfo.c | |
parent | 689f095bc976417bf50810fe59a3b3ac32b21105 (diff) | |
download | toybox-3a9241add947cb6d24b5de7a8927517426a78795.tar.gz |
Move commands into "posix", "lsb", and "other" menus/directories.
Diffstat (limited to 'toys/modinfo.c')
-rw-r--r-- | toys/modinfo.c | 103 |
1 files changed, 0 insertions, 103 deletions
diff --git a/toys/modinfo.c b/toys/modinfo.c deleted file mode 100644 index c878fc4e..00000000 --- a/toys/modinfo.c +++ /dev/null @@ -1,103 +0,0 @@ -/* vi: set sw=4 ts=4: - * - * modinfo.c - Display module info - * - * Copyright 2012 Andre Renaud <andre@bluewatersys.com> - * - -USE_MODINFO(NEWTOY(modinfo, "<1F:0", TOYFLAG_BIN)) - -config MODINFO - bool "modinfo" - default y - help - usage: modinfo [-0] [-F field] [modulename...] -*/ - -#include "toys.h" - -#define FLAG_0 (1 << 0) - -DEFINE_GLOBALS( - char *field; -) -#define TT this.modinfo - -static const char *modinfo_tags[] = { - "alias", "license", "description", "author", "vermagic", - "srcversion", "intree", "parm", "depends", -}; - -static void output_field(const char *field, const char *value) -{ - int len; - - if (TT.field && strcmp(TT.field, field) != 0) - return; - - len = strlen(field); - - if (TT.field) - xprintf("%s", value); - else - xprintf("%s:%*s%s", - field, 15 - len, "", value); - if (toys.optflags & FLAG_0) - xwrite(fileno(stdout), "\0", 1); - else - xputs(""); -} - - -static void modinfo_file(struct dirtree *dir) -{ - int fd, len, i; - char *buf, *pos; - char *full_name; - - full_name = dirtree_path(dir, NULL); - - output_field("filename", full_name); - fd = xopen(full_name, O_RDONLY); - len = fdlength(fd); - buf = xmalloc(len); - xreadall(fd, buf, len); - - for (pos = buf; pos < buf + len + 10; pos++) { - if (*pos) - continue; - - for (i = 0; i < sizeof(modinfo_tags) / sizeof(modinfo_tags[0]); i++) { - const char *str = modinfo_tags[i]; - int len = strlen(str); - if (strncmp(pos + 1, str, len) == 0 && pos[len + 1] == '=') - output_field(str, &pos[len + 2]); - } - } - - free(full_name); - free(buf); - close(fd); -} - -static int check_module(struct dirtree *new) -{ - if (S_ISREG(new->st.st_mode)) { - char **s; - for (s = toys.optargs; *s; s++) { - int len = strlen(*s); - if (!strncmp(*s, new->name, len) && !strcmp(new->name+len, ".ko")) - modinfo_file(new); - } - } - - return dirtree_notdotdot(new); -} - -void modinfo_main(void) -{ - struct utsname uts; - if (uname(&uts) < 0) perror_exit("bad uname"); - sprintf(toybuf, "/lib/modules/%s", uts.release); - dirtree_read(toybuf, check_module); -} |