Compare commits

...

13 Commits

Author SHA1 Message Date
liaoweixiong
ab56dc5a8b README: fix incorrect description
In my point of view, file updates will commit to filesystem only when
sync or close. There is a extra word 'no' here.

Fixes: bdff4bc59e ("Updated DESIGN.md to reflect v2 changes")
Signed-off-by: liaoweixiong <liaoweixiong@allwinnertech.com>
2019-11-15 18:53:53 +08:00
Christopher Haster
6b65737715 Merge pull request #308 from roykuper13/readme-example-update-block-cycles
Update readme example code in accordance to the block_cycles change
2019-10-15 10:36:42 -05:00
Christopher Haster
4ebe6030c5 Merge pull request #294 from ARMmbed/fix-max-null-tests
Fixed off-by-one null terminator in tests
2019-10-15 10:36:04 -05:00
Christopher Haster
7ae8d778f1 Merge pull request #299 from sipke/sipke/fix-types-for-16bit-machines-v2
fix types for 16bit machines v2
2019-10-15 10:35:47 -05:00
Roy Kupershmid
4d068a154d Update README example code in accordance to the block_cycles change
An addition to 38a2a8d. When executing the given example in README,
you immediately get an assertion error because block_cycles is initiated to 0.
2019-10-13 20:27:18 +03:00
Sipke Vriend
ba088aa213 lfs_dir_*: Cast error return codes to int.
For correctness, cast the lfs_stag_t variables to int when returning a negative error code.
2019-10-01 15:24:17 +10:00
Sipke Vriend
955b296bcc lfs_file_rewind: Cast error return codes to int.
For correctness, cast the lfs_stag_t variables to int when returning a negative error code.
2019-10-01 14:22:25 +10:00
Sipke Vriend
241dbc6f86 lfs_stat: Cast error return codes to int.
For correctness, cast the lfs_stag_t variables to int when returning a negative error code.
2019-10-01 14:22:01 +10:00
Sipke Vriend
8cca58f1a6 lfs_file_truncate: ensure lfs_file_seek return code is lsf_soff_t and cast error returns
To ensure 16 bit devices do not invalidly truncate lfs_file_write return codes, change
the return variable to be lfs_ssize_t which is the lfs_file_write return code and
cast to int if it is a negative error code.
2019-10-01 14:20:43 +10:00
Sipke Vriend
97f86af4e9 lfs_remove: Cast tag/error return codes to int.
For correctness, cast the lfs_stag_t variables to int when returning a negative error code.
2019-10-01 13:56:51 +10:00
Sipke Vriend
d40302c5e3 lfs_rename: Cast error return codes to int.
For correctness, cast the lfs_stag_t variables to int when returning a negative error code.
2019-10-01 13:51:52 +10:00
Sipke Vriend
0b5a78e2cd Adjust lfs_dir_find return code to ensure 32 bit value.
lfs_dir_find returns either a negative return code or a tag.
For 32 bit machines with int as 32 bits this co-incides, but for smaller
bit processors, we need to ensure a 32 bit value is returned so change
the return type to lfs_stag_t.
2019-10-01 11:52:02 +10:00
Christopher Haster
27b6cc829b Fixed off-by-one null terminator in tests
Found by mr-at-eo
2019-09-23 10:43:39 -05:00
3 changed files with 24 additions and 23 deletions

View File

@@ -53,6 +53,7 @@ const struct lfs_config cfg = {
.block_count = 128, .block_count = 128,
.cache_size = 16, .cache_size = 16,
.lookahead_size = 16, .lookahead_size = 16,
.block_cycles = 500,
}; };
// entry point // entry point
@@ -109,7 +110,7 @@ directory functions, with the deviation that the allocation of filesystem
structures must be provided by the user. structures must be provided by the user.
All POSIX operations, such as remove and rename, are atomic, even in event All POSIX operations, such as remove and rename, are atomic, even in event
of power-loss. Additionally, no file updates are not actually committed to of power-loss. Additionally, file updates are not actually committed to
the filesystem until sync or close is called on the file. the filesystem until sync or close is called on the file.
## Other notes ## Other notes

40
lfs.c
View File

@@ -977,7 +977,7 @@ static int lfs_dir_fetch(lfs_t *lfs,
lfs_mdir_t *dir, const lfs_block_t pair[2]) { lfs_mdir_t *dir, const lfs_block_t pair[2]) {
// note, mask=-1, tag=0 can never match a tag since this // note, mask=-1, tag=0 can never match a tag since this
// pattern has the invalid bit set // pattern has the invalid bit set
return lfs_dir_fetchmatch(lfs, dir, pair, -1, 0, NULL, NULL, NULL); return (int)lfs_dir_fetchmatch(lfs, dir, pair, -1, 0, NULL, NULL, NULL);
} }
static int lfs_dir_getgstate(lfs_t *lfs, const lfs_mdir_t *dir, static int lfs_dir_getgstate(lfs_t *lfs, const lfs_mdir_t *dir,
@@ -1010,7 +1010,7 @@ static int lfs_dir_getinfo(lfs_t *lfs, lfs_mdir_t *dir,
lfs_stag_t tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x780, 0x3ff, 0), lfs_stag_t tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x780, 0x3ff, 0),
LFS_MKTAG(LFS_TYPE_NAME, id, lfs->name_max+1), info->name); LFS_MKTAG(LFS_TYPE_NAME, id, lfs->name_max+1), info->name);
if (tag < 0) { if (tag < 0) {
return tag; return (int)tag;
} }
info->type = lfs_tag_type3(tag); info->type = lfs_tag_type3(tag);
@@ -1019,7 +1019,7 @@ static int lfs_dir_getinfo(lfs_t *lfs, lfs_mdir_t *dir,
tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x700, 0x3ff, 0), tag = lfs_dir_get(lfs, dir, LFS_MKTAG(0x700, 0x3ff, 0),
LFS_MKTAG(LFS_TYPE_STRUCT, id, sizeof(ctz)), &ctz); LFS_MKTAG(LFS_TYPE_STRUCT, id, sizeof(ctz)), &ctz);
if (tag < 0) { if (tag < 0) {
return tag; return (int)tag;
} }
lfs_ctz_fromle32(&ctz); lfs_ctz_fromle32(&ctz);
@@ -1062,7 +1062,7 @@ static int lfs_dir_find_match(void *data,
return LFS_CMP_EQ; return LFS_CMP_EQ;
} }
static int lfs_dir_find(lfs_t *lfs, lfs_mdir_t *dir, static lfs_stag_t lfs_dir_find(lfs_t *lfs, lfs_mdir_t *dir,
const char **path, uint16_t *id) { const char **path, uint16_t *id) {
// we reduce path to a single name if we can find it // we reduce path to a single name if we can find it
const char *name = *path; const char *name = *path;
@@ -3006,10 +3006,10 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) {
} else if (size > oldsize) { } else if (size > oldsize) {
// flush+seek if not already at end // flush+seek if not already at end
if (file->pos != oldsize) { if (file->pos != oldsize) {
int err = lfs_file_seek(lfs, file, 0, LFS_SEEK_END); lfs_soff_t res = lfs_file_seek(lfs, file, 0, LFS_SEEK_END);
if (err < 0) { if (res < 0) {
LFS_TRACE("lfs_file_truncate -> %d", err); LFS_TRACE("lfs_file_truncate -> %d", res);
return err; return (int)res;
} }
} }
@@ -3018,16 +3018,16 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) {
lfs_ssize_t res = lfs_file_write(lfs, file, &(uint8_t){0}, 1); lfs_ssize_t res = lfs_file_write(lfs, file, &(uint8_t){0}, 1);
if (res < 0) { if (res < 0) {
LFS_TRACE("lfs_file_truncate -> %d", res); LFS_TRACE("lfs_file_truncate -> %d", res);
return res; return (int)res;
} }
} }
} }
// restore pos // restore pos
int err = lfs_file_seek(lfs, file, pos, LFS_SEEK_SET); lfs_soff_t res = lfs_file_seek(lfs, file, pos, LFS_SEEK_SET);
if (err < 0) { if (res < 0) {
LFS_TRACE("lfs_file_truncate -> %d", err); LFS_TRACE("lfs_file_truncate -> %d", res);
return err; return (int)res;
} }
LFS_TRACE("lfs_file_truncate -> %d", 0); LFS_TRACE("lfs_file_truncate -> %d", 0);
@@ -3047,7 +3047,7 @@ int lfs_file_rewind(lfs_t *lfs, lfs_file_t *file) {
lfs_soff_t res = lfs_file_seek(lfs, file, 0, LFS_SEEK_SET); lfs_soff_t res = lfs_file_seek(lfs, file, 0, LFS_SEEK_SET);
if (res < 0) { if (res < 0) {
LFS_TRACE("lfs_file_rewind -> %d", res); LFS_TRACE("lfs_file_rewind -> %d", res);
return res; return (int)res;
} }
LFS_TRACE("lfs_file_rewind -> %d", 0); LFS_TRACE("lfs_file_rewind -> %d", 0);
@@ -3076,7 +3076,7 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) {
lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL);
if (tag < 0) { if (tag < 0) {
LFS_TRACE("lfs_stat -> %d", tag); LFS_TRACE("lfs_stat -> %d", tag);
return tag; return (int)tag;
} }
int err = lfs_dir_getinfo(lfs, &cwd, lfs_tag_id(tag), info); int err = lfs_dir_getinfo(lfs, &cwd, lfs_tag_id(tag), info);
@@ -3097,7 +3097,7 @@ int lfs_remove(lfs_t *lfs, const char *path) {
lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL); lfs_stag_t tag = lfs_dir_find(lfs, &cwd, &path, NULL);
if (tag < 0 || lfs_tag_id(tag) == 0x3ff) { if (tag < 0 || lfs_tag_id(tag) == 0x3ff) {
LFS_TRACE("lfs_remove -> %d", (tag < 0) ? tag : LFS_ERR_INVAL); LFS_TRACE("lfs_remove -> %d", (tag < 0) ? tag : LFS_ERR_INVAL);
return (tag < 0) ? tag : LFS_ERR_INVAL; return (tag < 0) ? (int)tag : LFS_ERR_INVAL;
} }
lfs_mdir_t dir; lfs_mdir_t dir;
@@ -3108,7 +3108,7 @@ int lfs_remove(lfs_t *lfs, const char *path) {
LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair); LFS_MKTAG(LFS_TYPE_STRUCT, lfs_tag_id(tag), 8), pair);
if (res < 0) { if (res < 0) {
LFS_TRACE("lfs_remove -> %d", res); LFS_TRACE("lfs_remove -> %d", res);
return res; return (int)res;
} }
lfs_pair_fromle32(pair); lfs_pair_fromle32(pair);
@@ -3171,7 +3171,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
lfs_stag_t oldtag = lfs_dir_find(lfs, &oldcwd, &oldpath, NULL); lfs_stag_t oldtag = lfs_dir_find(lfs, &oldcwd, &oldpath, NULL);
if (oldtag < 0 || lfs_tag_id(oldtag) == 0x3ff) { if (oldtag < 0 || lfs_tag_id(oldtag) == 0x3ff) {
LFS_TRACE("lfs_rename -> %d", (oldtag < 0) ? oldtag : LFS_ERR_INVAL); LFS_TRACE("lfs_rename -> %d", (oldtag < 0) ? oldtag : LFS_ERR_INVAL);
return (oldtag < 0) ? oldtag : LFS_ERR_INVAL; return (oldtag < 0) ? (int)oldtag : LFS_ERR_INVAL;
} }
// find new entry // find new entry
@@ -3181,7 +3181,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
if ((prevtag < 0 || lfs_tag_id(prevtag) == 0x3ff) && if ((prevtag < 0 || lfs_tag_id(prevtag) == 0x3ff) &&
!(prevtag == LFS_ERR_NOENT && newid != 0x3ff)) { !(prevtag == LFS_ERR_NOENT && newid != 0x3ff)) {
LFS_TRACE("lfs_rename -> %d", (prevtag < 0) ? prevtag : LFS_ERR_INVAL); LFS_TRACE("lfs_rename -> %d", (prevtag < 0) ? prevtag : LFS_ERR_INVAL);
return (prevtag < 0) ? prevtag : LFS_ERR_INVAL; return (prevtag < 0) ? (int)prevtag : LFS_ERR_INVAL;
} }
lfs_mdir_t prevdir; lfs_mdir_t prevdir;
@@ -3202,7 +3202,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
LFS_MKTAG(LFS_TYPE_STRUCT, newid, 8), prevpair); LFS_MKTAG(LFS_TYPE_STRUCT, newid, 8), prevpair);
if (res < 0) { if (res < 0) {
LFS_TRACE("lfs_rename -> %d", res); LFS_TRACE("lfs_rename -> %d", res);
return res; return (int)res;
} }
lfs_pair_fromle32(prevpair); lfs_pair_fromle32(prevpair);

View File

@@ -179,7 +179,7 @@ echo "--- Really big path test ---"
scripts/test.py << TEST scripts/test.py << TEST
lfs_mount(&lfs, &cfg) => 0; lfs_mount(&lfs, &cfg) => 0;
memset(path, 'w', LFS_NAME_MAX); memset(path, 'w', LFS_NAME_MAX);
path[LFS_NAME_MAX+1] = '\0'; path[LFS_NAME_MAX] = '\0';
lfs_mkdir(&lfs, path) => 0; lfs_mkdir(&lfs, path) => 0;
lfs_remove(&lfs, path) => 0; lfs_remove(&lfs, path) => 0;
lfs_file_open(&lfs, &file, path, lfs_file_open(&lfs, &file, path,
@@ -189,7 +189,7 @@ scripts/test.py << TEST
memcpy(path, "coffee/", strlen("coffee/")); memcpy(path, "coffee/", strlen("coffee/"));
memset(path+strlen("coffee/"), 'w', LFS_NAME_MAX); memset(path+strlen("coffee/"), 'w', LFS_NAME_MAX);
path[strlen("coffee/")+LFS_NAME_MAX+1] = '\0'; path[strlen("coffee/")+LFS_NAME_MAX] = '\0';
lfs_mkdir(&lfs, path) => 0; lfs_mkdir(&lfs, path) => 0;
lfs_remove(&lfs, path) => 0; lfs_remove(&lfs, path) => 0;
lfs_file_open(&lfs, &file, path, lfs_file_open(&lfs, &file, path,