From 008cbf60656ee95f0ab436d8891e6db84560f9dc Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Tue, 24 Nov 2009 01:25:37 +0000 Subject: [PATCH] More zzcat additions. --- test/check-utils | 5 ++--- test/zzcat.c | 34 +++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/test/check-utils b/test/check-utils index cce68ec..a92484c 100755 --- a/test/check-utils +++ b/test/check-utils @@ -23,9 +23,8 @@ checkutils() for n in 100 101 102 \ 200 201 202 203 204 205 206 207 208 209 210 211 212 \ 300 301 302 303 304 305 306 307 308 309 310 311 \ - 400 \ - 500 \ - 600; do + 400 401 402 403 404 \ + 500; do check "$ZZOPTS" "$ZZCAT $n $file" "zzcat $n" done if [ "$STATIC_CAT" = "" ]; then diff --git a/test/zzcat.c b/test/zzcat.c index fbd6893..2a6a0c2 100644 --- a/test/zzcat.c +++ b/test/zzcat.c @@ -39,6 +39,7 @@ static int zzcat_read(char const *, unsigned char *, int64_t, int64_t); static int zzcat_fread(char const *, unsigned char *, int64_t); +static int zzcat_fread_fseek(char const *, unsigned char *, int64_t, int64_t); #if defined HAVE_GETLINE static int zzcat_getline_getc(char const *, unsigned char *, int64_t, int); #endif @@ -139,13 +140,15 @@ int main(int argc, char *argv[]) case 311: ret = zzcat_getline_getc(name, data, len, 3); break; # endif #endif - /* Complex socket calls */ - case 400: ret = zzcat_random_socket(name, data, len); break; - /* Complex stream calls */ - case 500: ret = zzcat_random_stream(name, data, len); break; + /* Incomplete calls (but still OK since data is pre-filled) */ + case 400: ret = zzcat_fread_fseek(name, data, len, 1); break; + case 401: ret = zzcat_fread_fseek(name, data, len, 2); break; + case 402: ret = zzcat_fread_fseek(name, data, len, 4000); break; + case 403: ret = zzcat_random_socket(name, data, len); break; + case 404: ret = zzcat_random_stream(name, data, len); break; /* Misc */ #if defined HAVE_MMAP - case 600: ret = zzcat_random_mmap(name, data, len); break; + case 500: ret = zzcat_random_mmap(name, data, len); break; #endif default: ret = EXIT_SUCCESS; } @@ -183,6 +186,27 @@ static int zzcat_fread(char const *name, unsigned char *data, int64_t len) return EXIT_SUCCESS; } +/* Only fread() and fseek() calls */ +static int zzcat_fread_fseek(char const *name, unsigned char *data, + int64_t len, int64_t chunk) +{ + FILE *stream = fopen(name, "r"); + int i; + if(!stream) + return EXIT_FAILURE; + for(i = 0; i < len; ) + { + fread(data + i, chunk, 1, stream); + i += chunk; + if (i >= len) + break; + fseek(stream, chunk, SEEK_CUR); + i += chunk; + } + fclose(stream); + return EXIT_SUCCESS; +} + #if defined HAVE_GETLINE /* getdelim() and getc() calls */ static int zzcat_getline_getc(char const *name, unsigned char *data,