Index: /trunk/psLib/src/types/psMetadataConfig.c
===================================================================
--- /trunk/psLib/src/types/psMetadataConfig.c	(revision 9919)
+++ /trunk/psLib/src/types/psMetadataConfig.c	(revision 9920)
@@ -10,6 +10,6 @@
 *  @author Eric Van Alst, MHPCC
 *
-*  @version $Revision: 1.116 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2006-11-09 03:50:08 $
+*  @version $Revision: 1.117 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2006-11-09 04:06:16 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -62,12 +62,11 @@
 static psMetadata* setMetadataItem(psMetadata* template, char* linePtr)
 ;
-static psBool parseLine(psS32* level,   psArray* levelArray, char*  linePtr,
+static psBool parseLine(psArray* levelArray, char*  linePtr,
                         psS32 lineCount, psBool overwrite);
-static psBool parseMetadataItem(char* keyName, psS32* level, psArray* levelArray,
+static psBool parseMetadataItem(char* keyName, psArray* levelArray,
                                 char* linePtr, psS32 lineCount, psMetadataFlags flags);
 static psString formatMetadataItem(psMetadataItem *item);
 static psArray *p_psMetadataKeyArray(psMetadata *md);
 static bool parseGeneric(char* keyName,
-                         psS32* level,
                          psArray* levelArray,
                          char* linePtr,
@@ -75,5 +74,4 @@
                          psMetadataFlags flags);
 static bool parseType(char* keyName,
-                      psS32* level,
                       psArray* levelArray,
                       char* linePtr,
@@ -81,5 +79,4 @@
                       psMetadataFlags flags);
 static bool parseMetadataEnd(char* keyName,
-                             psS32* level,
                              psArray* levelArray,
                              char* linePtr,
@@ -687,5 +684,4 @@
 
 psBool parseMetadataItem(char* keyName,
-                         psS32* level,
                          psArray* levelArray,
                          char* linePtr,
@@ -719,4 +715,6 @@
     // Get the metadata item type
     strType = getToken(&linePtr, " ", &status,true);
+
+    long level = psArrayLength(levelArray) - 1;
 
     // Check for no type
@@ -793,6 +791,6 @@
         } else {
             // Search through user types
-            typeArray = ((p_psParseLevelInfo*)(levelArray->data[*level]))->typeArray;
-            templateArray = ((p_psParseLevelInfo*)(levelArray->data[*level]))->templateArray;
+            typeArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->typeArray;
+            templateArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->templateArray;
             for(psS32 k = 0; k < typeArray->n; k++) {
                 if(strcmp(strType,(char*)typeArray->data[k]) == 0) {
@@ -800,5 +798,5 @@
                     if(tempMeta != NULL) {
                         // Add metadata item
-                        md = ((p_psParseLevelInfo*)(levelArray->data[*level]))->metadata;
+                        md = ((p_psParseLevelInfo*)(levelArray->data[level]))->metadata;
                         addStatus = psMetadataAdd(md,PS_LIST_TAIL,keyName,
                                                   PS_DATA_METADATA | flags,"",tempMeta);
@@ -876,6 +874,6 @@
     // Need to add item to metadata so get pointer to metadata
     status = 0;
-    md = ((p_psParseLevelInfo*)(levelArray->data[*level]))->metadata;
-    nonUniqueKeys = ((p_psParseLevelInfo*)(levelArray->data[*level]))->nonUniqueKeyArray;
+    md = ((p_psParseLevelInfo*)(levelArray->data[level]))->metadata;
+    nonUniqueKeys = ((p_psParseLevelInfo*)(levelArray->data[level]))->nonUniqueKeyArray;
     switch(mdType) {
     case PS_DATA_STRING:
@@ -1073,5 +1071,4 @@
         psFree(nextLevelInfo);
         // Increment level counter
-        (*level)++;
         addStatus = true;
         break;
@@ -1094,6 +1091,5 @@
 }
 
-psBool parseLine(psS32* level,
-                 psArray* levelArray,
+psBool parseLine(psArray* levelArray,
                  char* linePtr,
                  psS32 lineCount,
@@ -1134,13 +1130,13 @@
     // Check for special keyName values "TYPE", "END"
     if (strcmp(keyName, "END") == 0) {
-        if (!parseMetadataEnd(keyName, level, levelArray, linePtr, lineCount, flags)) {
+        if (!parseMetadataEnd(keyName, levelArray, linePtr, lineCount, flags)) {
             goto FAIL;
         }
     } else if (strcmp(keyName,"TYPE") == 0 ) {
-        if (!parseType(keyName, level, levelArray, linePtr, lineCount, flags)) {
+        if (!parseType(keyName, levelArray, linePtr, lineCount, flags)) {
             goto FAIL;
         }
     } else {
-        if (!parseGeneric(keyName, level, levelArray, linePtr, lineCount, flags)) {
+        if (!parseGeneric(keyName, levelArray, linePtr, lineCount, flags)) {
             goto FAIL;
         }
@@ -1159,5 +1155,4 @@
 
 static bool parseGeneric(char* keyName,
-                         psS32* level,
                          psArray* levelArray,
                          char* linePtr,
@@ -1166,13 +1161,14 @@
 {
     PS_ASSERT_PTR_NON_NULL(keyName, false);
-    PS_ASSERT_PTR_NON_NULL(level, false);
     PS_ASSERT_PTR_NON_NULL(levelArray, false);
     PS_ASSERT_PTR_NON_NULL(linePtr, false);
 
+    long level = psArrayLength(levelArray) - 1;
+
     // Check if key name present in array of non-unique key names
-    psS32 limit = ((p_psParseLevelInfo*)(levelArray->data[*level]))->nonUniqueKeyArray->n;
+    psS32 limit = ((p_psParseLevelInfo*)(levelArray->data[level]))->nonUniqueKeyArray->n;
     for (psS32 k = 0; k < limit; k++) {
         char *name = (char*)((p_psParseLevelInfo*)
-                             (levelArray->data[*level]))->nonUniqueKeyArray->data[k];
+                             (levelArray->data[level]))->nonUniqueKeyArray->data[k];
         if (strcmp(name, keyName) == 0) {
             flags = PS_META_DUPLICATE_OK;
@@ -1181,5 +1177,5 @@
 
     // Parse metadataItem
-    if (!parseMetadataItem(keyName, level, levelArray, linePtr, lineCount, flags)) {
+    if (!parseMetadataItem(keyName, levelArray, linePtr, lineCount, flags)) {
         return false;
     }
@@ -1189,5 +1185,4 @@
 
 static bool parseType(char* keyName,
-                      psS32* level,
                       psArray* levelArray,
                       char* linePtr,
@@ -1196,7 +1191,8 @@
 {
     PS_ASSERT_PTR_NON_NULL(keyName, false);
-    PS_ASSERT_PTR_NON_NULL(level, false);
     PS_ASSERT_PTR_NON_NULL(levelArray, false);
     PS_ASSERT_PTR_NON_NULL(linePtr, false);
+
+    long level = psArrayLength(levelArray) - 1;
 
     // Get the type name
@@ -1226,5 +1222,5 @@
 
     // Access type array
-    psArray *typeArray = ((p_psParseLevelInfo*)(levelArray->data[*level]))->typeArray;
+    psArray *typeArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->typeArray;
 
     // Check if type already exists in array
@@ -1246,5 +1242,5 @@
 
     // Add template to array of templates
-    psArray *templateArray = ((p_psParseLevelInfo*)(levelArray->data[*level]))->templateArray;
+    psArray *templateArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->templateArray;
     psArrayAdd(templateArray, 0, tempTemplate);
     psFree(tempTemplate);
@@ -1254,5 +1250,4 @@
 
 static bool parseMetadataEnd(char* keyName,
-                             psS32* level,
                              psArray* levelArray,
                              char* linePtr,
@@ -1261,15 +1256,17 @@
 {
     PS_ASSERT_PTR_NON_NULL(keyName, false);
-    PS_ASSERT_PTR_NON_NULL(level, false);
     PS_ASSERT_PTR_NON_NULL(levelArray, false);
     PS_ASSERT_PTR_NON_NULL(linePtr, false);
 
-    if ((*level) < 1) {
+    long level = psArrayLength(levelArray) - 1;
+
+    if ((level) < 1) {
         psError(PS_ERR_UNKNOWN, false, "can not END the top level metadata");
         return false;
     }
 
-    p_psParseLevelInfo *upperLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[*level-1]));
-    p_psParseLevelInfo *lowerLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[*level]));
+    p_psParseLevelInfo *upperLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[level - 1]));
+    p_psParseLevelInfo *lowerLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[level]));
+
     // Check name in nonunique list
     for (psS32 k = 0; k < psArrayLength(upperLevelInfo->nonUniqueKeyArray); k++) {
@@ -1301,13 +1298,11 @@
     }
 
+    // the END just moved us up one nesting level
     // Remove lower info level
-    if(!psArrayRemoveIndex(levelArray, *level)) {
+    if(!psArrayRemoveIndex(levelArray, level)) {
         psError(PS_ERR_UNKNOWN, false, "failed to remove array item");
         psFree(strValue);
         psFree(strComment);
     }
-
-    // the END just moved us up one nesting level
-    (*level)--;
 
     psFree(strValue);
@@ -1441,10 +1436,9 @@
     long lineCount = 0;
     char *line = NULL;
-    psS32 nestingLevel  = 0;
     psListIterator *iter = psListIteratorAlloc(doc, 0, false);
     while ((line = psListGetAndIncrement(iter))) {
         lineCount++; // indexed from 1
 
-        if (!parseLine(&nestingLevel, parseLevelInfoArray, line, lineCount,
+        if (!parseLine(parseLevelInfoArray, line, lineCount,
                        overwrite)) {
             if (nFail != NULL) {
