This is an automated email from the ASF dual-hosted git repository. rlenferink pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/celix.git
commit 4e003c817f15bd5f86ae55de9f0867932f36ff1f Author: Roy Lenferink <[email protected]> AuthorDate: Sun Jul 28 12:28:49 2019 +0200 Removed memleak from pubsub admins --- .../pubsub_admin_nanomsg/src/pubsub_nanomsg_admin.cc | 13 +++---------- bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_admin.c | 13 +++---------- .../pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c | 13 +++---------- bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_admin.c | 13 +++---------- libs/utils/include/ip_utils.h | 2 +- libs/utils/src/ip_utils.c | 18 ++++++++---------- 6 files changed, 21 insertions(+), 51 deletions(-) diff --git a/bundles/pubsub/pubsub_admin_nanomsg/src/pubsub_nanomsg_admin.cc b/bundles/pubsub/pubsub_admin_nanomsg/src/pubsub_nanomsg_admin.cc index 5245d03..f9549ee 100644 --- a/bundles/pubsub/pubsub_admin_nanomsg/src/pubsub_nanomsg_admin.cc +++ b/bundles/pubsub/pubsub_admin_nanomsg/src/pubsub_nanomsg_admin.cc @@ -48,17 +48,10 @@ pubsub_nanomsg_admin::pubsub_nanomsg_admin(celix_bundle_context_t *_ctx): if (confIp != NULL) { if (strchr(confIp, '/') != NULL) { // IP with subnet prefix specified - char *found_if_ip = calloc(16, sizeof(char)); - celix_status_t ip_status = ipUtils_findIpBySubnet(confIp, &found_if_ip); - if (ip_status == CELIX_SUCCESS) { - if (found_if_ip != NULL) - ip = strndup(found_if_ip, 16); - else - L_WARN("[PSA_NANOMSG] Could not find interface for requested subnet %s", confIp); - } else { - L_ERROR("[PSA_NANOMSG] Error while searching for available network interface for subnet %s", confIp); + ip = ipUtils_findIpBySubnet(confIp); + if (ip == NULL) { + L_WARN("[PSA_NANOMSG] Could not find interface for requested subnet %s", confIp); } - free(found_if_ip); } else { // IP address specified ip = strndup(confIp, 1024); diff --git a/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_admin.c b/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_admin.c index 473d051..3711a98 100644 --- a/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_admin.c +++ b/bundles/pubsub/pubsub_admin_tcp/src/pubsub_tcp_admin.c @@ -105,17 +105,10 @@ pubsub_tcp_admin_t* pubsub_tcpAdmin_create(celix_bundle_context_t *ctx, log_help if (confIp != NULL) { if (strchr(confIp, '/') != NULL) { // IP with subnet prefix specified - char *found_if_ip = calloc(16, sizeof(char)); - celix_status_t ip_status = ipUtils_findIpBySubnet(confIp, &found_if_ip); - if (ip_status == CELIX_SUCCESS) { - if (found_if_ip != NULL) - ip = strndup(found_if_ip, 16); - else - L_WARN("[PSA_TCP] Could not find interface for requested subnet %s", confIp); - } else { - L_ERROR("[PSA_TCP] Error while searching for available network interface for subnet %s", confIp); + ip = ipUtils_findIpBySubnet(confIp); + if (ip == NULL) { + L_WARN("[PSA_TCP] Could not find interface for requested subnet %s", confIp); } - free(found_if_ip); } else { // IP address specified ip = strndup(confIp, 1024); diff --git a/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c b/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c index 770ad23..990594f 100644 --- a/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c +++ b/bundles/pubsub/pubsub_admin_udp_mc/src/pubsub_udpmc_admin.c @@ -105,17 +105,10 @@ pubsub_udpmc_admin_t* pubsub_udpmcAdmin_create(celix_bundle_context_t *ctx, log_ if (mcIpProp != NULL) { if (strchr(mcIpProp, '/') != NULL) { // IP with subnet prefix specified - char *found_if_ip = calloc(16, sizeof(char)); - celix_status_t ip_status = ipUtils_findIpBySubnet(mcIpProp, &found_if_ip); - if (ip_status == CELIX_SUCCESS) { - if (found_if_ip != NULL) - if_ip = strndup(found_if_ip, 16); - else - L_WARN("[PSA_UDPMC] Could not find interface for requested subnet %s", mcIpProp); - } else { - L_ERROR("[PSA_UDPMC] Error while searching for available network interface for subnet %s", mcIpProp); + if_ip = ipUtils_findIpBySubnet(mcIpProp); + if (if_ip == NULL) { + L_WARN("[PSA_UDPMC] Could not find interface for requested subnet %s", mcIpProp); } - free(found_if_ip); } else { // IP address specified mc_ip = strndup(mcIpProp, 1024); diff --git a/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_admin.c b/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_admin.c index 8fa14ad..8335287 100644 --- a/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_admin.c +++ b/bundles/pubsub/pubsub_admin_zmq/src/pubsub_zmq_admin.c @@ -105,17 +105,10 @@ pubsub_zmq_admin_t* pubsub_zmqAdmin_create(celix_bundle_context_t *ctx, log_help if (confIp != NULL) { if (strchr(confIp, '/') != NULL) { // IP with subnet prefix specified - char *found_if_ip = calloc(16, sizeof(char)); - celix_status_t ip_status = ipUtils_findIpBySubnet(confIp, &found_if_ip); - if (ip_status == CELIX_SUCCESS) { - if (found_if_ip != NULL) - ip = strndup(found_if_ip, 16); - else - L_WARN("[PSA_ZMQ] Could not find interface for requested subnet %s", confIp); - } else { - L_ERROR("[PSA_ZMQ] Error while searching for available network interface for subnet %s", confIp); + ip = ipUtils_findIpBySubnet(confIp); + if (ip == NULL) { + L_WARN("[PSA_ZMQ] Could not find interface for requested subnet %s", confIp); } - free(found_if_ip); } else { // IP address specified ip = strndup(confIp, 1024); diff --git a/libs/utils/include/ip_utils.h b/libs/utils/include/ip_utils.h index 8f8fe5c..b95694a 100644 --- a/libs/utils/include/ip_utils.h +++ b/libs/utils/include/ip_utils.h @@ -44,7 +44,7 @@ UTILS_EXPORT unsigned int ipUtils_prefixToBitmask(unsigned int prefix); UTILS_EXPORT int ipUtils_netmaskToPrefix(const char *netmask); -UTILS_EXPORT celix_status_t ipUtils_findIpBySubnet(const char *ipWithPrefix, char **ip); +UTILS_EXPORT char *ipUtils_findIpBySubnet(const char *ipWithPrefix); #ifdef __cplusplus } diff --git a/libs/utils/src/ip_utils.c b/libs/utils/src/ip_utils.c index 31c428a..8d4f0d3 100644 --- a/libs/utils/src/ip_utils.c +++ b/libs/utils/src/ip_utils.c @@ -97,14 +97,13 @@ int ipUtils_netmaskToPrefix(const char *netmask) { /** Finds an IP of the available network interfaces of the machine by specifying an CIDR subnet. * - * @param ipWithPrefix [in] IP with prefix, e.g. 192.168.1.0/24 - * @param ip [out] In case a matching interface could be found, an allocated string containing the IP of the - * interface will be set, e.g. 192.168.1.16. Memory for the new string can be freed with free(). - * When no matching interface is found NULL will be set. - * @return CELIX_SUCCESS for success. Otherwise an error status from celix_errno.h will be set. + * @param ipWithPrefix IP with prefix, e.g. 192.168.1.0/24 + * @return ip In case a matching interface could be found, an allocated string containing the IP of the + * interface will be returned, e.g. 192.168.1.16. Memory for the new string can be freed with free(). + * When no matching interface is found NULL will be returned. */ -celix_status_t ipUtils_findIpBySubnet(const char *ipWithPrefix, char **ip) { - celix_status_t status = CELIX_SUCCESS; +char *ipUtils_findIpBySubnet(const char *ipWithPrefix) { + char *ip = NULL; char *input = strndup(ipWithPrefix, 19); // Make a copy as otherwise strtok_r manipulates the input string @@ -147,17 +146,16 @@ celix_status_t ipUtils_findIpBySubnet(const char *ipWithPrefix, char **ip) { unsigned int ifIpAsUint = ipUtils_ipToUnsignedInt(if_addr); int ifPrefix = ipUtils_netmaskToPrefix(if_netmask); if (ifPrefix == -1) { - status = CELIX_ILLEGAL_ARGUMENT; break; } if (ifIpAsUint >= ipRangeStart && ifIpAsUint <= ipRangeStop && inputPrefix >= ifPrefix) { - *ip = strndup(if_addr, 1024); + ip = strndup(if_addr, 1024); break; } } freeifaddrs(ifap); free(input); - return status; + return ip; }
