mirror of
https://github.com/python/cpython.git
synced 2025-11-11 14:44:57 +00:00
The usual return-value and memory management checks. I'm not planning
a test for this module though (it does compile at least on Solaris 2.5)
This commit is contained in:
parent
4de02d9722
commit
5709dcfaec
1 changed files with 16 additions and 10 deletions
|
|
@ -45,7 +45,7 @@ termios_tcgetattr(self, args)
|
||||||
ch = (char)mode.c_cc[i];
|
ch = (char)mode.c_cc[i];
|
||||||
v = PyString_FromStringAndSize(&ch, 1);
|
v = PyString_FromStringAndSize(&ch, 1);
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return NULL;
|
goto err;
|
||||||
PyList_SetItem(cc, i, v);
|
PyList_SetItem(cc, i, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -55,15 +55,17 @@ termios_tcgetattr(self, args)
|
||||||
if ((mode.c_lflag & ICANON) == 0) {
|
if ((mode.c_lflag & ICANON) == 0) {
|
||||||
v = PyInt_FromLong((long)mode.c_cc[VMIN]);
|
v = PyInt_FromLong((long)mode.c_cc[VMIN]);
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return NULL;
|
goto err;
|
||||||
PyList_SetItem(cc, VMIN, v);
|
PyList_SetItem(cc, VMIN, v);
|
||||||
v = PyInt_FromLong((long)mode.c_cc[VTIME]);
|
v = PyInt_FromLong((long)mode.c_cc[VTIME]);
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return NULL;
|
goto err;
|
||||||
PyList_SetItem(cc, VTIME, v);
|
PyList_SetItem(cc, VTIME, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
v = PyList_New(7);
|
if (!(v = PyList_New(7)))
|
||||||
|
goto err;
|
||||||
|
|
||||||
PyList_SetItem(v, 0, PyInt_FromLong((long)mode.c_iflag));
|
PyList_SetItem(v, 0, PyInt_FromLong((long)mode.c_iflag));
|
||||||
PyList_SetItem(v, 1, PyInt_FromLong((long)mode.c_oflag));
|
PyList_SetItem(v, 1, PyInt_FromLong((long)mode.c_oflag));
|
||||||
PyList_SetItem(v, 2, PyInt_FromLong((long)mode.c_cflag));
|
PyList_SetItem(v, 2, PyInt_FromLong((long)mode.c_cflag));
|
||||||
|
|
@ -71,8 +73,14 @@ termios_tcgetattr(self, args)
|
||||||
PyList_SetItem(v, 4, PyInt_FromLong((long)ispeed));
|
PyList_SetItem(v, 4, PyInt_FromLong((long)ispeed));
|
||||||
PyList_SetItem(v, 5, PyInt_FromLong((long)ospeed));
|
PyList_SetItem(v, 5, PyInt_FromLong((long)ospeed));
|
||||||
PyList_SetItem(v, 6, cc);
|
PyList_SetItem(v, 6, cc);
|
||||||
|
if (PyErr_Occurred()){
|
||||||
|
Py_DECREF(v);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
return v;
|
return v;
|
||||||
|
err:
|
||||||
|
Py_DECREF(cc);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tcsetattr(fd, when, termios)
|
/* tcsetattr(fd, when, termios)
|
||||||
|
|
@ -95,11 +103,6 @@ termios_tcsetattr(self, args)
|
||||||
PyErr_SetString(PyExc_TypeError, BAD);
|
PyErr_SetString(PyExc_TypeError, BAD);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for (i = 0; i < 6; i++)
|
|
||||||
if (!PyInt_Check(PyList_GetItem(term, i))) {
|
|
||||||
PyErr_SetString(PyExc_TypeError, BAD);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mode.c_iflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 0));
|
mode.c_iflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 0));
|
||||||
mode.c_oflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 1));
|
mode.c_oflag = (tcflag_t) PyInt_AsLong(PyList_GetItem(term, 1));
|
||||||
|
|
@ -108,6 +111,8 @@ termios_tcsetattr(self, args)
|
||||||
ispeed = (speed_t) PyInt_AsLong(PyList_GetItem(term, 4));
|
ispeed = (speed_t) PyInt_AsLong(PyList_GetItem(term, 4));
|
||||||
ospeed = (speed_t) PyInt_AsLong(PyList_GetItem(term, 5));
|
ospeed = (speed_t) PyInt_AsLong(PyList_GetItem(term, 5));
|
||||||
cc = PyList_GetItem(term, 6);
|
cc = PyList_GetItem(term, 6);
|
||||||
|
if (PyErr_Occurred())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
if (!PyList_Check(cc) || PyList_Size(cc) != NCCS) {
|
if (!PyList_Check(cc) || PyList_Size(cc) != NCCS) {
|
||||||
PyErr_SetString(PyExc_TypeError, BAD);
|
PyErr_SetString(PyExc_TypeError, BAD);
|
||||||
|
|
@ -116,6 +121,7 @@ termios_tcsetattr(self, args)
|
||||||
|
|
||||||
for (i = 0; i < NCCS; i++) {
|
for (i = 0; i < NCCS; i++) {
|
||||||
v = PyList_GetItem(cc, i);
|
v = PyList_GetItem(cc, i);
|
||||||
|
|
||||||
if (PyString_Check(v) && PyString_Size(v) == 1)
|
if (PyString_Check(v) && PyString_Size(v) == 1)
|
||||||
mode.c_cc[i] = (cc_t) * PyString_AsString(v);
|
mode.c_cc[i] = (cc_t) * PyString_AsString(v);
|
||||||
else if (PyInt_Check(v))
|
else if (PyInt_Check(v))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue