summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libstore/nbd.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/libstore/nbd.c b/libstore/nbd.c
index 0695410e..ad19af6b 100644
--- a/libstore/nbd.c
+++ b/libstore/nbd.c
@@ -288,13 +288,20 @@ nbd_open (const char *name, int flags,
return store_nbd_open (name, flags, store);
}
-/* Valid name syntax is HOSTNAME:PORT[/BLOCKSIZE].
+static const char url_prefix[] = "nbd://";
+
+/* Valid name syntax is [nbd://]HOSTNAME:PORT[/BLOCKSIZE].
If "/BLOCKSIZE" is omitted, the block size is 1. */
static error_t
nbd_validate_name (const char *name,
const struct store_class *const *classes)
{
- char *p = strchr (name, ':'), *endp;
+ char *p, *endp;
+
+ if (!strncmp (name, url_prefix, sizeof url_prefix - 1))
+ name += sizeof url_prefix - 1;
+
+ p = strchr (name, ':');
if (p == 0)
return EINVAL;
endp = 0;
@@ -329,13 +336,17 @@ nbdopen (const char *name, int *mod_flags,
struct nbd_startup ns;
ssize_t cc;
size_t ofs;
+ unsigned long int port;
+ char *hostname, *p, *endp;
+
+ if (!strncmp (name, url_prefix, sizeof url_prefix - 1))
+ name += sizeof url_prefix - 1;
/* First we have to parse the store name to get the host name and TCP
port number to connect to and the block size to use. */
- unsigned long int port;
- char *hostname = strdupa (name);
- char *p = strchr (hostname, ':'), *endp;
+ hostname = strdupa (name);
+ p = strchr (hostname, ':');
if (p == 0)
return EINVAL;
@@ -460,8 +471,7 @@ nbd_clear_flags (struct store *store, int flags)
return err;
}
-const struct store_class
-store_nbd_class =
+const struct store_class store_nbd_class =
{
STORAGE_NETWORK, "nbd",
open: nbd_open,