From b8b78a43a5a8538d17365f967f9d67aac5761afd Mon Sep 17 00:00:00 2001 From: Kyle Maxwell Date: Fri, 18 Sep 2009 13:56:15 -0700 Subject: [PATCH] progress --- .gitignore | 6 +- Rakefile | 1 + ext/Makefile | 157 ------------------------------------------ ext/extconf.rb | 2 +- ext/fusefs_fuse.c | 68 ++++++------------ ext/fusefs_fuse.h | 4 +- ext/fusefs_fuse.o | Bin 4292 -> 0 bytes ext/fusefs_lib.bundle | Bin 27496 -> 0 bytes ext/fusefs_lib.c | 88 ++++++++++------------- ext/fusefs_lib.o | Bin 21576 -> 0 bytes ext/mkmf.log | 12 ---- fusefs.gemspec | 7 +- lib/fusefs.rb | 29 ++++++-- 13 files changed, 94 insertions(+), 280 deletions(-) delete mode 100644 ext/Makefile delete mode 100644 ext/fusefs_fuse.o delete mode 100755 ext/fusefs_lib.bundle delete mode 100644 ext/fusefs_lib.o delete mode 100644 ext/mkmf.log diff --git a/.gitignore b/.gitignore index c1ed1bc..7071364 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,8 @@ .DS_Store coverage rdoc -pkg \ No newline at end of file +pkg +*.o +*.bundle +*.log +Makefile \ No newline at end of file diff --git a/Rakefile b/Rakefile index 0194495..2b1677e 100644 --- a/Rakefile +++ b/Rakefile @@ -10,6 +10,7 @@ begin gem.email = "kyle@kylemaxwell.com" gem.homepage = "http://github.com/fizx/fusefs" gem.authors = ["Kyle Maxwell"] + gem.extensions = ["ext/extconf.rb"] end rescue LoadError puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler" diff --git a/ext/Makefile b/ext/Makefile deleted file mode 100644 index 546fa14..0000000 --- a/ext/Makefile +++ /dev/null @@ -1,157 +0,0 @@ - -SHELL = /bin/sh - -#### Start of system configuration section. #### - -srcdir = . -topdir = /opt/local/lib/ruby/1.8/i686-darwin10 -hdrdir = $(topdir) -VPATH = $(srcdir):$(topdir):$(hdrdir) -exec_prefix = $(prefix) -prefix = $(DESTDIR)/opt/local -sharedstatedir = $(prefix)/com -mandir = $(DESTDIR)/opt/local/share/man -psdir = $(docdir) -oldincludedir = $(DESTDIR)/usr/include -localedir = $(datarootdir)/locale -bindir = $(exec_prefix)/bin -libexecdir = $(exec_prefix)/libexec -sitedir = $(libdir)/ruby/site_ruby -htmldir = $(docdir) -vendorarchdir = $(vendorlibdir)/$(sitearch) -includedir = $(prefix)/include -infodir = $(datarootdir)/info -vendorlibdir = $(vendordir)/$(ruby_version) -sysconfdir = $(prefix)/etc -libdir = $(exec_prefix)/lib -sbindir = $(exec_prefix)/sbin -rubylibdir = $(libdir)/ruby/$(ruby_version) -docdir = $(datarootdir)/doc/$(PACKAGE) -dvidir = $(docdir) -vendordir = $(DESTDIR)/opt/local/lib/ruby/vendor_ruby -datarootdir = $(prefix)/share -pdfdir = $(docdir) -archdir = $(rubylibdir)/$(arch) -sitearchdir = $(sitelibdir)/$(sitearch) -datadir = $(datarootdir) -localstatedir = $(prefix)/var -sitelibdir = $(sitedir)/$(ruby_version) - -CC = /usr/bin/gcc-4.2 -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static - -RUBY_EXTCONF_H = -CFLAGS = -fno-common -O2 -arch x86_64 -fno-common -pipe -fno-common $(cflags) -arch x86_64 -INCFLAGS = -I. -I. -I/opt/local/lib/ruby/1.8/i686-darwin10 -I. -DEFS = -CPPFLAGS = -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/opt/local/include -CXXFLAGS = $(CFLAGS) -ldflags = -L. -L/opt/local/lib -dldflags = -archflag = -arch x86_64 -DLDFLAGS = $(ldflags) $(dldflags) $(archflag) -LDSHARED = $(CC) -dynamic -bundle -undefined suppress -flat_namespace -AR = ar -EXEEXT = - -RUBY_INSTALL_NAME = ruby -RUBY_SO_NAME = ruby -arch = i686-darwin10 -sitearch = i686-darwin10 -ruby_version = 1.8 -ruby = /opt/local/bin/ruby -RUBY = $(ruby) -RM = rm -f -MAKEDIRS = mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp - -#### End of system configuration section. #### - -preload = - -libpath = . $(libdir) -LIBPATH = -L. -L$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = - -extout = -extout_prefix = -target_prefix = -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lfuse -lpthread -ldl -lobjc -SRCS = fusefs_fuse.c fusefs_lib.c -OBJS = fusefs_fuse.o fusefs_lib.o -TARGET = fusefs_lib -DLLIB = $(TARGET).bundle -EXTSTATIC = -STATIC_LIB = - -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) - -TARGET_SO = $(DLLIB) -CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map -CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak - -all: $(DLLIB) -static: $(STATIC_LIB) - -clean: - @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) - -distclean: clean - @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -realclean: distclean -install: install-so install-rb - -install-so: $(RUBYARCHDIR) -install-so: $(RUBYARCHDIR)/$(DLLIB) -$(RUBYARCHDIR)/$(DLLIB): $(DLLIB) - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -install-rb: pre-install-rb install-rb-default -install-rb-default: pre-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -$(RUBYARCHDIR): - $(MAKEDIRS) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .cxx .cpp .C .o - -.cc.o: - $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $< - -.cxx.o: - $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $< - -.cpp.o: - $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $< - -.C.o: - $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $< - -.c.o: - $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $< - -$(DLLIB): $(OBJS) Makefile - @-$(RM) $@ - $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - - - -$(OBJS): ruby.h defines.h diff --git a/ext/extconf.rb b/ext/extconf.rb index 60b7b2a..ad1ba6d 100644 --- a/ext/extconf.rb +++ b/ext/extconf.rb @@ -1,6 +1,6 @@ require 'mkmf' dir_config('fusefs_lib.so') -if have_library('fuse') +if have_library('fuse_ino64') || have_library('fuse') create_makefile('fusefs_lib') else puts "No FUSE install available" diff --git a/ext/fusefs_fuse.c b/ext/fusefs_fuse.c index b36015e..f629c55 100644 --- a/ext/fusefs_fuse.c +++ b/ext/fusefs_fuse.c @@ -3,15 +3,10 @@ /* This is rewriting most of the things that occur * in fuse_main up through fuse_loop */ -#define FUSE_USE_VERSION 22 +#define FUSE_USE_VERSION 26 #define _FILE_OFFSET_BITS 64 #include -/* #include "fuse_i.h" -#include "fuse_compat.h" -#include "fuse_kernel.h" -#include "fuse_kernel_compat5.h" */ - #include #include #include @@ -24,25 +19,32 @@ #include #include -struct fuse * fuse_instance = NULL; -static unsigned int fusefd; +struct fuse *fuse_instance = NULL; +struct fuse_chan *fusech = NULL; static char *mounted_at = NULL; static int set_one_signal_handler(int signal, void (*handler)(int)); int fusefs_fd() { - return fusefd; + if(fusech == NULL) + return -1; + return fuse_chan_fd(fusech); } int fusefs_unmount() { + char buf[128]; + + if (mounted_at && fusech) { + fuse_unmount(mounted_at, fusech); + sprintf(buf, "/sbin/umount %s", mounted_at); + system(buf); + } if (fuse_instance) fuse_destroy(fuse_instance); fuse_instance = NULL; - if (mounted_at) - fuse_unmount(mounted_at); free(mounted_at); - fusefd = -1; + fusech = NULL; } static void @@ -53,38 +55,8 @@ fusefs_ehandler() { } int -fusefs_setup(char *mountpoint, const struct fuse_operations *op, char *opts) { - char fuse_new_opts[1024]; - char fuse_mount_opts[1024]; - char nopts[1024]; - - char *cur; - char *ptr; - - fuse_new_opts[0] = '\0'; - fuse_mount_opts[0] = '\0'; - - for (cur=opts;cur;cur = ptr) { - ptr = strchr(cur,','); - if (ptr) *(ptr++) = '\0'; - if (fuse_is_lib_option(cur)) { - if (fuse_new_opts[0]) { - strcpy(nopts,fuse_new_opts); - snprintf(fuse_new_opts,1024,"%s,%s",nopts,cur); - } else { - snprintf(fuse_new_opts,1024,"%s",cur); - } - } else { - if (fuse_mount_opts[0]) { - strcpy(nopts,fuse_mount_opts); - snprintf(fuse_mount_opts,1024,"%s,%s",nopts,cur); - } else { - snprintf(fuse_mount_opts,1024,"%s",cur); - } - } - } - - fusefd = -1; +fusefs_setup(char *mountpoint, const struct fuse_operations *op, struct fuse_args *opts) { + fusech = NULL; if (fuse_instance != NULL) { return 0; } @@ -93,10 +65,10 @@ fusefs_setup(char *mountpoint, const struct fuse_operations *op, char *opts) { } /* First, mount us */ - fusefd = fuse_mount(mountpoint, fuse_mount_opts[0] ? fuse_mount_opts : NULL); - if (fusefd == -1) return 0; + fusech = fuse_mount(mountpoint, opts); + if (fusech == NULL) return 0; - fuse_instance = fuse_new(fusefd, fuse_new_opts[0] ? fuse_new_opts : NULL, op, sizeof(*op)); + fuse_instance = fuse_new(fusech, opts, op, sizeof(*op), NULL); if (fuse_instance == NULL) goto err_unmount; @@ -115,7 +87,7 @@ fusefs_setup(char *mountpoint, const struct fuse_operations *op, char *opts) { err_destroy: fuse_destroy(fuse_instance); err_unmount: - fuse_unmount(mountpoint); + fuse_unmount(mountpoint, fusech); return 0; } diff --git a/ext/fusefs_fuse.h b/ext/fusefs_fuse.h index c68110f..72d9fd6 100644 --- a/ext/fusefs_fuse.h +++ b/ext/fusefs_fuse.h @@ -6,10 +6,12 @@ #ifndef __FUSEFS_FUSE_H_ #define __FUSEFS_FUSE_H_ +struct fuse_args; + int fusefs_fd(); int fusefs_unmount(); int fusefs_ehandler(); -int fusefs_setup(char *mountpoint, const struct fuse_operations *op, char *opts); +int fusefs_setup(char *mountpoint, const struct fuse_operations *op, struct fuse_args *opts); int fusefs_process(); int fusefs_uid(); int fusefs_gid(); diff --git a/ext/fusefs_fuse.o b/ext/fusefs_fuse.o deleted file mode 100644 index 9e75352a18b0cf691117a86ecc8d211556911cd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4292 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 diff --git a/ext/fusefs_lib.c b/ext/fusefs_lib.c index 7e04457..410c93a 100644 --- a/ext/fusefs_lib.c +++ b/ext/fusefs_lib.c @@ -6,7 +6,7 @@ /* #define DEBUG /* */ -#define FUSE_USE_VERSION 22 +#define FUSE_USE_VERSION 26 #define _FILE_OFFSET_BITS 64 #include @@ -280,9 +280,8 @@ rf_getattr(const char *path, struct stat *stbuf) { /* "/" is automatically a dir. */ if (strcmp(path,"/") == 0) { - stbuf->st_mode = S_IFDIR | 0555; - stbuf->st_size = 4096; - stbuf->st_nlink = 1; + stbuf->st_mode = S_IFDIR | 0755; + stbuf->st_nlink = 3; stbuf->st_uid = getuid(); stbuf->st_gid = getgid(); stbuf->st_mtime = init_time; @@ -1269,6 +1268,24 @@ rf_read(const char *path, char *buf, size_t size, off_t offset, return 0; } +static int +rf_fsyncdir(const char * path, int p, struct fuse_file_info *fi) +{ + return 0; +} + +static int +rf_utime(const char *path, struct utimbuf *ubuf) +{ + return 0; +} + +static int +rf_statfs(const char *path, struct statvfs *buf) +{ + return 0; +} + /* rf_oper * * Used for: FUSE utilizes this to call operations at the appropriate time. @@ -1289,6 +1306,9 @@ static struct fuse_operations rf_oper = { .utime = rf_touch, .read = rf_read, .write = rf_write, + .fsyncdir = rf_fsyncdir, + .utime = rf_utime, + .statfs = rf_statfs, }; /* rf_set_root @@ -1330,38 +1350,6 @@ rf_handle_editor(VALUE self, VALUE troo) { return Qtrue; } -char *valid_options[] = { - "default_permissions", - "allow_other", - "allow_root", - "direct_io", - "max_read=", - "fsname=", - NULL -}; - -int -rf_valid_option(char *option) { - char opt[32]; - char *ptr; - int i; - - strncpy(opt,option,31); - - if (ptr = strchr(opt,'*')) { - ptr++; - *ptr = '\0'; - } - - for (i=0;valid_options[i];i++) { - if (!strcasecmp(valid_options[i],opt)) { - return 1; - } - } - - return 0; -} - /* rf_mount_to * * Used by: FuseFS.mount_to(dir) @@ -1370,13 +1358,10 @@ rf_valid_option(char *option) { */ VALUE rf_mount_to(int argc, VALUE *argv, VALUE self) { + struct fuse_args *opts; + VALUE mountpoint; int i; - char opts[1024]; - char opts2[1024]; char *cur; - VALUE mountpoint; - - snprintf(opts,1024,"direct_io"); if (self != cFuseFS) { rb_raise(cFSException,"Error: 'mount_to' called outside of FuseFS?!"); @@ -1390,17 +1375,18 @@ rf_mount_to(int argc, VALUE *argv, VALUE self) { mountpoint = argv[0]; - Check_Type(mountpoint, T_STRING); + Check_Type(mountpoint, T_STRING); + opts = ALLOC(struct fuse_args); + opts->argc = argc; + opts->argv = ALLOC_N(char *, opts->argc); + opts->allocated = 1; + + opts->argv[0] = strdup("-odirect_io"); - for (i = 1;i < argc; i++) { - Check_Type(argv[i], T_STRING); - cur = STR2CSTR(argv[i]); - if (!rf_valid_option(cur)) { - rb_raise(rb_eArgError,"mount_under: \"%s\" - invalid argument.", cur); - return Qnil; - } - snprintf(opts2,1024,"%s,%s",opts,STR2CSTR(argv[i])); - strcpy(opts,opts2); + for (i = 1; i < argc; i++) { + cur = StringValuePtr(argv[i]); + opts->argv[i] = ALLOC_N(char, RSTRING(argv[i])->len + 2); + sprintf(opts->argv[i], "-o%s", cur); } rb_iv_set(cFuseFS,"@mountpoint",mountpoint); diff --git a/ext/fusefs_lib.o b/ext/fusefs_lib.o deleted file mode 100644 index 756f76b2170a832dc829c4f255e38b4f73031871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21576 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 Ric{0MXF}&*d4vMje*=898AkvB diff --git a/ext/mkmf.log b/ext/mkmf.log deleted file mode 100644 index 4f2b8ef..0000000 --- a/ext/mkmf.log +++ /dev/null @@ -1,12 +0,0 @@ -have_library: checking for main() in -lfuse... -------------------- yes - -"/usr/bin/gcc-4.2 -o conftest -I. -I/opt/local/lib/ruby/1.8/i686-darwin10 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/opt/local/include -O2 -arch x86_64 -fno-common -pipe -fno-common conftest.c -L. -L/opt/local/lib -L. -L/opt/local/lib -arch x86_64 -lruby-static -lfuse -lpthread -ldl -lobjc " -checked program was: -/* begin */ -1: /*top*/ -2: int main() { return 0; } -3: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; } -/* end */ - --------------------- - diff --git a/fusefs.gemspec b/fusefs.gemspec index 6e10416..52f0d7e 100644 --- a/fusefs.gemspec +++ b/fusefs.gemspec @@ -12,6 +12,7 @@ Gem::Specification.new do |s| s.date = %q{2009-09-18} s.description = %q{Gemified} s.email = %q{kyle@kylemaxwell.com} + s.extensions = ["ext/extconf.rb"] s.extra_rdoc_files = [ "LICENSE", "README" @@ -27,15 +28,11 @@ Gem::Specification.new do |s| "TODO", "VERSION", "ext/MANIFEST", - "ext/Makefile", "ext/extconf.rb", "ext/fusefs_fuse.c", "ext/fusefs_fuse.h", - "ext/fusefs_fuse.o", - "ext/fusefs_lib.bundle", "ext/fusefs_lib.c", - "ext/fusefs_lib.o", - "ext/mkmf.log", + "fusefs.gemspec", "lib/fusefs.rb", "sample/demo.rb", "sample/dictfs.rb", diff --git a/lib/fusefs.rb b/lib/fusefs.rb index 39a8379..145c3eb 100644 --- a/lib/fusefs.rb +++ b/lib/fusefs.rb @@ -10,14 +10,18 @@ module FuseFS @running = true def FuseFS.run fd = FuseFS.fuse_fd - io = IO.for_fd(fd) + begin + io = IO.for_fd(fd) + rescue Errno::EBADF + raise "fuse is not mounted" + end while @running IO.select([io]) FuseFS.process end end def FuseFS.unmount - system("fusermount -u #{@mountpoint}") + system("umount #{@mountpoint}") end def FuseFS.exit @running = false @@ -83,7 +87,7 @@ def file?(path) @subdirs[base].file?(rest) end end - + # File Reading def read_file(path) base, rest = split_path(path) @@ -98,7 +102,24 @@ def read_file(path) @subdirs[base].read_file(rest) end end - + + # File sizing + def size(path) + base, rest = split_path(path) + case + when base.nil? + 0 + when rest.nil? + obj = @files[base] + obj.respond_to?(:size) ? obj.size : 0 + when ! @subdirs.has_key?(base) + 0 + else + dir = @subdirs[base] + dir.respond_to?(:size) ? dir.size(rest) : 0 + end + end + # Write to a file def can_write?(path) return false unless Process.uid == FuseFS.reader_uid