diff --git a/docs/scripts/insert_timestamp.c b/docs/scripts/insert_timestamp.c index aaeb414bc7..f9322a29aa 100644 --- a/docs/scripts/insert_timestamp.c +++ b/docs/scripts/insert_timestamp.c @@ -7,6 +7,9 @@ #include #include #include +#include +#include +#include #include "dawk.h" int main(int argc, char **argv) @@ -15,7 +18,35 @@ int main(int argc, char **argv) char buf[64]; char const *version = "unknown"; - time(&now); + char *source_date_epoch; + unsigned long long epoch; + char *endptr; + + source_date_epoch = getenv("SOURCE_DATE_EPOCH"); + if (source_date_epoch) { + errno = 0; + epoch = strtoull(source_date_epoch, &endptr, 10); + if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0)) + || (errno != 0 && epoch == 0)) { + fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + if (endptr == source_date_epoch) { + fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n", endptr); + exit(EXIT_FAILURE); + } + if (*endptr != '\0') { + fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n", endptr); + exit(EXIT_FAILURE); + } + if (epoch > ULONG_MAX) { + fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu \n", ULONG_MAX, epoch); + exit(EXIT_FAILURE); + } + now = epoch; + } else { + now = time(NULL); + } strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S UTC", gmtime(&now)); if (argc > 1) { diff --git a/docs/scripts/scan_examples.c b/docs/scripts/scan_examples.c index 2f2d96e342..069078d77d 100644 --- a/docs/scripts/scan_examples.c +++ b/docs/scripts/scan_examples.c @@ -54,10 +54,18 @@ typedef struct { int index; /* How many APIs are used in each example */ int count; + /* Store a pointer to the file string for comparison purposes */ + char *filename; } lookup_t; static lookup_t *lookup; static int compare(const void *pa, const void *pb) { - return ((const lookup_t *) pa)->count - ((const lookup_t *) pb)->count; + int val = ((const lookup_t *) pa)->count - ((const lookup_t *) pb)->count; + + // if different count values, sort according to this. + if (val != 0) return val; + + // But if the count value is the same, sort according to filename + return strcmp( (char*)((const lookup_t *) pa)->filename, (char*)((const lookup_t *) pb)->filename); } int main(int argc, char* argv[]) @@ -81,9 +89,9 @@ int main(int argc, char* argv[]) lookup = calloc(argc, sizeof(lookup_t)); for (j = 0; j < argc; ++j) { lookup[j].index = j; + lookup[j].filename = argv[j]; } - for (j = 1; j < argc; ++j) { d_open_input(argv[j]); while (d_getline(line)) {