diff options
-rw-r--r-- | block.c | 27 | ||||
-rw-r--r-- | block.h | 2 | ||||
-rw-r--r-- | block/dmg.c | 2 | ||||
-rw-r--r-- | block/raw-posix.c | 1 | ||||
-rw-r--r-- | cutils.c | 26 | ||||
-rw-r--r-- | qemu-common.h | 1 |
6 files changed, 11 insertions, 48 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) { @@ -57,8 +57,6 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags); int bdrv_open(BlockDriverState *bs, const char *filename, int flags); int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, BlockDriver *drv); -int bdrv_open3(BlockDriverState *bs, const char *filename, int flags, - BlockDriver *drv); void bdrv_close(BlockDriverState *bs); int bdrv_check(BlockDriverState *bs); int bdrv_read(BlockDriverState *bs, int64_t sector_num, diff --git a/block/dmg.c b/block/dmg.c index dd98af4376..262560ffd3 100644 --- a/block/dmg.c +++ b/block/dmg.c @@ -94,7 +94,7 @@ dmg_close: close(s->fd); /* open raw instead */ bs->drv=bdrv_find_format("raw"); - return bdrv_open3(bs, filename, flags, bs->drv); + return bs->drv->bdrv_open(bs, filename, flags); } info_begin=read_off(s->fd); if(info_begin==0) diff --git a/block/raw-posix.c b/block/raw-posix.c index 8b1e67c063..985bf69e50 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -903,7 +903,6 @@ static BlockDriver bdrv_raw = { .bdrv_getlength = raw_getlength, .create_options = raw_create_options, - .protocol_name = "file", }; /***********************************************/ @@ -24,32 +24,6 @@ #include "qemu-common.h" #include "host-utils.h" -/* - * fill first 'len' characters of 'buff' with pruned - * contents of 'str' delimited by the character 'c'. - * Escape character '\' is pruned off. - * Return pointer to the delimiting character. - */ -const char *fill_token(char *buf, const int len, const char *str, const char c) -{ - const char *p=str; - char *q=buf; - - while (p < str+len-1) { - if (*p == c) - break; - if (*p == '\\') { - p++; - if (*p == '\0') - break; - } - *q++ = *p++; - } - *q='\0'; - return p; -} - - void pstrcpy(char *buf, int buf_size, const char *str) { int c; diff --git a/qemu-common.h b/qemu-common.h index a5d8fffb75..6a15f89348 100644 --- a/qemu-common.h +++ b/qemu-common.h @@ -104,7 +104,6 @@ void qemu_get_timedate(struct tm *tm, int offset); int qemu_timedate_diff(struct tm *tm); /* cutils.c */ -const char *fill_token(char *buf, int buf_size, const char *str, char); void pstrcpy(char *buf, int buf_size, const char *str); char *pstrcat(char *buf, int buf_size, const char *s); int strstart(const char *str, const char *val, const char **ptr); |