Skip to content

Commit d38958f

Browse files
committed
shuf: adapt to API changes of rand
1 parent 14ce43f commit d38958f

File tree

2 files changed

+13
-23
lines changed

2 files changed

+13
-23
lines changed

src/uu/shuf/src/rand_read_adapter.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
use std::fmt;
1717
use std::io::Read;
1818

19-
use rand_core::{impls, Error, RngCore};
19+
use rand_core::{impls, RngCore};
2020

2121
/// An RNG that reads random bytes straight from any type supporting
2222
/// [`std::io::Read`], for example files.
@@ -34,7 +34,6 @@ use rand_core::{impls, Error, RngCore};
3434
/// The other [`RngCore`] methods will panic in case of an error.
3535
///
3636
/// [`OsRng`]: rand::rngs::OsRng
37-
/// [`try_fill_bytes`]: RngCore::try_fill_bytes
3837
#[derive(Debug)]
3938
pub struct ReadRng<R> {
4039
reader: R,
@@ -45,6 +44,14 @@ impl<R: Read> ReadRng<R> {
4544
pub fn new(r: R) -> Self {
4645
Self { reader: r }
4746
}
47+
48+
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), ReadError> {
49+
if dest.is_empty() {
50+
return Ok(());
51+
}
52+
// Use `std::io::read_exact`, which retries on `ErrorKind::Interrupted`.
53+
self.reader.read_exact(dest).map_err(|e| ReadError(e))
54+
}
4855
}
4956

5057
impl<R: Read> RngCore for ReadRng<R> {
@@ -61,16 +68,6 @@ impl<R: Read> RngCore for ReadRng<R> {
6168
panic!("reading random bytes from Read implementation failed; error: {err}");
6269
});
6370
}
64-
65-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
66-
if dest.is_empty() {
67-
return Ok(());
68-
}
69-
// Use `std::io::read_exact`, which retries on `ErrorKind::Interrupted`.
70-
self.reader
71-
.read_exact(dest)
72-
.map_err(|e| Error::new(ReadError(e)))
73-
}
7471
}
7572

7673
/// `ReadRng` error type

src/uu/shuf/src/shuf.rs

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
use clap::{crate_version, Arg, ArgAction, Command};
99
use memchr::memchr_iter;
10-
use rand::prelude::SliceRandom;
10+
use rand::prelude::{IndexedRandom, SliceRandom};
1111
use rand::{Rng, RngCore};
1212
use std::collections::HashSet;
1313
use std::fs::File;
@@ -299,7 +299,7 @@ impl Shufable for RangeInclusive<usize> {
299299
self.is_empty()
300300
}
301301
fn choose(&self, rng: &mut WrappedRng) -> usize {
302-
rng.gen_range(self.clone())
302+
rng.random_range(self.clone())
303303
}
304304
type PartialShuffleIterator<'b>
305305
= NonrepeatingIterator<'b>
@@ -348,7 +348,7 @@ impl<'a> NonrepeatingIterator<'a> {
348348
match &mut self.buf {
349349
NumberSet::AlreadyListed(already_listed) => {
350350
let chosen = loop {
351-
let guess = self.rng.gen_range(self.range.clone());
351+
let guess = self.rng.random_range(self.range.clone());
352352
let newly_inserted = already_listed.insert(guess);
353353
if newly_inserted {
354354
break guess;
@@ -435,7 +435,7 @@ fn shuf_exec(input: &mut impl Shufable, opts: Options) -> UResult<()> {
435435
.map_err_context(|| format!("failed to open random source {}", r.quote()))?;
436436
WrappedRng::RngFile(rand_read_adapter::ReadRng::new(file))
437437
}
438-
None => WrappedRng::RngDefault(rand::thread_rng()),
438+
None => WrappedRng::RngDefault(rand::rng()),
439439
};
440440

441441
if opts.repeat {
@@ -520,13 +520,6 @@ impl RngCore for WrappedRng {
520520
Self::RngDefault(r) => r.fill_bytes(dest),
521521
}
522522
}
523-
524-
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand::Error> {
525-
match self {
526-
Self::RngFile(r) => r.try_fill_bytes(dest),
527-
Self::RngDefault(r) => r.try_fill_bytes(dest),
528-
}
529-
}
530523
}
531524

532525
#[cfg(test)]

0 commit comments

Comments
 (0)