diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -9,18 +9,25 @@ static char *read_file_to_buffer(char *filename) { if (fd < 0) return NULL; // if error opening file, return NULLptr size_t bufsize = BS; size_t bufread = 0; - char *buf = (char *)malloc(bufsize); + ssize_t r = 0; + char *buf = (char *)malloc(bufsize+1); char *newbuf = NULL; - while (read(fd, buf + bufread, BS) == BS) { + while ((r = read(fd, buf + bufread, BS)) == BS) { newbuf = (char *)malloc(bufsize + BS); - strncpy(newbuf, buf, bufsize); + memcpy(newbuf, buf, bufsize); free(buf); buf = newbuf; bufsize += BS; bufread += BS; } close(fd); + if (r < 0) { + fprintf(stderr, "Error: error occured while reading file \"%s\".\n", filename); + free(buf); + return NULL; + } + buf[bufread + (size_t)r + 1] = 0; return buf; } |
