Created
May 13, 2009 22:57
-
-
Save kubicek/111363 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# | |
# Based on drbfs example by Kent Sibilev | |
require 'lib/fusefs' | |
# We're basically just passing all requests on to the local filesystem. | |
class UfsDirectory | |
def initialize(dir) | |
@dir = dir | |
@files = {} | |
end | |
def contents(path) | |
Dir[File.join(@dir, path,'*')].map{|fn| File.basename fn} | |
end | |
%w|file? directory? executable? size delete|.each do |name| | |
define_method(name) do |path| | |
File.send name, File.join(@dir, path) | |
end | |
end | |
%w|mkdir rmdir|.each do |name| | |
define_method(name) do |path| | |
Dir.send name, File.join(@dir, path) | |
end | |
end | |
%w|can_write? can_delete? can_mkdir? can_rmdir?|.each do |name| | |
define_method(name) do |path| | |
true | |
end | |
end | |
def raw_rename(path,dest) | |
puts "HOOK: renamed #{path} to #{dest}" | |
File.rename(File.join(@dir,path),File.join(@dir,dest)) | |
end | |
def raw_open(path, mode) | |
return true if @files.has_key? path | |
@files[path] = File.open(File.join(@dir, path), mode) | |
return true | |
rescue | |
puts $! | |
false | |
end | |
def raw_read(path, off, size) | |
file = @files[path] | |
return unless file | |
file.seek(off, File::SEEK_SET) | |
file.read(size) | |
rescue | |
puts $! | |
nil | |
end | |
def raw_write(path, off, sz, buf) | |
file = @files[path] | |
return unless file | |
file.seek(off, File::SEEK_SET) | |
file.write(buf[0, sz]) | |
rescue | |
puts $! | |
end | |
def raw_close(path) | |
file = @files[path] | |
return unless file | |
file.close | |
@files.delete path | |
rescue | |
puts $! | |
end | |
end | |
if $0 == __FILE__ | |
#raw filesystem | |
FuseFS.set_root(UfsDirectory.new("./photos")) | |
#hooked filesystem | |
FuseFS.mount_under("./virt_photos", "allow_root") | |
FuseFS.run | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment