Merged revisions 277568 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r277568 | tilghman | 2010-07-16 16:54:29 -0500 (Fri, 16 Jul 2010) | 8 lines
  
  Since we split values at the semicolon, we should store values with a semicolon as an encoded value.
  
  (closes issue #17369)
   Reported by: gkservice
   Patches: 
         20100625__issue17369.diff.txt uploaded by tilghman (license 14)
   Tested by: tilghman
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@277773 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tilghman Lesher
2010-07-17 17:39:28 +00:00
parent e5c4c90064
commit a7c92fad28
5 changed files with 203 additions and 50 deletions

View File

@@ -1,7 +1,7 @@
/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 1999 - 2005, Digium, Inc.
* Copyright (C) 1999 - 2010, Digium, Inc.
*
* Mark Spencer <markster@digium.com>
*
@@ -2297,6 +2297,35 @@ int ast_destroy_realtime(const char *family, const char *keyfield, const char *l
return res;
}
char *ast_realtime_decode_chunk(char *chunk)
{
char *orig = chunk;
for (; *chunk; chunk++) {
if (*chunk == '^' && strchr("0123456789ABCDEFabcdef", chunk[1]) && strchr("0123456789ABCDEFabcdef", chunk[2])) {
sscanf(chunk + 1, "%02hhd", chunk);
memmove(chunk + 1, chunk + 3, strlen(chunk + 3) + 1);
}
}
return orig;
}
char *ast_realtime_encode_chunk(struct ast_str **dest, ssize_t maxlen, const char *chunk)
{
if (!strchr(chunk, ';') && !strchr(chunk, '^')) {
ast_str_set(dest, maxlen, "%s", chunk);
} else {
ast_str_reset(*dest);
for (; *chunk; chunk++) {
if (strchr(";^", *chunk)) {
ast_str_append(dest, maxlen, "^%02hhX", *chunk);
} else {
ast_str_append(dest, maxlen, "%c", *chunk);
}
}
}
return ast_str_buffer(*dest);
}
/*! \brief Helper function to parse arguments
* See documentation in config.h
*/