Make command-line arguments locale-aware (#237)

GLib will automatically convert command line options to UTF-8 provided that setlocale(LC_TYPE, "") is called first, and the argument type is STRING (but not FILENAME). Update the CLI tools to take advantage of this behavior, and likewise implement it in fakeglib.

GLib does not automatically convert non-option arguments (i.e. everything remaining in argv after option processing), so manually call g_locale_to_utf8 on these arguments when they represent table names. This should fix the CLI tools when processing non-ASCII table names in non-UTF-8 locales. Also update fakeglib to implement a fast and loose version of g_locale_to_utf8, and factor out some of the code page => iconv name logic in iconv.c so it can be used in our fake g_locale_to_utf8. This adds a new symbol mdb_iconv_name_from_code_page that is not advertised in the main header file. I did not want to include mdbtools.h from fakeglib.c, but maybe that's not important.
This commit is contained in:
Evan Miller
2021-01-14 17:34:50 -05:00
committed by GitHub
parent 42431bbba8
commit 0e3a627ee6
12 changed files with 234 additions and 54 deletions

View File

@@ -27,11 +27,17 @@ jobs:
- name: SQL tests
run: bash -e -x ./test_sql.sh
- name: ODBC tests
run: env MDBPATH=test/data ./src/odbc/unittest
run: ./src/odbc/unittest
env:
MDBPATH: test/data
- name: pkg-config libmdb test
run: env PKG_CONFIG_PATH=. pkg-config libmdb --exists
run: pkg-config libmdb --exists
env:
PKG_CONFIG_PATH: .
- name: pkg-config libmdbsql test
run: env PKG_CONFIG_PATH=. pkg-config libmdbsql --exists
run: pkg-config libmdbsql --exists
env:
PKG_CONFIG_PATH: .
macos:
runs-on: macos-latest
strategy:
@@ -59,11 +65,17 @@ jobs:
- name: SQL tests
run: bash -e -x ./test_sql.sh
- name: ODBC tests
run: env MDBPATH=test/data ./src/odbc/unittest
run: ./src/odbc/unittest
env:
MDBPATH: test/data
- name: pkg-config libmdb test
run: env PKG_CONFIG_PATH=. pkg-config libmdb --exists
run: pkg-config libmdb --exists
env:
PKG_CONFIG_PATH: .
- name: pkg-config libmdbsql test
run: env PKG_CONFIG_PATH=. pkg-config libmdbsql --exists
run: pkg-config libmdbsql --exists
env:
PKG_CONFIG_PATH: .
macos-iodbc:
runs-on: macos-latest
strategy:
@@ -88,7 +100,9 @@ jobs:
- name: Make
run: make
- name: ODBC tests
run: env MDBPATH=test/data ./src/odbc/unittest
run: ./src/odbc/unittest
env:
MDBPATH: test/data
windows:
runs-on: windows-latest
env: