[asterisk-commits] dlee: branch 11 r374428 - in /branches/11: ./ main/db.c res/res_agi.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Oct 4 10:42:11 CDT 2012


Author: dlee
Date: Thu Oct  4 10:42:07 2012
New Revision: 374428

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=374428
Log:
Fix DBDelTree error codes for AMI, CLI and AGI

The AMI DBDelTree command will return Success/Key tree deleted successfully even
if the given key does not exist. The CLI command 'database deltree' had a
similar problem, but was saved because it actually responded with '0 database
entries removed'. AGI had a slightly different error, where it would return
success if the database was unavailable.

This came from confusion about the ast_db_deltree retval, which is -1 in the
event of a database error, or number of entries deleted (including 0 for
deleting nothing).

* Changed some poorly named res variables to num_deleted
* Specified specific errors when calling ast_db_deltree (database unavailable
  vs. entry not found vs. success)
* Fixed similar bug in AGI database deltree, where 'Database unavailable'
  results in successful result

(closes issue AST-967)
Reported by: John Bigelow
Review: https://reviewboard.asterisk.org/r/2138/
........

Merged revisions 374426 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 374427 from http://svn.asterisk.org/svn/asterisk/branches/10

Modified:
    branches/11/   (props changed)
    branches/11/main/db.c
    branches/11/res/res_agi.c

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

Modified: branches/11/main/db.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/main/db.c?view=diff&rev=374428&r1=374427&r2=374428
==============================================================================
--- branches/11/main/db.c (original)
+++ branches/11/main/db.c Thu Oct  4 10:42:07 2012
@@ -589,7 +589,7 @@
 
 static char *handle_cli_database_deltree(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
-	int res;
+	int num_deleted;
 
 	switch (cmd) {
 	case CLI_INIT:
@@ -608,14 +608,16 @@
 	if ((a->argc < 3) || (a->argc > 4))
 		return CLI_SHOWUSAGE;
 	if (a->argc == 4) {
-		res = ast_db_deltree(a->argv[2], a->argv[3]);
-	} else {
-		res = ast_db_deltree(a->argv[2], NULL);
-	}
-	if (res < 0) {
+		num_deleted = ast_db_deltree(a->argv[2], a->argv[3]);
+	} else {
+		num_deleted = ast_db_deltree(a->argv[2], NULL);
+	}
+	if (num_deleted < 0) {
+		ast_cli(a->fd, "Database unavailable.\n");
+	} else if (num_deleted == 0) {
 		ast_cli(a->fd, "Database entries do not exist.\n");
 	} else {
-		ast_cli(a->fd, "%d database entries removed.\n",res);
+		ast_cli(a->fd, "%d database entries removed.\n",num_deleted);
 	}
 	return CLI_SUCCESS;
 }
@@ -873,22 +875,26 @@
 {
 	const char *family = astman_get_header(m, "Family");
 	const char *key = astman_get_header(m, "Key");
-	int res;
+	int num_deleted;
 
 	if (ast_strlen_zero(family)) {
 		astman_send_error(s, m, "No family specified.");
 		return 0;
 	}
 
-	if (!ast_strlen_zero(key))
-		res = ast_db_deltree(family, key);
-	else
-		res = ast_db_deltree(family, NULL);
-
-	if (res <= 0)
+	if (!ast_strlen_zero(key)) {
+		num_deleted = ast_db_deltree(family, key);
+	} else {
+		num_deleted = ast_db_deltree(family, NULL);
+	}
+
+	if (num_deleted < 0) {
+		astman_send_error(s, m, "Database unavailable");
+	} else if (num_deleted == 0) {
 		astman_send_error(s, m, "Database entry not found");
-	else
+	} else {
 		astman_send_ack(s, m, "Key tree deleted successfully");
+	}
 
 	return 0;
 }

Modified: branches/11/res/res_agi.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/res/res_agi.c?view=diff&rev=374428&r1=374427&r2=374428
==============================================================================
--- branches/11/res/res_agi.c (original)
+++ branches/11/res/res_agi.c Thu Oct  4 10:42:07 2012
@@ -2716,16 +2716,18 @@
 
 static int handle_dbdeltree(struct ast_channel *chan, AGI *agi, int argc, const char * const argv[])
 {
-	int res;
-
-	if ((argc < 3) || (argc > 4))
-		return RESULT_SHOWUSAGE;
-	if (argc == 4)
-		res = ast_db_deltree(argv[2], argv[3]);
-	else
-		res = ast_db_deltree(argv[2], NULL);
-
-	ast_agi_send(agi->fd, chan, "200 result=%c\n", res ? '0' : '1');
+	int num_deleted;
+
+	if ((argc < 3) || (argc > 4)) {
+		return RESULT_SHOWUSAGE;
+	}
+	if (argc == 4) {
+		num_deleted = ast_db_deltree(argv[2], argv[3]);
+	} else {
+		num_deleted = ast_db_deltree(argv[2], NULL);
+	}
+
+	ast_agi_send(agi->fd, chan, "200 result=%c\n", num_deleted > 0 ? '0' : '1');
 	return RESULT_SUCCESS;
 }
 




More information about the asterisk-commits mailing list