[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r20502 - gnunet-fuse/src/ext
From: |
gnunet |
Subject: |
[GNUnet-SVN] r20502 - gnunet-fuse/src/ext |
Date: |
Wed, 14 Mar 2012 18:28:34 +0100 |
Author: mauricio
Date: 2012-03-14 18:28:34 +0100 (Wed, 14 Mar 2012)
New Revision: 20502
Modified:
gnunet-fuse/src/ext/Makefile.am
gnunet-fuse/src/ext/gnunet-fuse.c
Log:
somehow working--This line, and those below, will be ignored--
M ext/gnunet-fuse.c
M ext/Makefile.am
Modified: gnunet-fuse/src/ext/Makefile.am
===================================================================
--- gnunet-fuse/src/ext/Makefile.am 2012-03-14 17:07:11 UTC (rev 20501)
+++ gnunet-fuse/src/ext/Makefile.am 2012-03-14 17:28:34 UTC (rev 20502)
@@ -5,43 +5,48 @@
-I$(top_srcdir) \
@GNUNET_CFLAGS@
-lib_LTLIBRARIES = libgnunetext.la
-libgnunetext_la_SOURCES = \
- ext_api.c
-libgnunetext_la_LIBADD = \
- -lgnunetutil
-libgnunetext_la_LDFLAGS = \
- $(GNUNET_LIBS) $(WINFLAGS) \
- -version-info 0:0:0
+bin_PROGRAMS = gnunet-fuse
-
-bin_PROGRAMS = gnunet-service-fuse gnunet-fuse
-
-gnunet_service_fuse_SOURCES = \
- gnunet-service-fuse.c
-gnunet_service_fuse_LDADD = \
- -lgnunetutil -lgnunetcore\
- $(INTLLIBS)
-gnunet_service_fuse_LDFLAGS = \
- -export-dynamic
-
gnunet_fuse_SOURCES = \
gnunet-fuse.c
+ directory.c \
+ dirent.c \
+ file.c \
+ getattr.c \
+ main.c \
+ mkdir.c \
+ mknod.c \
+ open.c \
+ read.c \
+ readdir.c \
+ release.c \
+ rename.c \
+ rmdir.c \
+ special_file.c \
+ truncate.c \
+ unlink.c \
+ utimens.c \
+ write.c \
+ gnfs.h \
+ gettext.h
gnunet_fuse_LDADD = \
-lgnunetutil \
- $(INTLLIBS)
+ -lfuse \
+ -lgnunetfs
+ $(INTLLIBS)
gnunet_fuse_LDFLAGS = \
- -export-dynamic
+ -export-dynamic
+gnunet_fuse_CPPFLAGS = \
+ -D_FILE_OFFSET_BITS=64
-
-check_PROGRAMS = \
- test_fuse_api
-
-TESTS = $(check_PROGRAMS)
-
-test_fuse_api_SOURCES = \
- test_fuse_api.c
-test_fuse_api_LDADD = \
- $(top_builddir)/src/ext/libgnunetext.la \
- -lgnunetutil
+#check_PROGRAMS = \
+# test_fuse_api
+#
+#TESTS = $(check_PROGRAMS)
+#
+#test_fuse_api_SOURCES = \
+# test_fuse_api.c
+#test_fuse_api_LDADD = \
+# $(top_builddir)/src/ext/libgnunetext.la \
+# -lgnunetutil
Modified: gnunet-fuse/src/ext/gnunet-fuse.c
===================================================================
--- gnunet-fuse/src/ext/gnunet-fuse.c 2012-03-14 17:07:11 UTC (rev 20501)
+++ gnunet-fuse/src/ext/gnunet-fuse.c 2012-03-14 17:28:34 UTC (rev 20502)
@@ -23,13 +23,277 @@
* @brief fuse tool
* @author
*/
+
+#define FUSE_USE_VERSION 26
+
#include <gnunet/platform.h>
#include <gnunet/gnunet_util_lib.h>
-#include "gnunet_fuse_service.h"
+#include <fuse.h>
+#include <gnunet/gnunet_fs_service.h>
+
static int ret;
+static char *source;
+
+/*struct with renamed fuseoperations*/
+static struct fuse_operations fops = {};
+
+
+
+
+#include "gnunet/gnunet_common.h"
+#include "gnunet/gnunet_configuration_lib.h"
+#include "gnunet/gnunet_crypto_lib.h"
+#include "gnunet/gnunet_directories.h"
+#include "gnunet/gnunet_getopt_lib.h"
+#include "gnunet/gnunet_os_lib.h"
+#include "gnunet/gnunet_program_lib.h"
+#include "gnunet/gnunet_resolver_service.h"
+#include "gnunet/gnunet_scheduler_lib.h"
+#include <gcrypt.h>
+
+#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
+
+#define LOG_STRERROR_FILE(kind,syscall,filename) GNUNET_log_from_strerror_file
(kind, "util", syscall, filename)
+
/**
+ * Context for the command.
+ */
+struct CommandContext
+{
+ /**
+ * Argv argument.
+ */
+ char *const *args;
+
+ /**
+ * Name of the configuration file used, can be NULL!
+ */
+ char *cfgfile;
+
+ /**
+ * Main function to run.
+ */
+ GNUNET_PROGRAM_Main task;
+
+ /**
+ * Closure for task.
+ */
+ void *task_cls;
+
+ /**
+ * Configuration to use.
+ */
+ const struct GNUNET_CONFIGURATION_Handle *cfg;
+
+};
+
+
+/**
+ * Initial task called by the scheduler for each
+ * program. Runs the program-specific main task.
+ */
+static void
+program_main (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct CommandContext *cc = cls;
+
+ GNUNET_RESOLVER_connect (cc->cfg);
+ cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);
+}
+
+
+/**
+ * Compare function for 'qsort' to sort command-line arguments by the
+ * short option.
+ *
+ * @param a1 first command line option
+ * @param a2 second command line option
+ */
+static int
+cmd_sorter (__const void *a1, __const void *a2)
+{
+ __const struct GNUNET_GETOPT_CommandLineOption *c1 = a1;
+ __const struct GNUNET_GETOPT_CommandLineOption *c2 = a2;
+
+ if (toupper ((unsigned char) c1->shortName) >
+ toupper ((unsigned char) c2->shortName))
+ return 1;
+ if (toupper ((unsigned char) c1->shortName) <
+ toupper ((unsigned char) c2->shortName))
+ return -1;
+ if (c1->shortName > c2->shortName)
+ return 1;
+ if (c1->shortName < c2->shortName)
+ return -1;
+ return 0;
+}
+
+
+/**
+ * Run a standard GNUnet command startup sequence (initialize loggers
+ * and configuration, parse options).
+ *
+ * @param argc number of command line arguments
+ * @param argv command line arguments
+ * @param binaryName our expected name
+ * @param binaryHelp help text for the program
+ * @param options command line options
+ * @param task main function to run
+ * @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);
+}
+
+
+/**
* Main function that will be run by the scheduler.
*
* @param cls closure
@@ -43,7 +307,14 @@
const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
- ret = 0;
+ ret = 0;
+ int c = 0;
+ while (args[c] != NULL)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "`%s'\n", args[c]);
+ c++;
+ }
+ fuse_main(c, args, &fops, NULL);
}
/**
@@ -56,13 +327,16 @@
int
main (int argc, char *const *argv)
{
- static const struct GNUNET_GETOPT_CommandLineOption options[] = {
- GNUNET_GETOPT_OPTION_END
- };
+ static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ {'s', "source", "URI",
+ gettext_noop ("Source you get the URI from"), 1,
+ &GNUNET_GETOPT_set_string, &source},
+ GNUNET_GETOPT_OPTION_END };
+
return (GNUNET_OK ==
- GNUNET_PROGRAM_run (argc,
+ gnunet_fuse_run (argc,
argv,
- "gnunet-fuse [options [value]]",
+ "gnunet-fuse -s URI [-- FUSE-OPTIONS]
DIRECTORYNAME", //"gnunet-fuse [options [value]]",
gettext_noop
("fuse"),
options, &run, NULL)) ? ret : 1;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20502 - gnunet-fuse/src/ext,
gnunet <=