Skip to content

Commit

Permalink
Fix a bug in lengths computation
Browse files Browse the repository at this point in the history
  • Loading branch information
ikatson committed Oct 28, 2021
1 parent 37af0a4 commit cc8011c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
2 changes: 2 additions & 0 deletions crates/librqbit/src/file_ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ impl<'a, Sha1Impl: ISha1> FileOps<'a, Sha1Impl> {
let mut have_bytes = 0u64;
let mut needed_bytes = 0u64;

#[derive(Debug)]
struct CurrentFile<'a> {
index: usize,
fd: &'a Arc<Mutex<File>>,
Expand Down Expand Up @@ -132,6 +133,7 @@ impl<'a, Sha1Impl: ISha1> FileOps<'a, Sha1Impl> {
while piece_remaining > 0 {
let mut to_read_in_file =
std::cmp::min(current_file.remaining(), piece_remaining as u64) as usize;

while to_read_in_file == 0 {
current_file = file_iterator
.next()
Expand Down
12 changes: 11 additions & 1 deletion crates/librqbit_core/src/lengths.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,16 @@ impl Lengths {
piece_length
);
}
if total_length == 0 {
anyhow::bail!("torrent with 0 length")
}
let total_pieces = ceil_div_u64(total_length as u64, piece_length as u64) as u32;
Ok(Self {
chunk_length,
piece_length,
total_length,
chunks_per_piece: ceil_div_u64(piece_length as u64, chunk_length as u64) as u32,
last_piece_id: ((total_length + 1) / piece_length as u64) as u32,
last_piece_id: total_pieces - 1,
last_piece_length: last_element_size_u64(total_length, piece_length as u64) as u32,
})
}
Expand Down Expand Up @@ -248,6 +252,12 @@ mod tests {
assert_eq!(l.total_pieces(), 4480);
}

#[test]
fn test_total_pieces_2() {
let l = Lengths::new(4148166656, 2097152, None).unwrap();
assert_eq!(l.total_pieces(), 1978);
}

#[test]
fn test_piece_length() {
let l = make_lengths();
Expand Down

0 comments on commit cc8011c

Please sign in to comment.