X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Furi.c;h=740a6d5c50fc6d7fad8e027bb024d9ff9527f8c5;hb=e56251fcd578c85ad24a36b3768fa6b095fc59e1;hp=e686f7c5d788b2676a49c9b4746c846a63fc5aba;hpb=13083fa6d2130b0e2c4f5bb03c90b99d44564408;p=lttng-tools.git diff --git a/src/common/uri.c b/src/common/uri.c index e686f7c5d..740a6d5c5 100644 --- a/src/common/uri.c +++ b/src/common/uri.c @@ -56,7 +56,7 @@ static const struct uri_proto proto_uri[] = { * Return pointer to the character in s matching one of the characters in * accept. If nothing is found, return pointer to the end of string (eos). */ -const inline char *strpbrk_or_eos(const char *s, const char *accept) +static const inline char *strpbrk_or_eos(const char *s, const char *accept) { char *p = strpbrk(s, accept); if (p == NULL) { @@ -137,11 +137,47 @@ error: return -1; } +/* + * Build a string URL from a lttng_uri object. + */ +LTTNG_HIDDEN +int uri_to_str_url(struct lttng_uri *uri, char *dst, size_t size) +{ + int ipver, ret; + const char *addr; + char proto[4], port[7]; + + assert(uri); + assert(dst); + + if (uri->dtype == LTTNG_DST_PATH) { + ipver = 0; + addr = uri->dst.path; + (void) snprintf(proto, sizeof(proto), "file"); + (void) snprintf(port, sizeof(port), "%s", ""); + } else { + ipver = (uri->dtype == LTTNG_DST_IPV4) ? 4 : 6; + addr = (ipver == 4) ? uri->dst.ipv4 : uri->dst.ipv6; + (void) snprintf(proto, sizeof(proto), "net%d", ipver); + (void) snprintf(port, sizeof(port), ":%d", uri->port); + } + + ret = snprintf(dst, size, "%s://%s%s%s%s/%s", proto, + (ipver == 6) ? "[" : "", addr, (ipver == 6) ? "]" : "", + port, uri->subdir); + if (ret < 0) { + PERROR("snprintf uri to url"); + } + + return ret; +} + /* * Compare two URIs. * * Return 0 if equal else 1. */ +LTTNG_HIDDEN int uri_compare(struct lttng_uri *uri1, struct lttng_uri *uri2) { return memcmp(uri1, uri2, sizeof(struct lttng_uri)); @@ -150,17 +186,16 @@ int uri_compare(struct lttng_uri *uri1, struct lttng_uri *uri2) /* * Free URI memory. */ +LTTNG_HIDDEN void uri_free(struct lttng_uri *uri) { - /* Safety check */ - if (uri != NULL) { - free(uri); - } + free(uri); } /* * Return an allocated URI. */ +LTTNG_HIDDEN struct lttng_uri *uri_create(void) { struct lttng_uri *uri; @@ -189,6 +224,7 @@ struct lttng_uri *uri_create(void) * This code was originally licensed GPLv2 so we acknolwedge the Free Software * Foundation here for the work and to make sure we are compliant with it. */ +LTTNG_HIDDEN ssize_t uri_parse(const char *str_uri, struct lttng_uri **uris) { int ret, i = 0; @@ -303,7 +339,6 @@ ssize_t uri_parse(const char *str_uri, struct lttng_uri **uris) * so we can define the control and data port. */ while (*purl == ':') { - int port; const char *port_b, *port_e; char *port_f; @@ -330,6 +365,8 @@ ssize_t uri_parse(const char *str_uri, struct lttng_uri **uris) port_e = purl; if (port_b != port_e) { + int port; + port_f = utils_strdupdelim(port_b, port_e); if (port_f == NULL) { goto free_error;