Some C libraries provide a macro version of feof which does not convert
the provided pointer to FILE * before dereferencing it. Ordinarily,
this conversion would occur automatically since feof's prototype
specifies FILE *, but this is suppressed in the macro case.
It is not clear to me whether this behaviour is consistent with the
requirements of the C standard. However, after encountering at least
two implementations which do this, explicit conversions seem simple
enough.
/* Default I/O operations for ordinary files. */
static size_t file_read(void *buf, size_t size, void *handle)
{
/* Default I/O operations for ordinary files. */
static size_t file_read(void *buf, size_t size, void *handle)
{
- return fread(buf, 1, size, handle);
+ return fread(buf, 1, size, (FILE *)handle);
}
static int file_seek(void *handle, long offset, int whence)
{
}
static int file_seek(void *handle, long offset, int whence)
{
- return fseek(handle, offset, whence);
+ return fseek((FILE *)handle, offset, whence);
}
static long file_tell(void *handle)
{
}
static long file_tell(void *handle)
{
+ return ftell((FILE *)handle);
}
static int file_eof(void *handle)
{
}
static int file_eof(void *handle)
{
+ return feof((FILE *)handle);
}
static int file_close(void *handle)
{
}
static int file_close(void *handle)
{
+ return fclose((FILE *)handle);
}
const struct upkg_file_ops upkg_default_fops = {
}
const struct upkg_file_ops upkg_default_fops = {