mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-25 06:00:36 +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 const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia);
|
||||||
extern int ast_utils_init(void);
|
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
|
#ifdef inet_ntoa
|
||||||
#undef inet_ntoa
|
#undef inet_ntoa
|
||||||
#endif
|
#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_variable *var=NULL, *prev=NULL;
|
||||||
struct ast_config *cfg=NULL;
|
struct ast_config *cfg=NULL;
|
||||||
struct ast_category *cat=NULL;
|
struct ast_category *cat=NULL;
|
||||||
|
struct ast_realloca ra;
|
||||||
SQLLEN rowcount=0;
|
SQLLEN rowcount=0;
|
||||||
SQLULEN colsize;
|
SQLULEN colsize;
|
||||||
SQLSMALLINT colcount=0;
|
SQLSMALLINT colcount=0;
|
||||||
SQLSMALLINT datatype;
|
SQLSMALLINT datatype;
|
||||||
SQLSMALLINT decimaldigits;
|
SQLSMALLINT decimaldigits;
|
||||||
SQLSMALLINT nullable;
|
SQLSMALLINT nullable;
|
||||||
va_list aq;
|
|
||||||
|
|
||||||
|
va_list aq;
|
||||||
va_copy(aq, ap);
|
va_copy(aq, ap);
|
||||||
|
|
||||||
|
|
||||||
if (!table)
|
if (!table)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
memset(&ra, 0, sizeof(ra));
|
||||||
|
|
||||||
obj = fetch_odbc_obj(database);
|
obj = fetch_odbc_obj(database);
|
||||||
if (!obj)
|
if (!obj)
|
||||||
@@ -269,6 +271,7 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char *
|
|||||||
while (rowcount--) {
|
while (rowcount--) {
|
||||||
var = NULL;
|
var = NULL;
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
|
title = NULL;
|
||||||
res = SQLFetch(stmt);
|
res = SQLFetch(stmt);
|
||||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||||
ast_log(LOG_WARNING, "SQL Fetch error!\n[%s]\n\n", sql);
|
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, ";");
|
chunk = strsep(&stringp, ";");
|
||||||
if (chunk && !ast_strlen_zero(ast_strip(chunk))) {
|
if (chunk && !ast_strlen_zero(ast_strip(chunk))) {
|
||||||
if (initfield && !strcmp(initfield, coltitle) && !title)
|
if (initfield && !strcmp(initfield, coltitle) && !title)
|
||||||
title = ast_strdupa(chunk);
|
title = ast_restrdupa(&ra, chunk);
|
||||||
if (prev) {
|
if (prev) {
|
||||||
prev->next = ast_new_variable(coltitle, chunk);
|
prev->next = ast_new_variable(coltitle, chunk);
|
||||||
if (prev->next)
|
if (prev->next)
|
||||||
|
|||||||
Reference in New Issue
Block a user