gnunet-fuse

GNUnet file-sharing directory mounting via FUSE
Log | Files | Refs | Submodules | README | LICENSE

commit 04985830872ef2d5a128cd010a9f32c01ad84cab
parent b3f705ba181e75f2f2b1154fb76f5125700995cf
Author: Mauricio Günther <mauricio@140774ce-b5e7-0310-ab8b-a85725594a96>
Date:   Fri, 16 Mar 2012 06:49:42 +0000

argv is "gnunet-fuse" and directory


Diffstat:
Msrc/ext/Makefile.am | 5+++--
Msrc/ext/gnunet-fuse.c | 236+++++++++++++++++++++++++------------------------------------------------------
2 files changed, 77 insertions(+), 164 deletions(-)

diff --git a/src/ext/Makefile.am b/src/ext/Makefile.am @@ -14,7 +14,6 @@ gnunet_fuse_SOURCES = \ dirent.c \ file.c \ getattr.c \ - main.c \ mkdir.c \ mknod.c \ open.c \ @@ -38,7 +37,9 @@ gnunet_fuse_LDADD = \ gnunet_fuse_LDFLAGS = \ -export-dynamic gnunet_fuse_CPPFLAGS = \ - -D_FILE_OFFSET_BITS=64 + -D_FILE_OFFSET_BITS=64 \ + -DFUSE_USE_VERSION=26 + #check_PROGRAMS = \ # test_fuse_api diff --git a/src/ext/gnunet-fuse.c b/src/ext/gnunet-fuse.c @@ -35,11 +35,7 @@ static int ret; static char *source; - -/*struct with renamed fuseoperations*/ -static struct fuse_operations fops = {}; - - +static char *directory; #include "gnunet/gnunet_common.h" @@ -57,6 +53,7 @@ static struct fuse_operations fops = {}; #define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file (kind, "util", syscall, filename) + /** * Context for the command. */ @@ -144,153 +141,67 @@ cmd_sorter (__const void *a1, __const void *a2) * @param task_cls closure for task * @return GNUNET_SYSERR on error, GNUNET_OK on success */ -int -gnunet_fuse_run2 (int argc, char *const *argv, const char *binaryName, - const char *binaryHelp, - const struct GNUNET_GETOPT_CommandLineOption *options, - GNUNET_PROGRAM_Main task, void *task_cls, - int run_with_schedule) -{ - struct CommandContext cc; - char *path; - char *loglev; - char *logfile; - int ret; - unsigned int cnt; - unsigned long long skew_offset; - unsigned long long skew_variance; - long long clock_offset; - struct GNUNET_CONFIGURATION_Handle *cfg; - - struct GNUNET_GETOPT_CommandLineOption defoptions[] = { - GNUNET_GETOPT_OPTION_CFG_FILE (&cc.cfgfile), - GNUNET_GETOPT_OPTION_HELP (binaryHelp), - GNUNET_GETOPT_OPTION_LOGLEVEL (&loglev), - GNUNET_GETOPT_OPTION_LOGFILE (&logfile), - GNUNET_GETOPT_OPTION_VERSION (PACKAGE_VERSION) - }; - struct GNUNET_GETOPT_CommandLineOption *allopts; - const char *gargs; - char *lpfx; - char *spc; - - logfile = NULL; - gargs = getenv ("GNUNET_ARGS"); - if (gargs != NULL) - { - char **gargv; - unsigned int gargc; - int i; - char *tok; - char *cargs; - - gargv = NULL; - gargc = 0; - for (i = 0; i < argc; i++) - GNUNET_array_append (gargv, gargc, GNUNET_strdup (argv[i])); - cargs = GNUNET_strdup (gargs); - tok = strtok (cargs, " "); - while (NULL != tok) - { - GNUNET_array_append (gargv, gargc, GNUNET_strdup (tok)); - tok = strtok (NULL, " "); - } - GNUNET_free (cargs); - GNUNET_array_append (gargv, gargc, NULL); - argv = (char *const *) gargv; - argc = gargc - 1; - } - memset (&cc, 0, sizeof (cc)); - loglev = NULL; - cc.task = task; - cc.task_cls = task_cls; - cc.cfg = cfg = GNUNET_CONFIGURATION_create (); - - /* prepare */ -#if ENABLE_NLS - setlocale (LC_ALL, ""); - path = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_LOCALEDIR); - if (path != NULL) - { - BINDTEXTDOMAIN ("GNUnet", path); - GNUNET_free (path); - } - textdomain ("GNUnet"); -#endif - cnt = 0; - while (options[cnt].name != NULL) - cnt++; - allopts = - GNUNET_malloc ((cnt + - 1) * sizeof (struct GNUNET_GETOPT_CommandLineOption) + - sizeof (defoptions)); - memcpy (allopts, defoptions, sizeof (defoptions)); - memcpy (&allopts - [sizeof (defoptions) / - sizeof (struct GNUNET_GETOPT_CommandLineOption)], options, - (cnt + 1) * sizeof (struct GNUNET_GETOPT_CommandLineOption)); - cnt += sizeof (defoptions) / sizeof (struct GNUNET_GETOPT_CommandLineOption); - qsort (allopts, cnt, sizeof (struct GNUNET_GETOPT_CommandLineOption), - &cmd_sorter); - loglev = NULL; - cc.cfgfile = GNUNET_strdup (GNUNET_DEFAULT_USER_CONFIG_FILE); - lpfx = GNUNET_strdup (binaryName); - if (NULL != (spc = strstr (lpfx, " "))) - *spc = '\0'; - if ((-1 == - (ret = - GNUNET_GETOPT_run (binaryName, allopts, (unsigned int) argc, argv))) || - (GNUNET_OK != GNUNET_log_setup (lpfx, loglev, logfile))) - { - GNUNET_CONFIGURATION_destroy (cfg); - GNUNET_free_non_null (cc.cfgfile); - GNUNET_free_non_null (loglev); - GNUNET_free_non_null (logfile); - GNUNET_free (allopts); - GNUNET_free (lpfx); - return GNUNET_SYSERR; - } - (void) GNUNET_CONFIGURATION_load (cfg, cc.cfgfile); - GNUNET_free (allopts); - GNUNET_free (lpfx); - if (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_number (cc.cfg, "testing", "skew_offset", - &skew_offset) && - (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_number (cc.cfg, "testing", - "skew_variance", &skew_variance))) - { - clock_offset = skew_offset - skew_variance; - GNUNET_TIME_set_offset (clock_offset); - } - /* run */ - cc.args = &argv[ret]; - if (GNUNET_NO == run_with_schedule) - { - GNUNET_SCHEDULER_run (&program_main, &cc); - } - else - { - GNUNET_RESOLVER_connect (cc.cfg); - cc.task (cc.task_cls, cc.args, cc.cfgfile, cc.cfg); - } - /* clean up */ - GNUNET_CONFIGURATION_destroy (cfg); - GNUNET_free_non_null (cc.cfgfile); - GNUNET_free_non_null (loglev); - GNUNET_free_non_null (logfile); - return GNUNET_OK; -} -int -gnunet_fuse_run (int argc, char *const *argv, const char *binaryName, - const char *binaryHelp, - const struct GNUNET_GETOPT_CommandLineOption *options, - GNUNET_PROGRAM_Main task, void *task_cls) -{ - return gnunet_fuse_run2 (argc, argv, binaryName, binaryHelp, options, task, task_cls, GNUNET_NO); -} + + +#include <sys/stat.h> +#include <string.h> +#include <errno.h> +#include <fuse.h> +//#include "gnfs.h" + +static int ret; + +int gn_getattr(const char *path, struct stat *stbuf) +{}; +int gn_mknod(const char *path, mode_t mode, dev_t rdev) +{}; +int gn_mkdir(const char *path, mode_t mode) +{}; +int gn_unlink(const char *path) +{}; +int gn_rmdir(const char *path) +{}; +int gn_rename(const char *from, const char *to) +{}; +int gn_truncate(const char *path, off_t size) +{}; +int gn_open(const char *path, struct fuse_file_info *fi) +{}; +int gn_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) +{}; +int gn_write(const char *path, const char *buf, size_t size, off_t offset, struct fuse_file_info *fi) +{}; +int gn_release(const char *path, struct fuse_file_info *fi) +{}; +int gn_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) +{}; +int gn_utimens(const char *path, const struct timespec ts[2]) +{}; + + +/*struct with renamed fuseoperations*/ +static struct fuse_operations fops = { + .getattr = gn_getattr, + .mknod = gn_mknod, + .mkdir = gn_mkdir, + .unlink = gn_unlink, + .rmdir = gn_rmdir, + .rename = gn_rename, + .truncate = gn_truncate, + .open = gn_open, + .read = gn_read, + .write = gn_write, + .release = gn_release, + .readdir = gn_readdir, + .utimens = gn_utimens, +}; + + + + + /** @@ -307,17 +218,14 @@ run (void *cls, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { + ret = 0; - int argc = 0; - while (args[argc] != NULL) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "`%s'\n", args[argc]); - argc++; - } - if (argc > 0) - fuse_main(argc, args, &fops, NULL); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "No fuse arguments given\n"); + + char *a[2]; + a[0]="gnunet-fuse"; + a[1]= directory; + fuse_main(2, a, &fops, NULL); + } /** @@ -330,19 +238,23 @@ run (void *cls, int main (int argc, char *const *argv) { + static const struct GNUNET_GETOPT_CommandLineOption options[] = { {'s', "source", "URI", gettext_noop ("Source you get the URI from"), 1, &GNUNET_GETOPT_set_string, &source}, + {'d', "directory", "PATH", + gettext_noop ("path to your mountpoint"), 1, + &GNUNET_GETOPT_set_string, &directory}, GNUNET_GETOPT_OPTION_END }; return (GNUNET_OK == - gnunet_fuse_run (argc, + GNUNET_PROGRAM_run2(argc, argv, "gnunet-fuse -s URI [-- FUSE-OPTIONS] DIRECTORYNAME", //"gnunet-fuse [options [value]]", gettext_noop ("fuse"), - options, &run, NULL)) ? ret : 1; + options, &run, NULL, GNUNET_YES)) ? ret : 1; } /* end of gnunet-fuse.c */