New try, with asprintf_nofail() and filename2modname().

Not sure what you mean with taking modprobe -b in account though.

As for modprobe -S, shouldn't lsmod simply list the current state of the
system, which implies only looking at /lib/modules/`uname -r`?

>From 543ba3d78f5fd4986a30130c60e8d3fd15d57758 Mon Sep 17 00:00:00 2001
From: Andreas Robinson <[email protected]>
Date: Thu, 10 Sep 2009 19:39:55 +0200
Subject: [PATCH] lsmod: print built-in modules

Signed-off-by: Andreas Robinson <[email protected]>
---
 lsmod.c |   24 +++++++++++++++++++++++-
 1 files changed, 23 insertions(+), 1 deletions(-)

diff --git a/lsmod.c b/lsmod.c
index 1fd2ec4..aa4074a 100644
--- a/lsmod.c
+++ b/lsmod.c
@@ -15,6 +15,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -26,7 +27,11 @@
 #include <errno.h>
 #include <ctype.h>
 #include <asm/unistd.h>
+#include <limits.h>
+#include <sys/utsname.h>
 
+#include "util.h"
+#include "logging.h"
 #include "testing.h"
 
 static void print_usage(const char *progname)
@@ -37,19 +42,36 @@ static void print_usage(const char *progname)
 
 int main(int argc, char *argv[])
 {
+       char *fname;
+       struct utsname buf;
        char line[4096];
        FILE *file;
 
        if (argc != 1)
                print_usage("lsmod");
 
+       printf("Module                  Size  Used by\n");
+
+       uname(&buf);
+       nofail_asprintf(&fname, "/lib/modules/%s/modules.builtin", buf.release);
+       file = fopen(fname, "r");
+       if (!file && errno != ENOENT)
+               fprintf(stderr, "Opening %s: %s\n", fname, strerror(errno));
+       if (file) {
+               while (fgets(line, sizeof(line), file)) {
+                       filename2modname(line, line);
+                       printf("%-19s        -  - [builtin]\n", line);
+               }
+               fclose(file);
+       }
+       free(fname);
+
        file = fopen("/proc/modules", "r");
        if (!file) {
                perror("Opening /proc/modules");
                exit(1);
        }
 
-       printf("Module                  Size  Used by\n");
        while (fgets(line, sizeof(line), file)) {
                char *tok;
 
-- 
1.6.0.4


--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to