Browse Source

Merge pull request #33 from enetor/fseek

Use int64_t as offset to ext4_fseek.
pull/35/head
Grzegorz Kostka 7 years ago
committed by GitHub
parent
commit
2d9c5b5d77
  1. 2
      include/ext4.h
  2. 10
      src/ext4.c

2
include/ext4.h

@ -368,7 +368,7 @@ int ext4_fwrite(ext4_file *file, const void *buf, size_t size, size_t *wcnt);
* @ref SEEK_END * @ref SEEK_END
* *
* @return Standard error code.*/ * @return Standard error code.*/
int ext4_fseek(ext4_file *file, uint64_t offset, uint32_t origin); int ext4_fseek(ext4_file *file, int64_t offset, uint32_t origin);
/**@brief Get file position. /**@brief Get file position.
* *

10
src/ext4.c

@ -2016,23 +2016,25 @@ Finish:
return r; return r;
} }
int ext4_fseek(ext4_file *file, uint64_t offset, uint32_t origin) int ext4_fseek(ext4_file *file, int64_t offset, uint32_t origin)
{ {
switch (origin) { switch (origin) {
case SEEK_SET: case SEEK_SET:
if (offset > file->fsize) if (offset < 0 || (uint64_t)offset > file->fsize)
return EINVAL; return EINVAL;
file->fpos = offset; file->fpos = offset;
return EOK; return EOK;
case SEEK_CUR: case SEEK_CUR:
if ((offset + file->fpos) > file->fsize) if ((offset < 0 && (uint64_t)(-offset) > file->fpos) ||
(offset > 0 &&
(uint64_t)offset > (file->fsize - file->fpos)))
return EINVAL; return EINVAL;
file->fpos += offset; file->fpos += offset;
return EOK; return EOK;
case SEEK_END: case SEEK_END:
if (offset > file->fsize) if (offset < 0 || (uint64_t)offset > file->fsize)
return EINVAL; return EINVAL;
file->fpos = file->fsize - offset; file->fpos = file->fsize - offset;

Loading…
Cancel
Save