From cd719c14773325239fde36a2c34b4954ee6da8e9 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Fri, 21 May 2021 00:22:05 -0700 Subject: [PATCH] Tweaks to line-specific search --- files.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/files.c b/files.c index 735d928..f706290 100644 --- a/files.c +++ b/files.c @@ -65,21 +65,17 @@ file_t *load_file(file_t **files, const char *filename) { int fd = filename[0] == '\0' ? STDIN_FILENO : open(filename, O_RDONLY); if (fd < 0) { - // Check for :[:] - if (strchr(filename, ':')) { + // Check for : + if (strrchr(filename, ':')) { char tmp[PATH_MAX] = {0}; strcpy(tmp, filename); - char *colon = strchr(tmp, ':'); + char *colon = strrchr(tmp, ':'); *colon = '\0'; file_t *f = load_file(files, tmp); if (!f) return f; long line = strtol(colon+1, &colon, 10); f->start = (char*)get_line(f, (size_t)line); - if (*colon == ':') { - long offset = strtol(colon+1, &colon, 10); - f->start += offset; - } - if (f->start > f->end) f->start = f->end; + f->end = (char*)get_line(f, (size_t)line+1); return f; } return NULL; @@ -234,9 +230,9 @@ const char *get_line(file_t *f, size_t line_number) // void fprint_line(FILE *dest, file_t *f, const char *start, const char *end, const char *fmt, ...) { - if (start < f->start) start = f->start; + if (start < f->memory) start = f->memory; if (start > f->end) start = f->end; - if (end < f->start) end = f->start; + if (end < f->memory) end = f->memory; if (end > f->end) end = f->end; size_t linenum = get_line_number(f, start); const char *line = get_line(f, linenum);