If non-blocking file descriptors or sockets are used, it can happen that incomplete message get sent. --- lib/databuffer.c | 7 +++++++ lib/databuffer.h | 1 + lib/obex_main.c | 2 +- 3 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/lib/databuffer.c b/lib/databuffer.c index 1c43324..72bd4ca 100644 --- a/lib/databuffer.c +++ b/lib/databuffer.c @@ -113,6 +113,13 @@ size_t buf_total_size(const buf_t *p) return p->head_avail + p->data_avail + p->tail_avail + p->data_size; } +int buf_empty(const buf_t *p) +{ + if (!p) + return 1; + return (p->data_size == 0); +} + void buf_resize(buf_t *p, size_t new_size) { uint8_t *tmp; diff --git a/lib/databuffer.h b/lib/databuffer.h index f55a056..2ef8204 100644 --- a/lib/databuffer.h +++ b/lib/databuffer.h @@ -47,6 +47,7 @@ typedef struct databuffer buf_t; buf_t *buf_new(size_t default_size); size_t buf_total_size(const buf_t *p); +int buf_empty(const buf_t *p); void buf_resize(buf_t *p, size_t new_size); buf_t *buf_reuse(buf_t *p); void *buf_reserve_begin(buf_t *p, size_t data_size); diff --git a/lib/obex_main.c b/lib/obex_main.c index 387f271..14a5263 100644 --- a/lib/obex_main.c +++ b/lib/obex_main.c @@ -221,7 +221,7 @@ int obex_data_request(obex_t *self, buf_t *msg, int opcode) status = obex_transport_write(self, msg); if (status > 0) buf_remove_begin(msg, status); - } while (status >= 0 && obex_get_buffer_status(msg)); + } while (status >= 0 && !buf_empty(msg)); return status; } -- 1.7.5.4 ------------------------------------------------------------------------------ Got Input? Slashdot Needs You. Take our quick survey online. Come on, we don't ask for help often. Plus, you'll get a chance to win $100 to spend on ThinkGeek. http://p.sf.net/sfu/slashdot-survey _______________________________________________ Openobex-users mailing list Openobex-users@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/openobex-users