From 3d81d35fa2225d434b14c5e6230a2b5b9bedfe6e Mon Sep 17 00:00:00 2001 From: Tharre Date: Sat, 26 Aug 2017 18:16:11 +0200 Subject: Use the proper RNG called PCG instead of rand() Fixes #7. --- src/build.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/build.c') diff --git a/src/build.c b/src/build.c index 19628cf..83a8a7b 100644 --- a/src/build.c +++ b/src/build.c @@ -17,6 +17,7 @@ #include #include #include +#include #include /* dirname(), basename() */ @@ -394,6 +395,14 @@ void add_prereq_path(const char *target, const char *parent, int ident) { free(reltarget); } +static uint32_t get_magic_number() { + uint32_t magic; + if (sscanf(getenv("REDO_MAGIC"), "%"SCNu32, &magic) < 1) + die("redo: failed to parse REDO_MAGIC (%s)", getenv("REDO_MAGIC")); + + return magic; +} + /* Update hash & ctime information stored in the given dep_info struct */ static void update_dep_info(dep_info *dep, const char *target) { FILE *fp = fopen(target, "rb"); @@ -419,10 +428,10 @@ static void write_dep_information(dep_info *dep) { sha1_to_hex(dep->hash, hash); char *flags = (dep->flags & DEP_SOURCE) ? "s" : "l"; - int magic = atoi(getenv("REDO_MAGIC")); + uint32_t magic = get_magic_number(); /* TODO: casting time_t to long long is probably not entirely portable */ - if (fprintf(fd, "%s:%lld.%.9ld:%010d:%s\n", hash, + if (fprintf(fd, "%s:%lld.%.9ld:%"PRIu32":%s\n", hash, (long long)dep->ctime.tv_sec, dep->ctime.tv_nsec, magic, flags) < 0) fatal("redo: failed to write to %s", dep->path); -- cgit v1.2.3-70-g09d2