--- a/jffsX-utils/mkfs.jffs2.c +++ b/jffsX-utils/mkfs.jffs2.c @@ -109,7 +109,7 @@ static char *rootdir = default_rootdir; static int verbose = 0; static int squash_uids = 0; static int squash_perms = 0; -static int fake_times = 0; +static time_t fixed_timestamp = -1; int target_endian = __BYTE_ORDER; static uint32_t find_hardlink(struct filesystem_entry *e) @@ -250,8 +250,8 @@ static struct filesystem_entry *add_host mode &= ~(S_ISUID | S_ISGID); } } - if (fake_times) { - timestamp = 0; + if (fixed_timestamp != -1) { + timestamp = fixed_timestamp; } entry = xcalloc(1, sizeof(struct filesystem_entry)); @@ -1557,6 +1557,20 @@ static void parse_image(void){ close(in_fd); } +static void set_source_date_epoch() { + char *env = getenv("SOURCE_DATE_EPOCH"); + char *endptr = env; + errno = 0; + if (env && *env) { + fixed_timestamp = strtoull(env, &endptr, 10); + if (errno || (endptr && *endptr != '\0')) { + fprintf(stderr, "Invalid SOURCE_DATE_EPOCH"); + exit(1); + } + } +} + + int main(int argc, char **argv) { int c, opt; @@ -1575,6 +1589,7 @@ int main(int argc, char **argv) warn_page_size = 1; /* warn user if page size not 4096 */ jffs2_compressors_init(); + set_source_date_epoch(); while ((opt = getopt_long(argc, argv, "D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0) @@ -1625,7 +1640,7 @@ int main(int argc, char **argv) break; case 'f': - fake_times = 1; + fixed_timestamp = 0; break; case 'h':