--- libaitmqtt/src/aitmqtt.c 2012/04/27 08:12:30 1.1.1.1.2.9 +++ libaitmqtt/src/aitmqtt.c 2012/04/27 16:34:25 1.1.1.1.2.12 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitmqtt.c,v 1.1.1.1.2.9 2012/04/27 08:12:30 misho Exp $ +* $Id: aitmqtt.c,v 1.1.1.1.2.12 2012/04/27 16:34:25 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -385,6 +385,63 @@ mqtt_subRealloc(mqtt_subscr_t ** __restrict subs, u_sh return *subs; } + +/* + * mqtt_subCopy() - Copy subscription structure to another one + * + * @dst = destination subscription + * @src = source subscription + * return: =NULL error or !=NULL successful copied a structure + */ +inline mqtt_subscr_t * +mqtt_subCopy(mqtt_subscr_t * __restrict dst, mqtt_subscr_t * __restrict src) +{ + if (!dst || !src) + return NULL; + + if (src->sub_topic.msg_base) { + dst->sub_topic.msg_base = malloc(src->sub_topic.msg_len + 1); + if (!dst->sub_topic.msg_base) { + LOGERR; + memset(dst, 0, sizeof(mqtt_subscr_t)); + return NULL; + } else { + dst->sub_topic.msg_len = src->sub_topic.msg_len; + ((char*) dst->sub_topic.msg_base)[dst->sub_topic.msg_len] = 0; + memcpy(dst->sub_topic.msg_base, src->sub_topic.msg_base, + dst->sub_topic.msg_len); + } + } else { + if (dst->sub_topic.msg_base) + free(dst->sub_topic.msg_base); + dst->sub_topic.msg_base = NULL; + dst->sub_topic.msg_len = 0; + } + if (src->sub_value.msg_base) { + dst->sub_value.msg_base = malloc(src->sub_value.msg_len + 1); + if (!dst->sub_value.msg_base) { + LOGERR; + if (dst->sub_topic.msg_base) + free(dst->sub_topic.msg_base); + memset(dst, 0, sizeof(mqtt_subscr_t)); + return NULL; + } else { + dst->sub_value.msg_len = src->sub_value.msg_len; + ((char*) dst->sub_value.msg_base)[dst->sub_value.msg_len] = 0; + memcpy(dst->sub_value.msg_base, src->sub_value.msg_base, + dst->sub_value.msg_len); + } + } else { + if (dst->sub_value.msg_base) + free(dst->sub_value.msg_base); + dst->sub_value.msg_base = NULL; + dst->sub_value.msg_len = 0; + } + + dst->sub_ret = src->sub_ret; + return dst; +} + /* * mqtt_expandTopic() - Expanding topic to regular expression