summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/storage/storage_backend_scsi.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c
index e6c8bb586e..3c1bae6b7f 100644
--- a/src/storage/storage_backend_scsi.c
+++ b/src/storage/storage_backend_scsi.c
@@ -255,44 +255,41 @@ getNewStyleBlockDevice(const char *lun_path,
char *block_path = NULL;
DIR *block_dir = NULL;
struct dirent *block_dirent = NULL;
- int retval = 0;
+ int retval = -1;
int direrr;
if (virAsprintf(&block_path, "%s/block", lun_path) < 0)
- goto out;
+ goto cleanup;
VIR_DEBUG("Looking for block device in '%s'", block_path);
- block_dir = opendir(block_path);
- if (block_dir == NULL) {
+ if (!(block_dir = opendir(block_path))) {
virReportSystemError(errno,
_("Failed to opendir sysfs path '%s'"),
block_path);
- retval = -1;
- goto out;
+ goto cleanup;
}
while ((direrr = virDirRead(block_dir, &block_dirent, block_path)) > 0) {
-
if (STREQLEN(block_dirent->d_name, ".", 1))
continue;
- if (VIR_STRDUP(*block_device, block_dirent->d_name) < 0) {
- closedir(block_dir);
- retval = -1;
- goto out;
- }
+ if (VIR_STRDUP(*block_device, block_dirent->d_name) < 0)
+ goto cleanup;
VIR_DEBUG("Block device is '%s'", *block_device);
break;
}
+
if (direrr < 0)
- retval = -1;
+ goto cleanup;
- closedir(block_dir);
+ retval = 0;
- out:
+ cleanup:
+ if (block_dir)
+ closedir(block_dir);
VIR_FREE(block_path);
return retval;
}