mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 11:40:18 +01:00
py/stream: seek: Consistently handle negative offset for SEEK_SET.
Per POSIX, this is EINVAL, so raises OSError(EINVAL).
This commit is contained in:
@@ -448,11 +448,16 @@ STATIC mp_obj_t stream_seek(size_t n_args, const mp_obj_t *args) {
|
||||
struct mp_stream_seek_t seek_s;
|
||||
// TODO: Could be uint64
|
||||
seek_s.offset = mp_obj_get_int(args[1]);
|
||||
seek_s.whence = 0;
|
||||
seek_s.whence = SEEK_SET;
|
||||
if (n_args == 3) {
|
||||
seek_s.whence = mp_obj_get_int(args[2]);
|
||||
}
|
||||
|
||||
// In POSIX, it's error to seek before end of stream, we enforce it here.
|
||||
if (seek_s.whence == SEEK_SET && seek_s.offset < 0) {
|
||||
mp_raise_OSError(MP_EINVAL);
|
||||
}
|
||||
|
||||
int error;
|
||||
mp_uint_t res = stream_p->ioctl(args[0], MP_STREAM_SEEK, (mp_uint_t)(uintptr_t)&seek_s, &error);
|
||||
if (res == MP_STREAM_ERROR) {
|
||||
|
||||
Reference in New Issue
Block a user