summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/library/uos.rst8
-rw-r--r--extmod/vfs.c4
-rw-r--r--extmod/vfs_fat.c5
-rw-r--r--tests/extmod/vfs_fat_fileio1.py.exp2
-rw-r--r--tests/extmod/vfs_fat_fileio2.py.exp8
-rw-r--r--tests/extmod/vfs_fat_oldproto.py.exp2
-rw-r--r--tests/extmod/vfs_fat_ramdisk.py.exp4
7 files changed, 18 insertions, 15 deletions
diff --git a/docs/library/uos.rst b/docs/library/uos.rst
index 85adb6a4d..27f339bb1 100644
--- a/docs/library/uos.rst
+++ b/docs/library/uos.rst
@@ -43,11 +43,11 @@ Filesystem access
.. function:: ilistdir([dir])
- This function returns an iterator which then yields 3-tuples corresponding to
+ This function returns an iterator which then yields tuples corresponding to
the entries in the directory that it is listing. With no argument it lists the
current directory, otherwise it lists the directory given by *dir*.
- The 3-tuples have the form *(name, type, inode)*:
+ The tuples have the form *(name, type, inode[, size])*:
- *name* is a string (or bytes if *dir* is a bytes object) and is the name of
the entry;
@@ -55,6 +55,10 @@ Filesystem access
directories and 0x8000 for regular files;
- *inode* is an integer corresponding to the inode of the file, and may be 0
for filesystems that don't have such a notion.
+ - Some platforms may return a 4-tuple that includes the entry's *size*. For
+ file entries, *size* is an integer representing the size of the file
+ or -1 if unknown. Its meaning is currently undefined for directory
+ entries.
.. function:: listdir([dir])
diff --git a/extmod/vfs.c b/extmod/vfs.c
index 105a80a8d..0585de1c7 100644
--- a/extmod/vfs.c
+++ b/extmod/vfs.c
@@ -366,9 +366,7 @@ mp_obj_t mp_vfs_listdir(size_t n_args, const mp_obj_t *args) {
mp_obj_t dir_list = mp_obj_new_list(0, NULL);
mp_obj_t next;
while ((next = mp_iternext(iter)) != MP_OBJ_STOP_ITERATION) {
- mp_obj_t *items;
- mp_obj_get_array_fixed_n(next, 3, &items);
- mp_obj_list_append(dir_list, items[0]);
+ mp_obj_list_append(dir_list, mp_obj_subscr(next, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL));
}
return dir_list;
}
diff --git a/extmod/vfs_fat.c b/extmod/vfs_fat.c
index 0177f5129..5666a6b0c 100644
--- a/extmod/vfs_fat.c
+++ b/extmod/vfs_fat.c
@@ -142,8 +142,8 @@ STATIC mp_obj_t mp_vfs_fat_ilistdir_it_iternext(mp_obj_t self_in) {
// Note that FatFS already filters . and .., so we don't need to
- // make 3-tuple with info about this entry
- mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(3, NULL));
+ // make 4-tuple with info about this entry
+ mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(4, NULL));
if (self->is_str) {
t->items[0] = mp_obj_new_str(fn, strlen(fn));
} else {
@@ -157,6 +157,7 @@ STATIC mp_obj_t mp_vfs_fat_ilistdir_it_iternext(mp_obj_t self_in) {
t->items[1] = MP_OBJ_NEW_SMALL_INT(MP_S_IFREG);
}
t->items[2] = MP_OBJ_NEW_SMALL_INT(0); // no inode number
+ t->items[3] = mp_obj_new_int_from_uint(fno.fsize);
return MP_OBJ_FROM_PTR(t);
}
diff --git a/tests/extmod/vfs_fat_fileio1.py.exp b/tests/extmod/vfs_fat_fileio1.py.exp
index 2d4792aa3..4eb50402c 100644
--- a/tests/extmod/vfs_fat_fileio1.py.exp
+++ b/tests/extmod/vfs_fat_fileio1.py.exp
@@ -10,7 +10,7 @@ e
o
d
True
-[('foo_dir', 16384, 0)]
+[('foo_dir', 16384, 0, 0)]
MemoryError
x0
x1
diff --git a/tests/extmod/vfs_fat_fileio2.py.exp b/tests/extmod/vfs_fat_fileio2.py.exp
index 118dee26b..268405364 100644
--- a/tests/extmod/vfs_fat_fileio2.py.exp
+++ b/tests/extmod/vfs_fat_fileio2.py.exp
@@ -3,9 +3,9 @@ True
True
b'data in file'
True
-[('sub_file.txt', 32768, 0), ('file.txt', 32768, 0)]
-[('foo_dir', 16384, 0), ('moved-to-root.txt', 32768, 0)]
-[('foo_dir', 16384, 0), ('moved-to-root.txt', 32768, 0)]
+[('sub_file.txt', 32768, 0, 11), ('file.txt', 32768, 0, 12)]
+[('foo_dir', 16384, 0, 0), ('moved-to-root.txt', 32768, 0, 12)]
+[('foo_dir', 16384, 0, 0), ('moved-to-root.txt', 32768, 0, 8)]
new text
-[('moved-to-root.txt', 32768, 0)]
+[('moved-to-root.txt', 32768, 0, 8)]
ENOSPC: True
diff --git a/tests/extmod/vfs_fat_oldproto.py.exp b/tests/extmod/vfs_fat_oldproto.py.exp
index ab8338cbb..b97468316 100644
--- a/tests/extmod/vfs_fat_oldproto.py.exp
+++ b/tests/extmod/vfs_fat_oldproto.py.exp
@@ -1,3 +1,3 @@
-[('file.txt', 32768, 0)]
+[('file.txt', 32768, 0, 6)]
hello!
[]
diff --git a/tests/extmod/vfs_fat_ramdisk.py.exp b/tests/extmod/vfs_fat_ramdisk.py.exp
index ccd0f7134..ef6cf1e72 100644
--- a/tests/extmod/vfs_fat_ramdisk.py.exp
+++ b/tests/extmod/vfs_fat_ramdisk.py.exp
@@ -3,7 +3,7 @@ True
statvfs: (512, 512, 16, 16, 16, 0, 0, 0, 0, 255)
getcwd: /
True
-[('foo_file.txt', 32768, 0)]
+[('foo_file.txt', 32768, 0, 6)]
stat root: (16384, 0, 0, 0, 0, 0, 0, 0, 0, 0)
stat file: (32768, 0, 0, 0, 0, 0, 6)
True
@@ -12,5 +12,5 @@ getcwd: /foo_dir
[]
True
getcwd: /
-[(b'foo_file.txt', 32768, 0), (b'foo_dir', 16384, 0)]
+[(b'foo_file.txt', 32768, 0, 6), (b'foo_dir', 16384, 0, 0)]
ENOENT: True