aboutsummaryrefslogtreecommitdiff
path: root/src/fs/fs_download.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-06-17 10:08:15 +0000
committerChristian Grothoff <christian@grothoff.org>2012-06-17 10:08:15 +0000
commit0190de8cfcc807dee7239b58f5dd71a7fe9b8668 (patch)
treec9af5eb237c191a1cc7ee7dad6e16bcada501866 /src/fs/fs_download.c
parent8ba3b038c91aa62c23f10aaa89b8301df23847c3 (diff)
downloadgnunet-0190de8cfcc807dee7239b58f5dd71a7fe9b8668.tar.gz
gnunet-0190de8cfcc807dee7239b58f5dd71a7fe9b8668.zip
-fixing #2426
Diffstat (limited to 'src/fs/fs_download.c')
-rw-r--r--src/fs/fs_download.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c
index fbbbc2f23..e31575cef 100644
--- a/src/fs/fs_download.c
+++ b/src/fs/fs_download.c
@@ -1121,7 +1121,7 @@ process_result_with_request (void *cls, const struct GNUNET_HashCode * key,
1121 { 1121 {
1122 /* 'chkarr' does not have enough space for this chk_idx; 1122 /* 'chkarr' does not have enough space for this chk_idx;
1123 internal error! */ 1123 internal error! */
1124 GNUNET_break (0); 1124 GNUNET_break (0); GNUNET_assert (0);
1125 dc->emsg = GNUNET_strdup (_("internal error decoding tree")); 1125 dc->emsg = GNUNET_strdup (_("internal error decoding tree"));
1126 goto signal_error; 1126 goto signal_error;
1127 } 1127 }
@@ -1536,15 +1536,20 @@ create_download_request (struct DownloadRequest *parent,
1536 * from the start (rounded down), either because of the requested 1536 * from the start (rounded down), either because of the requested
1537 * file offset or because this IBlock is further along */ 1537 * file offset or because this IBlock is further along */
1538 if (dr_offset < file_start_offset) 1538 if (dr_offset < file_start_offset)
1539 head_skip = file_start_offset / child_block_size; 1539 {
1540 head_skip = (file_start_offset - dr_offset) / child_block_size;
1541 }
1540 else 1542 else
1543 {
1541 head_skip = 0; 1544 head_skip = 0;
1545 }
1542 1546
1543 /* calculate index of last block at this level that is interesting (rounded up) */ 1547 /* calculate index of last block at this level that is interesting (rounded up) */
1544 dr->num_children = (file_start_offset + desired_length - dr_offset) / child_block_size; 1548 dr->num_children = (file_start_offset + desired_length - dr_offset) / child_block_size;
1545 if (dr->num_children * child_block_size < 1549 if (dr->num_children * child_block_size <
1546 file_start_offset + desired_length - dr_offset) 1550 file_start_offset + desired_length - dr_offset)
1547 dr->num_children++; /* round up */ 1551 dr->num_children++; /* round up */
1552 GNUNET_assert (dr->num_children > head_skip);
1548 dr->num_children -= head_skip; 1553 dr->num_children -= head_skip;
1549 if (dr->num_children > CHK_PER_INODE) 1554 if (dr->num_children > CHK_PER_INODE)
1550 dr->num_children = CHK_PER_INODE; /* cap at max */ 1555 dr->num_children = CHK_PER_INODE; /* cap at max */
@@ -1562,10 +1567,12 @@ create_download_request (struct DownloadRequest *parent,
1562 dr->children = 1567 dr->children =
1563 GNUNET_malloc (dr->num_children * sizeof (struct DownloadRequest *)); 1568 GNUNET_malloc (dr->num_children * sizeof (struct DownloadRequest *));
1564 for (i = 0; i < dr->num_children; i++) 1569 for (i = 0; i < dr->num_children; i++)
1570 {
1565 dr->children[i] = 1571 dr->children[i] =
1566 create_download_request (dr, i + head_skip, depth - 1, 1572 create_download_request (dr, i + head_skip, depth - 1,
1567 dr_offset + (i + head_skip) * child_block_size, 1573 dr_offset + (i + head_skip) * child_block_size,
1568 file_start_offset, desired_length); 1574 file_start_offset, desired_length);
1575 }
1569 return dr; 1576 return dr;
1570} 1577}
1571 1578