mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-23 13:09:00 +00:00
Fix ODBC to clear title each time (bug #3379)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4851 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -134,6 +134,24 @@ extern int test_for_thread_safety(void);
|
||||
extern const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia);
|
||||
extern int ast_utils_init(void);
|
||||
|
||||
/* The realloca lets us ast_restrdupa(), but you can't mix any other ast_strdup calls! */
|
||||
|
||||
struct ast_realloca {
|
||||
char *ptr;
|
||||
int alloclen;
|
||||
};
|
||||
|
||||
#define ast_restrdupa(ra, s) \
|
||||
({ \
|
||||
if ((ra)->ptr && strlen(s) + 1 < (ra)->alloclen) { \
|
||||
strcpy((ra)->ptr, s); \
|
||||
} else { \
|
||||
(ra)->ptr = alloca(strlen(s) + 1 - (ra)->alloclen); \
|
||||
if ((ra)->ptr) (ra)->alloclen = strlen(s) + 1; \
|
||||
} \
|
||||
(ra)->ptr; \
|
||||
})
|
||||
|
||||
#ifdef inet_ntoa
|
||||
#undef inet_ntoa
|
||||
#endif
|
||||
|
@@ -186,19 +186,21 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
||||
struct ast_variable *var=NULL, *prev=NULL;
|
||||
struct ast_config *cfg=NULL;
|
||||
struct ast_category *cat=NULL;
|
||||
struct ast_realloca ra;
|
||||
SQLLEN rowcount=0;
|
||||
SQLULEN colsize;
|
||||
SQLSMALLINT colcount=0;
|
||||
SQLSMALLINT datatype;
|
||||
SQLSMALLINT decimaldigits;
|
||||
SQLSMALLINT nullable;
|
||||
va_list aq;
|
||||
|
||||
va_list aq;
|
||||
va_copy(aq, ap);
|
||||
|
||||
|
||||
if (!table)
|
||||
return NULL;
|
||||
memset(&ra, 0, sizeof(ra));
|
||||
|
||||
obj = fetch_odbc_obj(database);
|
||||
if (!obj)
|
||||
@@ -269,6 +271,7 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
||||
while (rowcount--) {
|
||||
var = NULL;
|
||||
prev = NULL;
|
||||
title = NULL;
|
||||
res = SQLFetch(stmt);
|
||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||
ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql);
|
||||
@@ -297,7 +300,7 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
||||
chunk = strsep(&stringp, ";");
|
||||
if (chunk && !ast_strlen_zero(ast_strip(chunk))) {
|
||||
if (initfield && !strcmp(initfield, coltitle) && !title)
|
||||
title = ast_strdupa(chunk);
|
||||
title = ast_restrdupa(&ra, chunk);
|
||||
if (prev) {
|
||||
prev->next = ast_new_variable(coltitle, chunk);
|
||||
if (prev->next)
|
||||
|
Reference in New Issue
Block a user