mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-03-10 00:20:54 +08:00
Merge pull request #344 from nyalldawson/repid_odbc_str2
Customizable UUID format with mdb_uuid_to_string_fmt()
This commit is contained in:
@@ -68,6 +68,11 @@ void mdb_set_shortdate_fmt(MdbHandle *mdb, const char *fmt)
|
||||
snprintf(mdb->shortdate_fmt, sizeof(mdb->shortdate_fmt), "%s", fmt);
|
||||
}
|
||||
|
||||
void mdb_set_repid_fmt(MdbHandle *mdb, MdbUuidFormat format)
|
||||
{
|
||||
mdb->repid_fmt = format;
|
||||
}
|
||||
|
||||
void mdb_set_boolean_fmt_numbers(MdbHandle *mdb)
|
||||
{
|
||||
mdb->boolean_false_value = boolean_false_number;
|
||||
@@ -946,15 +951,20 @@ mdb_date_to_string(MdbHandle *mdb, const char *fmt, void *buf, int start)
|
||||
}
|
||||
|
||||
char *mdb_uuid_to_string(const void *buf, int pos)
|
||||
{
|
||||
return mdb_uuid_to_string_fmt(buf,pos,MDB_BRACES_4_2_2_8);
|
||||
}
|
||||
|
||||
char *mdb_uuid_to_string_fmt(const void *buf, int pos, MdbUuidFormat format)
|
||||
{
|
||||
const unsigned char *kkd = (const unsigned char *)buf;
|
||||
return g_strdup_printf("{%02X%02X%02X%02X" "-" "%02X%02X" "-" "%02X%02X"
|
||||
"-" "%02X%02X" "%02X%02X%02X%02X%02X%02X}",
|
||||
return g_strdup_printf(format == MDB_BRACES_4_2_2_8
|
||||
? "{%02X%02X%02X%02X" "-" "%02X%02X" "-" "%02X%02X" "-" "%02X%02X%02X%02X%02X%02X%02X%02X}"
|
||||
: "%02X%02X%02X%02X" "-" "%02X%02X" "-" "%02X%02X" "-" "%02X%02X" "-" "%02X%02X%02X%02X%02X%02X",
|
||||
kkd[pos+3], kkd[pos+2], kkd[pos+1], kkd[pos], // little-endian
|
||||
kkd[pos+5], kkd[pos+4], // little-endian
|
||||
kkd[pos+7], kkd[pos+6], // little-endian
|
||||
kkd[pos+8], kkd[pos+9], // big-endian
|
||||
|
||||
kkd[pos+10], kkd[pos+11],
|
||||
kkd[pos+12], kkd[pos+13],
|
||||
kkd[pos+14], kkd[pos+15]); // big-endian
|
||||
@@ -1046,7 +1056,7 @@ char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int
|
||||
text = mdb_money_to_string(mdb, start);
|
||||
break;
|
||||
case MDB_REPID:
|
||||
text = mdb_uuid_to_string(buf, start);
|
||||
text = mdb_uuid_to_string_fmt(buf, start, mdb->repid_fmt);
|
||||
break;
|
||||
default:
|
||||
/* shouldn't happen. bools are handled specially
|
||||
|
||||
@@ -130,6 +130,7 @@ static MdbHandle *mdb_handle_from_stream(FILE *stream, MdbFileFlags flags) {
|
||||
mdb_set_shortdate_fmt(mdb, "%x");
|
||||
mdb_set_bind_size(mdb, MDB_BIND_SIZE);
|
||||
mdb_set_boolean_fmt_numbers(mdb);
|
||||
mdb_set_repid_fmt(mdb, MDB_BRACES_4_2_2_8);
|
||||
#ifdef HAVE_ICONV
|
||||
mdb->iconv_in = (iconv_t)-1;
|
||||
mdb->iconv_out = (iconv_t)-1;
|
||||
@@ -315,10 +316,11 @@ MdbHandle *mdb_clone_handle(MdbHandle *mdb)
|
||||
mdb_iconv_init(newmdb);
|
||||
mdb_set_default_backend(newmdb, mdb->backend_name);
|
||||
|
||||
// date formats for the source handle may have been changed from
|
||||
// formats for the source handle may have been changed from
|
||||
// the backend's default formats, so we need to explicitly copy them here
|
||||
mdb_set_date_fmt(newmdb, mdb->date_fmt);
|
||||
mdb_set_shortdate_fmt(newmdb, mdb->shortdate_fmt);
|
||||
mdb_set_repid_fmt(newmdb, mdb->repid_fmt);
|
||||
|
||||
if (mdb->f) {
|
||||
mdb->f->refs++;
|
||||
|
||||
Reference in New Issue
Block a user