extmod/vfs_fat_file: Implement SEEK_CUR for non-zero offset.
CPython doesn't allow SEEK_CUR with non-zero offset for files in text mode, and uPy inherited this behaviour for both text and binary files. It makes sense to provide full support for SEEK_CUR of binary-mode files in uPy, and to do this in a minimal way means also allowing to use SEEK_CUR with non-zero offsets on text-mode files. That seems to be a fair compromise.
This commit is contained in:
parent
df952633ef
commit
7642785881
@ -134,11 +134,7 @@ STATIC mp_uint_t file_obj_ioctl(mp_obj_t o_in, mp_uint_t request, uintptr_t arg,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // SEEK_CUR
|
case 1: // SEEK_CUR
|
||||||
if (s->offset != 0) {
|
f_lseek(&self->fp, f_tell(&self->fp) + s->offset);
|
||||||
*errcode = MP_EOPNOTSUPP;
|
|
||||||
return MP_STREAM_ERROR;
|
|
||||||
}
|
|
||||||
// no-operation
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // SEEK_END
|
case 2: // SEEK_END
|
||||||
|
@ -91,10 +91,8 @@ with open("foo_file.txt") as f2:
|
|||||||
|
|
||||||
f2.seek(0, 1) # SEEK_CUR
|
f2.seek(0, 1) # SEEK_CUR
|
||||||
print(f2.read(1))
|
print(f2.read(1))
|
||||||
try:
|
f2.seek(2, 1) # SEEK_CUR
|
||||||
f2.seek(1, 1) # SEEK_END
|
print(f2.read(1))
|
||||||
except OSError as e:
|
|
||||||
print(e.args[0] == uerrno.EOPNOTSUPP)
|
|
||||||
|
|
||||||
f2.seek(-2, 2) # SEEK_END
|
f2.seek(-2, 2) # SEEK_END
|
||||||
print(f2.read(1))
|
print(f2.read(1))
|
||||||
|
@ -7,7 +7,7 @@ hello!world!
|
|||||||
12
|
12
|
||||||
h
|
h
|
||||||
e
|
e
|
||||||
True
|
o
|
||||||
d
|
d
|
||||||
True
|
True
|
||||||
[('foo_dir', 16384, 0)]
|
[('foo_dir', 16384, 0)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user