From 352a739a897f4575c21fd520288574302a54cb8d Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sun, 26 Jun 2011 01:02:48 +0300 Subject: [PATCH] gobex: Use enum instead of boolean for data policy --- gobex/gobex.c | 23 +++++++++++++++++------ gobex/gobex.h | 10 ++++++++-- unit/test-gobex.c | 28 ++++++++++++++++------------ 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/gobex/gobex.c b/gobex/gobex.c index e432eb582..428fbda41 100644 --- a/gobex/gobex.c +++ b/gobex/gobex.c @@ -140,7 +140,7 @@ size_t g_obex_header_encode(GObexHeader *header, void *buf, size_t buf_len) } GObexHeader *g_obex_header_decode(const void *data, size_t len, - gboolean copy, size_t *parsed) + GObexDataPolicy data_policy, size_t *parsed) { GObexHeader *header; const guint8 *ptr = data; @@ -186,11 +186,16 @@ GObexHeader *g_obex_header_decode(const void *data, size_t len, header->vlen = hdr_len - 3; header->hlen = hdr_len; - if (copy) + switch (data_policy) { + case G_OBEX_DATA_COPY: header->v.data = g_memdup(ptr, header->vlen); - else { + break; + case G_OBEX_DATA_REF: header->extdata = TRUE; header->v.extdata = ptr; + break; + default: + goto failed; } *parsed = hdr_len; @@ -264,7 +269,7 @@ GObexHeader *g_obex_header_unicode(guint8 id, const char *str) } GObexHeader *g_obex_header_bytes(guint8 id, void *data, size_t len, - gboolean copy_data) + GObexDataPolicy data_policy) { GObexHeader *header; @@ -277,11 +282,17 @@ GObexHeader *g_obex_header_bytes(guint8 id, void *data, size_t len, header->vlen = len; header->hlen = len + 3; - if (copy_data) + switch (data_policy) { + case G_OBEX_DATA_INHERIT: + header->v.data = data; + break; + case G_OBEX_DATA_COPY: header->v.data = g_memdup(data, len); - else { + break; + case G_OBEX_DATA_REF: header->extdata = TRUE; header->v.extdata = data; + break; } return header; diff --git a/gobex/gobex.h b/gobex/gobex.h index cf79e26d5..ae34d4878 100644 --- a/gobex/gobex.h +++ b/gobex/gobex.h @@ -62,19 +62,25 @@ #define G_OBEX_HDR_ID_SRM 0x97 #define G_OBEX_HDR_ID_SRM_FLAGS 0x98 +typedef enum { + G_OBEX_DATA_INHERIT, + G_OBEX_DATA_COPY, + G_OBEX_DATA_REF, +} GObexDataPolicy; + typedef struct _GObex GObex; typedef struct _GObexRequest GObexRequest; typedef struct _GObexHeader GObexHeader; GObexHeader *g_obex_header_unicode(guint8 id, const char *str); GObexHeader *g_obex_header_bytes(guint8 id, void *data, size_t len, - gboolean copy_data); + GObexDataPolicy data_policy); GObexHeader *g_obex_header_uint8(guint8 id, guint8 val); GObexHeader *g_obex_header_uint32(guint8 id, guint32 val); size_t g_obex_header_encode(GObexHeader *header, void *hdr_ptr, size_t buf_len); GObexHeader *g_obex_header_decode(const void *data, size_t len, - gboolean copy, size_t *parsed); + GObexDataPolicy data_policy, size_t *parsed); void g_obex_header_free(GObexHeader *header); gboolean g_obex_request_add_header(GObexRequest *req, GObexHeader *header); diff --git a/unit/test-gobex.c b/unit/test-gobex.c index d1fd5f03d..8504a7eab 100644 --- a/unit/test-gobex.c +++ b/unit/test-gobex.c @@ -106,7 +106,7 @@ static void test_header_bytes(void) size_t len; header = g_obex_header_bytes(G_OBEX_HDR_ID_BODY, data, sizeof(data), - FALSE); + G_OBEX_DATA_REF); g_assert(header != NULL); @@ -155,7 +155,7 @@ static void parse_and_encode(uint8_t *buf, size_t buf_len) uint8_t encoded[1024]; size_t len; - header = g_obex_header_decode(buf, buf_len, FALSE, &len); + header = g_obex_header_decode(buf, buf_len, G_OBEX_DATA_REF, &len); g_assert(header != NULL); g_assert_cmpuint(len, ==, buf_len); @@ -197,7 +197,7 @@ static void test_parse_header_connid(void) size_t parsed; header = g_obex_header_decode(hdr_connid, sizeof(hdr_connid), - FALSE, &parsed); + G_OBEX_DATA_REF, &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_connid)); @@ -211,7 +211,7 @@ static void test_parse_header_name_ascii(void) size_t parsed; header = g_obex_header_decode(hdr_name_ascii, sizeof(hdr_name_ascii), - FALSE, &parsed); + G_OBEX_DATA_REF, &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_name_ascii)); @@ -225,7 +225,7 @@ static void test_parse_header_name_umlaut(void) size_t parsed; header = g_obex_header_decode(hdr_name_umlaut, sizeof(hdr_name_umlaut), - FALSE, &parsed); + G_OBEX_DATA_REF, &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_name_umlaut)); @@ -239,7 +239,7 @@ static void test_parse_header_body(void) size_t parsed; header = g_obex_header_decode(hdr_body, sizeof(hdr_body), - FALSE, &parsed); + G_OBEX_DATA_COPY, &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_body)); @@ -253,7 +253,7 @@ static void test_parse_header_body_extdata(void) size_t parsed; header = g_obex_header_decode(hdr_body, sizeof(hdr_body), - TRUE, &parsed); + G_OBEX_DATA_REF, &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_body)); @@ -267,7 +267,7 @@ static void test_parse_header_actionid(void) size_t parsed; header = g_obex_header_decode(hdr_actionid, sizeof(hdr_actionid), - FALSE, &parsed); + G_OBEX_DATA_REF, &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_actionid)); @@ -291,25 +291,29 @@ static void test_parse_header_multi(void) g_byte_array_append(buf, hdr_actionid, sizeof(hdr_actionid)); g_byte_array_append(buf, hdr_body, sizeof(hdr_body)); - header = g_obex_header_decode(buf->data, buf->len, FALSE, &parsed); + header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF, + &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_connid)); g_byte_array_remove_range(buf, 0, parsed); g_obex_header_free(header); - header = g_obex_header_decode(buf->data, buf->len, FALSE, &parsed); + header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF, + &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_name_ascii)); g_byte_array_remove_range(buf, 0, parsed); g_obex_header_free(header); - header = g_obex_header_decode(buf->data, buf->len, FALSE, &parsed); + header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF, + &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_actionid)); g_byte_array_remove_range(buf, 0, parsed); g_obex_header_free(header); - header = g_obex_header_decode(buf->data, buf->len, FALSE, &parsed); + header = g_obex_header_decode(buf->data, buf->len, G_OBEX_DATA_REF, + &parsed); g_assert(header != NULL); g_assert_cmpuint(parsed, ==, sizeof(hdr_body)); g_byte_array_remove_range(buf, 0, parsed); -- 2.47.3