socsvn commit: r255630 - in soc2013/dpl/head/lib/libzcap: . zlibworker
dpl at FreeBSD.org
dpl at FreeBSD.org
Wed Aug 7 08:28:58 UTC 2013
Author: dpl
Date: Wed Aug 7 08:28:57 2013
New Revision: 255630
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=255630
Log:
Added some commands. Right now, we sill have to finish with the gz comands, deflate()/inflate().
Also the we'll have to work on the advanced functions of the library.
Modified:
soc2013/dpl/head/lib/libzcap/adler32.c
soc2013/dpl/head/lib/libzcap/commands.c
soc2013/dpl/head/lib/libzcap/commands.h
soc2013/dpl/head/lib/libzcap/crc32.c
soc2013/dpl/head/lib/libzcap/gzlib.c
soc2013/dpl/head/lib/libzcap/zlibworker/comands.c
soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c
Modified: soc2013/dpl/head/lib/libzcap/adler32.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/adler32.c Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/adler32.c Wed Aug 7 08:28:57 2013 (r255630)
@@ -68,10 +68,10 @@
const Bytef *buf;
uInt len;
{
- /* Send packets of 1MB size at most. */
- if ((sizeof(*buf)*len) > (1024*1024)) {
- while( (len -= (1024*1024)) > 0) {
- buf += (1024*1024)/sizeof(*buf);
+ /* Send packets of 100kb size at most. */
+ if ((sizeof(*buf)*len) > (100*1024)) {
+ while( (len -= (100*1024)) > 0) {
+ buf += (100*1024)/sizeof(*buf);
adler = zcapcmd_adler32(adler, buf, len);
}
} else {
Modified: soc2013/dpl/head/lib/libzcap/commands.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/commands.c Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/commands.c Wed Aug 7 08:28:57 2013 (r255630)
@@ -40,10 +40,8 @@
extern nvlist_t *sendCommand(nvlist_t *);
uLong
-zcapcmd_compressBound( adler1, adler2, len2 )
- uLong adler1;
- uLong adler2;
- z_off_t len2;
+zcapcmd_compressBound(sourceLen)
+ uLong sourceLen;
{
nvlist_t *nvl, *args, *result;
uLong ret;
@@ -57,9 +55,128 @@
return (NULL);
}
nvlist_add_number(nvl, "command", ZCAPCMD_COMPRESSBOUND);
- nvlist_add_number(args, "adler2", adler2);
- nvlist_add_number(args, "adler2", adler2);
- nvlist_add_number(args, "len2", len2);
+ nvlist_add_number(args, "sourceLen", sourceLen);
+ nvlist_add_nvlist(nvl, "args", args);
+
+ result = sendCommand(nvl);
+
+ int ret = nvlist_take_number(result, "result");
+ nvlist_destroy(result);
+ return(ret);
+}
+
+gzFile
+zcapcmd_gzopen(path, fd, mode)
+ const char *path;
+ int fd;
+ const char *mode;
+{
+ nvlist_t *nvl, *args, *result;
+
+ if (pid == 0)
+ startChild();
+
+ if( (args = nvlist_create(0)) == NULL ||
+ (nvl = nvlist_create(0)) == NULL ) {
+ perror("nvlist_create");
+ return (NULL);
+ }
+ nvlist_add_number(nvl, "command", ZCAPCMD_GZOPEN);
+ nvlist_add_string(args, "path", path);
+ nvlist_move_descriptor(args, "fd", fd);
+ nvlist_add_string(args, "mode", mode);
+ nvlist_add_nvlist(nvl, "args", args);
+
+ result = sendCommand(nvl);
+
+ void *mem = malloc(sizeof(gzFile_s));
+ memcpy(mem,
+ nvlist_take_binary(result, "result", sizeof(gzFile_s)),
+ sizeof(gzFile_s));
+ nvlist_destroy(result);
+ return(mem);
+}
+
+int
+zcapcmd_gzbuffer(file, size)
+ gzFile file;
+ unsigned size;
+{
+ nvlist_t *nvl, *args, *result;
+
+ if (pid == 0)
+ startChild();
+
+ if( (args = nvlist_create(0)) == NULL ||
+ (nvl = nvlist_create(0)) == NULL ) {
+ perror("nvlist_create");
+ return (NULL);
+ }
+ nvlist_add_number(nvl, "command", ZCAPCMD_GZBUFFER);
+ nvlist_add_binary(args, "file", file, sizeof(gzFile_s));
+ nvlist_add_number(args, "size", size);
+ nvlist_add_nvlist(nvl, "args", args);
+
+ result = sendCommand(nvl);
+
+ int ret = nvlist_take_number(result, "result");
+ nvlist_destroy(result);
+ return(ret);
+}
+
+int
+zcapcmd_gzsetparams(file, level, strategy)
+ gzFile file;
+ int level;
+ int strategy;
+{
+ nvlist_t *nvl, *args, *result;
+
+ if (pid == 0)
+ startChild();
+
+ if( (args = nvlist_create(0)) == NULL ||
+ (nvl = nvlist_create(0)) == NULL ) {
+ perror("nvlist_create");
+ return (NULL);
+ }
+ nvlist_add_number(nvl, "command", ZCAPCMD_GZSETPARAMS);
+ nvlist_add_binary(args, "file", file, sizeof(gzFile_s));
+ nvlist_add_number(args, "level", level);
+ nvlist_add_number(args, "strategy", strategy);
+ nvlist_add_nvlist(nvl, "args", args);
+
+ result = sendCommand(nvl);
+
+ int ret = nvlist_take_number(result, "result");
+ nvlist_destroy(result);
+ return(ret);
+}
+
+/* XXX
+zcapcmd_gzread(file, s);
+zcapcmd_gzwrite(file, s);
+zcapcmd_gzprintf(file, s);
+*/
+
+int
+zcapcmd_gzputs(file, s)
+ gzFile file;
+ const char *s;
+{
+ nvlist_t *nvl, *args, *result;
+
+ if (pid == 0)
+ startChild();
+
+ if( (args = nvlist_create(0)) == NULL ||
+ (nvl = nvlist_create(0)) == NULL ) {
+ perror("nvlist_create");
+ return (NULL);
+ }
+ nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTS);
+ nvlist_add_binary(args, "file", file, sizeof(gzFile_s));
+ nvlist_add_string(args, "s", s);
nvlist_add_nvlist(nvl, "args", args);
result = sendCommand(nvl);
@@ -69,6 +186,61 @@
return(ret);
}
+/* XXX */
+char *
+zcapcmd_gzgets(file, s)
+ gzFile file;
+ const char *s;
+{
+ nvlist_t *nvl, *args, *result;
+
+ if (pid == 0)
+ startChild();
+
+ if( (args = nvlist_create(0)) == NULL ||
+ (nvl = nvlist_create(0)) == NULL ) {
+ perror("nvlist_create");
+ return (NULL);
+ }
+ nvlist_add_number(nvl, "command", ZCAPCMD_GZGETS);
+ nvlist_add_binary(args, "file", file, sizeof(gzFile_s));
+ nvlist_add_string(args, "s", s);
+ nvlist_add_nvlist(nvl, "args", args);
+
+ result = sendCommand(nvl);
+
+ char *ret = nvlist_take_string(result, "result");
+ nvlist_destroy(result);
+ return(ret);
+}
+
+int
+zcapcmd_gzputc(file, c)
+ gzFile file;
+ int c;
+{
+ nvlist_t *nvl, *args, *result;
+
+ if (pid == 0)
+ startChild();
+
+ if( (args = nvlist_create(0)) == NULL ||
+ (nvl = nvlist_create(0)) == NULL ) {
+ perror("nvlist_create");
+ return (NULL);
+ }
+ nvlist_add_number(nvl, "command", ZCAPCMD_GZPUTC);
+ nvlist_add_binary(args, "file", file, sizeof(gzFile_s));
+ nvlist_add_number(args, "c", c);
+ nvlist_add_nvlist(nvl, "args", args);
+
+ result = sendCommand(nvl);
+
+ int ret = nvlist_take_number(result, "result");
+ nvlist_destroy(result);
+ return(ret);
+}
+
uLong
zcapcmd_adler32(adler, buf, len)
uLong adler;
Modified: soc2013/dpl/head/lib/libzcap/commands.h
==============================================================================
--- soc2013/dpl/head/lib/libzcap/commands.h Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/commands.h Wed Aug 7 08:28:57 2013 (r255630)
@@ -46,7 +46,7 @@
#define ZCAPCMD_COMPRESSBOUND 30
/* gzip file access functions */
-#define ZCAPCMD_GZ_OPEN 32
+#define ZCAPCMD_GZOPEN 32
#define ZCAPCMD_GZBUFFER 34
#define ZCAPCMD_GZSETPARAMS 35
#define ZCAPCMD_GZREAD 36
Modified: soc2013/dpl/head/lib/libzcap/crc32.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/crc32.c Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/crc32.c Wed Aug 7 08:28:57 2013 (r255630)
@@ -209,10 +209,10 @@
{
if (buf == Z_NULL) return 0UL;
- /* Send packets of 1MB size at most. */
- if ((sizeof(*buf)*len) > (1024*1024)) {
- while( (len -= (1024*1024)) > 0) {
- buf += (1024*1024)/sizeof(*buf);
+ /* Send packets of 100kb size at most. */
+ if ((sizeof(*buf)*len) > (100*1024)) {
+ while( (len -= (100*1024)) > 0) {
+ buf += (100*1024)/sizeof(*buf);
crc = zcapcmd_crc32(crc, buf, len);
}
} else {
Modified: soc2013/dpl/head/lib/libzcap/gzlib.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/gzlib.c Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/gzlib.c Wed Aug 7 08:28:57 2013 (r255630)
@@ -275,7 +275,46 @@
const char *path;
const char *mode;
{
- return gz_open(path, -1, mode);
+ int oflag = 0;
+ for( int i = 0; i < strlen(mode); ++i){
+ switch (mode[i]){
+#ifndef NO_GZCOMPRESS
+ case('w'):
+ oflag |= O_WRONLY|O_CREAT|O_TRUNC;
+ break;
+ case('a'):
+ oflag |= O_WRONLY|O_CREAT|O_APPEND;
+ break;
+#endif
+ case('r'):
+ oflag |= O_RDONLY;
+ break;
+#ifdef O_CLOEXEC
+ case('e'):
+ oflag |= O_CLOEXEC;
+ break;
+#endif
+#ifdef O_EXCL
+ case('x'):
+ oflag |= O_EXCL;
+ break;
+#endif
+ case('+'):
+ /* Not accepted by gzopen */
+ oflag |= O_RDONLY;
+ break;
+ default:
+ ;
+ }
+ }
+#ifdef O_LARGEFILE
+ oflag |= O_LARGEFILE;
+#endif
+#ifdef O_BINARY
+ oflag |= O_BINARY;
+#endif
+
+ return gzdopen(open(path, oflag), mode);
}
/* -- see zlib.h -- */
@@ -287,6 +326,7 @@
}
/* -- see zlib.h -- */
+extern gzFile zcapcmd_gz_open(const char *path, int fd, const char *mode);
gzFile ZEXPORT gzdopen(fd, mode)
int fd;
const char *mode;
@@ -301,7 +341,7 @@
#else
sprintf(path, "<fd:%d>", fd); /* for debugging */
#endif
- gz = gz_open(path, fd, mode);
+ gz = zcapcmd_gz_open(path, fd, mode);
free(path);
return gz;
}
@@ -317,28 +357,12 @@
#endif
/* -- see zlib.h -- */
+extern gzFile zcapcmd_gz_open(gzFile file, unsigned size);
int ZEXPORT gzbuffer(file, size)
gzFile file;
unsigned size;
{
- gz_statep state;
-
- /* get internal structure and check integrity */
- if (file == NULL)
- return -1;
- state = (gz_statep)file;
- if (state->mode != GZ_READ && state->mode != GZ_WRITE)
- return -1;
-
- /* make sure we haven't already allocated memory */
- if (state->size != 0)
- return -1;
-
- /* check and set requested size */
- if (size < 2)
- size = 2; /* need two bytes to check magic header */
- state->want = size;
- return 0;
+ return zcapcmd_gzbuffer(file, size);
}
/* -- see zlib.h -- */
Modified: soc2013/dpl/head/lib/libzcap/zlibworker/comands.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/comands.c Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/comands.c Wed Aug 7 08:28:57 2013 (r255630)
@@ -7,77 +7,125 @@
void
zcapcmd_compressBound(nvlist_t * nvl, nvlist_t * result)
{
- uLong ret = 0;
+ uLong ret = -1;
+
if ((args = nvlist_take_nvlist(nvl, "args")) == NULL)
- ret = -1;
+ ret = compressBound(
+ nvlist_take_number(args, "sourceLen")
+ );
+ nvlist_add_number(result, "result", ret );
+}
- uLong sourceLen = nvlist_take_number(args, "sourceLen");
+void
+zcapcmd_gzopen(nvlist_t * nvl, nvlist_t * result)
+{
+ void *ret = NULL;
- if (ret != -1 )
- ret = compressBound(sourceLen);
- nvlist_add_number(result, "result", ret );
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = gzdopen(
+ nvlist_take_string(args, "path"),
+ nvlist_take_descriptor(args, "fd"),
+ nvlist_take_string(args, "mode")
+ );
+
+ nvlist_add_binary(result, "result", *ret, sizeof(gzFile_s));
}
void
-zcapcmd_adler32(nvlist_t * nvl, nvlist_t * result)
+zcapcmd_gzbuffer(nvlist_t * nvl, nvlist_t * result)
{
- uLong ret = 0;
- if ((args = nvlist_take_nvlist(nvl, "args")) == NULL)
- ret = -1;
+ int ret = -1;
- uLong adler1 = nvlist_take_number(args, "adler");
- size_t len = nvlist_take_number(args, "len");
- Bytef buf = nvlist_take_binary(args, "buf", &len);
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = gzbuffer(
+ nvlist_take_binary(args, "file", sizeof(gzFile_s)),
+ nvlist_take_number(args, "size")
+ );
- if (ret != -1)
- ret = adler32_combine(adler, &buf, len2);
- nvlist_add_number(result, "result", ret );
+ nvlist_add_number(result, "result", ret);
}
void
-zcapcmd_adler32_combine(nvlist_t * nvl, nvlist_t * result)
+zcapcmd_gzsetparams(nvlist_t * nvl, nvlist_t * result)
{
- uLong ret = 0;
- if ((args = nvlist_take_nvlist(nvl, "args")) == NULL)
- ret = -1;
+ int ret = -1;
+
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = gzsetparams(
+ nvlist_take_binary(args, "file", sizeof(gzFile_s)),
+ nvlist_take_number(args, "level"),
+ nvlist_take_number(args, "strategy")
+ );
+
+ nvlist_add_number(result, "result", ret);
+}
+
+void
+zcapcmd_gzputs(nvlist_t * nvl, nvlist_t * result)
+{
+ int ret = -1;
+
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = gzputs(
+ nvlist_take_binary(args, "file", sizeof(gzFile_s)),
+ nvlist_take_string(args, "s")
+ );
- uLong adler1 = nvlist_take_number(args, "adler1");
- uLong adler2 = nvlist_take_number(args, "adler2");
- uLong len2 = nvlist_take_number(args, "len2");
+ nvlist_add_number(result, "result", ret);
+}
- if (ret != -1)
- ret = adler32_combine(adler1, adler2, len2);
+void
+zcapcmd_adler32(nvlist_t * nvl, nvlist_t * result)
+{
+ uLong ret = -1;
+
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = adler32_combine(
+ nvlist_take_number(args, "adler"),
+ nvlist_take_number(args, "len"),
+ nvlist_take_binary(args, "buf", &len)
+ );
nvlist_add_number(result, "result", ret );
}
void
-zcapcmd_crc32(nvlist_t * nvl, nvlist_t * result)
+zcapcmd_adler32_combine(nvlist_t * nvl, nvlist_t * result)
{
- uLong ret = 0;
- if ((args = nvlist_take_nvlist(nvl, "args")) == NULL)
- ret = -1;
+ uLong ret = -1;
- uLong adler1 = nvlist_take_number(args, "adler");
- size_t len = nvlist_take_number(args, "len");
- Bytef buf = nvlist_take_binary(args, "buf", &len);
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = adler32_combine(
+ nvlist_take_number(args, "adler1"),
+ nvlist_take_number(args, "adler2"),
+ nvlist_take_number(args, "len2")
+ );
+ nvlist_add_number(result, "result", ret );
+}
- if (ret != -1)
- ret = adler32_combine(adler, &buf, len2);
+void
+zcapcmd_crc32(nvlist_t * nvl, nvlist_t * result)
+{
+ uLong ret = -1;
+
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = adler32_combine(
+ nvlist_take_number(args, "adler"),
+ nvlist_take_number(args, "len"),
+ nvlist_take_binary(args, "buf", &len)
+ );
nvlist_add_number(result, "result", ret );
}
void
zcapcmd_crc32_combine(nvlist_t * nvl, nvlist_t * result)
{
- uLong ret = 0;
- if ((args = nvlist_take_nvlist(nvl, "args")) == NULL)
- ret = -1;
-
- uLong adler1 = nvlist_take_number(args, "crc1");
- uLong adler2 = nvlist_take_number(args, "crc2");
- uLong len2 = nvlist_take_number(args, "len2");
+ uLong ret = -1;
- if (ret != -1 )
- ret = crc32_combine(adler1, adler2, len2);
+ if ((args = nvlist_take_nvlist(nvl, "args")) != NULL)
+ ret = crc32_combine(
+ nvlist_take_number(args, "crc1"),
+ nvlist_take_number(args, "crc2"),
+ nvlist_take_number(args, "len2")
+ );
nvlist_add_number(result, "result", ret );
}
\ No newline at end of file
Modified: soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c
==============================================================================
--- soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Wed Aug 7 07:44:13 2013 (r255629)
+++ soc2013/dpl/head/lib/libzcap/zlibworker/zlibworker.c Wed Aug 7 08:28:57 2013 (r255630)
@@ -5,15 +5,17 @@
#include <stdio.h>
#include "../commands.h"
-extern void zcapcmd_compressBound(nvlist_t * args, nvlist_t * result);
-extern void zcapcmd_adler32_combine(nvlist_t * args, nvlist_t * result);
-extern void zcapcmd_crc32_combine(nvlist_t * args, nvlist_t * result);
+extern void zcapcmd_compressBound(nvlist_t * nvl, nvlist_t * result);
+extern void zcapcmd_adler32_combine(nvlist_t * nvl, nvlist_t * result);
+extern void zcapcmd_crc32_combine(nvlist_t * nvl, nvlist_t * result);
+extern void zcapcmd_gzopen(nvlist_t * nvl, nvlist_t * result);
int
main()
{
nvlist_t *nvl, *args, *result;
+ /* Sandbox the process */
cap_enter();
if ((result = nvlist_create(0)) == NULL)
@@ -29,7 +31,76 @@
// Get args, and call the real lib.
switch( nvlist_take_number(nvl, "command") ){
case (ZCAPCMD_COMPRESSBOUND):
- zcapcmd_adler32_combine(nvl, result);
+ zcapcmd_compressBound(nvl, result);
+ break;
+ case (ZCAPCMD_GZOPEN):
+ zcapcmd_gzopen(nvl, result);
+ break;
+ case (ZCAPCMD_GZBUFFER):
+ zcapcmd_gzbuffer(nvl, result);
+ break;
+ case (ZCAPCMD_GZSETPARAMS):
+ zcapcmd_gzsetparams(nvl, result);
+ break;
+ case (ZCAPCMD_GZREAD):
+ zcapcmd_gzread(nvl, result);
+ break;
+ case (ZCAPCMD_GZWRITE):
+ zcapcmd_gzwrite(nvl, result);
+ break;
+ case (ZCAPCMD_GZPRINTF):
+ zcapcmd_gzprintf(nvl, result);
+ break;
+ case (ZCAPCMD_GZPUTS):
+ zcapcmd_gzputs(nvl, result);
+ break;
+ case (ZCAPCMD_GZGETS):
+ zcapcmd_gzgets(nvl, result);
+ break;
+ case (ZCAPCMD_GZPUTC):
+ zcapcmd_gzputc(nvl, result);
+ break;
+ case (ZCAPCMD_GZGETC):
+ zcapcmd_gzgetc(nvl, result);
+ break;
+ case (ZCAPCMD_GZUNGET):
+ zcapcmd_gzunget(nvl, result);
+ break;
+ case (ZCAPCMD_GZFLUSH):
+ zcapcmd_gzflush(nvl, result);
+ break;
+ case (ZCAPCMD_GZSEEK):
+ zcapcmd_gzseek(nvl, result);
+ break;
+ case (ZCAPCMD_GZREWIND):
+ zcapcmd_gzrewind(nvl, result);
+ break;
+ case (ZCAPCMD_GZTELL):
+ zcapcmd_gztell(nvl, result);
+ break;
+ case (ZCAPCMD_GZOFFSET):
+ zcapcmd_gzoffset(nvl, result);
+ break;
+ case (ZCAPCMD_GZEOF):
+ zcapcmd_gzeof(nvl, result);
+ break;
+ case (ZCAPCMD_GZDIRECT):
+ zcapcmd_gzdirect(nvl, result);
+ break;
+ case (ZCAPCMD_GZBUFFER):
+ zcapcmd_gzbuffer(nvl, result);
+ break;
+ case (ZCAPCMD_GZCLOSE_R):
+ zcapcmd_gzclose_r(nvl, result);
+ break;
+ case (ZCAPCMD_GZCLOSE_W):
+ zcapcmd_gzclose_w(nvl, result);
+ break;
+ case (ZCAPCMD_GZERROR):
+ zcapcmd_gzerror(nvl, result);
+ break;
+ case (ZCAPCMD_GZCLEARERR):
+ zcapcmd_gzclearerr(nvl, result);
break;
case (ZCAPCMD_ADLER32):
zcapcmd_adler32(nvl, result);
More information about the svn-soc-all
mailing list