commit 9f51323d3d19a9663515a6c94b0eb6f06b20601f
parent db729e7c0cf6c138466301357b595d6e9d396001
Author: Mauricio Günther <mauricio@140774ce-b5e7-0310-ab8b-a85725594a96>
Date: Mon, 26 Mar 2012 15:12:34 +0000
-n.w.c
Diffstat:
3 files changed, 35 insertions(+), 61 deletions(-)
diff --git a/src/ext/gnunet-fuse.c b/src/ext/gnunet-fuse.c
@@ -33,7 +33,7 @@
#include <gnunet/gnunet_container_lib.h>
#include <gnunet/gnunet_crypto_lib.h>
-struct GNUNET_CONTAINER_MultiHashMap *map;
+//struct GNUNET_CONTAINER_MultiHashMap *map;
static int ret;
@@ -140,42 +140,11 @@ run (void *cls,
}
- /* Store a key-value pair in the map. */
- struct path_uri *t;
-
- t = GNUNET_malloc (sizeof (struct path_uri));
-
- GNUNET_CONTAINER_multihashmap_put (map, directory, source, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
-
-
+/* create MultiHashMap */
+unsigned int len = strlen(directory);
-/* create MultiHashMap
struct GNUNET_CONTAINER_MultiHashMap *map;
-unsigned int len = strlen(path);
-
-map = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MultiHashMap));
map = GNUNET_CONTAINER_multihashmap_create (len);
-*/
-
-/* compute key
-
-int size = sizeof(block);
-struct path_uri * r;
-
-GNUNET_CRYPTO_hash (path, len, r);
-*/
-
-
-/* Store a key-value pair in the map.
-
-struct path_uri *t;
-
-t = GNUNET_malloc (sizeof (struct path_uri));
-
-GNUNET_CONTAINER_multihashmap_put (map, t->path, t->source, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
-
-
-*/
/* main function of fuse */
diff --git a/src/ext/gnunet-fuse.h b/src/ext/gnunet-fuse.h
@@ -49,16 +49,18 @@ static char *directory;
/* struct containing mapped Path, with URI and other Information like Attributes etc. */
-struct path_uri
+struct GNUNET_FUSE_path_info
{
/* uri to corresponding path */
char* source;
/* pathname */
char* path;
/* key */
- int key;
+ GNUNET_HashCode hash;
/*name of temporary file */
char* tmpfile;
+/*file attributes*/
+ struct stat;
};
diff --git a/src/ext/readdir.c b/src/ext/readdir.c
@@ -27,15 +27,18 @@
* Introduced in version 2.3
*/
+//#include <string.h>
+//#include <errno.h>
+//#include <glib.h>
+//#include <GNUnet/gnunet_ecrs_lib.h>
+
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
-//#include <string.h>
-//#include <errno.h>
-//#include <glib.h>
+
#include <fuse.h>
-//#include <GNUnet/gnunet_ecrs_lib.h>
+
#include <gnunet-fuse.h>
#include <gnunet/gnunet_fs_service.h>
#include <gnunet/gnunet_container_lib.h>
@@ -67,6 +70,8 @@ static struct GNUNET_FS_Handle *ctx;
struct GNUNET_CONTAINER_MultiHashMap *map;
+struct GNUNET_FS_Uri *uri;
+
static void
@@ -164,13 +169,13 @@ return NULL;
void readdir_task (void *cls,
const struct GNUNET_SCHEDULER_TaskContext* tc)
{
- struct GNUNET_FS_Uri *uri;
+
char *emsg;
enum GNUNET_FS_DownloadOptions options;
- uri = GNUNET_FS_uri_parse(w->source, &emsg);
+
if (NULL == uri)
{
@@ -219,38 +224,36 @@ void readdir_task (void *cls,
int gn_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
- off_t offset, struct fuse_file_info *fi)
+ off_t offset, struct fuse_file_info *fi)
{
(void) fi;
(void) offset;
+ struct GNUNET_FUSE_path_info *r;
+ int len = strlen(path);
+ int exist = 0;
+ r = GNUNET_malloc (sizeof (struct GNUNET_FUSE_path_info));
- /* create MultiHashMap */
- unsigned int len = strlen();
-
- map = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MultiHashMap));
- map = GNUNET_CONTAINER_multihashmap_create (len);
-
+ exist = GNUNET_CONTAINER_multihashmap_contains (map, r->hash,);
+ if ( exist == GNUNET_NO)
- /* compute key */
- struct path_uri * r;
+/* compute key */
+ GNUNET_CRYPTO_hash (r->path, len, r->hash);
- GNUNET_CRYPTO_hash (r->path, len, r->key);
-
-
- /* find value with given key */
-
- w = GNUNET_malloc (sizeof (struct path_uri));
- w->tmpfile = GNUNET_DISK_mktemp("gnunet-fuse-tempfile");
- w->source = GNUNET_CONTAINER_multihashmap_get (map, w->path);
+/* Store a key-value pair in the map */
+ GNUNET_CONTAINER_multihashmap_put (map, directory, source, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+/* store to temporary file */
+ r->tmpfile = GNUNET_DISK_mktemp("gnunet-fuse-tempfile");
+/* find value with given key */
+ r->source = GNUNET_CONTAINER_multihashmap_get (map, r->path);
+/* parse uri from given source */
+ uri = GNUNET_FS_uri_parse(r->source, &emsg);
GNUNET_SCHEDULER_run(&readdir_task, NULL);
-
-
filler(buf, ".", NULL, 0);
filler(buf, "..", NULL, 0);