diff --git a/lib/mapping.c b/lib/mapping.c index 5c89fd4ee..7069d013b 100644 --- a/lib/mapping.c +++ b/lib/mapping.c @@ -32,14 +32,14 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *nodes) { - char *cpy, *node, *type, *field, *end; + char *cpy, *node, *type, *field, *end, *lasts; cpy = strdup(str); if (!cpy) return -1; if (nodes) { - node = strtok(cpy, "."); + node = strtok_r(cpy, ".", &lasts); if (!node) { warning("Missing node name"); goto invalid_format; @@ -51,14 +51,14 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n goto invalid_format; } - type = strtok(NULL, ".["); + type = strtok_r(NULL, ".[", &lasts); if (!type) type = "data"; } else { me->node = NULL; - type = strtok(cpy, ".["); + type = strtok_r(cpy, ".[", &lasts); if (!type) goto invalid_format; } @@ -67,11 +67,11 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n me->type = MAPPING_TYPE_STATS; me->length = 1; - char *metric = strtok(NULL, "."); + char *metric = strtok_r(NULL, ".", &lasts); if (!metric) goto invalid_format; - type = strtok(NULL, "."); + type = strtok_r(NULL, ".", &lasts); if (!type) goto invalid_format; @@ -87,7 +87,7 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n me->type = MAPPING_TYPE_HEADER; me->length = 1; - field = strtok(NULL, "."); + field = strtok_r(NULL, ".", &lasts); if (!field) { warning("Missing header type"); goto invalid_format; @@ -106,7 +106,7 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n me->type = MAPPING_TYPE_TIMESTAMP; me->length = 2; - field = strtok(NULL, "."); + field = strtok_r(NULL, ".", &lasts); if (!field) { warning("Missing timestamp type"); goto invalid_format; @@ -127,7 +127,7 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n me->type = MAPPING_TYPE_DATA; - first_str = strtok(NULL, "-]"); + first_str = strtok_r(NULL, "-]", &lasts); if (first_str) { if (me->node) first = vlist_lookup_index(&me->node->in.signals, first_str); @@ -148,7 +148,7 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n goto end; } - last_str = strtok(NULL, "]"); + last_str = strtok_r(NULL, "]", &lasts); if (last_str) { if (me->node) last = vlist_lookup_index(&me->node->in.signals, last_str); @@ -175,7 +175,7 @@ int mapping_parse_str(struct mapping_entry *me, const char *str, struct vlist *n goto invalid_format; end: /* Check that there is no garbage at the end */ - end = strtok(NULL, ""); + end = strtok_r(NULL, "", &lasts); if (end) goto invalid_format; diff --git a/lib/nodes/infiniband.c b/lib/nodes/infiniband.c index 063542b57..a1cf20ae3 100644 --- a/lib/nodes/infiniband.c +++ b/lib/nodes/infiniband.c @@ -174,8 +174,7 @@ int ib_parse(struct node *n, json_t *cfg) struct infiniband *ib = (struct infiniband *) n->_vd; int ret; - char *local = NULL; - char *remote = NULL; + char *local = NULL, *remote = NULL, *lasts; const char *transport_mode = "RC"; int timeout = 1000; int recv_cq_size = 128; @@ -255,8 +254,8 @@ int ib_parse(struct node *n, json_t *cfg) debug(LOG_IB | 4, "Set buffer subtraction to %i in node %s", buffer_subtraction, node_name(n)); // Translate IP:PORT to a struct addrinfo - char* ip_adr = strtok(local, ":"); - char* port = strtok(NULL, ":"); + char* ip_adr = strtok_r(local, ":", &lasts); + char* port = strtok_r(NULL, ":", &lasts); ret = getaddrinfo(ip_adr, port, NULL, &ib->conn.src_addr); if (ret) @@ -327,8 +326,8 @@ int ib_parse(struct node *n, json_t *cfg) // If node will send data, set remote address if (ib->is_source) { // Translate address info - char* ip_adr = strtok(remote, ":"); - char* port = strtok(NULL, ":"); + char *ip_adr = strtok_r(remote, ":", &lasts); + char *port = strtok_r(NULL, ":", &lasts); ret = getaddrinfo(ip_adr, port, NULL, &ib->conn.dst_addr); if (ret) diff --git a/lib/nodes/influxdb.c b/lib/nodes/influxdb.c index 2b22c3b63..cf57192d3 100644 --- a/lib/nodes/influxdb.c +++ b/lib/nodes/influxdb.c @@ -40,7 +40,7 @@ int influxdb_parse(struct node *n, json_t *json) json_error_t err; int ret; - char *tmp, *host, *port; + char *tmp, *host, *port, *lasts; const char *server, *key; ret = json_unpack_ex(json, &err, 0, "{ s: s, s: s, s?: o }", @@ -52,8 +52,8 @@ int influxdb_parse(struct node *n, json_t *json) tmp = strdup(server); - host = strtok(tmp, ":"); - port = strtok(NULL, ""); + host = strtok_r(tmp, ":", &lasts); + port = strtok_r(NULL, "", &lasts); i->key = strdup(key); i->host = strdup(host); diff --git a/lib/nodes/socket.c b/lib/nodes/socket.c index 9d8fb2c28..f56b1f610 100644 --- a/lib/nodes/socket.c +++ b/lib/nodes/socket.c @@ -626,9 +626,10 @@ int socket_parse_address(const char *addr, struct sockaddr *saddr, enum socket_l #ifdef WITH_SOCKET_LAYER_ETH else if (layer == SOCKET_LAYER_ETH) { /* Format: "ab:cd:ef:12:34:56%ifname:protocol" */ /* Split string */ - char *node = strtok(copy, "%"); - char *ifname = strtok(NULL, ":"); - char *proto = strtok(NULL, "\0"); + char *lasts; + char *node = strtok_r(copy, "%", &lasts); + char *ifname = strtok_r(NULL, ":", &lasts); + char *proto = strtok_r(NULL, "\0", &lasts); /* Parse link layer (MAC) address */ struct ether_addr *mac = ether_aton(node); @@ -659,8 +660,9 @@ int socket_parse_address(const char *addr, struct sockaddr *saddr, enum socket_l }; /* Split string */ - char *node = strtok(copy, ":"); - char *service = strtok(NULL, "\0"); + char *lasts; + char *node = strtok_r(copy, ":", &lasts); + char *service = strtok_r(NULL, "\0", &lasts); if (node && !strcmp(node, "*")) node = NULL; diff --git a/lib/nodes/stats.c b/lib/nodes/stats.c index 540c33abe..e60455758 100644 --- a/lib/nodes/stats.c +++ b/lib/nodes/stats.c @@ -51,7 +51,7 @@ int stats_node_signal_parse(struct stats_node_signal *s, json_t *cfg) int ret; const char *stats; - char *metric, *type, *node, *cpy; + char *metric, *type, *node, *cpy, *lasts; ret = json_unpack_ex(cfg, &err, 0, "{ s: s }", "stats", &stats @@ -61,15 +61,15 @@ int stats_node_signal_parse(struct stats_node_signal *s, json_t *cfg) cpy = strdup(stats); - node = strtok(cpy, "."); + node = strtok_r(cpy, ".", &lasts); if (!node) goto invalid_format; - metric = strtok(NULL, "."); + metric = strtok_r(NULL, ".", &lasts); if (!metric) goto invalid_format; - type = strtok(NULL, "."); + type = strtok_r(NULL, ".", &lasts); if (!type) goto invalid_format; diff --git a/lib/nodes/websocket.c b/lib/nodes/websocket.c index 308e7e16d..7f67b25c7 100644 --- a/lib/nodes/websocket.c +++ b/lib/nodes/websocket.c @@ -203,7 +203,7 @@ int websocket_protocol_cb(struct lws *wsi, enum lws_callback_reasons reason, voi */ /* Get path of incoming request */ - char *node, *format; + char *node, *format, *lasts; char uri[64]; lws_hdr_copy(wsi, uri, sizeof(uri), WSI_TOKEN_GET_URI); /* The path component of the*/ @@ -213,14 +213,14 @@ int websocket_protocol_cb(struct lws *wsi, enum lws_callback_reasons reason, voi return -1; } - node = strtok(uri, "/."); + node = strtok_r(uri, "/.", &lasts); if (!node) { websocket_connection_close(c, wsi, LWS_CLOSE_STATUS_POLICY_VIOLATION, "Unknown node"); warning("Failed to tokenize request URI"); return -1; } - format = strtok(NULL, ""); + format = strtok_r(NULL, "", &lasts); if (!format) format = "villas.web";