[svn-commits] rmudgett: branch 10 r332940 - in /branches/10: ./ main/config.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Aug 22 16:23:43 CDT 2011


Author: rmudgett
Date: Mon Aug 22 16:23:40 2011
New Revision: 332940

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=332940
Log:
Merged revisions 332939 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r332939 | rmudgett | 2011-08-22 16:22:24 -0500 (Mon, 22 Aug 2011) | 7 lines
  
  Minor code optimizations.
  
  * Simplify ast_category_browse() logic for easier understanding.
  
  * Remove dead code in ast_variable_delete() and simplify some of its
  logic.
........

Modified:
    branches/10/   (props changed)
    branches/10/main/config.c

Propchange: branches/10/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Modified: branches/10/main/config.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/main/config.c?view=diff&rev=332940&r1=332939&r2=332940
==============================================================================
--- branches/10/main/config.c (original)
+++ branches/10/main/config.c Mon Aug 22 16:23:40 2011
@@ -619,22 +619,36 @@
 
 char *ast_category_browse(struct ast_config *config, const char *prev)
 {	
-	struct ast_category *cat = NULL;
-
-	if (prev && config->last_browse && (config->last_browse->name == prev))
+	struct ast_category *cat;
+
+	if (!prev) {
+		/* First time browse. */
+		cat = config->root;
+	} else if (config->last_browse && (config->last_browse->name == prev)) {
+		/* Simple last browse found. */
 		cat = config->last_browse->next;
-	else if (!prev && config->root)
-		cat = config->root;
-	else if (prev) {
+	} else {
+		/*
+		 * Config changed since last browse.
+		 *
+		 * First try cheap last browse search. (Rebrowsing a different
+		 * previous category?)
+		 */
 		for (cat = config->root; cat; cat = cat->next) {
 			if (cat->name == prev) {
+				/* Found it. */
 				cat = cat->next;
 				break;
 			}
 		}
 		if (!cat) {
+			/*
+			 * Have to do it the hard way. (Last category was deleted and
+			 * re-added?)
+			 */
 			for (cat = config->root; cat; cat = cat->next) {
 				if (!strcasecmp(cat->name, prev)) {
+					/* Found it. */
 					cat = cat->next;
 					break;
 				}
@@ -690,11 +704,27 @@
 {
 	struct ast_variable *cur, *prev=NULL, *curn;
 	int res = -1;
-	int lineno = 0;
-
+	int num_item = 0;
+	int req_item;
+
+	req_item = -1;
+	if (!ast_strlen_zero(line)) {
+		/* Requesting to delete by item number. */
+		if (sscanf(line, "%30d", &req_item) != 1
+			|| req_item < 0) {
+			/* Invalid item number to delete. */
+			return -1;
+		}
+	}
+
+	prev = NULL;
 	cur = category->root;
 	while (cur) {
-		if (cur->name == variable) {
+		curn = cur->next;
+		/* Delete by item number or by variable name with optional value. */
+		if ((0 <= req_item && num_item == req_item)
+			|| (req_item < 0 && !strcasecmp(cur->name, variable)
+				&& (ast_strlen_zero(match) || !strcasecmp(cur->value, match)))) {
 			if (prev) {
 				prev->next = cur->next;
 				if (cur == category->last)
@@ -704,36 +734,13 @@
 				if (cur == category->last)
 					category->last = NULL;
 			}
-			cur->next = NULL;
-			ast_variables_destroy(cur);
-			return 0;
-		}
-		prev = cur;
-		cur = cur->next;
-	}
-
-	prev = NULL;
-	cur = category->root;
-	while (cur) {
-		curn = cur->next;
-		if ((!ast_strlen_zero(line) && lineno == atoi(line)) || (ast_strlen_zero(line) && !strcasecmp(cur->name, variable) && (ast_strlen_zero(match) || !strcasecmp(cur->value, match)))) {
-			if (prev) {
-				prev->next = cur->next;
-				if (cur == category->last)
-					category->last = prev;
-			} else {
-				category->root = cur->next;
-				if (cur == category->last)
-					category->last = NULL;
-			}
-			cur->next = NULL;
-			ast_variables_destroy(cur);
+			ast_variable_destroy(cur);
 			res = 0;
 		} else
 			prev = cur;
 
 		cur = curn;
-		lineno++;
+		++num_item;
 	}
 	return res;
 }
@@ -2198,7 +2205,7 @@
 }
 
 /*! \brief Check if there's any realtime engines loaded */
-int ast_realtime_enabled()
+int ast_realtime_enabled(void)
 {
 	return config_maps ? 1 : 0;
 }
@@ -2680,7 +2687,7 @@
 	AST_CLI_DEFINE(handle_cli_config_list, "Show all files that have loaded a configuration file"),
 };
 
-int register_config_cli() 
+int register_config_cli(void)
 {
 	ast_cli_register_multiple(cli_config, ARRAY_LEN(cli_config));
 	return 0;




More information about the svn-commits mailing list