diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-11-04 12:56:39 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2012-11-12 11:33:29 +0100 |
commit | d04b0bbbc9cf61446e5c2e159eef50891009fd9c (patch) | |
tree | a4f83d048e9b5375b19c6aab0efa2609a01e000c /block | |
parent | 7e7f4a0efc81258213dc34aeeaade36b0f59d076 (diff) |
nbd: accept relative path to Unix socket
Adding the "is_unix" member now will simplify the parsing of NBD URIs.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/nbd.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/block/nbd.c b/block/nbd.c index 2bce47bf7..48bbecaca 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -55,7 +55,6 @@ typedef struct BDRVNBDState { uint32_t nbdflags; off_t size; size_t blocksize; - char *export_name; /* An NBD server may export several devices */ CoMutex send_mutex; CoMutex free_sema; @@ -65,13 +64,12 @@ typedef struct BDRVNBDState { Coroutine *recv_coroutine[MAX_NBD_REQUESTS]; struct nbd_reply reply; - /* If it begins with '/', this is a UNIX domain socket. Otherwise, - * it's a string of the form <hostname|ip4|\[ip6\]>:port - */ + int is_unix; char *host_spec; + char *export_name; /* An NBD server may export several devices */ } BDRVNBDState; -static int nbd_config(BDRVNBDState *s, const char *filename, int flags) +static int nbd_config(BDRVNBDState *s, const char *filename) { char *file; char *export_name; @@ -98,11 +96,10 @@ static int nbd_config(BDRVNBDState *s, const char *filename, int flags) /* are we a UNIX or TCP socket? */ if (strstart(host_spec, "unix:", &unixpath)) { - if (unixpath[0] != '/') { /* We demand an absolute path*/ - goto out; - } + s->is_unix = true; s->host_spec = g_strdup(unixpath); } else { + s->is_unix = false; s->host_spec = g_strdup(host_spec); } @@ -262,7 +259,7 @@ static int nbd_establish_connection(BlockDriverState *bs) off_t size; size_t blocksize; - if (s->host_spec[0] == '/') { + if (s->is_unix) { sock = unix_socket_outgoing(s->host_spec); } else { sock = tcp_socket_outgoing_spec(s->host_spec); @@ -320,7 +317,7 @@ static int nbd_open(BlockDriverState *bs, const char* filename, int flags) qemu_co_mutex_init(&s->free_sema); /* Pop the config into our state object. Exit if invalid. */ - result = nbd_config(s, filename, flags); + result = nbd_config(s, filename); if (result != 0) { return result; } |