Skip to content

Commit

Permalink
dev: random should copy size bytes of data to buffer (RT-Thread#9012)
Browse files Browse the repository at this point in the history
  • Loading branch information
polarvid authored May 30, 2024
1 parent e7cddf3 commit e0df85c
Showing 1 changed file with 40 additions and 6 deletions.
46 changes: 40 additions & 6 deletions components/drivers/misc/rt_random.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,26 @@ static rt_uint16_t calc_random(void)

static rt_ssize_t random_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
{
rt_uint16_t rand = calc_random();
ssize_t ret = sizeof(rand);
rt_memcpy(buffer, &rand, ret);
rt_uint16_t rand;
ssize_t ret = 0;
while (size >= sizeof(rand))
{
/* update rand */
rand = calc_random();

*(rt_uint16_t *)buffer = rand;
buffer = (char *)buffer + sizeof(rand);
ret += sizeof(rand);
size -= sizeof(rand);
}

if (size)
{
rand = calc_random();
memcpy(buffer, &rand, size);
ret += size;
}

return ret;
}

Expand Down Expand Up @@ -95,9 +112,26 @@ static rt_uint16_t calc_urandom(void)

static rt_ssize_t random_uread(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
{
rt_uint16_t rand = calc_urandom();
ssize_t ret = sizeof(rand);
rt_memcpy(buffer, &rand, ret);
rt_uint16_t rand;
ssize_t ret = 0;
while (size >= sizeof(rand))
{
/* update rand */
rand = calc_urandom();

*(rt_uint16_t *)buffer = rand;
buffer = (char *)buffer + sizeof(rand);
ret += sizeof(rand);
size -= sizeof(rand);
}

if (size)
{
rand = calc_urandom();
memcpy(buffer, &rand, size);
ret += size;
}

return ret;
}

Expand Down

0 comments on commit e0df85c

Please sign in to comment.