af-wall/external/dist/busybox-patches/026-modinfo-modprobe-without-utsrel.patch

152 lines
4.4 KiB
Diff
Raw Permalink Normal View History

2025-11-20 14:05:38 +01:00
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