Patch 1114: fix compilation of curses module on 64-bit AIX, and any other LP64 platforms where attr_t isn't a C long

This commit is contained in:
Andrew M. Kuchling 2008-01-08 14:58:52 +00:00
parent 85cbabfde9
commit 7a062c6dca
2 changed files with 83 additions and 25 deletions

View File

@ -166,6 +166,10 @@ Extension Modules
- Bug #1301: Bad assert in _tkinter fixed. - Bug #1301: Bad assert in _tkinter fixed.
- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly
other 64-bit LP64 platforms where attr_t is not the same size as a long.
(Contributed by Luke Mewburn.)
- Bug #1649098: Avoid declaration of zero-sized array declaration in - Bug #1649098: Avoid declaration of zero-sized array declaration in
structure. structure.

View File

@ -312,9 +312,6 @@ Window_NoArg2TupleReturnFunction(getbegyx, int, "ii")
Window_NoArg2TupleReturnFunction(getmaxyx, int, "ii") Window_NoArg2TupleReturnFunction(getmaxyx, int, "ii")
Window_NoArg2TupleReturnFunction(getparyx, int, "ii") Window_NoArg2TupleReturnFunction(getparyx, int, "ii")
Window_OneArgNoReturnFunction(wattron, attr_t, "l;attr")
Window_OneArgNoReturnFunction(wattroff, attr_t, "l;attr")
Window_OneArgNoReturnFunction(wattrset, attr_t, "l;attr")
Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)") Window_OneArgNoReturnFunction(clearok, int, "i;True(1) or False(0)")
Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)") Window_OneArgNoReturnFunction(idlok, int, "i;True(1) or False(0)")
#if defined(__NetBSD__) #if defined(__NetBSD__)
@ -369,6 +366,7 @@ PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
PyObject *temp; PyObject *temp;
chtype ch = 0; chtype ch = 0;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 1: case 1:
@ -376,8 +374,9 @@ PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &temp, &attr)) if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &temp, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
case 3: case 3:
if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &temp)) if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &temp))
@ -386,8 +385,9 @@ PyCursesWindow_AddCh(PyCursesWindowObject *self, PyObject *args)
break; break;
case 4: case 4:
if (!PyArg_ParseTuple(args,"iiOl;y,x,ch or int, attr", if (!PyArg_ParseTuple(args,"iiOl;y,x,ch or int, attr",
&y, &x, &temp, &attr)) &y, &x, &temp, &lattr))
return NULL; return NULL;
attr = lattr;
use_xy = TRUE; use_xy = TRUE;
break; break;
default: default:
@ -415,6 +415,7 @@ PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
int x, y; int x, y;
char *str; char *str;
attr_t attr = A_NORMAL , attr_old = A_NORMAL; attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE; int use_xy = FALSE, use_attr = FALSE;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
@ -423,8 +424,9 @@ PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args,"sl;str,attr", &str, &attr)) if (!PyArg_ParseTuple(args,"sl;str,attr", &str, &lattr))
return NULL; return NULL;
attr = lattr;
use_attr = TRUE; use_attr = TRUE;
break; break;
case 3: case 3:
@ -433,8 +435,9 @@ PyCursesWindow_AddStr(PyCursesWindowObject *self, PyObject *args)
use_xy = TRUE; use_xy = TRUE;
break; break;
case 4: case 4:
if (!PyArg_ParseTuple(args,"iisl;int,int,str,attr", &y, &x, &str, &attr)) if (!PyArg_ParseTuple(args,"iisl;int,int,str,attr", &y, &x, &str, &lattr))
return NULL; return NULL;
attr = lattr;
use_xy = use_attr = TRUE; use_xy = use_attr = TRUE;
break; break;
default: default:
@ -461,6 +464,7 @@ PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
int rtn, x, y, n; int rtn, x, y, n;
char *str; char *str;
attr_t attr = A_NORMAL , attr_old = A_NORMAL; attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE; int use_xy = FALSE, use_attr = FALSE;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
@ -469,8 +473,9 @@ PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 3: case 3:
if (!PyArg_ParseTuple(args,"sil;str,n,attr", &str, &n, &attr)) if (!PyArg_ParseTuple(args,"sil;str,n,attr", &str, &n, &lattr))
return NULL; return NULL;
attr = lattr;
use_attr = TRUE; use_attr = TRUE;
break; break;
case 4: case 4:
@ -479,8 +484,9 @@ PyCursesWindow_AddNStr(PyCursesWindowObject *self, PyObject *args)
use_xy = TRUE; use_xy = TRUE;
break; break;
case 5: case 5:
if (!PyArg_ParseTuple(args,"iisil;y,x,str,n,attr", &y, &x, &str, &n, &attr)) if (!PyArg_ParseTuple(args,"iisil;y,x,str,n,attr", &y, &x, &str, &n, &lattr))
return NULL; return NULL;
attr = lattr;
use_xy = use_attr = TRUE; use_xy = use_attr = TRUE;
break; break;
default: default:
@ -507,6 +513,7 @@ PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
PyObject *temp; PyObject *temp;
chtype bkgd; chtype bkgd;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 1: case 1:
@ -514,8 +521,9 @@ PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args,"Ol;ch or int,attr", &temp, &attr)) if (!PyArg_ParseTuple(args,"Ol;ch or int,attr", &temp, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
default: default:
PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments"); PyErr_SetString(PyExc_TypeError, "bkgd requires 1 or 2 arguments");
@ -530,12 +538,40 @@ PyCursesWindow_Bkgd(PyCursesWindowObject *self, PyObject *args)
return PyCursesCheckERR(wbkgd(self->win, bkgd | attr), "bkgd"); return PyCursesCheckERR(wbkgd(self->win, bkgd | attr), "bkgd");
} }
static PyObject *
PyCursesWindow_AttrOff(PyCursesWindowObject *self, PyObject *args)
{
long lattr;
if (!PyArg_ParseTuple(args,"l;attr", &lattr))
return NULL;
return PyCursesCheckERR(wattroff(self->win, (attr_t)lattr), "attroff");
}
static PyObject *
PyCursesWindow_AttrOn(PyCursesWindowObject *self, PyObject *args)
{
long lattr;
if (!PyArg_ParseTuple(args,"l;attr", &lattr))
return NULL;
return PyCursesCheckERR(wattron(self->win, (attr_t)lattr), "attron");
}
static PyObject *
PyCursesWindow_AttrSet(PyCursesWindowObject *self, PyObject *args)
{
long lattr;
if (!PyArg_ParseTuple(args,"l;attr", &lattr))
return NULL;
return PyCursesCheckERR(wattrset(self->win, (attr_t)lattr), "attrset");
}
static PyObject * static PyObject *
PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args) PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
{ {
PyObject *temp; PyObject *temp;
chtype bkgd; chtype bkgd;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 1: case 1:
@ -543,8 +579,9 @@ PyCursesWindow_BkgdSet(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args,"Ol;ch or int,attr", &temp, &attr)) if (!PyArg_ParseTuple(args,"Ol;ch or int,attr", &temp, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
default: default:
PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments"); PyErr_SetString(PyExc_TypeError, "bkgdset requires 1 or 2 arguments");
@ -682,6 +719,7 @@ PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
PyObject *temp; PyObject *temp;
chtype ch; chtype ch;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 1: case 1:
@ -689,8 +727,9 @@ PyCursesWindow_EchoChar(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args,"Ol;ch or int,attr", &temp, &attr)) if (!PyArg_ParseTuple(args,"Ol;ch or int,attr", &temp, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
default: default:
PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments"); PyErr_SetString(PyExc_TypeError, "echochar requires 1 or 2 arguments");
@ -856,6 +895,7 @@ PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
chtype ch; chtype ch;
int n, x, y, code = OK; int n, x, y, code = OK;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 2: case 2:
@ -863,8 +903,9 @@ PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 3: case 3:
if (!PyArg_ParseTuple(args, "Oil;ch or int,n,attr", &temp, &n, &attr)) if (!PyArg_ParseTuple(args, "Oil;ch or int,n,attr", &temp, &n, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
case 4: case 4:
if (!PyArg_ParseTuple(args, "iiOi;y,x,ch or int,n", &y, &x, &temp, &n)) if (!PyArg_ParseTuple(args, "iiOi;y,x,ch or int,n", &y, &x, &temp, &n))
@ -873,8 +914,9 @@ PyCursesWindow_Hline(PyCursesWindowObject *self, PyObject *args)
break; break;
case 5: case 5:
if (!PyArg_ParseTuple(args, "iiOil; y,x,ch or int,n,attr", if (!PyArg_ParseTuple(args, "iiOil; y,x,ch or int,n,attr",
&y, &x, &temp, &n, &attr)) &y, &x, &temp, &n, &lattr))
return NULL; return NULL;
attr = lattr;
code = wmove(self->win, y, x); code = wmove(self->win, y, x);
break; break;
default: default:
@ -900,6 +942,7 @@ PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
PyObject *temp; PyObject *temp;
chtype ch = 0; chtype ch = 0;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 1: case 1:
@ -907,8 +950,9 @@ PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &temp, &attr)) if (!PyArg_ParseTuple(args, "Ol;ch or int,attr", &temp, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
case 3: case 3:
if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &temp)) if (!PyArg_ParseTuple(args,"iiO;y,x,ch or int", &y, &x, &temp))
@ -916,8 +960,9 @@ PyCursesWindow_InsCh(PyCursesWindowObject *self, PyObject *args)
use_xy = TRUE; use_xy = TRUE;
break; break;
case 4: case 4:
if (!PyArg_ParseTuple(args,"iiOl;y,x,ch or int, attr", &y, &x, &temp, &attr)) if (!PyArg_ParseTuple(args,"iiOl;y,x,ch or int, attr", &y, &x, &temp, &lattr))
return NULL; return NULL;
attr = lattr;
use_xy = TRUE; use_xy = TRUE;
break; break;
default: default:
@ -1002,6 +1047,7 @@ PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
int x, y; int x, y;
char *str; char *str;
attr_t attr = A_NORMAL , attr_old = A_NORMAL; attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE; int use_xy = FALSE, use_attr = FALSE;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
@ -1010,8 +1056,9 @@ PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 2: case 2:
if (!PyArg_ParseTuple(args,"sl;str,attr", &str, &attr)) if (!PyArg_ParseTuple(args,"sl;str,attr", &str, &lattr))
return NULL; return NULL;
attr = lattr;
use_attr = TRUE; use_attr = TRUE;
break; break;
case 3: case 3:
@ -1020,8 +1067,9 @@ PyCursesWindow_InsStr(PyCursesWindowObject *self, PyObject *args)
use_xy = TRUE; use_xy = TRUE;
break; break;
case 4: case 4:
if (!PyArg_ParseTuple(args,"iisl;y,x,str,attr", &y, &x, &str, &attr)) if (!PyArg_ParseTuple(args,"iisl;y,x,str,attr", &y, &x, &str, &lattr))
return NULL; return NULL;
attr = lattr;
use_xy = use_attr = TRUE; use_xy = use_attr = TRUE;
break; break;
default: default:
@ -1048,6 +1096,7 @@ PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
int rtn, x, y, n; int rtn, x, y, n;
char *str; char *str;
attr_t attr = A_NORMAL , attr_old = A_NORMAL; attr_t attr = A_NORMAL , attr_old = A_NORMAL;
long lattr;
int use_xy = FALSE, use_attr = FALSE; int use_xy = FALSE, use_attr = FALSE;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
@ -1056,8 +1105,9 @@ PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 3: case 3:
if (!PyArg_ParseTuple(args,"sil;str,n,attr", &str, &n, &attr)) if (!PyArg_ParseTuple(args,"sil;str,n,attr", &str, &n, &lattr))
return NULL; return NULL;
attr = lattr;
use_attr = TRUE; use_attr = TRUE;
break; break;
case 4: case 4:
@ -1066,8 +1116,9 @@ PyCursesWindow_InsNStr(PyCursesWindowObject *self, PyObject *args)
use_xy = TRUE; use_xy = TRUE;
break; break;
case 5: case 5:
if (!PyArg_ParseTuple(args,"iisil;y,x,str,n,attr", &y, &x, &str, &n, &attr)) if (!PyArg_ParseTuple(args,"iisil;y,x,str,n,attr", &y, &x, &str, &n, &lattr))
return NULL; return NULL;
attr = lattr;
use_xy = use_attr = TRUE; use_xy = use_attr = TRUE;
break; break;
default: default:
@ -1383,6 +1434,7 @@ PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
chtype ch; chtype ch;
int n, x, y, code = OK; int n, x, y, code = OK;
attr_t attr = A_NORMAL; attr_t attr = A_NORMAL;
long lattr;
switch (PyTuple_Size(args)) { switch (PyTuple_Size(args)) {
case 2: case 2:
@ -1390,8 +1442,9 @@ PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
return NULL; return NULL;
break; break;
case 3: case 3:
if (!PyArg_ParseTuple(args, "Oil;ch or int,n,attr", &temp, &n, &attr)) if (!PyArg_ParseTuple(args, "Oil;ch or int,n,attr", &temp, &n, &lattr))
return NULL; return NULL;
attr = lattr;
break; break;
case 4: case 4:
if (!PyArg_ParseTuple(args, "iiOi;y,x,ch or int,n", &y, &x, &temp, &n)) if (!PyArg_ParseTuple(args, "iiOi;y,x,ch or int,n", &y, &x, &temp, &n))
@ -1400,8 +1453,9 @@ PyCursesWindow_Vline(PyCursesWindowObject *self, PyObject *args)
break; break;
case 5: case 5:
if (!PyArg_ParseTuple(args, "iiOil; y,x,ch or int,n,attr", if (!PyArg_ParseTuple(args, "iiOil; y,x,ch or int,n,attr",
&y, &x, &temp, &n, &attr)) &y, &x, &temp, &n, &lattr))
return NULL; return NULL;
attr = lattr;
code = wmove(self->win, y, x); code = wmove(self->win, y, x);
break; break;
default: default:
@ -1424,9 +1478,9 @@ static PyMethodDef PyCursesWindow_Methods[] = {
{"addch", (PyCFunction)PyCursesWindow_AddCh, METH_VARARGS}, {"addch", (PyCFunction)PyCursesWindow_AddCh, METH_VARARGS},
{"addnstr", (PyCFunction)PyCursesWindow_AddNStr, METH_VARARGS}, {"addnstr", (PyCFunction)PyCursesWindow_AddNStr, METH_VARARGS},
{"addstr", (PyCFunction)PyCursesWindow_AddStr, METH_VARARGS}, {"addstr", (PyCFunction)PyCursesWindow_AddStr, METH_VARARGS},
{"attroff", (PyCFunction)PyCursesWindow_wattroff, METH_VARARGS}, {"attroff", (PyCFunction)PyCursesWindow_AttrOff, METH_VARARGS},
{"attron", (PyCFunction)PyCursesWindow_wattron, METH_VARARGS}, {"attron", (PyCFunction)PyCursesWindow_AttrOn, METH_VARARGS},
{"attrset", (PyCFunction)PyCursesWindow_wattrset, METH_VARARGS}, {"attrset", (PyCFunction)PyCursesWindow_AttrSet, METH_VARARGS},
{"bkgd", (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS}, {"bkgd", (PyCFunction)PyCursesWindow_Bkgd, METH_VARARGS},
{"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS}, {"bkgdset", (PyCFunction)PyCursesWindow_BkgdSet, METH_VARARGS},
{"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS}, {"border", (PyCFunction)PyCursesWindow_Border, METH_VARARGS},