aboutsummaryrefslogtreecommitdiff
path: root/file_loader.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2020-09-16 20:38:58 -0700
committerBruce Hill <bruce@bruce-hill.com>2020-09-16 20:38:58 -0700
commitf35d3c98b22ac3c708672493d27267de071989cd (patch)
tree6f49833558ec448768f5c90193d35b7d40c81664 /file_loader.c
parent6c237850e90dce317ede7b0d4e53125df15ab62b (diff)
Added tons of file and line number stuff
Diffstat (limited to 'file_loader.c')
-rw-r--r--file_loader.c9
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;