Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Modules/_curses_panel.c

    r2 r391  
    2323
    2424/*
    25  * Check the return code from a curses function and return None 
     25 * Check the return code from a curses function and return None
    2626 * or raise an exception as appropriate.
    2727 */
     
    3131{
    3232    if (code != ERR) {
    33         Py_INCREF(Py_None);
    34         return Py_None;
     33        Py_INCREF(Py_None);
     34        return Py_None;
    3535    } else {
    36         if (fname == NULL) {
    37             PyErr_SetString(PyCursesError, catchall_ERR);
    38         } else {
    39             PyErr_Format(PyCursesError, "%s() returned ERR", fname);
    40         }
    41         return NULL;
     36        if (fname == NULL) {
     37            PyErr_SetString(PyCursesError, catchall_ERR);
     38        } else {
     39            PyErr_Format(PyCursesError, "%s() returned ERR", fname);
     40        }
     41        return NULL;
    4242    }
    4343}
     
    5252    PyObject_HEAD
    5353    PANEL *pan;
    54     PyCursesWindowObject *wo;   /* for reference counts */
     54    PyCursesWindowObject *wo;   /* for reference counts */
    5555} PyCursesPanelObject;
    5656
    5757PyTypeObject PyCursesPanel_Type;
    5858
    59 #define PyCursesPanel_Check(v)  (Py_TYPE(v) == &PyCursesPanel_Type)
     59#define PyCursesPanel_Check(v)  (Py_TYPE(v) == &PyCursesPanel_Type)
    6060
    6161/* Some helper functions. The problem is that there's always a window
     
    8989{
    9090    list_of_panels *new;
    91    
     91
    9292    if ((new = (list_of_panels *)malloc(sizeof(list_of_panels))) == NULL) {
    93         PyErr_NoMemory();
    94         return -1;
     93        PyErr_NoMemory();
     94        return -1;
    9595    }
    9696    new->po = po;
     
    108108    temp = lop;
    109109    if (temp->po == po) {
    110         lop = temp->next;
    111         free(temp);
    112         return;
     110        lop = temp->next;
     111        free(temp);
     112        return;
    113113    }
    114114    while (temp->next == NULL || temp->next->po != po) {
    115         if (temp->next == NULL) {
    116             PyErr_SetString(PyExc_RuntimeError,
    117                             "remove_lop: can't find Panel Object");
    118             return;
    119         }
    120         temp = temp->next;
     115        if (temp->next == NULL) {
     116            PyErr_SetString(PyExc_RuntimeError,
     117                            "remove_lop: can't find Panel Object");
     118            return;
     119        }
     120        temp = temp->next;
    121121    }
    122122    n = temp->next->next;
     
    132132    list_of_panels *temp;
    133133    for (temp = lop; temp->po->pan != pan; temp = temp->next)
    134         if (temp->next == NULL) return NULL;    /* not found!? */
     134        if (temp->next == NULL) return NULL;    /* not found!? */
    135135    return temp->po;
    136136}
     
    179179    if (po == NULL) return NULL;
    180180    po->pan = pan;
     181    if (insert_lop(po) < 0) {
     182        po->wo = NULL;
     183        Py_DECREF(po);
     184        return NULL;
     185    }
    181186    po->wo = wo;
    182187    Py_INCREF(wo);
    183     if (insert_lop(po) < 0) {
    184         PyObject_DEL(po);
    185         return NULL;
    186     }
    187188    return (PyObject *)po;
    188189}
     
    192193{
    193194    (void)del_panel(po->pan);
    194     Py_DECREF(po->wo);
    195     remove_lop(po);
     195    if (po->wo != NULL) {
     196        Py_DECREF(po->wo);
     197        remove_lop(po);
     198    }
    196199    PyObject_DEL(po);
    197200}
     
    204207    PANEL *pan;
    205208    PyCursesPanelObject *po;
    206    
     209
    207210    pan = panel_above(self->pan);
    208211
    209     if (pan == NULL) {          /* valid output, it means the calling panel
    210                                    is on top of the stack */
    211         Py_INCREF(Py_None);
    212         return Py_None;
     212    if (pan == NULL) {          /* valid output, it means the calling panel
     213                                   is on top of the stack */
     214        Py_INCREF(Py_None);
     215        return Py_None;
    213216    }
    214217    po = find_po(pan);
    215218    if (po == NULL) {
    216         PyErr_SetString(PyExc_RuntimeError,
    217                         "panel_above: can't find Panel Object");
    218         return NULL;
     219        PyErr_SetString(PyExc_RuntimeError,
     220                        "panel_above: can't find Panel Object");
     221        return NULL;
    219222    }
    220223    Py_INCREF(po);
     
    229232    PANEL *pan;
    230233    PyCursesPanelObject *po;
    231    
     234
    232235    pan = panel_below(self->pan);
    233    
    234     if (pan == NULL) {          /* valid output, it means the calling panel
    235                                    is on the bottom of the stack */
    236         Py_INCREF(Py_None);
    237         return Py_None;
     236
     237    if (pan == NULL) {          /* valid output, it means the calling panel
     238                                   is on the bottom of the stack */
     239        Py_INCREF(Py_None);
     240        return Py_None;
    238241    }
    239242    po = find_po(pan);
    240243    if (po == NULL) {
    241         PyErr_SetString(PyExc_RuntimeError,
    242                         "panel_below: can't find Panel Object");
    243         return NULL;
     244        PyErr_SetString(PyExc_RuntimeError,
     245                        "panel_below: can't find Panel Object");
     246        return NULL;
    244247    }
    245248    Py_INCREF(po);
     
    260263    PyCursesWindowObject *temp;
    261264    int rtn;
    262    
     265
    263266    if (PyTuple_Size(args) != 1) {
    264         PyErr_SetString(PyExc_TypeError, "replace requires one argument");
    265         return NULL;
     267        PyErr_SetString(PyExc_TypeError, "replace requires one argument");
     268        return NULL;
    266269    }
    267270    if (!PyArg_ParseTuple(args, "O!;window object",
    268                           &PyCursesWindow_Type, &temp))
    269         return NULL;
     271                          &PyCursesWindow_Type, &temp))
     272        return NULL;
    270273
    271274    po = find_po(self->pan);
    272275    if (po == NULL) {
    273         PyErr_SetString(PyExc_RuntimeError,
    274                         "replace_panel: can't find Panel Object");
    275         return NULL;
     276        PyErr_SetString(PyExc_RuntimeError,
     277                        "replace_panel: can't find Panel Object");
     278        return NULL;
    276279    }
    277280
    278281    rtn = replace_panel(self->pan, temp->win);
    279282    if (rtn == ERR) {
    280         PyErr_SetString(PyCursesError, "replace_panel() returned ERR");
    281         return NULL;
     283        PyErr_SetString(PyCursesError, "replace_panel() returned ERR");
     284        return NULL;
    282285    }
    283286    Py_DECREF(po->wo);
     
    291294PyCursesPanel_set_panel_userptr(PyCursesPanelObject *self, PyObject *obj)
    292295{
     296    PyObject *oldobj;
     297    int rc;
     298    PyCursesInitialised;
    293299    Py_INCREF(obj);
    294     return PyCursesCheckERR(set_panel_userptr(self->pan, (void*)obj),
    295                             "set_panel_userptr");
     300    oldobj = (PyObject *) panel_userptr(self->pan);
     301    rc = set_panel_userptr(self->pan, (void*)obj);
     302    if (rc == ERR) {
     303        /* In case of an ncurses error, decref the new object again */
     304        Py_DECREF(obj);
     305    }
     306    Py_XDECREF(oldobj);
     307    return PyCursesCheckERR(rc, "set_panel_userptr");
    296308}
    297309
     
    300312{
    301313    PyObject *obj;
    302     PyCursesInitialised; 
     314    PyCursesInitialised;
    303315    obj = (PyObject *) panel_userptr(self->pan);
    304316    if (obj == NULL) {
    305         PyErr_SetString(PyCursesError, "no userptr set");
    306         return NULL;
     317        PyErr_SetString(PyCursesError, "no userptr set");
     318        return NULL;
    307319    }
    308320
     
    327339    {"userptr",         (PyCFunction)PyCursesPanel_userptr, METH_NOARGS},
    328340    {"window",          (PyCFunction)PyCursesPanel_window, METH_NOARGS},
    329     {NULL,              NULL}   /* sentinel */
     341    {NULL,              NULL}   /* sentinel */
    330342};
    331343
     
    340352PyTypeObject PyCursesPanel_Type = {
    341353    PyVarObject_HEAD_INIT(NULL, 0)
    342     "_curses_panel.curses panel",       /*tp_name*/
    343     sizeof(PyCursesPanelObject),        /*tp_basicsize*/
    344     0,                  /*tp_itemsize*/
     354    "_curses_panel.curses panel",       /*tp_name*/
     355    sizeof(PyCursesPanelObject),        /*tp_basicsize*/
     356    0,                  /*tp_itemsize*/
    345357    /* methods */
    346358    (destructor)PyCursesPanel_Dealloc, /*tp_dealloc*/
    347     0,                  /*tp_print*/
     359    0,                  /*tp_print*/
    348360    (getattrfunc)PyCursesPanel_GetAttr, /*tp_getattr*/
    349361    (setattrfunc)0, /*tp_setattr*/
    350     0,                  /*tp_compare*/
    351     0,                  /*tp_repr*/
    352     0,                  /*tp_as_number*/
    353     0,                  /*tp_as_sequence*/
    354     0,                  /*tp_as_mapping*/
    355     0,                  /*tp_hash*/
     362    0,                  /*tp_compare*/
     363    0,                  /*tp_repr*/
     364    0,                  /*tp_as_number*/
     365    0,                  /*tp_as_sequence*/
     366    0,                  /*tp_as_mapping*/
     367    0,                  /*tp_hash*/
    356368};
    357369
     
    370382    pan = panel_above(NULL);
    371383
    372     if (pan == NULL) {          /* valid output, it means
    373                                    there's no panel at all */ 
    374         Py_INCREF(Py_None);
    375         return Py_None;
     384    if (pan == NULL) {          /* valid output, it means
     385                                   there's no panel at all */
     386        Py_INCREF(Py_None);
     387        return Py_None;
    376388    }
    377389    po = find_po(pan);
    378390    if (po == NULL) {
    379         PyErr_SetString(PyExc_RuntimeError,
    380                         "panel_above: can't find Panel Object");
    381         return NULL;
     391        PyErr_SetString(PyExc_RuntimeError,
     392                        "panel_above: can't find Panel Object");
     393        return NULL;
    382394    }
    383395    Py_INCREF(po);
     
    395407    pan = new_panel(win->win);
    396408    if (pan == NULL) {
    397         PyErr_SetString(PyCursesError, catchall_NULL);
    398         return NULL;
     409        PyErr_SetString(PyCursesError, catchall_NULL);
     410        return NULL;
    399411    }
    400412    return (PyObject *)PyCursesPanel_New(pan, win);
     
    411423    PANEL *pan;
    412424    PyCursesPanelObject *po;
    413    
     425
    414426    PyCursesInitialised;
    415427
    416428    pan = panel_below(NULL);
    417429
    418     if (pan == NULL) {          /* valid output, it means
    419                                    there's no panel at all */
    420         Py_INCREF(Py_None);
    421         return Py_None;
     430    if (pan == NULL) {          /* valid output, it means
     431                                   there's no panel at all */
     432        Py_INCREF(Py_None);
     433        return Py_None;
    422434    }
    423435    po = find_po(pan);
    424436    if (po == NULL) {
    425         PyErr_SetString(PyExc_RuntimeError,
    426                         "panel_below: can't find Panel Object");
    427         return NULL;
     437        PyErr_SetString(PyExc_RuntimeError,
     438                        "panel_below: can't find Panel Object");
     439        return NULL;
    428440    }
    429441    Py_INCREF(po);
     
    432444
    433445static PyObject *PyCurses_update_panels(PyObject *self)
    434 { 
     446{
    435447    PyCursesInitialised;
    436448    update_panels();
     
    447459    {"top_panel",           (PyCFunction)PyCurses_top_panel,     METH_NOARGS},
    448460    {"update_panels",       (PyCFunction)PyCurses_update_panels, METH_NOARGS},
    449     {NULL,              NULL}           /* sentinel */
     461    {NULL,              NULL}           /* sentinel */
    450462};
    451463
     
    465477    m = Py_InitModule("_curses_panel", PyCurses_methods);
    466478    if (m == NULL)
    467         return;
     479        return;
    468480    d = PyModule_GetDict(m);
    469481
Note: See TracChangeset for help on using the changeset viewer.