diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2020-09-16 20:38:58 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2020-09-16 20:38:58 -0700 |
| commit | f35d3c98b22ac3c708672493d27267de071989cd (patch) | |
| tree | 6f49833558ec448768f5c90193d35b7d40c81664 /file_loader.c | |
| parent | 6c237850e90dce317ede7b0d4e53125df15ab62b (diff) | |
Added tons of file and line number stuff
Diffstat (limited to 'file_loader.c')
| -rw-r--r-- | file_loader.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/file_loader.c b/file_loader.c index b7c3817..33339b0 100644 --- a/file_loader.c +++ b/file_loader.c @@ -38,9 +38,10 @@ file_t *load_file(const char *filename) // Calculate line numbers: size_t linecap = 10; f->lines = calloc(sizeof(const char*), linecap); - f->nlines = 1; + f->nlines = 0; char *p = f->contents; for (size_t n = 0; p && *p; ++n) { + ++f->nlines; if (n >= linecap) f->lines = realloc(f->lines, sizeof(const char*)*(linecap *= 2)); f->lines[n] = p; @@ -79,6 +80,12 @@ size_t get_line_number(file_t *f, const char *p) return 0; } +size_t get_char_number(file_t *f, const char *p) +{ + size_t linenum = get_line_number(f, p); + return 1 + (size_t)(p - f->lines[linenum-1]); +} + const char *get_line(file_t *f, size_t line_number) { if (line_number == 0 || line_number > f->nlines) return NULL; |
