Messages in this thread Patch in this message | | | From | Baptiste Covolato <> | Subject | [PATCH v2] gen_init_cpio: allow file mtime to be overridden | Date | Thu, 25 Oct 2018 14:51:33 -0700 |
| |
By default gen_init_cpio uses the current time as mtime for links, special files and directories. We have the possibility to set this timestamp to a fixed value using -t. However, this timestamp doesn't apply to regular files. For those, the mtime returned by stat is used.
This commit introduces a '-a' option, which when used, will modify the mtime of regular files to match the timestamp of special files, directories, ...
v2: Fix typos in commit title/message
Signed-off-by: Baptiste Covolato <baptiste@arista.com> --- usr/gen_init_cpio.c | 19 +++++++++++++++---- usr/gen_initramfs_list.sh | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c index 03b21189d58b..e2432ff31965 100644 --- a/usr/gen_init_cpio.c +++ b/usr/gen_init_cpio.c @@ -24,6 +24,7 @@ static unsigned int offset; static unsigned int ino = 721; static time_t default_mtime; +static int default_mtime_all; struct file_handler { const char *type; @@ -305,6 +306,7 @@ static int cpio_mkfile(const char *name, const char *location, int rc = -1; int namesize; unsigned int i; + time_t mtime; mode |= S_IFREG; @@ -320,6 +322,10 @@ static int cpio_mkfile(const char *name, const char *location, goto error; } + mtime = buf.st_mtime; + if (default_mtime_all) + mtime = default_mtime; + filebuf = malloc(buf.st_size); if (!filebuf) { fprintf (stderr, "out of memory\n"); @@ -348,7 +354,7 @@ static int cpio_mkfile(const char *name, const char *location, (long) uid, /* uid */ (long) gid, /* gid */ nlinks, /* nlink */ - (long) buf.st_mtime, /* mtime */ + (long) mtime, /* mtime */ size, /* filesize */ 3, /* major */ 1, /* minor */ @@ -452,7 +458,7 @@ static int cpio_mkfile_line(const char *line) static void usage(const char *prog) { fprintf(stderr, "Usage:\n" - "\t%s [-t <timestamp>] <cpio_list>\n" + "\t%s [-t <timestamp>] [-a] <cpio_list>\n" "\n" "<cpio_list> is a file containing newline separated entries that\n" "describe the files to be included in the initramfs archive:\n" @@ -487,7 +493,9 @@ static void usage(const char *prog) "\n" "<timestamp> is time in seconds since Epoch that will be used\n" "as mtime for symlinks, special files and directories. The default\n" - "is to use the current time for these entries.\n", + "is to use the current time for these entries. If -a is specified,\n" + "the same mtime will be used for files, overriding their original\n" + "mtime.\n", prog); } @@ -529,12 +537,15 @@ int main (int argc, char *argv[]) default_mtime = time(NULL); while (1) { - int opt = getopt(argc, argv, "t:h"); + int opt = getopt(argc, argv, "t:ha"); char *invalid; if (opt == -1) break; switch (opt) { + case 'a': + default_mtime_all = 1; + break; case 't': default_mtime = strtol(optarg, &invalid, 10); if (!*optarg || *invalid) { diff --git a/usr/gen_initramfs_list.sh b/usr/gen_initramfs_list.sh index 0aad760fcd8c..1704e0638bcc 100755 --- a/usr/gen_initramfs_list.sh +++ b/usr/gen_initramfs_list.sh @@ -308,7 +308,7 @@ if [ ! -z ${output_file} ]; then if test -n "$KBUILD_BUILD_TIMESTAMP"; then timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)" if test -n "$timestamp"; then - timestamp="-t $timestamp" + timestamp="-a -t $timestamp" fi fi cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)" -- 2.19.1
| |