Skip to content

Commit 6716b55

Browse files
committed
Fixed error check when truncating files to larger size
1 parent 809ffde commit 6716b55

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

lfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1694,7 +1694,7 @@ int lfs_file_truncate(lfs_t *lfs, lfs_file_t *file, lfs_off_t size) {
16941694
// flush+seek if not already at end
16951695
if (file->pos != oldsize) {
16961696
int err = lfs_file_seek(lfs, file, 0, SEEK_END);
1697-
if (err) {
1697+
if (err < 0) {
16981698
return err;
16991699
}
17001700
}

tests/test_truncate.sh

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ TEST
1313

1414
truncate_test() {
1515
STARTSIZES="$1"
16-
HOTSIZES="$2"
17-
COLDSIZES="$3"
16+
STARTSEEKS="$2"
17+
HOTSIZES="$3"
18+
COLDSIZES="$4"
1819
tests/test.py << TEST
1920
static const lfs_off_t startsizes[] = {$STARTSIZES};
21+
static const lfs_off_t startseeks[] = {$STARTSEEKS};
2022
static const lfs_off_t hotsizes[] = {$HOTSIZES};
2123
2224
lfs_mount(&lfs, &cfg) => 0;
@@ -33,6 +35,11 @@ tests/test.py << TEST
3335
}
3436
lfs_file_size(&lfs, &file[0]) => startsizes[i];
3537
38+
if (startseeks[i] != startsizes[i]) {
39+
lfs_file_seek(&lfs, &file[0],
40+
startseeks[i], LFS_SEEK_SET) => startseeks[i];
41+
}
42+
3643
lfs_file_truncate(&lfs, &file[0], hotsizes[i]) => 0;
3744
lfs_file_size(&lfs, &file[0]) => hotsizes[i];
3845
@@ -107,25 +114,43 @@ TEST
107114

108115
echo "--- Cold shrinking truncate ---"
109116
truncate_test \
117+
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
110118
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
111119
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
112120
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE"
113121

114122
echo "--- Cold expanding truncate ---"
115123
truncate_test \
124+
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
116125
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
117126
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
118127
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE"
119128

120129
echo "--- Warm shrinking truncate ---"
121130
truncate_test \
131+
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
122132
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
123133
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
124134
" 0, 0, 0, 0, 0"
125135

126136
echo "--- Warm expanding truncate ---"
127137
truncate_test \
128138
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
139+
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
140+
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
141+
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE"
142+
143+
echo "--- Mid-file shrinking truncate ---"
144+
truncate_test \
145+
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
146+
" $LARGESIZE, $LARGESIZE, $LARGESIZE, $LARGESIZE, $LARGESIZE" \
147+
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
148+
" 0, 0, 0, 0, 0"
149+
150+
echo "--- Mid-file expanding truncate ---"
151+
truncate_test \
152+
" 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE, 2*$LARGESIZE" \
153+
" 0, 0, $SMALLSIZE, $MEDIUMSIZE, $LARGESIZE" \
129154
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE" \
130155
"2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE, 2*$LARGESIZE"
131156

0 commit comments

Comments
 (0)