More zzcat additions.

This commit is contained in:
Sam Hocevar
2009-11-24 01:25:37 +00:00
committed by sam
parent efdb4997e2
commit 008cbf6065
2 changed files with 31 additions and 8 deletions

View File

@@ -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

View File

@@ -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,