OSDN Git Service

gobex: Use enum instead of boolean for data policy
authorJohan Hedberg <johan.hedberg@intel.com>
Sat, 25 Jun 2011 22:02:48 +0000 (01:02 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 4 Dec 2012 21:21:56 +0000 (22:21 +0100)
gobex/gobex.c
gobex/gobex.h
unit/test-gobex.c

index e432eb5..428fbda 100644 (file)
@@ -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;
index cf79e26..ae34d48 100644 (file)
 #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);
index d1fd5f0..8504a7e 100644 (file)
@@ -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);