[git commit master] try to probe if stat.t_mtim.tv_nsec is available
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Thu Nov 26 18:00:35 UTC 2009
commit: http://git.uclibc.org/uClibc/commit/?id=903cfa151a16d1722c53829663002ee78670a961
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master
Do not treat tv_nsec mismatches as errors on filesystems without support for it.
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
test/time/Makefile.in | 1 +
test/time/tst-futimens1.c | 55 ++++++++++++++++++++++++++++----------------
2 files changed, 36 insertions(+), 20 deletions(-)
diff --git a/test/time/Makefile.in b/test/time/Makefile.in
index 65d814a..05f73a4 100644
--- a/test/time/Makefile.in
+++ b/test/time/Makefile.in
@@ -9,3 +9,4 @@ TESTS_DISABLED += tst-ftime_l
endif
CFLAGS_tst-strptime2 := -std=c99
+DODIFF_futimens1 := 1
diff --git a/test/time/tst-futimens1.c b/test/time/tst-futimens1.c
index a452de2..ed7f44f 100644
--- a/test/time/tst-futimens1.c
+++ b/test/time/tst-futimens1.c
@@ -1,5 +1,5 @@
/* vi: set sw=4 ts=4: */
-/* testcase
+/* testcase for futimens(2)
* Copyright (C) 2009 Bernhard Reutner-Fischer <uClibc at uClibc.org>
* Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/
@@ -30,7 +30,16 @@ int do_test(int argc, char **argv) {
char *name;
int i, errors;
errors = argc - argc + 0;
-
+ unsigned has_stat_nsec = 0;
+ {
+ struct stat probe;
+ /* Let's attempt an educated guess if this filesystem supports
+ * nanosecond mtime. */
+ if ((!stat(".", &probe)) && probe.st_mtim.tv_nsec)
+ has_stat_nsec = 1;
+ else if ((!stat(argv[0], &probe)) && probe.st_mtim.tv_nsec)
+ has_stat_nsec = 1;
+ }
for (i=0; i < (int) (sizeof(tests)/sizeof(tests[0])); ++i) {
int err, fd;
struct stat sb;
@@ -44,19 +53,18 @@ int do_test(int argc, char **argv) {
err = futimens(fd, tests[i].ts);
if ((errno && !err) || (!errno && err)) {
err = errno;
- printf("%s: FAILED test %d (errno and return value disagree)\n",
- argv[0], i);
+ printf("FAILED test %d (errno and return value disagree)\n", i);
++errors;
} else
err = errno;
if (err != tests[i].err) {
- printf("%s: FAILED test %d (expected errno %d, got %d)\n",
- argv[0], i, tests[i].err, err);
+ printf("FAILED test %d (expected errno %d, got %d)\n",
+ i, tests[i].err, err);
++errors;
continue;
}
if (stat(name, &sb) < 0) {
- printf("%s: FAILED test %d (verification)\n", argv[0], i);
+ printf("FAILED test %d (verification)\n", i);
++errors;
continue;
} else {
@@ -65,20 +73,27 @@ int do_test(int argc, char **argv) {
tests[i].ts[1].tv_sec != sb.st_mtim.tv_sec ||
tests[i].ts[1].tv_nsec != sb.st_mtim.tv_nsec;
if (wrong) {
- ++errors;
- if (tests[i].ts[0].tv_sec != sb.st_atim.tv_sec)
- printf("%s: FAILED test %d (access time, sec: expected %ld, got %ld)\n",
- argv[0], i, tests[i].ts[0].tv_sec, sb.st_atim.tv_sec);
- if (tests[i].ts[0].tv_nsec != sb.st_atim.tv_nsec)
- printf("%s: FAILED test %d (access time, nsec: expected %ld, got %ld)\n",
- argv[0], i, tests[i].ts[0].tv_nsec, sb.st_atim.tv_nsec);
+ if (tests[i].ts[0].tv_sec != sb.st_atim.tv_sec) {
+ printf("FAILED test %d (access time, sec: expected %ld, got %ld)\n",
+ i, tests[i].ts[0].tv_sec, sb.st_atim.tv_sec);
+ ++errors;
+ }
+ if (tests[i].ts[0].tv_nsec != sb.st_atim.tv_nsec) {
+ printf("FAILED test %d (access time, nsec: expected %ld, got %ld)\n",
+ i, tests[i].ts[0].tv_nsec, sb.st_atim.tv_nsec);
+ errors += has_stat_nsec;
+ }
- if (tests[i].ts[1].tv_sec != sb.st_mtim.tv_sec)
- printf("%s: FAILED test %d (modification time, sec: expected %ld, got %ld)\n",
- argv[0], i, tests[i].ts[1].tv_sec, sb.st_mtim.tv_sec);
- if (tests[i].ts[1].tv_nsec != sb.st_mtim.tv_nsec)
- printf("%s: FAILED test %d (modification time, nsec: expected %ld, got %ld)\n",
- argv[0], i, tests[i].ts[1].tv_nsec, sb.st_mtim.tv_nsec);
+ if (tests[i].ts[1].tv_sec != sb.st_mtim.tv_sec) {
+ printf("FAILED test %d (modification time, sec: expected %ld, got %ld)\n",
+ i, tests[i].ts[1].tv_sec, sb.st_mtim.tv_sec);
+ ++errors;
+ }
+ if (tests[i].ts[1].tv_nsec != sb.st_mtim.tv_nsec) {
+ printf("FAILED test %d (modification time, nsec: expected %ld, got %ld)\n",
+ i, tests[i].ts[1].tv_nsec, sb.st_mtim.tv_nsec);
+ errors += has_stat_nsec;
+ }
}
}
}
--
1.6.3.3
More information about the uClibc-cvs
mailing list