Changeset: 766abae9a64a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/766abae9a64a
Modified Files:
clients/odbc/driver/ODBCGlobal.h
clients/odbc/driver/ODBCUtil.c
clients/odbc/driver/SQLBrowseConnect.c
clients/odbc/driver/SQLConnect.c
clients/odbc/driver/SQLDriverConnect.c
Branch: odbc-tls
Log Message:
Introduce setODBCdebug to simplify code
diffs (210 lines):
diff --git a/clients/odbc/driver/ODBCGlobal.h b/clients/odbc/driver/ODBCGlobal.h
--- a/clients/odbc/driver/ODBCGlobal.h
+++ b/clients/odbc/driver/ODBCGlobal.h
@@ -101,6 +101,8 @@ extern const wchar_t *ODBCdebug;
extern const char *ODBCdebug;
#endif
+extern void setODBCdebug(const char *filename, bool overrideEnvVar);
+
static inline void ODBCLOG(_In_z_ _Printf_format_string_ const char *fmt, ...)
__attribute__((__format__(__printf__, 1, 2)));
diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -2624,5 +2624,38 @@ translateCompletionType(SQLSMALLINT Comp
}
}
+void
+setODBCdebug(const char *filename, bool overrideEnvVar)
+{
+ if (!overrideEnvVar) {
+#ifdef NATIVE_WIN32
+ void *value = _wgetenv(L"ODBCDEBUG");
+#else
+ void *value = getenv("ODBCDEBUG");
+#endif
+ if (value != NULL)
+ return; // do not override
+ }
+
+ free((void*)ODBCdebug);
+
+#ifdef NATIVE_WIN32
+ size_t attrlen = strlen(filename);
+ SQLWCHAR *wattr = malloc((attrlen + 1) * sizeof(SQLWCHAR));
+ if (ODBCutf82wchar(filename,
+ (SQLINTEGER) attrlen,
+ wattr,
+ (SQLLEN) ((attrlen + 1) * sizeof(SQLWCHAR)),
+ NULL,
+ NULL)) {
+ free(wattr);
+ wattr = NULL;
+ }
+ ODBCdebug = wattr;
+#else
+ ODBCdebug = strdup(filename);
+#endif
+}
+
#endif
diff --git a/clients/odbc/driver/SQLBrowseConnect.c
b/clients/odbc/driver/SQLBrowseConnect.c
--- a/clients/odbc/driver/SQLBrowseConnect.c
+++ b/clients/odbc/driver/SQLBrowseConnect.c
@@ -61,7 +61,7 @@ MNDBBrowseConnect(ODBCDbc *dbc,
int n;
SQLRETURN rc;
#ifdef ODBCDEBUG
- bool allocated = false;
+ bool odbcdebug_changed = false;
#endif
fixODBCstring(InConnectionString, StringLength1, SQLSMALLINT,
addDbcError, dbc, return SQL_ERROR);
@@ -113,34 +113,10 @@ MNDBBrowseConnect(ODBCDbc *dbc,
mapToLongVarchar = atoi(attr);
free(attr);
#ifdef ODBCDEBUG
- } else if (strcasecmp(key, "logfile") == 0 &&
-#ifdef NATIVE_WIN32
- _wgetenv(L"ODBCDEBUG")
-#else
- getenv("ODBCDEBUG")
-#endif
- == NULL) {
- /* environment trumps everything */
- if (ODBCdebug)
- free((void *) ODBCdebug); /* discard const */
-#ifdef NATIVE_WIN32
- size_t attrlen = strlen(attr);
- SQLWCHAR *wattr = malloc((attrlen + 1) *
sizeof(SQLWCHAR));
- if (ODBCutf82wchar(attr,
- (SQLINTEGER) attrlen,
- wattr,
- (SQLLEN) ((attrlen + 1) *
sizeof(SQLWCHAR)),
- NULL,
- NULL)) {
- free(wattr);
- wattr = NULL;
- }
- ODBCdebug = wattr;
+ } else if (strcasecmp(key, "logfile") == 0) {
+ setODBCdebug(attr, false);
free(attr);
-#else
- ODBCdebug = attr;
-#endif
- allocated = true;
+ odbcdebug_changed = true;
#endif
} else
free(attr);
@@ -189,35 +165,12 @@ MNDBBrowseConnect(ODBCDbc *dbc,
}
}
#ifdef ODBCDEBUG
- if (!allocated &&
-#ifdef NATIVE_WIN32
- _wgetenv(L"ODBCDEBUG")
-#else
- getenv("ODBCDEBUG")
-#endif
- == NULL) {
+ if (!odbcdebug_changed) {
/* if not set from InConnectionString argument
* or environment, look in profile */
n = SQLGetPrivateProfileString(dsn, "logfile", "", buf,
sizeof(buf), "odbc.ini");
if (n > 0 && buf[0]) {
- if (ODBCdebug)
- free((void *) ODBCdebug); /* discard
const */
-#ifdef NATIVE_WIN32
- size_t attrlen = strlen(buf);
- SQLWCHAR *wattr = malloc((attrlen + 1) *
sizeof(SQLWCHAR));
- if (ODBCutf82wchar(buf,
- (SQLINTEGER) attrlen,
- wattr,
- (SQLLEN) ((attrlen + 1) *
sizeof(SQLWCHAR)),
- NULL,
- NULL)) {
- free(wattr);
- wattr = NULL;
- }
- ODBCdebug = wattr;
-#else
- ODBCdebug = strdup(buf);
-#endif
+ setODBCdebug(buf, false);
}
}
#endif
diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -212,25 +212,8 @@ MNDBConnect(ODBCDbc *dbc,
int n = SQLGetPrivateProfileString(dsn, "logfile", "",
logfile, sizeof(logfile),
"odbc.ini");
- if (n > 0) {
- free((void *) ODBCdebug); /* discard const */
-#ifdef NATIVE_WIN32
- size_t attrlen = strlen(logfile);
- SQLWCHAR *wattr = malloc((attrlen + 1) *
sizeof(SQLWCHAR));
- if (ODBCutf82wchar(logfile,
- (SQLINTEGER) attrlen,
- wattr,
- (SQLLEN) ((attrlen + 1) *
sizeof(SQLWCHAR)),
- NULL,
- NULL)) {
- free(wattr);
- wattr = NULL;
- }
- ODBCdebug = wattr;
-#else
- ODBCdebug = strdup(logfile);
-#endif
- }
+ if (n > 0)
+ setODBCdebug(logfile, false);
}
#endif
diff --git a/clients/odbc/driver/SQLDriverConnect.c
b/clients/odbc/driver/SQLDriverConnect.c
--- a/clients/odbc/driver/SQLDriverConnect.c
+++ b/clients/odbc/driver/SQLDriverConnect.c
@@ -361,31 +361,9 @@ MNDBDriverConnect(ODBCDbc *dbc,
mapToLongVarchar = atoi(attr);
free(attr);
#ifdef ODBCDEBUG
-#ifdef NATIVE_WIN32
- } else if (strcasecmp(key, "logfile") == 0 &&
- _wgetenv(L"ODBCDEBUG") == NULL) {
- if (ODBCdebug)
- free((void *) ODBCdebug); /* discard const */
- size_t attrlen = strlen(attr);
- SQLWCHAR *wattr = malloc((attrlen + 1) *
sizeof(SQLWCHAR));
- if (ODBCutf82wchar(attr,
- (SQLINTEGER) attrlen,
- wattr,
- (SQLLEN) ((attrlen + 1) *
sizeof(SQLWCHAR)),
- NULL,
- NULL)) {
- free(wattr);
- wattr = NULL;
- }
+ } else if (strcasecmp(key, "logfile") == 0) {
+ setODBCdebug(attr, false);
free(attr);
- ODBCdebug = wattr;
-#else
- } else if (strcasecmp(key, "logfile") == 0 &&
- getenv("ODBCDEBUG") == NULL) {
- if (ODBCdebug)
- free((void *) ODBCdebug); /* discard const */
- ODBCdebug = attr;
-#endif
#endif
} else
free(attr);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]