Helper macros.

pull/139/head
Roger A. Light 11 years ago
parent c7d6c1a865
commit 0ddd438161

@ -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:

@ -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 {

@ -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;

Loading…
Cancel
Save