diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-01-19 21:42:46 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-01-19 21:42:46 +0000 |
commit | a343f7a275dd6cf3762cb42bdb7108fd7b0cfa07 (patch) | |
tree | 3d2b6ec3c7b9411ab8529c172387a75dfdd2d053 | |
parent | 1bd2376769465415348ca59d9995dd2250f852a7 (diff) |
ast_str_SQLGetData is *not* part of the ast_str API, it's part of the ast_odbc API and just happens to use an ast_str as the buffer; move all of it to res_odbc.c and res_odbc.h, renaming appropriately
along the way fix some minor coding style issues in strings.h and add some attribute_pure annotations to functions in the ast_str API
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@169438 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | funcs/func_odbc.c | 5 | ||||
-rw-r--r-- | include/asterisk/res_odbc.h | 11 | ||||
-rw-r--r-- | include/asterisk/strings.h | 64 | ||||
-rw-r--r-- | res/res_odbc.c | 17 |
4 files changed, 46 insertions, 51 deletions
diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c index e1006a2f8..e23dff5f2 100644 --- a/funcs/func_odbc.c +++ b/funcs/func_odbc.c @@ -30,7 +30,6 @@ <depend>res_odbc</depend> ***/ -#define USE_ODBC #include "asterisk.h" ASTERISK_FILE_VERSION(__FILE__, "$Revision$") @@ -543,7 +542,7 @@ static int acf_odbc_read(struct ast_channel *chan, const char *cmd, char *s, cha } buflen = strlen(buf); - res = ast_str_SQLGetData(&coldata, -1, stmt, x + 1, SQL_CHAR, &indicator); + res = ast_odbc_ast_str_SQLGetData(&coldata, -1, stmt, x + 1, SQL_CHAR, &indicator); if (indicator == SQL_NULL_DATA) { ast_debug(3, "Got NULL data\n"); ast_str_reset(coldata); @@ -1093,7 +1092,7 @@ static char *cli_odbc_read(struct ast_cli_entry *e, int cmd, struct ast_cli_args snprintf(colname, sizeof(colname), "field%d", x); } - res = ast_str_SQLGetData(&coldata, maxcol, stmt, x + 1, SQL_CHAR, &indicator); + res = ast_odbc_ast_str_SQLGetData(&coldata, maxcol, stmt, x + 1, SQL_CHAR, &indicator); if (indicator == SQL_NULL_DATA) { ast_str_set(&coldata, 0, "(nil)"); res = SQL_SUCCESS; diff --git a/include/asterisk/res_odbc.h b/include/asterisk/res_odbc.h index ad22045db..005cf29cb 100644 --- a/include/asterisk/res_odbc.h +++ b/include/asterisk/res_odbc.h @@ -31,6 +31,7 @@ #include <sqlext.h> #include <sqltypes.h> #include "asterisk/linkedlists.h" +#include "asterisk/strings.h" typedef enum { ODBC_SUCCESS=0, ODBC_FAIL=-1} odbc_status; @@ -183,4 +184,14 @@ int ast_odbc_clear_cache(const char *database, const char *tablename); */ #define ast_odbc_release_table(ptr) if (ptr) { AST_RWLIST_UNLOCK(&(ptr)->columns); } +/*!\brief Wrapper for SQLGetData to use with dynamic strings + * \param buf Address of the pointer to the ast_str structure. + * \param maxlen The maximum size of the resulting string, or 0 for no limit. + * \param StatementHandle The statement handle from which to retrieve data. + * \param ColumnNumber Column number (1-based offset) for which to retrieve data. + * \param TargetType The SQL constant indicating what kind of data is to be retrieved (usually SQL_CHAR) + * \param StrLen_or_Ind A pointer to a length indicator, specifying the total length of data. + */ +SQLRETURN ast_odbc_ast_str_SQLGetData(struct ast_str **buf, int pmaxlen, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLLEN *StrLen_or_Ind); + #endif /* _ASTERISK_RES_ODBC_H */ diff --git a/include/asterisk/strings.h b/include/asterisk/strings.h index 53302874e..65664d930 100644 --- a/include/asterisk/strings.h +++ b/include/asterisk/strings.h @@ -60,7 +60,7 @@ static force_inline int _ast_strlen_zero(const char *s, const char *file, const } #else -static force_inline int ast_strlen_zero(const char *s) +static force_inline int attribute_pure ast_strlen_zero(const char *s) { return (!s || (*s == '\0')); } @@ -83,11 +83,11 @@ static force_inline int ast_strlen_zero(const char *s) \return a pointer to the first non-whitespace character */ AST_INLINE_API( -char *ast_skip_blanks(const char *str), +char * attribute_pure ast_skip_blanks(const char *str), { while (*str && ((unsigned char) *str) < 33) str++; - return (char *)str; + return (char *) str; } ) @@ -122,11 +122,11 @@ char *ast_trim_blanks(char *str), \return a pointer to the first whitespace character */ AST_INLINE_API( -char *ast_skip_nonblanks(char *str), +char * attribute_pure ast_skip_nonblanks(const char *str), { while (*str && ((unsigned char) *str) > 32) str++; - return str; + return (char *) str; } ) @@ -142,9 +142,9 @@ char *ast_skip_nonblanks(char *str), AST_INLINE_API( char *ast_strip(char *s), { - s = ast_skip_blanks(s); - if (s) + if ((s = ast_skip_blanks(s))) { ast_trim_blanks(s); + } return s; } ) @@ -257,7 +257,7 @@ int ast_build_string_va(char **buffer, size_t *space, const char *fmt, va_list a * \retval -1 if "true". * \retval 0 otherwise. */ -int ast_true(const char *val); +int attribute_pure ast_true(const char *val); /*! * \brief Make sure something is false. @@ -269,7 +269,7 @@ int ast_true(const char *val); * \retval -1 if "true". * \retval 0 otherwise. */ -int ast_false(const char *val); +int attribute_pure ast_false(const char *val); /* * \brief Join an array of strings into a single string. @@ -397,8 +397,9 @@ void ast_str_reset(struct ast_str *buf), { if (buf) { buf->__AST_STR_USED = 0; - if (buf->__AST_STR_LEN) + if (buf->__AST_STR_LEN) { buf->__AST_STR_STR[0] = '\0'; + } } } ) @@ -432,7 +433,7 @@ void ast_str_trim_blanks(struct ast_str *buf), * \param A pointer to the ast_str string. */ AST_INLINE_API( -size_t ast_str_strlen(struct ast_str *buf), +size_t attribute_pure ast_str_strlen(struct ast_str *buf), { return buf->__AST_STR_USED; } @@ -442,7 +443,7 @@ size_t ast_str_strlen(struct ast_str *buf), * \param A pointer to the ast_str string. */ AST_INLINE_API( -size_t ast_str_size(struct ast_str *buf), +size_t attribute_pure ast_str_size(struct ast_str *buf), { return buf->__AST_STR_LEN; } @@ -452,7 +453,7 @@ size_t ast_str_size(struct ast_str *buf), * \param A pointer to the ast_str string. */ AST_INLINE_API( -attribute_pure char *ast_str_buffer(struct ast_str *buf), +char * attribute_pure ast_str_buffer(struct ast_str *buf), { return buf->__AST_STR_STR; } @@ -752,39 +753,6 @@ AST_INLINE_API(char *ast_str_append_escapecommas(struct ast_str **buf, size_t ma } ) -/*!\brief Wrapper for SQLGetData to use with dynamic strings - * \param buf Address of the pointer to the ast_str structure. - * \param maxlen The maximum size of the resulting string, or 0 for no limit. - * \param StatementHandle The statement handle from which to retrieve data. - * \param ColumnNumber Column number (1-based offset) for which to retrieve data. - * \param TargetType The SQL constant indicating what kind of data is to be retrieved (usually SQL_CHAR) - * \param StrLen_or_Ind A pointer to a length indicator, specifying the total length of data. - */ -#ifdef USE_ODBC -#include <sql.h> -#include <sqlext.h> -#include <sqltypes.h> - -AST_INLINE_API(SQLRETURN ast_str_SQLGetData(struct ast_str **buf, int pmaxlen, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLLEN *StrLen_or_Ind), -{ - SQLRETURN res; - size_t maxlen; - if (pmaxlen == 0) { - if (SQLGetData(StatementHandle, ColumnNumber, TargetType, (*buf)->__AST_STR_STR, 0, StrLen_or_Ind) == SQL_SUCCESS_WITH_INFO) { - ast_str_make_space(buf, *StrLen_or_Ind + 1); - } - } else if (pmaxlen > 0) { - ast_str_make_space(buf, pmaxlen); - } - maxlen = (*buf)->__AST_STR_LEN; - res = SQLGetData(StatementHandle, ColumnNumber, TargetType, (*buf)->__AST_STR_STR, maxlen, StrLen_or_Ind); - (*buf)->__AST_STR_USED = *StrLen_or_Ind; - return res; -} -) -#endif /* defined(USE_ODBC) */ - - /*! * \brief Set a dynamic string using variable arguments * @@ -846,7 +814,7 @@ int __attribute__((format(printf, 3, 4))) ast_str_append( * * http://www.cse.yorku.ca/~oz/hash.html */ -static force_inline int ast_str_hash(const char *str) +static force_inline int attribute_pure ast_str_hash(const char *str) { int hash = 5381; @@ -863,7 +831,7 @@ static force_inline int ast_str_hash(const char *str) * all characters to lowercase prior to computing a hash. This * allows for easy case-insensitive lookups in a hash table. */ -static force_inline int ast_str_case_hash(const char *str) +static force_inline int attribute_pure ast_str_case_hash(const char *str) { int hash = 5381; diff --git a/res/res_odbc.c b/res/res_odbc.c index 165cf872b..3a9b8eea6 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -48,6 +48,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/res_odbc.h" #include "asterisk/time.h" #include "asterisk/astobj2.h" +#include "asterisk/strings.h" struct odbc_class { @@ -366,6 +367,22 @@ int ast_odbc_smart_execute(struct odbc_obj *obj, SQLHSTMT stmt) return res; } +SQLRETURN ast_odbc_ast_str_SQLGetData(struct ast_str **buf, int pmaxlen, SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLLEN *StrLen_or_Ind) +{ + SQLRETURN res; + + if (pmaxlen == 0) { + if (SQLGetData(StatementHandle, ColumnNumber, TargetType, ast_str_buffer(*buf), 0, StrLen_or_Ind) == SQL_SUCCESS_WITH_INFO) { + ast_str_make_space(buf, *StrLen_or_Ind + 1); + } + } else if (pmaxlen > 0) { + ast_str_make_space(buf, pmaxlen); + } + res = SQLGetData(StatementHandle, ColumnNumber, TargetType, ast_str_buffer(*buf), ast_str_size(*buf), StrLen_or_Ind); + ast_str_update(*buf); + + return res; +} int ast_odbc_sanity_check(struct odbc_obj *obj) { |