summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_iconv4
-rw-r--r--Src/utils.c6
3 files changed, 11 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index c94e60fba..1cfb1edcd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2005-03-03 Oliver Kiddle <opk@zsh.org>
+ * 20921, 20924: Src/utils.c, Completion/Unix/Command/_iconv:
+ using UCS-4BE instead of ISO-10646 to identify character
+ encoding is more portable; make error message more specific;
+ find more encodings in iconv completion on Solaris
+
* Henryk Konsek: 20918 (modified): Completion/Unix/Command/_unace:
new completion for unace
diff --git a/Completion/Unix/Command/_iconv b/Completion/Unix/Command/_iconv
index e1528aec5..92fa17e34 100644
--- a/Completion/Unix/Command/_iconv
+++ b/Completion/Unix/Command/_iconv
@@ -1,7 +1,8 @@
#compdef iconv
-local expl curcontext="$curcontext" state line codeset ret=1
+local expl curcontext="$curcontext" state line ret=1
local LOCPATH="${LOCPATH:-/usr/lib/nls/loc}"
+local -U codeset
if _pick_variant gnu=GNU unix --version; then
@@ -40,6 +41,7 @@ else
if [[ $state = codeset ]]; then
if [[ -f /usr/lib/iconv/iconv_data ]]; then # IRIX & Solaris
codeset=( ${${(f)"$(</usr/lib/iconv/iconv_data)"}%%[[:blank:]]*} )
+ codeset+=( /usr/lib/iconv/*%*.so(Ne.'reply=( ${${REPLY:t}%%%*} ${${REPLY:r}#*%} )'.) )
elif [[ -d $LOCPATH/iconv ]]; then # OSF
codeset=( $LOCPATH/iconv/*(N:t) )
codeset=( ${(j:_:s:_:)codeset} )
diff --git a/Src/utils.c b/Src/utils.c
index 469361c33..f33dda54d 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -3617,13 +3617,13 @@ getkeystring(char *s, int *len, int fromwhere, int *misc)
ICONV_CONST char *inptr = inbuf;
inbytes = 4;
outbytes = 6;
- /* assume big endian convention for UCS-4 */
+ /* store value in big endian form */
for (i=3;i>=0;i--) {
inbuf[i] = wval & 0xff;
wval >>= 8;
}
- cd = iconv_open(nl_langinfo(CODESET), "ISO-10646");
+ cd = iconv_open(nl_langinfo(CODESET), "UCS-4BE");
if (cd == (iconv_t)-1) {
zerr("cannot do charset conversion", NULL, 0);
if (fromwhere == 4) {
@@ -3637,7 +3637,7 @@ getkeystring(char *s, int *len, int fromwhere, int *misc)
count = iconv(cd, &inptr, &inbytes, &t, &outbytes);
iconv_close(cd);
if (count == (size_t)-1) {
- zerr("cannot do charset conversion", NULL, 0);
+ zerr("character not in range", NULL, 0);
*t = '\0';
*len = t - buf;
return buf;