pastebin - collaborative debugging tool
rovema.kpaste.net RSS


msnfs41client: Patches for sys |nfs41_Write()| should not touch EOF pos, more sparse file test coverage+misc, 2025-04-30
Posted by Anonymous on Wed 30th Apr 2025 14:18
raw | new post

  1. From bffab612db2e4d6fa94ef3923d8e988c68c6181a Mon Sep 17 00:00:00 2001
  2. From: Roland Mainz <roland.mainz@nrubsig.org>
  3. Date: Tue, 29 Apr 2025 18:00:00 +0200
  4. Subject: [PATCH 1/4] sys: |nfs41_Write()| should not modify
  5.  |nfs41_fcb->StandardInfo.EndOfFile|
  6.  
  7. |nfs41_Write()| should not modify |nfs41_fcb->StandardInfo.EndOfFile|,
  8. |nfs41_ExtendForCache()| is responsible to update
  9. |nfs41_fcb->StandardInfo.EndOfFile| if the file size grows.
  10.  
  11. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  12. ---
  13. sys/nfs41sys_readwrite.c | 2 --
  14.  1 file changed, 2 deletions(-)
  15.  
  16. diff --git a/sys/nfs41sys_readwrite.c b/sys/nfs41sys_readwrite.c
  17. index d1a3ba7..ba6f3db 100644
  18. --- a/sys/nfs41sys_readwrite.c
  19. +++ b/sys/nfs41sys_readwrite.c
  20. @@ -402,8 +402,6 @@ NTSTATUS nfs41_Write(
  21.          InterlockedIncrement(&write.sops);
  22.          InterlockedAdd64(&write.size, entry->u.ReadWrite.len);
  23.  #endif
  24. -        nfs41_fcb->StandardInfo.EndOfFile.QuadPart = entry->buf_len +
  25. -            entry->u.ReadWrite.offset;
  26.          status = RxContext->CurrentIrp->IoStatus.Status = STATUS_SUCCESS;
  27.          RxContext->IoStatusBlock.Information = entry->buf_len;
  28.          nfs41_fcb->changeattr = entry->ChangeTime;
  29. --
  30. 2.45.1
  31.  
  32. From 7991b7488c1a623b7a7598e9b4a86bbe4536fd24 Mon Sep 17 00:00:00 2001
  33. From: Roland Mainz <roland.mainz@nrubsig.org>
  34. Date: Wed, 30 Apr 2025 13:06:02 +0200
  35. Subject: [PATCH 2/4] tests: Add manual tests for block cloning via xcopy.exe
  36.  and winclonefile.exe
  37.  
  38. Add manual tests for block cloning via xcopy.exe and winclonefile.exe.
  39.  
  40. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  41. ---
  42. tests/manual_testing.txt | 32 ++++++++++++++++++++++++++++++++
  43.  1 file changed, 32 insertions(+)
  44.  
  45. diff --git a/tests/manual_testing.txt b/tests/manual_testing.txt
  46. index 4da80fe..f63f426 100644
  47. --- a/tests/manual_testing.txt
  48. +++ b/tests/manual_testing.txt
  49. @@ -456,6 +456,38 @@ $ runat "x1" "ls -la"
  50.  $ bash -c 'cd -@ "x1" && ls -la'
  51.  
  52.  
  53. +#
  54. +# Test for block cloning via |FSCTL_DUPLICATE_EXTENTS_TO_FILE|+NFSv4.2 CLONE
  55. +#
  56. +
  57. +# 1. Clone 5GB file via Windows 11 xcopy.exe (xcopy.exe uses |CopyFile2()|,
  58. +# which uses |FSCTL_DUPLICATE_EXTENTS_TO_FILE| by default in Win11;
  59. +# requires NFSv4.2 server with btrfs (XFS and ZFS should work too, not
  60. +# tested yet)):
  61. +---- snip ----
  62. +# clone a 5GB file
  63. +mkdir -p dir1 dir2
  64. +rm -f dir1/mybigfile.bin dir2/mybigfile.bin
  65. +time dd if=/dev/urandom of=dir1/mybigfile.bin bs=$((5*1024*1024)) count=1024
  66. +xcopy /S /E dir1 dir2
  67. +md5sum dir1/mybigfile.bin dir2/mybigfile.bin
  68. +---- snip ----
  69. +
  70. +# 2. Clone sparse file via "winclonefile", and test whether sparse file
  71. +# layout and hash sums are identical
  72. +---- snip ----
  73. +rm sparsefile2.bin sparsefile2_clone.bin
  74. +printf "hello\n" | dd of=sparsefile2.bin seek=$((64)) bs=1024
  75. +printf "world\n" | dd of=sparsefile2.bin seek=$((64*4)) bs=1024
  76. +dd if=/dev/null of=sparsefile2.bin seek=$((64*8)) bs=1024
  77. +winclonefile sparsefile2.bin sparsefile2_clone.bin
  78. +# check whether sparse file layout is the same
  79. +diff -u <(lssparse -H sparsefile2.bin) <(lssparse -H sparsefile2_clone.bin) && echo "# Test OK" || echo "# Test FAILED"
  80. +# both hash sums must be identical
  81. +md5sum --binary sparsefile2.bin sparsefile2_clone.bin
  82. +---- snip ----
  83. +
  84. +
  85.  #
  86.  # Test whether TMPDIR, TEMP, TMP can be on a NFS filesystem
  87.  #
  88. --
  89. 2.45.1
  90.  
  91. From 2c3db7771963ba019885767edb872400f974ce44 Mon Sep 17 00:00:00 2001
  92. From: Roland Mainz <roland.mainz@nrubsig.org>
  93. Date: Wed, 30 Apr 2025 15:01:02 +0200
  94. Subject: [PATCH 3/4] tests: Add new test script to test various sparse file
  95.  layouts with cp/winclonefile etc.
  96.  
  97. Add new test script to test various sparse file layouts with
  98. cp/winclonefile etc.
  99.  
  100. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  101. ---
  102. tests/sparsefiles/multisparsefiletest.ksh | 286 ++++++++++++++++++++++
  103.  1 file changed, 286 insertions(+)
  104.  create mode 100644 tests/sparsefiles/multisparsefiletest.ksh
  105.  
  106. diff --git a/tests/sparsefiles/multisparsefiletest.ksh b/tests/sparsefiles/multisparsefiletest.ksh
  107. new file mode 100644
  108. index 0000000..5fe82c4
  109. --- /dev/null
  110. +++ b/tests/sparsefiles/multisparsefiletest.ksh
  111. @@ -0,0 +1,286 @@
  112. +#!/bin/ksh93
  113. +
  114. +#
  115. +# MIT License
  116. +#
  117. +# Copyright (c) 2025 Roland Mainz <roland.mainz@nrubsig.org>
  118. +#
  119. +# Permission is hereby granted, free of charge, to any person obtaining a copy
  120. +# of this software and associated documentation files (the "Software"), to deal
  121. +# in the Software without restriction, including without limitation the rights
  122. +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  123. +# copies of the Software, and to permit persons to whom the Software is
  124. +# furnished to do so, subject to the following conditions:
  125. +#
  126. +# The above copyright notice and this permission notice shall be included in all
  127. +# copies or substantial portions of the Software.
  128. +#
  129. +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  130. +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  131. +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  132. +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  133. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  134. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  135. +# SOFTWARE.
  136. +#
  137. +
  138. +#
  139. +# multisparsefiletest1.ksh - test many combinations of sparse file layouts
  140. +#
  141. +# Written by Roland Mainz <roland.mainz@nrubsig.org>
  142. +#
  143. +
  144. +function multisparsefiletest1
  145. +{
  146. +    set -o nounset
  147. +    set -o errexit
  148. +
  149. +    integer -r dd_blksize=1024
  150. +
  151. +    integer tests_ok=0
  152. +    integer tests_failed=0
  153. +    integer tests_skipped=0
  154. +
  155. +    compound c=(
  156. +        integer i
  157. +        typeset testlabel
  158. +
  159. +        integer found_num_holes # found number of hole ranges
  160. +        integer found_num_data  # found number of data ranges
  161. +    )
  162. +
  163. +    compound -A expected_results=(
  164. +        ['emptyfile']=(
  165. +            integer num_holes=1
  166. +            integer num_data=0
  167. +        )
  168. +        ['dataat0pos,']=(
  169. +            integer num_holes=0
  170. +            integer num_data=1
  171. +        )
  172. +        ['helloat256kpos,']=(
  173. +            integer num_holes=1
  174. +            integer num_data=1
  175. +        )
  176. +        ['dataat0pos,helloat256kpos,']=(
  177. +            integer num_holes=1
  178. +            integer num_data=2
  179. +        )
  180. +        ['helloat512kpos,']=(
  181. +            integer num_holes=1
  182. +            integer num_data=1
  183. +        )
  184. +        ['dataat0pos,helloat512kpos,']=(
  185. +            integer num_holes=1
  186. +            integer num_data=2
  187. +        )
  188. +        ['helloat256kpos,helloat512kpos,']=(
  189. +            integer num_holes=2
  190. +            integer num_data=2
  191. +        )
  192. +        ['dataat0pos,helloat256kpos,helloat512kpos,']=(
  193. +            integer num_holes=2
  194. +            integer num_data=3
  195. +        )
  196. +        ['holeatend,']=(
  197. +            integer num_holes=1
  198. +            integer num_data=0
  199. +        )
  200. +        ['dataat0pos,holeatend,']=(
  201. +            integer num_holes=1
  202. +            integer num_data=1
  203. +        )
  204. +        ['helloat256kpos,holeatend,']=(
  205. +            integer num_holes=2
  206. +            integer num_data=1
  207. +        )
  208. +        ['dataat0pos,helloat256kpos,holeatend,']=(
  209. +            integer num_holes=2
  210. +            integer num_data=2
  211. +        )
  212. +        ['helloat512kpos,holeatend,']=(
  213. +            integer num_holes=2
  214. +            integer num_data=1
  215. +        )
  216. +        ['dataat0pos,helloat512kpos,holeatend,']=(
  217. +            integer num_holes=2
  218. +            integer num_data=2
  219. +        )
  220. +        ['helloat256kpos,helloat512kpos,holeatend,']=(
  221. +            integer num_holes=3
  222. +            integer num_data=2
  223. +        )
  224. +        ['dataat0pos,helloat256kpos,helloat512kpos,holeatend,']=(
  225. +            integer num_holes=3
  226. +            integer num_data=3
  227. +        )
  228. +
  229. +
  230. +        ['appenddataatend']=(
  231. +            integer num_holes=0
  232. +            integer num_data=1
  233. +        )
  234. +        ['dataat0pos,appenddataatend']=(
  235. +            integer num_holes=0
  236. +            integer num_data=1
  237. +        )
  238. +        ['helloat256kpos,appenddataatend']=(
  239. +            integer num_holes=1
  240. +            integer num_data=1
  241. +        )
  242. +        ['dataat0pos,helloat256kpos,appenddataatend']=(
  243. +            integer num_holes=1
  244. +            integer num_data=2
  245. +        )
  246. +        ['helloat512kpos,appenddataatend']=(
  247. +            integer num_holes=1
  248. +            integer num_data=1
  249. +        )
  250. +        ['dataat0pos,helloat512kpos,appenddataatend']=(
  251. +            integer num_holes=1
  252. +            integer num_data=2
  253. +        )
  254. +        ['helloat256kpos,helloat512kpos,appenddataatend']=(
  255. +            integer num_holes=2
  256. +            integer num_data=2
  257. +        )
  258. +        ['dataat0pos,helloat256kpos,helloat512kpos,appenddataatend']=(
  259. +            integer num_holes=2
  260. +            integer num_data=3
  261. +        )
  262. +        ['holeatend,appenddataatend']=(
  263. +            integer num_holes=1
  264. +            integer num_data=1
  265. +        )
  266. +        ['dataat0pos,holeatend,appenddataatend']=(
  267. +            integer num_holes=1
  268. +            integer num_data=2
  269. +        )
  270. +        ['helloat256kpos,holeatend,appenddataatend']=(
  271. +            integer num_holes=2
  272. +            integer num_data=2
  273. +        )
  274. +        ['dataat0pos,helloat256kpos,holeatend,appenddataatend']=(
  275. +            integer num_holes=2
  276. +            integer num_data=3
  277. +        )
  278. +        ['helloat512kpos,holeatend,appenddataatend']=(
  279. +            integer num_holes=2
  280. +            integer num_data=2
  281. +        )
  282. +        ['dataat0pos,helloat512kpos,holeatend,appenddataatend']=(
  283. +            integer num_holes=2
  284. +            integer num_data=3
  285. +        )
  286. +        ['helloat256kpos,helloat512kpos,holeatend,appenddataatend']=(
  287. +            integer num_holes=3
  288. +            integer num_data=3
  289. +        )
  290. +        ['dataat0pos,helloat256kpos,helloat512kpos,holeatend,appenddataatend']=(
  291. +            integer num_holes=3
  292. +            integer num_data=3
  293. +        )
  294. +    )
  295. +
  296. +    for ((c.i=0 ; c.i < 31 ; c.i++ )) ; do
  297. +        rm -f \
  298. +            'sparsefile2.bin' \
  299. +            'sparsefile2_cpsparse.bin' \
  300. +            'sparsefile2_cloned.bin'
  301. +        c.testlabel=''
  302. +
  303. +        if (( c.i == 0 )) ; then
  304. +            c.testlabel='emptyfile'
  305. +            touch 'sparsefile2.bin'
  306. +        fi
  307. +
  308. +        if (( c.i & 1 )) ; then
  309. +            printf 'start\n' >'sparsefile2.bin'
  310. +            c.testlabel='dataat0pos,'
  311. +        else
  312. +            testlabel='holeat0pos,'
  313. +        fi
  314. +        if (( c.i & 2 )) ; then
  315. +            # Cygwin has a minimum hole size of 128k on NTFS, so we cannot use smaller values
  316. +            printf "hello\n" | dd of='sparsefile2.bin' seek=$((256)) bs=${dd_blksize} 2>'/dev/null'
  317. +            c.testlabel+='helloat256kpos,'
  318. +        fi
  319. +        if (( c.i & 4 )) ; then
  320. +            printf "world\n" | dd of='sparsefile2.bin' seek=$((512)) bs=${dd_blksize} 2>'/dev/null'
  321. +            c.testlabel+='helloat512kpos,'
  322. +        fi
  323. +        if (( c.i & 8 )) ; then
  324. +            dd if=/dev/null of='sparsefile2.bin' seek=$((2048)) bs=${dd_blksize} 2>'/dev/null'
  325. +            c.testlabel+='holeatend,'
  326. +        fi
  327. +        if (( c.i & 16 )) ; then
  328. +            printf 'appenddataatend\n' >>'sparsefile2.bin'
  329. +            c.testlabel+='appenddataatend'
  330. +        fi
  331. +
  332. +        typeset tstmod
  333. +
  334. +        for tstmod in 'plainfile' 'cp_sparseauto' 'cloned' ; do
  335. +            printf '# Test %d '%s' generated\n' c.i "${c.testlabel}/$tstmod"
  336. +
  337. +            case "${tstmod}" in
  338. +                'plainfile')
  339. +                    c.stdout="$(lssparse -H 'sparsefile2.bin')"
  340. +                    ;;
  341. +                'cp_sparseauto')
  342. +                    /usr/bin/cp --sparse='auto' 'sparsefile2.bin' 'sparsefile2_cpsparse.bin'
  343. +                    c.stdout="$(lssparse -H 'sparsefile2_cpsparse.bin')"
  344. +                    ;;
  345. +                'cloned')
  346. +                    if $test_cloning ; then
  347. +                        winclonefile.exe 'sparsefile2.bin' 'sparsefile2_cloned.bin' 1>'/dev/null'
  348. +                        c.stdout="$(lssparse -H 'sparsefile2_cloned.bin')"
  349. +                    else
  350. +                        printf "# Test '%s' SKIPPED\n" "${c.testlabel}/${tstmod}"
  351. +                        (( tests_skipped++ ))
  352. +                        continue
  353. +                    fi
  354. +                    ;;
  355. +                *)
  356. +                    printf -u2 "Unknown test mod"
  357. +                    ;;
  358. +            esac
  359. +
  360. +            c.found_num_holes=$(grep -F 'Hole range' <<<"${c.stdout}" | wc -l)
  361. +            c.found_num_data=$(grep -F 'Data range' <<<"${c.stdout}" | wc -l)
  362. +
  363. +            if (( expected_results[${c.testlabel}].num_holes != c.found_num_holes ||
  364. +                    expected_results[${c.testlabel}].num_data != c.found_num_data )) ; then
  365. +                printf "# Test '%s' ERROR, expeced %d hole ranges and %d data ranges, got\n" \
  366. +                    "${c.testlabel}/${tstmod}" \
  367. +                    ${expected_results[${c.testlabel}].num_holes} \
  368. +                    ${expected_results[${c.testlabel}].num_data}
  369. +                print -v c
  370. +                (( tests_failed++ ))
  371. +            else
  372. +                printf "# Test '%s' OK\n" "${c.testlabel}/${tstmod}"
  373. +                (( tests_ok++ ))
  374. +            fi
  375. +        done
  376. +    done
  377. +
  378. +    printf '\n######## Tests OK=%d, skipped tests=%d, failed tests=%d\n' \
  379. +        tests_ok tests_skipped tests_failed
  380. +    return 0
  381. +}
  382. +
  383. +builtin wc
  384. +
  385. +#
  386. +# ToDo list:
  387. +# - Test whether filesystem supports block cloning and
  388. +# winclonefile.exe is available
  389. +# - variable block size
  390. +# - tests for sparse files >= 2GB, 4GB, 16GB
  391. +#
  392. +typeset test_cloning=false
  393. +
  394. +multisparsefiletest1
  395. +
  396. +#EOF.
  397. +
  398. --
  399. 2.45.1
  400.  
  401. From 37d2b0d65f12d00de5719706d98e7256fca7cd1a Mon Sep 17 00:00:00 2001
  402. From: Roland Mainz <roland.mainz@nrubsig.org>
  403. Date: Wed, 30 Apr 2025 15:06:53 +0200
  404. Subject: [PATCH 4/4] tests: Add missing MIT license to test scripts
  405.  
  406. Add missing MIT license to test scripts
  407.  
  408. Reported-by: Cedric Blancher <cedric.blancher@gmail.com>
  409. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  410. ---
  411. tests/nfsbuildtest/nfsbuildtest.ksh93         | 24 +++++++++++++++++++
  412.  tests/winlocktest1/winlocktest1.ksh           | 24 +++++++++++++++++++
  413.  .../wintartest_comparewinvsgnu001.bash        | 24 +++++++++++++++++++
  414.  tests/wintartests/wintartest_seq001.bash      | 24 +++++++++++++++++++
  415.  4 files changed, 96 insertions(+)
  416.  
  417. diff --git a/tests/nfsbuildtest/nfsbuildtest.ksh93 b/tests/nfsbuildtest/nfsbuildtest.ksh93
  418. index 864eff4..c9e056a 100644
  419. --- a/tests/nfsbuildtest/nfsbuildtest.ksh93
  420. +++ b/tests/nfsbuildtest/nfsbuildtest.ksh93
  421. @@ -1,5 +1,29 @@
  422.  #!/usr/bin/ksh93
  423.  
  424. +#
  425. +# MIT License
  426. +#
  427. +# Copyright (c) 2025 Roland Mainz <roland.mainz@nrubsig.org>
  428. +#
  429. +# Permission is hereby granted, free of charge, to any person obtaining a copy
  430. +# of this software and associated documentation files (the "Software"), to deal
  431. +# in the Software without restriction, including without limitation the rights
  432. +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  433. +# copies of the Software, and to permit persons to whom the Software is
  434. +# furnished to do so, subject to the following conditions:
  435. +#
  436. +# The above copyright notice and this permission notice shall be included in all
  437. +# copies or substantial portions of the Software.
  438. +#
  439. +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  440. +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  441. +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  442. +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  443. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  444. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  445. +# SOFTWARE.
  446. +#
  447. +
  448.  #
  449.  # nfsbuildtest.ksh93
  450.  #
  451. diff --git a/tests/winlocktest1/winlocktest1.ksh b/tests/winlocktest1/winlocktest1.ksh
  452. index 8b0307b..91f6433 100644
  453. --- a/tests/winlocktest1/winlocktest1.ksh
  454. +++ b/tests/winlocktest1/winlocktest1.ksh
  455. @@ -1,5 +1,29 @@
  456.  #!/usr/bin/ksh93
  457.  
  458. +#
  459. +# MIT License
  460. +#
  461. +# Copyright (c) 2023-2025 Roland Mainz <roland.mainz@nrubsig.org>
  462. +#
  463. +# Permission is hereby granted, free of charge, to any person obtaining a copy
  464. +# of this software and associated documentation files (the "Software"), to deal
  465. +# in the Software without restriction, including without limitation the rights
  466. +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  467. +# copies of the Software, and to permit persons to whom the Software is
  468. +# furnished to do so, subject to the following conditions:
  469. +#
  470. +# The above copyright notice and this permission notice shall be included in all
  471. +# copies or substantial portions of the Software.
  472. +#
  473. +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  474. +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  475. +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  476. +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  477. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  478. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  479. +# SOFTWARE.
  480. +#
  481. +
  482.  #
  483.  # winlocktest1 - test whether Win32 locks work across NFSv4 mounts
  484.  #
  485. diff --git a/tests/wintartests/wintartest_comparewinvsgnu001.bash b/tests/wintartests/wintartest_comparewinvsgnu001.bash
  486. index 39c1ffb..ced9c8a 100644
  487. --- a/tests/wintartests/wintartest_comparewinvsgnu001.bash
  488. +++ b/tests/wintartests/wintartest_comparewinvsgnu001.bash
  489. @@ -1,5 +1,29 @@
  490.  #!/bin/bash
  491.  
  492. +#
  493. +# MIT License
  494. +#
  495. +# Copyright (c) 2023-2025 Roland Mainz <roland.mainz@nrubsig.org>
  496. +#
  497. +# Permission is hereby granted, free of charge, to any person obtaining a copy
  498. +# of this software and associated documentation files (the "Software"), to deal
  499. +# in the Software without restriction, including without limitation the rights
  500. +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  501. +# copies of the Software, and to permit persons to whom the Software is
  502. +# furnished to do so, subject to the following conditions:
  503. +#
  504. +# The above copyright notice and this permission notice shall be included in all
  505. +# copies or substantial portions of the Software.
  506. +#
  507. +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  508. +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  509. +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  510. +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  511. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  512. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  513. +# SOFTWARE.
  514. +#
  515. +
  516.  #
  517.  # wintartest_comparewinvsgnu001.bash - filesystem test
  518.  # which compares files unpacked by /cygdrive/c/Windows/system32/tar
  519. diff --git a/tests/wintartests/wintartest_seq001.bash b/tests/wintartests/wintartest_seq001.bash
  520. index ee9652b..5736730 100644
  521. --- a/tests/wintartests/wintartest_seq001.bash
  522. +++ b/tests/wintartests/wintartest_seq001.bash
  523. @@ -1,5 +1,29 @@
  524.  #!/bin/bash
  525.  
  526. +#
  527. +# MIT License
  528. +#
  529. +# Copyright (c) 2023-2025 Roland Mainz <roland.mainz@nrubsig.org>
  530. +#
  531. +# Permission is hereby granted, free of charge, to any person obtaining a copy
  532. +# of this software and associated documentation files (the "Software"), to deal
  533. +# in the Software without restriction, including without limitation the rights
  534. +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  535. +# copies of the Software, and to permit persons to whom the Software is
  536. +# furnished to do so, subject to the following conditions:
  537. +#
  538. +# The above copyright notice and this permission notice shall be included in all
  539. +# copies or substantial portions of the Software.
  540. +#
  541. +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  542. +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  543. +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  544. +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  545. +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  546. +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  547. +# SOFTWARE.
  548. +#
  549. +
  550.  #
  551.  # wintartest_seq001.bash - filesystem test
  552.  # which generates files with /usr/bin/seq, packs them with
  553. --
  554. 2.45.1

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.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at