From owner-freebsd-users-jp@freebsd.org Wed Oct 24 02:51:10 2018 Return-Path: Delivered-To: freebsd-users-jp@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5A75B1070D81 for ; Wed, 24 Oct 2018 02:51:10 +0000 (UTC) (envelope-from kh@mogami.com) Received: from mail.mogami.com (mail.mogami.com [122.103.163.237]) by mx1.freebsd.org (Postfix) with ESMTP id D1AC77D324 for ; Wed, 24 Oct 2018 02:51:09 +0000 (UTC) (envelope-from kh@mogami.com) Received: from ana (ana [192.168.2.130]) by mail.mogami.com (Postfix) with SMTP id D577B18CC3A for ; Wed, 24 Oct 2018 11:51:01 +0900 (JST) Date: Wed, 24 Oct 2018 11:51:01 +0900 From: Kouichi Hirabayashi To: freebsd-users-jp@freebsd.org Message-Id: <20181024115101.f6049ef61a82a1fdbab1a404@mogami.com> In-Reply-To: <20181014194410.b466d0bbf0e976ffbcab2969@mogami.com> References: <20181014194410.b466d0bbf0e976ffbcab2969@mogami.com> Organization: MIT Inc. X-Mailer: Sylpheed 3.3.0 (GTK+ 2.24.17; i386-portbld-freebsd8.4) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Subject: [FreeBSD-users-jp 96342] Re: =?iso-2022-jp?b?RnJlZUJTRC0xMS4yIBskQiROGyhCIGphX0pQLmV1Y0pQ?= =?iso-2022-jp?b?IBskQjRENi0bKEI=?= X-BeenThere: freebsd-users-jp@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion relevant to FreeBSD communities in Japan List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Oct 2018 02:51:10 -0000 FreeBSD-11.2 の /bin/sh が ja_JP.eucJP 環境で使えない問題 早トチリで『ja_JP.eucJP 環境で xterm や kterm が使えない』 と書いて混乱させてしまいましたので、整理しておきます。 問題は xterm や kterm ではなくて、/bin/sh でした。 不具合自体は、ja_JP.eucJP 環境で /bin/sh に非 ASCII 文字を 入力すると正常終了してしまうというもので、起動した sh に などをキー入力したり、EUC 漢字コードを入力あるいは paste することで確認できます。 /bin/sh が ja_JP.eucJP 環境で使えなくなってしまった理由は、 /usr/src/lib/libedit /usr/src/bin/sh の両方が ja_JP.eucJP 環境が使えなくなるように変更されてしまっ たことにあります。 sh については parser.h で定義される字句構文解析用の文字種識別 token に EUC-JP 漢字コードの 2 byte 目の使用範囲と重複する 値を使ってしまったため、EUC-JP 文字や Atl-A, Alt-B, .. な どを含む文字列が解釈不能になります。 libedit でも EUC-JP が使えないように書き換えられていますが、 read.c には「#ifdef KANJI」といったコードが残っていて、そ の「KANJI」を define すると compile できなくなるといった状 態で、書き換えの真の意図は理解できません。EUC-JP が使えない問 題に関係するのは chartype.c, el.c, read.c といったところ です。 EUC-JP 環境が必要な状況での対策としては、libedit と sh の 両方を書き換えて EUC-JP が使える sh を作る方法以外に、sh の 使用をあきらめて、csh, tcsh bash, rbash で代替する方法が あります。 /bin/sh を EUC-JP で使えなくした原因の一つである libedit のソースの comment /* FIONREAD attempts to buffer up multiple bytes, and to make that work * properly with partial wide/UTF-8 characters would need some careful work. */ /* * We don't support other multibyte charsets. * The second condition shouldn't happen * and is here merely for additional safety. */ を見ると、ASCII と UTF-8 限定という意図かもしれませんが、も しそうなら、/bin/sh でも sh を起動した時点で、ja_JP.eucJP 環境の場合は「ja_JP.eucJP は使えない」という警告を出して終 了すべきですし、/bin/sh はシステムの根底の一つですから、 ja_JP.eucJP 自体をなくすといった作業と告知も必要なはずで、 理解に苦しみます。 平林 浩一