[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r5024 - gnunet-fuse
From: |
gnunet |
Subject: |
[GNUnet-SVN] r5024 - gnunet-fuse |
Date: |
Tue, 12 Jun 2007 22:44:48 -0600 (MDT) |
Author: amatus
Date: 2007-06-12 22:44:48 -0600 (Tue, 12 Jun 2007)
New Revision: 5024
Modified:
gnunet-fuse/ChangeLog
gnunet-fuse/configure.ac
gnunet-fuse/directory.c
gnunet-fuse/main.c
gnunet-fuse/read.c
Log:
Cleaned up options and added interrupt support
Modified: gnunet-fuse/ChangeLog
===================================================================
--- gnunet-fuse/ChangeLog 2007-06-13 02:40:08 UTC (rev 5023)
+++ gnunet-fuse/ChangeLog 2007-06-13 04:44:48 UTC (rev 5024)
@@ -1,3 +1,7 @@
+2007-06-12 David Barksdale <address@hidden> 0.6
+* Cleaned up fuse command line option passing (in a manner of speaking)
+* Added an implicit "-o ro" so the mount shows up as read-only (for now)
+* Added support for interrupting read operations
2007-06-10 David Barksdale <address@hidden> 0.5
* Added .uri.<file> files which read the uri of <file>
2007-06-08 David Barksdale <address@hidden> 0.4
Modified: gnunet-fuse/configure.ac
===================================================================
--- gnunet-fuse/configure.ac 2007-06-13 02:40:08 UTC (rev 5023)
+++ gnunet-fuse/configure.ac 2007-06-13 04:44:48 UTC (rev 5024)
@@ -1,4 +1,4 @@
-AC_INIT(gnunet-fuse, 0.5)
+AC_INIT(gnunet-fuse, 0.6)
AM_INIT_AUTOMAKE
AM_CONFIG_HEADER(config.h)
Modified: gnunet-fuse/directory.c
===================================================================
--- gnunet-fuse/directory.c 2007-06-13 02:40:08 UTC (rev 5023)
+++ gnunet-fuse/directory.c 2007-06-13 04:44:48 UTC (rev 5024)
@@ -40,7 +40,7 @@
static int tt(void *cls)
{
(void)cls;
- return OK;
+ return fuse_interrupted() ? SYSERR : OK;
}
struct dir_for_each_data
Modified: gnunet-fuse/main.c
===================================================================
--- gnunet-fuse/main.c 2007-06-13 02:40:08 UTC (rev 5023)
+++ gnunet-fuse/main.c 2007-06-13 04:44:48 UTC (rev 5024)
@@ -35,11 +35,27 @@
static char *cfgLogfile = "/tmp/gnunet_fuse.log";
unsigned int anonymity = 1;
int uri_files = 0;
+char **fuse_argv;
+int fuse_argc;
/* Root directory entry, currently used by the dirent cache when asked for / */
struct dirent *root_de;
struct MUTEX *root_mutex;
+int getopt_configure_argv(CommandLineProcessorContext *ctx, void *scls,
+ const char *cmdLineOption, const char *value)
+{
+ (void)ctx;
+ (void)scls;
+ (void)cmdLineOption;
+
+ fuse_argv = REALLOC(fuse_argv, sizeof(char *) * (fuse_argc + 2));
+ fuse_argv[fuse_argc] = (char *)value;
+ fuse_argc++;
+ fuse_argv[fuse_argc] = NULL;
+ return OK;
+}
+
static struct fuse_operations fops =
{
.getattr = gn_getattr,
@@ -60,19 +76,30 @@
&gnunet_getopt_configure_set_uint, &anonymity },
{ 'u', "uri-files", NULL, "Make .uri files visible", 0,
&gnunet_getopt_configure_set_one, &uri_files },
+ { 'x', "Xfuse", NULL, "Escape fuse option", 1,
+ &getopt_configure_argv, NULL },
COMMAND_LINE_OPTION_END,
};
int main(int argc, char **argv)
{
- int i;
+ int i, ret;
struct ECRS_URI *uri;
+ /* Initialize fuse options to specify a read-only filesystem (for now)*/
+ fuse_argc = 3;
+ fuse_argv = MALLOC(sizeof(char *) * (fuse_argc + 1));
+ fuse_argv[0] = argv[0];
+ fuse_argv[1] = "-o";
+ fuse_argv[2] = "ro";
+ fuse_argv[3] = NULL;
+
/* Parse gnunet options */
i = GNUNET_init(argc, argv, "gnunet-fuse [OPTIONS] <URI> <PATH>",
&cfgFilename, gn_options, &ectx, &cfg);
if(i == -1)
{
+ ret = -1;
goto quit;
}
@@ -81,27 +108,37 @@
ectx = GE_create_context_logfile(ectx, GE_ALL, cfgLogfile, YES, 0);
GE_setDefaultContext(ectx);
- if(i >= argc)
+ /* There should be exactly two extra arguments */
+ if(i + 2 != argc)
{
- GE_LOG(ectx, GE_ERROR | GE_BULK | GE_USER,
- "give me a URI to mount\n");
+ printf("You must specify a URI to mount and mountpoint\n");
+ ret = -1;
goto quit;
}
+
+ /* Set URI as our root directory entry */
uri = ECRS_stringToUri(ectx, argv[i]);
if(uri == NULL || !ECRS_isFileUri(uri))
{
- GE_LOG(ectx, GE_ERROR | GE_BULK | GE_USER,
- "URI '%s' cannot be mounted\n", argv[i]);
+ printf("URI '%s' cannot be mounted\n", argv[i]);
+ ret = -1;
goto quit;
}
gn_dirent_cache_init();
root_de = gn_dirent_new(G_DIR_SEPARATOR_S, uri, DE_DIR);
ECRS_freeUri(uri);
root_mutex = MUTEX_CREATE(0);
- argv[i] = argv[0];
+
+ /* Add mount point as the last fuse option */
+ fuse_argv = REALLOC(fuse_argv, sizeof(char *) * (fuse_argc + 2));
+ fuse_argv[fuse_argc] = argv[i + 1];
+ fuse_argc++;
+ fuse_argv[fuse_argc] = NULL;
+
GE_LOG(ectx, GE_BULK | GE_USER | GE_DEBUG, "calling fuse_main\n");
- return fuse_main(argc - i, argv + i, &fops, NULL);
+ ret = fuse_main(fuse_argc, fuse_argv, &fops, NULL);
quit:
+ FREE(fuse_argv);
GNUNET_fini(ectx, cfg);
- return -1;
+ return ret;
}
Modified: gnunet-fuse/read.c
===================================================================
--- gnunet-fuse/read.c 2007-06-13 02:40:08 UTC (rev 5023)
+++ gnunet-fuse/read.c 2007-06-13 04:44:48 UTC (rev 5024)
@@ -66,7 +66,7 @@
static int tt(void *cls)
{
(void)cls;
- return OK;
+ return fuse_interrupted() ? SYSERR : OK;
}
int gn_read(const char *path, char *buf, size_t size, off_t offset,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r5024 - gnunet-fuse,
gnunet <=