diff --git a/src/textfile.c b/src/textfile.c
index 3fb3c01..2712cd8 100644
--- a/src/textfile.c
+++ b/src/textfile.c
sprintf(str, "%s %s\n", key, value);
if (write(fd, str, size) < 0)
- err = errno;
+ err = -errno;
free(str);
return -errno;
if (flock(fd, LOCK_EX) < 0) {
- err = errno;
+ err = -errno;
goto close;
}
if (fstat(fd, &st) < 0) {
- err = errno;
+ err = -errno;
goto unlock;
}
map = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_LOCKED, fd, 0);
if (!map || map == MAP_FAILED) {
- err = errno;
+ err = -errno;
goto unlock;
}
end = strnpbrk(off, size, "\r\n");
if (!end) {
- err = EILSEQ;
+ err = -EILSEQ;
goto unmap;
}
if (!len) {
munmap(map, size);
if (ftruncate(fd, base) < 0) {
- err = errno;
+ err = -errno;
goto unlock;
}
lseek(fd, base, SEEK_SET);
}
if (len < 0 || len > size) {
- err = EILSEQ;
+ err = -EILSEQ;
goto unmap;
}
str = malloc(len);
if (!str) {
- err = errno;
+ err = -errno;
goto unmap;
}
munmap(map, size);
if (ftruncate(fd, base) < 0) {
- err = errno;
+ err = -errno;
free(str);
goto unlock;
}
err = write_key_value(fd, key, value);
if (write(fd, str, len) < 0)
- err = errno;
+ err = -errno;
free(str);
fdatasync(fd);
close(fd);
- errno = err;
+ errno = -err;
- return -err;
+ return err;
}
static char *read_key(const char *pathname, const char *key, int icase)
return NULL;
if (flock(fd, LOCK_SH) < 0) {
- err = errno;
+ err = -errno;
goto close;
}
if (fstat(fd, &st) < 0) {
- err = errno;
+ err = -errno;
goto unlock;
}
map = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
if (!map || map == MAP_FAILED) {
- err = errno;
+ err = -errno;
goto unlock;
}
len = strlen(key);
off = find_key(map, size, key, len, icase);
if (!off) {
- err = EILSEQ;
+ err = -EILSEQ;
goto unmap;
}
end = strnpbrk(off, size - (map - off), "\r\n");
if (!end) {
- err = EILSEQ;
+ err = -EILSEQ;
goto unmap;
}
str = malloc(end - off - len);
if (!str) {
- err = EILSEQ;
+ err = -EILSEQ;
goto unmap;
}
close:
close(fd);
- errno = err;
+ errno = -err;
return str;
}
return -errno;
if (flock(fd, LOCK_SH) < 0) {
- err = errno;
+ err = -errno;
goto close;
}
if (fstat(fd, &st) < 0) {
- err = errno;
+ err = -errno;
goto unlock;
}
map = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
if (!map || map == MAP_FAILED) {
- err = errno;
+ err = -errno;
goto unlock;
}
while (size - (off - map) > 0) {
end = strnpbrk(off, size - (off - map), " ");
if (!end) {
- err = EILSEQ;
+ err = -EILSEQ;
break;
}
key = malloc(len + 1);
if (!key) {
- err = errno;
+ err = -errno;
break;
}
off = end + 1;
if (size - (off - map) < 0) {
- err = EILSEQ;
+ err = -EILSEQ;
free(key);
break;
}
end = strnpbrk(off, size - (off - map), "\r\n");
if (!end) {
- err = EILSEQ;
+ err = -EILSEQ;
free(key);
break;
}
value = malloc(len + 1);
if (!value) {
- err = errno;
+ err = -errno;
free(key);
break;
}
close:
close(fd);
- errno = err;
+ errno = -err;
return 0;
}