mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-03-10 00:20:54 +08:00
Merge branch 'master' of github.com:evanmiller/mdbtools
This commit is contained in:
@@ -594,8 +594,8 @@ int mdb_get_option(unsigned long optnum);
|
|||||||
void mdb_debug(int klass, char *fmt, ...);
|
void mdb_debug(int klass, char *fmt, ...);
|
||||||
|
|
||||||
/* iconv.c */
|
/* iconv.c */
|
||||||
int mdb_unicode2ascii(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen);
|
int mdb_unicode2ascii(MdbHandle *mdb, const char *src, size_t slen, char *dest, size_t dlen);
|
||||||
int mdb_ascii2unicode(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen);
|
int mdb_ascii2unicode(MdbHandle *mdb, const char *src, size_t slen, char *dest, size_t dlen);
|
||||||
void mdb_iconv_init(MdbHandle *mdb);
|
void mdb_iconv_init(MdbHandle *mdb);
|
||||||
void mdb_iconv_close(MdbHandle *mdb);
|
void mdb_iconv_close(MdbHandle *mdb);
|
||||||
const char* mdb_target_charset(MdbHandle *mdb);
|
const char* mdb_target_charset(MdbHandle *mdb);
|
||||||
|
|||||||
@@ -31,12 +31,13 @@
|
|||||||
* This function is used in reading text data from an MDB table.
|
* This function is used in reading text data from an MDB table.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
mdb_unicode2ascii(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen)
|
mdb_unicode2ascii(MdbHandle *mdb, const char *src, size_t slen, char *dest, size_t dlen)
|
||||||
{
|
{
|
||||||
char *tmp = NULL;
|
char *tmp = NULL;
|
||||||
size_t tlen = 0;
|
size_t tlen = 0;
|
||||||
size_t len_in, len_out;
|
size_t len_in, len_out;
|
||||||
char *in_ptr, *out_ptr;
|
const char *in_ptr = NULL;
|
||||||
|
char *out_ptr = NULL;
|
||||||
|
|
||||||
if ((!src) || (!dest) || (!dlen))
|
if ((!src) || (!dest) || (!dlen))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -73,7 +74,7 @@ mdb_unicode2ascii(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dle
|
|||||||
#if HAVE_ICONV
|
#if HAVE_ICONV
|
||||||
//printf("1 len_in %d len_out %d\n",len_in, len_out);
|
//printf("1 len_in %d len_out %d\n",len_in, len_out);
|
||||||
while (1) {
|
while (1) {
|
||||||
iconv(mdb->iconv_in, &in_ptr, &len_in, &out_ptr, &len_out);
|
iconv(mdb->iconv_in, (ICONV_CONST char **)&in_ptr, &len_in, &out_ptr, &len_out);
|
||||||
/*
|
/*
|
||||||
* Have seen database with odd number of bytes in UCS-2, shouldn't happen but protect against it
|
* Have seen database with odd number of bytes in UCS-2, shouldn't happen but protect against it
|
||||||
*/
|
*/
|
||||||
@@ -114,10 +115,11 @@ mdb_unicode2ascii(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dle
|
|||||||
* If slen is 0, strlen will be used to calculate src's length.
|
* If slen is 0, strlen will be used to calculate src's length.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
mdb_ascii2unicode(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen)
|
mdb_ascii2unicode(MdbHandle *mdb, const char *src, size_t slen, char *dest, size_t dlen)
|
||||||
{
|
{
|
||||||
size_t len_in, len_out;
|
size_t len_in, len_out;
|
||||||
char *in_ptr, *out_ptr;
|
const char *in_ptr = NULL;
|
||||||
|
char *out_ptr = NULL;
|
||||||
|
|
||||||
if ((!src) || (!dest) || (!dlen))
|
if ((!src) || (!dest) || (!dlen))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -128,7 +130,7 @@ mdb_ascii2unicode(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dle
|
|||||||
len_out = dlen;
|
len_out = dlen;
|
||||||
|
|
||||||
#ifdef HAVE_ICONV
|
#ifdef HAVE_ICONV
|
||||||
iconv(mdb->iconv_out, &in_ptr, &len_in, &out_ptr, &len_out);
|
iconv(mdb->iconv_out, (ICONV_CONST char **)&in_ptr, &len_in, &out_ptr, &len_out);
|
||||||
//printf("len_in %d len_out %d\n", len_in, len_out);
|
//printf("len_in %d len_out %d\n", len_in, len_out);
|
||||||
dlen -= len_out;
|
dlen -= len_out;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -839,7 +839,7 @@ SQLRETURN SQL_API SQLColAttributes(
|
|||||||
{
|
{
|
||||||
const char *type_name = _odbc_get_client_type_name(col);
|
const char *type_name = _odbc_get_client_type_name(col);
|
||||||
if (type_name)
|
if (type_name)
|
||||||
snprintf(rgbDesc, cbDescMax, "%s", type_name);
|
*pcbDesc = snprintf(rgbDesc, cbDescMax, "%s", type_name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SQL_COLUMN_LENGTH:
|
case SQL_COLUMN_LENGTH:
|
||||||
@@ -1340,7 +1340,8 @@ SQLRETURN SQL_API SQLColumns(
|
|||||||
|
|
||||||
ts2 = mdb_ascii2unicode(mdb, table->name, 0, (char*)t2, MDB_BIND_SIZE);
|
ts2 = mdb_ascii2unicode(mdb, table->name, 0, (char*)t2, MDB_BIND_SIZE);
|
||||||
ts3 = mdb_ascii2unicode(mdb, col->name, 0, (char*)t3, MDB_BIND_SIZE);
|
ts3 = mdb_ascii2unicode(mdb, col->name, 0, (char*)t3, MDB_BIND_SIZE);
|
||||||
ts5 = mdb_ascii2unicode(mdb, "FIX ME", 0, (char*)t5, MDB_BIND_SIZE);
|
ts5 = mdb_ascii2unicode(mdb, _odbc_get_client_type_name(col), 0, (char*)t5, MDB_BIND_SIZE);
|
||||||
|
|
||||||
nullable = SQL_NO_NULLS;
|
nullable = SQL_NO_NULLS;
|
||||||
datatype = _odbc_get_client_type(col);
|
datatype = _odbc_get_client_type(col);
|
||||||
sqldatatype = _odbc_get_client_type(col);
|
sqldatatype = _odbc_get_client_type(col);
|
||||||
|
|||||||
Reference in New Issue
Block a user