From 903c035f7948d1c216d2d85a68458572b0b17e36 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?utf8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Sat, 25 Feb 2017 12:57:37 +0000 Subject: [PATCH] W32: Fix msg allocation in gns helper service The code was hacky, and GCC warned about variables being used without initialization. Turns out, it was much worse. --- src/gns/gnunet-gns-helper-service-w32.c | 50 +++++++------------------ 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/src/gns/gnunet-gns-helper-service-w32.c b/src/gns/gnunet-gns-helper-service-w32.c index 33de2aab6..a59cc5981 100644 --- a/src/gns/gnunet-gns-helper-service-w32.c +++ b/src/gns/gnunet-gns-helper-service-w32.c @@ -154,27 +154,6 @@ do_shutdown (void *cls) } -/** - * Transmit the given message to the client. - * - * @param client target of the message - * @param msg message to transmit, will be freed! - */ -static void -transmit (struct GNUNET_SERVICE_Client *client, - struct GNUNET_MessageHeader *msg) -{ - struct GNUNET_MQ_Handle *mq = GNUNET_SERVICE_client_get_mq (client); - struct GNUNET_MQ_Envelope *env; - - /* NOTE: small hack here, should have constructed and - passed an 'env' in the first place... */ - env = GNUNET_MQ_msg_copy (msg); - GNUNET_MQ_send (mq, - env); -} - - #define MarshallPtr(ptr, base, type) \ if (ptr) \ ptr = (type *) ((char *) ptr - (char *) base) @@ -222,7 +201,9 @@ process_lookup_result (void *cls, struct request *rq = cls; int i, j, csanum; struct GNUNET_W32RESOLVER_GetMessage *msg; + struct GNUNET_MQ_Envelope *msg_env; struct GNUNET_MessageHeader *msgend; + struct GNUNET_MQ_Envelope *msgend_env; WSAQUERYSETW *qs; size_t size; size_t size_recalc; @@ -239,11 +220,9 @@ process_lookup_result (void *cls, if (0 == rd_count) { - msg = GNUNET_new (struct GNUNET_MessageHeader); - msg->header.size = htons (sizeof (struct GNUNET_MessageHeader)); - msg->header.type = htons (GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); - transmit (rq->client, - &msg->header); + msgend_env = GNUNET_MQ_msg (msgend, GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); + GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (rq->client), + msgend_env); GNUNET_CONTAINER_DLL_remove (rq_head, rq_tail, rq); @@ -304,9 +283,9 @@ process_lookup_result (void *cls, size += blobsize; } size_recalc = sizeof (struct GNUNET_W32RESOLVER_GetMessage) + sizeof (WSAQUERYSETW); - msg = GNUNET_malloc (size); - msg->header.size = htons (size - sizeof (struct GNUNET_MessageHeader)); - msg->header.type = htons (GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); + msg_env = GNUNET_MQ_msg_extra (msg, + size - sizeof (struct GNUNET_MessageHeader), + GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); msg->af = htonl (rq->af); msg->sc_data1 = htonl (rq->sc.Data1); msg->sc_data2 = htons (rq->sc.Data2); @@ -465,10 +444,7 @@ process_lookup_result (void *cls, } he->h_addr_list[j] = NULL; } - msgend = GNUNET_new (struct GNUNET_MessageHeader); - - msgend->type = htons (GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); - msgend->size = htons (sizeof (struct GNUNET_MessageHeader)); + msgend_env = GNUNET_MQ_msg (msgend, GNUNET_MESSAGE_TYPE_W32RESOLVER_RESPONSE); if ((char *) ptr - (char *) msg != size || size_recalc != size || size_recalc != ((char *) ptr - (char *) msg)) { @@ -479,10 +455,10 @@ process_lookup_result (void *cls, size_recalc); } MarshallWSAQUERYSETW (qs, &rq->sc); - transmit (rq->client, - &msg->header); - transmit (rq->client, - msgend); + GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (rq->client), + msg_env); + GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (rq->client), + msgend_env); GNUNET_CONTAINER_DLL_remove (rq_head, rq_tail, rq); -- 2.25.1