add support for seeking to the end of a file

This commit is contained in:
Axel Kohlmeyer
2021-10-05 15:44:58 -04:00
parent 741cf9c7d5
commit af070aa351
3 changed files with 16 additions and 3 deletions

View File

@ -767,8 +767,14 @@ bigint platform::ftell(FILE *fp)
int platform::fseek(FILE *fp, bigint pos)
{
#if defined(_WIN32)
if (pos == platform::END_OF_FILE)
return ::_fseeki64(fp, 0, SEEK_END);
else
return ::_fseeki64(fp, (__int64) pos, SEEK_SET);
#else
if (pos == platform::END_OF_FILE)
return ::fseek(fp, 0, SEEK_END);
else
return ::fseek(fp, (long) pos, SEEK_SET);
#endif
}

View File

@ -263,7 +263,12 @@ namespace platform {
bigint ftell(FILE *fp);
/*! constant to seek to the end of the file */
constexpr bigint END_OF_FILE = -1;
/*! Set absolute file position
*
* If the absolute position is END_OF_FILE, then position at the end of the file.
*
* \param fp FILE pointer of the given file
* \param pos new position of the FILE pointer

View File

@ -170,7 +170,9 @@ TEST(Platform, fseek_ftell)
ASSERT_EQ(platform::fseek(fp, 15), 0);
ASSERT_EQ(fgetc(fp), '6');
fflush(fp);
fseek(fp, -1, SEEK_END);
ASSERT_EQ(platform::fseek(fp, platform::END_OF_FILE), 0);
ASSERT_EQ(platform::ftell(fp), 21);
ASSERT_EQ(platform::fseek(fp, 20), 0);
ASSERT_EQ(fgetc(fp), 0);
ASSERT_EQ(platform::ftell(fp), 21);
fclose(fp);