diff options
Diffstat (limited to 'src/plugins/fs/download.c')
-rw-r--r-- | src/plugins/fs/download.c | 39 |
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"), |