[Python-Dev] Adding support to curses library (original) (raw)

Heracles steve at integrityintegrators.net
Wed Feb 25 17:03:16 CET 2009


I took the suggestion and fired up a debugger and now I'm eating crow.

First of all, here is a complete listing of the method as it is written now: ------------------ Snippet ----------------------------------- static PyObject * PyCurses_color_set(PyObject *self, PyObject *args) { short color_pair_number = 0; void * opts = NULL; int erg = ERR;

/* These macros ought to be documented in the API docs but they aren't yet. */ PyCursesInitialised PyCursesInitialisedColor

/* Per ncurses Man Page: The routine color_set sets the current color of the given window to the foreground/background combination described by the color_pair_number. The parameter opts is reserved for future use, applications must supply a null pointer. / switch(PyTuple_Size(args)) { case 1: / Dont make them pass a useless null pointer. / if (!PyArg_ParseTuple(args, "h", &color_pair_number)) return NULL; case 2: / Allow them to pass the opts pointer so that when ncurses is later updated. This method will still work. */ if (!PyArg_ParseTuple(args, "hO&", &color_pair_number, &opts)) return NULL; default: PyErr_SetString(PyExc_TypeError, "color_set requires 1 or 2 arguments (color_pair_number[, opts]?)"); return NULL; }

erg = color_set(color_pair_number, NULL);

if (erg == ERR) return PyCursesCheckERR(erg, "color_set"); else return NULL; /* PyInt_FromLong((long) 1L); */ } ------------------ End Snippet -------------------------------------

Oddly enough, running the debugger showed me a different result than I expected by my bracketing approach. I falsely presumed that if by commenting out the line where the call to color_set is made, and running the program produces no segmentation fault, while commenting the same line back in reprduces the segmentation fault, that I could deduce that the line thus commented out was the source of the problem. Stupid me, that is apparently not the case.

Apparently the segmentation fault is produced by a call to Python/getargs.c:Line 1207 if(! (*convert)(arg,addr))

Which is invoked as a result of calling this line in the function listed above: if (!PyArg_ParseTuple(args, "hO&", &color_pair_number, &opts)) return NULL;

A.M. Kuchling wrote: >> On Wed, Feb 25, 2009 at 06:30:06AM -0800, Heracles wrote: >> is commented back in it does fail. I am not sure exactly how a debugger >> will >> help in this case since the colorset call goes directly to the ncurses >> library. If in fact that the issue is the ncurses library then it seems >> that there is no feasible solution until that library is fixed, in which >> case this patch is sort of useless. > ... >> erg = colorset(colorpairnumber, NULL); // Debating on forcing null >> What is colorpairnumber in the C code? If it's some incorrect value > (-1? 255?), maybe ncurses is indexing off an array and crashing. >> This is why a debugger might help; you could run the test program > until the crash and then print out the values of the relevant > variables. e.g. is stdscr set to a non-NULL value? There might be a > debugging version of ncurses that will let you look at the variables > inside the ncurses code, which may make the problem clear. >> --amk >> _________________________ > Python-Dev mailing list > Python-Dev at python.org > http://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > http://mail.python.org/mailman/options/python-dev/lists%40nabble.com >>:wistle::wistle::wistle:

View this message in context: http://www.nabble.com/Adding-support-to-curses-library-tp22191916p22205860.html Sent from the Python - python-dev mailing list archive at Nabble.com.



More information about the Python-Dev mailing list