SQLPutData bug ?
От | Mika Mantyla |
---|---|
Тема | SQLPutData bug ? |
Дата | |
Msg-id | 3BC403A5.6060602@soberit.hut.fi обсуждение исходный текст |
Список | pgsql-bugs |
Your name : Mika Mäntylä Your email address : mmantyla@soberit.hut.fi System Configuration --------------------- Architecture (example: Intel Pentium) : AMD Athlon Operating System (example: Linux 2.0.26 ELF) : RH 7.1 PostgreSQL version (example: PostgreSQL-7.1.3): PostgreSQL-7.1.3 Compiler used (example: gcc 2.95.2) : gcc-2.96-97.1 (Used pre-build binaries) FULL description of your problem: ------------------------------------------------ We have ODBC application that is currently running on top of commercial Solid and Sybase databases.With some fixes I got this application to also work on PSQL on top of W2K. Now I'm trying to get the app to work in Linux with libiodbc-3.0.5-1 and postgresql-odbc-7.1.3 However there seems to be problem with SQLPutData call. This was already a problem in W2k with PSQL (ODBC 07_01_0006), and you can see the ugly fix I made in the code. In Linux the same fix causes the program to get segmentation fault in st.ParamData call. If I remove the fix the final st.PutData call in the loop fails. I think this could be problem related to odbc somehow, but I really don't know. ------------------------------------------------------- /**** Code with the problem ************************** else { char buf[256]; int got; pos = 0; do { // This copies data to buffer buf nothing more got = data->GetData( pos, buf, sizeof(buf) ); #ifdef PSQL #ifdef WIN32 if (got == 0) break; #endif //WIN32 #endif //PSQL st.PutData( buf, got ); pos += got; } while( got > 0 ); } rc = st.ParamData( &pos ); ----------------------------------------------------- /**** PutData call ************************/ void DBStmt::PutData( void *buf, int bufsize ) { t_usec = 0; do { rc = SQLPutData( hstmt, buf, bufsize ); } while( rc==SQL_STILL_EXECUTING && SocketOK() ); if( rc!=SQL_SUCCESS ) throw SQLExc( "SQLPutData failed", rc, hdbc, hstmt ); } ----------------------------------------------------- /**** ParamData call ************************/ int DBStmt::ParamData( long *val ) { t_usec = 0; do { rc = SQLParamData( hstmt, (void**)&val ); } while( rc==SQL_STILL_EXECUTING && SocketOK() ); if( rc!=SQL_SUCCESS && rc!=SQL_NEED_DATA ) throw SQLExc( "SQLParamData failed", rc, hdbc, hstmt ); return rc; } -- Mika Mäntylä || SoberIT 09-451 6001 || Spektri Kvartti 3330a
В списке pgsql-bugs по дате отправления: