From 204e0a6b3e746dafb2812b7e6bdde2f068d1c9ec Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 14 Dec 2010 17:40:19 +0000 Subject: [PATCH] allow files of size 0 --- src/fs/fs_download.c | 28 +++++++++++++++++++++++++++- src/fs/fs_tree.c | 3 +-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c index 6943f10b5..942a77eee 100644 --- a/src/fs/fs_download.c +++ b/src/fs/fs_download.c @@ -1839,9 +1839,35 @@ void GNUNET_FS_download_start_task_ (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { - struct GNUNET_FS_DownloadContext *dc = cls; + struct GNUNET_FS_DownloadContext *dc = cls; + struct GNUNET_FS_ProgressInfo pi; + struct GNUNET_DISK_FileHandle *fh; dc->start_task = GNUNET_SCHEDULER_NO_TASK; + if (dc->length == 0) + { + /* no bytes required! */ + if (dc->filename != NULL) + { + fh = GNUNET_DISK_file_open (dc->filename != NULL + ? dc->filename + : dc->temp_filename, + GNUNET_DISK_OPEN_READWRITE | + GNUNET_DISK_OPEN_CREATE, + GNUNET_DISK_PERM_USER_READ | + GNUNET_DISK_PERM_USER_WRITE | + GNUNET_DISK_PERM_GROUP_READ | + GNUNET_DISK_PERM_OTHER_READ); + GNUNET_DISK_file_close (fh); + } + + pi.status = GNUNET_FS_STATUS_DOWNLOAD_COMPLETED; + GNUNET_FS_download_make_status_ (&pi, dc); + GNUNET_FS_download_sync_ (dc); + if (dc->parent != NULL) + check_completed (dc->parent); + return; + } schedule_block_download (dc, (dc->uri->type == chk) ? &dc->uri->data.chk.chk diff --git a/src/fs/fs_tree.c b/src/fs/fs_tree.c index 211714b86..05c9c55cd 100644 --- a/src/fs/fs_tree.c +++ b/src/fs/fs_tree.c @@ -173,7 +173,6 @@ GNUNET_FS_tree_encoder_create (struct GNUNET_FS_Handle *h, { struct GNUNET_FS_TreeEncoder *te; - GNUNET_assert (size > 0); te = GNUNET_malloc (sizeof (struct GNUNET_FS_TreeEncoder)); te->h = h; te->size = size; @@ -253,7 +252,7 @@ GNUNET_FS_tree_calculate_block_size (uint64_t fsize, uint64_t epos; unsigned int chks; - GNUNET_assert (offset < fsize); + GNUNET_assert (offset <= fsize); if (depth == totaldepth) { ret = DBLOCK_SIZE; -- 2.25.1