Re: [PATCH obexd 03/10] Store received headers in gw_obex_xfer object
From: Jakub Adamek <hidden>
Date: 2011-06-20 17:15:26
Hi, 2011/6/20 Luiz Augusto von Dentz [off-list ref]:
Hi Jakub, On Sun, Jun 19, 2011 at 3:59 AM, Jakub Adamek [off-list ref] wrote:quoted
--- gwobex/obex-priv.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-)diff --git a/gwobex/obex-priv.c b/gwobex/obex-priv.c index aba7dd7..b9216e5 100644 --- a/gwobex/obex-priv.c +++ b/gwobex/obex-priv.c@@ -39,6 +39,7 @@#include <sys/socket.h> #include <openobex/obex.h> +#include <openobex/obex_const.h> #ifdef HAVE_CONFIG_H # include "config.h"@@ -335,6 +336,7 @@ static void get_non_body_headers(obex_t *handle, obex_object_t *object,obex_headerdata_t hv; uint8_t hi; unsigned int hlen; + struct a_header *ah; xfer->target_size = GW_OBEX_UNKNOWN_LENGTH; xfer->modtime = -1;@@ -358,6 +360,26 @@ static void get_non_body_headers(obex_t *handle, obex_object_t *object,xfer->apparam_size = 0; break; default: + ah = g_new0(struct a_header, 1); + ah->hi = hi; + ah->hv_size = hlen; + switch (hi & OBEX_HDR_TYPE_MASK) { + case OBEX_HDR_TYPE_UINT8: + case OBEX_HDR_TYPE_UINT32: + ah->hv = hv; + break; + case OBEX_HDR_TYPE_BYTES: + case OBEX_HDR_TYPE_UNICODE: + ah->hv.bs = g_try_malloc(hlen); + if (ah->hv.bs) { + memcpy((void *) ah->hv.bs, hv.bs, hlen); + ah->hv_size = hlen; + } else { + ah->hv_size = hlen; + }No need to add braces for single line statements.
Will fix. In any case this is badly done, since I think I should test if g_try_malloc returned NULL because of hlen=0 or because of failure.
quoted
+ break; + } + xfer->aheaders = g_slist_append(xfer->aheaders, ah);I would suggest having this code separated in another function e.g. get_aheader, it is easier to identify what the code is doing and switch inside a switch is not very nice to read/understand IMO.
Ok.
-- Luiz Augusto von Dentz