On Tue, Feb 24, 2009 at 2:18 PM, Heracles <st...@integrityintegrators.net> wrote: > > Hello, > > I am working on a patch to add to the _cursesmodule.c file of the Python > core libraries. I figured I would take on one of the implemented functions > to try to get my feet wet contributing to the project. At any rate, I have > the following function defined in the 2.7.a version updated from SVN this > morning:
I'm glad you are interested in developing Python. I'm not sure if this is the best forum. OTOH, I'm not sure if comp.lang.python would be appropriate either. I'd suggest making a proper patch and submitting it to http://bugs.python.org > ------------- Snippet --------------------------- > // Insert new method color_set Steve Owens 2/24/2009 > // The curses library color_set function has the following signature: > // int color_set(short color_pair_number, void* opts); > static PyObject * > PyCurses_color_set(PyObject *self, PyObject *args) > { > short color_pair_number; > void * opts; > int erg; > > // 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; > break; > 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; > break; > default: > PyErr_SetString(PyExc_TypeError, "color_set requires 1 or 2 arguments > (color_pair_number[, opts]?)"); > return NULL; > } > > erg = color_set(color_pair_number, opts); // Debating on forcing null > here. > > if (erg == ERR) > return PyCursesCheckERR(erg, "color_set"); > else > PyInt_FromLong((long) 1L); I did a cursory review of the patch and if this is the exact code, this is a problem. You are missing a return statement. The compiler should have issued a warning for this too. > } > -------------End Snippet --------------------------- > > I also have the following added in (see last line of the snippet): > > ------------- Snippet --------------------------- > static PyMethodDef PyCurses_methods[] = { > {"baudrate", (PyCFunction)PyCurses_baudrate, METH_NOARGS}, > {"beep", (PyCFunction)PyCurses_beep, METH_NOARGS}, > {"can_change_color", (PyCFunction)PyCurses_can_change_color, > METH_NOARGS}, > {"cbreak", (PyCFunction)PyCurses_cbreak, METH_VARARGS}, > {"color_content", (PyCFunction)PyCurses_Color_Content, > METH_VARARGS}, > {"color_pair", (PyCFunction)PyCurses_color_pair, METH_VARARGS}, > {"color_set", (PyCFunction)PyCurses_color_set, METH_VARARGS}, > -------------End Snippet --------------------------- > > The code compiles and installs fine, but when I run the following unit test, > I get a segmentation fault: > > ------------- Snippet --------------------------- > import unittest, curses > from test import test_support > > def testCursesColorSet(stdscrn): > curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) > curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE); > i = curses.color_set(1, NULL); > stdscrn.addstr("RED/BLACK (%0)\n".format(i)) > i = curses.color_set(2, NULL); > stdscrn.print("WHITE/BLUE (%0)\n".format(i)) > i = curses.color_set(0, NULL); > stdscrn.print("Default (%0)\n".format(i)) > > > def test_main(stdscrn): > curses.savetty() > if curses.has_color(): > testCursesColorSet(stdscrn) > else > stdscr.addstr( "Test Aborted: Color not supported on this terminal.") > > > if __name__ == '__main__': > curses.wrapper(test_main) > -------------End Snippet --------------------------- > > It turns out that by commenting out this line in the _cursesmodule.c code, > allows the unit test to run > obviously reporting the error as expected: > > ------------- Snippet --------------------------- > //erg = color_set(color_pair_number, opts); // Debating on forcing null > here. > -------------End Snippet --------------------------- > > At any rate I am stuck. I am still trying to build just a plain C file > which will test the color_set function > outside of python, but that is another task. > > Any suggestions? Beyond what I said above, typically you need to go the next step. Fire up a debugger and determine exactly where and why it's crashing. Good luck! n _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com