diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2009-03-27 02:26:22 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2009-03-27 02:26:22 +0000 |
commit | 7bdc8eacf14ff0bca9f99ae14302fd94aa7c4ce1 (patch) | |
tree | f4f285c0b1b3f0e52d5f576c3c8512b633596df3 /gpspacket.c | |
parent | d56c57d9a35f178e4121a45ddfaf16cd162671ab (diff) | |
download | gpsd-7bdc8eacf14ff0bca9f99ae14302fd94aa7c4ce1.tar.gz |
Significant simplification of the packet-getter interface.
packet_get() now always returns nonzero when it could either read
fresh data or assemble a packet from data already read and buffered --
no more returning 0 when it has assembled a packet from buffered data
but can't read any new data. I suspect this may have been causing
subtle bugs.
Diffstat (limited to 'gpspacket.c')
-rw-r--r-- | gpspacket.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/gpspacket.c b/gpspacket.c index 2d811a26..087f6ebc 100644 --- a/gpspacket.c +++ b/gpspacket.c @@ -71,25 +71,18 @@ Lexer_init(LexerObject *self) static PyObject * Lexer_get(LexerObject *self, PyObject *args) { - ssize_t len, waiting; + ssize_t len; int fd; if (!PyArg_ParseTuple(args, "i;missing or invalid file descriptor argument to gpspacket.get", &fd)) return NULL; - waiting = packet_buffered_input(&self->lexer); - len = packet_get(fd, &self->lexer); if (PyErr_Occurred()) return NULL; - if (len <= 0 && waiting <= 0) { - self->lexer.type = EMPTY_PACKET; - self->lexer.outbuffer[0] = '\0'; - self->lexer.outbuflen = 0; - } - - return Py_BuildValue("(i, s#)", + return Py_BuildValue("(i, i, s#)", + len, self->lexer.type, self->lexer.outbuffer, self->lexer.outbuflen); @@ -257,7 +250,6 @@ initgpspacket(void) m = Py_InitModule3("gpspacket", gpspacket_methods, module_doc); PyModule_AddIntConstant(m, "BAD_PACKET", BAD_PACKET); - PyModule_AddIntConstant(m, "EMPTY_PACKET", EMPTY_PACKET); PyModule_AddIntConstant(m, "COMMENT_PACKET", COMMENT_PACKET); PyModule_AddIntConstant(m, "NMEA_PACKET", NMEA_PACKET); PyModule_AddIntConstant(m, "SIRF_PACKET", SIRF_PACKET); |