Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Aug 2013 08:23:30 GMT
From:      dpl@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r256191 - soc2013/dpl/head/lib/libzcap/zlibworker
Message-ID:  <201308200823.r7K8NUFU021064@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dpl
Date: Tue Aug 20 08:23:30 2013
New Revision: 256191
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=256191

Log:
  Improved commands, use global buffer. Improved error messages.
  

Modified:
  soc2013/dpl/head/lib/libzcap/zlibworker/commands.c
  soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c

Modified: soc2013/dpl/head/lib/libzcap/zlibworker/commands.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/commands.c	Tue Aug 20 08:22:24 2013	(r256190)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/commands.c	Tue Aug 20 08:23:30 2013	(r256191)
@@ -6,6 +6,9 @@
 #include <string.h>
 
 nvlist_t * args;
+extern int zero;
+extern void *data;
+
 size_t gzsize = sizeof(struct gzFile_s);
 size_t zstreamsize = sizeof(z_stream);
 
@@ -80,15 +83,7 @@
 void
 zcapcmd_deflateSetDictionary(nvlist_t *nvl, nvlist_t *result)
 {
-	uLong ret = -1;
-
-	if ((args = nvlist_take_nvlist(nvl, "args")) == NULL) {
-		nvlist_take_binary(args, "strm", &zstreamsize);
-		ret = compressBound(
-		 		nvlist_take_number(args, "sourceLen")
-		 	);
-	}
-	nvlist_add_number(result, "result", ret );
+	;
 }
 
 void
@@ -255,11 +250,9 @@
 {
 	int ret = -1;
 	int len = 0;
-	void * data = NULL;
 
 	if ((args = nvlist_take_nvlist(nvl, "args")) != NULL) {
 		len = nvlist_take_number(args, "len");
-		data = malloc(len);
 		ret = gzread(
 				nvlist_take_binary(args, "file", &gzsize),
 				data,
@@ -269,6 +262,7 @@
 
 	nvlist_add_number(result, "result", ret);
 	nvlist_add_binary(result, "data", data, len);
+	zero = 1;
 }
 
 void
@@ -276,18 +270,18 @@
 {
 	int ret = -1;
 	size_t len = 0;
-	void * data;
 
 	if ((args = nvlist_take_nvlist(nvl, "args")) != NULL) {
 		len = nvlist_take_number(args, "len");
 		data = malloc(len);
 		memcpy(data, nvlist_take_binary(args, "data", &len), len);
-		ret = gzread(
+		ret = gzwrite(
 				nvlist_take_binary(args, "file", &gzsize),
 				data, len);
 	}
 
 	nvlist_add_number(result, "result", ret);
+	zero = 1;
 }
 
 void
@@ -295,11 +289,9 @@
 {
 	int ret = -1;
 	int len = 0;
-	void * data;
 
 	if ((args = nvlist_take_nvlist(nvl, "args")) != NULL) {
 		len = nvlist_take_number(args, "len");
-		data = malloc(len);
 		ret = gzprintf(
 				nvlist_take_binary(args, "file", &gzsize),
 				nvlist_take_string(args, "str")
@@ -459,19 +451,16 @@
 zcapcmd_adler32(nvlist_t *nvl, nvlist_t *result)
 {
 	uLong ret = -1;
-	fprintf(stderr, "\nzcapcmd_adler32()\n");
 
 	if ((args = nvlist_take_nvlist(nvl, "args")) != NULL) {
 		size_t len = nvlist_take_number(args, "len");
 		uLong adler = nvlist_take_number(args, "adler");
 		void *buf = nvlist_take_binary(args, "buf", &len);
-		fprintf(stderr, "zcapcmd_crc32: adler: %ld\n", adler);
-		fprintf(stderr, "zcapcmd_crc32: buf: %p\n", &buf);
-		fprintf(stderr, "zcapcmd_crc32: len: %d\n", len);
-		fflush(stderr);
-		ret = adler32(adler, buf, len);
+		memcpy(data, buf, len);
+		ret = adler32(adler, data, len);
 	}
 	nvlist_add_number(result, "result", ret );
+	zero = 1;
 }
 
 

Modified: soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c	Tue Aug 20 08:22:24 2013	(r256190)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c	Tue Aug 20 08:23:30 2013	(r256191)
@@ -4,6 +4,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <assert.h>
 #include "../commands.h"
 
@@ -65,7 +66,10 @@
 extern void zcapcmd_crc32(nvlist_t *nvl, nvlist_t *result);
 extern void zcapcmd_crc32_combine(nvlist_t *nvl, nvlist_t *result);
 
+/* Points to a 5kb buffer */
 void * data;
+/* Zero == 1 when we need to zero out data */
+int zero = 0;
 
 int
 main()
@@ -75,22 +79,30 @@
 	/* Sandbox the process */
 	cap_enter();
 
-	if ((data = malloc(5*1024)) == NULL) {
+	if ((data = calloc(5*1024, 1)) == NULL) {
 		perror("malloc");
 		abort();
 	}
 
-	if ((result = nvlist_create(0)) == NULL)
-		return(-1);
 	
 	while(1) {
+		if ((result = nvlist_create(0)) == NULL) {
+			fprintf(stderr, "zlibworker: Can't create result.\n");
+			exit(1);
+		}
+
 		if  ((nvl = nvlist_recv(3)) != NULL) {
-			if (!nvlist_exists(nvl, "command"))
-				continue;
-			if (!nvlist_exists(nvl, "args"))
-				continue;
+			if (!nvlist_exists(nvl, "command")) {
+				fprintf(stderr, "zlibworker: No command.\n");
+				exit(1);
+			}
+			if (!nvlist_exists(nvl, "args")) {
+				fprintf(stderr, "zlibworker: args doesn't exist\n");
+				exit(1);
+			}
 		} else {
-			continue;
+			fprintf(stderr, "zlibworker: nvl is NULL\n");
+			exit(1);
 		}
 
 		// Switch for "command"
@@ -247,7 +259,7 @@
 				zcapcmd_adler32(nvl, result);
 				break;
 			case (ZCAPCMD_ADLER32_COMBINE):
-				zcapcmd_compressBound(nvl, result);
+				zcapcmd_adler32_combine(nvl, result);
 				break;
 			case (ZCAPCMD_CRC32):
 				zcapcmd_crc32(nvl, result);
@@ -256,11 +268,19 @@
 				zcapcmd_crc32_combine(nvl, result);
 				break;
 			default:
+				perror("zlibworker: unknown command");
+				exit(1);
 				break;
 		}
 
-		if( nvlist_send(3, result) != 0 )
+		if( nvlist_send(3, result) != 0 ) {
 			perror("zlibworker: Couldn't send response\n");
+			exit(1);
+		}
+
+		if (zero)
+			memset(data, 0, 5*1024);
 	}
+
 	return (0);
 }
\ No newline at end of file



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308200823.r7K8NUFU021064>