diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-06-17 10:08:15 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-06-17 10:08:15 +0000 |
commit | 0190de8cfcc807dee7239b58f5dd71a7fe9b8668 (patch) | |
tree | c9af5eb237c191a1cc7ee7dad6e16bcada501866 /src/fs/fs_download.c | |
parent | 8ba3b038c91aa62c23f10aaa89b8301df23847c3 (diff) | |
download | gnunet-0190de8cfcc807dee7239b58f5dd71a7fe9b8668.tar.gz gnunet-0190de8cfcc807dee7239b58f5dd71a7fe9b8668.zip |
-fixing #2426
Diffstat (limited to 'src/fs/fs_download.c')
-rw-r--r-- | src/fs/fs_download.c | 11 |
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 | ||