extmod/vfs_fat: Add file size as 4th element of uos.ilistdir tuple.
This commit is contained in:
parent
1345093401
commit
4d3a92c67c
@ -43,11 +43,11 @@ Filesystem access
|
|||||||
|
|
||||||
.. function:: ilistdir([dir])
|
.. 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
|
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*.
|
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
|
- *name* is a string (or bytes if *dir* is a bytes object) and is the name of
|
||||||
the entry;
|
the entry;
|
||||||
@ -55,6 +55,10 @@ Filesystem access
|
|||||||
directories and 0x8000 for regular files;
|
directories and 0x8000 for regular files;
|
||||||
- *inode* is an integer corresponding to the inode of the file, and may be 0
|
- *inode* is an integer corresponding to the inode of the file, and may be 0
|
||||||
for filesystems that don't have such a notion.
|
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])
|
.. function:: listdir([dir])
|
||||||
|
|
||||||
|
@ -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 dir_list = mp_obj_new_list(0, NULL);
|
||||||
mp_obj_t next;
|
mp_obj_t next;
|
||||||
while ((next = mp_iternext(iter)) != MP_OBJ_STOP_ITERATION) {
|
while ((next = mp_iternext(iter)) != MP_OBJ_STOP_ITERATION) {
|
||||||
mp_obj_t *items;
|
mp_obj_list_append(dir_list, mp_obj_subscr(next, MP_OBJ_NEW_SMALL_INT(0), MP_OBJ_SENTINEL));
|
||||||
mp_obj_get_array_fixed_n(next, 3, &items);
|
|
||||||
mp_obj_list_append(dir_list, items[0]);
|
|
||||||
}
|
}
|
||||||
return dir_list;
|
return dir_list;
|
||||||
}
|
}
|
||||||
|
@ -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
|
// Note that FatFS already filters . and .., so we don't need to
|
||||||
|
|
||||||
// make 3-tuple with info about this entry
|
// make 4-tuple with info about this entry
|
||||||
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(3, NULL));
|
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(4, NULL));
|
||||||
if (self->is_str) {
|
if (self->is_str) {
|
||||||
t->items[0] = mp_obj_new_str(fn, strlen(fn));
|
t->items[0] = mp_obj_new_str(fn, strlen(fn));
|
||||||
} else {
|
} 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[1] = MP_OBJ_NEW_SMALL_INT(MP_S_IFREG);
|
||||||
}
|
}
|
||||||
t->items[2] = MP_OBJ_NEW_SMALL_INT(0); // no inode number
|
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);
|
return MP_OBJ_FROM_PTR(t);
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ e
|
|||||||
o
|
o
|
||||||
d
|
d
|
||||||
True
|
True
|
||||||
[('foo_dir', 16384, 0)]
|
[('foo_dir', 16384, 0, 0)]
|
||||||
MemoryError
|
MemoryError
|
||||||
x0
|
x0
|
||||||
x1
|
x1
|
||||||
|
@ -3,9 +3,9 @@ True
|
|||||||
True
|
True
|
||||||
b'data in file'
|
b'data in file'
|
||||||
True
|
True
|
||||||
[('sub_file.txt', 32768, 0), ('file.txt', 32768, 0)]
|
[('sub_file.txt', 32768, 0, 11), ('file.txt', 32768, 0, 12)]
|
||||||
[('foo_dir', 16384, 0), ('moved-to-root.txt', 32768, 0)]
|
[('foo_dir', 16384, 0, 0), ('moved-to-root.txt', 32768, 0, 12)]
|
||||||
[('foo_dir', 16384, 0), ('moved-to-root.txt', 32768, 0)]
|
[('foo_dir', 16384, 0, 0), ('moved-to-root.txt', 32768, 0, 8)]
|
||||||
new text
|
new text
|
||||||
[('moved-to-root.txt', 32768, 0)]
|
[('moved-to-root.txt', 32768, 0, 8)]
|
||||||
ENOSPC: True
|
ENOSPC: True
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[('file.txt', 32768, 0)]
|
[('file.txt', 32768, 0, 6)]
|
||||||
hello!
|
hello!
|
||||||
[]
|
[]
|
||||||
|
@ -3,7 +3,7 @@ True
|
|||||||
statvfs: (512, 512, 16, 16, 16, 0, 0, 0, 0, 255)
|
statvfs: (512, 512, 16, 16, 16, 0, 0, 0, 0, 255)
|
||||||
getcwd: /
|
getcwd: /
|
||||||
True
|
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 root: (16384, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
stat file: (32768, 0, 0, 0, 0, 0, 6)
|
stat file: (32768, 0, 0, 0, 0, 0, 6)
|
||||||
True
|
True
|
||||||
@ -12,5 +12,5 @@ getcwd: /foo_dir
|
|||||||
[]
|
[]
|
||||||
True
|
True
|
||||||
getcwd: /
|
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
|
ENOENT: True
|
||||||
|
Loading…
Reference in New Issue
Block a user