Abstract
========

This is a filesystem client use the FUSE(Filesystem in
USErspace) interface to convert file name from one charset
to another.


Motivation
==========

Convmv(http://osx.freshmeat.net/projects/convmv/)is a 
utility to converts filenames (not file content), 
directories, and even whole filesystems to a different 
encoding. Inspired by this tool, born was the convmvfs which
mirror a whole filesystem tree from one charset to another.

For example, in China there's a National Standard called 
GB2312 which defined a charset to present most of the 
Chinese character. And many ftp client used in China only
accept and show filename in GB2312. But in *nix world i18n
is more acceptable than l10n so many *nix server use UTF-8.
For example, there's a linux hosted box run a ftp server app
on it. The ftp server export /ftp/pub to anonymous access in
which all filenames are in UTF-8 charset. Now we can make a 
directory called /ftp/pub_gb2312 and use our convmvfs tool to 
mount a special fuse filesystem on /ftp/pub_gb2312, which
hotly convert the filename in /ftp/pub from UTF-8 to GB2312
but leave the contant unchanged.


Install
=======

First you need to download FUSE 2.5 or later from:

  http://fuse.sourceforge.net

After installing FUSE, compile convmvfs the usual way:

  ./configure
  make
  make install (as root)

And you are ready to go.You can now type 'convmvfs --help" to get help
infomation.

If checking out from CVS for the first time also do
'autoreconf -iv' before doing './configure'.


How to use
==========

Once convmvfs is installed running it is very simple:

usage: convmvfs mountpoint [options]

general options:
    -o opt,[opt...]        mount options
    -h   --help            print help
    -V   --version         print version

FUSE options:
    -d   -o debug          enable debug output (implies -f)
    -f                     foreground operation
    -s                     disable multi-threaded operation

    -o allow_other         allow access to other users
    -o allow_root          allow access to root
    -o nonempty            allow mounts over non-empty file/dir
    -o default_permissions enable permission checking by kernel
    -o fsname=NAME         set filesystem name
    -o large_read          issue large read requests (2.4 only)
    -o max_read=N          set maximum size of read requests

    -o hard_remove         immediate removal (don't hide files)
    -o use_ino             let filesystem set inode numbers
    -o readdir_ino         try to fill in d_ino in readdir
    -o direct_io           use direct I/O
    -o kernel_cache        cache files in kernel
    -o umask=M             set file permissions (octal)
    -o uid=N               set file owner
    -o gid=N               set file group
    -o entry_timeout=T     cache timeout for names (1.0s)
    -o negative_timeout=T  cache timeout for deleted names (0.0s)
    -o attr_timeout=T      cache timeout for attributes (1.0s)

CONVMVFS options:
    -o srcdir=PATH         which directory to convert
    -o icharset=CHARSET    charset used in srcdir
    -o ocharset=CHARSET    charset used in mounted filesystem

Note:
* If you use normal user to mount file system be sure to have 
r/w permision to /dev/fuse.

* use `iconv --list` to see which charsets are supported.

* to allow other user to access the mount point use allow_other option

* IMPORTANT: if mount point and srcdir was the same dir, readdir oper
  would enter dead loop. BE SURE TO AVOID THIS SITUATION!

Sample use:
* to mount
$convmvfs /ftp/pub_gbk -o srcdir=/ftp/pub, icharset=utf8,ocharset=gbk

* to umount
$fusermount -u /ftp/pub_gbk
