mirror of
https://github.com/eledio-devices/thirdparty-littlefs.git
synced 2025-11-02 00:38:28 +01:00
Compare commits
15 Commits
fix-sanity
...
thread-saf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80494b0bda | ||
|
|
f507a5c483 | ||
|
|
1c5081adb8 | ||
|
|
aab8df756f | ||
|
|
a15a060d90 | ||
|
|
d46cefc71c | ||
|
|
3964e4e1c7 | ||
|
|
def0228266 | ||
|
|
1f831e234a | ||
|
|
b477e0d8e8 | ||
|
|
be364e8721 | ||
|
|
1ecef83c7a | ||
|
|
f195ffe74c | ||
|
|
16e48ca21b | ||
|
|
b4ab86ee3a |
16
.travis.yml
16
.travis.yml
@@ -208,22 +208,6 @@ jobs:
|
|||||||
script:
|
script:
|
||||||
- make test TFLAGS+="-k --valgrind"
|
- make test TFLAGS+="-k --valgrind"
|
||||||
|
|
||||||
# test compilation in read-only mode
|
|
||||||
- stage: test
|
|
||||||
env:
|
|
||||||
- NAME=littlefs-readonly
|
|
||||||
- CC="arm-linux-gnueabi-gcc --static -mthumb"
|
|
||||||
- CFLAGS="-Werror -DLFS_READONLY"
|
|
||||||
if: branch !~ -prefix$
|
|
||||||
install:
|
|
||||||
- *install-common
|
|
||||||
- sudo apt-get install
|
|
||||||
gcc-arm-linux-gnueabi
|
|
||||||
libc6-dev-armel-cross
|
|
||||||
- arm-linux-gnueabi-gcc --version
|
|
||||||
# report-size will compile littlefs and report the size
|
|
||||||
script: [*report-size]
|
|
||||||
|
|
||||||
# test compilation in thread-safe mode
|
# test compilation in thread-safe mode
|
||||||
- stage: test
|
- stage: test
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -221,11 +221,6 @@ License Identifiers that are here available: http://spdx.org/licenses/
|
|||||||
- [littlefs-js] - A javascript wrapper for littlefs. I'm not sure why you would
|
- [littlefs-js] - A javascript wrapper for littlefs. I'm not sure why you would
|
||||||
want this, but it is handy for demos. You can see it in action
|
want this, but it is handy for demos. You can see it in action
|
||||||
[here][littlefs-js-demo].
|
[here][littlefs-js-demo].
|
||||||
|
|
||||||
- [littlefs-python] - A Python wrapper for littlefs. The project allows you
|
|
||||||
to create images of the filesystem on your PC. Check if littlefs will fit
|
|
||||||
your needs, create images for a later download to the target memory or
|
|
||||||
inspect the content of a binary image of the target memory.
|
|
||||||
|
|
||||||
- [mklfs] - A command line tool built by the [Lua RTOS] guys for making
|
- [mklfs] - A command line tool built by the [Lua RTOS] guys for making
|
||||||
littlefs images from a host PC. Supports Windows, Mac OS, and Linux.
|
littlefs images from a host PC. Supports Windows, Mac OS, and Linux.
|
||||||
@@ -255,4 +250,3 @@ License Identifiers that are here available: http://spdx.org/licenses/
|
|||||||
[LittleFileSystem]: https://os.mbed.com/docs/mbed-os/v5.12/apis/littlefilesystem.html
|
[LittleFileSystem]: https://os.mbed.com/docs/mbed-os/v5.12/apis/littlefilesystem.html
|
||||||
[SPIFFS]: https://github.com/pellepl/spiffs
|
[SPIFFS]: https://github.com/pellepl/spiffs
|
||||||
[Dhara]: https://github.com/dlbeer/dhara
|
[Dhara]: https://github.com/dlbeer/dhara
|
||||||
[littlefs-python]: https://pypi.org/project/littlefs-python/
|
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ int lfs_testbd_prog(const struct lfs_config *cfg, lfs_block_t block,
|
|||||||
bd->power_cycles -= 1;
|
bd->power_cycles -= 1;
|
||||||
if (bd->power_cycles == 0) {
|
if (bd->power_cycles == 0) {
|
||||||
// sync to make sure we persist the last changes
|
// sync to make sure we persist the last changes
|
||||||
LFS_ASSERT(lfs_testbd_rawsync(cfg) == 0);
|
assert(lfs_testbd_rawsync(cfg) == 0);
|
||||||
// simulate power loss
|
// simulate power loss
|
||||||
exit(33);
|
exit(33);
|
||||||
}
|
}
|
||||||
@@ -254,7 +254,7 @@ int lfs_testbd_erase(const struct lfs_config *cfg, lfs_block_t block) {
|
|||||||
bd->power_cycles -= 1;
|
bd->power_cycles -= 1;
|
||||||
if (bd->power_cycles == 0) {
|
if (bd->power_cycles == 0) {
|
||||||
// sync to make sure we persist the last changes
|
// sync to make sure we persist the last changes
|
||||||
LFS_ASSERT(lfs_testbd_rawsync(cfg) == 0);
|
assert(lfs_testbd_rawsync(cfg) == 0);
|
||||||
// simulate power loss
|
// simulate power loss
|
||||||
exit(33);
|
exit(33);
|
||||||
}
|
}
|
||||||
|
|||||||
29
lfs.h
29
lfs.h
@@ -22,7 +22,7 @@ extern "C"
|
|||||||
// Software library version
|
// Software library version
|
||||||
// Major (top-nibble), incremented on backwards incompatible changes
|
// Major (top-nibble), incremented on backwards incompatible changes
|
||||||
// Minor (bottom-nibble), incremented on feature additions
|
// Minor (bottom-nibble), incremented on feature additions
|
||||||
#define LFS_VERSION 0x00020003
|
#define LFS_VERSION 0x00020002
|
||||||
#define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16))
|
#define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16))
|
||||||
#define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0))
|
#define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0))
|
||||||
|
|
||||||
@@ -124,25 +124,20 @@ enum lfs_type {
|
|||||||
enum lfs_open_flags {
|
enum lfs_open_flags {
|
||||||
// open flags
|
// open flags
|
||||||
LFS_O_RDONLY = 1, // Open a file as read only
|
LFS_O_RDONLY = 1, // Open a file as read only
|
||||||
#ifndef LFS_READONLY
|
|
||||||
LFS_O_WRONLY = 2, // Open a file as write only
|
LFS_O_WRONLY = 2, // Open a file as write only
|
||||||
LFS_O_RDWR = 3, // Open a file as read and write
|
LFS_O_RDWR = 3, // Open a file as read and write
|
||||||
LFS_O_CREAT = 0x0100, // Create a file if it does not exist
|
LFS_O_CREAT = 0x0100, // Create a file if it does not exist
|
||||||
LFS_O_EXCL = 0x0200, // Fail if a file already exists
|
LFS_O_EXCL = 0x0200, // Fail if a file already exists
|
||||||
LFS_O_TRUNC = 0x0400, // Truncate the existing file to zero size
|
LFS_O_TRUNC = 0x0400, // Truncate the existing file to zero size
|
||||||
LFS_O_APPEND = 0x0800, // Move to end of file on every write
|
LFS_O_APPEND = 0x0800, // Move to end of file on every write
|
||||||
#endif
|
|
||||||
|
|
||||||
// internally used flags
|
// internally used flags
|
||||||
#ifndef LFS_READONLY
|
|
||||||
LFS_F_DIRTY = 0x010000, // File does not match storage
|
LFS_F_DIRTY = 0x010000, // File does not match storage
|
||||||
LFS_F_WRITING = 0x020000, // File has been written since last flush
|
LFS_F_WRITING = 0x020000, // File has been written since last flush
|
||||||
#endif
|
|
||||||
LFS_F_READING = 0x040000, // File has been read since last flush
|
LFS_F_READING = 0x040000, // File has been read since last flush
|
||||||
#ifndef LFS_READONLY
|
LFS_F_ERRED = 0x080000, // An error occured during write
|
||||||
LFS_F_ERRED = 0x080000, // An error occurred during write
|
|
||||||
#endif
|
|
||||||
LFS_F_INLINE = 0x100000, // Currently inlined in directory entry
|
LFS_F_INLINE = 0x100000, // Currently inlined in directory entry
|
||||||
|
LFS_F_OPENED = 0x200000, // File has been opened
|
||||||
};
|
};
|
||||||
|
|
||||||
// File seek flags
|
// File seek flags
|
||||||
@@ -415,7 +410,6 @@ typedef struct lfs {
|
|||||||
|
|
||||||
/// Filesystem functions ///
|
/// Filesystem functions ///
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Format a block device with the littlefs
|
// Format a block device with the littlefs
|
||||||
//
|
//
|
||||||
// Requires a littlefs object and config struct. This clobbers the littlefs
|
// Requires a littlefs object and config struct. This clobbers the littlefs
|
||||||
@@ -424,7 +418,6 @@ typedef struct lfs {
|
|||||||
//
|
//
|
||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_format(lfs_t *lfs, const struct lfs_config *config);
|
int lfs_format(lfs_t *lfs, const struct lfs_config *config);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Mounts a littlefs
|
// Mounts a littlefs
|
||||||
//
|
//
|
||||||
@@ -444,15 +437,12 @@ int lfs_unmount(lfs_t *lfs);
|
|||||||
|
|
||||||
/// General operations ///
|
/// General operations ///
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Removes a file or directory
|
// Removes a file or directory
|
||||||
//
|
//
|
||||||
// If removing a directory, the directory must be empty.
|
// If removing a directory, the directory must be empty.
|
||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_remove(lfs_t *lfs, const char *path);
|
int lfs_remove(lfs_t *lfs, const char *path);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Rename or move a file or directory
|
// Rename or move a file or directory
|
||||||
//
|
//
|
||||||
// If the destination exists, it must match the source in type.
|
// If the destination exists, it must match the source in type.
|
||||||
@@ -460,7 +450,6 @@ int lfs_remove(lfs_t *lfs, const char *path);
|
|||||||
//
|
//
|
||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath);
|
int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Find info about a file or directory
|
// Find info about a file or directory
|
||||||
//
|
//
|
||||||
@@ -483,7 +472,6 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info);
|
|||||||
lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path,
|
lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path,
|
||||||
uint8_t type, void *buffer, lfs_size_t size);
|
uint8_t type, void *buffer, lfs_size_t size);
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Set custom attributes
|
// Set custom attributes
|
||||||
//
|
//
|
||||||
// Custom attributes are uniquely identified by an 8-bit type and limited
|
// Custom attributes are uniquely identified by an 8-bit type and limited
|
||||||
@@ -493,16 +481,13 @@ lfs_ssize_t lfs_getattr(lfs_t *lfs, const char *path,
|
|||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_setattr(lfs_t *lfs, const char *path,
|
int lfs_setattr(lfs_t *lfs, const char *path,
|
||||||
uint8_t type, const void *buffer, lfs_size_t size);
|
uint8_t type, const void *buffer, lfs_size_t size);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Removes a custom attribute
|
// Removes a custom attribute
|
||||||
//
|
//
|
||||||
// If an attribute is not found, nothing happens.
|
// If an attribute is not found, nothing happens.
|
||||||
//
|
//
|
||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type);
|
int lfs_removeattr(lfs_t *lfs, const char *path, uint8_t type);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/// File operations ///
|
/// File operations ///
|
||||||
@@ -551,7 +536,6 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file);
|
|||||||
lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file,
|
lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file,
|
||||||
void *buffer, lfs_size_t size);
|
void *buffer, lfs_size_t size);
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Write data to file
|
// Write data to file
|
||||||
//
|
//
|
||||||
// Takes a buffer and size indicating the data to write. The file will not
|
// Takes a buffer and size indicating the data to write. The file will not
|
||||||
@@ -560,7 +544,6 @@ lfs_ssize_t lfs_file_read(lfs_t *lfs, lfs_file_t *file,
|
|||||||
// Returns the number of bytes written, or a negative error code on failure.
|
// Returns the number of bytes written, or a negative error code on failure.
|
||||||
lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
|
lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
|
||||||
const void *buffer, lfs_size_t size);
|
const void *buffer, lfs_size_t size);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Change the position of the file
|
// Change the position of the file
|
||||||
//
|
//
|
||||||
@@ -569,12 +552,10 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
|
|||||||
lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file,
|
lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file,
|
||||||
lfs_soff_t off, int whence);
|
lfs_soff_t off, int whence);
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Truncates the size of the file to the specified size
|
// Truncates the size of the file to the specified size
|
||||||
//
|
//
|
||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size);
|
int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Return the position of the file
|
// Return the position of the file
|
||||||
//
|
//
|
||||||
@@ -597,12 +578,10 @@ lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file);
|
|||||||
|
|
||||||
/// Directory operations ///
|
/// Directory operations ///
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
// Create a directory
|
// Create a directory
|
||||||
//
|
//
|
||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_mkdir(lfs_t *lfs, const char *path);
|
int lfs_mkdir(lfs_t *lfs, const char *path);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Open a directory
|
// Open a directory
|
||||||
//
|
//
|
||||||
@@ -664,7 +643,6 @@ lfs_ssize_t lfs_fs_size(lfs_t *lfs);
|
|||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data);
|
int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data);
|
||||||
|
|
||||||
#ifndef LFS_READONLY
|
|
||||||
#ifdef LFS_MIGRATE
|
#ifdef LFS_MIGRATE
|
||||||
// Attempts to migrate a previous version of littlefs
|
// Attempts to migrate a previous version of littlefs
|
||||||
//
|
//
|
||||||
@@ -679,7 +657,6 @@ int lfs_fs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data);
|
|||||||
// Returns a negative error code on failure.
|
// Returns a negative error code on failure.
|
||||||
int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg);
|
int lfs_migrate(lfs_t *lfs, const struct lfs_config *cfg);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ def main(args):
|
|||||||
struct.unpack('<HH', superblock[1].data[0:4].ljust(4, b'\xff'))))
|
struct.unpack('<HH', superblock[1].data[0:4].ljust(4, b'\xff'))))
|
||||||
print("%-47s%s" % ("littlefs v%s.%s" % version,
|
print("%-47s%s" % ("littlefs v%s.%s" % version,
|
||||||
"data (truncated, if it fits)"
|
"data (truncated, if it fits)"
|
||||||
if not any([args.no_truncate, args.log, args.all]) else ""))
|
if not any([args.no_truncate, args.tags, args.log, args.all]) else ""))
|
||||||
|
|
||||||
# print gstate
|
# print gstate
|
||||||
print("gstate 0x%s" % ''.join('%02x' % c for c in gstate))
|
print("gstate 0x%s" % ''.join('%02x' % c for c in gstate))
|
||||||
|
|||||||
Reference in New Issue
Block a user