diff options
author | Vincent Douillet <vincent@vdouillet.fr> | 2023-08-19 18:15:55 +0200 |
---|---|---|
committer | Vincent Douillet <vincent@vdouillet.fr> | 2023-08-19 18:16:38 +0200 |
commit | 26a77087027327d72d7229866a1ce12ad11a4d63 (patch) | |
tree | bfbf6b6704c8f853a1063b7ff3c7164d4b085ae1 | |
parent | 7caf4597bcfb64dac04b7190dab1022f1bc4e141 (diff) |
rework url_build function to end varargs with NULL
-rw-r--r-- | browse.c | 6 | ||||
-rw-r--r-- | download.c | 4 | ||||
-rw-r--r-- | url.c | 9 | ||||
-rw-r--r-- | url.h | 5 |
4 files changed, 11 insertions, 13 deletions
@@ -49,7 +49,8 @@ build_browse_url(struct kreq * r, char *url, size_t url_size, const char *file) char *page_name; page_name = strlen(r->pagename) == 0 ? BROWSE_URL : r->pagename; - return url_build(url, url_size, 4, r->pname, page_name, r->path, file); + return url_build(url, url_size, r->pname, page_name, r->path, file, + NULL); } void @@ -67,7 +68,8 @@ browse(struct kreq * r) http_exit(r, KHTTP_400, "browse: Invalid request path"); /* list requested directory content */ - url_size = url_build(current_dir, URL_LENGTH_MAX, 2, DATA_DIR, r->path); + url_size = url_build(current_dir, URL_LENGTH_MAX, DATA_DIR, r->path, + NULL); if (url_size == 0) http_exit(r, KHTTP_404, "browse: Unable to build data path"); if (url_size >= URL_LENGTH_MAX) @@ -54,8 +54,8 @@ download(struct kreq * r) http_exit(r, KHTTP_400, "download: Invalid request path"); /* build requested file path */ - path_size = url_build(file_path, URL_LENGTH_MAX, 2, DATA_DIR, - "File.txt"); + path_size = url_build(file_path, URL_LENGTH_MAX, DATA_DIR, "File.txt", + NULL); if (path_size == 0) http_exit(r, KHTTP_404, "download: Unable to build file path"); if (path_size >= URL_LENGTH_MAX) @@ -51,7 +51,7 @@ check_request_path(char *path) } size_t -url_build(char *dst, size_t dst_size, int count,...) +url_build(char *dst, size_t dst_size,...) { va_list path_list; const char *path; @@ -60,15 +60,12 @@ url_build(char *dst, size_t dst_size, int count,...) dst[0] = '\0'; w_size = 0; - va_start(path_list, count); - for (path_index = 0; path_index < count; path_index++) { + va_start(path_list, dst_size); + while ((path = va_arg(path_list, char *)) != NULL) { /* no more space in dst buffer */ if (w_size >= dst_size) break; - path = va_arg(path_list, char *); - - assert(path != NULL); if (path[0] == '\0') continue; @@ -49,13 +49,12 @@ check_request_path(char *); * The first argument is the destination buffer where the URL will be written. * It is required. * The second argument is the size of the destination buffer. It is required. - * The third argument is the number of URL components provided in the following - * vargs. + * The remaining arguments are the url parts * Returns the number of characters written to the destination buffer. If it * is equal to the destination buffer size, it means the buffer was too small * and the resulting URL has been truncated. */ size_t -url_build(char *, size_t, int,...); +url_build(char *, size_t,...); #endif /* URL_H */ |