aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/main.c b/main.c
index 166dbd7..39b5fa4 100644
--- a/main.c
+++ b/main.c
@@ -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;
}