download
ttyemu
checkseekhole
+ckmtime
## genfile ##
## ------------ ##
-check_PROGRAMS = genfile checkseekhole
+check_PROGRAMS = genfile checkseekhole ckmtime
if TAR_COND_GRANTPT
check_PROGRAMS += ttyemu
--- /dev/null
+/* Check if filesystem timestamps are consistent with the system time.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+ Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <config.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <assert.h>
+#include <stdio.h>
+#include <stat-time.h>
+#include <timespec.h>
+
+int
+main (int argc, char **argv)
+{
+ FILE *fp;
+ struct timeval tv;
+ struct stat st;
+ struct timespec ts;
+
+ assert (gettimeofday (&tv, NULL) == 0);
+ ts.tv_sec = tv.tv_sec;
+ ts.tv_nsec = tv.tv_usec * 1000;
+
+ fp = tmpfile ();
+ assert (fp != NULL);
+ assert (fstat (fileno (fp), &st) == 0);
+ fclose (fp);
+ if (timespec_cmp (get_stat_mtime (&st), ts) >= 0)
+ {
+ fprintf (stderr, "file timestamp unreliable\n");
+ return 1;
+ }
+ return 0;
+}
AT_KEYWORDS([incremental incr01])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
+
mkdir directory
$as_ln_s foo directory/bar
AT_KEYWORDS([incremental timestamp restore incr02])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
# Create directory structure
mkdir dir
mkdir dir/subdir1
AT_KEYWORDS([incremental incr03 rename])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_SORT_PREREQ
mkdir directory
genfile --file=directory/x
m4_pushdef([NAME_PREFIX],[a/b/one_31_chars_long_file_name_])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_TAR_MKHIER(a/b)
awk 'BEGIN {
for (i=1;i<=142;i++)
AT_KEYWORDS([incremental incr05])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
mkdir dir
mkdir dir/sub
genfile --file dir/file1
AT_KEYWORDS([incremental incr06])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
mkdir dir
mkdir dir/sub
mkdir dir/sub/a
# http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00044.html
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
mkdir dirA
echo 'a' > dirA/a
echo 'a' > dirA/b
AT_KEYWORDS([incremental create incr08])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_SORT_PREREQ
mkdir tartest
cd tartest
AT_KEYWORDS([incremental create incr09])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_SORT_PREREQ
mkdir foo bar middle
echo foo/foo_file > foo/foo_file
# http://lists.gnu.org/archive/html/bug-tar/2015-04/msg00003.html
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
mkdir in
mkdir in/dir
decho Level 0
AT_KEYWORDS([incremental concat cat incr11])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_SORT_PREREQ
AT_TAR_MKHIER([data/dir],[file])
decho Level 0
AT_KEYWORDS([incremental listed incr00])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
+
mkdir structure
echo x >structure/file
AT_KEYWORDS([listed incremental listed01])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
+
mkdir directory
genfile --length 10240 --pattern zeros --file directory/file1
# Let the things settle
AT_KEYWORDS([listed incremental listed02])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_SORT_PREREQ
echo Create directories
AT_KEYWORDS([listed incremental listed03])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_UNPRIVILEGED_PREREQ
mkdir dir
cd dir/sub
chmod a-r ..
-tar -c -f archive.tar --listed-incremental=db.1 -v a
+tar -c -f archive.tar --listed-incremental=db.1 -v a 2>err
status=$?
chmod a+r ..
+if test $status -eq 2; then
+ grep '^tar: \.: Cannot getcwd' err >/dev/null 2>&1 && AT_SKIP_TEST
+fi
+cat err >&2
exit $status
],
[0],
AT_KEYWORDS([listed incremental listed04])
AT_TAR_CHECK([
-
+AT_CHECK_TIMESTAMP
mkdir dir
echo a >dir/a
echo b >dir/b
AT_KEYWORDS([listed incremental listed05])
AT_TAR_CHECK([
+AT_CHECK_TIMESTAMP
AT_PRIVILEGED_PREREQ
options="-C tartest --create --one-file-system --verbose"
rm -rf archive-[01].snar archive-[01].tar tartest subdir
# http://lists.gnu.org/archive/html/bug-tar/2013-01/msg00001.html
AT_TAR_CHECK([
-(echo 0 =2560
-for i in `seq 1 999`; do
- echo 10M =2560
-done) | genfile --sparse --file BIGFILE --block-size 4K - || AT_SKIP_TEST
+AT_DATA([mapfile],
+[0 =2560
+m4_for([i], 1, 999, 1, [10M =2560
+])])
+genfile --sparse --file BIGFILE --block-size 4K - < mapfile || AT_SKIP_TEST
tar -f - -c --sparse --posix BIGFILE | tar tvf - | awk '{ print $3, $(NF) }'
],
[0],
fi
])
+dnl Check whether a newly created file has timestamp consistent with the
+dnl local time. Skip the test if not.
+m4_define([AT_CHECK_TIMESTAMP],[ckmtime || AT_SKIP_TEST])
+
m4_include([sparsemvp.at])
AT_INIT