aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/fs/download.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/fs/download.c')
-rw-r--r--src/plugins/fs/download.c39
1 files changed, 32 insertions, 7 deletions
diff --git a/src/plugins/fs/download.c b/src/plugins/fs/download.c
index e5e16ab0..eab6ed20 100644
--- a/src/plugins/fs/download.c
+++ b/src/plugins/fs/download.c
@@ -99,7 +99,10 @@ refreshDirectoryViewFromDisk(DownloadList * list) {
99 unsigned long long size; 99 unsigned long long size;
100 char * data; 100 char * data;
101 int fd; 101 int fd;
102 char * fn;
102 struct ECRS_MetaData * meta; 103 struct ECRS_MetaData * meta;
104 struct stat buf;
105 const char * f;
103 106
104 if ( (list->is_directory != YES) || 107 if ( (list->is_directory != YES) ||
105 (list->searchList == NULL) || 108 (list->searchList == NULL) ||
@@ -107,18 +110,37 @@ refreshDirectoryViewFromDisk(DownloadList * list) {
107 (! gtk_tree_row_reference_valid(list->searchViewRowReference)) ) 110 (! gtk_tree_row_reference_valid(list->searchViewRowReference)) )
108 return; 111 return;
109 112
110 if (OK != disk_file_size(ectx, 113 if (0 != stat(list->filename,
111 list->filename, 114 &buf))
112 &size,
113 YES))
114 return; 115 return;
115 if (size == 0) 116 if (S_ISDIR(buf.st_mode)) {
117 fn = MALLOC(strlen(list->filename) + strlen(GNUNET_DIRECTORY_EXT) + 1);
118 strcpy(fn, list->filename);
119 if (fn[strlen(fn)-1] == '/')
120 fn[strlen(fn)-1] = '\0';
121 strcat(fn, GNUNET_DIRECTORY_EXT);
122 if (0 != stat(list->filename,
123 &buf)) {
124 FREE(fn);
125 return;
126 }
127 f = fn;
128 } else {
129 fn = NULL;
130 f = list->filename;
131 }
132 size = buf.st_size;
133 if (size == 0) {
134 FREENONNULL(fn);
116 return; 135 return;
136 }
117 fd = disk_file_open(ectx, 137 fd = disk_file_open(ectx,
118 list->filename, 138 list->filename,
119 O_RDONLY); 139 O_RDONLY);
120 if (fd == -1) 140 if (fd == -1) {
141 FREENONNULL(fn);
121 return; 142 return;
143 }
122 data = MMAP(NULL, 144 data = MMAP(NULL,
123 size, 145 size,
124 PROT_READ, 146 PROT_READ,
@@ -130,10 +152,12 @@ refreshDirectoryViewFromDisk(DownloadList * list) {
130 GE_LOG_STRERROR_FILE(ectx, 152 GE_LOG_STRERROR_FILE(ectx,
131 GE_ERROR | GE_ADMIN | GE_BULK, 153 GE_ERROR | GE_ADMIN | GE_BULK,
132 "mmap", 154 "mmap",
133 list->filename); 155 f);
134 CLOSE(fd); 156 CLOSE(fd);
157 FREENONNULL(fn);
135 return; 158 return;
136 } 159 }
160 FREENONNULL(fn);
137 meta = NULL; 161 meta = NULL;
138 ECRS_listDirectory(ectx, 162 ECRS_listDirectory(ectx,
139 data, 163 data,
@@ -613,6 +637,7 @@ initiateDownload(GtkTreeModel * model,
613 NULL)) { 637 NULL)) {
614 addLogEntry(_("Downloading `%s'"), 638 addLogEntry(_("Downloading `%s'"),
615 idc_name); 639 idc_name);
640 /* FIXME! DEADLOCK! */
616 FSUI_startDownload(ctx, 641 FSUI_startDownload(ctx,
617 getSpinButtonValue(searchContext->searchXML, 642 getSpinButtonValue(searchContext->searchXML,
618 "downloadAnonymitySpinButton"), 643 "downloadAnonymitySpinButton"),