extmod/vfs_fat_file: Make file.close() a no-op if file already closed.
As per CPython semantics. In particular, file.__del__() should not raise an exception if the file is already closed.
This commit is contained in:
parent
06e7032906
commit
5694201930
|
@ -120,9 +120,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(file_obj_flush_obj, file_obj_flush);
|
|||
|
||||
STATIC mp_obj_t file_obj_close(mp_obj_t self_in) {
|
||||
pyb_file_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
FRESULT res = f_close(&self->fp);
|
||||
if (res != FR_OK) {
|
||||
mp_raise_OSError(fresult_to_errno_table[res]);
|
||||
// if fs==NULL then the file is closed and in that case this method is a no-op
|
||||
if (self->fp.fs != NULL) {
|
||||
FRESULT res = f_close(&self->fp);
|
||||
if (res != FR_OK) {
|
||||
mp_raise_OSError(fresult_to_errno_table[res]);
|
||||
}
|
||||
}
|
||||
return mp_const_none;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ print(str(f)[:17], str(f)[-1:])
|
|||
f.write("hello!")
|
||||
f.flush()
|
||||
f.close()
|
||||
f.close() # allowed
|
||||
try:
|
||||
f.write("world!")
|
||||
except OSError as e:
|
||||
|
@ -63,11 +64,6 @@ try:
|
|||
except OSError as e:
|
||||
print(e.args[0] == uerrno.EINVAL)
|
||||
|
||||
try:
|
||||
f.close()
|
||||
except OSError as e:
|
||||
print(e.args[0] == uerrno.EINVAL)
|
||||
|
||||
try:
|
||||
vfs.open("foo_file.txt", "x")
|
||||
except OSError as e:
|
||||
|
|
|
@ -3,7 +3,6 @@ True
|
|||
True
|
||||
True
|
||||
True
|
||||
True
|
||||
hello!world!
|
||||
12
|
||||
h
|
||||
|
|
Loading…
Reference in New Issue