From 0ddd4381610ccf4d88974a3fd191f0be717ca476 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Sun, 5 Apr 2015 10:02:16 +0100 Subject: [PATCH] Helper macros. --- src/database.c | 16 ++++++++-------- src/mosquitto_broker.h | 3 +++ src/persist.c | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/database.c b/src/database.c index 27001879..79b1d0ab 100644 --- a/src/database.c +++ b/src/database.c @@ -179,7 +179,7 @@ void mosquitto__db_msg_store_remove(struct mosquitto_db *db, struct mosquitto_ms _mosquitto_free(store->dest_ids); } UHPA_FREE_TOPIC(store); - UHPA_FREE(store->payload, store->payloadlen); + UHPA_FREE_PAYLOAD(store); _mosquitto_free(store); } @@ -548,22 +548,22 @@ int mqtt3_db_message_store(struct mosquitto_db *db, const char *source, uint16_t } temp->payloadlen = payloadlen; if(payloadlen){ - UHPA_ALLOC(temp->payload, payloadlen); - if(!UHPA_ACCESS(temp->payload, payloadlen)){ + UHPA_ALLOC_PAYLOAD(temp); + if(!UHPA_ACCESS_PAYLOAD(temp)){ if(temp->source_id) _mosquitto_free(temp->source_id); - UHPA_FREE(temp->topic, temp->topic_len+1); + UHPA_FREE_TOPIC(temp); _mosquitto_free(temp); return MOSQ_ERR_NOMEM; } - memcpy(UHPA_ACCESS(temp->payload, payloadlen), payload, sizeof(char)*payloadlen); + memcpy(UHPA_ACCESS_PAYLOAD(temp), payload, sizeof(char)*payloadlen); }else{ temp->payload.ptr = NULL; } - if(!temp->source_id || (payloadlen && !UHPA_ACCESS(temp->payload, payloadlen))){ + if(!temp->source_id || (payloadlen && !UHPA_ACCESS_PAYLOAD(temp))){ if(temp->source_id) _mosquitto_free(temp->source_id); UHPA_FREE_TOPIC(temp); - UHPA_FREE(temp->payload, payloadlen); + UHPA_FREE_PAYLOAD(temp); _mosquitto_free(temp); return 1; } @@ -827,7 +827,7 @@ int mqtt3_db_message_write(struct mosquitto_db *db, struct mosquitto *context) topic = UHPA_ACCESS_TOPIC(tail->store); qos = tail->qos; payloadlen = tail->store->payloadlen; - payload = UHPA_ACCESS(tail->store->payload, tail->store->payloadlen); + payload = UHPA_ACCESS_PAYLOAD(tail->store); switch(tail->state){ case mosq_ms_publish_qos0: diff --git a/src/mosquitto_broker.h b/src/mosquitto_broker.h index b8ed107d..bfb42ae7 100644 --- a/src/mosquitto_broker.h +++ b/src/mosquitto_broker.h @@ -94,6 +94,9 @@ typedef union { void *ptr; char array[MOSQ_PAYLOAD_UNION_SIZE]; } mosquitto__payload_uhpa; +#define UHPA_ALLOC_PAYLOAD(A) UHPA_ALLOC((A)->payload, (A)->payloadlen) +#define UHPA_ACCESS_PAYLOAD(A) UHPA_ACCESS((A)->payload, (A)->payloadlen) +#define UHPA_FREE_PAYLOAD(A) UHPA_FREE((A)->payload, (A)->payloadlen) #define MOSQ_TOPIC_UNION_SIZE 8 typedef union { diff --git a/src/persist.c b/src/persist.c index 952a94f6..3629da90 100644 --- a/src/persist.c +++ b/src/persist.c @@ -191,7 +191,7 @@ static int mqtt3_db_message_store_write(struct mosquitto_db *db, FILE *db_fptr) i32temp = htonl(stored->payloadlen); write_e(db_fptr, &i32temp, sizeof(uint32_t)); if(stored->payloadlen){ - write_e(db_fptr, UHPA_ACCESS(stored->payload, stored->payloadlen), (unsigned int)stored->payloadlen); + write_e(db_fptr, UHPA_ACCESS_PAYLOAD(stored), (unsigned int)stored->payloadlen); } stored = stored->next; } @@ -667,7 +667,7 @@ static int _db_retain_chunk_restore(struct mosquitto_db *db, FILE *db_fptr) store_id = i64temp; HASH_FIND(hh, db->msg_store_load, &store_id, sizeof(dbid_t), load); if(load){ - mqtt3_db_messages_queue(db, NULL, UHPA_ACCESS(load->store->topic, load->store->topic_len), load->store->qos, load->store->retain, &load->store); + mqtt3_db_messages_queue(db, NULL, UHPA_ACCESS_TOPIC(load->store), load->store->qos, load->store->retain, &load->store); }else{ _mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Error: Corrupt database whilst restoring a retained message."); return MOSQ_ERR_INVAL;