mirror of
https://github.com/reactos/reactos.git
synced 2024-09-10 12:54:51 +00:00
125 lines
3.5 KiB
C
125 lines
3.5 KiB
C
/*
|
|
* PROJECT: ReactOS api tests
|
|
* LICENSE: GPLv2+ - See COPYING in the top level directory
|
|
* PURPOSE: Tests for GetVolumeInformation
|
|
* PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
|
|
*/
|
|
|
|
#include "precomp.h"
|
|
|
|
static VOID
|
|
TestGetVolumeInformationA(VOID)
|
|
{
|
|
BOOL Ret;
|
|
CHAR Outbuf[MAX_PATH];
|
|
DWORD i, MCL, Flags, Len;
|
|
|
|
memset(Outbuf, 0xAA, MAX_PATH);
|
|
Ret = GetVolumeInformationA("C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, MAX_PATH);
|
|
ok(Ret != FALSE, "GetVolumeInformationA failed: %ld\n", GetLastError());
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] == 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i != MAX_PATH, "String was not null terminated!\n");
|
|
|
|
memset(Outbuf, 0xAA, MAX_PATH);
|
|
Len = i;
|
|
Ret = GetVolumeInformationA("C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len + 1);
|
|
ok(Ret != FALSE, "GetVolumeInformationA failed: %ld\n", GetLastError());
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] == 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i != MAX_PATH, "String was not null terminated!\n");
|
|
ok(i == Len, "String was truncated\n");
|
|
|
|
memset(Outbuf, 0xAA, MAX_PATH);
|
|
Len = i;
|
|
SetLastError(0xdeadbeef);
|
|
Ret = GetVolumeInformationA("C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len);
|
|
ok(Ret != TRUE, "GetVolumeInformationA succeed\n");
|
|
ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH error, got %ld\n", GetLastError());
|
|
ok(Outbuf[0] != 0xAA, "Output buffer was not written to\n");
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] == 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i == MAX_PATH, "String was null terminated!\n");
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] != 0xAA)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i != MAX_PATH, "String was not written to!\n");
|
|
ok(i < Len, "Buffer has been overruned\n");
|
|
}
|
|
|
|
static VOID
|
|
TestGetVolumeInformationW(VOID)
|
|
{
|
|
BOOL Ret;
|
|
WCHAR Outbuf[MAX_PATH];
|
|
DWORD i, MCL, Flags, Len;
|
|
|
|
memset(Outbuf, 0xAA, MAX_PATH);
|
|
Ret = GetVolumeInformationW(L"C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, MAX_PATH);
|
|
ok(Ret != FALSE, "GetVolumeInformationW failed: %ld\n", GetLastError());
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] == 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i != MAX_PATH, "String was not null terminated!\n");
|
|
|
|
memset(Outbuf, 0xAA, MAX_PATH);
|
|
Len = i;
|
|
Ret = GetVolumeInformationW(L"C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len + 1);
|
|
ok(Ret != FALSE, "GetVolumeInformationW failed: %ld\n", GetLastError());
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] == 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i != MAX_PATH, "String was not null terminated!\n");
|
|
ok(i == Len, "String was truncated\n");
|
|
|
|
memset(Outbuf, 0xAA, MAX_PATH);
|
|
Len = i;
|
|
SetLastError(0xdeadbeef);
|
|
Ret = GetVolumeInformationW(L"C:\\", NULL, 0, NULL, &MCL, &Flags, Outbuf, Len);
|
|
ok(Ret != TRUE, "GetVolumeInformationW succeed\n");
|
|
ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH error, got %ld\n", GetLastError());
|
|
ok(Outbuf[0] != 0xAA, "Output buffer was not written to\n");
|
|
for (i = 0; i < MAX_PATH; ++i)
|
|
{
|
|
if (Outbuf[i] == 0)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
ok(i != MAX_PATH, "String was not null terminated!\n");
|
|
ok(i >= Len, "Buffer has not been overruned\n");
|
|
}
|
|
|
|
START_TEST(GetVolumeInformation)
|
|
{
|
|
TestGetVolumeInformationW();
|
|
TestGetVolumeInformationA();
|
|
}
|