PERFORCE change 219863 for review

Brooks Davis brooks at FreeBSD.org
Thu Nov 29 17:14:27 UTC 2012


http://p4web.freebsd.org/@@219863?ac=10

Change 219863 by brooks at brooks_zenith on 2012/11/29 17:14:00

	Checkpoint a trivial coversion to using the magic_load_buffers() API.

Affected files ...

.. //depot/projects/ctsrd/cheribsd/src/ctsrd/minifile/minifile.c#3 edit

Differences ...

==== //depot/projects/ctsrd/cheribsd/src/ctsrd/minifile/minifile.c#3 (text+ko) ====

@@ -1,6 +1,8 @@
 
 #include <sys/types.h>
 #include <sys/capability.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
 #include <sys/wait.h>
 
 #include <err.h>
@@ -20,6 +22,8 @@
 	SB_CHERI
 } sbtype = SB_NONE;
 
+#define MAGIC_FILE	"/usr/share/misc/magic.mgc"
+
 static void
 usage(void)
 {
@@ -31,12 +35,14 @@
 main(int argc, char **argv)
 {
 	char ch;
+	void *magicbuf;
 	const char *fname;
-	int fd, status;
+	int mfd, fd, status;
 	ssize_t rlen;
 	pid_t pid;
 	const char *type;
 	struct magic_set *magic;
+	struct stat sb;
 	char buf[4096], *ttype;
 	int pfd[2];
 
@@ -62,7 +68,26 @@
 	magic = magic_open(MAGIC_MIME_TYPE);
 	if (magic == NULL)
 		errx(1, "magic_open()");
-	if (magic_load(magic, NULL) == -1) {
+	mfd = open(MAGIC_FILE, O_RDONLY);
+	if (mfd == -1) {
+		warn("open(%s)", MAGIC_FILE);
+		magic_close(magic);
+		exit(1);
+	}
+	if (fstat(mfd, &sb) == -1) {
+		warn("fstat(%s)", MAGIC_FILE);
+		magic_close(magic);
+		exit(1);
+	}
+	magicbuf = mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE,
+	    mfd, 0);
+	if (magicbuf == MAP_FAILED) {
+		warn("mmap(%s)", MAGIC_FILE);
+		magic_close(magic);
+		exit(1);
+	}
+	close(mfd);
+	if (magic_load_buffers(magic, &magicbuf, &sb.st_size, 1) == -1) {
 		warnx("magic_load() %s", magic_error(magic));
 		magic_close(magic);
 		exit(1);


More information about the p4-projects mailing list