diff --git a/tools/widl/utils.c b/tools/widl/utils.c index 5dce1a0231c..d9e18553132 100644 --- a/tools/widl/utils.c +++ b/tools/widl/utils.c @@ -477,6 +477,8 @@ void align_output( unsigned int align ) /* xorshift* random generator. Source: https://en.wikipedia.org/wiki/Xorshift#xorshift* */ static uint64_t pseudorandom_state = 1; +static const char* pseudorandom_source = NULL; +static size_t pseudorandom_source_size = 0; static uint64_t pseudorandom_algo(uint64_t* generator_state, uint64_t add_to_state) { @@ -543,6 +545,16 @@ int pseudorandom_tempfile(char* file) sleep(5); counter++; } while (counter <= 12); + + /* add deebug info */ + if ((result != -1) && (getenv("SOURCE_RANDOM_DEBUG") != NULL)) + { + debug_filename = strmake("%s.random_debug", file); + debug_file = fopen(debug_filename, "wb"); + fwrite(pseudorandom_source, 1, pseudorandom_source_size, debug_file); + fclose(debug_file); + free(debug_filename); + } return result; } @@ -625,6 +637,22 @@ void init_random_generator(int argc, char **argv) pseudorandom_algo(&generator_state, ((unsigned char*) argv_data)[j]); } + /* add debug if required */ + if (getenv("SOURCE_RANDOM_DEBUG") != NULL) + { + /* gen field */ + pseudorandom_source_size = env_size + argv_size + sizeof(generator_state); + buffer_pos = malloc(sizeof(char) * pseudorandom_source_size); + pseudorandom_source = buffer_pos; + + /* copy data into it */ + memcpy(buffer_pos, env_data, env_size); + buffer_pos += env_size; + memcpy(buffer_pos, argv_data, argv_size); + buffer_pos += argv_size; + memcpy(buffer_pos, &generator_state, sizeof(generator_state)); + } + /* set state and free rest */ free(env_data); free(argv_data);