diff options
| author | Grzegorz Kostka <kostka.grzegorz@gmail.com> | 2017-10-20 09:40:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-10-20 09:40:37 +0200 |
| commit | 2d9c5b5d776dcaa543b4a37f738617dfca64fff1 (patch) | |
| tree | 0b56d87e7a61e40d0eb74a3a07f188d2ade16cf5 | |
| parent | cc66c4021879f44ff267298c4a666ae8d78d9e43 (diff) | |
| parent | d8218c9442655f8bdebb912483d425dded654bfd (diff) | |
Merge pull request #33 from enetor/fseek
Use int64_t as offset to ext4_fseek.
| -rw-r--r-- | include/ext4.h | 2 | ||||
| -rw-r--r-- | src/ext4.c | 10 |
2 files changed, 7 insertions, 5 deletions
diff --git a/include/ext4.h b/include/ext4.h index 3694410..516bbdd 100644 --- a/include/ext4.h +++ b/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 * * @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. * @@ -2016,23 +2016,25 @@ Finish: 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) { case SEEK_SET: - if (offset > file->fsize) + if (offset < 0 || (uint64_t)offset > file->fsize) return EINVAL; file->fpos = offset; return EOK; 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; file->fpos += offset; return EOK; case SEEK_END: - if (offset > file->fsize) + if (offset < 0 || (uint64_t)offset > file->fsize) return EINVAL; file->fpos = file->fsize - offset; |
