openwrt/tools/squashfs4/patches/200-add-fixed-timestamp-option.patch
Alex Maclean 8a48a53dcb tools/squashfs4: include sysmacros.h explicitly
glibc is moving to remove the include of sys/sysmacros.h from
sys/types.h, and some distros have done this early. Other libcs may
already lack this include. Include sysmacros.h explicitly.

Fixes: FS#1017

Signed-off-by: Alex Maclean <monkeh@monkeh.net>
[refresh patches]
Signed-off-by: Mathias Kresin <dev@kresin.me>
2017-10-25 18:50:27 +02:00

83 lines
2.5 KiB
Diff

--- a/squashfs-tools/mksquashfs.c
+++ b/squashfs-tools/mksquashfs.c
@@ -176,6 +176,9 @@ unsigned int cache_bytes = 0, cache_size
/* inode lookup table */
squashfs_inode *inode_lookup_table = NULL;
+/* override all timestamps */
+time_t fixed_time = -1;
+
/* in memory directory data */
#define I_COUNT_SIZE 128
#define DIR_ENTRIES 32
@@ -2453,6 +2456,8 @@ again:
restat:
fstat(file, &buf2);
close(file);
+ if (fixed_time != -1)
+ buf2.st_mtime = fixed_time;
if(read_size != buf2.st_size) {
memcpy(buf, &buf2, sizeof(struct stat));
file_buffer->error = 2;
@@ -3613,7 +3618,7 @@ void dir_scan(squashfs_inode *inode, cha
buf.st_mode = S_IRWXU | S_IRWXG | S_IRWXO | S_IFDIR;
buf.st_uid = getuid();
buf.st_gid = getgid();
- buf.st_mtime = time(NULL);
+ buf.st_mtime = fixed_time != -1 ? fixed_time : time(NULL);
buf.st_dev = 0;
buf.st_ino = 0;
dir_ent->inode = lookup_inode(&buf);
@@ -3624,6 +3629,8 @@ void dir_scan(squashfs_inode *inode, cha
pathname, strerror(errno));
return;
}
+ if(fixed_time != -1)
+ buf.st_mtime = fixed_time;
dir_ent->inode = lookup_inode(&buf);
}
@@ -3678,6 +3685,8 @@ struct dir_info *dir_scan1(char *pathnam
filename, strerror(errno));
continue;
}
+ if(fixed_time != -1)
+ buf.st_mtime = fixed_time;
if((buf.st_mode & S_IFMT) != S_IFREG &&
(buf.st_mode & S_IFMT) != S_IFDIR &&
@@ -3796,7 +3805,7 @@ struct dir_info *dir_scan2(struct dir_in
buf.st_gid = pseudo_ent->dev->gid;
buf.st_rdev = makedev(pseudo_ent->dev->major,
pseudo_ent->dev->minor);
- buf.st_mtime = time(NULL);
+ buf.st_mtime = fixed_time != -1 ? fixed_time : time(NULL);
buf.st_ino = pseudo_ino ++;
if(pseudo_ent->dev->type == 'f') {
@@ -4675,6 +4684,15 @@ int main(int argc, char *argv[])
progress = FALSE;
else if(strcmp(argv[i], "-no-exports") == 0)
exportable = FALSE;
+ else if(strcmp(argv[i], "-fixed-time") == 0) {
+ if((++i == argc) || (fixed_time =
+ strtoll(argv[i], &b, 10), *b != '\0')) {
+ ERROR("%s: -fixed-time missing or invalid "
+ "timestamp\n", argv[0]);
+
+ exit(1);
+ }
+ }
else if(strcmp(argv[i], "-processors") == 0) {
if((++i == argc) || (processors =
strtol(argv[i], &b, 10), *b != '\0')) {
@@ -5315,7 +5333,7 @@ printOptions:
sBlk.flags = SQUASHFS_MKFLAGS(noI, noD, noF, noX, no_fragments,
always_use_fragments, duplicate_checking, exportable,
no_xattrs, comp_opts);
- sBlk.mkfs_time = time(NULL);
+ sBlk.mkfs_time = fixed_time != -1 ? fixed_time : time(NULL);
restore_filesystem:
if(progress && estimated_uncompressed) {