You are viewing a plain text version of this content. The canonical link for it is here.
Posted to websh-cvs@tcl.apache.org by ro...@apache.org on 2005/10/27 16:54:05 UTC

svn commit: r328886 - in /tcl/websh/trunk/src: generic/log.c generic/log.h generic/logutl.c tests/log.test

Author: ronnie
Date: Thu Oct 27 07:53:54 2005
New Revision: 328886

URL: http://svn.apache.org/viewcvs?rev=328886&view=rev
Log:
- refactored log filters and levels to reside in an array so that names
  can be reused after deletion needed for mod_websh, because
  otherwise, we run out of names sooner or later
- adapted and added tests accordingly

Modified:
    tcl/websh/trunk/src/generic/log.c
    tcl/websh/trunk/src/generic/log.h
    tcl/websh/trunk/src/generic/logutl.c
    tcl/websh/trunk/src/tests/log.test

Modified: tcl/websh/trunk/src/generic/log.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/log.c?rev=328886&r1=328885&r2=328886&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/log.c (original)
+++ tcl/websh/trunk/src/generic/log.c Thu Oct 27 07:53:54 2005
@@ -137,10 +137,14 @@
 
     if (logData != NULL) {
 
-	HashUtlAllocInit(logData->listOfFilters, TCL_STRING_KEYS);
-	logData->filterCnt = 0;
-	HashUtlAllocInit(logData->listOfDests, TCL_STRING_KEYS);
-	logData->destCnt = 0;
+	/* initialize list of destination and levels */
+	logData->listOfFilters = NULL;
+	logData->filterSize = 0;
+	logData->listOfDests = NULL;
+	logData->destSize = 0;
+	insertIntoFilterList(logData, (LogLevel *) NULL);
+	insertIntoDestList(logData, (LogDest *) NULL);
+
 	HashUtlAllocInit(logData->listOfPlugIns, TCL_STRING_KEYS);
 	logData->logSubst = 0;
     }
@@ -163,24 +167,33 @@
 	/* ..................................................................... */
 	if (logData->listOfFilters != NULL) {
 
-	    resetHashTableWithContent(logData->listOfFilters, TCL_STRING_KEYS,
-				      destroyLogLevel, interp);
-
-	    HashUtlDelFree(logData->listOfFilters);
-	    logData->listOfFilters = NULL;
+	  int i;
+	  LogLevel ** logLevels = logData->listOfFilters;
+	  for (i = 0; i < logData->filterSize; i++) {
+	    if (logLevels[i] != NULL) {
+	      destroyLogLevel(logLevels[i], interp);
+	    }
+	  }
+	  WebFreeIfNotNull(logData->listOfFilters);
+	  logData->filterSize = 0;
 	}
 
-	/* ..................................................................... */
+	/* ................................................................ */
 	if (logData->listOfDests != NULL) {
 
-	    resetHashTableWithContent(logData->listOfDests, TCL_STRING_KEYS,
-				      destroyLogDest, interp);
-	    HashUtlDelFree(logData->listOfDests);
-	    logData->listOfDests = NULL;
+	  int i;
+	  LogDest ** logDests = logData->listOfDests;
+	  for (i = 0; i < logData->destSize; i++) {
+	    if (logDests[i] != NULL) {
+	      destroyLogDest(logDests[i], interp);
+	    }
+	  }
+	  WebFreeIfNotNull(logData->listOfDests);
+	  logData->destSize = 0;
 	}
 
 
-	/* ..................................................................... */
+	/* ................................................................ */
 	if (logData->listOfPlugIns != NULL) {
 
 	    resetHashTableWithContent(logData->listOfPlugIns, TCL_STRING_KEYS,
@@ -238,9 +251,9 @@
 }
 
 /* ----------------------------------------------------------------------------
- * createLogDestName --
+ * createLogName --
  * ------------------------------------------------------------------------- */
-char *createLogDestName(char *prefix, int cnt)
+char *createLogName(char *prefix, int cnt)
 {
 
     char str[64];		/* more than enough space for logDest%d */
@@ -262,6 +275,76 @@
 }
 
 /* ----------------------------------------------------------------------------
+ * getIndextFromLogName --
+ * ------------------------------------------------------------------------- */
+int getIndexFromLogName(char *format, char *string) {
+  int i = -1;
+  int index = -1;
+  if (sscanf(string, format, &index) == 1) {
+    i = index;
+  }
+  return i;
+}
+
+/* ----------------------------------------------------------------------------
+ * insertIntoDestList --
+ * ------------------------------------------------------------------------- */
+char * insertIntoDestList(LogData *logData, LogDest *logDest) {
+  int i;
+  LogDest ** logDests = logData->listOfDests;
+  for (i = 0; i < logData->destSize; i++) {
+    if (logDests[i] == NULL) {
+      logDests[i] = logDest;
+      return createLogName(LOG_DEST_PREFIX, i);
+    }
+  }
+  {
+    /* list too small: increase size */
+    LogDest ** newLogDests = (LogDest **) Tcl_Alloc((LOG_LIST_INITIAL_SIZE + logData->destSize) * sizeof(LogDest *));
+    if (newLogDests == NULL) {return NULL;}
+    /* copy old list to new list */
+    memcpy(newLogDests, logDests, logData->destSize * sizeof(LogDest *));
+    /* init new entries to NULL */
+    for (i = 0; i < LOG_LIST_INITIAL_SIZE; i++) {
+      newLogDests[i + logData->destSize] = NULL;
+    }
+    logData->listOfDests = newLogDests;
+    logData->destSize += LOG_LIST_INITIAL_SIZE;
+    WebFreeIfNotNull(logDests);
+    return insertIntoDestList(logData, logDest);
+  }
+}
+
+/* ----------------------------------------------------------------------------
+ * insertIntoFilterList --
+ * ------------------------------------------------------------------------- */
+char * insertIntoFilterList(LogData *logData, LogLevel *logLevel) {
+  int i;
+  LogLevel ** logLevels = logData->listOfFilters;
+  for (i = 0; i < logData->filterSize; i++) {
+    if (logLevels[i] == NULL) {
+      logLevels[i] = logLevel;
+      return createLogName(LOG_FILTER_PREFIX, i);
+    }
+  }
+  {
+    /* list too small: increase size */
+    LogLevel ** newLogLevels = (LogLevel **) Tcl_Alloc((LOG_LIST_INITIAL_SIZE + logData->filterSize) * sizeof(LogLevel *));
+    if (newLogLevels == NULL) {return NULL;}
+    /* copy old list to new list */
+    memcpy(newLogLevels, logLevels, logData->filterSize * sizeof(LogLevel *));
+    /* init new entries to NULL */
+    for (i = 0; i < LOG_LIST_INITIAL_SIZE; i++) {
+      newLogLevels[i + logData->filterSize] = NULL;
+    }
+    logData->listOfFilters = newLogLevels;
+    logData->filterSize += LOG_LIST_INITIAL_SIZE;
+    WebFreeIfNotNull(logLevels);
+    return insertIntoFilterList(logData, logLevel);
+  }
+}
+
+/* ----------------------------------------------------------------------------
  * createLogDest --
  * ------------------------------------------------------------------------- */
 LogDest *createLogDest(void)
@@ -502,14 +585,6 @@
 	    }
 
 	    /* ------------------------------------------------------------------------
-	     * create name
-	     * --------------------------------------------------------------------- */
-	    name = createLogDestName("logdest", logData->destCnt);
-	    WebAssertData(interp, name,
-			  "cannot create name for log destination",
-			  TCL_ERROR);
-
-	    /* ------------------------------------------------------------------------
 	     * call constructor
 	     * --------------------------------------------------------------------- */
 	    if ((logPlugInData =
@@ -539,43 +614,38 @@
 	    logDest->plugInData = logPlugInData;
 	    logDest->maxCharInMsg = maxCharInMsg;
 
-	    /* ------------------------------------------------------------------------
+	    /* ----------------------------------------------------------
 	     * and add to list
-	     * --------------------------------------------------------------------- */
-	    if (appendToHashTable
-		(logData->listOfDests, name,
-		 (ClientData) logDest) == TCL_ERROR) {
-		Tcl_SetResult(interp, "cannot append \"", NULL);
-		Tcl_AppendResult(interp, name, "\" to list", NULL);
+	     * ---------------------------------------------------------- */
+	    
+	    name = insertIntoDestList(logData, logDest);
+	    if (name == NULL) {
+		Tcl_SetResult(interp, "cannot append new log destination to list", NULL);
 		destroyLogDest(logDest, interp);
 		destroyLogLevel(logLevel, NULL);
-		WebFreeIfNotNull(name);
 		WebFreeIfNotNull(format);
 		return TCL_ERROR;
 	    }
-	    logData->destCnt++;
 	    Tcl_SetResult(interp, name, Tcl_Free);
-
 	    return TCL_OK;
 	}
     case NAMES:{
 
-	    HashTableIterator iterator;
 	    Tcl_ResetResult(interp);
 
 	    if (logData->listOfDests != NULL) {
-
-		assignIteratorToHashTable(logData->listOfDests, &iterator);
-
-		while (nextFromHashIterator(&iterator) != TCL_ERROR) {
-		    Tcl_AppendElement(interp, keyOfCurrent(&iterator));
+	      int i;
+	      LogDest ** logDests = logData->listOfDests;
+	      for (i = 0; i < logData->destSize; i++) {
+		if (logDests[i] != NULL) {
+		  Tcl_AppendElement(interp, createLogName(LOG_DEST_PREFIX, i));
 		}
+	      }
 	    }
 	    return TCL_OK;
 	}
     case LEVELS:{
 
-	    HashTableIterator iterator;
 	    int namesIsFirst = TCL_OK;
 	    LogDest *logDest = NULL;
 
@@ -583,22 +653,25 @@
 
 	    if (logData->listOfDests != NULL) {
 
-		assignIteratorToHashTable(logData->listOfDests, &iterator);
+	      int i;
+	      LogDest ** logDests = logData->listOfDests;
+	      for (i = 0; i < logData->destSize; i++) {
+		if (logDests[i] != NULL) {
 
-		while (nextFromHashIterator(&iterator) != TCL_ERROR) {
 		    if (namesIsFirst == TCL_ERROR)
 			Tcl_AppendResult(interp, "\n", NULL);
 		    else
 			namesIsFirst = TCL_ERROR;
-		    logDest = (LogDest *) valueOfCurrent(&iterator);
+		    logDest = logDests[i];
 		    Tcl_AppendResult(interp,
-				     keyOfCurrent(&iterator), " ",
+				     createLogName(LOG_DEST_PREFIX, i), " ",
 				     logDest->filter->facility, ".",
 				     getSeverityName(logDest->filter->
 						     minSeverity), "-",
 				     getSeverityName(logDest->filter->
 						     maxSeverity), NULL);
 		}
+	      }
 	    }
 	    return TCL_OK;
 	}
@@ -611,29 +684,35 @@
 	    /*      web::loglogDest delete logDest1 */
 
 	    switch (objc) {
-	    case 3:
-		logDest =
-		    (LogDest *) removeFromHashTable(logData->listOfDests,
-						    Tcl_GetString(objv[2]));
-		if (logDest == NULL) {
-		    Tcl_SetResult(interp, "no such log destination \"", NULL);
-		    Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
+	    case 3: {
+	      int inx = getIndexFromLogName(LOG_DEST_PREFIX"%d", Tcl_GetString(objv[2]));
+	      LogDest ** logDests = logData->listOfDests;
+	      if (inx < 0 
+		  || inx >= logData->destSize
+		  || logDests[inx] == NULL) {
+		Tcl_SetResult(interp, "no such log destination \"", NULL);
+		Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
 				     NULL);
-		    return TCL_ERROR;
-		}
-		destroyLogDest(logDest, interp);
-		return TCL_OK;
+		return TCL_ERROR;
+	      }
+	      destroyLogDest(logDests[inx], interp);
+	      logDests[inx] = NULL;
+	      return TCL_OK;
+	      break;
+	    }
 	    case 2:
-		/* ----------------------------------------------------------------------
+		/* --------------------------------------------------------
 		 * no argument --> resets the list
-		 * ------------------------------------------------------------------- */
+		 * -------------------------------------------------------- */
 		if (logData->listOfDests != NULL) {
-		    if (resetHashTableWithContent(logData->listOfDests,
-						  TCL_STRING_KEYS,
-						  destroyLogDest,
-						  interp) == TCL_OK) {
-			logData->destCnt = 0;
+		  int i;
+		  LogDest ** logDests = logData->listOfDests;
+		  for (i = 0; i < logData->destSize; i++) {
+		    if (logDests[i] != NULL) {
+		      destroyLogDest(logDests[i], interp);
+		      logDests[i] = NULL;
 		    }
+		  }
 		}
 		return TCL_OK;
 		break;
@@ -711,13 +790,6 @@
 	    }
 
 	    /* ------------------------------------------------------------------------
-	     * name it
-	     * --------------------------------------------------------------------- */
-	    name = createLogDestName("logfilter", logData->filterCnt);
-	    WebAssertData(interp, name, "cannot create name for log filter",
-			  TCL_ERROR);
-
-	    /* ------------------------------------------------------------------------
 	     * parse level
 	     * --------------------------------------------------------------------- */
 	    logLevel =
@@ -730,32 +802,28 @@
 	    /* ------------------------------------------------------------------------
 	     * and add to list
 	     * --------------------------------------------------------------------- */
-	    if (appendToHashTable(logData->listOfFilters, name,
-				  (ClientData) logLevel) == TCL_ERROR) {
-		Tcl_SetResult(interp, "cannot append \"", NULL);
-		Tcl_AppendResult(interp, name, "\" to list", NULL);
+	    name = insertIntoFilterList(logData, logLevel);
+	    if (name == NULL) {
+		Tcl_SetResult(interp, "cannot append new log filter to list", NULL);
 		destroyLogLevel(logLevel, NULL);
-		WebFreeIfNotNull(name);
 		return TCL_ERROR;
 	    }
-	    logData->filterCnt++;
 	    Tcl_SetResult(interp, name, Tcl_Free);
 	    return TCL_OK;
 	    break;
 	}
     case NAMES:{
 
-	    HashTableIterator iterator;
-
 	    Tcl_ResetResult(interp);
 
 	    if (logData->listOfFilters != NULL) {
-
-		assignIteratorToHashTable(logData->listOfFilters, &iterator);
-
-		while (nextFromHashIterator(&iterator) != TCL_ERROR) {
-		    Tcl_AppendElement(interp, keyOfCurrent(&iterator));
+	      int i;
+	      LogLevel **logLevels = logData->listOfFilters;
+	      for (i = 0; i < logData->filterSize; i++) {
+		if (logLevels[i] != NULL) {
+		  Tcl_AppendElement(interp, createLogName(LOG_FILTER_PREFIX, i));
 		}
+	      }
 	    }
 	    return TCL_OK;
 	    break;
@@ -770,22 +838,25 @@
 	    Tcl_SetResult(interp, "", NULL);
 
 	    if (logData->listOfFilters != NULL) {
+	      int i;
+	      LogLevel ** logLevels = logData->listOfFilters;
+	      for (i = 0; i < logData->filterSize; i++) {
+		if (logLevels[i] != NULL) {
 
-		assignIteratorToHashTable(logData->listOfFilters, &iterator);
-
-		while (nextFromHashIterator(&iterator) != TCL_ERROR) {
 		    if (namesIsFirst == TCL_ERROR)
 			Tcl_AppendResult(interp, "\n", NULL);
 		    else
 			namesIsFirst = TCL_ERROR;
-		    logLevel = (LogLevel *) valueOfCurrent(&iterator);
-		    Tcl_AppendResult(interp, keyOfCurrent(&iterator), " ",
+		    logLevel = logLevels[i];
+		    Tcl_AppendResult(interp,
+				     createLogName(LOG_FILTER_PREFIX, i), " ",
 				     logLevel->facility, ".",
 				     getSeverityName(logLevel->minSeverity),
 				     "-",
 				     getSeverityName(logLevel->maxSeverity),
 				     NULL);
 		}
+	      }
 	    }
 	    return TCL_OK;
 	    break;
@@ -799,41 +870,44 @@
 	    /*      web::logfilter delete logLevel1 */
 
 	    switch (objc) {
-	    case 3:
-		logLevel =
-		    (LogLevel *) removeFromHashTable(logData->listOfFilters,
-						     Tcl_GetString(objv[2]));
-		if (logLevel == NULL) {
-		    Tcl_SetResult(interp, "no such log filter \"", NULL);
-		    Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
+	    case 3: {
+	      int inx = getIndexFromLogName(LOG_FILTER_PREFIX"%d", Tcl_GetString(objv[2]));
+	      LogLevel ** logLevels = logData->listOfFilters;
+	      if (inx < 0 
+		  || inx >= logData->filterSize
+		  || logLevels[inx] == NULL) {
+		Tcl_SetResult(interp, "no such log filter \"", NULL);
+		Tcl_AppendResult(interp, Tcl_GetString(objv[2]), "\"",
 				     NULL);
-		    return TCL_ERROR;
-		}
-		destroyLogLevel(logLevel, NULL);
-		return TCL_OK;
-		break;
+		return TCL_ERROR;
+	      }
+	      destroyLogLevel(logLevels[inx], interp);
+	      logLevels[inx] = NULL;
+	      return TCL_OK;
+	      break;
+	    }
 	    case 2:
-		/* ----------------------------------------------------------------------
+		/* -----------------------------------------------------
 		 * no argument --> resets the list
-		 * ------------------------------------------------------------------- */
+		 * ----------------------------------------------------- */
 		if (logData->listOfFilters != NULL) {
-		    if (resetHashTableWithContent(logData->listOfFilters,
-						  TCL_STRING_KEYS,
-						  destroyLogLevel,
-						  NULL) == TCL_OK) {
-			logData->filterCnt = 0;
-			return TCL_OK;
+		  int i;
+		  LogLevel ** logLevels = logData->listOfFilters;
+		  for (i = 0; i < logData->filterSize; i++) {
+		    if (logLevels[i] != NULL) {
+		      destroyLogLevel(logLevels[i], interp);
+		      logLevels[i] = NULL;
 		    }
+		  }
 		}
-		Tcl_SetResult(interp, "error resetting filter list", NULL);
-		return TCL_ERROR;
+		return TCL_OK;
 		break;
 	    default:
 		Tcl_WrongNumArgs(interp, 1, objv, "delete ?filtername?");
 		return TCL_ERROR;
 	    }
 	    break;
-	}
+        }
     default:
 	return TCL_OK;
     }

Modified: tcl/websh/trunk/src/generic/log.h
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/log.h?rev=328886&r1=328885&r2=328886&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/log.h (original)
+++ tcl/websh/trunk/src/generic/log.h Thu Oct 27 07:53:54 2005
@@ -66,10 +66,6 @@
 #define WEB_LOG_SUBCMD_LEVELS "levels"
 
 /* ----------------------------------------------------------------------------
- * Switches (like "string -binary")
- * ------------------------------------------------------------------------- */
-
-/* ----------------------------------------------------------------------------
  * Parameters (like "web::cmdurl -cmd aCommand", where there is an argument
  * ------------------------------------------------------------------------- */
 #define WEB_LOG_PARAM_FORMAT "-format"
@@ -86,6 +82,12 @@
 #define WEB_LOG_USAGE_LOGDEST_ADD \
   "add ?options? level type ?type-specific-arguments ...?"
 
+/* --------------------------------------------------------------------------
+ * other
+ * ------------------------------------------------------------------------*/
+#define LOG_LIST_INITIAL_SIZE 10
+#define LOG_FILTER_PREFIX "logfilter"
+#define LOG_DEST_PREFIX "logdest"
 
 /* ----------------------------------------------------------------------------
  * list of possible categories
@@ -157,16 +159,14 @@
  * ------------------------------------------------------------------------- */
 typedef struct LogData
 {
-    Tcl_HashTable *listOfFilters;
-    int filterCnt; /* actual count of filters */
-    int filterInx; /* highest index in use */
-    Tcl_HashTable *listOfDests;
-    int destCnt; /* actual count of destinations */
-    int destInx; /* highest index in use */ 
-    Tcl_HashTable *listOfPlugIns;
-    int logSubst;		/* 1: subst log message, 0: don't (default 1) */
-    /* needed so that global settings can be accessed */
-    RequestData * requestData;
+  LogLevel **listOfFilters;
+  int filterSize; /* size of filter list */
+  LogDest **listOfDests;
+  int destSize; /* site of destination list */
+  Tcl_HashTable *listOfPlugIns;
+  int logSubst;	/* 1: subst log message, 0: don't (default 0) */
+  /* needed so that global settings can be accessed */
+  RequestData * requestData;
 }
 LogData;
 
@@ -198,7 +198,7 @@
 Tcl_Obj *formatMessage(LogLevel * level, char *fmt, long maxCharInMsg,
 		       Tcl_Obj * msg);
 int doesPass(LogLevel * level, LogLevel * filter);
-int doesPassFilters(LogLevel * logLevel, Tcl_HashTable * hash);
+int doesPassFilters(LogLevel * logLevel, LogLevel ** logLevels, int size);
 int logImpl(Tcl_Interp * interp, LogData * logData,
 	    char *levelStr, Tcl_Obj * msg);
 int webLog(Tcl_Interp * interp, char *levelStr, char *msg);
@@ -206,6 +206,8 @@
 void sendMsgToDestList(Tcl_Interp * interp,
 		       LogData * logData, LogLevel * level, Tcl_Obj * msg);
 
+char * insertIntoDestList(LogData *logData, LogDest *logDest);
+char * insertIntoFilterList(LogData *logData, LogLevel *logLevel);
 
 /* ----------------------------------------------------------------------------
  * Logging 

Modified: tcl/websh/trunk/src/generic/logutl.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/logutl.c?rev=328886&r1=328885&r2=328886&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/logutl.c (original)
+++ tcl/websh/trunk/src/generic/logutl.c Thu Oct 27 07:53:54 2005
@@ -97,7 +97,7 @@
     /* ------------------------------------------------------------------
      * does level pass the filters --> send to dests
      * --------------------------------------------------------------- */
-    if (doesPassFilters(logLevel, logData->listOfFilters) == TCL_OK)
+    if (doesPassFilters(logLevel, logData->listOfFilters, logData->filterSize) == TCL_OK)
 	sendMsgToDestList(interp, logData, logLevel, msg);
 
     destroyLogLevel(logLevel, NULL);
@@ -119,18 +119,17 @@
     Tcl_Obj *subst = NULL;
     int res = 0;
     int err = 0;
+    int i = 0;
 
-    Tcl_HashTable *hash = logData->listOfDests;
+    LogDest **logDests = logData->listOfDests;
 
-    if ((interp == NULL) || (hash == NULL) ||
+    if ((interp == NULL) || (logDests == NULL) ||
 	(logLevel == NULL) || (msg == NULL))
 	return;
 
-    assignIteratorToHashTable(hash, &iterator);
+    for (i = 0; i < logData->destSize; i++) {
 
-    while (nextFromHashIterator(&iterator) != TCL_ERROR) {
-
-	logDest = (LogDest *) valueOfCurrent(&iterator);
+	logDest = logDests[i];
 	if (logDest != NULL) {
 
 	    if ((logDest->plugIn != NULL) &&
@@ -143,7 +142,6 @@
 		    /* ------------------------------------------------------------------
 		     * do we need to eval the message ?
 		     * --------------------------------------------------------------- */
-
 		    if (logData->logSubst) {
 
 			/* message already evaluated ? */
@@ -380,20 +378,15 @@
 /* ----------------------------------------------------------------------------
  * doesPassFilters -- search through all filters and see if level passes one
  * ------------------------------------------------------------------------- */
-int doesPassFilters(LogLevel * logLevel, Tcl_HashTable * hash)
+int doesPassFilters(LogLevel * logLevel, LogLevel ** logLevels, int size)
 {
+    int i;
 
-    HashTableIterator iterator;
-    LogLevel *filter;
-
-    if ((logLevel == NULL) || (hash == NULL))
+    if ((logLevel == NULL) || (logLevels == NULL))
 	return TCL_ERROR;
 
-    assignIteratorToHashTable(hash, &iterator);
-    while (nextFromHashIterator(&iterator) != TCL_ERROR) {
-
-	filter = (LogLevel *) valueOfCurrent(&iterator);
-	if (doesPass(logLevel, filter) == TCL_OK)
+    for (i = 0; i < size; i++) {
+	if (doesPass(logLevel, logLevels[i]) == TCL_OK)
 	    return TCL_OK;
     }
 

Modified: tcl/websh/trunk/src/tests/log.test
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/tests/log.test?rev=328886&r1=328885&r2=328886&view=diff
==============================================================================
--- tcl/websh/trunk/src/tests/log.test (original)
+++ tcl/websh/trunk/src/tests/log.test Thu Oct 27 07:53:54 2005
@@ -66,7 +66,7 @@
     set res [web::logfilter names]
 } {}
 
-test log-1.5 {websh3_weblog: different warn levels} {
+test log-1.5 {websh3_weblog: different warn levels and more than initial size list} {
     web::logfilter delete
     web::logfilter add testAlert.alert
     web::logfilter add testError.error
@@ -88,8 +88,18 @@
     web::logfilter add testWarning.warning
     web::logfilter add testInfo.info
     web::logfilter add testDebug.debug
+    web::logfilter add testDebug.debug
+    web::logfilter add testDebug.debug
     set res [web::logfilter levels]
-} {logfilter8 testInfo.info-info
+} {logfilter0 testAlert.alert-alert
+logfilter1 testError.error-error
+logfilter2 testWarning.warning-warning
+logfilter3 testInfo.info-info
+logfilter4 testDebug.debug-debug
+logfilter5 testAlert.alert-alert
+logfilter6 testError.error-error
+logfilter7 testWarning.warning-warning
+logfilter8 testInfo.info-info
 logfilter9 testDebug.debug-debug
 logfilter10 testAlert.alert-alert
 logfilter11 testError.error-error
@@ -99,16 +109,10 @@
 logfilter15 testAlert.alert-alert
 logfilter16 testError.error-error
 logfilter17 testWarning.warning-warning
-logfilter0 testAlert.alert-alert
 logfilter18 testInfo.info-info
-logfilter1 testError.error-error
 logfilter19 testDebug.debug-debug
-logfilter2 testWarning.warning-warning
-logfilter3 testInfo.info-info
-logfilter4 testDebug.debug-debug
-logfilter5 testAlert.alert-alert
-logfilter6 testError.error-error
-logfilter7 testWarning.warning-warning}
+logfilter20 testDebug.debug-debug
+logfilter21 testDebug.debug-debug}
 
 test log-1.6 {websh3_weblog: special syntax for message levels} {
     web::logfilter delete
@@ -118,11 +122,11 @@
     web::logfilter add test*.info
     web::logfilter add websh2.alert-error
     set res [web::logfilter levels]
-} {logfilter4 websh2.alert-error
-logfilter0 *.alert-debug
+} {logfilter0 *.alert-debug
 logfilter1 *.alert-debug
 logfilter2 *.alert-debug
-logfilter3 test*.info-info}
+logfilter3 test*.info-info
+logfilter4 websh2.alert-error}
 
 test log-1.7 {websh3_weblog: see if we get the id} {
     web::logfilter delete
@@ -397,14 +401,30 @@
     web::log debug test
     append res \n [web::logdest levels]
 
-} {logdest2 *.alert-debug
-logdest3 *.alert-debug
-logdest0 *.alert-debug
+} {logdest0 *.alert-debug
 logdest1 *.alert-debug
 logdest2 *.alert-debug
 logdest3 *.alert-debug
 logdest0 *.alert-debug
-logdest1 *.alert-debug}
+logdest1 *.alert-debug
+logdest2 *.alert-debug
+logdest3 *.alert-debug}
+
+test log-4.1 {fill up log filters} {
+    set res {}
+    web::logfilter delete
+    web::logfilter add *.-debug
+    web::logfilter add *.-debug
+    web::logfilter add *.-debug
+    lappend res [web::logfilter names]
+    web::logfilter delete logfilter1
+    lappend res [web::logfilter names]
+    web::logfilter add *.-error
+    lappend res [web::logfilter names]
+    lappend res [web::logfilter levels]
+} {{logfilter0 logfilter1 logfilter2} {logfilter0 logfilter2} {logfilter0 logfilter1 logfilter2} {logfilter0 *.alert-debug
+logfilter1 *.alert-error
+logfilter2 *.alert-debug}}
 
 # cleanup
 ::tcltest::cleanupTests



---------------------------------------------------------------------
To unsubscribe, e-mail: websh-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: websh-cvs-help@tcl.apache.org