summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/textfile.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/common/textfile.c b/common/textfile.c
index 26cbbea7..095e0355 100644
--- a/common/textfile.c
+++ b/common/textfile.c
@@ -180,8 +180,15 @@ int textfile_put(char *pathname, char *key, char *value)
end += len;
len = size - (end - map);
+ if (!len) {
+ munmap(map, size);
+ ftruncate(fd, base);
+ pos = lseek(fd, base, SEEK_SET);
+ err = write_key_value(fd, key, value);
+ goto unlock;
+ }
- if (len <= 0 || len > size) {
+ if (len < 0 || len > size) {
err = EILSEQ;
goto unmap;
}
@@ -193,12 +200,12 @@ int textfile_put(char *pathname, char *key, char *value)
}
memcpy(str, end, len);
- munmap(map, size);
+ munmap(map, size);
ftruncate(fd, base);
pos = lseek(fd, base, SEEK_SET);
+ err = write_key_value(fd, key, value);
- write_key_value(fd, key, value);
write(fd, str, len);
free(str);