I'd like to update editors/zile, but ever since it was switched to curses(3), it crashes on exit:
zile in free(): error: free_pages: pointer to wrong page Abort trap (core dumped) ... #8 0x000000004b8fb103 in del_curterm (termp=0x4330a000) at /usr/src/lib/libcurses/tinfo/lib_cur_term.c:67 #9 0x000000004b90a536 in delscreen (sp=0x4a061000) at /usr/src/lib/libcurses/base/lib_set_term.c:112 #10 0x0000000000417ae3 in term_close () at term_ncurses.c:122 #11 0x0000000000411810 in main (argc=1, argv=0x7f7ffffc9778) at main.c:330 Apparently, curses tries to free some internal structures that haven't been properly initialized. Does anybody spy an error in the code below (from zile/src/term_ncurses.c)? Nothing else appears to touch *screen. ---------------> typedef SCREEN Screen; Screen *screen; int xterm; ... void term_init(void) { char *term = getenv("TERM"); if (term && strcmp(term, "xterm") == 0) { xterm = TRUE; printf("\033[?1036;h"); /* Make Meta send ESC */ } screen = newterm(NULL, stdout, stdin); set_term(screen); term_set_size((size_t)COLS, (size_t)LINES); noecho(); nonl(); raw(); intrflush(stdscr, FALSE); keypad(stdscr, TRUE); } void term_close(void) { /* Clear last line. */ term_move((size_t)(LINES - 1), 0); term_clrtoeol(); term_refresh(); /* Free memory and finish with ncurses. */ endwin(); delscreen(screen); if (xterm) { printf("\033[?1036;l"); /* Reset Meta key */ printf("\r \r"); /* Overwrite string in previous line for terminal emulators that don't understand it */ } screen = NULL; } <--------------- Dropping the extra SCREEN handling, which seems to serve no particular purpose, and using plain initscr(3) seems to work, but still, what's wrong? Index: Makefile =================================================================== RCS file: /cvs/ports/editors/zile/Makefile,v retrieving revision 1.9 diff -u -r1.9 Makefile --- Makefile 25 Jul 2005 15:26:37 -0000 1.9 +++ Makefile 14 Mar 2006 20:35:31 -0000 @@ -2,7 +2,7 @@ COMMENT= "zile is lossy emacs" -DISTNAME= zile-2.2.2 +DISTNAME= zile-2.2.13 CATEGORIES= editors HOMEPAGE= http://zile.sourceforge.net/ @@ -11,7 +11,7 @@ PERMIT_PACKAGE_FTP= Yes PERMIT_DISTFILES_CDROM= Yes PERMIT_DISTFILES_FTP= Yes -WANTLIB= c termcap +WANTLIB= c ncurses MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=zile/} Index: distinfo =================================================================== RCS file: /cvs/ports/editors/zile/distinfo,v retrieving revision 1.6 diff -u -r1.6 distinfo --- distinfo 25 Jul 2005 15:26:37 -0000 1.6 +++ distinfo 14 Mar 2006 20:35:31 -0000 @@ -1,4 +1,4 @@ -MD5 (zile-2.2.2.tar.gz) = 7eb5d67ed3bb58e2f4cf94a841c1d7bb -RMD160 (zile-2.2.2.tar.gz) = 15c847d1b1f0b04366d24d3e9a4079010dadb47f -SHA1 (zile-2.2.2.tar.gz) = 69bb595f3a917cf6c363e5b69b90db7e73d41cde -SIZE (zile-2.2.2.tar.gz) = 333424 +MD5 (zile-2.2.13.tar.gz) = d2156809cf1482c2f670d35b083babb5 +RMD160 (zile-2.2.13.tar.gz) = 01d784d8cab51584ea1155483bf326414f9877ec +SHA1 (zile-2.2.13.tar.gz) = f8593ea026ed04bd878f2310065dc569d7ea44c6 +SIZE (zile-2.2.13.tar.gz) = 329639 Index: patches/patch-src_term_ncurses_c =================================================================== RCS file: patches/patch-src_term_ncurses_c diff -N patches/patch-src_term_ncurses_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_term_ncurses_c 14 Mar 2006 20:35:31 -0000 @@ -0,0 +1,37 @@ +$OpenBSD$ +--- src/term_ncurses.c.orig Tue Mar 14 20:59:08 2006 ++++ src/term_ncurses.c Tue Mar 14 20:59:49 2006 +@@ -35,8 +35,6 @@ + #include "zile.h" + #include "extern.h" + +-typedef SCREEN Screen; +-Screen *screen; + int xterm; + + void term_move(size_t y, size_t x) +@@ -98,8 +96,7 @@ void term_init(void) + xterm = TRUE; + printf("\033[?1036;h"); /* Make Meta send ESC */ + } +- screen = newterm(NULL, stdout, stdin); +- set_term(screen); ++ initscr(); + + term_set_size((size_t)COLS, (size_t)LINES); + +@@ -119,14 +116,12 @@ void term_close(void) + + /* Free memory and finish with ncurses. */ + endwin(); +- delscreen(screen); + if (xterm) { + printf("\033[?1036;l"); /* Reset Meta key */ + printf("\r \r"); /* Overwrite string in previous line + for terminal emulators that don't + understand it */ + } +- screen = NULL; + } + + static size_t translate_key(int c) -- Christian "naddy" Weisgerber [EMAIL PROTECTED]