]> git.ozlabs.org Git - petitboot/blobdiff - lib/url/url.c
test/parser: Add simple GRUB2 parser test
[petitboot] / lib / url / url.c
index ae72b103de62153e2a8e779286c7a8d3a01d2a55..42bd4a1afb0e3e5bae5c8db61e2d316d06234c92 100644 (file)
@@ -129,9 +129,7 @@ static const struct pb_scheme_info *pb_url_find_scheme(const char *url)
                return scheme;
        }
 
-       /* Assume this is a non-url local file. */
-
-       return file_scheme;
+       return NULL;
 }
 
 static void pb_url_parse_path(struct pb_url *url)
@@ -177,9 +175,13 @@ struct pb_url *pb_url_parse(void *ctx, const char *url_str)
                return NULL;
 
        si = pb_url_find_scheme(url_str);
-
-       url->scheme = si->scheme;
-       p = url_str + si->str_len + strlen("://");
+       if (si) {
+               url->scheme = si->scheme;
+               p = url_str + si->str_len + strlen("://");
+       } else {
+               url->scheme = file_scheme->scheme;
+               p = url_str;
+       }
 
        url->full = talloc_strdup(url, url_str);
 
@@ -240,18 +242,21 @@ static bool is_url(const char *str)
        return strstr(str, "://") != NULL;
 }
 
-static void pb_url_update_full(struct pb_url *url)
+char *pb_url_to_string(struct pb_url *url)
 {
        const struct pb_scheme_info *scheme = pb_url_scheme_info(url->scheme);
-
        assert(scheme);
 
-       talloc_free(url->full);
-
-       url->full = talloc_asprintf(url, "%s://%s%s", scheme->str,
+       return talloc_asprintf(url, "%s://%s%s", scheme->str,
                        scheme->has_host ? url->host : "", url->path);
 }
 
+static void pb_url_update_full(struct pb_url *url)
+{
+       talloc_free(url->full);
+       url->full = pb_url_to_string(url);
+}
+
 static struct pb_url *pb_url_copy(void *ctx, const struct pb_url *url)
 {
        struct pb_url *new_url;