summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorTom Collins <tom.collins@digi.com>2018-03-08 16:02:26 -0800
committerDamien George <damien.p.george@gmail.com>2018-03-12 12:26:36 +1100
commit4d3a92c67c9b1550eaf07d06ed74de996ee8fa3b (patch)
treeed0c98b17d40ac5c738d7a668dc2a6b80ec5baea
parent1345093401ed0812aa72dc5206cb8fd5fe61917f (diff)
downloadmicropython-4d3a92c67c9b1550eaf07d06ed74de996ee8fa3b.tar.gz
micropython-4d3a92c67c9b1550eaf07d06ed74de996ee8fa3b.zip
extmod/vfs_fat: Add file size as 4th element of uos.ilistdir tuple.
-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 85adb6a4dd..27f339bb16 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 105a80a8df..0585de1c72 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 0177f5129b..5666a6b0c1 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 2d4792aa3b..4eb50402c4 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 118dee26b5..2684053641 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 ab8338cbba..b974683167 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 ccd0f7134c..ef6cf1e72b 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