Error if the filesize pointer is null, improve GetFileSizeEx test.
authorBen Pye <ben@debian>
Thu, 12 Feb 2015 21:12:39 +0000 (21:12 +0000)
committerBen Pye <ben@debian>
Thu, 12 Feb 2015 21:12:39 +0000 (21:12 +0000)
src/pal/src/file/file.cpp
src/pal/tests/palsuite/file_io/GetFileSizeEx/test1/GetFileSizeEx.c

index e89ba2a..93aa141 100644 (file)
@@ -3060,18 +3060,22 @@ OUT  PLARGE_INTEGER lpFileSize)
 
     pThread = InternalGetCurrentThread();
 
-    palError = InternalGetFileSize(
-        pThread,
-        hFile,
-        &dwFileSizeLow,
-        &dwFileSizeHigh
-        );
-
     if (lpFileSize != NULL)
     {
+        palError = InternalGetFileSize(
+            pThread,
+            hFile,
+            &dwFileSizeLow,
+            &dwFileSizeHigh
+            );
+
         lpFileSize->u.LowPart = dwFileSizeLow;
         lpFileSize->u.HighPart = dwFileSizeHigh;
     }
+    else
+    {
+        palError = ERROR_INVALID_PARAMETER;
+    }
 
     if (NO_ERROR != palError)
     {
index 6c64ce9..47669a6 100644 (file)
@@ -30,86 +30,12 @@ void CleanUp(HANDLE hFile)
     }
 }
 
-
-int __cdecl main(int argc, char *argv[])
+void CheckFileSize(HANDLE hFile, DWORD dwOffset, DWORD dwHighOrder)
 {
-    HANDLE hFile = NULL;
-    BOOL bRc = FALSE;
     DWORD dwRc = 0;
     DWORD dwError = 0;
-    DWORD dwHighOrder = 0;
-    DWORD dwOffset = 0;
-    DWORD dwReturnedHighOrder = 0;
-    DWORD dwReturnedOffset = 0;
-    DWORD lpNumberOfBytesWritten;
     LARGE_INTEGER qwFileSize;
-    LARGE_INTEGER qwFileSize2;
-    char * data = "1234567890";
-
-    qwFileSize.QuadPart = 0;
-    qwFileSize2.QuadPart = 0;
-
-    if (0 != PAL_Initialize(argc,argv))
-    {
-        return FAIL;
-    }
-
 
-    /* test on a null file handle */
-    bRc = GetFileSizeEx(hFile, NULL);
-    if (bRc != FALSE)
-    {
-        Fail("GetFileSizeEx: ERROR -> A file size was returned for "
-            "an invalid handle.\n");
-    }
-
-
-    /* create a test file */
-    hFile = CreateFile(szTextFile, 
-        GENERIC_READ | GENERIC_WRITE,
-        FILE_SHARE_READ | FILE_SHARE_WRITE,
-        NULL,
-        CREATE_ALWAYS,
-        FILE_ATTRIBUTE_NORMAL,
-        NULL);
-
-    if(hFile == INVALID_HANDLE_VALUE)
-    {
-        Fail("GetFileSizeEx: ERROR -> Unable to create file \"%s\".\n", 
-            szTextFile);
-    }
-
-    /* give the file a size */
-    dwOffset = 256;
-    dwRc = SetFilePointer(hFile, dwOffset, NULL, FILE_BEGIN);
-    if (dwRc == INVALID_SET_FILE_POINTER)
-    {
-        Trace("GetFileSizeEx: ERROR -> Call to SetFilePointer failed with %ld.\n", 
-            GetLastError());
-        CleanUp(hFile);
-        Fail("");
-    }
-    else
-    {
-        if (!SetEndOfFile(hFile))
-        {
-            Trace("GetFileSizeEx: ERROR -> Call to SetEndOfFile failed with %ld.\n", 
-                GetLastError());
-            CleanUp(hFile);
-            Fail("");
-        }
-        GetFileSizeEx(hFile, &qwFileSize);
-        if ((qwFileSize.u.LowPart != dwOffset) || 
-            (qwFileSize.u.HighPart != dwHighOrder))
-        {
-            CleanUp(hFile);
-            Fail("GetFileSizeEx: ERROR -> File sizes do not match up.\n");
-        }
-    }
-
-    /* make the file large using the high order option */
-    dwOffset = 256;
-    dwHighOrder = 1;
     dwRc = SetFilePointer(hFile, dwOffset, (PLONG)&dwHighOrder, FILE_BEGIN);
     if (dwRc == INVALID_SET_FILE_POINTER)
     {
@@ -146,37 +72,77 @@ int __cdecl main(int argc, char *argv[])
             }
         }
     }
+}
+
+int __cdecl main(int argc, char *argv[])
+{
+    HANDLE hFile = NULL;
+    BOOL bRc = FALSE;
+    DWORD lpNumberOfBytesWritten;
+    LARGE_INTEGER qwFileSize;
+    LARGE_INTEGER qwFileSize2;
+    char * data = "1234567890";
+
+    qwFileSize.QuadPart = 0;
+    qwFileSize2.QuadPart = 0;
+
+    if (0 != PAL_Initialize(argc,argv))
+    {
+        return FAIL;
+    }
 
 
-    /* set the file size to zero */
-    dwOffset = 0;
-    dwHighOrder = 0;
-    dwRc = SetFilePointer(hFile, dwOffset, NULL, FILE_BEGIN);
-    if (dwRc == INVALID_SET_FILE_POINTER)
+    /* test on a null file */
+    bRc = GetFileSizeEx(NULL, &qwFileSize);
+    if (bRc != FALSE)
     {
-        Trace("GetFileSizeEx: ERROR -> SetEndOfFile call failed with error %ld\n",
-            GetLastError());
-        CleanUp(hFile);
-        Fail("");
+        Fail("GetFileSizeEx: ERROR -> Returned status as TRUE for "
+            "a null handle.\n");
     }
-    else
+
+
+    /* test on an invalid file */
+    bRc = GetFileSizeEx(INVALID_HANDLE_VALUE, &qwFileSize);
+    if (bRc != FALSE)
     {
-        if (!SetEndOfFile(hFile))
-        {
-            Trace("GetFileSizeEx: ERROR -> Call to SetEndOfFile failed "
-                "with %ld.\n", GetLastError());
-            CleanUp(hFile);
-            Fail("");
-        }
-        GetFileSizeEx(hFile, &qwFileSize);
-        if ((qwFileSize.u.LowPart != dwOffset) || 
-            (qwFileSize.u.HighPart != dwHighOrder))
-        {
-            CleanUp(hFile);
-            Fail("GetFileSizeEx: ERROR -> File sizes do not match up.\n");
-        }
+        Fail("GetFileSizeEx: ERROR -> Returned status as TRUE for "
+            "an invalid handle.\n");
+    }
+
+
+    /* create a test file */
+    hFile = CreateFile(szTextFile, 
+        GENERIC_READ | GENERIC_WRITE,
+        FILE_SHARE_READ | FILE_SHARE_WRITE,
+        NULL,
+        CREATE_ALWAYS,
+        FILE_ATTRIBUTE_NORMAL,
+        NULL);
+
+    if(hFile == INVALID_HANDLE_VALUE)
+    {
+        Fail("GetFileSizeEx: ERROR -> Unable to create file \"%s\".\n", 
+            szTextFile);
+    }
+
+    /* test on a null lpFileSize */
+    bRc = GetFileSizeEx(hFile, NULL);
+    if (bRc != FALSE)
+    {
+        Fail("GetFileSizeEx: ERROR -> Returned status as TRUE for "
+            "a null lpFileSize.\n");
     }
 
+    /* give the file a size */
+    CheckFileSize(hFile, 256, 0);
+
+    /* make the file large using the high order option */
+    CheckFileSize(hFile, 256, 1);
+
+
+    /* set the file size to zero */
+    CheckFileSize(hFile, 0, 0);
+
     /*  test if file size changes by writing to it. */
     /* get file size */
     GetFileSizeEx(hFile, &qwFileSize);