]> infiniteadaptability.org Git - seeder/commitdiff
...
authoralex <[email protected]>
Thu, 14 Oct 2021 22:34:01 +0000 (15:34 -0700)
committeralex <[email protected]>
Thu, 14 Oct 2021 22:34:01 +0000 (15:34 -0700)
inc/hashmap.h
inc/torrent.h
inc/tree.h
src/add.c
src/hashmap.c
src/tree.c

index d947918f17c70fbe96e5b158c0751c31d502fbab..d30d22f80cfe14e316f7f98d559f8ac79b5ebddf 100644 (file)
@@ -10,10 +10,10 @@ struct hash_map {
 };
 
 void hashmap_clear(struct hash_map*);
-void *hashmap_find(struct hash_map*,void*,size_t);
+void *hashmap_find(struct hash_map*,const void*,size_t);
 void hashmap_free(struct hash_map*);
 int hashmap_init(struct hash_map**,size_t);
 int hashmap_insert(struct hash_map*,const void*,size_t,void*);
-void *hashmap_remove(struct hash_map*,void*,size_t);
+void *hashmap_remove(struct hash_map*,const void*,size_t);
 
 #endif
index 7ba4a411ddf3d68562871186bfb10c814e7cddd5..46cce890e81dde7b8f8f08c229820f355461ff66 100644 (file)
@@ -16,6 +16,7 @@ struct torrent {
        struct hash_map *files;
 };
 
+int torrent_add(struct torrent*,struct file*);
 void torrent_free(struct torrent*);
 int torrent_init(struct torrent**,const char*,const char*);
 
index 3ca98d090eaafee80c3d281d8905e85112bd01d0..a27273ba95155cd49e17c8e0359b4ef9815052c4 100644 (file)
@@ -12,6 +12,7 @@ struct tree {
        size_t directory_count;
 };
 
+int tree_add(struct tree*,struct file*);
 void tree_free(struct tree*);
 int tree_init(struct tree**);
 
index d35234045c396452b464cfa3bc1562bc05923b33..8f263417f83d65b53874f32df2f2884300ce16da 100644 (file)
--- a/src/add.c
+++ b/src/add.c
@@ -79,9 +79,15 @@ static int add_queue_resize(size_t new_size) {
 }
 
 static int add_to_queue(struct file *to_add) {
+       struct file *p;
        int ret;
+       size_t len;
+
+       len = strlen(to_add->path);
+       p = hashmap_find(add_queue,to_add->path,len);
+       if(p!=NULL) { return 0; }
 
-       while((ret = hashmap_insert(add_queue,path,strlen(path),to_add))<=0) {
+       while((ret = hashmap_insert(add_queue,to_add->path,len,to_add))<=0) {
                if(ret<0) { return -1; }
                if(add_queue_resize(add_queue->size<<1)<0) { return -1; }
        }
index 0825f0e5b5b989231591560b5b7851f8e4d259f8..7dfdf06e6f5077ea952131f8b6441d09a8093da8 100644 (file)
@@ -6,7 +6,7 @@ void hashmap_clear(struct hash_map *p) {
        }
 }
 
-void *hashmap_find(struct hash_map *p, void *key, size_t key_size) {
+void *hashmap_find(struct hash_map *p, const void *key, size_t key_size) {
        unsigned char hash[crypto_shorthash_BYTES];
        size_t index;
        
@@ -66,7 +66,7 @@ int hashmap_insert(struct hash_map *p, const void *key, size_t key_size, void *v
        return 1;
 }
 
-void *hashmap_remove(struct hash_map *p, void *key, size_t key_size) {
+void *hashmap_remove(struct hash_map *p, const void *key, size_t key_size) {
        unsigned char hash[crypto_shorthash_BYTES];
        size_t index;
        void *removed;
index 394338229296f705bddb068252937105fbab5fec..9b826a08197b40432f05518ed88709b1afe77408 100644 (file)
@@ -1,6 +1,54 @@
 #include<tree.h>
 
-int tree_add(struct tree *p, struct file *p) {
+static int tree_add_directory(struct tree*,const char*);
+static int tree_add_file(struct tree*,struct file*);
+
+int tree_add(struct tree *root, struct file *p) {
+       char *str, *p, *prev;
+       struct tree *tree;
+       int index;
+
+       if(NULL==root) { return -1; }
+       tree = root;
+
+       str = strdup(p->path);
+       if(NULL==str) { return -1; }
+
+       prev = str;
+       p = strtok(str,"/");
+       while(p) {
+               if((index = tree_find_directory(tree,p))<0) {
+                       if((index = tree_add_directory(p))<0) { goto clean; }
+               }
+               tree = tree->directories[index];
+
+               prev = p;
+               p = strtok(NULL,"/");
+       }
+
+       if(tree_add_file(tree,prev)<0) { goto clean; }
+
+       free(str);
+       
+       return 1;
+       clean:
+               free(str);
+               return -1;
+}
+
+static int tree_add_directory(struct tree *p, const char *dirname) {
+       return -1;
+}
+
+static int tree_add_file(struct tree *tree, struct file *p) {
+       return -1;
+}
+
+int tree_find_directory(struct tree *p, const char *dirname) {
+       return -1;
+}
+
+int tree_find_entry(struct tree *p, const char *filename) {
        return -1;
 }