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:
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 */