From: Piotr Caban <piotr@codeweavers.com> --- dlls/odbc32/proxyodbc.c | 12 +++++++++--- dlls/odbc32/tests/odbc32.c | 2 +- dlls/odbc32/unixlib.h | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c index 7e97af63581..9fbe0f72d3c 100644 --- a/dlls/odbc32/proxyodbc.c +++ b/dlls/odbc32/proxyodbc.c @@ -439,7 +439,7 @@ static struct connection *create_connection( struct environment *env ) struct connection *ret; if (!(ret = calloc( 1, sizeof(*ret) ))) return NULL; init_object( &ret->hdr, SQL_HANDLE_DBC, &env->hdr ); - ret->attr_login_timeout = 15; + ret->attr_login_timeout = SQL_LOGIN_TIMEOUT_DEFAULT; return ret; } @@ -1439,9 +1439,11 @@ static SQLRETURN create_con( struct connection *con ) if ((ret = alloc_handle( SQL_HANDLE_DBC, con->hdr.parent, &con->hdr ))) return ret; - if (set_con_attr( con, SQL_ATTR_CONNECTION_TIMEOUT, INT_PTR(con->attr_con_timeout), 0 )) + if (con->con_timeout_set && + set_con_attr( con, SQL_ATTR_CONNECTION_TIMEOUT, INT_PTR(con->attr_con_timeout), 0 )) WARN( "failed to set connection timeout\n" ); - if (set_con_attr( con, SQL_ATTR_LOGIN_TIMEOUT, INT_PTR(con->attr_login_timeout), 0 )) + if (con->login_timeout_set && + set_con_attr( con, SQL_ATTR_LOGIN_TIMEOUT, INT_PTR(con->attr_login_timeout), 0 )) WARN( "failed to set login timeout\n" ); if (con->hdr.win32_handle) @@ -3680,10 +3682,12 @@ SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribut { case SQL_ATTR_CONNECTION_TIMEOUT: con->attr_con_timeout = (UINT32)(ULONG_PTR)Value; + con->con_timeout_set = TRUE; break; case SQL_ATTR_LOGIN_TIMEOUT: con->attr_login_timeout = (UINT32)(ULONG_PTR)Value; + con->login_timeout_set = TRUE; break; default: @@ -6994,10 +6998,12 @@ SQLRETURN WINAPI SQLSetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribu { case SQL_ATTR_CONNECTION_TIMEOUT: con->attr_con_timeout = (UINT32)(ULONG_PTR)Value; + con->con_timeout_set = TRUE; break; case SQL_ATTR_LOGIN_TIMEOUT: con->attr_login_timeout = (UINT32)(ULONG_PTR)Value; + con->login_timeout_set = TRUE; break; default: diff --git a/dlls/odbc32/tests/odbc32.c b/dlls/odbc32/tests/odbc32.c index 41e5494f269..09fcf5b2d9f 100644 --- a/dlls/odbc32/tests/odbc32.c +++ b/dlls/odbc32/tests/odbc32.c @@ -175,7 +175,7 @@ static SQLRETURN WINAPI driver_SQLGetConnectAttr( SQLHDBC con, SQLINTEGER attr, static SQLRETURN WINAPI driver_SQLSetConnectAttr( SQLHDBC con, SQLINTEGER attr, SQLPOINTER val, SQLINTEGER len ) { - todo_wine ok( 0, "unexpected call\n" ); + ok( 0, "unexpected call\n" ); return SQL_ERROR; } diff --git a/dlls/odbc32/unixlib.h b/dlls/odbc32/unixlib.h index 637d88b096f..d4ff1e72ac3 100644 --- a/dlls/odbc32/unixlib.h +++ b/dlls/odbc32/unixlib.h @@ -212,7 +212,9 @@ struct connection struct object hdr; UINT32 driver_odbc_ver; /* attributes */ + BOOL con_timeout_set; UINT32 attr_con_timeout; + BOOL login_timeout_set; UINT32 attr_login_timeout; }; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10669