gnunet-svn
[Top][All Lists]
Advanced

[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;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]