]> jspc29.x-matter.uni-frankfurt.de Git - mvdsensorcontrol.git/commitdiff
added safety check to changeConfigVal, register/field must exist in specification
authorwww@jspc55 <www@jspc55>
Thu, 6 Mar 2014 13:34:23 +0000 (14:34 +0100)
committerwww@jspc55 <www@jspc55>
Thu, 6 Mar 2014 13:34:23 +0000 (14:34 +0100)
tools/changeConfigVal.pl
tools/xmlOperations.pm

index 2272a242d38b0506e1e7e19409a24bf82ed5b2a4..43fc88a24c042c2f883ff4463d3aa1059c142e14 100755 (executable)
@@ -118,6 +118,8 @@ for my $line (@inputLines){
   my $field = $2;
   my $value = $3;
   
+  die "Register/Field combination not valid!\n" unless specExists($register,$field);
+  
   print VERBOSE "changed register $register field $field to $value\n";
   
   
index 62b3147e2df77128a1d1cd200bc293cece332a6b..cf63c83412bf293e20f2576d281e1b3c5f9c1555 100644 (file)
@@ -58,6 +58,7 @@ sub getSpecTree{
 ## xml file operations
 ###############################
 
+
 sub deleteFile { 
   my $configFileName = $_[0];
   my $configFile     = $confDir . "/" . $configFileName;
@@ -306,6 +307,8 @@ sub del {
   my $register     =
     $xmltree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" )
     ->shift();
+    
+  die "Register $registerName not valid according to specification\n" unless(defined($register));
 
   if ( $fieldName eq "" ) {    # no field specified, remove whole register
     if(defined ( $register ) ) {
@@ -444,6 +447,35 @@ sub copyDefaultRegister {
 # description: copys register "registerName" from $specTree to $configTree
 # make change permanent by calling writeConfigFile() hereafter.
 
+sub specExists {
+  my $registerName = $_[0];
+  my $fieldName    = $_[1];
+  
+  my $specRegister =
+    $specTree->findnodes( "/MAPS/register[\@name='" . $registerName . "']" )
+    ->shift();
+  if( ($fieldName eq "*") and (defined($specRegister)) ) {
+    return 1;
+  }
+    
+  my $field =
+  $specTree->findnodes( "/MAPS/register[\@name='"
+    . $registerName
+    . "']/field[\@name='"
+    . $fieldName
+    . "']" )->shift();  
+    
+  if ( defined($specRegister) and defined($field) ) {
+    return 1;
+  }
+  return 0;
+}
+# args: registerName, fieldName
+# globs: $specTree
+# description: returns 1 if registerName/fieldName combination exists in specification.
+# registerName/* is also allowed, will then check if register alone is defined
+
+
 sub writeConfigFile(){
   open( SCHREIBEN, "> $configFile" )
     or print "could not open file $configFile for writing: $!\n";