diff --git a/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm index 2ac879f0a..703aa61e4 100644 --- a/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-1.0.0/lib/SCST/SCST.pm @@ -477,7 +477,7 @@ sub setScstAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_ROOT_DIR(), $attribute); @@ -523,7 +523,7 @@ sub targets { my $self = shift; my $driver = shift; - return (undef, "Too few arguments") if (!defined($driver)); + return (undef, "Too few arguments") if (!length($driver)); my $tHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver); @@ -558,7 +558,7 @@ sub groups { my $driver = shift; my $target = shift; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $gHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, @@ -599,8 +599,8 @@ sub initiators { my @initiators; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target) || - !defined($group)); + return (undef, "Too few arguments") + if (!length($driver) || !length($target) || !length($group)); my $iHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -637,11 +637,11 @@ sub luns { my $group = shift; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $_path; - if (defined($group)) { + if (length($group)) { $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS); } else { @@ -652,7 +652,7 @@ sub luns { my $lHandle = new IO::Handle; if (!(opendir $lHandle, $_path)) { - if (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + if (length($group) && $self->groupExists($driver, $target, $group) != TRUE) { $errorString = "initiators(): Group '$group' does not exist"; } elsif ($self->driverExists($driver) != TRUE) { $errorString = "luns(): Driver '$driver' is not available"; @@ -780,7 +780,7 @@ sub deviceGroupDevices { my @devices; my $errorString; - return (undef, "Too few arguments") if (!defined($group)); + return (undef, "Too few arguments") if (!length($group)); my $dHandle = new IO::Handle; my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES); @@ -812,7 +812,7 @@ sub targetGroups { my @tgroups; my $errorString; - return (undef, "Too few arguments") if (!defined($group)); + return (undef, "Too few arguments") if (!length($group)); my $dHandle = new IO::Handle; my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS); @@ -845,7 +845,7 @@ sub targetGroupTargets { my @targets; my $errorString; - return (undef, "Too few arguments") if (!defined($group) || !defined($tgroup)); + return (undef, "Too few arguments") if (!length($group) || !length($tgroup)); my $dHandle = new IO::Handle; my $_path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup); @@ -881,7 +881,7 @@ sub driverExists { my $dHandle = new IO::Handle; my $result; - $result = defined($driver) && + $result = length($driver) && opendir($dHandle, make_path(SCST_TARGETS_DIR(), $driver)); close $dHandle if ($result); @@ -895,7 +895,7 @@ sub driverDynamicAttributes { my $available; my $errorString; - return (undef, "Too few arguments") if (!defined($driver)); + return (undef, "Too few arguments") if (!length($driver)); my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO), O_RDONLY; @@ -935,6 +935,8 @@ sub checkDriverDynamicAttributes { my $driver = shift; my $check = shift; + return TRUE if (!length($driver)); + my ($available, $errorString) = $self->driverDynamicAttributes($driver); if (!defined($available)) { @@ -969,7 +971,7 @@ sub addDriverDynamicAttribute { my $value = shift; return SCST_C_DRV_ADDATTR_FAIL - if (!defined($driver) || !defined($attribute) || !defined($value)); + if (!length($driver) || !defined($attribute) || !defined($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); @@ -1007,7 +1009,7 @@ sub removeDriverDynamicAttribute { my $value = shift; return SCST_C_DRV_REMATTR_FAIL - if (!defined($driver) || !defined($attribute) || !defined($value)); + if (!length($driver) || !defined($attribute) || !defined($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO); @@ -1043,7 +1045,7 @@ sub targetExists { my $driver = shift; my $target = shift; - return defined($driver) && defined($target) && + return length($driver) && length($target) && $target ne '.' && $target ne '..' && $target ne 'module' && (-d make_path(SCST_TARGETS_DIR(), $driver, $target)) ? TRUE : FALSE; } @@ -1061,7 +1063,7 @@ sub targetType { my $target = shift; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); if ($self->driverIsVirtualCapable($driver)) { my $attribs; @@ -1138,7 +1140,7 @@ sub targetDynamicAttributes { my $available; my $errorString; - return (undef, "Too few arguments") if (!defined($driver)); + return (undef, "Too few arguments") if (!length($driver)); my $io = new IO::File make_path(SCST_TARGETS_DIR(), $driver, SCST_MGMT_IO), O_RDONLY; @@ -1213,7 +1215,7 @@ sub addTargetDynamicAttribute { my $value = shift; return SCST_C_TGT_ADDATTR_FAIL - if (!defined($driver) || !defined($target) || + if (!length($driver) || !defined($target) || !defined($attribute) || !defined($value)); my ($path, $cmd); @@ -1455,8 +1457,8 @@ sub addGroup { my $target = shift; my $group = shift; - return SCST_C_GRP_ADD_FAIL if (!defined($driver) || !defined($target) || - !defined($group)); + return SCST_C_GRP_ADD_FAIL if (!length($driver) || !length($target) || + !length($group)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -1496,8 +1498,8 @@ sub removeGroup { my $target = shift; my $group = shift; - return SCST_C_GRP_REM_FAIL if (!defined($driver) || !defined($target) || - !defined($group)); + return SCST_C_GRP_REM_FAIL if (!length($driver) || !length($target) || + !length($group)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -1594,7 +1596,7 @@ sub addDeviceGroupDevice { my $dgroups; my $errorString; - return SCST_C_DGRP_ADD_DEV_FAIL if (!defined($group) || !defined($device)); + return SCST_C_DGRP_ADD_DEV_FAIL if (!length($group) || !length($device)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, @@ -1644,8 +1646,7 @@ sub addTargetGroup { my $group = shift; my $tgroup = shift; - return SCST_C_DGRP_ADD_GRP_FAIL if (!defined($group) || - !defined($tgroup)); + return SCST_C_DGRP_ADD_GRP_FAIL if (!length($group) || !length($tgroup)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1679,9 +1680,8 @@ sub addTargetGroupTarget { my $tgroup = shift; my $tgt = shift; - return SCST_C_TGRP_ADD_TGT_FAIL if (!defined($group) || - !defined($tgroup) || - !defined($tgt)); + return SCST_C_TGRP_ADD_TGT_FAIL + if (!length($group) || !length($tgroup) || !length($tgt)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1717,7 +1717,7 @@ sub removeDeviceGroupDevice { my $group = shift; my $device = shift; - return SCST_C_DGRP_REM_DEV_FAIL if (!defined($group) || !defined($device)); + return SCST_C_DGRP_REM_DEV_FAIL if (!length($group) || !length($device)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_DEVICES, @@ -1756,7 +1756,7 @@ sub removeTargetGroup { my $group = shift; my $tgroup = shift; - return SCST_C_DGRP_REM_GRP_FAIL if (!defined($group) || !defined($tgroup)); + return SCST_C_DGRP_REM_GRP_FAIL if (!length($group) || !length($tgroup)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1792,7 +1792,7 @@ sub removeTargetGroupTarget { my $tgroup = shift; my $tgt = shift; - return SCST_C_TGRP_REM_TGT_FAIL if (!defined($group) || !defined($tgroup) || !defined($tgt)); + return SCST_C_TGRP_REM_TGT_FAIL if (!length($group) || !length($tgroup) || !length($tgt)); my ($path, $cmd); $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -1834,8 +1834,8 @@ sub addInitiator { my $initiator = shift; return SCST_C_GRP_ADD_INI_FAIL - if (!defined($driver) || !defined($target) || - !defined($group) || !defined($initiator)); + if (!length($driver) || !length($target) || + !length($group) || !length($initiator)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -1854,9 +1854,9 @@ sub addInitiator { return FALSE if ($self->{'debug'} || $bytes > 0); } - return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) || - !defined($target) || - !defined($initiator)); + return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || + !length($target) || + !length($initiator)); my $rc = $self->driverExists($driver); return SCST_C_DRV_NO_DRIVER if (!$rc); @@ -1884,7 +1884,7 @@ sub removeInitiator { my $group = shift; my $initiator = shift; - return SCST_C_GRP_REM_INI_FAIL if (!defined($driver) || !defined($target) || !defined($group) || !defined($initiator)); + return SCST_C_GRP_REM_INI_FAIL if (!length($driver) || !length($target) || !length($group) || !length($initiator)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -2021,12 +2021,12 @@ sub addLun { my $attributes = shift; my $group = shift; - my $err = defined($group) ? SCST_C_GRP_ADD_LUN_FAIL : + my $err = length($group) ? SCST_C_GRP_ADD_LUN_FAIL : SCST_C_TGT_ADD_LUN_FAIL; - return $err if (!defined($driver) || !defined($target) || - !defined($device) || !defined($lun) || - !defined($attributes)); + return $err if (!length($driver) || !length($target) || + !length($device) || !length($lun) || + !length($attributes)); my $o_string = ""; foreach my $attribute (keys %{$attributes}) { @@ -2037,7 +2037,7 @@ sub addLun { $o_string =~ s/\s$//; my ($path, $cmd); - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); } else { @@ -2059,14 +2059,14 @@ sub addLun { return FALSE if ($self->{'debug'} || $bytes > 0); } - if (defined($group)) { + if (length($group)) { my $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); } my $rc = $self->lunExists($driver, $target, $lun, $group); - return (defined($group) ? SCST_C_GRP_LUN_EXISTS : + return (length($group) ? SCST_C_GRP_LUN_EXISTS : SCST_C_TGT_LUN_EXISTS) if ($rc == TRUE); return $rc if ($rc > 1); @@ -2096,14 +2096,14 @@ sub removeLun { my $lun = shift; my $group = shift; - my $err = defined($group) ? SCST_C_GRP_REM_LUN_FAIL : + my $err = length($group) ? SCST_C_GRP_REM_LUN_FAIL : SCST_C_TGT_ADD_LUN_FAIL; - return $err if (!defined($driver) || !defined($target) || - !defined($lun)); + return $err if (!length($driver) || !length($target) || + !length($lun)); my ($path, $cmd); - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); @@ -2133,14 +2133,14 @@ sub removeLun { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($group)) { $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); } $rc = $self->lunExists($driver, $target, $lun, $group); - return (defined($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) + return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) if (!$rc); return $rc if ($rc > 1); @@ -2158,7 +2158,7 @@ sub replaceLun { my $err; - return TRUE if (!defined($lun)); + return TRUE if (!length($lun)); my $rc = $self->driverExists($driver); return SCST_C_DRV_NO_DRIVER if (!$rc); @@ -2168,7 +2168,7 @@ sub replaceLun { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($group)) { $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); @@ -2228,13 +2228,13 @@ sub clearLuns { my $target = shift; my $group = shift; - my $err = defined($group) ? SCST_C_GRP_CLR_LUN_FAIL : + my $err = length($group) ? SCST_C_GRP_CLR_LUN_FAIL : SCST_C_TGT_CLR_LUN_FAIL; - return $err if (!defined($driver) || !defined($target)); + return $err if (!length($driver) || !length($target)); my ($path, $cmd); - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); @@ -2264,7 +2264,7 @@ sub clearLuns { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($group)) { $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); @@ -2277,6 +2277,8 @@ sub deviceHandler { my $self = shift; my $device = shift; + return undef if (!length($device)); + my $handler = readlink(make_path(SCST_DEVICES_DIR(), $device, 'handler')); $handler =~ s/.*\///; @@ -2289,7 +2291,7 @@ sub devices { my @devices; my $dHandle = new IO::Handle; - my $_path = !defined($handler) ? SCST_DEVICES_DIR() : + my $_path = !length($handler) ? SCST_DEVICES_DIR() : make_path(SCST_HANDLERS_DIR(), $handler); if (!(opendir $dHandle, $_path)) { return (undef, "devices(): Unable to read directory '$_path': $!"); @@ -2299,7 +2301,7 @@ sub devices { next if ($device eq '.' || $device eq '..'); my $isdev = (-d make_path(SCST_DEVICES_DIR(), $device)); - if ($isdev && (!defined($handler) || + if ($isdev && (!length($handler) || $handler eq $self->deviceHandler($device))) { push @devices, $device; } @@ -2314,11 +2316,11 @@ sub deviceOpen { my $self = shift; my $device = shift; - return FALSE if (!defined($device)); + return FALSE if (!length($device)); my ($devices, $errorString) = $self->devices(); - return SCST_C_FATAL_ERROR if (!defined($devices)); + return SCST_C_FATAL_ERROR if (!length($devices)); foreach my $_device (@{$devices}) { return TRUE if ($device eq $_device); @@ -2570,7 +2572,7 @@ sub setDriverAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $path = make_path(SCST_TARGETS_DIR(), $driver, $attribute); @@ -2601,7 +2603,7 @@ sub targetAttributes { my %attributes = ( ); my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $pHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target); @@ -2705,7 +2707,8 @@ sub setTargetAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($driver) || !length($target) || + !length($attribute) || !length($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, $attribute); @@ -2830,7 +2833,7 @@ sub setGroupAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my ($path, $cmd); $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, @@ -2876,7 +2879,7 @@ sub lunAttributes { my ($_path, $luncrattr); - if (defined($group)) { + if (length($group)) { $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, $lun); ($luncrattr, $errorString) = @@ -2893,7 +2896,7 @@ sub lunAttributes { $errorString = "lunAttributes(): Driver '$driver' is not available"; } elsif ($self->targetExists($driver, $target) != TRUE) { $errorString = "lunAttributes(): Target '$target' is not available"; - } elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + } elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) { $errorString = "lunAttributes(): Group '$group' does not exist"; } elsif ($self->lunExists($driver, $target, $lun, $group) != TRUE) { $errorString = "lunAttributes(): LUN '$lun' does not exist"; @@ -2980,12 +2983,12 @@ sub setLunAttribute { my $group = shift; return SCST_C_LUN_SETATTR_FAIL - if (!defined($driver) || !defined($target) || !defined($lun) || - !defined($attribute) || !defined($value)); + if (!length($driver) || !length($target) || !length($lun) || + !length($attribute) || !length($value)); my $path; - if (defined($group)) { + if (length($group)) { $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, $lun, $attribute); @@ -3014,14 +3017,14 @@ sub setLunAttribute { return SCST_C_TGT_NO_TARGET if (!$rc); return $rc if ($rc > 1); - if (defined($group)) { + if (length($group)) { $rc = $self->groupExists($driver, $target, $group); return SCST_C_GRP_NO_GROUP if (!$rc); return $rc if ($rc > 1); } $rc = $self->lunExists($driver, $target, $lun, $group); - return (defined($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) + return (length($group) ? SCST_C_GRP_NO_LUN : SCST_C_TGT_NO_LUN) if (!$rc); return $rc if ($rc > 1); @@ -3131,7 +3134,7 @@ sub setInitiatorAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, $initiator, $attribute); @@ -3418,7 +3421,7 @@ sub setAluaAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $attribute); @@ -3443,7 +3446,7 @@ sub setDeviceGroupAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $group, $attribute); @@ -3473,8 +3476,8 @@ sub setTargetGroupAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($group) || !defined($tgroup) || - !defined($attribute) || !defined($value)); + return TRUE if (!length($group) || !length($tgroup) || + !length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, $tgroup, $attribute); @@ -3509,9 +3512,9 @@ sub setTargetGroupTargetAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($group) || !defined($tgroup) || - !defined($tgt) || !defined($attribute) || - !defined($value)); + return TRUE if (!length($group) || !length($tgroup) || + !length($tgt) || !length($attribute) || + !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_DEV_GROUP_DIR(), $group, SCST_DG_TGROUPS, @@ -3572,7 +3575,7 @@ sub handlerExists { my $self = shift; my $handler = shift; - return FALSE if (!defined($handler)); + return FALSE if (!length($handler)); my ($handlers, $errorString) = $self->handlers(); @@ -3591,7 +3594,7 @@ sub setHandlerAttribute { my $attribute = shift; my $value = shift; - return TRUE if (!defined($attribute) || !defined($value)); + return TRUE if (!length($attribute) || !length($value)); my $bytes = - ENOENT; my $path = make_path(SCST_HANDLERS_DIR(), $handler, $attribute); @@ -3821,6 +3824,8 @@ sub deviceCreateAttributes { my %attributes = ( ); my $errorString; + return (undef, "missing handler argument") if (!length($handler)); + my $io = new IO::File make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO), O_RDONLY; @@ -3860,9 +3865,8 @@ sub openDevice { my $device = shift; my $attributes = shift; - return SCST_C_DEV_OPEN_FAIL if (!defined($handler) || - !defined($device) || - !defined($attributes)); + return SCST_C_DEV_OPEN_FAIL + if (!length($handler) || !length($device) || !length($attributes)); my $o_string = ""; foreach my $attribute (keys %{$attributes}) { @@ -3912,8 +3916,7 @@ sub closeDevice { my $handler = shift; my $device = shift; - return SCST_C_DEV_CLOSE_FAIL if (!defined($handler) || - !defined($device)); + return SCST_C_DEV_CLOSE_FAIL if (!length($handler) || !length($device)); my ($path, $cmd); $path = make_path(SCST_HANDLERS_DIR(), $handler, SCST_MGMT_IO); @@ -4196,7 +4199,7 @@ sub lunCreateAttributes { my $_path; - if (defined($group)) { + if (length($group)) { $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, SCST_GROUPS, $group, SCST_LUNS, SCST_MGMT_IO); @@ -4214,7 +4217,7 @@ sub lunCreateAttributes { } elsif ($self->targetExists($driver, $target) != TRUE) { $errorString = "lunCreateAttributes(): Target '$target' ". "is not available"; - } elsif (defined($group) && $self->groupExists($driver, $target, $group) != TRUE) { + } elsif (length($group) && $self->groupExists($driver, $target, $group) != TRUE) { $errorString = "lunCreateAttributes(): Group '$group' ". "does not exist"; } else { @@ -4341,7 +4344,7 @@ sub sessions { my %_sessions; my $errorString; - return (undef, "Too few arguments") if (!defined($driver) || !defined($target)); + return (undef, "Too few arguments") if (!length($driver) || !length($target)); my $sHandle = new IO::Handle; my $_path = make_path(SCST_TARGETS_DIR(), $driver, $target, diff --git a/scstadmin/scstadmin.sysfs/scstadmin b/scstadmin/scstadmin.sysfs/scstadmin index 9dd72273c..0c4ee447e 100755 --- a/scstadmin/scstadmin.sysfs/scstadmin +++ b/scstadmin/scstadmin.sysfs/scstadmin @@ -1497,7 +1497,8 @@ sub serializeKeyAttr { foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; - push (@values, $value) if ($value); + # $value = undef means that the attribute is write-only. + push (@values, $value) if (defined($value)); } foreach my $value (sort @values) { $result .= "$prefix$attribute " . escapeMeta($value) . "\n"; @@ -1532,7 +1533,8 @@ sub serializeNkAttr { && $attribute ne 'enabled' && $attribute ne 'hw_target') { my $value = $$attributes{$attribute}->{'value'}; - if ($value) { + # $value = undef means that the attribute is write-only. + if (defined($value)) { $result .= "$prefix$attribute " . escapeMeta($value) . "\n"; } } @@ -3140,7 +3142,7 @@ sub listDevices { my $device = shift; my $nonkey = shift; - return listDevice($device, $nonkey) if ($device); + return listDevice($device, $nonkey) if (length($device)); return listHandler(); } @@ -3164,7 +3166,7 @@ sub listDeviceGroups { my $group = shift; my $showall = shift; - return listDeviceGroup($group) if ($group); + return listDeviceGroup($group) if (length($group)); my ($groups, $errorString) = $SCST->deviceGroups(); @@ -3243,8 +3245,8 @@ sub listTargetGroups { my $tgroup = shift; my $indent = shift; - return listDeviceGroups(undef, TRUE) if ($group eq ''); - return listTargetGroup($group, $tgroup) if ($tgroup); + return listDeviceGroups(undef, TRUE) if (!length($group)); + return listTargetGroup($group, $tgroup) if (length($tgroup)); my ($tgroups, $errorString) = $SCST->targetGroups($group); @@ -3332,7 +3334,7 @@ sub listDeviceGroupDevices { sub listDrivers { my $driver = shift; - return listTargets($driver, undef) if ($driver); + return listTargets($driver, undef) if (length($driver)); my ($drivers, $errorString) = $SCST->drivers(); @@ -3360,9 +3362,10 @@ sub listTargets { my $target = shift; my %toprint; - return listGroups($driver, $target, undef) if ($target and $driver); + return listGroups($driver, $target, undef) + if (length($target) and length($driver)); - my $got_driver = defined($driver); + my $got_driver = !!length($driver); my ($drivers, $errorString) = $SCST->drivers(); @@ -3469,7 +3472,7 @@ sub listGroup { my $errorString; ($luns, $errorString) = $SCST->luns($driver, $target, $group) if (!$luns); - if (!defined($initiators) && defined($group)) { + if (!length($initiators) && length($group)) { ($initiators, $errorString) = $SCST->initiators($driver, $target, $group); return TRUE if issueWarning($errorString); } @@ -3504,7 +3507,7 @@ sub listGroup { print "\t(none)\n"; } - if (defined($group)) { + if (length($group)) { print "\nAssigned Initiators:\n\n"; if ($#{$initiators} > -1) { @@ -3523,7 +3526,7 @@ sub listGroup { } } } else { - if (defined($group)) { + if (length($group)) { print "Group '$group' has no associated LUNs or initiators.\n"; } else { print "Driver/target '$driver/$target' has no associated LUNs.\n"; @@ -3539,7 +3542,7 @@ sub listGroups { my $group = shift; my $found = FALSE; - if ($group and $driver and $target) { + if (length($group) and length($driver) and length($target)) { return listGroup($driver, $target, $group); } @@ -3948,7 +3951,7 @@ sub listLunAttributes { return TRUE if issueWarning($errorString); if (!scalar(keys %{$attributes})) { - if ($group) { + if (length($group)) { print "No such driver/target/group/lun '$driver/$target/$group/$lun' found.\n"; } else { print "No such driver/target/lun '$driver/$target/$lun' found.\n"; @@ -5160,7 +5163,7 @@ sub addLun { return FALSE; } - if (defined($group)) { + if (length($group)) { print "\t-> Adding device '$device' at LUN $lun to driver/target/group ". "'$driver/$target/$group': "; } else { @@ -5351,7 +5354,7 @@ sub issueLip { my $warn = shift; my $errorString; - if (defined($driver) && defined($target)) { + if (length($driver) && length($target)) { return _issueLip($driver, $target, $warn); } else { my $drivers;