Minor refactoring in zzcat.
This commit is contained in:
parent
906ef22f84
commit
f36a3e475c
@ -20,9 +20,9 @@ checkutils()
|
|||||||
else
|
else
|
||||||
check "$ZZOPTS" "< $file" "zzuf"
|
check "$ZZOPTS" "< $file" "zzuf"
|
||||||
fi
|
fi
|
||||||
for n in 100 \
|
for n in 100 101 102 \
|
||||||
200 201 202 203 204 205 206 207 208 \
|
200 201 202 203 204 205 206 207 208 209 210 211 212 \
|
||||||
300 301 302 303 304 305 306 307 \
|
300 301 302 303 304 305 306 307 308 309 310 311 \
|
||||||
400 \
|
400 \
|
||||||
500 \
|
500 \
|
||||||
600; do
|
600; do
|
||||||
|
|||||||
96
test/zzcat.c
96
test/zzcat.c
@ -37,14 +37,15 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
static int zzcat_read(char const *, unsigned char *, int64_t);
|
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);
|
||||||
static int zzcat_getc(char const *, unsigned char *, int64_t, int);
|
|
||||||
#if defined HAVE_GETLINE
|
#if defined HAVE_GETLINE
|
||||||
static int zzcat_getdelim_getc(char const *, unsigned char *, int64_t, int);
|
static int zzcat_getline_getc(char const *, unsigned char *, int64_t, int);
|
||||||
#endif
|
#endif
|
||||||
static int zzcat_fseek_getc(char const *, unsigned char *, int64_t, int);
|
static int zzcat_fseek_getc(char const *, unsigned char *,
|
||||||
static int zzcat_fread_getc(char const *, unsigned char *, int64_t, int);
|
int64_t, int64_t, int);
|
||||||
|
static int zzcat_fread_getc(char const *, unsigned char *, int64_t,
|
||||||
|
int64_t, int);
|
||||||
static int zzcat_random_socket(char const *, unsigned char *, int64_t);
|
static int zzcat_random_socket(char const *, unsigned char *, int64_t);
|
||||||
static int zzcat_random_stream(char const *, unsigned char *, int64_t);
|
static int zzcat_random_stream(char const *, unsigned char *, int64_t);
|
||||||
#if defined HAVE_MMAP
|
#if defined HAVE_MMAP
|
||||||
@ -102,30 +103,40 @@ int main(int argc, char *argv[])
|
|||||||
switch((cmd = atoi(argv[1])))
|
switch((cmd = atoi(argv[1])))
|
||||||
{
|
{
|
||||||
/* Simple socket calls */
|
/* Simple socket calls */
|
||||||
case 100: ret = zzcat_read(name, data, len); break;
|
case 100: ret = zzcat_read(name, data, len, 1); break;
|
||||||
|
case 101: ret = zzcat_read(name, data, len, 3); break;
|
||||||
|
case 102: ret = zzcat_read(name, data, len, len); break;
|
||||||
/* Simple stream calls */
|
/* Simple stream calls */
|
||||||
case 200: ret = zzcat_fread(name, data, len); break;
|
case 200: ret = zzcat_fread(name, data, len); break;
|
||||||
case 201: ret = zzcat_getc(name, data, len, 0); break;
|
case 201: ret = zzcat_fseek_getc(name, data, len, 0, 0); break;
|
||||||
case 202: ret = zzcat_getc(name, data, len, 1); break;
|
case 202: ret = zzcat_fseek_getc(name, data, len, 0, 1); break;
|
||||||
case 203: ret = zzcat_fseek_getc(name, data, len, 0); break;
|
case 203: ret = zzcat_fseek_getc(name, data, len, 2, 0); break;
|
||||||
case 204: ret = zzcat_fseek_getc(name, data, len, 1); break;
|
case 204: ret = zzcat_fseek_getc(name, data, len, 2, 1); break;
|
||||||
case 205: ret = zzcat_fread_getc(name, data, len, 0); break;
|
case 205: ret = zzcat_fseek_getc(name, data, len, len / 2, 0); break;
|
||||||
case 206: ret = zzcat_fread_getc(name, data, len, 1); 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;
|
||||||
#if defined HAVE_GETLINE
|
#if defined HAVE_GETLINE
|
||||||
case 207: ret = zzcat_getdelim_getc(name, data, len, 0); break;
|
case 211: ret = zzcat_getline_getc(name, data, len, 0); break;
|
||||||
case 208: ret = zzcat_getdelim_getc(name, data, len, 1); break;
|
case 212: ret = zzcat_getline_getc(name, data, len, 1); break;
|
||||||
#endif
|
#endif
|
||||||
/* Simple unlocked stream calls */
|
/* Simple unlocked stream calls */
|
||||||
#if defined HAVE_GETC_UNLOCKED
|
#if defined HAVE_GETC_UNLOCKED
|
||||||
case 300: ret = zzcat_getc(name, data, len, 2); break;
|
case 300: ret = zzcat_fseek_getc(name, data, len, 0, 2); break;
|
||||||
case 301: ret = zzcat_getc(name, data, len, 3); break;
|
case 301: ret = zzcat_fseek_getc(name, data, len, 0, 3); break;
|
||||||
case 302: ret = zzcat_fseek_getc(name, data, len, 2); break;
|
case 302: ret = zzcat_fseek_getc(name, data, len, 2, 2); break;
|
||||||
case 303: ret = zzcat_fseek_getc(name, data, len, 3); break;
|
case 303: ret = zzcat_fseek_getc(name, data, len, 2, 3); break;
|
||||||
case 304: ret = zzcat_fread_getc(name, data, len, 2); break;
|
case 304: ret = zzcat_fseek_getc(name, data, len, len / 2, 2); break;
|
||||||
case 305: ret = zzcat_fread_getc(name, data, len, 3); break;
|
case 305: ret = zzcat_fseek_getc(name, data, len, len / 2, 3); break;
|
||||||
|
case 306: ret = zzcat_fread_getc(name, data, len, 2, 2); break;
|
||||||
|
case 307: ret = zzcat_fread_getc(name, data, len, 2, 3); break;
|
||||||
|
case 308: ret = zzcat_fread_getc(name, data, len, len / 2, 2); break;
|
||||||
|
case 309: ret = zzcat_fread_getc(name, data, len, len / 2, 3); break;
|
||||||
# if defined HAVE_GETLINE
|
# if defined HAVE_GETLINE
|
||||||
case 306: ret = zzcat_getdelim_getc(name, data, len, 2); break;
|
case 310: ret = zzcat_getline_getc(name, data, len, 2); break;
|
||||||
case 307: ret = zzcat_getdelim_getc(name, data, len, 3); break;
|
case 311: ret = zzcat_getline_getc(name, data, len, 3); break;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
/* Complex socket calls */
|
/* Complex socket calls */
|
||||||
@ -146,14 +157,15 @@ int main(int argc, char *argv[])
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only read(1) calls */
|
/* Only read() calls */
|
||||||
static int zzcat_read(char const *name, unsigned char *data, int64_t len)
|
static int zzcat_read(char const *name, unsigned char *data, int64_t len,
|
||||||
|
int64_t chunk)
|
||||||
{
|
{
|
||||||
int i, fd = open(name, O_RDONLY);
|
int i, fd = open(name, O_RDONLY);
|
||||||
if(fd < 0)
|
if(fd < 0)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
for(i = 0; i < len; i++)
|
for(i = 0; i < len; i += chunk)
|
||||||
read(fd, data + i, 1);
|
read(fd, data + i, chunk);
|
||||||
close(fd);
|
close(fd);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -171,24 +183,10 @@ static int zzcat_fread(char const *name, unsigned char *data, int64_t len)
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only getc() or fgetc() calls */
|
|
||||||
static int zzcat_getc(char const *name, unsigned char *data, int64_t len,
|
|
||||||
int getc_method)
|
|
||||||
{
|
|
||||||
FILE *stream = fopen(name, "r");
|
|
||||||
int i;
|
|
||||||
if(!stream)
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
for(i = 0; i < len; i++)
|
|
||||||
data[i] = mygetc(stream, getc_method);
|
|
||||||
fclose(stream);
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined HAVE_GETLINE
|
#if defined HAVE_GETLINE
|
||||||
/* getdelim() and getc() calls */
|
/* getdelim() and getc() calls */
|
||||||
static int zzcat_getdelim_getc(char const *name, unsigned char *data,
|
static int zzcat_getline_getc(char const *name, unsigned char *data,
|
||||||
int64_t len, int getc_method)
|
int64_t len, int getc_method)
|
||||||
{
|
{
|
||||||
FILE *stream = fopen(name, "r");
|
FILE *stream = fopen(name, "r");
|
||||||
int i = 0, j;
|
int i = 0, j;
|
||||||
@ -215,14 +213,15 @@ static int zzcat_getdelim_getc(char const *name, unsigned char *data,
|
|||||||
|
|
||||||
/* One fseek(), then only getc() or fgetc() calls */
|
/* One fseek(), then only getc() or fgetc() calls */
|
||||||
static int zzcat_fseek_getc(char const *name, unsigned char *data,
|
static int zzcat_fseek_getc(char const *name, unsigned char *data,
|
||||||
int64_t len, int getc_method)
|
int64_t len, int64_t chunk, int getc_method)
|
||||||
{
|
{
|
||||||
FILE *stream = fopen(name, "r");
|
FILE *stream = fopen(name, "r");
|
||||||
int i;
|
int i;
|
||||||
if(!stream)
|
if(!stream)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
fseek(stream, len / 2, SEEK_CUR);
|
if (chunk)
|
||||||
for(i = len / 2; i < len; i++)
|
fseek(stream, chunk, SEEK_CUR);
|
||||||
|
for(i = chunk; i < len; i++)
|
||||||
data[i] = mygetc(stream, getc_method);
|
data[i] = mygetc(stream, getc_method);
|
||||||
fclose(stream);
|
fclose(stream);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
@ -230,14 +229,15 @@ static int zzcat_fseek_getc(char const *name, unsigned char *data,
|
|||||||
|
|
||||||
/* One fread(), then only getc() or fgetc() calls */
|
/* One fread(), then only getc() or fgetc() calls */
|
||||||
static int zzcat_fread_getc(char const *name, unsigned char *data,
|
static int zzcat_fread_getc(char const *name, unsigned char *data,
|
||||||
int64_t len, int getc_method)
|
int64_t len, int64_t chunk, int getc_method)
|
||||||
{
|
{
|
||||||
FILE *stream = fopen(name, "r");
|
FILE *stream = fopen(name, "r");
|
||||||
int i;
|
int i;
|
||||||
if(!stream)
|
if(!stream)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
fread(data, 1, len / 2, stream);
|
if (chunk)
|
||||||
for(i = len / 2; i < len; i++)
|
fread(data, 1, chunk, stream);
|
||||||
|
for(i = chunk; i < len; i++)
|
||||||
data[i] = mygetc(stream, getc_method);
|
data[i] = mygetc(stream, getc_method);
|
||||||
fclose(stream);
|
fclose(stream);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user