* Enhance wayland-scanner so it can use files for input and output

    Signed-off-by: Jussi Pakkanen <jpakk...@gmail.com>
 src/scanner.c | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/scanner.c b/src/scanner.c
index 1f1e59a..809a339 100644
--- a/src/scanner.c
+++ b/src/scanner.c
@@ -28,6 +28,8 @@
 #include <errno.h>
 #include <ctype.h>
 #include <expat.h>
+#include <unistd.h>
+#include <fcntl.h>
 
 #include "wayland-util.h"
 
@@ -39,11 +41,12 @@ enum side {
 static int
 usage(int ret)
 {
-	fprintf(stderr, "usage: ./scanner [client-header|server-header|code]\n");
+	fprintf(stderr, "usage: ./scanner [client-header|server-header|code]"
+		" [input_file output_file]\n");
 	fprintf(stderr, "\n");
 	fprintf(stderr, "Converts XML protocol descriptions supplied on "
-			"stdin to client headers,\n"
-			"server headers, or protocol marshalling code.\n");
+			"stdin or input file to client\n"
+			"headers, server headers, or protocol marshalling code.\n");
 	exit(ret);
 }
 
@@ -1252,6 +1255,7 @@ int main(int argc, char *argv[])
 {
 	struct parse_context ctx;
 	struct protocol protocol;
+	FILE *input = stdin;
 	int len;
 	void *buf;
 	enum {
@@ -1260,7 +1264,7 @@ int main(int argc, char *argv[])
 		CODE,
 	} mode;
 
-	if (argc != 2)
+	if (argc != 2 && argc != 4)
 		usage(EXIT_FAILURE);
 	else if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "--help") == 0)
 		usage(EXIT_SUCCESS);
@@ -1273,6 +1277,16 @@ int main(int argc, char *argv[])
 	else
 		usage(EXIT_FAILURE);
 
+	if(argc == 4) {
+		int outfd;
+		input = fopen(argv[2], "r");
+		outfd = open(argv[3], O_WRONLY | O_CREAT | O_TRUNC,
+			S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP |
+			S_IROTH);
+		dup2(outfd, STDOUT_FILENO);
+		close(outfd);
+	}
+
 	wl_list_init(&protocol.interface_list);
 	protocol.type_index = 0;
 	protocol.null_run_length = 0;
@@ -1293,7 +1307,7 @@ int main(int argc, char *argv[])
 
 	do {
 		buf = XML_GetBuffer(ctx.parser, XML_BUFFER_SIZE);
-		len = fread(buf, 1, XML_BUFFER_SIZE, stdin);
+		len = fread(buf, 1, XML_BUFFER_SIZE, input);
 		if (len < 0) {
 			fprintf(stderr, "fread: %m\n");
 			exit(EXIT_FAILURE);
-- 
2.1.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to