summaryrefslogtreecommitdiff
path: root/extmod/vfs_fat.c
AgeCommit message (Collapse)Author
2020-07-06Add license to some obvious files.Diego Elio Pettenò
2020-02-14avoid os.stat() int overflow on smallint-only buildsDan Halbert
2019-12-04protocols: Allow them to be (optionally) type-safeJeff Epler
Protocols are nice, but there is no way for C code to verify whether a type's "protocol" structure actually implements some particular protocol. As a result, you can pass an object that implements the "vfs" protocol to one that expects the "stream" protocol, and the opposite of awesomeness ensues. This patch adds an OPTIONAL (but enabled by default) protocol identifier as the first member of any protocol structure. This identifier is simply a unique QSTR chosen by the protocol designer and used by each protocol implementer. When checking for protocol support, instead of just checking whether the object's type has a non-NULL protocol field, use `mp_proto_get` which implements the protocol check when possible. The existing protocols are now named: protocol_framebuf protocol_i2c protocol_pin protocol_stream protocol_spi protocol_vfs (most of these are unused in CP and are just inherited from MP; vfs and stream are definitely used though) I did not find any crashing examples, but here's one to give a flavor of what is improved, using `micropython_coverage`. Before the change, the vfs "ioctl" protocol is invoked, and the result is not intelligible as json (but it could have resulted in a hard fault, potentially): >>> import uos, ujson >>> u = uos.VfsPosix('/tmp') >>> ujson.load(u) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: syntax error in JSON After the change, the vfs object is correctly detected as not supporting the stream protocol: >>> ujson.load(p) Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: stream operation not supported
2019-03-13Prevent other filesystem changes besides file writesScott Shawcroft
Such as moving files, adding directories and changing the label.
2019-03-13Throw an error when moving a directory into itself.Scott Shawcroft
Fixes #1192
2019-01-14py changes for supporting superclass constructors that take kwargsScott Shawcroft
2018-08-25Fix os.stat() to use 1970 epochNoralf Trønnes
Commit 95e70cd0ea6d 'time: Use 1970 epoch' changed epoch for the time module, but not for other users. This patch does the same for the only other core timeutils user: extmod/vfs_fat.c:fat_vfs_stat(). Other timeutils users: cc3200, esp8266 and stm32, are not changed. Ports that don't use long ints, will still get wrong time values from os.stat().
2018-08-09Two fixes and translate more strings.Scott Shawcroft
* Fix finding translations with escaped characters. * Add back \r to translations since its needed by screen.
2018-07-13compiles and runs; hangs on import storage;storage.VfsFat.<tab>Dan Halbert
2018-07-11WIP: after merge; before testingDan Halbert
2018-06-06extmod/vfs: Introduce a C-level VFS protocol, with fast import_stat.Damien George
Following other C-level protocols, this VFS protocol is added to help abstract away implementation details of the underlying VFS in an efficient way. As a starting point, the import_stat function is put into this protocol so that the VFS sub-system does not need to know about every VFS implementation in order to do an efficient stat for importing files. In the future it might be worth adding other functions to this protocol.
2018-03-27Specifically give a better error message for setlabel on RO fsJeff Epler
2018-03-27Add VfsFat.label propertyJeff Epler
These allow accessing the filesystem label. For instance, in boot.py, you can set the label on the built-in storage with: storage.remount('/', False) storage.getmount('/').label = "NEWLABEL" storage.remount('/', True) Users with multiple CIRCUITPY boards may find it desirable to choose a different label for each board they own.
2018-03-12extmod/vfs_fat: Add file size as 4th element of uos.ilistdir tuple.Tom Collins
2018-02-23extmod/vfs_fat: Make fat_vfs_open_obj wrapper public, not its function.Damien George
This patch just moves the definition of the wrapper object fat_vfs_open_obj to the location of the definition of its function, which matches how it's done in most other places in the code base.
2018-02-23extmod/vfs_fat: Merge remaining vfs_fat_misc.c code into vfs_fat.c.Damien George
The only function left in vfs_fat_misc.c is fat_vfs_import_stat() which can logically go into vfs_fat.c, allowing to remove vfs_fat_misc.c.
2018-02-23extmod/vfs_fat: Move ilistdir implementation from misc to main file.Damien George
The fat_vfs_ilistdir2() function was only used by fat_vfs_ilistdir_func() so moving the former into the same file as the latter allows it to be placed directly into the latter function, thus saving code size.
2017-11-20extmod/vfs_fat: Mount FatFS on creation so VFS methods can be used.Damien George
It's possible to use the methods (eg ilistdir) of a VFS FatFS object without it being mounted in the VFS itself. This previously worked but only because FatFS was "mounting" the filesystem automatically when any function (eg f_opendir) was called. But it didn't work for ports that used synchronisation objects (_FS_REENTRANT) because they are only initialised via a call to f_mount. So, call f_mount explicitly when creating a new FatFS object so that everything is set up correctly. Then also provide a finaliser to do the f_umount call, but only if synchronisation objects are enabled (since otherwise the f_umount call does nothing).
2017-11-16py/objstr: Remove "make_qstr_if_not_already" arg from mp_obj_new_str.Damien George
This patch simplifies the str creation API to favour the common case of creating a str object that is not forced to be interned. To force interning of a new str the new mp_obj_new_str_via_qstr function is added, and should only be used if warranted. Apart from simplifying the mp_obj_new_str function (and making it have the same signature as mp_obj_new_bytes), this patch also reduces code size by a bit (-16 bytes for bare-arm and roughly -40 bytes on the bare-metal archs).
2017-10-04all: Remove inclusion of internal py header files.Damien George
Header files that are considered internal to the py core and should not normally be included directly are: py/nlr.h - internal nlr configuration and declarations py/bc0.h - contains bytecode macro definitions py/runtime0.h - contains basic runtime enums Instead, the top-level header files to include are one of: py/obj.h - includes runtime0.h and defines everything to use the mp_obj_t type py/runtime.h - includes mpstate.h and hence nlr.h, obj.h, runtime0.h, and defines everything to use the general runtime support functions Additional, specific headers (eg py/objlist.h) can be included if needed.
2017-08-21extmod,unix: For uos.stat interpret st_size member as an unsigned int.Damien George
This prevents large files (eg larger than 2gb on a 32-bit arch) from showing up as having a negative size. Fixes issue #3227.
2017-05-10extmod/vfs: Use MP_S_IFDIR, MP_S_IFREG consts instead of magic numbers.Damien George
2017-05-10extmod/vfs_fat: Replace listdir() with implementation of ilistdir().Damien George
VfsFat no longer has the listdir() method. Rather, if listdir() functionality is needed then one should use uos.listdir() which will call VfsFat.ilistdir().
2017-03-29extmod/vfs_fat: Fix calculation of total blocks in statvfs.Damien George
2017-03-10extmod/vfs_fat: Remove obsolete and unused str/len members.Damien George
2017-01-30extmod/vfs_fat.c: Use explicit include path for timeutils.h.Andrew Gatt
2017-01-30extmod: Merge old fsusermount.h header into vfs.h and vfs_fat.h.Damien George
vfs.h is for generic VFS declarations, and vfs_fat.h is for VfsFat specific things.
2017-01-30extmod/vfs_fat: Remove MICROPY_FATFS_OO config option.Damien George
Everyone should now be using the new ooFatFs library. The old one is no longer supported and will be removed.
2017-01-27extmod/vfs_fat: Use SECSIZE macro to determine FatFs sector size.Damien George
2017-01-27extmod/vfs_fat: Rework to support new generic VFS sub-system.Damien George
The VfsFat object can now be mounted by the generic VFS sub-system.
2017-01-27extmod: Rename vfs_fat_file.h to vfs_fat.h.Damien George
And move declaration of mp_fat_vfs_type to this file.
2017-01-27extmod/vfs_fat: Rework so it can optionally use OO version of FatFS.Damien George
If MICROPY_VFS_FAT is enabled by a port then the port must switch to using MICROPY_FATFS_OO. Otherwise a port can continue to use the FatFs code without any changes.
2016-12-02extmod/vfs_fat: Implement POSIX behaviour of rename, allow to overwrite.Damien George
If the destination of os.rename() exists then it will be overwritten if it is a file. This is the POSIX behaviour, which is also the CPython behaviour, and so we follow suit. See issue #2598 for discussion.
2016-10-11extmod/vfs_fat: Add file and directory checks for remove and rmdir.Alex March
2016-10-07extmod/vfs_fat: Use mp_raise_OSError helper function.Damien George
2016-09-27extmod/vfs_fat: Add fat_vfs_statvfs(), reused from stmhal.Alex March
2016-08-26esp8266/modous: Add os.umount method to unmount a filesystem.Radomir Dopieralski
This is an object-oriented approach, where uos is only a proxy for the methods on the vfs object. Some internals had to be exposed (the STATIC keyword removed) for this to work. Fixes #2338.
2016-07-16extmod/vfs_fat: Implement rmdir() method.Paul Sokolovsky
Shares the code with remove() method due to the same underlying f_unlink() FatFs operation.
2016-06-16esp8266: Use RTC to set date & time stamps for files.Robert HH
The time stamp is taken from the RTC for all newly generated or changed files. RTC must be maintained separately. The dummy time stamp of Jan 1, 2000 is set in vfs.stat() for the root directory, avoiding invalid time values.
2016-05-31extmod/vfs_fat: Mark anused "self" arg for fat_vfs_stat().Paul Sokolovsky
2016-05-31extmod/vfs_fat.c: Add vfs.stat().Robert HH
The call to stat() returns a 10 element tuple consistent to the os.stat() call. At the moment, the only relevant information returned are file type and file size.
2016-05-29extmod/vfs_fat: getcwd(): Use mp_obj_new_exception_arg1().Paul Sokolovsky
Copy-paste issue, with the original mistake in stmhal.
2016-05-29extmod/vfs_fat: chdir(), getcwd() methods should accept VFS object (self).Paul Sokolovsky
2016-05-29extmod/vfs_fat: Add getcwd() method.Paul Sokolovsky
Ported from stmhal.
2016-05-29extmod/vfs_fat: Add chdir() method.Paul Sokolovsky
Ported from stmhal.
2016-05-27extmod/vfs_fat*: Replace text error messages by POSIX error numbers.Robert HH
These changes are in line with similar changes in other modules, and with standard Python interface.
2016-05-20extmod: When including extmod headers, prefix path with extmod/.Damien George
2016-02-29extmod/vfs_fat: Add .rename() method.Paul Sokolovsky
2016-02-29extmod/vfs_fat: Add .mkdir() method.Paul Sokolovsky
2016-02-28extmod/vfs_fat: Fix unused param warning/error.Paul Sokolovsky