changeset 246:872d92404b6a

ffstools: pirffs wrapper
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 27 Jan 2014 05:08:09 +0000
parents 2dfd9cfa9df6
children 190121a34b3b
files .hgignore ffstools/tiffs-wrappers/Makefile ffstools/tiffs-wrappers/pirffs.c
diffstat 3 files changed, 84 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Mon Jan 27 04:14:57 2014 +0000
+++ b/.hgignore	Mon Jan 27 05:08:09 2014 +0000
@@ -7,6 +7,7 @@
 
 ^ffstools/tiffs-rd/tiffs$
 ^ffstools/tiffs-wrappers/mokoffs$
+^ffstools/tiffs-wrappers/pirffs$
 
 ^gsm-fw/build\.conf$
 ^gsm-fw/config\.stamp$
--- a/ffstools/tiffs-wrappers/Makefile	Mon Jan 27 04:14:57 2014 +0000
+++ b/ffstools/tiffs-wrappers/Makefile	Mon Jan 27 05:08:09 2014 +0000
@@ -1,15 +1,19 @@
 CC=	gcc
 CFLAGS=	-O2
-PROGS=	mokoffs
+PROGS=	mokoffs pirffs
 INSTBIN=/usr/local/bin
 
 MOKOFFS_OBJS=	installpath.o mokoffs.o
+PIRFFS_OBJS=	installpath.o pirffs.o
 
 all:	${PROGS}
 
 mokoffs:	${MOKOFFS_OBJS}
 	${CC} ${CFLAGS} -o $@ ${MOKOFFS_OBJS}
 
+pirffs:		${PIRFFS_OBJS}
+	${CC} ${CFLAGS} -o $@ ${PIRFFS_OBJS}
+
 install:	${PROGS}
 	mkdir -p ${INSTBIN}
 	install -c ${PROGS} ${INSTBIN}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ffstools/tiffs-wrappers/pirffs.c	Mon Jan 27 05:08:09 2014 +0000
@@ -0,0 +1,78 @@
+/*
+ * pirffs is a wrapper around tiffs: we pass the user's command along,
+ * together with any options, but insert the 256x18 FFS organization argument
+ * automatically.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
+
+extern char tiffs_prog_pathname[];
+
+char *imgfile;
+char *aopt, *ropt;
+char **passon_argv;
+int passon_argc;
+int output_argc;
+char **output_argv;
+
+main(argc, argv)
+	char **argv;
+{
+	extern int optind;
+	extern char *optarg;
+	int c;
+	char **sp, **dp;
+
+	while ((c = getopt(argc, argv, "+a:r:")) != EOF)
+		switch (c) {
+		case 'a':
+			aopt = optarg;
+			continue;
+		case 'r':
+			ropt = optarg;
+			continue;
+		default:
+usage:			fprintf(stderr,
+			"usage: %s [global-options] <imgfile> <op> ...\n",
+				argv[0]);
+			exit(1);
+		}
+	if (argc - optind < 2)
+		goto usage;
+	imgfile = argv[optind++];
+	passon_argv = argv + optind;
+	passon_argc = argc - optind;
+
+	output_argc = passon_argc + 3;
+	if (aopt)
+		output_argc += 2;
+	if (ropt)
+		output_argc += 2;
+	output_argv = malloc(sizeof(char *) * (output_argc + 1));
+	if (!output_argv) {
+		perror("malloc for tiffs argument list");
+		exit(1);
+	}
+	dp = output_argv;
+	*dp++ = "tiffs";
+	if (aopt) {
+		*dp++ = "-a";
+		*dp++ = aopt;
+	}
+	if (ropt) {
+		*dp++ = "-r";
+		*dp++ = ropt;
+	}
+	*dp++ = imgfile;
+	*dp++ = "256x18";
+	for (sp = passon_argv; *sp; sp++)
+		*dp++ = *sp;
+	*dp = 0;
+	execvp(tiffs_prog_pathname, output_argv);
+	perror(tiffs_prog_pathname);
+	exit(1);
+}