block: Use error codes from lower levels for error message
"No such file or directory" is a misleading error message when a user tries to open a file with wrong permissions. Cc: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Weil <weil@mail.berlios.de> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
55459498b2
commit
c98ac35d87
27
block.c
27
block.c
@ -330,7 +330,7 @@ BlockDriver *bdrv_find_protocol(const char *filename)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static BlockDriver *find_image_format(const char *filename)
|
||||
static int find_image_format(const char *filename, BlockDriver **pdrv)
|
||||
{
|
||||
int ret, score, score_max;
|
||||
BlockDriver *drv1, *drv;
|
||||
@ -338,19 +338,27 @@ static BlockDriver *find_image_format(const char *filename)
|
||||
BlockDriverState *bs;
|
||||
|
||||
ret = bdrv_file_open(&bs, filename, 0);
|
||||
if (ret < 0)
|
||||
return NULL;
|
||||
if (ret < 0) {
|
||||
*pdrv = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Return the raw BlockDriver * to scsi-generic devices or empty drives */
|
||||
if (bs->sg || !bdrv_is_inserted(bs)) {
|
||||
bdrv_delete(bs);
|
||||
return bdrv_find_format("raw");
|
||||
drv = bdrv_find_format("raw");
|
||||
if (!drv) {
|
||||
ret = -ENOENT;
|
||||
}
|
||||
*pdrv = drv;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = bdrv_pread(bs, 0, buf, sizeof(buf));
|
||||
bdrv_delete(bs);
|
||||
if (ret < 0) {
|
||||
return NULL;
|
||||
*pdrv = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
score_max = 0;
|
||||
@ -364,7 +372,11 @@ static BlockDriver *find_image_format(const char *filename)
|
||||
}
|
||||
}
|
||||
}
|
||||
return drv;
|
||||
if (!drv) {
|
||||
ret = -ENOENT;
|
||||
}
|
||||
*pdrv = drv;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -571,12 +583,11 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
|
||||
|
||||
/* Find the right image format driver */
|
||||
if (!drv) {
|
||||
drv = find_image_format(filename);
|
||||
ret = find_image_format(filename, &drv);
|
||||
probed = 1;
|
||||
}
|
||||
|
||||
if (!drv) {
|
||||
ret = -ENOENT;
|
||||
goto unlink_and_fail;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user