Skip to content

Commit

Permalink
[uri] Support URIs containing only scheme and path components
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Mar 13, 2016
1 parent 11ccfb6 commit 17c1488
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/core/uri.c
Expand Up @@ -456,7 +456,6 @@ unsigned int uri_port ( const struct uri *uri, unsigned int default_port ) {
*/
size_t format_uri ( const struct uri *uri, char *buf, size_t len ) {
static const char prefixes[URI_FIELDS] = {
[URI_OPAQUE] = ':',
[URI_PASSWORD] = ':',
[URI_PORT] = ':',
[URI_QUERY] = '?',
Expand Down Expand Up @@ -495,9 +494,9 @@ size_t format_uri ( const struct uri *uri, char *buf, size_t len ) {
( buf + used ), ( len - used ) );

/* Suffix this field, if applicable */
if ( ( field == URI_SCHEME ) && ( ! uri->opaque ) ) {
if ( field == URI_SCHEME ) {
used += ssnprintf ( ( buf + used ), ( len - used ),
"://" );
":%s", ( uri->host ? "//" : "" ) );
}
}

Expand Down
31 changes: 31 additions & 0 deletions src/tests/uri_test.c
Expand Up @@ -610,6 +610,34 @@ static struct uri_test uri_iscsi = {
},
};

/** File URI with relative (opaque) path */
static struct uri_test uri_file_relative = {
"file:script.ipxe",
{
.scheme = "file",
.opaque = "script.ipxe",
},
};

/** File URI with absolute path */
static struct uri_test uri_file_absolute = {
"file:/boot/script.ipxe",
{
.scheme = "file",
.path = "/boot/script.ipxe",
},
};

/** File URI with volume name */
static struct uri_test uri_file_volume = {
"file://hpilo/boot/script.ipxe",
{
.scheme = "file",
.host = "hpilo",
.path = "/boot/script.ipxe",
},
};

/** URI with port number */
static struct uri_port_test uri_explicit_port = {
"http://192.168.0.1:8080/boot.php",
Expand Down Expand Up @@ -899,6 +927,9 @@ static void uri_test_exec ( void ) {
uri_parse_format_dup_ok ( &uri_ipv6_local );
uri_parse_ok ( &uri_ipv6_local_non_conforming ); /* Parse only */
uri_parse_format_dup_ok ( &uri_iscsi );
uri_parse_format_dup_ok ( &uri_file_relative );
uri_parse_format_dup_ok ( &uri_file_absolute );
uri_parse_format_dup_ok ( &uri_file_volume );

/** URI port number tests */
uri_port_ok ( &uri_explicit_port );
Expand Down

0 comments on commit 17c1488

Please sign in to comment.