svn commit: trunk/busybox: archival/libunarchive include modutils

vda at busybox.net vda at busybox.net
Tue Nov 21 11:58:15 UTC 2006


Author: vda
Date: 2006-11-21 03:58:14 -0800 (Tue, 21 Nov 2006)
New Revision: 16606

Log:
insmod_ng_main: -80 bytes. Stopp mmapping, use xmalloc_open_read_close().


Modified:
   trunk/busybox/archival/libunarchive/archive_xread_all_eof.c
   trunk/busybox/include/libbb.h
   trunk/busybox/modutils/insmod.c


Changeset:
Modified: trunk/busybox/archival/libunarchive/archive_xread_all_eof.c
===================================================================
--- trunk/busybox/archival/libunarchive/archive_xread_all_eof.c	2006-11-21 11:23:11 UTC (rev 16605)
+++ trunk/busybox/archival/libunarchive/archive_xread_all_eof.c	2006-11-21 11:58:14 UTC (rev 16606)
@@ -3,19 +3,18 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
 #include "unarchive.h"
 #include "libbb.h"
 
-ssize_t archive_xread_all_eof(archive_handle_t *archive_handle, unsigned char *buf, size_t count)
+ssize_t archive_xread_all_eof(archive_handle_t *archive_handle,
+			unsigned char *buf, size_t count)
 {
 	ssize_t size;
 
 	size = full_read(archive_handle->src_fd, buf, count);
-	if ((size != 0) && (size != count)) {
-		bb_perror_msg_and_die("short read, read %ld of %ld", (long)size, (long)count);
+	if (size != 0 && size != count) {
+		bb_error_msg_and_die("short read: %u of %u",
+				(unsigned)size, (unsigned)count);
 	}
-	return(size);
+	return size;
 }

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2006-11-21 11:23:11 UTC (rev 16605)
+++ trunk/busybox/include/libbb.h	2006-11-21 11:58:14 UTC (rev 16606)
@@ -60,7 +60,7 @@
 #define  PATH_MAX         256
 #endif
 
-/* Not (yet) used, but tested to work correctly
+/* Tested to work correctly (IIRC :]) */
 #define MAXINT(T) (T)( \
 	((T)-1) > 0 \
 	? (T)-1 \
@@ -72,7 +72,6 @@
 	? (T)0 \
 	: ((T)1 << (sizeof(T)*8-1)) \
 	)
-*/
 
 /* Large file support */
 /* Note that CONFIG_LFS forces bbox to be built with all common ops

Modified: trunk/busybox/modutils/insmod.c
===================================================================
--- trunk/busybox/modutils/insmod.c	2006-11-21 11:23:11 UTC (rev 16605)
+++ trunk/busybox/modutils/insmod.c	2006-11-21 11:58:14 UTC (rev 16606)
@@ -4263,38 +4263,32 @@
 	}
 }
 
-int insmod_ng_main( int argc, char **argv)
+int insmod_ng_main(int argc, char **argv)
 {
-	int i;
-	int fd;
-	long int ret;
-	struct stat st;
-	unsigned long len;
+	long ret;
+	size_t len;
 	void *map;
-	char *filename, *options = xstrdup("");
+	char *filename, *options;
 
-	filename = argv[1];
-	if (!filename) {
+	filename = *++argv;
+	if (!filename)
 		bb_show_usage();
-		return -1;
-	}
 
 	/* Rest is options */
-	for (i = 2; i < argc; i++) {
-		options = xrealloc(options, strlen(options) + 2 + strlen(argv[i]) + 2);
+	options = xstrdup("");
+	while (*++argv) {
+		int optlen = strlen(options);
+		options = xrealloc(options, optlen + 2 + strlen(*argv) + 2);
 		/* Spaces handled by "" pairs, but no way of escaping quotes */
-		if (strchr(argv[i], ' ')) {
-			strcat(options, "\"");
-			strcat(options, argv[i]);
-			strcat(options, "\"");
-		} else {
-			strcat(options, argv[i]);
-		}
-		strcat(options, " ");
+		sprintf(options + optlen, (strchr(*argv,' ') ? "\"%s\" " : "%s "), *argv);
 	}
 
+#if 0
+	/* Any special reason why mmap? It isn't performace critical... */
+	int fd;
+	struct stat st;
+	unsigned long len;
 	fd = xopen(filename, O_RDONLY);
-
 	fstat(fd, &st);
 	len = st.st_size;
 	map = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, 0);
@@ -4302,6 +4296,16 @@
 		bb_perror_msg_and_die("cannot mmap '%s'", filename);
 	}
 
+	/* map == NULL on Blackfin, probably on other MMU-less systems too. Workaround. */
+	if (map == NULL) {
+		map = xmalloc(len);
+		xread(fd, map, len);
+	}
+#else
+	len = MAXINT(ssize_t);
+	map = xmalloc_open_read_close(filename, &len);
+#endif
+
 	ret = syscall(__NR_init_module, map, len, options);
 	if (ret != 0) {
 		bb_perror_msg_and_die("cannot insert '%s': %s (%li)",




More information about the busybox-cvs mailing list