kerneltest/f32test/tools/bigfilewriter.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/tools/bigfilewriter.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+//
+// T_BIGFILE_WRITER.CPP
+//
+
+
+
+#include <windows.h>
+
+#pragma warning (disable:4201) // warning C4201: nonstandard extension used : nameless struct/union
+#include <winioctl.h>
+
+#include <stdio.h>
+
+#define __WRITE_FILE_CONTENTS__
+
+
+const DWORD K1Kb = 1 << 10;
+const DWORD K1Mb = 1 << 20;
+const DWORD K1Gb = 1 << 30;
+const DWORD K2Gb = 0x80000000;
+const DWORD K3Gb = 0xC0000000;
+const DWORD K4GbMinusOne = 0xFFFFFFFF;
+const DWORD KBufSize = 256 * K1Kb;
+
+BYTE gBuffer[KBufSize];
+
+template <class T>
+T Min(T aLeft,T aRight)
+	{return(aLeft<aRight ? aLeft : aRight);}
+
+
+BOOL WriteFile(char* aFileName, DWORD aSize)
+	{
+	BOOL success = TRUE;
+
+	HANDLE deviceHandle = CreateFileA(
+		aFileName,
+        GENERIC_WRITE, FILE_SHARE_WRITE, 
+        NULL, CREATE_ALWAYS, 0, NULL); 
+ 
+    if (deviceHandle == INVALID_HANDLE_VALUE) 
+		{
+		printf("Open file error %d", GetLastError());
+		return FALSE;
+		}
+
+#ifdef __WRITE_FILE_CONTENTS__
+//printf("size of DWORD is %d", sizeof(DWORD));
+	DWORD nNumberOfBytesToWrite;
+	for (DWORD pos = 0; pos < aSize; pos+=nNumberOfBytesToWrite)
+		{
+		for (DWORD n=0; n<KBufSize; n+=4)
+			{
+			*((DWORD*) &gBuffer[n]) = pos + n;
+			}
+
+		nNumberOfBytesToWrite = Min(KBufSize, aSize - pos);
+		DWORD nNumberOfBytesWritten;
+		
+		success = WriteFile (deviceHandle, gBuffer, nNumberOfBytesToWrite, &nNumberOfBytesWritten, NULL);
+		if (!success)
+			{
+			printf("Write file error %d", GetLastError());
+			break;
+			}
+		printf("\rWriting %s %lu%% done...", aFileName, (LONG64(pos) + LONG64(nNumberOfBytesToWrite)) * LONG64(100) / LONG64(aSize));
+		}
+
+	printf("\n");
+#else
+	printf("Setting file size for %s to %u\n", aFileName, aSize);
+	LONG dwSeekLo = (LONG) aSize;
+	LONG dwSeekHi = 0;
+	DWORD dwPos = SetFilePointer(deviceHandle, dwSeekLo, &dwSeekHi, FILE_BEGIN);
+	if (dwPos  != aSize)
+		{
+		printf("SetFilePointer() error %d", GetLastError());
+		success = FALSE;
+		}
+	else
+		{
+		success = SetEndOfFile(deviceHandle);
+		if (!success)
+			{
+			printf("SetFilePointer() error %d", GetLastError());
+			}
+		}
+
+#endif
+
+	CloseHandle(deviceHandle);
+	return success;
+	}
+
+
+
+int main(int argc,char *argv[])
+	{
+	printf("BigFileWriter...\n");
+
+	if (argc != 2)
+		{
+		printf("Creates big (between 2 & 4GB) files on a Windows drive for use by T_BIGFILE.EXE\n");
+		printf("Syntax : BigFileWriter <drive letter>\n");
+		exit(0);
+		}
+
+	char filePath[] = "\\\\.\\?:\\F32-TST";
+
+	char driveLetter = argv[1][0];
+	filePath[4] = driveLetter;
+	printf("Creating big files on %s\n", filePath);
+
+	BOOL success;
+
+
+	success =  CreateDirectory(filePath, NULL);
+	if (!success && GetLastError() != ERROR_ALREADY_EXISTS)
+		{
+		printf("Unable to create directory %d", GetLastError());
+		exit(4);
+		}
+
+	success =  SetCurrentDirectory(filePath);
+	if (!success)
+		{
+		printf("Unable to change to directory %d", GetLastError());
+		exit(4);
+		}
+
+	success = WriteFile("File2GBMinusOne.txt", K2Gb-1);
+	if (!success) exit(4);
+
+	success = WriteFile("File2GB.txt", K2Gb);
+	if (!success) exit(4);
+
+	success = WriteFile("File3GB.txt", K3Gb);
+	if (!success) exit(4);
+
+	// NB This won't fit on an 8GB drive
+	success = WriteFile("File4GBMinusOne.txt", K4GbMinusOne);
+	if (!success) 
+		{
+		DeleteFile("File4GBMinusOne.txt");
+		exit(4);
+		}
+
+
+	return 0;
+	}
\ No newline at end of file