449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync/* $Id$ */
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync/** @file
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * IPRT Testcase - RTFileGetSize.
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync */
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 Oracle Corporation
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync *
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * available from http://www.virtualbox.org. This file is free software;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * General Public License (GPL) as published by the Free Software
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync *
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * The contents of this file may alternatively be used under the terms
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * of the Common Development and Distribution License Version 1.0
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * VirtualBox OSE distribution, in which case the provisions of the
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * CDDL are applicable instead of those of the GPL.
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync *
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * You may elect to license modified versions of this file under the
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * terms and conditions of either the GPL or the CDDL or both.
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync */
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync/*******************************************************************************
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync* Header Files *
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync*******************************************************************************/
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#include <iprt/file.h>
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#include <iprt/err.h>
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#include <iprt/initterm.h>
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#include <iprt/path.h>
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#include <iprt/string.h>
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#include <iprt/test.h>
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsyncstatic void test1(const char *pszSubTest, const char *pszFilename)
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync{
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync int rc;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTestISub(pszSubTest);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTFILE hFile;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync rc = RTFileOpen(&hFile, pszFilename, RTFILE_O_READ | RTFILE_O_DENY_NONE | RTFILE_O_OPEN);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync if (RT_FAILURE(rc))
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync {
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync if ( rc == VERR_ACCESS_DENIED
f1b000a70bea6e27483931a302a7eb939e14ad8dvboxsync || rc == VERR_PERMISSION_DENIED
f1b000a70bea6e27483931a302a7eb939e14ad8dvboxsync || rc == VERR_FILE_NOT_FOUND)
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync {
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTestIPrintf(RTTESTLVL_ALWAYS, "Cannot access '%s', skipping.", pszFilename);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync return;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync }
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTESTI_CHECK_RC_RETV(RTFileOpen(&hFile, pszFilename, RTFILE_O_READ | RTFILE_O_DENY_NONE | RTFILE_O_OPEN), VINF_SUCCESS);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync }
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync uint64_t cbFile = UINT64_MAX - 42;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTESTI_CHECK_RC(rc = RTFileGetSize(hFile, &cbFile), VINF_SUCCESS);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync if (RT_SUCCESS(rc))
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync {
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTESTI_CHECK(cbFile != UINT64_MAX - 42);
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync RTTestIValue(pszSubTest, cbFile, RTTESTUNIT_BYTES);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync }
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTFileClose(hFile);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTestISubDone();
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync}
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsyncint main(int argc, char **argv)
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync{
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTEST hTest;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync int rc = RTTestInitAndCreate("tstRTFileGetSize-1", &hTest);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync if (rc)
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync return rc;
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync RTTestBanner(hTest);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync for (int i = 0; i < argc; i++)
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync {
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync char *pszNm = RTPathFilename(argv[i]);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync if (!pszNm)
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync pszNm = argv[i];
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync test1(pszNm, argv[i]);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync }
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#ifdef RT_OS_WINDOWS
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("//./PhysicalDrive0", "//./PhysicalDrive0");
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("//./HarddiskVolume1", "//./HarddiskVolume1");
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("//./null", "//./nul");
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#else
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("/dev/null", "/dev/null");
f1b000a70bea6e27483931a302a7eb939e14ad8dvboxsync# ifdef RT_OS_LINUX
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("/dev/sda", "/dev/sda");
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("/dev/sda1", "/dev/sda1");
617d6528b5c6406701a8671ac795c4ad65a3fdcfvboxsync test1("/dev/sda5", "/dev/sda5");
f1b000a70bea6e27483931a302a7eb939e14ad8dvboxsync# endif
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync#endif
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync /*
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync * Summary.
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync */
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync return RTTestSummaryAndDestroy(hTest);
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync}
449d90404740188d6b6f3072db0c83331d7dd6bcvboxsync