tstRTFileAppend-1.cpp revision 7a5f93342a1ef3f1fb8ee93ed0e65e312cd32c0a
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end/* $Id$ */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end/** @file
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * IPRT Testcase - File Appending.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end/*
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Copyright (C) 2009-2010 Oracle Corporation
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end *
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * This file is part of VirtualBox Open Source Edition (OSE), as
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * available from http://www.virtualbox.org. This file is free software;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * you can redistribute it and/or modify it under the terms of the GNU
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * General Public License (GPL) as published by the Free Software
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Foundation, in version 2 as it comes in the "COPYING" file of the
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3f08db06526d6901aa08c110b5bc7dde6bc39905nd * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end *
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * The contents of this file may alternatively be used under the terms
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * of the Common Development and Distribution License Version 1.0
3f08db06526d6901aa08c110b5bc7dde6bc39905nd * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * VirtualBox OSE distribution, in which case the provisions of the
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * CDDL are applicable instead of those of the GPL.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end *
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * You may elect to license modified versions of this file under the
bc9d4698fce0238d2f6f2682e99423ebb1149976rbowen * terms and conditions of either the GPL or the CDDL or both.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen/*******************************************************************************
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end* Header Files *
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem*******************************************************************************/
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end#include <iprt/file.h>
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end#include <iprt/err.h>
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end#include <iprt/string.h>
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end#include <iprt/test.h>
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1endvoid tstFileAppend1(RTTEST hTest)
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end{
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end /*
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Open it write only and do some appending.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Checking that read fails and that the file position changes after the write.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestSub(hTest, "Basic 1");
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTFileDelete("tstFileAppend-1.tst");
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTFILE hFile = NIL_RTFILE;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end int rc = RTFileOpen(&hFile,
ecc5150d35c0dc5ee5119c2717e6660fa331abbftakashi "tstFileAppend-1.tst",
ecc5150d35c0dc5ee5119c2717e6660fa331abbftakashi RTFILE_O_WRITE
4a7be288e6fc28a6cb940e26542dbf574bc907b9pctony | RTFILE_O_APPEND
4a7be288e6fc28a6cb940e26542dbf574bc907b9pctony | RTFILE_O_OPEN_CREATE
80eed96ee3d8cfa0b66d9fb1cfe63fd83254d38bnilgun | RTFILE_O_DENY_NONE
80eed96ee3d8cfa0b66d9fb1cfe63fd83254d38bnilgun | (0644 << RTFILE_O_CREATE_MODE_SHIFT)
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end );
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC_RETV(rc, VINF_SUCCESS);
316f02e3836836c82e19019ff23f90a7ebc65289nilgun
e1e8390280254f7f0580d701e583f670643d4f3fnilgun uint64_t offActual = 42;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end uint64_t off = 0;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
e1e8390280254f7f0580d701e583f670643d4f3fnilgun RTTESTI_CHECK_MSG(offActual == 0 || RT_FAILURE(rc), ("offActual=%llu", offActual));
e1e8390280254f7f0580d701e583f670643d4f3fnilgun
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(RTFileWrite(hFile, "0123456789", 10, NULL), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end offActual = 99;
4126704c4950bfd46d32ad54e3b106ac6d868a73sf off = 0;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(offActual == 10 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after first write\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
1ac39787115a288f5e848344b1b1e8dccb1c58f1nd size_t cb = 4;
1ac39787115a288f5e848344b1b1e8dccb1c58f1nd char szBuf[256];
50c04f297d76a57ead2fa6b73845f7563b1fc788sf rc = RTFileRead(hFile, szBuf, 1, &cb);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(rc == VERR_ACCESS_DENIED || rc == VERR_INVALID_HANDLE, ("rc=%Rrc\n", rc));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end offActual = 999;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end off = 5;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_BEGIN, &offActual), VINF_SUCCESS);
623eebe956d9c2d6d073ed3eae855b56030b40e9noodl RTTESTI_CHECK_MSG(offActual == 5 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(RTFileClose(hFile), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end /*
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Open it write only and do some more appending.
cd34a6fbf0a2619544a72eadb73f309370bf6682wrowe * Checking the initial position and that it changes after the write.
cd34a6fbf0a2619544a72eadb73f309370bf6682wrowe */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestSub(hTest, "Basic 2");
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end rc = RTFileOpen(&hFile,
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end "tstFileAppend-1.tst",
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTFILE_O_WRITE
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end | RTFILE_O_APPEND
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end | RTFILE_O_OPEN
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end | RTFILE_O_DENY_NONE
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end );
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC_RETV(rc, VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
f3ec420152ca921e4c1ce77782f51b53f659018dnd offActual = 99;
f3ec420152ca921e4c1ce77782f51b53f659018dnd off = 0;
08cf4a15275e4cb65a424b3a1db5410bfb51085cjim RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
f6066dc0a6ad0432b74774e290c04c3cc4aa2dafrbowen RTTESTI_CHECK_MSG(offActual == 0 || RT_FAILURE(rc), ("offActual=%llu", offActual));
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin RTTestIPrintf(RTTESTLVL_INFO, "off=%llu on 2nd open\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileWrite(hFile, "abcdefghij", 10, &cb), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end offActual = 999;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end off = 0;
7906201913b68fe78b9d6a22ab33bf21d82c490eminfrin RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
7906201913b68fe78b9d6a22ab33bf21d82c490eminfrin RTTESTI_CHECK_MSG(offActual == 20 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after 2nd write\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(RTFileClose(hFile), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end /*
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Open it read/write.
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier * Check the initial position and read stuff. Then append some more and
1ac39787115a288f5e848344b1b1e8dccb1c58f1nd * check the new position and see that read returns 0/EOF. Finally,
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * do some seeking and read from a new position.
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestSub(hTest, "Basic 3");
f3ec420152ca921e4c1ce77782f51b53f659018dnd rc = RTFileOpen(&hFile,
f3ec420152ca921e4c1ce77782f51b53f659018dnd "tstFileAppend-1.tst",
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTFILE_O_READWRITE
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end | RTFILE_O_APPEND
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end | RTFILE_O_OPEN
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end | RTFILE_O_DENY_NONE
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end );
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC_RETV(rc, VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end offActual = 9;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end off = 0;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
d0828c8a321dc5e9ea60550f052294669c08cf93jim RTTESTI_CHECK_MSG(offActual == 0 || RT_FAILURE(rc), ("offActual=%llu", offActual));
d0828c8a321dc5e9ea60550f052294669c08cf93jim RTTestIPrintf(RTTESTLVL_INFO, "off=%llu on 3rd open\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end cb = 99;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 10, &cb), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK(RT_FAILURE(rc) || cb == 10);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(RT_FAILURE(rc) || !memcmp(szBuf, "0123456789", 10), ("read the wrong stuff: %.10s - expected 0123456789\n", szBuf));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
2704de98885368683621b01c8f8f4e4b01557611takashi offActual = 999;
2704de98885368683621b01c8f8f4e4b01557611takashi off = 0;
2704de98885368683621b01c8f8f4e4b01557611takashi RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
d0828c8a321dc5e9ea60550f052294669c08cf93jim RTTESTI_CHECK_MSG(offActual == 10 || RT_FAILURE(rc), ("offActual=%llu", offActual));
2704de98885368683621b01c8f8f4e4b01557611takashi RTTestIPrintf(RTTESTLVL_INFO, "off=%llu on 1st open\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_RC(RTFileWrite(hFile, "klmnopqrst", 10, NULL), VINF_SUCCESS);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi
c819c19c2f1ffbf3a3f12a4070cc6c3f4ea2a6f2sf offActual = 9999;
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi off = 0;
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_MSG(offActual == 30 || RT_FAILURE(rc), ("offActual=%llu", offActual));
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after 3rd write\n", offActual);
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier
cd6c8de3bedcc401ee230159b0439fa20f44488etakashi RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 1, NULL), VERR_EOF);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end cb = 99;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 1, &cb), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK(cb == 0);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end offActual = 99999;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end off = 15;
1de1266f0ea387d6373be8415745dfd2ab876341jim RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_BEGIN, &offActual), VINF_SUCCESS);
27d778df0b517e1578f907d2e51eb961cd8ee5fbjim RTTESTI_CHECK_MSG(offActual == 15 || RT_FAILURE(rc), ("offActual=%llu", offActual));
a610901168de82df5fc5d99b8759fd80e0f70aeasf if (RT_SUCCESS(rc) && offActual == 15)
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end {
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 10, NULL), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(RT_FAILURE(rc) || !memcmp(szBuf, "fghijklmno", 10), ("read the wrong stuff: %.10s - expected fghijklmno\n", szBuf));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end offActual = 9999999;
438b4817913a5ff55d9cad4c7ddf133330b4466ejim off = 0;
438b4817913a5ff55d9cad4c7ddf133330b4466ejim RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_MSG(offActual == 25 || RT_FAILURE(rc), ("offActual=%llu", offActual));
e5ce3ac0e9b720c0fa23782e29168a0810697fdetakashi RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after 2nd read\n", offActual);
604c89126c27104f659d7a51b0113e3bd435faf8fielding }
50cb7e2b30597f481fee57bac945190f06ebcc58jorton
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(RTFileClose(hFile), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end
4126704c4950bfd46d32ad54e3b106ac6d868a73sf /*
4126704c4950bfd46d32ad54e3b106ac6d868a73sf * Open it read only + append and check that we cannot write to it.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end */
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestSub(hTest, "Basic 4");
0a69d9bb491d9810892a9949c01403a1de3c7ac2nd rc = RTFileOpen(&hFile,
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier "tstFileAppend-1.tst",
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier RTFILE_O_READ
9652bc3a93433d52f80579062986ead2afe0d11fsf | RTFILE_O_APPEND
9652bc3a93433d52f80579062986ead2afe0d11fsf | RTFILE_O_OPEN
9652bc3a93433d52f80579062986ead2afe0d11fsf | RTFILE_O_DENY_NONE);
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe RTTESTI_CHECK_RC_RETV(rc, VINF_SUCCESS);
11495c9f0bd33e51a25b4d532beadfbcf9b944a3nilgun
11495c9f0bd33e51a25b4d532beadfbcf9b944a3nilgun rc = RTFileWrite(hFile, "pqrstuvwx", 10, &cb);
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe RTTESTI_CHECK_MSG(rc == VERR_ACCESS_DENIED || rc == VERR_INVALID_HANDLE, ("rc=%Rrc\n", rc));
ecc5150d35c0dc5ee5119c2717e6660fa331abbftakashi
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(RTFileClose(hFile), VINF_SUCCESS);
50cb7e2b30597f481fee57bac945190f06ebcc58jorton RTTESTI_CHECK_RC(RTFileDelete("tstFileAppend-1.tst"), VINF_SUCCESS);
79b024b81f6bb3c44dce77a7552191daf8b522d2jim}
f772e8f448c223e5ea306f1bf92d97d968f972d5jim
f772e8f448c223e5ea306f1bf92d97d968f972d5jim
4a7be288e6fc28a6cb940e26542dbf574bc907b9pctonyint main()
f3ec420152ca921e4c1ce77782f51b53f659018dnd{
1de1266f0ea387d6373be8415745dfd2ab876341jim RTTEST hTest;
1de1266f0ea387d6373be8415745dfd2ab876341jim int rc = RTTestInitAndCreate("tstRTFileAppend-1", &hTest);
f3ec420152ca921e4c1ce77782f51b53f659018dnd if (rc)
f3ec420152ca921e4c1ce77782f51b53f659018dnd return rc;
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf RTTestBanner(hTest);
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf tstFileAppend1(hTest);
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf RTFileDelete("tstFileAppend-1.tst");
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end return RTTestSummaryAndDestroy(hTest);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end}
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end