This ensures the requested amount of bytes is read. Also remove /dev/random as it's no longer necessary.
Unified · Split
| @@ -49,17 +49,20 @@ · 48 unmodified lines | |||
| 49 | static int read_random(uint32_t *dst, const char *file) | 49 | static int read_random(uint32_t *dst, const char *file) |
| 50 | { | 50 | { |
| 51 | #if HAVE_UNISTD_H | 51 | #if HAVE_UNISTD_H |
| 52 | int fd = avpriv_open(file, O_RDONLY); | 52 | FILE *fp = avpriv_fopen_utf8(file, "r"); |
| 53 | int err = -1; | 53 | size_t err; |
| 54 | 54 | ||
| 55 | if (fd == -1) | 55 | if (!fp) |
| 56 | return -1; | 56 | return AVERROR_UNKNOWN; |
| 57 | err = read(fd, dst, sizeof(*dst)); | 57 | err = fread(dst, 1, sizeof(*dst), fp); |
| 58 | close(fd); | 58 | fclose(fp); |
| 59 | 59 | ||
| 60 | return err; | 60 | if (err != sizeof(*dst)) |
| 61 | return AVERROR_UNKNOWN; | ||
| 62 | |||
| 63 | return 0; | ||
| 61 | #else | 64 | #else |
| 62 | return -1; | 65 | return AVERROR(ENOSYS); |
| 63 | #endif | 66 | #endif |
| 64 | } | 67 | } |
| 65 | 68 | ||
| @@ -138,9 +141,7 @@ uint32_t av_get_random_seed(void) · 72 unmodified lines | |||
| 138 | return arc4random(); | 141 | return arc4random(); |
| 139 | #endif | 142 | #endif |
| 140 | 143 | ||
| 141 | if (read_random(&seed, "/dev/urandom") == sizeof(seed)) | 144 | if (!read_random(&seed, "/dev/urandom")) |
| 142 | return seed; | ||
| 143 | if (read_random(&seed, "/dev/random") == sizeof(seed)) | ||
| 144 | return seed; | 145 | return seed; |
| 145 | return get_generic_seed(); | 146 | return get_generic_seed(); |
| 146 | } | 147 | } |