Mac OS X Tips
smbfsのバイナリパッチ

smbfsでファイル名に [ と ] を使えるようにする

最近Windowsではファイル名に"[]"(堅いカッコ)を使うことが多くなってきたわけですが(ex. "[エロ]エロエロ.mpg")、残念ながらMac OS Xのsmbfsでは"[]"を含むファイル名を正常に扱うことができません。既存のファイルを読むことはできるんですが、新たに作成したり、削除したりしようとすると、Finderでエラー -43が発生します。

TIL 107032によると、Windowsではファイル名に"[]"を使うことはできないとなっていて、仕様とされているんですが、少なくともLFN(Long FileName)では許されて然るべき。

というわけで、darwinからsmbのソースを引っ張ってきて、パッチを作ってみたんだけど、なぜかいくつかのヘッダファイルが足りなくて、ビルドに失敗。面倒なので、バイナリに直接パッチを当てることに決定。

パッチ手順

  1. 全てのSMBボリュームをマウント解除
  2. smbfs.kextをunloadする
    $ cd /System/Library/Extensions
    $ sudo kextunload smbfs.kext
  3. smbfsのバイナリ(/System/Library/Extensions/smbfs.kext/Contents/MacOS/smbfs)を、適当なバイナリエディタ(ex. HexEditor)で開く
  4. 「*/[]:<>=;?」(2a 2f 5b 5d 3a 3c 3e 3d 3b 3f)を検索
  5. 「[]」(5b 5d)の部分を、「::」(3a 3a)に変更
  6. (書き込み権限のある)適当な場所に別名保存
  7. オリジナルのバイナリをバックアップして、パッチしたバイナリをインストール
    $ cd /System/Library/Extensions/smbfs.kext/Contents/MacOS
    $ sudo mv smbfs smbfs.orig
    $ sudo cp ‾/work/smbfs .

以上で作業終了。

結果

問題なく動いているみたいです。もっと早くやってればよかった。

ちなみに、手元のMac OS X 10.2.6で上記のパッチを適用した結果は、

$ cmp -l smbfs smbfs.orig
114799 72 133
114800 72 135

となりました。ご参考まで。

とはいえ、Appleに直してもらうのが筋なので、みんなでTellUs!