mirror of
https://git.FreeBSD.org/src.git
synced 2026-06-02 11:24:32 +00:00
libarchive: Force GNU iconv compatibility on FreeBSD
When libarchive is compiled with FreeBSD's native iconv instead of libiconv, as happens with libarchive in the base system, we need to configure iconv(3) to handle invalid sequences by returning -1, as iconv_strncat_in_locale() assumes GNU iconv semantics. This corresponds to upstream PR 3056. PR: 294577 MFC after: 1 week
This commit is contained in:
committed by
Dag-Erling Smørgrav
parent
e9346d1d13
commit
bd15d6ef12
@@ -1314,7 +1314,17 @@ create_sconv_object(const char *fc, const char *tc,
|
||||
else if (strcmp(fc, "CP932") == 0)
|
||||
sc->cd = iconv_open(tc, "SJIS");
|
||||
}
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
#if defined(__FreeBSD__) && !defined(HAVE_LIBICONV)
|
||||
/*
|
||||
* FreeBSD's native iconv() by default returns the number of
|
||||
* invalid characters in the input string, as specified by
|
||||
* POSIX, but iconv_strncat_in_locale() assumes GNU iconv
|
||||
* semantics.
|
||||
*/
|
||||
int v = 1;
|
||||
|
||||
(void)iconvctl(sc->cd, ICONV_SET_ILSEQ_INVALID, &v);
|
||||
#elif defined(_WIN32) && !defined(__CYGWIN__)
|
||||
/*
|
||||
* archive_mstring on Windows directly convert multi-bytes
|
||||
* into archive_wstring in order not to depend on locale
|
||||
|
||||
Reference in New Issue
Block a user