From 9e89a7fde7848674bb43f978bc1b77d5c0898d17 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 25 Nov 2009 00:42:17 +0000 Subject: [PATCH] More zzcat stuff. --- test/check-utils | 4 +-- test/zzcat.c | 66 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/test/check-utils b/test/check-utils index a92484c..57f2e6a 100755 --- a/test/check-utils +++ b/test/check-utils @@ -21,9 +21,9 @@ checkutils() check "$ZZOPTS" "< $file" "zzuf" fi for n in 100 101 102 \ - 200 201 202 203 204 205 206 207 208 209 210 211 212 \ + 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 \ 300 301 302 303 304 305 306 307 308 309 310 311 \ - 400 401 402 403 404 \ + 400 401 402 403 404 405 406 407 \ 500; do check "$ZZOPTS" "$ZZCAT $n $file" "zzcat $n" done diff --git a/test/zzcat.c b/test/zzcat.c index 2a6a0c2..6566e38 100644 --- a/test/zzcat.c +++ b/test/zzcat.c @@ -38,8 +38,9 @@ #include 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(char const *, unsigned char *, int64_t, int64_t); static int zzcat_fread_fseek(char const *, unsigned char *, int64_t, int64_t); +static int zzcat_fseek_fread(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 @@ -108,20 +109,22 @@ int main(int argc, char *argv[]) case 101: ret = zzcat_read(name, data, len, 3); break; case 102: ret = zzcat_read(name, data, len, len); break; /* Simple stream calls */ - case 200: ret = zzcat_fread(name, data, len); break; - case 201: ret = zzcat_fseek_getc(name, data, len, 0, 0); break; - case 202: ret = zzcat_fseek_getc(name, data, len, 0, 1); break; - case 203: ret = zzcat_fseek_getc(name, data, len, 2, 0); break; - case 204: ret = zzcat_fseek_getc(name, data, len, 2, 1); break; - case 205: ret = zzcat_fseek_getc(name, data, len, len / 2, 0); break; - case 206: ret = zzcat_fseek_getc(name, data, len, len / 2, 1); break; - case 207: ret = zzcat_fread_getc(name, data, len, 2, 0); break; - case 208: ret = zzcat_fread_getc(name, data, len, 2, 1); break; - case 209: ret = zzcat_fread_getc(name, data, len, len / 2, 0); break; - case 210: ret = zzcat_fread_getc(name, data, len, len / 2, 1); break; + case 200: ret = zzcat_fread(name, data, len, 1); break; + case 201: ret = zzcat_fread(name, data, len, 2); break; + case 202: ret = zzcat_fread(name, data, len, len); break; + case 203: ret = zzcat_fseek_getc(name, data, len, 0, 0); break; + case 204: ret = zzcat_fseek_getc(name, data, len, 0, 1); break; + case 205: ret = zzcat_fseek_getc(name, data, len, 2, 0); break; + case 206: ret = zzcat_fseek_getc(name, data, len, 2, 1); break; + case 207: ret = zzcat_fseek_getc(name, data, len, len / 2, 0); break; + case 208: ret = zzcat_fseek_getc(name, data, len, len / 2, 1); break; + case 209: ret = zzcat_fread_getc(name, data, len, 2, 0); break; + case 210: ret = zzcat_fread_getc(name, data, len, 2, 1); break; + case 211: ret = zzcat_fread_getc(name, data, len, len / 2, 0); break; + case 212: ret = zzcat_fread_getc(name, data, len, len / 2, 1); break; #if defined HAVE_GETLINE - case 211: ret = zzcat_getline_getc(name, data, len, 0); break; - case 212: ret = zzcat_getline_getc(name, data, len, 1); break; + case 213: ret = zzcat_getline_getc(name, data, len, 0); break; + case 214: ret = zzcat_getline_getc(name, data, len, 1); break; #endif /* Simple unlocked stream calls */ #if defined HAVE_GETC_UNLOCKED @@ -144,8 +147,11 @@ int main(int argc, char *argv[]) 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; + case 403: ret = zzcat_fseek_fread(name, data, len, 1); break; + case 404: ret = zzcat_fseek_fread(name, data, len, 2); break; + case 405: ret = zzcat_fseek_fread(name, data, len, 4000); break; + case 406: ret = zzcat_random_socket(name, data, len); break; + case 407: ret = zzcat_random_stream(name, data, len); break; /* Misc */ #if defined HAVE_MMAP case 500: ret = zzcat_random_mmap(name, data, len); break; @@ -174,14 +180,15 @@ static int zzcat_read(char const *name, unsigned char *data, int64_t len, } /* Only fread() calls */ -static int zzcat_fread(char const *name, unsigned char *data, int64_t len) +static int zzcat_fread(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; i++) - fread(data + i, 1, 1, stream); + for(i = 0; i < len; i += chunk) + fread(data + i, chunk, 1, stream); fclose(stream); return EXIT_SUCCESS; } @@ -207,6 +214,27 @@ static int zzcat_fread_fseek(char const *name, unsigned char *data, return EXIT_SUCCESS; } +/* Only fseek() and fread() calls */ +static int zzcat_fseek_fread(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; ) + { + fseek(stream, chunk, SEEK_CUR); + i += chunk; + if (i >= len) + break; + fread(data + i, chunk, 1, stream); + 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,