- From 7760d99106b9c89b07899ae8888a0a36987081ea Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 18 Feb 2025 14:03:05 +0100
- Subject: [PATCH 1/6] tests: winfsinfo: "nfs3attr" subcmd output cannot be read
- by ksh93 read -C
- winfsinfo: "nfs3attr" subcmd output cannot be read by ksh93 read -C
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- tests/winfsinfo1/winfsinfo.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
- diff --git a/tests/winfsinfo1/winfsinfo.c b/tests/winfsinfo1/winfsinfo.c
- index 3a6c26a..4705ab5 100644
- --- a/tests/winfsinfo1/winfsinfo.c
- +++ b/tests/winfsinfo1/winfsinfo.c
- @@ -825,9 +825,9 @@ bool get_nfs3attr(const char *progname, const char *filename)
- "\tsize=%lld\n\tused=%lld\n"
- "\trdev=( specdata1=0x%x specdata2=0x%x )\n"
- "\tfsid=0x%llx\n\tfileid=0x%llx\n"
- - "\tatime=(tv_sec=%ld,tv_nsec=%lu)\n"
- - "\tmtime=(tv_sec=%ld,tv_nsec=%lu)\n"
- - "\tctime=(tv_sec=%ld,tv_nsec=%lu)\n"
- + "\tatime=( tv_sec=%ld tv_nsec=%lu )\n"
- + "\tmtime=( tv_sec=%ld tv_nsec=%lu )\n"
- + "\tctime=( tv_sec=%ld tv_nsec=%lu )\n"
- ")\n",
- filename,
- (int)n3a->type,
- --
- 2.45.1
- From dea5fe7273111fc22c88aed18c31e73176191682 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 18 Feb 2025 14:48:39 +0100
- Subject: [PATCH 2/6] tests: winfsinfo: Output should be POSIX sh compatible
- (no <cr>)
- winfsinfo: Output should be POSIX sh compatible (no <cr>),
- otherwise we would need dos2unix each time we want to read
- the output with bash/ksh93 etc.
- Reported-by: Martin Wege <martin.l.wege@gmail.com>
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- tests/winfsinfo1/winfsinfo.c | 11 +++++++++++
- 1 file changed, 11 insertions(+)
- diff --git a/tests/winfsinfo1/winfsinfo.c b/tests/winfsinfo1/winfsinfo.c
- index 4705ab5..0b2962c 100644
- --- a/tests/winfsinfo1/winfsinfo.c
- +++ b/tests/winfsinfo1/winfsinfo.c
- @@ -32,6 +32,8 @@
- #define UNICODE 1
- #define _UNICODE 1
- +#include <io.h>
- +#include <fcntl.h>
- #include <stdio.h>
- #include <windows.h>
- #include <stdlib.h>
- @@ -993,6 +995,15 @@ int main(int ac, char *av[])
- {
- const char *subcmd;
- + /*
- + * Force |O_BINARY| mode for stdio so we do not set <CR> to be
- + * UNIX/POSIX-compatible, otherwise we would need dos2unix each
- + * time to make our output compatble to POSIX sh shell scripts
- + */
- + (void)_setmode(fileno(stdin), O_BINARY);
- + (void)_setmode(fileno(stdout), O_BINARY);
- + (void)_setmode(fileno(stderr), O_BINARY);
- +
- if (ac < 3) {
- usage();
- return 2;
- --
- 2.45.1
- From 5019fd9b4b156ba03876256984f148cdfa19db75 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 18 Feb 2025 15:11:07 +0100
- Subject: [PATCH 3/6] tests: winfsinfo should use typeset -A for flag fields
- winfsinfo should use typeset -A for flag fields, so scripts can
- use [[ -v varname }} to test whether a flag is set or not.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- tests/winfsinfo1/winfsinfo.c | 68 +++++++++++++++++++++---------------
- 1 file changed, 39 insertions(+), 29 deletions(-)
- diff --git a/tests/winfsinfo1/winfsinfo.c b/tests/winfsinfo1/winfsinfo.c
- index 0b2962c..c7d87a9 100644
- --- a/tests/winfsinfo1/winfsinfo.c
- +++ b/tests/winfsinfo1/winfsinfo.c
- @@ -89,11 +89,11 @@ bool getvolumeinfo(const char *progname, const char *filename)
- (void)printf("(\n");
- (void)printf("\tfilename='%s'\n", filename);
- - (void)printf("\ttypeset -a volumeflags=(\n");
- + (void)printf("\ttypeset -A volumeflags=(\n");
- #define TESTVOLFLAG(s) \
- if (volumeFlags & (s)) { \
- - (void)puts("\t\t"#s); \
- + (void)printf("\t\t['%s']=0x%lx\n", (#s), (unsigned long)(s)); \
- volumeFlags &= ~(s); \
- }
- @@ -133,15 +133,18 @@ bool getvolumeinfo(const char *progname, const char *filename)
- TESTVOLFLAG(FILE_SUPPORTS_GHOSTING);
- #endif
- - (void)printf("\t)\n");
- /*
- * print any leftover flags not covered by |TESTVOLFLAG(FILE_*)|
- * above
- */
- if (volumeFlags) {
- - (void)printf("\tattr=0x%lx\n", (long)volumeFlags);
- + (void)printf("\t\t['remainingflags']=0x%lx\n",
- + (unsigned long)volumeFlags);
- }
- +
- + (void)printf("\t)\n");
- +
- (void)printf(")\n");
- res = EXIT_SUCCESS;
- @@ -225,11 +228,11 @@ bool getfilefssectorsizeinformation(const char *progname, const char *filename)
- DWORD fssiflags = ffssi.Flags;
- - (void)printf("\ttypeset -a Flags=(\n");
- + (void)printf("\ttypeset -A Flags=(\n");
- #define TESTFSSI(s) \
- if (fssiflags & (s)) { \
- - (void)puts("\t\t"#s); \
- + (void)printf("\t\t['%s']=0x%lx\n", (#s), (unsigned long)(s)); \
- fssiflags &= ~(s); \
- }
- TESTFSSI(SSINFO_FLAGS_ALIGNED_DEVICE);
- @@ -238,16 +241,16 @@ bool getfilefssectorsizeinformation(const char *progname, const char *filename)
- TESTFSSI(SSINFO_FLAGS_TRIM_ENABLED);
- TESTFSSI(SSINFO_FLAGS_BYTE_ADDRESSABLE);
- - (void)printf("\t)\n");
- -
- /*
- * print any leftover flags not covered by |TESTFBIA(FILE_*)|
- * above
- */
- if (fssiflags) {
- - (void)printf("\tFlags=0x%lx\n", (long)fssiflags);
- + (void)printf("\t\t['remainingflags']=0x%lx\n", (unsigned long)fssiflags);
- }
- + (void)printf("\t)\n");
- +
- (void)printf("\tByteOffsetForSectorAlignment=%lu\n",
- (unsigned long)ffssi.ByteOffsetForSectorAlignment);
- (void)printf("\tByteOffsetForPartitionAlignment=%lu\n",
- @@ -304,11 +307,11 @@ bool get_file_basic_info(const char *progname, const char *filename)
- (void)printf("\tChangeTime=%lld\n", (long long)finfo.ChangeTime.QuadPart);
- DWORD fattr = finfo.FileAttributes;
- - (void)printf("\ttypeset -a FileAttributes=(\n");
- + (void)printf("\ttypeset -A FileAttributes=(\n");
- #define TESTFBIA(s) \
- if (fattr & (s)) { \
- - (void)puts("\t\t"#s); \
- + (void)printf("\t\t['%s']=0x%lx\n", (#s), (unsigned long)(s)); \
- fattr &= ~(s); \
- }
- TESTFBIA(FILE_ATTRIBUTE_READONLY);
- @@ -334,15 +337,17 @@ bool get_file_basic_info(const char *progname, const char *filename)
- TESTFBIA(FILE_ATTRIBUTE_RECALL_ON_OPEN);
- TESTFBIA(FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS);
- - (void)printf("\t)\n");
- -
- /*
- * print any leftover flags not covered by |TESTFBIA(FILE_*)|
- * above
- */
- if (fattr) {
- - (void)printf("\tfattr=0x%lx\n", (long)fattr);
- + (void)printf("\t\t['remainingflags']=0x%lx\n",
- + (unsigned long)fattr);
- }
- +
- + (void)printf("\t)\n");
- +
- (void)printf(")\n");
- res = EXIT_SUCCESS;
- @@ -400,11 +405,11 @@ bool get_fileexinfostandard(const char *progname, const char *filename)
- DWORD fattr = finfo.dwFileAttributes;
- - (void)printf("\ttypeset -a dwFileAttributes=(\n");
- + (void)printf("\ttypeset -A dwFileAttributes=(\n");
- #define TESTFEIS(s) \
- if (fattr & (s)) { \
- - (void)puts("\t\t"#s); \
- + (void)printf("\t\t['%s']=0x%lx\n", (#s), (unsigned long)(s)); \
- fattr &= ~(s); \
- }
- TESTFEIS(FILE_ATTRIBUTE_READONLY);
- @@ -430,15 +435,17 @@ bool get_fileexinfostandard(const char *progname, const char *filename)
- TESTFEIS(FILE_ATTRIBUTE_RECALL_ON_OPEN);
- TESTFEIS(FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS);
- - (void)printf("\t)\n");
- -
- /*
- * print any leftover flags not covered by |TESTFNOI(FILE_*)|
- * above
- */
- if (fattr) {
- - (void)printf("\tfattr=0x%lx\n", (long)fattr);
- + (void)printf("\t\t['remainingflags']=0x%lx\n",
- + (unsigned long)fattr);
- }
- +
- + (void)printf("\t)\n");
- +
- (void)printf(")\n");
- res = EXIT_SUCCESS;
- @@ -652,25 +659,27 @@ bool get_filecasesensitiveinfo(const char *progname, const char *filename)
- (void)printf("(\n");
- (void)printf("\tfilename='%s'\n", filename);
- - (void)printf("\ttypeset -a Flags=(\n");
- + (void)printf("\ttypeset -A Flags=(\n");
- ULONG fcsi_flags = finfo.Flags;
- #define TESTFCSI(s) \
- if (fcsi_flags & (s)) { \
- - (void)puts("\t\t"#s); \
- + (void)printf("\t\t['%s']=0x%lx\n", (#s), (unsigned long)(s)); \
- fcsi_flags &= ~(s); \
- }
- TESTFCSI(FILE_CS_FLAG_CASE_SENSITIVE_DIR);
- - (void)printf("\t)\n");
- -
- /*
- * print any leftover flags not covered by |TESTFCSI(FILE_*)|
- * above
- */
- if (fcsi_flags) {
- - (void)printf("\ffcsi_flags=0x%lx\n", (long)fcsi_flags);
- + (void)printf("\t\t['remainingflags']=0x%lx\n",
- + (unsigned long)fcsi_flags);
- }
- +
- + (void)printf("\t)\n");
- +
- (void)printf(")\n");
- res = EXIT_SUCCESS;
- @@ -904,11 +913,11 @@ bool get_file_remote_protocol_info(const char *progname, const char *filename)
- (void)printf("\tReserved=0x%x\n",
- (unsigned int)frpi.Reserved);
- - (void)printf("\ttypeset -a Flags=(\n");
- + (void)printf("\ttypeset -A Flags=(\n");
- #define TESTREMOTEPROTOCOLFLAG(s) \
- if (frpi.Flags & (s)) { \
- - (void)puts("\t\t"#s); \
- + (void)printf("\t\t['%s']=0x%lx\n", (#s), (unsigned long)(s)); \
- frpi.Flags &= ~(s); \
- }
- @@ -919,16 +928,17 @@ bool get_file_remote_protocol_info(const char *progname, const char *filename)
- TESTREMOTEPROTOCOLFLAG(REMOTE_PROTOCOL_FLAG_INTEGRITY);
- TESTREMOTEPROTOCOLFLAG(REMOTE_PROTOCOL_FLAG_MUTUAL_AUTH);
- - (void)printf("\t)\n");
- -
- /*
- * print any leftover flags not covered by
- * |TESTREMOTEPROTOCOLFLAG()| above
- */
- if (frpi.Flags) {
- - (void)printf("\tattr=0x%lx\n", (long)frpi.Flags);
- + (void)printf("\t\t['remainingflags']=0x%lx\n",
- + (unsigned long)frpi.Flags);
- }
- + (void)printf("\t)\n");
- +
- /* GenericReserved */
- (void)printf("\tcompound GenericReserved=(\n");
- (void)printf("\t\ttypeset -a Reserved=(\n");
- --
- 2.45.1
- From 7f39520007dff4a4ebf401346499253d6f61d96a Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 18 Feb 2025 15:13:15 +0100
- Subject: [PATCH 4/6] tests: winfsinfo: Cast |CloseHandle()| return code to
- |void|
- winfsinfo: Cleanup: Cast |CloseHandle()| return code to |void|.
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- tests/winfsinfo1/winfsinfo.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
- diff --git a/tests/winfsinfo1/winfsinfo.c b/tests/winfsinfo1/winfsinfo.c
- index c7d87a9..4772428 100644
- --- a/tests/winfsinfo1/winfsinfo.c
- +++ b/tests/winfsinfo1/winfsinfo.c
- @@ -149,7 +149,7 @@ bool getvolumeinfo(const char *progname, const char *filename)
- res = EXIT_SUCCESS;
- done:
- - CloseHandle(fileHandle);
- + (void)CloseHandle(fileHandle);
- return res;
- }
- @@ -352,7 +352,7 @@ bool get_file_basic_info(const char *progname, const char *filename)
- res = EXIT_SUCCESS;
- done:
- - CloseHandle(fileHandle);
- + (void)CloseHandle(fileHandle);
- return res;
- }
- @@ -498,7 +498,7 @@ bool get_file_standard_info(const char *progname, const char *filename)
- res = EXIT_SUCCESS;
- done:
- - CloseHandle(fileHandle);
- + (void)CloseHandle(fileHandle);
- return res;
- }
- @@ -618,7 +618,7 @@ bool get_filenormalizednameinfo(const char *progname, const char *filename)
- res = EXIT_SUCCESS;
- done:
- - CloseHandle(fileHandle);
- + (void)CloseHandle(fileHandle);
- return res;
- }
- --
- 2.45.1
- From 9d5b712a522c29314452364ec9e16b44b4dcf762 Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 18 Feb 2025 16:53:20 +0100
- Subject: [PATCH 5/6] daemon,tests: Fix |chgrp()| with Unix_Group+<gid> SIDs
- Fix |chgrp()| with Unix_Group+<gid> SIDs
- Testcase:
- (GNU patch usually fails with
- 'patch: **** Failed to set the owning group of file ./d2.oL0Iv8e : Permission denied'
- if |chgrp()| fails
- ---- snip ----
- $ rm -f d1 d2 d1.diff ; printf '1\n2\n' >d1 ; cp d1 d2 ; printf '3\n' >> d2 ; diff -u d1 d2 | sed 's/d1/d2/g' >d1.diff ; patch -R -p0 <d1.diff && echo "# test OK"
- ---- snip ----
- The test should print "# test OK"
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- daemon/acl.c | 12 +++++++++---
- tests/manual_testing.txt | 14 ++++++++++++++
- 2 files changed, 23 insertions(+), 3 deletions(-)
- diff --git a/daemon/acl.c b/daemon/acl.c
- index 159ad1f..e69c81c 100644
- --- a/daemon/acl.c
- +++ b/daemon/acl.c
- @@ -1040,7 +1040,7 @@ int map_sid2nfs4ace_who(PSID sid, PSID owner_sid, PSID group_sid,
- "Unix_User+%d SID "
- "mapped to user '%s'\n",
- unixuser_uid, who_out));
- - goto no_add_domain;
- + goto add_domain;
- }
- eprintf("map_sid2nfs4ace_who: "
- @@ -1061,7 +1061,7 @@ int map_sid2nfs4ace_who(PSID sid, PSID owner_sid, PSID group_sid,
- "Unix_Group+%d SID "
- "mapped to group '%s'\n",
- unixgroup_gid, who_out));
- - goto no_add_domain;
- + goto add_domain;
- }
- eprintf("map_sid2nfs4ace_who: "
- @@ -1106,6 +1106,12 @@ err_none_mapped:
- (void)memcpy(who_out, who_buf, who_size);
- add_domain:
- + /*
- + * Complain if we attempt to add a domain suffix to an UID/GID
- + * value
- + */
- + EASSERT(!isdigit(who_out[0]));
- +
- (void)memcpy(who_out+who_size, "@", sizeof(char));
- #ifdef NFS41_DRIVER_WS2022_HACKS
- @@ -1126,7 +1132,7 @@ add_domain:
- #endif /* NFS41_DRIVER_WS2022_HACKS */
- (void)memcpy(who_out+who_size+1, domain, strlen(domain)+1);
- -no_add_domain:
- +/* no_add_domain: */
- status = ERROR_SUCCESS;
- out:
- if (status) {
- diff --git a/tests/manual_testing.txt b/tests/manual_testing.txt
- index 13b82f6..065ba42 100644
- --- a/tests/manual_testing.txt
- +++ b/tests/manual_testing.txt
- @@ -159,6 +159,20 @@ ksh93 -c 'builtin id ; rm -f x ; touch x ; chown "$(id -u -n):$(id -g -n)" x &&
- ksh93 -c 'builtin id ; rm -f x ; touch x ; chgrp "$(id -g -n)" x && print OK'
- ---- snip ----
- +
- +#
- +# Test for |chgrp()| used with GNU /usr/bin/patch
- +# (GNU patch usually fails with
- +# 'patch: **** Failed to set the owning group of file ./d2.oL0Iv8e : Permission denied'
- +# if |chgrp()| fails
- +#
- +---- snip ----
- +$ rm -f d1 d2 d1.diff ; printf '1\n2\n' >d1 ; cp d1 d2 ; printf '3\n' >> d2 ; diff -u d1 d2 | sed 's/d1/d2/g' >d1.diff ; patch -R -p0 <d1.diff && echo "# test OK"
- +---- snip ----
- +
- +The test should print "# test OK"
- +
- +
- #
- # Test for native mklink && powershell New-Item -ItemType SymbolicLink
- #
- --
- 2.45.1
- From 92ddf547986b6ec3f0dcf288c7e1759ffde544ec Mon Sep 17 00:00:00 2001
- From: Roland Mainz <roland.mainz@nrubsig.org>
- Date: Tue, 18 Feb 2025 17:55:26 +0100
- Subject: [PATCH 6/6] cygwin,tests: Update cthon04 test suite+usage
- instructions
- Update cthon04 test suite+usage instructions to
- https://git.linux-nfs.org/?p=steved/cthon04.git;a=commit;h=6c9abfd6907b2b43036af111cc600ab60ef804e5
- Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
- ---
- cygwin/README.txt | 22 +-
- .../0001-cthon-tests.init-for-linux.patch | 120 ----
- .../cthon04/0001-tools-Cygwin-3.6-port.patch | 61 ++
- ...-for-ms-nfs41-client-POSIX-symlink-t.patch | 31 +
- .../0002-cthon-fixing-tools-compilation.patch | 51 --
- ...hon-fixing-locks-compilation-problem.patch | 29 -
- .../0003-lock-Fix-issue-with-tlock-path.patch | 28 +
- ...emoved-fwritable-strings-from-cflags.patch | 26 -
- ...CK-Disable-tests-which-cannot-work-o.patch | 60 ++
- ...-scripts-use-.exe-extension-dirent.h.patch | 169 -----
- .../0006-cthon-fixing-op_unlk-op_ren.patch | 72 ---
- ...thon-porting-lock-tests-to-win32-api.patch | 577 ------------------
- ...-disabling-test8-from-the-basic-test.patch | 26 -
- ...-enabling-NATIVE64-for-special-tests.patch | 26 -
- .../0010-cthon-fixes-for-64-bit-locking.patch | 60 --
- ...011-cthon-setting-maxeof-to-be-64bit.patch | 26 -
- ...pmapbrb-pmaptst-tests-from-tools-dir.patch | 26 -
- tests/cthon04/0013-nroff-patch.patch | 26 -
- ...ng-out-symlink-test-in-special-tests.patch | 35 --
- ...on-enabled-basic-test4a-5a-5b-and-7a.patch | 51 --
- ...or-messages-for-newer-Cygwin-nroff-v.patch | 30 -
- tests/manual_testing.txt | 24 +-
- 22 files changed, 205 insertions(+), 1371 deletions(-)
- delete mode 100644 tests/cthon04/0001-cthon-tests.init-for-linux.patch
- create mode 100644 tests/cthon04/0001-tools-Cygwin-3.6-port.patch
- create mode 100644 tests/cthon04/0002-basic-Workaround-for-ms-nfs41-client-POSIX-symlink-t.patch
- delete mode 100644 tests/cthon04/0002-cthon-fixing-tools-compilation.patch
- delete mode 100644 tests/cthon04/0003-cthon-fixing-locks-compilation-problem.patch
- create mode 100644 tests/cthon04/0003-lock-Fix-issue-with-tlock-path.patch
- delete mode 100644 tests/cthon04/0004-cthon-removed-fwritable-strings-from-cflags.patch
- create mode 100644 tests/cthon04/0004-special-tools-HACK-Disable-tests-which-cannot-work-o.patch
- delete mode 100644 tests/cthon04/0005-cthon-general-scripts-use-.exe-extension-dirent.h.patch
- delete mode 100644 tests/cthon04/0006-cthon-fixing-op_unlk-op_ren.patch
- delete mode 100644 tests/cthon04/0007-cthon-porting-lock-tests-to-win32-api.patch
- delete mode 100644 tests/cthon04/0008-cthon-disabling-test8-from-the-basic-test.patch
- delete mode 100644 tests/cthon04/0009-cthon-enabling-NATIVE64-for-special-tests.patch
- delete mode 100644 tests/cthon04/0010-cthon-fixes-for-64-bit-locking.patch
- delete mode 100644 tests/cthon04/0011-cthon-setting-maxeof-to-be-64bit.patch
- delete mode 100644 tests/cthon04/0012-removing-pmapbrb-pmaptst-tests-from-tools-dir.patch
- delete mode 100644 tests/cthon04/0013-nroff-patch.patch
- delete mode 100644 tests/cthon04/0014-commenting-out-symlink-test-in-special-tests.patch
- delete mode 100644 tests/cthon04/0015-cthon-enabled-basic-test4a-5a-5b-and-7a.patch
- delete mode 100644 tests/cthon04/0016-cthon-Handle-error-messages-for-newer-Cygwin-nroff-v.patch
- diff --git a/cygwin/README.txt b/cygwin/README.txt
- index b3f9103..634cfcf 100644
- --- a/cygwin/README.txt
- +++ b/cygwin/README.txt
- @@ -136,29 +136,11 @@ bash ../cygwin/devel/msnfs41client.bash run_daemon
- bash ../cygwin/devel/msnfs41client.bash mount_homedir
- -
- ######## Testing:
- -** "cthon04" test suite:
- -# mount a NFSv4 filesystem, and then execute this
- -# on this filesystem
- -mkdir nfsv4cthontest1 && cd nfsv4cthontest1
- -git clone https://github.com/kofemann/ms-nfs41-client.git
- -git clone git://git.linux-nfs.org/projects/steved/cthon04.git
- -cd cthon04/
- -git config --global --add safe.directory "$PWD"
- -git checkout 8cefaa2ecf8d5c1240f1573530f07cfbbfc092ea
- -git am ../ms-nfs41-client/tests/cthon04/*.patch
- -make 2>&1 | tee buildlog.log
- -mkdir testdir1
- -./runtests -a -t "$PWD/testdir1" 2>&1 | tee testrun.log
- -
- -
- -** "winfstest" test suite:
- -See tests/winfstest/README.txt
- -
- +Seen tests/manual_testing.txt
- #### ToDo:
- -- Makefile/script support for release blob generaetion, local test installation, running cthon4 etc
- +- Makefile/script support for release blob generaetion, local test installation etc
- - DocBook/XML based documentation
- - Document how to get and build ksh93 for Cygwin
- - Cygwin-specific binary release blob
- diff --git a/tests/cthon04/0001-cthon-tests.init-for-linux.patch b/tests/cthon04/0001-cthon-tests.init-for-linux.patch
- deleted file mode 100644
- index d292a5e..0000000
- --- a/tests/cthon04/0001-cthon-tests.init-for-linux.patch
- +++ /dev/null
- @@ -1,120 +0,0 @@
- -From 6fc1a22d9f13e3f5a0ce5357582c511e5810bd89 Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:22:37 -0400
- -Subject: [PATCH 01/11] cthon: tests.init for linux
- -
- ----
- - tests.init | 36 ++++++++++++++++++------------------
- - 1 files changed, 18 insertions(+), 18 deletions(-)
- -
- -diff --git a/tests.init b/tests.init
- -index 69b51bf..e55a4aa 100644
- ---- a/tests.init
- -+++ b/tests.init
- -@@ -13,8 +13,8 @@ MNTPOINT="/mnt"
- - # Use this mount command if using:
- - # SVR4
- - # Solaris 2.x
- --MOUNTCMD='./domount -F nfs -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- --CFSMOUNTCMD='./domount -F cachefs -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- -+#MOUNTCMD='./domount -F nfs -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- -+#CFSMOUNTCMD='./domount -F cachefs -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- -
- - # Use this mount command if using:
- - # BSD
- -@@ -26,22 +26,22 @@ CFSMOUNTCMD='./domount -F cachefs -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- - # Mac OS X
- - # At least some BSD systems don't recognize "hard" (since that's the
- - # default), so you might also want to use this definition of MNTOPTIONS.
- --#MNTOPTIONS="rw,intr"
- --#MOUNTCMD='./domount -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- -+MNTOPTIONS="rw,intr"
- -+MOUNTCMD='./domount -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- -
- - # Use this mount command if using:
- - # DG/UX
- - #MOUNTCMD='./domount -t nfs -o $MNTOPTIONS $SERVER\:$SERVPATH $MNTPOINT'
- -
- --UMOUNTCMD='./domount -u $MNTPOINT'
- -+#UMOUNTCMD='./domount -u $MNTPOINT'
- -
- - # Use the next two lines if using:
- - # SVR3
- - # SVR4
- - # Solaris 2.x
- - # HPUX
- --DASHN=
- --BLC=\\c
- -+#DASHN=
- -+#BLC=\\c
- -
- - # Use the next two lines if using:
- - # BSD
- -@@ -49,12 +49,12 @@ BLC=\\c
- - # Linux
- - # Tru64 UNIX
- - # Mac OS X
- --#DASHN=-n
- --#BLC=
- -+DASHN=-n
- -+BLC=
- -
- - # Use this path for:
- - # Solaris 2.x
- --PATH=/opt/SUNWspro/bin:/usr/ccs/bin:/sbin:/bin:/usr/bin:/usr/ucb:/etc:.
- -+#PATH=/opt/SUNWspro/bin:/usr/ccs/bin:/sbin:/bin:/usr/bin:/usr/ucb:/etc:.
- -
- - # Use this path for:
- - # Solaris 2.x with GCC
- -@@ -73,7 +73,7 @@ PATH=/opt/SUNWspro/bin:/usr/ccs/bin:/sbin:/bin:/usr/bin:/usr/ucb:/etc:.
- - # Tru64 UNIX
- - # SVR4
- - # Linux
- --#PATH=/bin:/usr/bin:/usr/ucb:/usr/ccs/bin:/sbin:/usr/sbin:.
- -+PATH=/bin:/usr/bin:/usr/ucb:/usr/ccs/bin:/sbin:/usr/sbin:.
- -
- - # Use this path for:
- - # DG/UX
- -@@ -130,12 +130,12 @@ LOCKTESTS=tlock
- -
- - # Use with Solaris 2.x systems. Need the 5.0 C compiler (or later)
- - # for 64-bit mode.
- --CC=/opt/SUNWspro/bin/cc
- -+#CC=/opt/SUNWspro/bin/cc
- - # Use this with GCC
- - #CC=/opt/gnu/bin/gcc
- - # Use this through Solaris 2.6. For Solaris 2.7 and later, use
- - # this for 32-bit mode applications.
- --CFLAGS=`echo -DSVR4 -DMMAP -DSOLARIS2X -DSTDARG`
- -+#CFLAGS=`echo -DSVR4 -DMMAP -DSOLARIS2X -DSTDARG`
- - # Use this with gcc (32-bit binaries):
- - #CFLAGS=`echo -DSVR4 -DMMAP -DSOLARIS2X -DSTDARG -mcpu=ultrasparc`
- - # For Solaris 2.7 and later, use this for 64-bit mode applications
- -@@ -143,7 +143,7 @@ CFLAGS=`echo -DSVR4 -DMMAP -DSOLARIS2X -DSTDARG`
- - #CFLAGS=`echo -DSVR4 -DMMAP -DSOLARIS2X -DSTDARG -xO0 -xarch=v9 -dalign -Xt -L/usr/lib/sparcv9`
- - # Use this to make 64-bit binaries with gcc (3.1 or later; untested):
- - #CFLAGS=`echo -DSVR4 -DMMAP -DSOLARIS2X -DSTDARG -m64`
- --LIBS=`echo -lsocket -lnsl`
- -+#LIBS=`echo -lsocket -lnsl`
- - # Use this through Solaris 2.5.1.
- - #LOCKTESTS=`echo tlock`
- - # Use with 2.6 and later systems, 32-bit mode.
- -@@ -204,11 +204,11 @@ LOCKTESTS=`echo tlocklfs tlock64`
- - #UMOUNT=/bin/umount
- -
- - # Use with Linux 2.4 / GNU libc 2.2
- --#CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG -fwritable-strings`
- -+CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG -fwritable-strings`
- - #LIBS=`echo -lnsl`
- --#MOUNT=/bin/mount
- --#UMOUNT=/bin/umount
- --#LOCKTESTS=`echo tlocklfs tlock64`
- -+MOUNT=/bin/mount
- -+UMOUNT=/bin/umount
- -+LOCKTESTS=`echo tlocklfs tlock64`
- -
- - # Use with Linux if your distro doesn't provide a "cc".
- - #CC=gcc
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0001-tools-Cygwin-3.6-port.patch b/tests/cthon04/0001-tools-Cygwin-3.6-port.patch
- new file mode 100644
- index 0000000..df9def9
- --- /dev/null
- +++ b/tests/cthon04/0001-tools-Cygwin-3.6-port.patch
- @@ -0,0 +1,61 @@
- +From 9279c46b92c037dc3cb9f4472a773539e0eb977d Mon Sep 17 00:00:00 2001
- +From: Roland Mainz <roland.mainz@nrubsig.org>
- +Date: Tue, 18 Feb 2025 17:11:09 +0100
- +Subject: [PATCH 1/4] tools: Cygwin 3.6 port
- +
- +Cygwin 3.6 port
- +
- +Signed-off-by: Roland Mainz <roland.mainz@nrubsig.org>
- +---
- + tools/dirdmp.c | 6 +++---
- + tools/dirprt.c | 2 +-
- + 2 files changed, 4 insertions(+), 4 deletions(-)
- +
- +diff --git a/tools/dirdmp.c b/tools/dirdmp.c
- +index 6b231a0..e8dcca3 100644
- +--- a/tools/dirdmp.c
- ++++ b/tools/dirdmp.c
- +@@ -7,8 +7,8 @@
- +
- + #include <sys/param.h>
- + #include <sys/types.h>
- +-#include <dirent.h>
- + #include <sys/stat.h>
- ++#include <dirent.h>
- + #include <fcntl.h>
- + #include <stdio.h>
- + #include <stdlib.h>
- +@@ -38,7 +38,7 @@ main(argc, argv)
- + int argc;
- + char *argv[];
- + {
- +-#if defined(LINUX) || defined (AIX)
- ++#if defined(LINUX) || defined(__CYGWIN__) || defined (AIX)
- + fprintf(stderr, "dirdmp is not supported on this platform.\n");
- + exit(1);
- + #else
- +@@ -50,7 +50,7 @@ main(argc, argv)
- + #endif /* LINUX || AIX */
- + }
- +
- +-#if !(defined(LINUX) || defined(AIX))
- ++#if !(defined(LINUX) || defined(__CYGWIN__) || defined(AIX))
- +
- + static void
- + print(dir)
- +diff --git a/tools/dirprt.c b/tools/dirprt.c
- +index a0630eb..acb9ec3 100644
- +--- a/tools/dirprt.c
- ++++ b/tools/dirprt.c
- +@@ -72,7 +72,7 @@ print(dir)
- + return;
- + }
- + while ((dp = readdir(dirp)) != NULL) {
- +-#if defined(SVR3) || defined(SVR4) || defined(LINUX)
- ++#if defined(SVR3) || defined(SVR4) || defined(LINUX) || defined(__CYGWIN__)
- + printf("%5ld %5ld %5d %s\n", (long)telldir(dirp),
- + (long)dp->d_ino,
- + dp->d_reclen, dp->d_name);
- +--
- +2.45.1
- +
- diff --git a/tests/cthon04/0002-basic-Workaround-for-ms-nfs41-client-POSIX-symlink-t.patch b/tests/cthon04/0002-basic-Workaround-for-ms-nfs41-client-POSIX-symlink-t.patch
- new file mode 100644
- index 0000000..007c958
- --- /dev/null
- +++ b/tests/cthon04/0002-basic-Workaround-for-ms-nfs41-client-POSIX-symlink-t.patch
- @@ -0,0 +1,31 @@
- +From 8c4799d4f3bab10be067e1074bffe043147ba7b0 Mon Sep 17 00:00:00 2001
- +From: Roland Mainz <roland.mainz@nrubsig.org>
- +Date: Tue, 18 Feb 2025 17:12:30 +0100
- +Subject: [PATCH 2/4] basic: Workaround for ms-nfs41-client POSIX symlink to
- + WinNT symlink syntax limitation
- +
- +Workaround for ms-nfs41-client POSIX symlink to WinNT symlink syntax,
- +WinNT does not have the concept of a global root like UNIX/POSIX,
- +so a symlink target currently gets rejected
- +
- +Signed-off-by: Roland Mainz <roland.mainz@nrubsig.org>
- +---
- + basic/test8.c | 2 +-
- + 1 file changed, 1 insertion(+), 1 deletion(-)
- +
- +diff --git a/basic/test8.c b/basic/test8.c
- +index d65eb3a..f993631 100644
- +--- a/basic/test8.c
- ++++ b/basic/test8.c
- +@@ -43,7 +43,7 @@ static int Tflag = 0; /* print timing */
- + static int Fflag = 0; /* test function only; set count to 1, negate -t */
- + static int Nflag = 0; /* Suppress directory operations */
- +
- +-#define SNAME "/this/is/a/symlink" /* symlink prefix */
- ++#define SNAME "/dev/this/is/a/symlink" /* symlink prefix */
- +
- + static void
- + usage()
- +--
- +2.45.1
- +
- diff --git a/tests/cthon04/0002-cthon-fixing-tools-compilation.patch b/tests/cthon04/0002-cthon-fixing-tools-compilation.patch
- deleted file mode 100644
- index 3c3b43f..0000000
- --- a/tests/cthon04/0002-cthon-fixing-tools-compilation.patch
- +++ /dev/null
- @@ -1,51 +0,0 @@
- -From ea26a4a5e46428dae198d11c9e07c7ce0bbcee91 Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:23:38 -0400
- -Subject: [PATCH 02/11] cthon: fixing tools compilation
- -
- ----
- - tools/Makefile | 4 ++--
- - tools/dirprt.c | 8 ++++----
- - 2 files changed, 6 insertions(+), 6 deletions(-)
- -
- -diff --git a/tools/Makefile b/tools/Makefile
- -index ce2cbc7..ce6019f 100644
- ---- a/tools/Makefile
- -+++ b/tools/Makefile
- -@@ -31,9 +31,9 @@ dirdmp: dirdmp.c
- - dirprt: dirprt.c
- - $(CC) $(CFLAGS) -o $@ $@.c $(LIBS)
- - pmaptst: pmaptst.c
- -- $(CC) $(CFLAGS) -o $@ $@.c $(LIBS)
- -+ $(CC) $(CFLAGS) -o $@ $@.c $(LIBS) -lrpc
- - pmapbrd: pmapbrd.c
- -- $(CC) $(CFLAGS) -o $@ $@.c $(LIBS)
- -+ $(CC) $(CFLAGS) -o $@ $@.c $(LIBS) -lrpc
- -
- - lint:
- - lint $(CFLAGS) tcp.c
- -diff --git a/tools/dirprt.c b/tools/dirprt.c
- -index a8b50ea..6f1f4ff 100644
- ---- a/tools/dirprt.c
- -+++ b/tools/dirprt.c
- -@@ -70,13 +70,13 @@ print(dir)
- - }
- - while ((dp = readdir(dirp)) != NULL) {
- - #if defined(SVR3) || defined(SVR4) || defined(LINUX)
- -- printf("%5ld %5ld %5d %s\n", (long)telldir(dirp),
- -+ printf("%5ld %5ld %s\n", (long)telldir(dirp),
- - (long)dp->d_ino,
- -- dp->d_reclen, dp->d_name);
- -+ dp->d_name);
- - #else
- -- printf("%5ld %5d %5d %5d %s\n", (long)telldir(dirp),
- -+ printf("%5ld %5d %5d %s\n", (long)telldir(dirp),
- - dp->d_fileno,
- -- dp->d_reclen, dp->d_namlen, dp->d_name);
- -+ dp->d_namlen, dp->d_name);
- - #endif
- - }
- - closedir(dirp);
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0003-cthon-fixing-locks-compilation-problem.patch b/tests/cthon04/0003-cthon-fixing-locks-compilation-problem.patch
- deleted file mode 100644
- index 434a36d..0000000
- --- a/tests/cthon04/0003-cthon-fixing-locks-compilation-problem.patch
- +++ /dev/null
- @@ -1,29 +0,0 @@
- -From 97bc9d6416c65d7f41c43847f99ace92ac78254c Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:23:53 -0400
- -Subject: [PATCH 03/11] cthon: fixing locks compilation problem
- -
- ----
- - lock/tlock.c | 2 ++
- - 1 files changed, 2 insertions(+), 0 deletions(-)
- -
- -diff --git a/lock/tlock.c b/lock/tlock.c
- -index 8a7d0cc..fe8c760 100644
- ---- a/lock/tlock.c
- -+++ b/lock/tlock.c
- -@@ -75,10 +75,12 @@
- - #include <inttypes.h>
- -
- - #if defined(LARGE_LOCKS) && !defined(_LFS64_LARGEFILE) && !defined(MACOSX)
- -+/*
- - This machine cannot compile the 64 bit version of this test using the
- - LARGE_LOCKS symbol.
- - If your machine uses native 64-bit offsets, you should not define
- - LARGE_LOCKS.
- -+*/
- - #endif
- -
- - #ifndef HZ
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0003-lock-Fix-issue-with-tlock-path.patch b/tests/cthon04/0003-lock-Fix-issue-with-tlock-path.patch
- new file mode 100644
- index 0000000..45dd4ee
- --- /dev/null
- +++ b/tests/cthon04/0003-lock-Fix-issue-with-tlock-path.patch
- @@ -0,0 +1,28 @@
- +From fa34ebf1b4ea266129d05e79f3d594fd70752226 Mon Sep 17 00:00:00 2001
- +From: Roland Mainz <roland.mainz@nrubsig.org>
- +Date: Tue, 18 Feb 2025 17:15:21 +0100
- +Subject: [PATCH 3/4] lock: Fix issue with tlock path
- +
- +Fix issue with tlock path
- +
- +Signed-off-by: Roland Mainz <roland.mainz@nrubsig.org>
- +---
- + lock/runtests | 2 +-
- + 1 file changed, 1 insertion(+), 1 deletion(-)
- +
- +diff --git a/lock/runtests b/lock/runtests
- +index 21b09a5..4db16e2 100755
- +--- a/lock/runtests
- ++++ b/lock/runtests
- +@@ -64,7 +64,7 @@ do
- + ;;
- + esac
- + echo ""
- +- $i $TESTARGS $NFSTESTDIR
- ++ ./$i $TESTARGS $NFSTESTDIR
- + done
- +
- + echo "Congratulations, you passed the locking tests!"
- +--
- +2.45.1
- +
- diff --git a/tests/cthon04/0004-cthon-removed-fwritable-strings-from-cflags.patch b/tests/cthon04/0004-cthon-removed-fwritable-strings-from-cflags.patch
- deleted file mode 100644
- index 19543f0..0000000
- --- a/tests/cthon04/0004-cthon-removed-fwritable-strings-from-cflags.patch
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -From 8be0e35514ff0be2c0023065000ae80dbf312a8d Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:24:10 -0400
- -Subject: [PATCH 04/11] cthon: removed -fwritable-strings from cflags
- -
- ----
- - tests.init | 3 ++-
- - 1 files changed, 2 insertions(+), 1 deletions(-)
- -
- -diff --git a/tests.init b/tests.init
- -index e55a4aa..3a1ba74 100644
- ---- a/tests.init
- -+++ b/tests.init
- -@@ -204,7 +204,8 @@ LOCKTESTS=`echo tlocklfs tlock64`
- - #UMOUNT=/bin/umount
- -
- - # Use with Linux 2.4 / GNU libc 2.2
- --CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG -fwritable-strings`
- -+#CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG -fwritable-strings`
- -+CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG`
- - #LIBS=`echo -lnsl`
- - MOUNT=/bin/mount
- - UMOUNT=/bin/umount
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0004-special-tools-HACK-Disable-tests-which-cannot-work-o.patch b/tests/cthon04/0004-special-tools-HACK-Disable-tests-which-cannot-work-o.patch
- new file mode 100644
- index 0000000..6664fa4
- --- /dev/null
- +++ b/tests/cthon04/0004-special-tools-HACK-Disable-tests-which-cannot-work-o.patch
- @@ -0,0 +1,60 @@
- +From 190b1032a6dad762fdd5d015320788aa8e259672 Mon Sep 17 00:00:00 2001
- +From: Roland Mainz <roland.mainz@nrubsig.org>
- +Date: Tue, 18 Feb 2025 17:17:39 +0100
- +Subject: [PATCH 4/4] special,tools: HACK: Disable tests which cannot work on
- + Cygwin/ms-nfs41-client
- +
- +HACK: Disable tests which cannot work on Cygwin/ms-nfs41-client
- +
- +Signed-off-by: Roland Mainz <roland.mainz@nrubsig.org>
- +---
- + special/Makefile | 4 ++--
- + special/runtests.wrk | 2 +-
- + tools/Makefile | 2 +-
- + 3 files changed, 4 insertions(+), 4 deletions(-)
- +
- +diff --git a/special/Makefile b/special/Makefile
- +index 77215c1..36f4978 100644
- +--- a/special/Makefile
- ++++ b/special/Makefile
- +@@ -3,9 +3,9 @@
- + # 1.4 Lachman ONC Test Suite source
- + #
- +
- +-TESTS=op_unlk op_ren op_chmod dupreq excltest negseek rename holey \
- ++TESTS=op_unlk op_chmod dupreq excltest negseek rename holey \
- + truncate nfsidem nstat stat stat2 touchn fstat rewind \
- +- telldir bigfile bigfile2 freesp
- ++ telldir bigfile bigfile2 freesp
- + DOSRUNFILES = scripts/*.bat
- + DOSBUILDFILES = console/*.bat console/*.mak dos/*.bat dos/*.mak
- + DOSFILES = $(DOSRUNFILES) $(DOSBUILDFILES)
- +diff --git a/special/runtests.wrk b/special/runtests.wrk
- +index 8f099fa..385ac61 100644
- +--- a/special/runtests.wrk
- ++++ b/special/runtests.wrk
- +@@ -29,7 +29,7 @@ if [ "$CIFS" = "yes" ] && echo $MNTOPTIONS | grep -E "vers=2|vers=3" > /dev/null
- + then
- + echo "skipping test; not supported by SMB 2.0 and higher versions"
- + else
- +- TMPDIR= ./op_ren
- ++ : # TMPDIR= ./op_ren
- + fi
- +
- + echo ""
- +diff --git a/tools/Makefile b/tools/Makefile
- +index ce2cbc7..8cc1903 100644
- +--- a/tools/Makefile
- ++++ b/tools/Makefile
- +@@ -8,7 +8,7 @@
- + # 'make copy DESTDIR=path' copies test programs to path
- + # 'make dist DESTDIR=path' copies sources to path
- +
- +-TESTS = tcp tcpd udp udpd dirdmp dirprt pmaptst pmapbrd
- ++TESTS = tcp tcpd udp udpd dirdmp dirprt
- +
- + # dirdmp apparently doesn't work with Linux 2.2. So for Linux systems,
- + # comment out the above definition and use this one.
- +--
- +2.45.1
- +
- diff --git a/tests/cthon04/0005-cthon-general-scripts-use-.exe-extension-dirent.h.patch b/tests/cthon04/0005-cthon-general-scripts-use-.exe-extension-dirent.h.patch
- deleted file mode 100644
- index eb69b45..0000000
- --- a/tests/cthon04/0005-cthon-general-scripts-use-.exe-extension-dirent.h.patch
- +++ /dev/null
- @@ -1,169 +0,0 @@
- -From c2e26900f6631eea3b5f7e09af30b68243339162 Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:24:29 -0400
- -Subject: [PATCH 05/11] cthon: general scripts use .exe extension, dirent.h
- -
- -large*.c files include <dirent.h> instead of <sys/dir.h>
- ----
- - general/large.c | 8 ++++----
- - general/large1.c | 8 ++++----
- - general/large2.c | 8 ++++----
- - general/large3.c | 8 ++++----
- - general/large4.sh | 2 +-
- - general/runtests.wrk | 14 +++++++-------
- - 6 files changed, 24 insertions(+), 24 deletions(-)
- -
- -diff --git a/general/large.c b/general/large.c
- -index 5dd2950..1ae2e85 100644
- ---- a/general/large.c
- -+++ b/general/large.c
- -@@ -9,11 +9,11 @@
- - #include <stdio.h>
- - #include <ctype.h>
- - #include <signal.h>
- --#ifdef SVR4
- -+//#ifdef SVR4
- - #include <dirent.h>
- --#else
- --#include <sys/dir.h>
- --#endif
- -+//#else
- -+//#include <sys/dir.h>
- -+//#endif
- -
- - #undef MAXNAMLEN
- - #define MAXNAMLEN 256
- -diff --git a/general/large1.c b/general/large1.c
- -index 5dd2950..1ae2e85 100644
- ---- a/general/large1.c
- -+++ b/general/large1.c
- -@@ -9,11 +9,11 @@
- - #include <stdio.h>
- - #include <ctype.h>
- - #include <signal.h>
- --#ifdef SVR4
- -+//#ifdef SVR4
- - #include <dirent.h>
- --#else
- --#include <sys/dir.h>
- --#endif
- -+//#else
- -+//#include <sys/dir.h>
- -+//#endif
- -
- - #undef MAXNAMLEN
- - #define MAXNAMLEN 256
- -diff --git a/general/large2.c b/general/large2.c
- -index 5dd2950..1ae2e85 100644
- ---- a/general/large2.c
- -+++ b/general/large2.c
- -@@ -9,11 +9,11 @@
- - #include <stdio.h>
- - #include <ctype.h>
- - #include <signal.h>
- --#ifdef SVR4
- -+//#ifdef SVR4
- - #include <dirent.h>
- --#else
- --#include <sys/dir.h>
- --#endif
- -+//#else
- -+//#include <sys/dir.h>
- -+//#endif
- -
- - #undef MAXNAMLEN
- - #define MAXNAMLEN 256
- -diff --git a/general/large3.c b/general/large3.c
- -index 5dd2950..1ae2e85 100644
- ---- a/general/large3.c
- -+++ b/general/large3.c
- -@@ -9,11 +9,11 @@
- - #include <stdio.h>
- - #include <ctype.h>
- - #include <signal.h>
- --#ifdef SVR4
- -+//#ifdef SVR4
- - #include <dirent.h>
- --#else
- --#include <sys/dir.h>
- --#endif
- -+//#else
- -+//#include <sys/dir.h>
- -+//#endif
- -
- - #undef MAXNAMLEN
- - #define MAXNAMLEN 256
- -diff --git a/general/large4.sh b/general/large4.sh
- -index 7c3117f..954a23f 100644
- ---- a/general/large4.sh
- -+++ b/general/large4.sh
- -@@ -10,4 +10,4 @@ $CC $CFLAGS -o large1 large1.c&
- - $CC $CFLAGS -o large2 large2.c&
- - $CC $CFLAGS -o large3 large3.c&
- - wait
- --rm large large1 large2 large3
- -+rm large.exe large1.exe large2.exe large3.exe
- -diff --git a/general/runtests.wrk b/general/runtests.wrk
- -index 5efc091..83f3124 100644
- ---- a/general/runtests.wrk
- -+++ b/general/runtests.wrk
- -@@ -60,7 +60,7 @@ $TIME $CC $CFLAGS -o stat stat.c -lm 2>> smcomp.time || eval $errexit
- - $TIME $CC $CFLAGS -o stat stat.c -lm 2>> smcomp.time || eval $errexit
- - $TIME $CC $CFLAGS -o stat stat.c -lm 2>> smcomp.time || eval $errexit
- - set -e
- --./stat smcomp.time
- -+./stat.exe smcomp.time
- - set +e
- -
- - echo ""
- -@@ -76,7 +76,7 @@ set -e
- - # versions of tbl.
- - egrep -v '^tbl:.*$' <tbl.time >tbl.new
- - mv -f tbl.new tbl.time
- --./stat tbl.time
- -+./stat.exe tbl.time
- - set +e
- -
- - echo ""
- -@@ -89,7 +89,7 @@ $TIME nroff < nroff.tbl > nroff.out 2>> nroff.time || cat nroff.time
- - $TIME nroff < nroff.tbl > nroff.out 2>> nroff.time || cat nroff.time
- - rm nroff.out nroff.tbl
- - set -e
- --./stat nroff.time
- -+./stat.exe nroff.time
- - set +e
- -
- - echo ""
- -@@ -101,9 +101,9 @@ $TIME $CC $CFLAGS -o large large.c 2>> lrgcomp.time || eval $errexit
- - $TIME $CC $CFLAGS -o large large.c 2>> lrgcomp.time || eval $errexit
- - $TIME $CC $CFLAGS -o large large.c 2>> lrgcomp.time || eval $errexit
- - $TIME $CC $CFLAGS -o large large.c 2>> lrgcomp.time || eval $errexit
- --rm large
- -+rm large.exe
- - set -e
- --./stat lrgcomp.time
- -+./stat.exe lrgcomp.time
- - set +e
- -
- - echo ""
- -@@ -116,7 +116,7 @@ $TIME ./large4.sh 2>> 4lrg.time || eval $errexit
- - $TIME ./large4.sh 2>> 4lrg.time || eval $errexit
- - $TIME ./large4.sh 2>> 4lrg.time || eval $errexit
- - set -e
- --./stat 4lrg.time
- -+./stat.exe 4lrg.time
- - set +e
- -
- - echo ""
- -@@ -134,7 +134,7 @@ rmdummy
- - grep -iv warning: makefile.time | grep -v 'make: ' > makefile.time2
- - mv makefile.time2 makefile.time
- - set -e
- --./stat makefile.time
- -+./stat.exe makefile.time
- - set +e
- -
- - echo ""
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0006-cthon-fixing-op_unlk-op_ren.patch b/tests/cthon04/0006-cthon-fixing-op_unlk-op_ren.patch
- deleted file mode 100644
- index 9e5f073..0000000
- --- a/tests/cthon04/0006-cthon-fixing-op_unlk-op_ren.patch
- +++ /dev/null
- @@ -1,72 +0,0 @@
- -From c640dc4eff98fe70732d0225d7b3f3e2b2e33e35 Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:24:54 -0400
- -Subject: [PATCH 06/11] cthon: fixing op_unlk op_ren
- -
- -fixing "ls" commands that unsuccessfully look for ".nfsXXXX" files instead of "nfsXXXX" files
- ----
- - special/op_ren.c | 6 +++---
- - special/op_unlk.c | 6 +++---
- - 2 files changed, 6 insertions(+), 6 deletions(-)
- -
- -diff --git a/special/op_ren.c b/special/op_ren.c
- -index 348b4f9..73fa409 100644
- ---- a/special/op_ren.c
- -+++ b/special/op_ren.c
- -@@ -120,13 +120,13 @@ main(argc, argv)
- - #endif /* O_RDWR */
- -
- - printf("nfsjunk files before rename:\n ");
- -- system("ls -al .nfs*");
- -+ system("ls -al nfs*");
- - ret = rename(taname, tbname);
- - printf("%s open; rename ret = %d\n", tbname, ret);
- - if (ret)
- - xxit(" unlink");
- - printf("nfsjunk files after rename:\n ");
- -- system("ls -al .nfs*");
- -+ system("ls -al nfs*");
- - strcpy(wbuf, TMSG);
- - if ((ret = write(fd, wbuf, TBUFSIZ)) != TBUFSIZ) {
- - fprintf(stderr, "write ret %d; expected %d\n", ret, TBUFSIZ);
- -@@ -165,7 +165,7 @@ main(argc, argv)
- - }
- -
- - printf("nfsjunk files after close:\n ");
- -- system("ls -al .nfs*");
- -+ system("ls -al nfs*");
- -
- - if ((ret = close(fd)) == 0) {
- - errcount++;
- -diff --git a/special/op_unlk.c b/special/op_unlk.c
- -index 93a09b0..d5e5efc 100644
- ---- a/special/op_unlk.c
- -+++ b/special/op_unlk.c
- -@@ -78,13 +78,13 @@ main(argc, argv)
- - #ifndef WIN32
- - /* For WIN you can not delete the file if it is open */
- - printf("nfsjunk files before unlink:\n ");
- -- system("ls -al .nfs*");
- -+ system("ls -al nfs*");
- - ret = unlink(tname);
- - printf("%s open; unlink ret = %d\n", tname, ret);
- - if (ret)
- - xxit(" unlink");
- - printf("nfsjunk files after unlink:\n ");
- -- system("ls -al .nfs*");
- -+ system("ls -al nfs*");
- - #endif
- - strcpy(wbuf, TMSG);
- - if ((ret = write(fd, wbuf, TBUFSIZ)) != TBUFSIZ) {
- -@@ -137,7 +137,7 @@ main(argc, argv)
- -
- - #ifndef WIN32
- - printf("nfsjunk files after close:\n ");
- -- system("ls -al .nfs*");
- -+ system("ls -al nfs*");
- - #endif
- -
- - if ((ret = close(fd)) == 0) {
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0007-cthon-porting-lock-tests-to-win32-api.patch b/tests/cthon04/0007-cthon-porting-lock-tests-to-win32-api.patch
- deleted file mode 100644
- index 766b084..0000000
- --- a/tests/cthon04/0007-cthon-porting-lock-tests-to-win32-api.patch
- +++ /dev/null
- @@ -1,577 +0,0 @@
- -From 8a73c727370c3062ff06f9203efbcc81ad37497e Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:25:16 -0400
- -Subject: [PATCH 07/11] cthon: porting lock tests to win32 api
- -
- -added '#ifdef _WIN32' blocks to implement the following changes:
- -
- -int testfd -> HANDLE testfd
- -open() -> CreateFile()
- -close() -> CloseHandle()
- -unlink() -> DeleteFile()
- -write() -> WriteFile()
- -read() -> ReadFile()
- -ftruncate() -> SetFilePointer()+SetEndOfFile()
- -mmap() -> CreateFileMapping()+MapViewOfFile()
- -munmap() -> UnmapViewOfFile()+CloseHandle()
- -lockf(F_LOCK) -> LockFileEx()
- -lockf(F_TLOCK) -> LockFile()
- -lockf(F_ULOCK) -> UnlockFileEx()
- -lockf(F_TEST) -> LockFile()+UnlockFileEx()
- -
- -some tests expect an overflow error when the lock range wraps, but win32 allows this. changed the expected errors for checks in _WIN32
- -
- -skipping test8, which times 1000 consecutive calls to lock/unlock. this doesn't tell us anything, except that we're slow
- -
- -skipping test10 which checks for splitting lock regions; in windows, the unlock range must match lock range exactly
- -
- -for test11, the _WIN32 path reopens the file instead of using dup()/dup2(); the windows DuplicateHandle() function works differently, in that both copies of the handle must be closed before it releases its locks
- -
- -for test12, it forks an extra 'subchild' process, takes a lock, then kills the process to make sure it releases the lock. had to move the open call from the child block into the subchild block for this to work; otherwise, the lock wouldn't release because the child still holds a handle
- ----
- - lock/tlock.c | 273 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
- - 1 files changed, 251 insertions(+), 22 deletions(-)
- -
- -diff --git a/lock/tlock.c b/lock/tlock.c
- -index fe8c760..dac3519 100644
- ---- a/lock/tlock.c
- -+++ b/lock/tlock.c
- -@@ -54,6 +54,12 @@
- - #endif
- - #endif
- -
- -+#define _WIN32
- -+
- -+#ifdef _WIN32
- -+# include <Windows.h>
- -+#endif
- -+
- - #include <stdio.h>
- - #include <stdlib.h>
- - #include <signal.h>
- -@@ -135,8 +141,16 @@ static int pidpipe[2];
- -
- - static char testfile[256]; /* file for locking test */
- - static char *filepath = ".";
- -+#ifdef _WIN32
- -+static HANDLE testfd;
- -+#else
- - static int testfd;
- -+#endif
- -+
- - #ifdef MMAP
- -+#ifdef _WIN32
- -+static HANDLE mappinghandle;
- -+#endif
- - static caddr_t mappedaddr; /* address file is mapped to (some tests) */
- - static off_t mappedlen;
- - #endif
- -@@ -586,12 +600,21 @@ open_testfile(flags, modes)
- - int flags;
- - int modes;
- - {
- --
- -+#ifdef _WIN32
- -+ testfd = CreateFile(testfile, GENERIC_READ | GENERIC_WRITE,
- -+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
- -+ FILE_ATTRIBUTE_NORMAL, NULL);
- -+ if (testfd == INVALID_HANDLE_VALUE) {
- -+ fprintf(stderr, "CreateFile(%s) returned %d\n", testfile, GetLastError());
- -+ testexit(1);
- -+ }
- -+#else
- - testfd = open(testfile, flags, modes);
- - if (testfd < 0) {
- - perror("tlock: open");
- - testexit(1);
- - }
- -+#endif
- - }
- -
- - static void
- -@@ -599,11 +622,17 @@ close_testfile(cleanup)
- - int cleanup;
- - {
- -
- -- if (cleanup == JUST_CLOSE)
- -- comment("Closed testfile.");
- -+ if (cleanup == JUST_CLOSE)
- -+ comment("Closed testfile.");
- -+#ifdef _WIN32
- -+ CloseHandle(testfd);
- -+ if (cleanup == DO_UNLINK)
- -+ DeleteFile(testfile);
- -+#else
- - close(testfd);
- - if (cleanup == DO_UNLINK)
- - (void) unlink(testfile);
- -+#endif
- - }
- -
- - static void
- -@@ -615,12 +644,28 @@ write_testfile(datap, offset, count, do_comment)
- - {
- - int result;
- -
- -+#ifdef _WIN32
- -+ {
- -+ DWORD bytes = 0;
- -+ LARGE_INTEGER off = { offset };
- -+ OVERLAPPED overlapped = { 0 };
- -+ overlapped.Offset = off.LowPart;
- -+ overlapped.OffsetHigh = off.HighPart;
- -+
- -+ if (!WriteFile(testfd, datap, count, &bytes, &overlapped)) {
- -+ fprintf(stderr, "WriteFile() failed with %d\n", GetLastError());
- -+ testexit(1);
- -+ }
- -+ result = bytes;
- -+ }
- -+#else
- - (void) lseek(testfd, offset, 0);
- - result = write(testfd, datap, count);
- - if (result < 0) {
- - perror("tlock: testfile write");
- - testexit(1);
- - }
- -+#endif
- - if (result != count) {
- - fprintf(stderr, "tlock: short write (got %d, expected %d)\n",
- - result, count);
- -@@ -663,6 +708,21 @@ read_testfile(test, sec, datap, offset, count, pass, fail)
- - exit(1);
- - }
- -
- -+#ifdef _WIN32
- -+ {
- -+ DWORD bytes = 0;
- -+ LARGE_INTEGER off = { offset };
- -+ OVERLAPPED overlapped = { 0 };
- -+ overlapped.Offset = off.LowPart;
- -+ overlapped.OffsetHigh = off.HighPart;
- -+
- -+ if (!ReadFile(testfd, array, count, &bytes, &overlapped)) {
- -+ fprintf(stderr, "ReadFile() failed with %d\n", GetLastError());
- -+ testexit(1);
- -+ }
- -+ result = bytes;
- -+ }
- -+#else
- - (void) lseek(testfd, offset, 0);
- - if (count > IORATE_BUFSIZE)
- - count = IORATE_BUFSIZE;
- -@@ -671,6 +731,7 @@ read_testfile(test, sec, datap, offset, count, pass, fail)
- - perror("tlock: testfile read");
- - testexit(1);
- - }
- -+#endif
- - if (result != count) {
- - fprintf(stderr, "tlock: short read (got %d, expected %d)\n",
- - result, count);
- -@@ -703,7 +764,6 @@ testdup2(fd1, fd2)
- - int fd1;
- - int fd2;
- - {
- --
- - if (dup2(fd1, fd2) < 0) {
- - perror("tlock: dup2");
- - testexit(1);
- -@@ -713,12 +773,22 @@ testdup2(fd1, fd2)
- - static void
- - testtruncate()
- - {
- --
- -- comment("Truncated testfile.");
- -+ comment("Truncated testfile.");
- -+#ifdef _WIN32
- -+ if (SetFilePointer(testfd, 0, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
- -+ fprintf(stderr, "SetFilePointer() failed with %d\n", GetLastError());
- -+ testexit(1);
- -+ }
- -+ if (!SetEndOfFile(testfd)) {
- -+ fprintf(stderr, "SetEndOfFile() failed with %d\n", GetLastError());
- -+ testexit(1);
- -+ }
- -+#else
- - if (ftruncate(testfd, (off_t)0) < 0) {
- - perror("tlock: ftruncate");
- - testexit(1);
- - }
- -+#endif
- - }
- -
- - #ifdef MMAP
- -@@ -735,25 +805,120 @@ testtruncate()
- - static int
- - testmmap()
- - {
- -+#ifdef _WIN32
- -+ LARGE_INTEGER len = { mappedlen };
- -+
- -+ mappinghandle = CreateFileMapping(testfd, NULL,
- -+ PAGE_READWRITE, len.HighPart, len.LowPart, NULL);
- -+ if (mappinghandle == INVALID_HANDLE_VALUE)
- -+ return GetLastError();
- -+
- -+ mappedaddr = MapViewOfFile(mappinghandle, FILE_MAP_READ | FILE_MAP_WRITE,
- -+ 0, 0, len.QuadPart);
- -+ if (mappedaddr == NULL)
- -+ return GetLastError();
- -+#else
- - mappedaddr = mmap(0, mappedlen, PROT_READ | PROT_WRITE, MAP_SHARED,
- - testfd, (off_t)0);
- - if (mappedaddr == (caddr_t)MAP_FAILED)
- - return (errno);
- -+#endif
- - return (0);
- - }
- -
- - static void
- - testmunmap()
- - {
- -- comment("unmap testfile.");
- -+ comment("unmap testfile.");
- -+#ifdef _WIN32
- -+ if (!UnmapViewOfFile(mappedaddr)) {
- -+ fprintf(stderr, "UnmapViewOfFile() failed with %d\n", GetLastError());
- -+ testexit(1);
- -+ }
- -+ CloseHandle(mappinghandle);
- -+#else
- - if (munmap(mappedaddr, mappedlen) < 0) {
- - perror("Can't unmap testfile.");
- - testexit(1);
- - }
- -+#endif
- - mappedaddr = (caddr_t)0xdeadbeef;
- - }
- - #endif /* MMAP */
- -
- -+#ifdef _WIN32
- -+
- -+static int map_lock_error(int num, int sec, int status) {
- -+ switch (status) {
- -+ case NO_ERROR: return 0;
- -+ case ERROR_NOT_LOCKED:
- -+ case ERROR_LOCK_VIOLATION: return denied_err;
- -+ default:
- -+ comment("%d.%d unexpected windows error %d", num, sec, status);
- -+ testexit(1);
- -+ }
- -+}
- -+
- -+static void
- -+test(num, sec, func, offset, length, pass, fail)
- -+int num; /* test number */
- -+int sec; /* section number */
- -+int func; /* lockf function to invoke */
- -+off_t offset; /* starting offset of lock */
- -+off_t length; /* length of lock */
- -+int pass; /* expected return code */
- -+int fail; /* error vs warning */
- -+{
- -+ int result = PASS;
- -+ LARGE_INTEGER off = { offset };
- -+ LARGE_INTEGER len = { length };
- -+ OVERLAPPED overlapped = { 0 };
- -+ overlapped.Offset = off.LowPart;
- -+ overlapped.OffsetHigh = off.HighPart;
- -+
- -+ if (off.QuadPart + len.QuadPart < 0) {
- -+ result = EINVAL;
- -+ goto out;
- -+ }
- -+ if (length == 0)
- -+ len.QuadPart = ULLONG_MAX - offset;
- -+ if (len.QuadPart == 0) {
- -+ result = EINVAL;
- -+ goto out;
- -+ }
- -+
- -+ switch (func) {
- -+ case F_LOCK: /* blocking lock */
- -+ if (!LockFileEx(testfd, LOCKFILE_EXCLUSIVE_LOCK,
- -+ 0, len.LowPart, len.HighPart, &overlapped))
- -+ result = map_lock_error(num, sec, GetLastError());
- -+ break;
- -+
- -+ case F_TLOCK: /* non-blocking lock */
- -+ if (!LockFile(testfd, off.LowPart, off.HighPart, len.LowPart, len.HighPart))
- -+ result = map_lock_error(num, sec, GetLastError());
- -+ break;
- -+
- -+ case F_ULOCK:
- -+ if (!UnlockFileEx(testfd, 0, len.LowPart, len.HighPart, &overlapped))
- -+ result = map_lock_error(num, sec, GetLastError());
- -+ break;
- -+
- -+ case F_TEST:
- -+ if (!LockFile(testfd, off.LowPart, off.HighPart, len.LowPart, len.HighPart)) {
- -+ result = map_lock_error(num, sec, GetLastError());
- -+ } else if (!UnlockFileEx(testfd, 0, len.LowPart, len.HighPart, &overlapped)) {
- -+ fprintf(stderr, "UnlockFileEx() returned %d\n", GetLastError());
- -+ testexit(1);
- -+ }
- -+ break;
- -+ }
- -+out:
- -+ report(num, sec, tfunstr(func), offset, length, pass, result, fail);
- -+}
- -+
- -+#else /* !_WIN32 */
- -+
- - #ifdef USE_LOCKF
- -
- - static void
- -@@ -854,11 +1019,16 @@ test(num, sec, func, offset, length, pass, fail)
- - }
- -
- - #endif /* USE_LOCKF */
- -+#endif /* !_WIN32 */
- -
- - static void
- - rate(cnt)
- - int cnt;
- - {
- -+#ifdef _WIN32
- -+ LARGE_INTEGER len = { 1 };
- -+ OVERLAPPED overlapped = { 0 };
- -+#endif
- - int i;
- - long beg;
- - long end;
- -@@ -867,9 +1037,17 @@ rate(cnt)
- -
- - beg = times(&tms);
- - for (i = 0; i < cnt; i++) {
- -+#ifdef _WIN32
- -+ if (!LockFileEx(testfd, LOCKFILE_EXCLUSIVE_LOCK, 0,
- -+ len.LowPart, len.HighPart, &overlapped) ||
- -+ !UnlockFileEx(testfd, 0, len.LowPart,
- -+ len.HighPart, &overlapped)) {
- -+ fprintf(stderr, "tlock: rate error=%d.\n", GetLastError());
- -+#else
- - if ((lockf(testfd, F_LOCK, 1) != 0) ||
- - (lockf(testfd, F_ULOCK, 1) != 0)) {
- - fprintf(stderr, "tlock: rate error=%d.\n", errno);
- -+#endif
- - tstfail++;
- - break;
- - }
- -@@ -972,8 +1150,11 @@ test1()
- - * integer, no overflow). So treat those failures as
- - * warnings, not fatal.
- - */
- -- test(1, 9, F_TEST, maxeof, maxeof, oflow_err,
- -- WARN);
- -+#ifdef _WIN32
- -+ test(1, 9, F_TEST, maxeof, maxeof, PASS, FATAL);
- -+#else
- -+ test(1, 9, F_TEST, maxeof, maxeof, oflow_err, WARN);
- -+#endif
- - close_testfile(DO_UNLINK);
- - childfree(0);
- - } else {
- -@@ -1006,10 +1187,12 @@ test2()
- - test(2, 5, F_TEST, (off_t)1, (off_t)END, denied_err, FATAL);
- - test(2, 6, F_TEST, (off_t)1, maxeof, denied_err, FATAL);
- - test(2, 7, F_TEST, maxeof, (off_t)1, denied_err, FATAL);
- -- test(2, 8, F_TEST, maxeof, (off_t)END, denied_err,
- -- FATAL);
- -- test(2, 9, F_TEST, maxeof, maxeof, oflow_err,
- -- WARN);
- -+ test(2, 8, F_TEST, maxeof, (off_t)END, denied_err, FATAL);
- -+#ifdef _WIN32
- -+ test(2, 9, F_TEST, maxeof, maxeof, denied_err, FATAL);
- -+#else
- -+ test(2, 9, F_TEST, maxeof, maxeof, oflow_err, WARN);
- -+#endif
- - close_testfile(DO_UNLINK);
- - parentfree(0);
- - }
- -@@ -1135,8 +1318,12 @@ test6()
- - FATAL);
- - test(6, 3, F_TEST, maxeof - 1, (off_t)END,
- - denied_err, FATAL);
- -- test(6, 4, F_TEST, maxeof, (off_t)1, denied_err, FATAL);
- -+ test(6, 4, F_TEST, maxeof, (off_t)1, denied_err, FATAL);
- -+#ifdef _WIN32
- -+ test(6, 5, F_TEST, maxeof, (off_t)2, denied_err, FATAL);
- -+#else
- - test(6, 5, F_TEST, maxeof, (off_t)2, oflow_err, WARN);
- -+#endif
- - test(6, 6, F_TEST, maxeof, (off_t)END, denied_err,
- - FATAL);
- - test(6, 7, F_TEST, (off_t)maxplus1, (off_t)END, EINVAL,
- -@@ -1320,7 +1507,9 @@ test10()
- - static void
- - test11()
- - {
- -+#ifndef _WIN32
- - int dupfd;
- -+#endif
- - char *data = "123456789abcdef";
- - int datalen;
- -
- -@@ -1330,28 +1519,42 @@ test11()
- - parentwait();
- - header(11, "Make sure close() releases the process's locks.");
- - open_testfile(OPENFLAGS, OPENMODES);
- -+#ifndef _WIN32
- - dupfd = dup(testfd);
- -+#endif
- - test(11, 0, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
- - close_testfile(JUST_CLOSE);
- - childfree(0);
- -
- -- parentwait();
- -- testdup2(dupfd, testfd);
- -+ parentwait();
- -+#ifdef _WIN32
- -+ open_testfile(OPENFLAGS, OPENMODES);
- -+#else
- -+ testdup2(dupfd, testfd);
- -+#endif
- - test(11, 3, F_TLOCK, (off_t)29, (off_t)1463, PASS, FATAL);
- - test(11, 4, F_TLOCK, (off_t)0x2000, (off_t)87, PASS, FATAL);
- - close_testfile(JUST_CLOSE);
- - childfree(0);
- -
- -- parentwait();
- -- testdup2(dupfd, testfd);
- -+ parentwait();
- -+#ifdef _WIN32
- -+ open_testfile(OPENFLAGS, OPENMODES);
- -+#else
- -+ testdup2(dupfd, testfd);
- -+#endif
- - write_testfile(data, (off_t)0, datalen, COMMENT);
- - test(11, 7, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
- - write_testfile(data, (off_t)(datalen - 3), datalen, COMMENT);
- - close_testfile(JUST_CLOSE);
- - childfree(0);
- -
- -- parentwait();
- -+ parentwait();
- -+#ifdef _WIN32
- -+ open_testfile(OPENFLAGS, OPENMODES);
- -+#else
- - testdup2(dupfd, testfd);
- -+#endif
- - write_testfile(data, (off_t)0, datalen, COMMENT);
- - test(11, 10, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
- - testtruncate();
- -@@ -1359,7 +1562,9 @@ test11()
- - childfree(0);
- -
- - parentwait();
- -+#ifndef _WIN32
- - close(dupfd);
- -+#endif
- - close_testfile(DO_UNLINK);
- - } else {
- - parentfree(0);
- -@@ -1400,8 +1605,10 @@ test12()
- - open_testfile(OPENFLAGS, OPENMODES);
- - childfree(0);
- -
- -- parentwait();
- -+ parentwait();
- -+#ifndef _WIN32
- - (void) lseek(testfd, (off_t)0, 0);
- -+#endif
- - if (read(pidpipe[0], &target, sizeof (target)) !=
- - sizeof (target)) {
- - perror("can't read pid to kill");
- -@@ -1420,7 +1627,9 @@ test12()
- -
- - parentfree(0);
- - childwait();
- -+#ifndef _WIN32
- - open_testfile(OPENFLAGS, OPENMODES);
- -+#endif
- - /*
- - * Create a subprocess to obtain a lock and get killed. If
- - * the parent kills the regular child, tlock will stop
- -@@ -1440,7 +1649,9 @@ test12()
- - if (subchild > 0) {
- - /* original child */
- - sleep(wait_time);
- -+#ifndef _WIN32
- - (void) lseek(testfd, (off_t)0, 0);
- -+#endif
- - if (write(pidpipe[1], &subchild, sizeof (subchild)) !=
- - sizeof (subchild)) {
- - perror("can't record pid to kill");
- -@@ -1449,11 +1660,16 @@ test12()
- - }
- - parentfree(0);
- - childwait();
- -+#ifndef _WIN32
- - close_testfile(DO_UNLINK);
- -+#endif
- - } else {
- - /* subchild */
- -+#ifdef _WIN32
- -+ open_testfile(OPENFLAGS, OPENMODES);
- -+#endif
- - signal(SIGINT, SIG_DFL);
- -- test(12, 0, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
- -+ test(12, 0, F_TLOCK, (off_t)0, (off_t)0, PASS, FATAL);
- - for (;;)
- - sleep(1);
- - /* NOTREACHED */
- -@@ -1489,7 +1705,11 @@ test13()
- - lock1err = testmmap();
- - report(13, 1, "mmap", (off_t)0, (off_t)mappedlen, EAGAIN,
- - lock1err, WARN);
- -+#ifdef _WIN32
- -+ test(13, 2, F_ULOCK, (off_t)mappedlen - 2, (off_t)END, PASS, FATAL);
- -+#else
- - test(13, 2, F_ULOCK, (off_t)0, (off_t)END, PASS, FATAL);
- -+#endif
- - if (lock1err == 0)
- - testmunmap();
- -
- -@@ -1505,6 +1725,9 @@ test13()
- - FATAL);
- - test(13, 4, F_TLOCK, (off_t)mappedlen - 2, (off_t)END,
- - lock1err, WARN);
- -+#ifdef _WIN32
- -+ testmunmap();
- -+#endif
- - close_testfile(DO_UNLINK);
- -
- - childfree(0);
- -@@ -1589,21 +1812,27 @@ runtests()
- - if (DO_TEST(7)) {
- - test7();
- - }
- -+#ifndef _WIN32
- - if (DO_RATE(8)) {
- - test8();
- - }
- -+#endif
- - if (DO_MAND(9)) {
- - test9();
- - }
- -+#ifndef _WIN32
- -+ /* windows doesn't allow splitting lock ranges;
- -+ * unlock ranges must correspond exactly to lock ranges */
- - if (DO_TEST(10)) {
- - test10();
- - }
- -+#endif
- - if (DO_TEST(11)) {
- - test11();
- - }
- - if (DO_TEST(12)) {
- - test12();
- -- }
- -+ }
- - #ifdef MMAP
- - if (DO_TEST(13)) {
- - test13();
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0008-cthon-disabling-test8-from-the-basic-test.patch b/tests/cthon04/0008-cthon-disabling-test8-from-the-basic-test.patch
- deleted file mode 100644
- index beb7a1c..0000000
- --- a/tests/cthon04/0008-cthon-disabling-test8-from-the-basic-test.patch
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -From 520bd04d9752faa6f77acd50ea759d170fb149d4 Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:25:41 -0400
- -Subject: [PATCH 08/11] cthon: disabling test8 from the basic test
- -
- -it's a symlink test and we are not supporting symlinks on windows
- ----
- - basic/runtests | 2 +-
- - 1 files changed, 1 insertions(+), 1 deletions(-)
- -
- -diff --git a/basic/runtests b/basic/runtests
- -index 32e1d85..0b2f205 100644
- ---- a/basic/runtests
- -+++ b/basic/runtests
- -@@ -69,7 +69,7 @@ fi
- -
- - # Symlink and readlink test
- - echo ""
- --./test8 $TESTARG
- -+#./test8 $TESTARG
- -
- - # Getfs test
- - echo ""
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0009-cthon-enabling-NATIVE64-for-special-tests.patch b/tests/cthon04/0009-cthon-enabling-NATIVE64-for-special-tests.patch
- deleted file mode 100644
- index 148d2ce..0000000
- --- a/tests/cthon04/0009-cthon-enabling-NATIVE64-for-special-tests.patch
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -From aafcd8aea575739115458cf3aeb58611d65647ee Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:26:01 -0400
- -Subject: [PATCH 09/11] cthon: enabling NATIVE64 for special tests
- -
- -that enables 64bit offset tests in the special tests
- ----
- - tests.init | 2 +-
- - 1 files changed, 1 insertions(+), 1 deletions(-)
- -
- -diff --git a/tests.init b/tests.init
- -index 3a1ba74..c5116e6 100644
- ---- a/tests.init
- -+++ b/tests.init
- -@@ -205,7 +205,7 @@ LOCKTESTS=`echo tlocklfs tlock64`
- -
- - # Use with Linux 2.4 / GNU libc 2.2
- - #CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG -fwritable-strings`
- --CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG`
- -+CFLAGS=`echo -DLINUX -DGLIBC=22 -DMMAP -DSTDARG -DNATIVE64`
- - #LIBS=`echo -lnsl`
- - MOUNT=/bin/mount
- - UMOUNT=/bin/umount
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0010-cthon-fixes-for-64-bit-locking.patch b/tests/cthon04/0010-cthon-fixes-for-64-bit-locking.patch
- deleted file mode 100644
- index 508c0c6..0000000
- --- a/tests/cthon04/0010-cthon-fixes-for-64-bit-locking.patch
- +++ /dev/null
- @@ -1,60 +0,0 @@
- -From c8deb58ef9500765aa38fc86747fca0add5d04b1 Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:33:50 -0400
- -Subject: [PATCH 10/11] cthon: fixes for 64-bit locking
- -
- -cthon04/lock/tlock.c: fixed initialization of LARGE_INTEGERs, and removed the parts of test() that return EINVAL (our driver should be returning ERROR_INVALID_LOCK_RANGE for those)
- -
- -also updated the nfs_lock test program to take 64-bit input for length and offset
- ----
- - lock/tlock.c | 18 ++++++++----------
- - 1 files changed, 8 insertions(+), 10 deletions(-)
- -
- -diff --git a/lock/tlock.c b/lock/tlock.c
- -index dac3519..f06de6c 100644
- ---- a/lock/tlock.c
- -+++ b/lock/tlock.c
- -@@ -848,9 +848,12 @@ testmunmap()
- -
- - #ifdef _WIN32
- -
- -+#define ERROR_INVALID_LOCK_RANGE 0x133 // 307
- -+
- - static int map_lock_error(int num, int sec, int status) {
- - switch (status) {
- - case NO_ERROR: return 0;
- -+ case ERROR_INVALID_LOCK_RANGE: return EINVAL;
- - case ERROR_NOT_LOCKED:
- - case ERROR_LOCK_VIOLATION: return denied_err;
- - default:
- -@@ -870,22 +873,17 @@ int pass; /* expected return code */
- - int fail; /* error vs warning */
- - {
- - int result = PASS;
- -- LARGE_INTEGER off = { offset };
- -- LARGE_INTEGER len = { length };
- -+ ULARGE_INTEGER off;
- -+ ULARGE_INTEGER len;
- - OVERLAPPED overlapped = { 0 };
- -+
- -+ off.QuadPart = offset;
- -+ len.QuadPart = length;
- - overlapped.Offset = off.LowPart;
- - overlapped.OffsetHigh = off.HighPart;
- -
- -- if (off.QuadPart + len.QuadPart < 0) {
- -- result = EINVAL;
- -- goto out;
- -- }
- - if (length == 0)
- - len.QuadPart = ULLONG_MAX - offset;
- -- if (len.QuadPart == 0) {
- -- result = EINVAL;
- -- goto out;
- -- }
- -
- - switch (func) {
- - case F_LOCK: /* blocking lock */
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0011-cthon-setting-maxeof-to-be-64bit.patch b/tests/cthon04/0011-cthon-setting-maxeof-to-be-64bit.patch
- deleted file mode 100644
- index f59624f..0000000
- --- a/tests/cthon04/0011-cthon-setting-maxeof-to-be-64bit.patch
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -From efeb9db4f13e1dabe29e8bcf97a503079efca8ab Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Mon, 11 Oct 2010 15:34:14 -0400
- -Subject: [PATCH 11/11] cthon: setting maxeof to be 64bit
- -
- -old value was 0x7fffffff
- ----
- - lock/runtests | 2 +-
- - 1 files changed, 1 insertions(+), 1 deletions(-)
- -
- -diff --git a/lock/runtests b/lock/runtests
- -index a25f101..2335363 100644
- ---- a/lock/runtests
- -+++ b/lock/runtests
- -@@ -38,7 +38,7 @@ esac
- -
- - if echo "$mntopts" | grep vers=2 > /dev/null
- - then
- -- TESTARGS="-v 2 $TESTARGS"
- -+ TESTARGS="-v 4 $TESTARGS"
- - fi
- -
- - for i in $LOCKTESTS
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0012-removing-pmapbrb-pmaptst-tests-from-tools-dir.patch b/tests/cthon04/0012-removing-pmapbrb-pmaptst-tests-from-tools-dir.patch
- deleted file mode 100644
- index c602033..0000000
- --- a/tests/cthon04/0012-removing-pmapbrb-pmaptst-tests-from-tools-dir.patch
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -From 0e4268b2b76b5c89f9e661f7ffbb9c2a7234511c Mon Sep 17 00:00:00 2001
- -From: Olga Kornievskaia <aglo@citi.umich.edu>
- -Date: Thu, 14 Oct 2010 12:26:50 -0400
- -Subject: [PATCH 1/3] removing pmapbrb pmaptst tests from tools dir
- -
- ----
- - tools/Makefile | 3 ++-
- - 1 files changed, 2 insertions(+), 1 deletions(-)
- -
- -diff --git a/tools/Makefile b/tools/Makefile
- -index ce6019f..d3fde4e 100644
- ---- a/tools/Makefile
- -+++ b/tools/Makefile
- -@@ -8,7 +8,8 @@
- - # 'make copy DESTDIR=path' copies test programs to path
- - # 'make dist DESTDIR=path' copies sources to path
- -
- --TESTS = tcp tcpd udp udpd dirdmp dirprt pmaptst pmapbrd
- -+#TESTS = tcp tcpd udp udpd dirdmp dirprt pmaptst pmapbrd
- -+TESTS = tcp tcpd udp udpd dirdmp dirprt
- -
- - # dirdmp apparently doesn't work with Linux 2.2. So for Linux systems,
- - # comment out the above definition and use this one.
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0013-nroff-patch.patch b/tests/cthon04/0013-nroff-patch.patch
- deleted file mode 100644
- index b588c21..0000000
- --- a/tests/cthon04/0013-nroff-patch.patch
- +++ /dev/null
- @@ -1,26 +0,0 @@
- -From 343a7ad0eae100b833f2aeed5ca2406427304254 Mon Sep 17 00:00:00 2001
- -From: Olga Kornievskaia <aglo@citi.umich.edu>
- -Date: Wed, 13 Oct 2010 19:45:31 -0400
- -Subject: [PATCH 2/3] nroff patch
- -
- ----
- - general/runtests.wrk | 3 +++
- - 1 files changed, 3 insertions(+), 0 deletions(-)
- -
- -diff --git a/general/runtests.wrk b/general/runtests.wrk
- -index 83f3124..9dda456 100644
- ---- a/general/runtests.wrk
- -+++ b/general/runtests.wrk
- -@@ -89,6 +89,9 @@ $TIME nroff < nroff.tbl > nroff.out 2>> nroff.time || cat nroff.time
- - $TIME nroff < nroff.tbl > nroff.out 2>> nroff.time || cat nroff.time
- - rm nroff.out nroff.tbl
- - set -e
- -+#remove nroff warnings from nroff.time
- -+egrep -v '^warning:.*$' <nroff.time >nroff.new
- -+mv -f nroff.new nroff.time
- - ./stat.exe nroff.time
- - set +e
- -
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0014-commenting-out-symlink-test-in-special-tests.patch b/tests/cthon04/0014-commenting-out-symlink-test-in-special-tests.patch
- deleted file mode 100644
- index 92ba745..0000000
- --- a/tests/cthon04/0014-commenting-out-symlink-test-in-special-tests.patch
- +++ /dev/null
- @@ -1,35 +0,0 @@
- -From cf3f18a335525c4da01c85d58b46653e9c7605ec Mon Sep 17 00:00:00 2001
- -From: Olga Kornievskaia <aglo@citi.umich.edu>
- -Date: Thu, 14 Oct 2010 11:29:28 -0400
- -Subject: [PATCH 3/3] commenting out symlink test in special tests
- -
- ----
- - special/runtests.wrk | 12 ++++++------
- - 1 files changed, 6 insertions(+), 6 deletions(-)
- -
- -diff --git a/special/runtests.wrk b/special/runtests.wrk
- -index 9543761..bd528c2 100644
- ---- a/special/runtests.wrk
- -+++ b/special/runtests.wrk
- -@@ -64,12 +64,12 @@ echo ""
- - echo "test holey file support"
- - ./holey
- -
- --if [ "$HARDLINKS"o != no ]
- --then
- -- echo ""
- -- echo "second check for lost reply on non-idempotent requests"
- -- ./nfsidem 50 testdir
- --fi
- -+#if [ "$HARDLINKS"o != no ]
- -+#then
- -+# echo ""
- -+# echo "second check for lost reply on non-idempotent requests"
- -+# ./nfsidem 50 testdir
- -+#fi
- -
- - echo ""
- - echo "test rewind support"
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0015-cthon-enabled-basic-test4a-5a-5b-and-7a.patch b/tests/cthon04/0015-cthon-enabled-basic-test4a-5a-5b-and-7a.patch
- deleted file mode 100644
- index db75ad0..0000000
- --- a/tests/cthon04/0015-cthon-enabled-basic-test4a-5a-5b-and-7a.patch
- +++ /dev/null
- @@ -1,51 +0,0 @@
- -From 5d35b0e608f386be69b9c7a2f4e136a892d9f0bb Mon Sep 17 00:00:00 2001
- -From: Casey Bodley <cbodley@citi.umich.edu>
- -Date: Wed, 27 Oct 2010 12:57:37 -0400
- -Subject: [PATCH] cthon: enabled basic test4a, 5a, 5b, and 7a
- -
- ----
- - basic/runtests | 16 ++++++++--------
- - 1 files changed, 8 insertions(+), 8 deletions(-)
- -
- -diff --git a/basic/runtests b/basic/runtests
- -index 0b2f205..9567e1a 100644
- ---- a/basic/runtests
- -+++ b/basic/runtests
- -@@ -39,17 +39,17 @@ echo ""
- - echo ""
- - ./test4 $TESTARG
- - # Getattr and lookup tests
- --# echo ""
- --# ./test4a $TESTARG
- -+echo ""
- -+./test4a $TESTARG
- -
- - # Write and read tests
- - echo ""
- - ./test5 $TESTARG
- - # Test 5a and 5b separate out the read and write tests into simpler components.
- --# echo ""
- --# ./test5a $TESTARG
- --# echo ""
- --# ./test5b $TESTARG
- -+echo ""
- -+./test5a $TESTARG
- -+echo ""
- -+./test5b $TESTARG
- -
- - # Read Directory test
- - echo ""
- -@@ -64,8 +64,8 @@ else
- - ./test7a $TESTARG
- - fi
- - # Link Test
- --# echo ""
- --# ./test7b $TESTARG
- -+echo ""
- -+./test7b $TESTARG
- -
- - # Symlink and readlink test
- - echo ""
- ---
- -1.6.4.msysgit.0
- -
- diff --git a/tests/cthon04/0016-cthon-Handle-error-messages-for-newer-Cygwin-nroff-v.patch b/tests/cthon04/0016-cthon-Handle-error-messages-for-newer-Cygwin-nroff-v.patch
- deleted file mode 100644
- index 13ba5b3..0000000
- --- a/tests/cthon04/0016-cthon-Handle-error-messages-for-newer-Cygwin-nroff-v.patch
- +++ /dev/null
- @@ -1,30 +0,0 @@
- -From a56259552fde64a43a0cb764c77777a6c34dd6bd Mon Sep 17 00:00:00 2001
- -From: Roland Mainz <roland.mainz@nrubsig.org>
- -Date: Mon, 13 Nov 2023 17:49:14 +0100
- -Subject: [PATCH] cthon: Handle error messages for newer Cygwin nroff version
- -
- -cthon: Handle error messages for newer Cygwin 3.5.0 nroff version
- -
- -Tested with:
- -$ nroff --version
- -GNU nroff (groff) version 1.23.0
- -GNU groff version 1.23.0
- ----
- - general/runtests.wrk | 2 +-
- - 1 file changed, 1 insertion(+), 1 deletion(-)
- -
- -diff --git a/general/runtests.wrk b/general/runtests.wrk
- -index 9dda456..ef7bc86 100644
- ---- a/general/runtests.wrk
- -+++ b/general/runtests.wrk
- -@@ -90,7 +90,7 @@ $TIME nroff < nroff.tbl > nroff.out 2>> nroff.time || cat nroff.time
- - rm nroff.out nroff.tbl
- - set -e
- - #remove nroff warnings from nroff.time
- --egrep -v '^warning:.*$' <nroff.time >nroff.new
- -+egrep -v '^(nroff.in:.+?|)warning:.*$' <nroff.time >nroff.new
- - mv -f nroff.new nroff.time
- - ./stat.exe nroff.time
- - set +e
- ---
- -2.42.1
- diff --git a/tests/manual_testing.txt b/tests/manual_testing.txt
- index 065ba42..230da79 100644
- --- a/tests/manual_testing.txt
- +++ b/tests/manual_testing.txt
- @@ -1,5 +1,5 @@
- #
- -# ms-nfs41-client manual testing sequence, 2025-02-08
- +# ms-nfs41-client manual testing sequence, 2025-02-18
- #
- # Draft version, needs to be turned into automated tests
- # if possible
- @@ -145,6 +145,28 @@
- #
- +#
- +# "cthon04" test suite:
- +#
- +# mount a NFSv4 filesystem, and then execute this
- +# on this filesystem
- +mkdir nfsv4cthontest1 && cd nfsv4cthontest1
- +git clone https://github.com/kofemann/ms-nfs41-client.git
- +git clone git://git.linux-nfs.org/projects/steved/cthon04.git
- +cd cthon04/
- +git config --global --add safe.directory "$PWD"
- +git checkout 6c9abfd6907b2b43036af111cc600ab60ef804e5
- +git am ../ms-nfs41-client/tests/cthon04/*.patch
- +(make CC="gcc -std=gnu17 -Wno-implicit-int -Wno-implicit-function-declaration -Wno-incompatible-pointer-types" 2>&1 | tee buildlog.log)
- +(rm -Rf testdir1 && mkdir testdir1 && PATH="$PATH:." ksh93 ./runtests -a -t "$PWD/testdir1" 2>&1 | tee testrun.log)
- +
- +
- +#
- +# "winfstest" test suite:
- +#
- +See tests/winfstest/README.txt
- +
- +
- #
- # Tests for cp -p/mv/chmod/chgrp
- # Testcases, all should print *ONLY* "OK" on stdout, nothing on stderr
- --
- 2.45.1
msnfs41client: Patch for GNU patch |chgrp()| failure, big tests update+misc, 2025-02-18
Posted by Anonymous on Tue 18th Feb 2025 17:10
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.