From c3d6922bba033c655008534f29ee92ecfc97f022 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 31 Dec 2001 08:00:17 +0000 Subject: restore rev 1.7 change somehow lost in the shuffle --- libstore/nbd.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'libstore') 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, -- cgit v1.2.3