I'm reading data from a file to memory that is opened with:
FILE *f = fopen(path, "rb");
Before I start copying bytes from the file I seek to a start position using:
/**
* Goes to the given position of the given file.
*
* - Returns 0 on success
* - Returns -1 on EOF
* - Returns -2 if an error occured, see errno for error code
* - Returns -3 if none of the above applies. This should never happen!
*/
static int8_t goto_pos(FILE *f, uint64_t pos)
{
int err = fseek(f, pos, SEEK_SET);
if (err != 0) {
if (feof(f) != 0) return -1;
if (ferror(f) != 0) return -2;
return -3;
}
return 0;
}
The problem is that even though I seek to a position way beyond EOF
, this function never returns -1.
According to the reference feof
should return a non zero value when EOF
is encountered.
Why is this? Is the feof
function useless?
Note that I'm currently using the return value of fgetc
to check for EOF
.
fseek
set the flag, I just assumed that seeking pastEOF
would set the flag. It seemed logical to me. – Hobard