152 lines
4.4 KiB
Diff
152 lines
4.4 KiB
Diff
|
|
From: Chris Renshaw <osm0sis@outlook.com>
|
||
|
|
Date: Mon, 12 Sep 2016 16:25:51 -0300
|
||
|
|
Subject: [PATCH] modinfo/modprobe: use ifdef block for android without-utsrel modules path
|
||
|
|
|
||
|
|
and fixes the modules.dep requirement, it is now optional...
|
||
|
|
|
||
|
|
Patch by Tanguy Pruvot <tanguy.pruvot@gmail.com>
|
||
|
|
Change-Id: Ifccb530fa23b021fd12e2395f5d0c66600b25c04
|
||
|
|
from https://github.com/tpruvot/android_external_busybox
|
||
|
|
|
||
|
|
and commit 2df42d3971f1e260e67c3fa4831cb9195fb276c4
|
||
|
|
from https://github.com/tpruvot/android_external_busybox
|
||
|
|
|
||
|
|
Rebased for busybox 1.25.0 by Chris Renshaw <osm0sis@outlook.com>
|
||
|
|
---
|
||
|
|
modutils/modinfo.c | 33 +++++++++++++++++++++++++++++----
|
||
|
|
modutils/modprobe.c | 18 +++++++++++++++++-
|
||
|
|
2 files changed, 46 insertions(+), 5 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/modutils/modinfo.c b/modutils/modinfo.c
|
||
|
|
index aa641ad..dbc679a 100644
|
||
|
|
--- a/modutils/modinfo.c
|
||
|
|
+++ b/modutils/modinfo.c
|
||
|
|
@@ -21,6 +21,10 @@
|
||
|
|
#include "libbb.h"
|
||
|
|
#include "modutils.h"
|
||
|
|
|
||
|
|
+#if defined(ANDROID) || defined(__ANDROID__)
|
||
|
|
+#define DONT_USE_UTS_REL_FOLDER
|
||
|
|
+#endif
|
||
|
|
+
|
||
|
|
static const char *const shortcuts[] = {
|
||
|
|
"filename", // -n
|
||
|
|
"author", // -a
|
||
|
|
@@ -64,7 +68,7 @@ static void modinfo(const char *path, const char *version,
|
||
|
|
{
|
||
|
|
size_t len;
|
||
|
|
int j;
|
||
|
|
- char *ptr, *the_module;
|
||
|
|
+ char *ptr, *fullpath, *the_module;
|
||
|
|
char *allocated;
|
||
|
|
int tags = option_mask32;
|
||
|
|
|
||
|
|
@@ -75,8 +79,14 @@ static void modinfo(const char *path, const char *version,
|
||
|
|
if (path[0] == '/')
|
||
|
|
return;
|
||
|
|
/* Newer depmod puts relative paths in modules.dep */
|
||
|
|
- path = allocated = xasprintf("%s/%s/%s", CONFIG_DEFAULT_MODULES_DIR, version, path);
|
||
|
|
- the_module = xmalloc_open_zipped_read_close(path, &len);
|
||
|
|
+ fullpath = allocated = xasprintf("%s/%s/%s", CONFIG_DEFAULT_MODULES_DIR, version, path);
|
||
|
|
+ the_module = xmalloc_open_zipped_read_close(fullpath, &len);
|
||
|
|
+#ifdef DONT_USE_UTS_REL_FOLDER
|
||
|
|
+ if (!the_module) {
|
||
|
|
+ fullpath = allocated = xasprintf("%s/%s", CONFIG_DEFAULT_MODULES_DIR, path);
|
||
|
|
+ the_module = xmalloc_open_zipped_read_close(fullpath, &len);
|
||
|
|
+ }
|
||
|
|
+#endif
|
||
|
|
if (!the_module) {
|
||
|
|
bb_error_msg("module '%s' not found", path);
|
||
|
|
goto ret;
|
||
|
|
@@ -158,9 +168,23 @@ int modinfo_main(int argc UNUSED_PARAM, char **argv)
|
||
|
|
uname(&uts);
|
||
|
|
parser = config_open2(
|
||
|
|
xasprintf("%s/%s/%s", CONFIG_DEFAULT_MODULES_DIR, uts.release, CONFIG_DEFAULT_DEPMOD_FILE),
|
||
|
|
- xfopen_for_read
|
||
|
|
+ fopen_for_read
|
||
|
|
);
|
||
|
|
|
||
|
|
+#ifdef DONT_USE_UTS_REL_FOLDER
|
||
|
|
+ if (!parser) {
|
||
|
|
+ parser = config_open2(
|
||
|
|
+ xasprintf("%s/%s", CONFIG_DEFAULT_MODULES_DIR, CONFIG_DEFAULT_DEPMOD_FILE),
|
||
|
|
+ fopen_for_read
|
||
|
|
+ );
|
||
|
|
+ }
|
||
|
|
+
|
||
|
|
+ if (!parser) {
|
||
|
|
+ strcpy(uts.release,"");
|
||
|
|
+ goto no_modules_dep;
|
||
|
|
+ }
|
||
|
|
+#endif
|
||
|
|
+
|
||
|
|
while (config_read(parser, tokens, 2, 1, "# \t", PARSE_NORMAL)) {
|
||
|
|
colon = last_char_is(tokens[0], ':');
|
||
|
|
if (colon == NULL)
|
||
|
|
@@ -177,6 +201,7 @@ int modinfo_main(int argc UNUSED_PARAM, char **argv)
|
||
|
|
if (ENABLE_FEATURE_CLEAN_UP)
|
||
|
|
config_close(parser);
|
||
|
|
|
||
|
|
+no_modules_dep:
|
||
|
|
for (i = 0; argv[i]; i++) {
|
||
|
|
if (argv[i][0]) {
|
||
|
|
modinfo(argv[i], uts.release, field);
|
||
|
|
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
|
||
|
|
index 8130c40..585de5c 100644
|
||
|
|
--- a/modutils/modprobe.c
|
||
|
|
+++ b/modutils/modprobe.c
|
||
|
|
@@ -150,6 +150,10 @@ static const char modprobe_longopts[] ALIGN1 =
|
||
|
|
#define MODULE_FLAG_FOUND_IN_MODDEP 0x0004
|
||
|
|
#define MODULE_FLAG_BLACKLISTED 0x0008
|
||
|
|
|
||
|
|
+#if defined(ANDROID) || defined(__ANDROID__)
|
||
|
|
+#define DONT_USE_UTS_REL_FOLDER
|
||
|
|
+#endif
|
||
|
|
+
|
||
|
|
struct globals {
|
||
|
|
llist_t *probes; /* MEs of module(s) requested on cmdline */
|
||
|
|
char *cmdline_mopts; /* module options from cmdline */
|
||
|
|
@@ -440,10 +444,17 @@ static int do_modprobe(struct module_entry *m)
|
||
|
|
options = gather_options_str(options, G.cmdline_mopts);
|
||
|
|
|
||
|
|
if (option_mask32 & OPT_SHOW_DEPS) {
|
||
|
|
+#ifndef DONT_USE_UTS_REL_FOLDER
|
||
|
|
printf(options ? "insmod %s/%s/%s %s\n"
|
||
|
|
: "insmod %s/%s/%s\n",
|
||
|
|
CONFIG_DEFAULT_MODULES_DIR, G.uts.release, fn,
|
||
|
|
options);
|
||
|
|
+#else
|
||
|
|
+ printf(options ? "insmod %s/%s %s\n"
|
||
|
|
+ : "insmod %s/%s\n",
|
||
|
|
+ CONFIG_DEFAULT_MODULES_DIR, fn,
|
||
|
|
+ options);
|
||
|
|
+#endif
|
||
|
|
free(options);
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
@@ -525,6 +536,7 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
||
|
|
int rc;
|
||
|
|
unsigned opt;
|
||
|
|
struct module_entry *me;
|
||
|
|
+ struct stat info;
|
||
|
|
|
||
|
|
INIT_G();
|
||
|
|
|
||
|
|
@@ -535,8 +547,12 @@ int modprobe_main(int argc UNUSED_PARAM, char **argv)
|
||
|
|
|
||
|
|
/* Goto modules location */
|
||
|
|
xchdir(CONFIG_DEFAULT_MODULES_DIR);
|
||
|
|
+#ifndef DONT_USE_UTS_REL_FOLDER
|
||
|
|
uname(&G.uts);
|
||
|
|
- xchdir(G.uts.release);
|
||
|
|
+ if (stat(G.uts.release, &info) == 0) {
|
||
|
|
+ xchdir(G.uts.release);
|
||
|
|
+ }
|
||
|
|
+#endif
|
||
|
|
|
||
|
|
if (opt & OPT_LIST_ONLY) {
|
||
|
|
int i;
|
||
|
|
--
|
||
|
|
2.8.3
|
||
|
|
|