diff options
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 27 |
1 files changed, 10 insertions, 17 deletions
@@ -225,7 +225,7 @@ static BlockDriver *find_protocol(const char *filename) { BlockDriver *drv1; char protocol[128]; - int len = qemu_strnlen(filename, 127) + 1; + int len; const char *p; #ifdef _WIN32 @@ -233,9 +233,14 @@ static BlockDriver *find_protocol(const char *filename) is_windows_drive_prefix(filename)) return bdrv_find_format("raw"); #endif - p = fill_token(protocol, len, filename, ':'); - if (*p != ':') + p = strchr(filename, ':'); + if (!p) return bdrv_find_format("raw"); + len = p - filename; + if (len > sizeof(protocol) - 1) + len = sizeof(protocol) - 1; + memcpy(protocol, filename, len); + protocol[len] = '\0'; for(drv1 = first_drv; drv1 != NULL; drv1 = drv1->next) { if (drv1->protocol_name && !strcmp(drv1->protocol_name, protocol)) @@ -409,9 +414,9 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, open_flags = BDRV_O_RDWR | (flags & BDRV_O_CACHE_MASK); else open_flags = flags & ~(BDRV_O_FILE | BDRV_O_SNAPSHOT); - ret = bdrv_open3(bs, filename, open_flags, drv); + ret = drv->bdrv_open(bs, filename, open_flags); if ((ret == -EACCES || ret == -EPERM) && !(flags & BDRV_O_FILE)) { - ret = bdrv_open3(bs, filename, open_flags & ~BDRV_O_RDWR, drv); + ret = drv->bdrv_open(bs, filename, open_flags & ~BDRV_O_RDWR); bs->read_only = 1; } if (ret < 0) { @@ -456,18 +461,6 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, return 0; } -int bdrv_open3(BlockDriverState *bs, const char *filename, int flags, BlockDriver *drv) -{ - char myfile[PATH_MAX]; - const char *f; - - if (!strstart(filename, "file:", &f)) { - fill_token(myfile, PATH_MAX, filename, '\0'); - return drv->bdrv_open(bs,myfile,flags); - } - return drv->bdrv_open(bs,f,flags); -} - void bdrv_close(BlockDriverState *bs) { if (bs->drv) { |