浏览代码

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.
Christopher Haster 8 年之前
父节点
当前提交
984340225b
共有 2 个文件被更改,包括 26 次插入30 次删除
  1. 1 3
      lfs.c
  2. 25 27
      tests/test_seek.sh

+ 1 - 3
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) {

+ 25 - 27
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;