diff --git a/Makefile b/Makefile index 0e00f2d..9672dff 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,6 @@ CC=gcc CFLAGS=-Wall -Wextra -pedantic -Werror -#OFLAGS=-O3 -OFLAGS=-g +OFLAGS=-O3 LFLAGS=-lncursesw -ltcmalloc ste: ste.c diff --git a/hello b/hello index f4e5baf..e4476b0 100644 --- a/hello +++ b/hello @@ -4,5 +4,3 @@ hello hello hello hello - -sdsds \ No newline at end of file diff --git a/ste b/ste index 681b12b..ed0cf4d 100755 Binary files a/ste and b/ste differ diff --git a/ste.c b/ste.c index 9720459..b6ddaaa 100644 --- a/ste.c +++ b/ste.c @@ -51,7 +51,7 @@ typedef struct row { * defines rows and teh number of rows */ struct { row *rw; - long rownum; + int rownum; } rows; /* Prototypes */ @@ -63,7 +63,7 @@ static void updateRender (row *rw); static void updateScroll (void); static void cursorMove(int a); static int decimalSize (int n); -static inline void lnMove (int y, int x); +static void lnMove (int y, int x); static int curRealToRender (row *rw, int c_x); /* Row operations */ @@ -110,7 +110,7 @@ int main (int argc, char *argv[]) termInit(); /* Set the statusbar left (static) message */ - sprintf(t.statusbar, "%s : %s %ld lines %dx%d", argv[0], argv[1], rows.rownum, t.dim.y, t.dim.y); + sprintf(t.statusbar, "%s : %s %d lines %dx%d", argv[0], argv[1], rows.rownum, t.dim.y, t.dim.y); /* remember the initial row number */ int irow = decimalSize(rows.rownum); @@ -249,24 +249,28 @@ void drawScreen () /* Draw all the appropriate lines (following cursor) to the screen */ void drawLines (void) { - static unsigned int line = 0, ln = 0; - static int i = 0; + int line = 0, ln; /* move to the beginning of the screen */ - //lnMove(0, 0); + lnMove(0, 0); - for (i = 0; i < t.dim.y; i++) { + for (int i = 0; i < t.dim.y; i++) { if (i >= rows.rownum) break; ln = i + t.cur.off_y; /* Draw the line number */ attron(COLOR_PAIR(1)); - move(i, 0); - printw("%d", ln + 1); + mvprintw(i, 0, "%d", ln + 1); attroff(COLOR_PAIR(1)); lnMove(i, 0); + //if (ln == t.cur.y + t.cur.off_y) attron(COLOR_PAIR(2)); + /* Draw the line matcing render memory */ - addnstr(&rows.rw[ln].render[t.cur.off_x], t.dim.x + 1 - rows.rw[ln].delta); + if (rows.rw[ln].r_size >= t.cur.off_x) { + addnstr(&rows.rw[ln].render[t.cur.off_x], t.dim.x + 1 - rows.rw[ln].delta); + } + + //attroff(COLOR_PAIR(2)); lnMove(++line, 0); } @@ -276,7 +280,8 @@ void drawLines (void) /* Move avoiding the space allocated for line numbers */ void lnMove (int y, int x) { - move(y, x + t.pad); + x += t.pad; + move(y, x); } /* Draw the status bar at the bottom of the screen */ @@ -292,7 +297,7 @@ void drawBar (char *s) for (int i = len; i <= t.dim.x + t.pad; i++) mvaddch(t.dim.y, i, ' '); - static char m[40]; + char m[40]; sprintf(m, "x: %d y: %d Zoom: %c", t.cur.xx, t.cur.yy, whatsThat()); mvaddstr(t.dim.y, t.dim.x + t.pad - strlen(m), m); @@ -303,8 +308,8 @@ void drawBar (char *s) /* convert the cursor matchoing the memory to the drawn one */ int curRealToRender (row *rw, int c_x) { - static int r_x = 0, i = 0; - for (i = 0, r_x = 0; i < c_x; i++) { + int r_x = 0; + for (int i = 0; i < c_x; i++) { if (rw->chars[i] == '\t') r_x += (TABSIZE - 1) - (r_x % TABSIZE); r_x++; } @@ -342,16 +347,11 @@ void fileOpen (char *filename) void rowAddLast (char *s, int len) { /* Extend the block of memory containing the lines */ - // reallocarray fails safely - row *newr = NULL; - newr = (row*) reallocarray(rows.rw, (rows.rownum + 1), sizeof(*newr)); - if (newr == NULL) termDie("realloc rowAddLast"); - else rows.rw = newr; - //rows.rw = (row*) realloc(rows.rw, sizeof(row) * (rows.rownum + 1)); + rows.rw = realloc(rows.rw, sizeof(row) * (rows.rownum + 1)); /* Allocate memory for the line and copy it * at the current row number */ - rows.rw[rows.rownum].chars = (char*) malloc(len + 1); + rows.rw[rows.rownum].chars = malloc(len + 1); memcpy(rows.rw[rows.rownum].chars, s, len); rows.rw[rows.rownum].chars[len] = '\0'; rows.rw[rows.rownum].size = len; @@ -363,7 +363,7 @@ void updateRender (row *rw) { /* count the special characters (only tabs for now) */ int tabs = 0, i; - for (i = 0; i <= rw->size; i++) { + for (i = 0; i < rw->size; i++) { if (rw->chars[i] == '\t') tabs++; } rw->render = NULL; @@ -377,11 +377,10 @@ void updateRender (row *rw) /* put all the characters (substituing all special chars) * into the render buffer */ - static int off, j = 0; - off = 0; - for (i = 0; i <= rw->size; i++) { + int off = 0; + for (i = 0; i < rw->size; i++) { if (rw->chars[i] == '\t') { - for (j = 0; j < TABSIZE; j++){ + for (int j = 0; j < TABSIZE; j++){ if (!j) rw->render[off++] = '|'; else rw->render[off++] = ' '; } @@ -389,7 +388,6 @@ void updateRender (row *rw) rw->render[off++] = rw->chars[i]; } } - off -= 1; rw->render[off] = '\0'; rw->r_size = off; } @@ -409,7 +407,7 @@ void rowAddChar (row *rw, char c) // WIP char *s = rw->chars; // reallocate mem and inc size - rw->chars = (char*) malloc(rw->size + 2); + rw->chars = malloc(rw->size + 2); rw->size++; // copy bf cursor @@ -625,7 +623,6 @@ void rowCpy (row *to, row *from) // WIP { rowFree(to); to->chars = malloc(strlen(from->chars) + 1); - if (to->chars == NULL) termDie("malloc in rowCpy"); to->size = from->size; memcpy(to->chars, from->chars, to->size); updateRender(to); diff --git a/valog.txt b/valog.txt deleted file mode 100644 index f23650f..0000000 --- a/valog.txt +++ /dev/null @@ -1,167 +0,0 @@ -==27775== Memcheck, a memory error detector -==27775== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. -==27775== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info -==27775== Command: ./ste ste.c -==27775== Parent PID: 25299 -==27775== -==27775== Mismatched free() / delete / delete [] -==27775== at 0x48379AB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x48D8824: ??? (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x400F219: call_init.part.0 (in /usr/lib/ld-2.30.so) -==27775== by 0x400F318: _dl_init (in /usr/lib/ld-2.30.so) -==27775== by 0x40010C9: ??? (in /usr/lib/ld-2.30.so) -==27775== by 0x1: ??? -==27775== by 0x1FFF0008E6: ??? -==27775== by 0x1FFF0008EC: ??? -==27775== Address 0x52ccd20 is 0 bytes inside a block of size 4 alloc'd -==27775== at 0x483750F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x48D8817: ??? (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x400F219: call_init.part.0 (in /usr/lib/ld-2.30.so) -==27775== by 0x400F318: _dl_init (in /usr/lib/ld-2.30.so) -==27775== by 0x40010C9: ??? (in /usr/lib/ld-2.30.so) -==27775== by 0x1: ??? -==27775== by 0x1FFF0008E6: ??? -==27775== by 0x1FFF0008EC: ??? -==27775== -==27775== Mismatched free() / delete / delete [] -==27775== at 0x48379AB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x4E2B94E: std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/libstdc++.so.6.0.27) -==27775== by 0x4E2CEEA: std::__cxx11::basic_string, std::allocator >::_M_append(char const*, unsigned long) (in /usr/lib/libstdc++.so.6.0.27) -==27775== by 0x48EE629: MallocExtension::Initialize() (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x48D8829: ??? (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x400F219: call_init.part.0 (in /usr/lib/ld-2.30.so) -==27775== by 0x400F318: _dl_init (in /usr/lib/ld-2.30.so) -==27775== by 0x40010C9: ??? (in /usr/lib/ld-2.30.so) -==27775== by 0x1: ??? -==27775== by 0x1FFF0008E6: ??? -==27775== by 0x1FFF0008EC: ??? -==27775== Address 0x52cd140 is 0 bytes inside a block of size 23 alloc'd -==27775== at 0x483750F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x48EE5C7: MallocExtension::Initialize() (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x48D8829: ??? (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x400F219: call_init.part.0 (in /usr/lib/ld-2.30.so) -==27775== by 0x400F318: _dl_init (in /usr/lib/ld-2.30.so) -==27775== by 0x40010C9: ??? (in /usr/lib/ld-2.30.so) -==27775== by 0x1: ??? -==27775== by 0x1FFF0008E6: ??? -==27775== by 0x1FFF0008EC: ??? -==27775== -==27775== Mismatched free() / delete / delete [] -==27775== at 0x48379AB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x48EE63C: MallocExtension::Initialize() (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x48D8829: ??? (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x400F219: call_init.part.0 (in /usr/lib/ld-2.30.so) -==27775== by 0x400F318: _dl_init (in /usr/lib/ld-2.30.so) -==27775== by 0x40010C9: ??? (in /usr/lib/ld-2.30.so) -==27775== by 0x1: ??? -==27775== by 0x1FFF0008E6: ??? -==27775== by 0x1FFF0008EC: ??? -==27775== Address 0x52cd1a0 is 0 bytes inside a block of size 45 alloc'd -==27775== at 0x483750F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x4E2B8CC: std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/libstdc++.so.6.0.27) -==27775== by 0x4E2CEEA: std::__cxx11::basic_string, std::allocator >::_M_append(char const*, unsigned long) (in /usr/lib/libstdc++.so.6.0.27) -==27775== by 0x48EE629: MallocExtension::Initialize() (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x48D8829: ??? (in /usr/lib/libtcmalloc.so.4.5.3) -==27775== by 0x400F219: call_init.part.0 (in /usr/lib/ld-2.30.so) -==27775== by 0x400F318: _dl_init (in /usr/lib/ld-2.30.so) -==27775== by 0x40010C9: ??? (in /usr/lib/ld-2.30.so) -==27775== by 0x1: ??? -==27775== by 0x1FFF0008E6: ??? -==27775== by 0x1FFF0008EC: ??? -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x486C3E4: waddnstr (in /usr/lib/libncursesw.so.6.1) -==27775== by 0x109899: drawLines (ste.c:269) -==27775== by 0x109739: drawScreen (ste.c:240) -==27775== by 0x1093C9: main (ste.c:122) -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x486C3F2: waddnstr (in /usr/lib/libncursesw.so.6.1) -==27775== by 0x109899: drawLines (ste.c:269) -==27775== by 0x109739: drawScreen (ste.c:240) -==27775== by 0x1093C9: main (ste.c:122) -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x486C41B: waddnstr (in /usr/lib/libncursesw.so.6.1) -==27775== by 0x109899: drawLines (ste.c:269) -==27775== by 0x109739: drawScreen (ste.c:240) -==27775== by 0x1093C9: main (ste.c:122) -==27775== -==27775== Invalid read of size 4 -==27775== at 0x10A794: rowAddRow (ste.c:580) -==27775== by 0x109521: main (ste.c:144) -==27775== Address 0x5ae6ef0 is 0 bytes after a block of size 25,760 alloc'd -==27775== at 0x4838D7B: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x109C39: rowAddLast (ste.c:347) -==27775== by 0x109BAB: fileOpen (ste.c:333) -==27775== by 0x109357: main (ste.c:106) -==27775== -==27775== Invalid read of size 8 -==27775== at 0x10A7B8: rowAddRow (ste.c:580) -==27775== by 0x109521: main (ste.c:144) -==27775== Address 0x5ae6ef8 is 8 bytes after a block of size 25,760 alloc'd -==27775== at 0x4838D7B: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x109C39: rowAddLast (ste.c:347) -==27775== by 0x109BAB: fileOpen (ste.c:333) -==27775== by 0x109357: main (ste.c:106) -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x109D9E: updateRender (ste.c:367) -==27775== by 0x10AC66: rowCpy (ste.c:631) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== Uninitialised value was created by a heap allocation -==27775== at 0x483677F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x10AC06: rowCpy (ste.c:627) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x109E3C: updateRender (ste.c:383) -==27775== by 0x10AC66: rowCpy (ste.c:631) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== Uninitialised value was created by a heap allocation -==27775== at 0x483677F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x10AC06: rowCpy (ste.c:627) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x4839C78: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x10ABFA: rowCpy (ste.c:627) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== Uninitialised value was created by a heap allocation -==27775== at 0x483677F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x10AC06: rowCpy (ste.c:627) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== -==27775== Conditional jump or move depends on uninitialised value(s) -==27775== at 0x4839C65: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x10ABFA: rowCpy (ste.c:627) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== Uninitialised value was created by a heap allocation -==27775== at 0x483677F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) -==27775== by 0x10AC06: rowCpy (ste.c:627) -==27775== by 0x10A81F: rowAddRow (ste.c:583) -==27775== by 0x109521: main (ste.c:144) -==27775== -==27775== -==27775== HEAP SUMMARY: -==27775== in use at exit: 334,484 bytes in 1,653 blocks -==27775== total heap usage: 30,194 allocs, 28,541 frees, 9,926,406 bytes allocated -==27775== -==27775== LEAK SUMMARY: -==27775== definitely lost: 0 bytes in 0 blocks -==27775== indirectly lost: 0 bytes in 0 blocks -==27775== possibly lost: 0 bytes in 0 blocks -==27775== still reachable: 334,484 bytes in 1,653 blocks -==27775== suppressed: 0 bytes in 0 blocks -==27775== Reachable blocks (those to which a pointer was found) are not shown. -==27775== To see them, rerun with: --leak-check=full --show-leak-kinds=all -==27775== -==27775== For lists of detected and suppressed errors, rerun with: -s -==27775== ERROR SUMMARY: 65744 errors from 12 contexts (suppressed: 0 from 0)