commit - 1a99859b357957715fb62ced6ddef871ca9ab3a0
commit + 4ad573d0d5675212b0b5719a0a5c1de22974dd0e
blob - f22f44c9b8e54865668b48f49aadcba59786de90
blob + de266c42b8d60b2c4a929990edac3a357eb720ad
--- config.c
+++ config.c
load_file(int fd, uint8_t **data, size_t *len)
{
struct stat sb;
- FILE *fp;
- size_t r;
+ ssize_t r;
if (fstat(fd, &sb) == -1)
fatal("fstat");
- if ((fp = fdopen(fd, "r")) == NULL)
- fatal("fdopen");
-
if (sb.st_size < 0 /* || sb.st_size > SIZE_MAX */) {
log_warnx("file too large");
- fclose(fp);
+ close(fd);
return -1;
}
*len = sb.st_size;
if ((*data = malloc(*len)) == NULL)
fatal("malloc");
- r = fread(*data, 1, *len, fp);
- if (r != *len) {
- log_warn("read");
- fclose(fp);
+ r = pread(fd, *data, *len, 0);
+ if (r == -1 || (size_t)r != *len) {
+ log_warn("read failed");
+ close(fd);
free(*data);
return -1;
}
- fclose(fp);
+ close(fd);
return 0;
}