diff options
Diffstat (limited to 'src/erec.c')
-rw-r--r-- | src/erec.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -118,7 +118,7 @@ void erec_print(FILE *f, const struct error_record *erec, const struct location *loc = erec->locations, *iloc; const struct input_descriptor *indesc = loc->indesc, *tmp; const char *line = NULL; /* silence gcc */ - char buf[1024]; + char buf[1024] = {}; char *pbuf = NULL; unsigned int i, end; int l, ret; @@ -131,14 +131,13 @@ void erec_print(FILE *f, const struct error_record *erec, *strchrnul(line, '\n') = '\0'; break; case INDESC_FILE: - memset(buf, 0, sizeof(buf)); - orig_offset = lseek(indesc->fd, 0, SEEK_CUR); - lseek(indesc->fd, loc->line_offset, SEEK_SET); - ret = read(indesc->fd, buf, sizeof(buf) - 1); + orig_offset = ftell(indesc->fp); + fseek(indesc->fp, loc->line_offset, SEEK_SET); + ret = fread(buf, 1, sizeof(buf) - 1, indesc->fp); if (ret > 0) *strchrnul(buf, '\n') = '\0'; line = buf; - lseek(indesc->fd, orig_offset, SEEK_SET); + fseek(indesc->fp, orig_offset, SEEK_SET); break; case INDESC_INTERNAL: case INDESC_NETLINK: |