summaryrefslogtreecommitdiff
path: root/gpspacket.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2009-03-27 02:26:22 +0000
committerEric S. Raymond <esr@thyrsus.com>2009-03-27 02:26:22 +0000
commit7bdc8eacf14ff0bca9f99ae14302fd94aa7c4ce1 (patch)
treef4f285c0b1b3f0e52d5f576c3c8512b633596df3 /gpspacket.c
parentd56c57d9a35f178e4121a45ddfaf16cd162671ab (diff)
downloadgpsd-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.c14
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);