test_physfs: added a "cat2" command to read from two open file handles at once.
This commit is contained in:
parent
62ad133862
commit
de444a9866
|
@ -871,6 +871,157 @@ static int cmd_cat(char *args)
|
||||||
return 1;
|
return 1;
|
||||||
} /* cmd_cat */
|
} /* 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
|
#define CRC32_BUFFERSIZE 512
|
||||||
static int cmd_crc32(char *args)
|
static int cmd_crc32(char *args)
|
||||||
|
@ -1179,6 +1330,7 @@ static const command_info commands[] =
|
||||||
{ "isdir", cmd_isdir, 1, "<fileToCheck>" },
|
{ "isdir", cmd_isdir, 1, "<fileToCheck>" },
|
||||||
{ "issymlink", cmd_issymlink, 1, "<fileToCheck>" },
|
{ "issymlink", cmd_issymlink, 1, "<fileToCheck>" },
|
||||||
{ "cat", cmd_cat, 1, "<fileToCat>" },
|
{ "cat", cmd_cat, 1, "<fileToCat>" },
|
||||||
|
{ "cat2", cmd_cat2, 2, "<fileToCat1> <fileToCat2>" },
|
||||||
{ "filelength", cmd_filelength, 1, "<fileToCheck>" },
|
{ "filelength", cmd_filelength, 1, "<fileToCheck>" },
|
||||||
{ "stat", cmd_stat, 1, "<fileToStat>" },
|
{ "stat", cmd_stat, 1, "<fileToStat>" },
|
||||||
{ "append", cmd_append, 1, "<fileToAppend>" },
|
{ "append", cmd_append, 1, "<fileToAppend>" },
|
||||||
|
|
Loading…
Reference in New Issue