From: Marc A. T. <ma...@br...> - 2008-04-16 16:56:45
|
Hi, I have been working on a case insensitive fuse file system and it's now at a point where it mostly works. As i am new to fuse it would be nice if one of the more experienced list members could take a quick look and give me some hints on what could be improved. The code is located in a git repository and can be fetched from: http://repo.or.cz/w/ciopfs.git?a=snapshot The fs works by translating every path element to lower case before further operations take place. On file creation the original file name is stored in an extended attribute, this value is later returned upon request. In order for this to work you will need libattr[1] and an underlying file system which supports extended attribtues (for example for ext{2,3} you will need a kernel with CONFIG_EXT{2,3}_FS_XATTR enabled). You probably also want to mount the underlying filesystem with the user_xattr option which allows non root users to create extended attributes. The fs can be compiled with support for unicode characters in file names. In this case the libraries from the icu project[2] are used to perform case folding. (Are there any unicode experts here? Should there be some kind of normalization in place or is the case folding enough?). If you don't have this library at hand, disable it in config.mk. The fs will use standard C library function which are only defined for [a-zA-Z]. Here is a little demonstration to let you see how it should work: mkdir .data case-insensitiv ./ciopfs .data case-insensitiv mkdir -p case-insensitive/DeMo/SubFolder touch case-insensitive/DemO/subFolder/MyFile At this point the fs should look like this: case-insensitive `-- DeMo `-- SubFolder `-- MyFile .data `-- demo `-- subfolder `-- myfile This all works as long as you don't start to mess around with the data directory directly. File names which aren't all lowercase in the data directory are ignored. So you should start with an empty data directory and copy your content over via the mountpoint. All further file creation or renames should also be done over the mountpoint. I don't think there is a way to avoid this restriction, or am i missing something? Also the current implementation uses malloc/free quite extensively, should this be converted to a stack based solution? Any comments are appreciated. Thanks, Marc [1] http://acl.bestbits.at/download.html#Attr [2] http://www.icu-project.org/ -- Marc Andre Tanner >< http://www.brain-dump.org/ >< GPG key: CF7D56C0 |