Skip to content

Commit

Permalink
test_physfs: added a "cat2" command to read from two open file handle…
Browse files Browse the repository at this point in the history
…s at once.
  • Loading branch information
icculus committed Jul 17, 2017
1 parent 62ad133 commit de444a9
Showing 1 changed file with 152 additions and 0 deletions.
152 changes: 152 additions & 0 deletions test/test_physfs.c
Expand Up @@ -871,6 +871,157 @@ static int cmd_cat(char *args)
return 1;
} /* cmd_cat */

static int cmd_cat2(char *args)
{
PHYSFS_File *f1;
PHYSFS_File *f2;
char *fname1;
char *fname2;
char *ptr;

fname1 = args;
if (*fname1 == '\"')
{
fname1++;
ptr = strchr(fname1, '\"');
if (ptr == NULL)
{
printf("missing string terminator in argument.\n");
return 1;
} /* if */
*(ptr) = '\0';
} /* if */
else
{
ptr = strchr(fname1, ' ');
*ptr = '\0';
} /* else */

fname2 = ptr + 1;
if (*fname2 == '\"')
{
fname2++;
ptr = strchr(fname2, '\"');
if (ptr == NULL)
{
printf("missing string terminator in argument.\n");
return 1;
} /* if */
*(ptr) = '\0';
} /* if */

if ((f1 = PHYSFS_openRead(fname1)) == NULL)
printf("failed to open '%s'. Reason: [%s].\n", fname1, PHYSFS_getLastError());
else if ((f2 = PHYSFS_openRead(fname2)) == NULL)
printf("failed to open '%s'. Reason: [%s].\n", fname2, PHYSFS_getLastError());
else
{
char *buffer1 = NULL;
size_t buffer1len = 0;
char *buffer2 = NULL;
size_t buffer2len = 0;
char *ptr = NULL;
PHYSFS_sint64 i;

if (do_buffer_size)
{
if (!PHYSFS_setBuffer(f1, do_buffer_size))
{
printf("failed to set file buffer for '%s'. Reason: [%s].\n",
fname1, PHYSFS_getLastError());
PHYSFS_close(f1);
PHYSFS_close(f2);
return 1;
} /* if */
else if (!PHYSFS_setBuffer(f2, do_buffer_size))
{
printf("failed to set file buffer for '%s'. Reason: [%s].\n",
fname2, PHYSFS_getLastError());
PHYSFS_close(f1);
PHYSFS_close(f2);
return 1;
} /* if */
} /* if */


do
{
int readlen = 128;
PHYSFS_sint64 rc;

ptr = realloc(buffer1, buffer1len + readlen);
if (!ptr)
{
printf("(Out of memory.)\n\n");
free(buffer1);
free(buffer2);
PHYSFS_close(f1);
PHYSFS_close(f2);
return 1;
} /* if */

buffer1 = ptr;
rc = PHYSFS_readBytes(f1, buffer1 + buffer1len, readlen);
if (rc < 0)
{
printf("(Error condition in reading '%s'. Reason: [%s])\n\n",
fname1, PHYSFS_getLastError());
free(buffer1);
free(buffer2);
PHYSFS_close(f1);
PHYSFS_close(f2);
return 1;
} /* if */
buffer1len += rc;

ptr = realloc(buffer2, buffer2len + readlen);
if (!ptr)
{
printf("(Out of memory.)\n\n");
free(buffer1);
free(buffer2);
PHYSFS_close(f1);
PHYSFS_close(f2);
return 1;
} /* if */

buffer2 = ptr;
rc = PHYSFS_readBytes(f2, buffer2 + buffer2len, readlen);
if (rc < 0)
{
printf("(Error condition in reading '%s'. Reason: [%s])\n\n",
fname2, PHYSFS_getLastError());
free(buffer1);
free(buffer2);
PHYSFS_close(f1);
PHYSFS_close(f2);
return 1;
} /* if */
buffer2len += rc;
} while (!PHYSFS_eof(f1) || !PHYSFS_eof(f2));

printf("file '%s' ...\n\n", fname1);
for (i = 0; i < buffer1len; i++)
fputc((int) buffer1[i], stdout);
free(buffer1);

printf("\n\nfile '%s' ...\n\n", fname2);
for (i = 0; i < buffer2len; i++)
fputc((int) buffer2[i], stdout);
free(buffer2);

printf("\n\n");
} /* else */

if (f1)
PHYSFS_close(f1);

if (f2)
PHYSFS_close(f2);

return 1;
} /* cmd_cat2 */


#define CRC32_BUFFERSIZE 512
static int cmd_crc32(char *args)
Expand Down Expand Up @@ -1179,6 +1330,7 @@ static const command_info commands[] =
{ "isdir", cmd_isdir, 1, "<fileToCheck>" },
{ "issymlink", cmd_issymlink, 1, "<fileToCheck>" },
{ "cat", cmd_cat, 1, "<fileToCat>" },
{ "cat2", cmd_cat2, 2, "<fileToCat1> <fileToCat2>" },
{ "filelength", cmd_filelength, 1, "<fileToCheck>" },
{ "stat", cmd_stat, 1, "<fileToStat>" },
{ "append", cmd_append, 1, "<fileToAppend>" },
Expand Down

0 comments on commit de444a9

Please sign in to comment.