bore

Unnamed repository
Log | Files | Refs | README

commit 0f4d9382adfec4cf12d5fd03cce0cf4dcdc29265
parent 1c37606b5ea28055bfae1a729b6e80c3e7820d95
Author: phoebos <ben@bvnf.space>
Date:   Thu, 23 Sep 2021 13:03:49 +0100

ed: do some free()ing and debug messages

Diffstat:
Med.c | 21+++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/ed.c b/ed.c @@ -1,3 +1,4 @@ +#include <ctype.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> @@ -56,6 +57,7 @@ insert_line_before(char *s, int len, int num) { new->prev->next = new; old->prev = new; num_lines++; + cur_line = num; return new; } @@ -138,6 +140,7 @@ input(int lineno) { buf_used += n; */ } + free(tmp); } int @@ -151,15 +154,21 @@ ed(char *startfile) { printf("%c ", prompt); fflush(stdout); int c = fgetc(stdin); - switch (c) { + if (isdigit(c)) + cur_line = c - '0'; + else switch (c) { case '=': printf("%d\n", cur_line); break; case '+': cur_line++; + if (cur_line > num_lines) + cur_line = 1; break; case '-': cur_line--; + if (cur_line <= 0) + cur_line = num_lines; break; case 'i': buf = buf_start; @@ -170,7 +179,9 @@ ed(char *startfile) { input(cur_line+1); break; case 'p': - printf("%s", find_line(cur_line)->s); + fprintf(stderr, "cur line is %d\n", cur_line); + fprintf(stderr, "max line is %d\n", num_lines); + printf("%s\n", find_line(cur_line)->s); //printf("%s", buf_start); break; case 'w': @@ -231,5 +242,11 @@ main(int argc, char **argv) { startfile = *argv; ed(startfile); + free(buf_start); + struct line *x = first; + while (x) { + x = x->next; + free(x); + } return 0; }