PHP segfaults if ncurses_refresh is called before ncurses_init...
Index: ncurses_functions.c
===================================================================
RCS file: /repository/php4/ext/ncurses/ncurses_functions.c,v
retrieving revision 1.18
diff -u -r1.18 ncurses_functions.c
--- ncurses_functions.c	28 Feb 2002 08:26:27 -0000	1.18
+++ ncurses_functions.c	27 Mar 2002 13:59:30 -0000
@@ -81,6 +81,8 @@
    Stops using ncurses, clean up the screen */
 PHP_FUNCTION(ncurses_end)
 {
+	keypad(stdscr, FALSE);				/* disable keyboard mapping */
+	php_ncurses_init_called(0);			/* set call_status to 0 */
 	RETURN_LONG(endwin());             /* endialize the curses library */
 }
 /* }}} */
@@ -108,9 +110,24 @@
 	initscr();             /* initialize the curses library */
 	keypad(stdscr, TRUE);  /* enable keyboard mapping */
 	(void) nonl();         /* tell curses not to do NL->CR/NL on output */
-	(void) cbreak();       /* take input chars one at a time, no wait for \n */}
+	(void) cbreak();       /* take input chars one at a time, no wait for \n */
+	php_ncurses_init_called(1);
+}
 /* }}} */
 
+int php_ncurses_init_called(int do_this) {
+	static int call_status = 0;
+	switch(do_this) {
+		case 0:
+		case 1:
+			call_status = do_this;
+			break;
+		default:
+			return call_status;
+			break;
+	}
+}
+
 /* {{{ proto int ncurses_init_pair(int pair, int fg, int bg)
    Allocates a color pair */
 PHP_FUNCTION(ncurses_init_pair)
@@ -160,11 +177,15 @@
 }
 /* }}} */
 
-/* {{{ proto int ncurses_refresh(int ch)
+/* {{{ proto int ncurses_refresh(void)
    Refresh screen */
 PHP_FUNCTION(ncurses_refresh)
 {
-	RETURN_LONG(refresh());
+	if(php_ncurses_init_called(NULL)) {
+		RETURN_LONG(refresh());
+	} else {
+		php_error(E_WARNING, "ncurses_refresh: called before ncurses_init");
+	}
 }
 /* }}} */
 
-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php


Reply via email to