summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/url.c45
-rw-r--r--utils/url.h1
2 files changed, 40 insertions, 6 deletions
diff --git a/utils/url.c b/utils/url.c
index 1ea8a7c72..00a88a0e4 100644
--- a/utils/url.c
+++ b/utils/url.c
@@ -411,6 +411,39 @@ url_func_result url_host(const char *url, char **result)
return URL_FUNC_OK;
}
+/**
+ * Return the scheme name from an URL
+ *
+ * \param url an absolute URL
+ * \param result pointer to pointer to buffer to hold scheme name
+ * \return URL_FUNC_OK on success
+ */
+url_func_result url_scheme(const char *url, char **result)
+{
+ int m;
+ regmatch_t match[10];
+
+ (*result) = 0;
+
+ m = regexec(&url_re, url, 10, match, 0);
+ if (m) {
+ LOG(("url '%s' failed to match regex", url));
+ return URL_FUNC_FAILED;
+ }
+ if (match[2].rm_so == -1)
+ return URL_FUNC_FAILED;
+
+ (*result) = malloc(match[2].rm_eo - match[2].rm_so + 1);
+ if (!(*result)) {
+ LOG(("malloc failed"));
+ return URL_FUNC_NOMEM;
+ }
+
+ strncpy((*result), url + match[2].rm_so, match[2].rm_eo - match[2].rm_so);
+ (*result)[match[2].rm_eo - match[2].rm_so] = 0;
+
+ return URL_FUNC_OK;
+}
/**
* Attempt to find a nice filename for a URL.
@@ -514,8 +547,8 @@ int main(int argc, char *argv[])
url_func_result res;
char *s;
url_init();
-/* for (i = 1; i != argc; i++) {
- printf("==> '%s'\n", argv[i]);
+ for (i = 1; i != argc; i++) {
+/* printf("==> '%s'\n", argv[i]);
res = url_normalize(argv[i], &s);
if (res == URL_FUNC_OK) {
printf("<== '%s'\n", s);
@@ -527,19 +560,19 @@ int main(int argc, char *argv[])
printf("<== '%s'\n", s);
free(s);
}*/
-/* if (1 != i) {
+ if (1 != i) {
res = url_join(argv[i], argv[1], &s);
if (res == URL_FUNC_OK) {
printf("'%s' + '%s' \t= '%s'\n", argv[1],
argv[i], s);
free(s);
}
- }*/
- res = url_nice(argv[i], &s);
+ }
+/* res = url_nice(argv[i], &s);
if (res == URL_FUNC_OK) {
printf("'%s'\n", s);
free(s);
- }
+ }*/
}
return 0;
}
diff --git a/utils/url.h b/utils/url.h
index cc373b257..6bd536cb2 100644
--- a/utils/url.h
+++ b/utils/url.h
@@ -22,6 +22,7 @@ void url_init(void);
url_func_result url_normalize(const char *url, char **result);
url_func_result url_join(const char *rel, const char *base, char **result);
url_func_result url_host(const char *url, char **result);
+url_func_result url_scheme(const char *url, char **result);
url_func_result url_nice(const char *url, char **result);
#endif