From c93be15b7ebcbab0a623d2049c48355052e191c5 Mon Sep 17 00:00:00 2001
From: Luigi Rizzo <rizzo@icir.org>
Date: Wed, 18 Oct 2006 10:14:58 +0000
Subject: [PATCH] simplify ast_strings_to_mask

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@45505 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 main/manager.c | 46 ++++++++++++++++++----------------------------
 1 file changed, 18 insertions(+), 28 deletions(-)

diff --git a/main/manager.c b/main/manager.c
index f35d211e13..33549d38b4 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -775,10 +775,10 @@ void astman_send_ack(struct mansession *s, struct message *m, char *msg)
 
 /*! Tells you if smallstr exists inside bigstr
    which is delim by delim and uses no buf or stringsep
-   ast_instring("this|that|more","this",',') == 1;
+   ast_instring("this|that|more","this",'|') == 1;
 
    feel free to move this to app.c -anthm */
-static int ast_instring(const char *bigstr, const char *smallstr, char delim) 
+static int ast_instring(const char *bigstr, const char *smallstr, const char delim) 
 {
 	const char *val = bigstr, *next;
 
@@ -811,36 +811,26 @@ static int get_perm(const char *instr)
 	return ret;
 }
 
-static int ast_is_number(char *string) 
+/*
+ * A number returns itself, false returns 0, true returns all flags,
+ * other strings return the flags that are set.
+ */
+static int ast_strings_to_mask(char *string) 
 {
-	int ret = 1, x = 0;
+	int x, ret = 0;
+	char *p;
 
-	if (!string)
-		return 0;
+	if (ast_strlen_zero(string))
+		return -1;
 
-	for (x = 0; x < strlen(string); x++) {
-		if (!(string[x] >= 48 && string[x] <= 57)) {
-			ret = 0;
+	for (p = string; *p; p++)
+		if (*p < '0' || *p > '9')
 			break;
-		}
-	}
-	
-	return ret ? atoi(string) : 0;
-}
-
-static int ast_strings_to_mask(char *string) 
-{
-	int x, ret = -1;
-	
-	x = ast_is_number(string);
-
-	if (x)
-		ret = x;
-	else if (ast_strlen_zero(string))
-		ret = -1;
-	else if (ast_false(string))
-		ret = 0;
-	else if (ast_true(string)) {
+	if (!p)
+		return atoi(string);
+	if (ast_false(string))
+		return 0;
+	if (ast_true(string)) {	/* all permissions */
 		ret = 0;
 		for (x=0; x<sizeof(perms) / sizeof(perms[0]); x++)
 			ret |= perms[x].num;		
-- 
GitLab