From f6be7d6ffe731affa5af0de2ca6ac4e50db75a23 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Mon, 18 Apr 2022 01:31:15 +0200 Subject: [PATCH] sys/net/sock_util: add sock_urlpath() --- sys/include/net/sock/util.h | 10 ++++++++++ sys/net/sock/sock_util.c | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/sys/include/net/sock/util.h b/sys/include/net/sock/util.h index ccbedf57ff..28f70a155b 100644 --- a/sys/include/net/sock/util.h +++ b/sys/include/net/sock/util.h @@ -102,6 +102,16 @@ static inline int sock_udp_ep_fmt(const sock_udp_ep_t *endpoint, */ int sock_urlsplit(const char *url, char *hostport, char *urlpath); +/** + * @brief Returns a pointer to the path component in @p url + * + * @param[in] url URL to examine. Must not be NULL. + * + * @returns pointer to the start of the path component in @p url + * @returns NULL if @p url is invalid + */ +const char *sock_urlpath(const char *url); + /** * @brief Convert string to common IP-based transport layer endpoint * diff --git a/sys/net/sock/sock_util.c b/sys/net/sock/sock_util.c index f47ba2aaae..3180c900e7 100644 --- a/sys/net/sock/sock_util.c +++ b/sys/net/sock/sock_util.c @@ -149,6 +149,17 @@ int sock_urlsplit(const char *url, char *hostport, char *urlpath) return 0; } +const char *sock_urlpath(const char *url) +{ + assert(url); + char *hoststart = _find_hoststart(url); + if (!hoststart) { + return NULL; + } + + return _find_pathstart(hoststart); +} + int _parse_port(sock_udp_ep_t *ep_out, const char *portstart) { int port_len = strlen(portstart);