From baaea99839bab00b6ae03b9e7b63f9bb5146392e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 13:31:00 +0000 Subject: [PATCH 1/3] Initial plan From 7c6e884f9bb9be90e6c8f004539e3a86d6b2e887 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 5 Mar 2026 13:36:08 +0000 Subject: [PATCH 2/3] Initial plan for performance, statistical correctness, and compatibility fixes Co-authored-by: feinorgh <3132980+feinorgh@users.noreply.github.com> --- random | Bin 0 -> 35456 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 random diff --git a/random b/random new file mode 100755 index 0000000000000000000000000000000000000000..46d19ef3dc2efdde9f81f81fe49f5b207c04dac7 GIT binary patch literal 35456 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 Date: Thu, 5 Mar 2026 13:42:22 +0000 Subject: [PATCH 3/3] Fix performance, statistical correctness, and compatibility issues in random.c Co-authored-by: feinorgh <3132980+feinorgh@users.noreply.github.com> --- .gitignore | 1 + random | Bin 35456 -> 0 bytes random.c | 76 ++++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 .gitignore delete mode 100755 random diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a1e4bc5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +random diff --git a/random b/random deleted file mode 100755 index 46d19ef3dc2efdde9f81f81fe49f5b207c04dac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35456 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 0) { + number = malloc(sizeof(mpz_t) * invsize); + if (number == NULL) { + fprintf(stderr, "%s\n", strerror(errno)); + exit(1); + } + } void *root = NULL; size_t i = 0; for ( i = 0; i < invsize; i++ ) { mpz_init(number[i]); do { - random_integer(number[i], low, high); + random_integer(number[i], low); } while (tfind((void *)number[i], &root, compare) != NULL); tsearch((void *)number[i], &root, compare); } mpz_set(tmp, low); - while (mpz_cmp(tmp, high)) { + while (mpz_cmp(tmp, high) <= 0) { if (tfind((void *)tmp, &root, compare) == NULL) { - /* printf("%s\n", mpz_get_str(NULL, 10, tmp)); */ gmp_printf("%Zd\n", tmp); } mpz_add_ui(tmp, tmp, 1); } tdestroy(root, clear_number); - if (number != NULL) { - free(number); - } + free(number); } else { mpz_t *number = malloc(sizeof(mpz_t) * size_of_set); if (number == NULL) { @@ -186,16 +194,14 @@ generate_series(size_t size_of_set, mpz_t low, mpz_t high) for ( i = 0; i < size_of_set; i++ ) { mpz_init(number[i]); do { - random_integer(number[i], low, high); + random_integer(number[i], low); } while (tfind((void *)number[i], &root, compare) != NULL); tsearch((void *)number[i], &root, compare); } twalk(root, treeaction); tdestroy(root, clear_number); - if (number != NULL) { - free(number); - } + free(number); } mpz_clear(tmp); } @@ -209,7 +215,11 @@ init_random(void) mpz_init(seed); size_t count = 256; /* We read this many bytes from /dev/urandom */ - char *seedstart = malloc(count*sizeof(char*) + 1); + char *seedstart = malloc(count + 1); + if (seedstart == NULL) { + fprintf(stderr, "%s\n", strerror(errno)); + exit(1); + } char *filename; if (userandom) { @@ -219,9 +229,30 @@ init_random(void) } int devrandom = open(filename, O_RDONLY); - read(devrandom, seedstart, count); + if (devrandom < 0) { + fprintf(stderr, "%s: %s\n", filename, strerror(errno)); + free(seedstart); + exit(1); + } + size_t total = 0; + while (total < count) { + ssize_t n = read(devrandom, seedstart + total, count - total); + if (n < 0) { + fprintf(stderr, "%s: %s\n", filename, strerror(errno)); + free(seedstart); + close(devrandom); + exit(1); + } + if (n == 0) { + fprintf(stderr, "%s: unexpected end of file\n", filename); + free(seedstart); + close(devrandom); + exit(1); + } + total += (size_t)n; + } close(devrandom); - mpz_import(seed, 1, 1, 1, 0, 0, seedstart); + mpz_import(seed, count, 1, sizeof(char), 0, 0, seedstart); free(seedstart); gmp_randseed(state, seed); @@ -345,13 +376,15 @@ parse_options(int argc, char * const argv[]) break; case 'r': userandom = 1; + break; case '?': break; } } - mpz_init(range); + /* range = high - low + 1 (total count of integers in the inclusive range) */ mpz_sub(range, high, low); - if(mpz_cmp(arg_count, range) >= 0) { + mpz_add_ui(range, range, 1); + if(mpz_cmp(arg_count, range) > 0) { fprintf(stderr, "Error: Size given (%s) exceeds range (%s).\n" "No unique random numbers can be generated.\n", mpz_get_str(NULL, 10, arg_count), @@ -369,6 +402,7 @@ main(int argc, const char **argv) { mpz_init_set_str(low, "1", 10); mpz_init_set_str(high, "100", 10); + mpz_init(range); parse_options(argc, (char * const*)argv); init_random(); generate_series(size_of_set, low, high);