You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by td...@apache.org on 2014/02/03 19:41:55 UTC

svn commit: r1563992 - in /apr/apr-util/branches/1.5.x: CHANGES dbd/apr_dbd_odbc.c

Author: tdonovan
Date: Mon Feb  3 18:41:55 2014
New Revision: 1563992

URL: http://svn.apache.org/r1563992
Log:
Like r1557720 in trunk.  
MSVC6 has no intptr_t (a C99 type) and there is no signed 
inptr type in APR 1.5.  This change is local to the odbc driver
to avoid introducing a new apr type in a patch release.

Modified:
    apr/apr-util/branches/1.5.x/CHANGES
    apr/apr-util/branches/1.5.x/dbd/apr_dbd_odbc.c

Modified: apr/apr-util/branches/1.5.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.5.x/CHANGES?rev=1563992&r1=1563991&r2=1563992&view=diff
==============================================================================
--- apr/apr-util/branches/1.5.x/CHANGES [utf-8] (original)
+++ apr/apr-util/branches/1.5.x/CHANGES [utf-8] Mon Feb  3 18:41:55 2014
@@ -1,6 +1,9 @@
                                                      -*- coding: utf-8 -*-
 Changes with APR-util 1.5.4
 
+  *) Fix to let ODBC driver build with MSVC6, which does not have intptr_t
+     [Tom Donovan]
+
   *) Windows cmake build: Fix an incompatiblity with Visual Studio
      generators.  [Jeff Trawick, Bert Huijben]
 

Modified: apr/apr-util/branches/1.5.x/dbd/apr_dbd_odbc.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.5.x/dbd/apr_dbd_odbc.c?rev=1563992&r1=1563991&r2=1563992&view=diff
==============================================================================
--- apr/apr-util/branches/1.5.x/dbd/apr_dbd_odbc.c (original)
+++ apr/apr-util/branches/1.5.x/dbd/apr_dbd_odbc.c Mon Feb  3 18:41:55 2014
@@ -47,6 +47,21 @@
 #include <odbc/sqlext.h>
 #endif
 
+/*
+* MSVC6 does not support intptr_t (C99)
+* APR does not have a signed inptr type until 2.0  (r1557720)
+*/
+#if defined(_MSC_VER) && _MSC_VER < 1400
+#if APR_SIZEOF_VOIDP == 8
+#define   ODBC_INTPTR_T  apr_int64_t
+#else
+#define   ODBC_INTPTR_T  apr_int32_t
+#endif
+#else
+#define   ODBC_INTPTR_T  intptr_t
+#endif
+
+
 /* Driver name is "odbc" and the entry point is 'apr_dbd_odbc_driver' 
  * unless ODBC_DRIVER_NAME is defined and it is linked with another db library which
  * is ODBC source-compatible. e.g. DB2, Informix, TimesTen, mysql.  
@@ -114,9 +129,9 @@ struct apr_dbd_t
     char lastError[MAX_ERROR_STRING];
     int defaultBufferSize;      /* used for CLOBs in text mode, 
                                  * and when fld size is indeterminate */
-    intptr_t transaction_mode;
-    intptr_t dboptions;         /* driver options re SQLGetData */
-    intptr_t default_transaction_mode;
+    ODBC_INTPTR_T transaction_mode;
+    ODBC_INTPTR_T dboptions;         /* driver options re SQLGetData */
+    ODBC_INTPTR_T default_transaction_mode;
     int can_commit;             /* controls end_trans behavior */
 };
 
@@ -359,7 +374,7 @@ static SQLRETURN odbc_set_result_column(
                                         SQLHANDLE stmt)
 {
     SQLRETURN rc;
-    intptr_t maxsize, textsize, realsize, type, isunsigned = 1;
+    ODBC_INTPTR_T maxsize, textsize, realsize, type, isunsigned = 1;
 
     /* discover the sql type */
     rc = SQLColAttribute(stmt, icol + 1, SQL_DESC_UNSIGNED, NULL, 0, NULL,
@@ -747,7 +762,7 @@ static void *odbc_get(const apr_dbd_row_
     SQLRETURN rc;
     SQLLEN indicator;
     int state = row->res->colstate[col];
-    intptr_t options = row->res->apr_dbd->dboptions;
+    ODBC_INTPTR_T options = row->res->apr_dbd->dboptions;
 
     switch (state) {
     case (COL_UNAVAIL):
@@ -817,13 +832,13 @@ static apr_status_t odbc_parse_params(ap
                                int *connect, SQLCHAR **datasource, 
                                SQLCHAR **user, SQLCHAR **password, 
                                int *defaultBufferSize, int *nattrs,
-                               int **attrs, intptr_t **attrvals)
+                               int **attrs, ODBC_INTPTR_T **attrvals)
 {
     char *seps, *last, *next, *name[MAX_PARAMS], *val[MAX_PARAMS];
     int nparams = 0, i, j;
 
     *attrs = apr_pcalloc(pool, MAX_PARAMS * sizeof(char *));
-    *attrvals = apr_pcalloc(pool, MAX_PARAMS * sizeof(intptr_t));
+    *attrvals = apr_pcalloc(pool, MAX_PARAMS * sizeof(ODBC_INTPTR_T));
     *nattrs = 0;
     seps = DEFAULTSEPS;
     name[nparams] = apr_strtok(apr_pstrdup(pool, params), seps, &last);
@@ -1063,7 +1078,7 @@ static apr_dbd_t *odbc_open(apr_pool_t *
     SQLCHAR  *datasource = (SQLCHAR *)"", *user = (SQLCHAR *)"",
              *password = (SQLCHAR *)"";
     int nattrs = 0, *attrs = NULL,  connect = 0;
-    intptr_t *attrvals = NULL;
+    ODBC_INTPTR_T *attrvals = NULL;
 
     err_step = "SQLAllocHandle (SQL_HANDLE_DBC)";
     err_htype = SQL_HANDLE_ENV;
@@ -1117,10 +1132,10 @@ static apr_dbd_t *odbc_open(apr_pool_t *
         handle->default_transaction_mode = 0;
         handle->can_commit = APR_DBD_TRANSACTION_IGNORE_ERRORS;
         SQLGetInfo(hdbc, SQL_DEFAULT_TXN_ISOLATION,
-                   &(handle->default_transaction_mode), sizeof(intptr_t), NULL);
+                   &(handle->default_transaction_mode), sizeof(ODBC_INTPTR_T), NULL);
         handle->transaction_mode = handle->default_transaction_mode;
         SQLGetInfo(hdbc, SQL_GETDATA_EXTENSIONS ,&(handle->dboptions),
-                   sizeof(intptr_t), NULL);
+                   sizeof(ODBC_INTPTR_T), NULL);
         apr_pool_cleanup_register(pool, handle, odbc_close_cleanup, apr_pool_cleanup_null);
         return handle;
     }