Added insmod support for ARM, and lsmod support for older kernels,
thanks to Alcove, Julien Gaulmin <julien.gaulmin@alcove.fr> and
Nicolas Ferre <nicolas.ferre@alcove.fr>.
-Erik
diff --git a/lsmod.c b/lsmod.c
index ab4726b..6fe505b 100644
--- a/lsmod.c
+++ b/lsmod.c
@@ -5,6 +5,10 @@
* Copyright (C) 1999,2000 by Lineo, inc.
* Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
*
+ * Modified by Alcove, Julien Gaulmin <julien.gaulmin@alcove.fr> and
+ * Nicolas Ferre <nicolas.ferre@alcove.fr> to support pre 2.1 kernels
+ * (which lack the query_module() interface).
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -32,9 +36,16 @@
#include <assert.h>
#include <getopt.h>
#include <sys/utsname.h>
+#include <sys/file.h>
+#if !defined(BB_FEATURE_LSMOD_NEW_KERNEL) && !defined(BB_FEATURE_LSMOD_OLD_KERNEL)
+#error "Must have ether BB_FEATURE_LSMOD_NEW_KERNEL or BB_FEATURE_LSMOD_OLD_KERNEL defined"
+#endif
+
+#ifdef BB_FEATURE_LSMOD_NEW_KERNEL
+
struct module_info
{
unsigned long addr;
@@ -120,3 +131,30 @@
return( 0);
}
+
+#else /*BB_FEATURE_LSMOD_OLD_KERNEL*/
+
+#if ! defined BB_FEATURE_USE_PROCFS
+#error Sorry, I depend on the /proc filesystem right now.
+#endif
+
+extern int lsmod_main(int argc, char **argv)
+{
+ int fd, i;
+ char line[128];
+
+ puts("Module Size Used by");
+ fflush(stdout);
+
+ if ((fd = open("/proc/modules", O_RDONLY)) >= 0 ) {
+ while ((i = read(fd, line, sizeof(line))) > 0) {
+ write(fileno(stdout), line, i);
+ }
+ close(fd);
+ return 0;
+ }
+ fatalError("/proc/modules: %s\n", strerror(errno));
+ return 1;
+}
+
+#endif /*BB_FEATURE_LSMOD_OLD_KERNEL*/