From 0c7e8f99a4ccbc79ebc83d8a1649cc413aa010d1 Mon Sep 17 00:00:00 2001
From: Luigi Rizzo <rizzo@icir.org>
Date: Tue, 17 Oct 2006 17:19:31 +0000
Subject: [PATCH] document xml_copy_escape() and add an extra function, namely
 replace non-alphanum chars with underscore. This is useful when building
 field names in xml formatting.

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

diff --git a/main/manager.c b/main/manager.c
index 532ceb87ef..45cdd6e6b2 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -240,9 +240,19 @@ static char *complete_show_mancmd(const char *line, const char *word, int pos, i
 	return ret;
 }
 
-static void xml_copy_escape(char **dst, size_t *maxlen, const char *src, int lower)
+/*
+ * convert to xml with various conversion:
+ * mode & 1	-> lowercase;
+ * mode & 2	-> replace non-alphanumeric chars with underscore
+ */
+static void xml_copy_escape(char **dst, size_t *maxlen, const char *src, int mode)
 {
-	while (*src && (*maxlen > 6)) {
+	for ( ; *src && *maxlen > 6; src++) {
+		if ( (mode & 2) && !isalnum(*src)) {
+			*(*dst)++ = '_';
+			(*maxlen)--;
+			continue;
+		}
 		switch (*src) {
 		case '<':
 			strcpy(*dst, "&lt;");
@@ -269,11 +279,11 @@ static void xml_copy_escape(char **dst, size_t *maxlen, const char *src, int low
 			(*dst) += 5;
 			*maxlen -= 5;
 			break;		
+
 		default:
-			*(*dst)++ = lower ? tolower(*src) : *src;
+			*(*dst)++ = mode ? tolower(*src) : *src;
 			(*maxlen)--;
 		}
-		src++;
 	}
 }
 
-- 
GitLab