X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=2692e69c6b3274b6ad957187b9d30ac95fdd69b9;hp=e27c3e7e60280e71a295dbd27206f69e6345530d;hb=5e195517fdcbad3043eff72d91399f6a5e604d8b;hpb=3e44421a400e6349d1e97f047391489bc1b396fb diff --git a/src/libgame/misc.c b/src/libgame/misc.c index e27c3e7e..2692e69c 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -557,7 +557,12 @@ boolean getTokenValueFromString(char *string, char **token, char **value) #define UUID_CHARS (UUID_BYTES * 2) #define UUID_LENGTH (UUID_CHARS + 4) -char *getUUID(void) +static unsigned int uuid_random_function(int max) +{ + return GetBetterRandom(max); +} + +char *getUUIDExt(unsigned int (*random_function)(int max)) { static char uuid[UUID_LENGTH + 1]; int data[UUID_BYTES]; @@ -565,7 +570,7 @@ char *getUUID(void) int i; for (i = 0; i < UUID_BYTES; i++) - data[i] = GetSimpleRandom(256); + data[i] = random_function(256); data[6] = 0x40 | (data[6] & 0x0f); data[8] = 0x80 | (data[8] & 0x3f); @@ -582,6 +587,11 @@ char *getUUID(void) return uuid; } +char *getUUID(void) +{ + return getUUIDExt(uuid_random_function); +} + // ---------------------------------------------------------------------------- // counter functions @@ -746,7 +756,7 @@ void SkipUntilDelayReached(unsigned int *counter_var, unsigned int delay, // random generator functions // ---------------------------------------------------------------------------- -unsigned int init_random_number(int nr, int seed) +static unsigned int init_random_number_ext(int nr, int seed) { if (seed == NEW_RANDOMIZE) { @@ -774,9 +784,32 @@ unsigned int init_random_number(int nr, int seed) return (unsigned int) seed; } +static unsigned int prng_seed_gettimeofday(void) +{ + struct timeval current_time; + + gettimeofday(¤t_time, NULL); + + prng_seed_bytes(¤t_time, sizeof(current_time)); + + return 0; +} + +unsigned int init_random_number(int nr, int seed) +{ + return (nr == RANDOM_BETTER ? prng_seed_gettimeofday() : + init_random_number_ext(nr, seed)); +} + +static unsigned int get_random_number_ext(int nr) +{ + return (nr == RANDOM_BETTER ? prng_get_uint() : + random_linux_libc(nr)); +} + unsigned int get_random_number(int nr, int max) { - return (max > 0 ? random_linux_libc(nr) % max : 0); + return (max > 0 ? get_random_number_ext(nr) % max : 0); } @@ -1300,6 +1333,8 @@ void GetOptions(int argc, char *argv[], options.special_flags = NULL; options.debug_mode = NULL; options.player_name = NULL; + options.identifier = NULL; + options.level_nr = NULL; options.mytapes = FALSE; options.serveronly = FALSE; @@ -1446,6 +1481,24 @@ void GetOptions(int argc, char *argv[], if (option_arg == next_option) options_left++; } + else if (strncmp(option, "-identifier", option_len) == 0) + { + if (option_arg == NULL) + FailWithHelp("option '%s' requires an argument", option_str); + + options.identifier = getStringCopy(option_arg); + if (option_arg == next_option) + options_left++; + } + else if (strncmp(option, "-level-nr", option_len) == 0) + { + if (option_arg == NULL) + FailWithHelp("option '%s' requires an argument", option_str); + + options.level_nr = getStringCopy(option_arg); + if (option_arg == next_option) + options_left++; + } else if (strncmp(option, "-verbose", option_len) == 0) { options.verbose = TRUE; @@ -2766,6 +2819,22 @@ int copyFile(char *filename_from, char *filename_to) return 0; } +boolean touchFile(char *filename) +{ + FILE *file; + + if (!(file = fopen(filename, MODE_WRITE))) + { + Warn("cannot touch file '%s'", filename); + + return FALSE; + } + + fclose(file); + + return TRUE; +} + // ---------------------------------------------------------------------------- // functions for directory handling