]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
umm, duh
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 18 Oct 2007 00:10:48 +0000 (00:10 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 18 Oct 2007 00:10:48 +0000 (00:10 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5955 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_odbc.c

index 899cdcc7943fb070d3086a1e7aefb6b22712abc0..e20bbaea8d68a85911d10723afea3f3eeed1f15a 100644 (file)
@@ -305,7 +305,7 @@ SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_handle_callback_exec(switch_odb
 {
        SQLHSTMT stmt = NULL;
        SQLSMALLINT c = 0, x = 0;
-       SQLINTEGER m = 0;
+       SQLINTEGER m = 0, t = 0;
        int result;
 
        assert(callback != NULL);
@@ -333,43 +333,47 @@ SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_handle_callback_exec(switch_odb
        SQLRowCount(stmt, &m);
 
        if (m > 0) {
-               int name_len = 256;
-               char **names;
-               char **vals;
-               int y = 0;
+               for (t = 0; t < m; t++) {
+                       int name_len = 256;
+                       char **names;
+                       char **vals;
+                       int y = 0;
                
-               if (!(result = SQLFetch(stmt)) == SQL_SUCCESS) {
-                       goto error;
-               }
+                       if (!(result = SQLFetch(stmt)) == SQL_SUCCESS) {
+                               goto error;
+                       }
                
-               names = calloc(c, sizeof(*names));
-               vals = calloc(c, sizeof(*names));
+                       names = calloc(c, sizeof(*names));
+                       vals = calloc(c, sizeof(*vals));
                
-               assert(names && vals);
+                       assert(names && vals);
+
+                       for (x = 1; x <= c; x++) {
+                               SQLSMALLINT NameLength, DataType, DecimalDigits, Nullable;
+                               SQLUINTEGER ColumnSize;
+                               names[y] = malloc(name_len);
+                               memset(names[y], 0, name_len);
+
+                               SQLDescribeCol(stmt, x, (SQLCHAR *) names[y], (SQLSMALLINT)name_len, &NameLength, &DataType, &ColumnSize, &DecimalDigits, &Nullable);
+                               ColumnSize++;
+
+                               vals[y] = malloc(ColumnSize);
+                               memset(vals[y], 0, ColumnSize);
+                               SQLGetData(stmt, x, SQL_C_CHAR, (SQLCHAR *) vals[y], ColumnSize, NULL);
+                               y++;
+                       }
                
-               for (x = 1; x <= c; x++) {
-                       SQLSMALLINT NameLength, DataType, DecimalDigits, Nullable;
-                       SQLUINTEGER ColumnSize;
-                       names[y] = malloc(name_len);
-                       memset(names[y], 0, name_len);
-
-                       SQLDescribeCol(stmt, x, (SQLCHAR *) names[y], (SQLSMALLINT)name_len, &NameLength, &DataType, &ColumnSize, &DecimalDigits, &Nullable);
-                       ColumnSize++;
-
-                       vals[y] = malloc(ColumnSize);
-                       memset(vals[y], 0, ColumnSize);
-                       SQLGetData(stmt, x, SQL_C_CHAR, (SQLCHAR *) vals[y], ColumnSize, NULL);
-                       y++;
-               }
-               
-               callback(pdata, y, vals, names);
-
-               for (x = 0; x < y; x++) {
-                       free(names[x]);
-                       free(vals[x]);
+                       if (callback(pdata, y, vals, names)) {
+                               break;
+                       }
+
+                       for (x = 0; x < y; x++) {
+                               free(names[x]);
+                               free(vals[x]);
+                       }
+                       free(names);
+                       free(vals);
                }
-               free(names);
-               free(vals);
        }
 
        SQLFreeHandle(SQL_HANDLE_STMT, stmt);