Slax6RC6でのliblinuxliveの処理が変わってる

何とか日本語の処理ができるようになって、最後にliblivelinuxを変更しようとしたら、全然処理の仕方が変わっているじゃない。どうすればいいのか見当がつかない...。
iocharsetで特別に何かしているみたい。

# Find out what iocharset to use
iocharset()
{
   debug_log "iocharset" "$*"
   local CHARSET IOCHARSET

   # if iocharset is explicitly set at the boot prompt,
   # return it regardless the locale settings
   IOCHARSET=$(cmdline_value iocharset)
   if [ "$IOCHARSET" != "" ]; then
      echo $IOCHARSET
      return 0;
   fi

   # else find out the iocharset from locale_id output, it should match
   # some kernel module (after stripping out few of the dashes)
   IOCHARSET=$(locale_id | cut -d . -f 2- | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)
   if [ "$IOCHARSET" = "" ]; then return 0; fi

   find /lib/modules -name "nls_*" | sed -r 's:^.*/|[.]ko$::g' | cut -b 5- | while read CHARSET; do
      if [ "$(echo $CHARSET | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)" = "$IOCHARSET" ]; then
         echo "$CHARSET"
         return 0
      fi
   done
   return 1
}

なるほどねぇ。

  1. debug_logでiocharset関数のログを取得
  2. cmdline_valueでiocharset変数を起動時のコマンドラインから取得
  3. もしIOCHARSET変数がnullでないなら、IOCHARSET変数を返して終了

ここまでは、分かった。ということは、これ以降は、IOCHARSET変数がnullの場合の処理ということか。さらに分からないなりに処理すると、こんな感じかしら。

  1. locale_idでIOCHARSET変数をセット
  2. これでnullなら、そのまま返して終了
  3. /lib/modules以下でnls_*を読み込んでIOCHARSET変数と比較
  4. 合致したものを返して終了
  5. 合致したものがなければ異常終了

それならばcodepageな何かする必要はないかな。
それよりも、合致したものがない場合の処理で、/lib/modules以下にnls_utf8.koがないと、このままではエラーになるから、slackwareからコピーしてこなければ。危ない、危ない...。でも、何でnls_utf8.koがないんだろう<消しちゃったかな。
むむ、ランゲージパックではしっかり入っているのに、展開するときに上書きされてしまうみたい。書き込んでいるところは、001-core.lzmということを確認。とりあえず、ここにslackwareからコピーしておこう。.koファイルの日付が2日間ほど違うのが気になるなぁ。
というわけで、liblinuxliveは次のように変更。

fs_options()
{
   debug_log "fs_options" "$*"
   local NOAUTO IOCHARSET CODEPAGE

   if [ "$1" = "swap" ]; then echo "noauto,defaults"; return 0; fi

   NOAUTO=$(cmdline_parameter noauto)
   if [ "$NOAUTO" = "" ]; then NOAUTO="auto"; fi
   if [ "$2" = "fstab" ]; then echo -n "$NOAUTO," ; fi
   echo -n "noatime,users,suid,dev,exec"

   IOCHARSET=$(iocharset)
   CODEPAGE=$(cmdline_valuse codepage)

   if [ "$1" = "vfat" ]; then
      echo -n ",quiet,umask=0"
      if [ "$IOCHARSET" ]; then
         if [ "$CODEPAGE" != "" ]; then
            echo ",iocharset=$IOCHARSET,codepage=$CODEPAGE"
         else
            echo ",iocharset=$IOCHARSET"
         fi
      fi
   fi

   if [ "$1" = "ntfs" ]; then
      echo -n ",ro"
      if [ "$IOCHARSET" ]; then
         echo ",nls=$IOCHARSET"
      fi
   fi

   if [ "$1" = "ntfs-3g" ]; then
      echo ",locale=$(locale_id)"
   fi
}