Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b054178a authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Lose insmod/lsmod/rmmod to toybox.

Change-Id: Ia654cdca14a4fda958a406f5e6ccd0919ce88a8f
parent 1fc78d3d
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -153,13 +153,11 @@ OUR_TOOLS := \
    id \
    ifconfig \
    iftop \
    insmod \
    ioctl \
    ionice \
    load_policy \
    log \
    ls \
    lsmod \
    lsof \
    md5 \
    mkdir \
@@ -175,7 +173,6 @@ OUR_TOOLS := \
    readlink \
    renice \
    restorecon \
    rmmod \
    route \
    runcon \
    schedtop \

toolbox/insmod.c

deleted100644 → 0
+0 −97
Original line number Diff line number Diff line
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <malloc.h>
#include <errno.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

extern int init_module(void *, unsigned long, const char *);

static void *read_file(const char *filename, ssize_t *_size)
{
	int ret, fd;
	struct stat sb;
	ssize_t size;
	void *buffer = NULL;

	/* open the file */
	fd = open(filename, O_RDONLY);
	if (fd < 0)
		return NULL;

	/* find out how big it is */
	if (fstat(fd, &sb) < 0)
		goto bail;
	size = sb.st_size;

	/* allocate memory for it to be read into */
	buffer = malloc(size);
	if (!buffer)
		goto bail;

	/* slurp it into our buffer */
	ret = read(fd, buffer, size);
	if (ret != size)
		goto bail;

	/* let the caller know how big it is */
	*_size = size;

bail:
	close(fd);
	return buffer;
}

int insmod_main(int argc, char **argv)
{
	void *file;
	ssize_t size = 0;
	char opts[1024];
	int ret;

	/* make sure we've got an argument */
	if (argc < 2) {
		fprintf(stderr, "usage: insmod <module.o>\n");
		return -1;
	}

	/* read the file into memory */
	file = read_file(argv[1], &size);
	if (!file) {
		fprintf(stderr, "insmod: can't open '%s'\n", argv[1]);
		return -1;
	}

	opts[0] = '\0';
	if (argc > 2) {
		int i, len;
		char *end = opts + sizeof(opts) - 1;
		char *ptr = opts;

		for (i = 2; (i < argc) && (ptr < end); i++) {
			len = MIN(strlen(argv[i]), (size_t)(end - ptr));
			memcpy(ptr, argv[i], len);
			ptr += len;
			*ptr++ = ' ';
		}
		*(ptr - 1) = '\0';
	}

	/* pass it to the kernel */
	ret = init_module(file, size, opts);
	if (ret != 0) {
		fprintf(stderr,
                "insmod: init_module '%s' failed (%s)\n",
                argv[1], strerror(errno));
	}

	/* free the file buffer */
	free(file);

	return ret;
}

toolbox/lsmod.c

deleted100644 → 0
+0 −10
Original line number Diff line number Diff line
#include <stdio.h>

extern int cat_main(int argc, char **argv);

int lsmod_main(int argc, char **argv)
{
	char *cat_argv[] = { "cat", "/proc/modules", NULL };
	return cat_main(2, cat_argv);
}

toolbox/rmmod.c

deleted100644 → 0
+0 −53
Original line number Diff line number Diff line
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <malloc.h>
#include <errno.h>
#include <asm/unistd.h>

extern int delete_module(const char *, unsigned int);

int rmmod_main(int argc, char **argv)
{
	int ret, i;
	char *modname, *dot;

	/* make sure we've got an argument */
	if (argc < 2) {
		fprintf(stderr, "usage: rmmod <module>\n");
		return -1;
	}

	/* if given /foo/bar/blah.ko, make a weak attempt
	 * to convert to "blah", just for convenience
	 */
	modname = strrchr(argv[1], '/');
	if (!modname)
		modname = argv[1];
	else modname++;

	dot = strchr(argv[1], '.');
	if (dot)
		*dot = '\0';

	/* Replace "-" with "_". This would keep rmmod
	 * compatible with module-init-tools version of
	 * rmmod
	 */
	for (i = 0; modname[i] != '\0'; i++) {
		if (modname[i] == '-')
			modname[i] = '_';
	}

	/* pass it to the kernel */
	ret = delete_module(modname, O_NONBLOCK | O_EXCL);
	if (ret != 0) {
		fprintf(stderr, "rmmod: delete_module '%s' failed (errno %d)\n",
						modname, errno);
		return -1;
	}

	return 0;
}