ubase/lsmod.c

68 lines
1.3 KiB
C
Raw Normal View History

2013-08-09 05:23:40 -04:00
/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
2014-06-30 14:03:41 -04:00
2014-06-14 08:13:10 -04:00
#include "text.h"
2013-08-09 05:23:40 -04:00
#include "util.h"
static void parse_modline(char *buf, char **name, char **size,
char **refcount, char **users);
static void
usage(void)
{
eprintf("usage: %s\n", argv0);
}
int
main(int argc, char *argv[])
{
const char *modfile = "/proc/modules";
FILE *fp;
2014-06-14 08:13:10 -04:00
char *buf = NULL;
2013-08-09 05:23:40 -04:00
char *name, *size, *refcount, *users;
2014-06-14 08:13:10 -04:00
size_t bufsize = 0;
2013-08-09 05:23:40 -04:00
size_t len;
ARGBEGIN {
default:
usage();
} ARGEND;
if (argc > 0)
usage();
fp = fopen(modfile, "r");
if (!fp)
eprintf("fopen %s:", modfile);
printf("%-23s Size Used by\n", "Module");
2014-06-14 08:13:10 -04:00
while (agetline(&buf, &bufsize, fp) != -1) {
2013-08-09 05:23:40 -04:00
parse_modline(buf, &name, &size, &refcount, &users);
if (!name || !size || !refcount || !users)
eprintf("invalid format: %s\n", modfile);
2013-08-09 05:23:40 -04:00
len = strlen(users) - 1;
if (users[len] == ',' || users[len] == '-')
users[len] = '\0';
printf("%-20s%8s%3s %s\n", name, size, refcount,
users);
}
2013-09-05 04:53:39 -04:00
if (ferror(fp))
eprintf("%s: read error:", modfile);
2014-06-14 08:13:10 -04:00
free(buf);
2013-08-09 05:23:40 -04:00
fclose(fp);
2014-10-02 18:45:25 -04:00
return 0;
2013-08-09 05:23:40 -04:00
}
static void
parse_modline(char *buf, char **name, char **size,
char **refcount, char **users)
{
*name = strtok(buf, " ");
*size = strtok(NULL, " ");
*refcount = strtok(NULL, " ");
*users = strtok(NULL, " ");
}