Added crc32 command to test_physfs.c (thanks, Christoph!).
This commit is contained in:
parent
8d1cff2bdf
commit
c369e78296
|
@ -746,6 +746,53 @@ static int cmd_cat(char *args)
|
|||
} /* cmd_cat */
|
||||
|
||||
|
||||
#define CRC32_BUFFERSIZE 512
|
||||
static int cmd_crc32(char *args)
|
||||
{
|
||||
PHYSFS_File *f;
|
||||
|
||||
if (*args == '\"')
|
||||
{
|
||||
args++;
|
||||
args[strlen(args) - 1] = '\0';
|
||||
} /* if */
|
||||
|
||||
f = PHYSFS_openRead(args);
|
||||
if (f == NULL)
|
||||
printf("failed to open. Reason: [%s].\n", PHYSFS_getLastError());
|
||||
else
|
||||
{
|
||||
PHYSFS_uint8 buffer[CRC32_BUFFERSIZE];
|
||||
PHYSFS_uint32 crc = -1;
|
||||
PHYSFS_sint64 bytesread;
|
||||
|
||||
while ((bytesread = PHYSFS_read(f, buffer, 1, CRC32_BUFFERSIZE)) > 0)
|
||||
{
|
||||
PHYSFS_uint32 i, bit;
|
||||
for (i = 0; i < bytesread; i++)
|
||||
{
|
||||
for (bit = 0; bit < 8; bit++, buffer[i] >>= 1)
|
||||
crc = (crc >> 1) ^ (((crc ^ buffer[i]) & 1) ? 0xEDB88320 : 0);
|
||||
} /* for */
|
||||
} /* while */
|
||||
|
||||
if (bytesread < 0)
|
||||
{
|
||||
printf("error while reading. Reason: [%s].\n",
|
||||
PHYSFS_getLastError());
|
||||
return 1;
|
||||
} /* if */
|
||||
|
||||
PHYSFS_close(f);
|
||||
|
||||
crc ^= -1;
|
||||
printf("CRC32 for %s: 0x%08X\n", args, crc);
|
||||
} /* else */
|
||||
|
||||
return 1;
|
||||
} /* cmd_crc32 */
|
||||
|
||||
|
||||
static int cmd_filelength(char *args)
|
||||
{
|
||||
PHYSFS_File *f;
|
||||
|
@ -1003,6 +1050,7 @@ static const command_info commands[] =
|
|||
{ "getlastmodtime", cmd_getlastmodtime, 1, "<fileToExamine>" },
|
||||
{ "setbuffer", cmd_setbuffer, 1, "<bufferSize>" },
|
||||
{ "stressbuffer", cmd_stressbuffer, 1, "<bufferSize>" },
|
||||
{ "crc32", cmd_crc32, 1, "<fileToHash>" },
|
||||
{ NULL, NULL, -1, NULL }
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue