Fix subscribe_multiple datatypes.

This commit is contained in:
Roger A. Light 2018-10-04 09:46:51 +01:00
parent 1635dd3883
commit 366744bad7
5 changed files with 10 additions and 6 deletions

View File

@ -96,7 +96,7 @@ void my_connect_callback(struct mosquitto *mosq, void *obj, int result, int flag
cfg = (struct mosq_config *)obj; cfg = (struct mosq_config *)obj;
if(!result){ if(!result){
mosquitto_subscribe_multiple(mosq, NULL, cfg->topic_count, (const char **)cfg->topics, cfg->qos); mosquitto_subscribe_multiple(mosq, NULL, cfg->topic_count, cfg->topics, cfg->qos);
for(i=0; i<cfg->unsub_topic_count; i++){ for(i=0; i<cfg->unsub_topic_count; i++){
mosquitto_unsubscribe(mosq, NULL, cfg->unsub_topics[i]); mosquitto_unsubscribe(mosq, NULL, cfg->unsub_topics[i]);

View File

@ -105,11 +105,11 @@ int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const char *sub, int q
if(mosquitto_sub_topic_check(sub)) return MOSQ_ERR_INVAL; if(mosquitto_sub_topic_check(sub)) return MOSQ_ERR_INVAL;
if(mosquitto_validate_utf8(sub, strlen(sub))) return MOSQ_ERR_MALFORMED_UTF8; if(mosquitto_validate_utf8(sub, strlen(sub))) return MOSQ_ERR_MALFORMED_UTF8;
return send__subscribe(mosq, mid, 1, &sub, qos); return send__subscribe(mosq, mid, 1, (char *const *const)&sub, qos);
} }
int mosquitto_subscribe_multiple(struct mosquitto *mosq, int *mid, int sub_count, const char **sub, int qos) int mosquitto_subscribe_multiple(struct mosquitto *mosq, int *mid, int sub_count, char *const *const sub, int qos)
{ {
int i; int i;

View File

@ -646,6 +646,10 @@ libmosq_EXPORT int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const c
* sent. * sent.
* sub_count - the count of subscriptions to be made * sub_count - the count of subscriptions to be made
* sub - array of sub_count pointers, each pointing to a subscription string. * sub - array of sub_count pointers, each pointing to a subscription string.
* The "char *const *const" datatype ensures that neither the array of
* pointers nor the strings that they point to are mutable. If you aren't
* familiar with this, just think of it as a safer "char **",
* equivalent to "const char *" for a simple string pointer.
* qos - the requested Quality of Service for each subscription. * qos - the requested Quality of Service for each subscription.
* *
* Returns: * Returns:
@ -655,7 +659,7 @@ libmosq_EXPORT int mosquitto_subscribe(struct mosquitto *mosq, int *mid, const c
* MOSQ_ERR_NO_CONN - if the client isn't connected to a broker. * MOSQ_ERR_NO_CONN - if the client isn't connected to a broker.
* MOSQ_ERR_MALFORMED_UTF8 - if a topic is not valid UTF-8 * MOSQ_ERR_MALFORMED_UTF8 - if a topic is not valid UTF-8
*/ */
int mosquitto_subscribe_multiple(struct mosquitto *mosq, int *mid, int sub_count, const char **sub, int qos); int mosquitto_subscribe_multiple(struct mosquitto *mosq, int *mid, int sub_count, char *const *const sub, int qos);
/* /*
* Function: mosquitto_unsubscribe * Function: mosquitto_unsubscribe

View File

@ -31,7 +31,7 @@ int send__pubcomp(struct mosquitto *mosq, uint16_t mid);
int send__publish(struct mosquitto *mosq, uint16_t mid, const char *topic, uint32_t payloadlen, const void *payload, int qos, bool retain, bool dup); int send__publish(struct mosquitto *mosq, uint16_t mid, const char *topic, uint32_t payloadlen, const void *payload, int qos, bool retain, bool dup);
int send__pubrec(struct mosquitto *mosq, uint16_t mid); int send__pubrec(struct mosquitto *mosq, uint16_t mid);
int send__pubrel(struct mosquitto *mosq, uint16_t mid); int send__pubrel(struct mosquitto *mosq, uint16_t mid);
int send__subscribe(struct mosquitto *mosq, int *mid, int topic_count, const char **topic, int topic_qos); int send__subscribe(struct mosquitto *mosq, int *mid, int topic_count, char *const *const topic, int topic_qos);
int send__unsubscribe(struct mosquitto *mosq, int *mid, const char *topic); int send__unsubscribe(struct mosquitto *mosq, int *mid, const char *topic);
#endif #endif

View File

@ -76,7 +76,7 @@ int handle__connack(struct mosquitto_db *db, struct mosquitto *context)
} }
for(i=0; i<context->bridge->topic_count; i++){ for(i=0; i<context->bridge->topic_count; i++){
if(context->bridge->topics[i].direction == bd_in || context->bridge->topics[i].direction == bd_both){ if(context->bridge->topics[i].direction == bd_in || context->bridge->topics[i].direction == bd_both){
if(send__subscribe(context, NULL, 1, &context->bridge->topics[i].remote_topic, &context->bridge->topics[i].qos)){ if(send__subscribe(context, NULL, 1, &context->bridge->topics[i].remote_topic, context->bridge->topics[i].qos)){
return 1; return 1;
} }
}else{ }else{