From 984340225befc1e2330dd3b88f4048373eda0fce Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Tue, 26 Sep 2017 19:50:39 -0500 Subject: [PATCH] Fixed incorrect return value from lfs_file_seek lfs_file_seek returned the _previous_ file offset on success, where most standards return the _calculated_ offset on success. This just falls into me not noticing a mistake, and shows why it's always helpful to have a second set of eyes on code. --- lfs.c | 4 +--- tests/test_seek.sh | 52 ++++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/lfs.c b/lfs.c index a1e5eb7..dc4a955 100644 --- a/lfs.c +++ b/lfs.c @@ -1522,8 +1522,6 @@ lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, } // update pos - lfs_off_t pos = file->pos; - if (whence == LFS_SEEK_SET) { file->pos = off; } else if (whence == LFS_SEEK_CUR) { @@ -1540,7 +1538,7 @@ lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file, file->pos = file->size + off; } - return pos; + return file->pos; } lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file) { diff --git a/tests/test_seek.sh b/tests/test_seek.sh index 8b90928..6600cb2 100755 --- a/tests/test_seek.sh +++ b/tests/test_seek.sh @@ -133,15 +133,15 @@ tests/test.py << TEST lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size; + lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos+size; + lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size; + lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; @@ -174,15 +174,15 @@ tests/test.py << TEST lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size; + lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos+size; + lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size; + lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; @@ -211,7 +211,7 @@ tests/test.py << TEST lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_write(&lfs, &file[0], buffer, size) => size; - lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos+size; + lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "doggodogdog", size) => 0; @@ -219,11 +219,11 @@ tests/test.py << TEST lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size; + lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "doggodogdog", size) => 0; - lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size; + lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; @@ -254,7 +254,7 @@ tests/test.py << TEST lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_write(&lfs, &file[0], buffer, size) => size; - lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos+size; + lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "doggodogdog", size) => 0; @@ -262,11 +262,11 @@ tests/test.py << TEST lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; - lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size; + lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "doggodogdog", size) => 0; - lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size; + lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; @@ -288,13 +288,13 @@ tests/test.py << TEST for (int i = 0; i < sizeof(offsets) / sizeof(offsets[0]); i++) { lfs_soff_t off = offsets[i]; memcpy(buffer, "hedgehoghog", size); - lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) >= 0 => 1; + lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) => off; lfs_file_write(&lfs, &file[0], buffer, size) => size; - lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) => off+size; + lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) => off; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "hedgehoghog", size) => 0; - lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_SET) => off+size; + lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_SET) => 0; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "kittycatcat", size) => 0; @@ -312,31 +312,29 @@ tests/test.py << TEST size = strlen("kittycatcat"); lfs_file_size(&lfs, &file[0]) => $LARGESIZE*size; - lfs_file_seek(&lfs, &file[0], - ($LARGESIZE+$SMALLSIZE)*size, LFS_SEEK_SET) => 0; + lfs_file_seek(&lfs, &file[0], ($LARGESIZE+$SMALLSIZE)*size, + LFS_SEEK_SET) => ($LARGESIZE+$SMALLSIZE)*size; lfs_file_read(&lfs, &file[0], buffer, size) => 0; memcpy(buffer, "porcupineee", size); lfs_file_write(&lfs, &file[0], buffer, size) => size; - lfs_file_seek(&lfs, &file[0], - ($LARGESIZE+$SMALLSIZE)*size, LFS_SEEK_SET) => - ($LARGESIZE+$SMALLSIZE+1)*size; + lfs_file_seek(&lfs, &file[0], ($LARGESIZE+$SMALLSIZE)*size, + LFS_SEEK_SET) => ($LARGESIZE+$SMALLSIZE)*size; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "porcupineee", size) => 0; - lfs_file_seek(&lfs, &file[0], - $LARGESIZE*size, LFS_SEEK_SET) => - ($LARGESIZE+$SMALLSIZE+1)*size; + lfs_file_seek(&lfs, &file[0], $LARGESIZE*size, + LFS_SEEK_SET) => $LARGESIZE*size; lfs_file_read(&lfs, &file[0], buffer, size) => size; memcmp(buffer, "\0\0\0\0\0\0\0\0\0\0\0", size) => 0; - lfs_file_seek(&lfs, &file[0], - -(($LARGESIZE+$SMALLSIZE)*size), LFS_SEEK_CUR) => LFS_ERR_INVAL; + lfs_file_seek(&lfs, &file[0], -(($LARGESIZE+$SMALLSIZE)*size), + LFS_SEEK_CUR) => LFS_ERR_INVAL; lfs_file_tell(&lfs, &file[0]) => ($LARGESIZE+1)*size; - lfs_file_seek(&lfs, &file[0], - -(($LARGESIZE+2*$SMALLSIZE)*size), LFS_SEEK_END) => LFS_ERR_INVAL; + lfs_file_seek(&lfs, &file[0], -(($LARGESIZE+2*$SMALLSIZE)*size), + LFS_SEEK_END) => LFS_ERR_INVAL; lfs_file_tell(&lfs, &file[0]) => ($LARGESIZE+1)*size; lfs_file_close(&lfs, &file[0]) => 0;