Skip to content

Commit 9843402

Browse files
committed
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.
1 parent 273cb7c commit 9843402

File tree

2 files changed

+26
-30
lines changed

2 files changed

+26
-30
lines changed

lfs.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -1522,8 +1522,6 @@ lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file,
15221522
}
15231523

15241524
// update pos
1525-
lfs_off_t pos = file->pos;
1526-
15271525
if (whence == LFS_SEEK_SET) {
15281526
file->pos = off;
15291527
} else if (whence == LFS_SEEK_CUR) {
@@ -1540,7 +1538,7 @@ lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file,
15401538
file->pos = file->size + off;
15411539
}
15421540

1543-
return pos;
1541+
return file->pos;
15441542
}
15451543

15461544
lfs_soff_t lfs_file_tell(lfs_t *lfs, lfs_file_t *file) {

tests/test_seek.sh

+25-27
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,15 @@ tests/test.py << TEST
133133
lfs_file_read(&lfs, &file[0], buffer, size) => size;
134134
memcmp(buffer, "kittycatcat", size) => 0;
135135
136-
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
136+
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
137137
lfs_file_read(&lfs, &file[0], buffer, size) => size;
138138
memcmp(buffer, "kittycatcat", size) => 0;
139139
140-
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos+size;
140+
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos;
141141
lfs_file_read(&lfs, &file[0], buffer, size) => size;
142142
memcmp(buffer, "kittycatcat", size) => 0;
143143
144-
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
144+
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1;
145145
lfs_file_read(&lfs, &file[0], buffer, size) => size;
146146
memcmp(buffer, "kittycatcat", size) => 0;
147147
@@ -174,15 +174,15 @@ tests/test.py << TEST
174174
lfs_file_read(&lfs, &file[0], buffer, size) => size;
175175
memcmp(buffer, "kittycatcat", size) => 0;
176176
177-
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
177+
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
178178
lfs_file_read(&lfs, &file[0], buffer, size) => size;
179179
memcmp(buffer, "kittycatcat", size) => 0;
180180
181-
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos+size;
181+
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos;
182182
lfs_file_read(&lfs, &file[0], buffer, size) => size;
183183
memcmp(buffer, "kittycatcat", size) => 0;
184184
185-
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
185+
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1;
186186
lfs_file_read(&lfs, &file[0], buffer, size) => size;
187187
memcmp(buffer, "kittycatcat", size) => 0;
188188
@@ -211,19 +211,19 @@ tests/test.py << TEST
211211
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
212212
lfs_file_write(&lfs, &file[0], buffer, size) => size;
213213
214-
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos+size;
214+
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
215215
lfs_file_read(&lfs, &file[0], buffer, size) => size;
216216
memcmp(buffer, "doggodogdog", size) => 0;
217217
218218
lfs_file_rewind(&lfs, &file[0]) => 0;
219219
lfs_file_read(&lfs, &file[0], buffer, size) => size;
220220
memcmp(buffer, "kittycatcat", size) => 0;
221221
222-
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
222+
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
223223
lfs_file_read(&lfs, &file[0], buffer, size) => size;
224224
memcmp(buffer, "doggodogdog", size) => 0;
225225
226-
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
226+
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1;
227227
lfs_file_read(&lfs, &file[0], buffer, size) => size;
228228
memcmp(buffer, "kittycatcat", size) => 0;
229229
@@ -254,19 +254,19 @@ tests/test.py << TEST
254254
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
255255
lfs_file_write(&lfs, &file[0], buffer, size) => size;
256256
257-
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos+size;
257+
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
258258
lfs_file_read(&lfs, &file[0], buffer, size) => size;
259259
memcmp(buffer, "doggodogdog", size) => 0;
260260
261261
lfs_file_rewind(&lfs, &file[0]) => 0;
262262
lfs_file_read(&lfs, &file[0], buffer, size) => size;
263263
memcmp(buffer, "kittycatcat", size) => 0;
264264
265-
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
265+
lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
266266
lfs_file_read(&lfs, &file[0], buffer, size) => size;
267267
memcmp(buffer, "doggodogdog", size) => 0;
268268
269-
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
269+
lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) >= 0 => 1;
270270
lfs_file_read(&lfs, &file[0], buffer, size) => size;
271271
memcmp(buffer, "kittycatcat", size) => 0;
272272
@@ -288,13 +288,13 @@ tests/test.py << TEST
288288
for (int i = 0; i < sizeof(offsets) / sizeof(offsets[0]); i++) {
289289
lfs_soff_t off = offsets[i];
290290
memcpy(buffer, "hedgehoghog", size);
291-
lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) >= 0 => 1;
291+
lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) => off;
292292
lfs_file_write(&lfs, &file[0], buffer, size) => size;
293-
lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) => off+size;
293+
lfs_file_seek(&lfs, &file[0], off, LFS_SEEK_SET) => off;
294294
lfs_file_read(&lfs, &file[0], buffer, size) => size;
295295
memcmp(buffer, "hedgehoghog", size) => 0;
296296
297-
lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_SET) => off+size;
297+
lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_SET) => 0;
298298
lfs_file_read(&lfs, &file[0], buffer, size) => size;
299299
memcmp(buffer, "kittycatcat", size) => 0;
300300
@@ -312,31 +312,29 @@ tests/test.py << TEST
312312
313313
size = strlen("kittycatcat");
314314
lfs_file_size(&lfs, &file[0]) => $LARGESIZE*size;
315-
lfs_file_seek(&lfs, &file[0],
316-
($LARGESIZE+$SMALLSIZE)*size, LFS_SEEK_SET) => 0;
315+
lfs_file_seek(&lfs, &file[0], ($LARGESIZE+$SMALLSIZE)*size,
316+
LFS_SEEK_SET) => ($LARGESIZE+$SMALLSIZE)*size;
317317
lfs_file_read(&lfs, &file[0], buffer, size) => 0;
318318
319319
memcpy(buffer, "porcupineee", size);
320320
lfs_file_write(&lfs, &file[0], buffer, size) => size;
321321
322-
lfs_file_seek(&lfs, &file[0],
323-
($LARGESIZE+$SMALLSIZE)*size, LFS_SEEK_SET) =>
324-
($LARGESIZE+$SMALLSIZE+1)*size;
322+
lfs_file_seek(&lfs, &file[0], ($LARGESIZE+$SMALLSIZE)*size,
323+
LFS_SEEK_SET) => ($LARGESIZE+$SMALLSIZE)*size;
325324
lfs_file_read(&lfs, &file[0], buffer, size) => size;
326325
memcmp(buffer, "porcupineee", size) => 0;
327326
328-
lfs_file_seek(&lfs, &file[0],
329-
$LARGESIZE*size, LFS_SEEK_SET) =>
330-
($LARGESIZE+$SMALLSIZE+1)*size;
327+
lfs_file_seek(&lfs, &file[0], $LARGESIZE*size,
328+
LFS_SEEK_SET) => $LARGESIZE*size;
331329
lfs_file_read(&lfs, &file[0], buffer, size) => size;
332330
memcmp(buffer, "\0\0\0\0\0\0\0\0\0\0\0", size) => 0;
333331
334-
lfs_file_seek(&lfs, &file[0],
335-
-(($LARGESIZE+$SMALLSIZE)*size), LFS_SEEK_CUR) => LFS_ERR_INVAL;
332+
lfs_file_seek(&lfs, &file[0], -(($LARGESIZE+$SMALLSIZE)*size),
333+
LFS_SEEK_CUR) => LFS_ERR_INVAL;
336334
lfs_file_tell(&lfs, &file[0]) => ($LARGESIZE+1)*size;
337335
338-
lfs_file_seek(&lfs, &file[0],
339-
-(($LARGESIZE+2*$SMALLSIZE)*size), LFS_SEEK_END) => LFS_ERR_INVAL;
336+
lfs_file_seek(&lfs, &file[0], -(($LARGESIZE+2*$SMALLSIZE)*size),
337+
LFS_SEEK_END) => LFS_ERR_INVAL;
340338
lfs_file_tell(&lfs, &file[0]) => ($LARGESIZE+1)*size;
341339
342340
lfs_file_close(&lfs, &file[0]) => 0;

0 commit comments

Comments
 (0)