...
authoralex <[email protected]>
Thu, 25 Nov 2021 21:21:21 +0000 (13:21 -0800)
committeralex <[email protected]>
Thu, 25 Nov 2021 21:21:21 +0000 (13:21 -0800)
inc/torrent.h
inc/tree.h
src/add.c
src/torrent.c
src/tree.c

index 2befb2eb988aa8cb5cf34f9ceb6142230ad66590..0bf6e4a2c3c63c2bb08cb5ce0d2d04d1107a6e69 100644 (file)
@@ -17,7 +17,7 @@ struct torrent {
        int watch_fd;
 };
 
-int torrent_add(struct torrent*,struct file*);
+int torrent_add(struct torrent*,const char*,struct file*);
 void torrent_free(struct torrent*);
 int torrent_init(struct torrent**,const char*,const char*);
 
index 005a491b932d0bff012a73e4c39bcb7467e9f602..7f74d8485c92e7f3c4eba6641f3717092ec18590 100644 (file)
@@ -18,7 +18,7 @@ struct tree {
        int watch_fd;
 };
 
-int tree_add(struct tree*,struct file*);
+int tree_add(struct tree*,const char*,struct file*);
 void tree_entry_free(struct tree_entry*);
 int tree_entry_init(struct tree_entry**, struct file*);
 void tree_free(struct tree*);
index 8990296a05578bb2f6ab02569d98761d893b1d9a..450768f1b0634dff6a4b9fde560ab002154fa50c 100644 (file)
--- a/src/add.c
+++ b/src/add.c
@@ -40,16 +40,16 @@ int add() {
        return 1;
 }
 
-static struct file *get_next() {
-       struct file *p;
-       while(add_queue_index<add_queue->size) {
-               p = add_queue->map[add_queue_index];
-               add_queue_index++;
+static int add_find_all(struct torrent *p) {
+       log_info(ADD_MESSAGE_ADDING_TORRENT,p->root,p->name);
+       current_torrent = p;
 
-               if(p!=NULL) { return p; }
+       if(ftw(p->root,&ftw_helper,64)<0) {
+               perror("ftw");
+               return -1;
        }
 
-       return NULL;
+       return 1;
 }
 
 static void *add_hash(void *unused) {
@@ -74,19 +74,6 @@ static void *add_hash(void *unused) {
        return NULL;
 }
 
-
-static int add_find_all(struct torrent *p) {
-       log_info(ADD_MESSAGE_ADDING_TORRENT,p->root,p->name);
-       current_torrent = p;
-
-       if(ftw(p->root,&ftw_helper,64)<0) {
-               perror("ftw");
-               return -1;
-       }
-
-       return 1;
-}
-
 static int add_queue_resize(size_t new_size) {
        struct file *p;
        struct hash_map *new, *old;
@@ -139,6 +126,7 @@ static int add_to_queue(struct file *to_add) {
 
 static int ftw_helper(const char *path, const struct stat *st, int typeflag) {
        struct file *to_add;
+       const char *p;
 
        if(typeflag!=FTW_F) { return 0; }
        switch(global_options.file_filter) {
@@ -151,10 +139,28 @@ static int ftw_helper(const char *path, const struct stat *st, int typeflag) {
        }
 
        if(file_init(&to_add,path)<0) { return -1; }
-
        if(add_to_queue(to_add)<0) { return -1; }
 
-       if(torrent_add(current_torrent,to_add)<0) { return -1; }
+       p = strstr(path,current_torrent->root);
+       if((p!=NULL)&&(p==path)) {
+               p += strlen(current_torrent->root);
+       } else {
+               p = path;
+       }
+
+       if(torrent_add(current_torrent,p,to_add)<0) { return -1; }
 
        return 0;
 }
+
+static struct file *get_next() {
+       struct file *p;
+       while(add_queue_index<add_queue->size) {
+               p = add_queue->map[add_queue_index];
+               add_queue_index++;
+
+               if(p!=NULL) { return p; }
+       }
+
+       return NULL;
+}
index a53de68fb0bef3077a04b095d1dcc4b85387bf11..c9f6d648674db9b601977f618114957083d28a12 100644 (file)
@@ -1,14 +1,13 @@
 #include<torrent.h>
 
-struct torrent **torrents;
-
 static int torrent_add_file(struct torrent *p, struct file *f);
 
-int torrent_add(struct torrent *p, struct file *f) {
+int torrent_add(struct torrent *p, const char *path, struct file *f) {
        if(NULL==p) { return -1; }
        if(NULL==f) { return -1; }
+       if(NULL==path) { return -1; }
 
-       if(tree_add(p->tree,f)<0) { return -1; }
+       if(tree_add(p->tree,path,f)<0) { return -1; }
        if(torrent_add_file(p,f)<0) { return -1; }
 
        return 1;
index 6aacd624698f4b2ce7346158d97b75d071e2d2e4..6960780547802a8d8b2453352c79181e5b871680 100644 (file)
@@ -3,16 +3,17 @@
 static struct tree* tree_add_directory(struct tree*,const char*);
 static int tree_add_file(struct tree*,struct file*);
 
-int tree_add(struct tree *root, struct file *to_add) {
+int tree_add(struct tree *root, const char *path, struct file *to_add) {
        char *str, *p, *prev;
        struct tree *tree;
 
        if(NULL==root) { return -1; }
        if(NULL==to_add) { return -1; }
+       if((NULL==path)||(strlen(path)<=0)) { return -1; }
 
        tree = root;
 
-       str = strdup(to_add->path);
+       str = strdup(path);
        if(NULL==str) { return -1; }
 
        prev = NULL;