From owner-svn-soc-all@FreeBSD.ORG Wed Aug 7 08:28:58 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id F1595445 for ; Wed, 7 Aug 2013 08:28:57 +0000 (UTC) (envelope-from dpl@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C5EB1247B for ; Wed, 7 Aug 2013 08:28:57 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r778SvWo045449 for ; Wed, 7 Aug 2013 08:28:57 GMT (envelope-from dpl@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r778SvLx045441 for svn-soc-all@FreeBSD.org; Wed, 7 Aug 2013 08:28:57 GMT (envelope-from dpl@FreeBSD.org) Date: Wed, 7 Aug 2013 08:28:57 GMT Message-Id: <201308070828.r778SvLx045441@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to dpl@FreeBSD.org using -f From: dpl@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r255630 - in soc2013/dpl/head/lib/libzcap: . zlibworker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Aug 2013 08:28:58 -0000 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); /* 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 #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);