Changeset cb42322 in tol


Ignore:
Timestamp:
May 2, 2012, 10:11:37 AM (14 years ago)
Author:
Jorge Pérez <josp.jorge@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
df6c30c
Parents:
2ea9c89
Message:

refs #1503, portando los cambios desde 3.1

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@4624 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/dbdrivers/libtolodbc.c

    r2ea9c89 rcb42322  
    6161#define TRACE_DEEP 1
    6262
     63#ifdef _MSC_VER
     64
     65#define snprintf c99_snprintf
     66
     67int c99_vsnprintf(char* str, size_t size, const char* format, va_list ap)
     68{
     69    int count = -1;
     70
     71    if (size != 0)
     72        count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
     73    if (count == -1)
     74        count = _vscprintf(format, ap);
     75
     76    return count;
     77}
     78
     79int c99_snprintf(char* str, size_t size, const char* format, ...)
     80{
     81    int count;
     82    va_list ap;
     83
     84    va_start(ap, format);
     85    count = c99_vsnprintf(str, size, format, ap);
     86    va_end(ap);
     87
     88    return count;
     89}
     90
     91#endif // _MSC_VER
     92
     93
    6394typedef struct odbcdx {
    6495  //  char *alias;
    … …  
    85116    SQLSMALLINT type)
    86117{
    87     SQLINTEGER   i = 0;
     118    SQLSMALLINT   i = 0;
    88119    SQLINTEGER   native;
    89120    SQLCHAR      state[ 7 ];
    … …  
    523554  TOLSQL_BIGINT _bigint;       // for SQL_BIGINT
    524555  SQLINTEGER _integer;         // for SQL_INTEGER
    525   SQLCHAR *_decimal;           // for SQL_DECIMAL SQL_NUMERIC
     556  //SQLCHAR *_decimal;           // for SQL_DECIMAL SQL_NUMERIC
     557  SQLCHAR   szNumeric[256];    // for SQL_DECIMAL SQL_NUMERIC SQL_BIGINT
    526558  SQLDOUBLE _double;           // for SQL_DOUBLE, SQL_FLOAT
    527559  SQLREAL _real;               // for SQL_REAL
    … …  
    531563  SQLINTEGER pcbValue;
    532564  int size;
    533   char *errmsg;
     565  char szErrMsg[256];
    534566  SQLSMALLINT targetType = SQL_C_DEFAULT;
    535567  SQLSMALLINT type = dbd->typeList[nfield];
    … …  
    547579      size=sizeof(SQLSMALLINT); pointer=&_smallint;
    548580      break;
     581/*
    549582    case SQL_BIGINT:
     583printf( "case SQL_BIGINT:\n" );
     584
    550585      size=sizeof(TOLSQL_BIGINT); pointer=&_bigint;
    551586      targetType = SQL_C_SBIGINT;
    552587      break;
     588*/
    553589    case SQL_INTEGER:
    554590      size=sizeof(SQLINTEGER); pointer=&_integer;
    555591      break;
    556     case SQL_DECIMAL: case SQL_NUMERIC:
    557       size=64;
     592    case SQL_DECIMAL: case SQL_NUMERIC: case SQL_BIGINT:
     593      /*size=64;
    558594      _decimal=(SQLCHAR *)calloc(size, sizeof(SQLCHAR));
    559595      if(_decimal==NULL) {
    … …  
    561597        return 0;
    562598      }
    563       pointer=_decimal;
     599      pointer=_decimal;*/
     600      pointer = (SQLPOINTER)szNumeric;
     601      size = sizeof( szNumeric );
     602      targetType = SQL_C_CHAR;
    564603      break;
    565604    case SQL_DOUBLE: case SQL_FLOAT:
    … …  
    570609      break;
    571610    default:
    572       errmsg = (char *)calloc(45, sizeof(char));
    573       if(errmsg==NULL) {
    574         stdOutWriter("Out of memory\n");
    575       } else {
    576         sprintf(errmsg, "Wrong numeric data type at SQL field:%i\n", nfield+1);
    577         stdOutWriter(errmsg);
    578       }
     611      snprintf( szErrMsg, sizeof( szErrMsg ) - 1,
     612                "Wrong numeric data type at SQL field: %i\n", nfield + 1 );
     613      stdOutWriter( szErrMsg );
    579614      return 0;
    580615    }
    581616
    582617  // retrieve data from DDBB
    583   status = SQLGetData(dbd->hstmt, nfield+1, targetType, pointer, size, &pcbValue);
     618  status = SQLGetData( dbd->hstmt, nfield+1, targetType, pointer, size,
     619                       &pcbValue );
    584620  if(!checkSQLRet(status, dbd, __LINE__, GET_DIAG_STMT)) { return 0; }
    585621
    … …  
    598634    case SQL_SMALLINT:
    599635      *realval = (long double)(_smallint); break;
     636    /*
    600637    case SQL_BIGINT:
    601       *realval = (long double)_bigint; break;
     638      *realval = (long double)_bigint; break; */
    602639    case SQL_INTEGER:
    603640      *realval = (long double)(_integer); break;
    604     case SQL_DECIMAL: case SQL_NUMERIC:
    605       sscanf((char *)_decimal, "%Lf", realval); break;
     641    case SQL_DECIMAL: case SQL_NUMERIC: case SQL_BIGINT:
     642      //sscanf((char *)_decimal, "%Lf", realval); break;
     643      sscanf( szNumeric, "%Lf", realval); break;
    606644    case SQL_DOUBLE: case SQL_FLOAT:
    607645      *realval = (long double)(_double); break;
Note: See TracChangeset for help on using the changeset viewer.