Fix the error codes returned by DeleteFile{A,W} to match NT.
Adapt the DeleteFileA error code checks to take into account variations
between Win9x and NT.
Test DeleteFile(NULL).
Add tests for DeleteFileW.
On NT, calling _lclose on an already closed handle will cause memory
corruption and thus sometimes crash -> removed the relevant test.
Skip the Unicode tests when on Win9x.

diff --git a/dlls/kernel/tests/file.c b/dlls/kernel/tests/file.c
index 7250b8f..a8b1fcc 100644
--- a/dlls/kernel/tests/file.c
+++ b/dlls/kernel/tests/file.c
@@ -184,10 +184,6 @@
 
     ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" );
 
-    ok( HFILE_ERROR == _lclose(filehandle), "_lclose should whine about this" );
-
-    ok( HFILE_ERROR == _lclose(filehandle), "_lclose should whine about this" );
-
     ok( DeleteFileA( filename ) != 0, "DeleteFile failed (%ld)", GetLastError(  ) );
 }
 
@@ -501,6 +497,8 @@
     DWORD ret;
 
     ret = GetTempPathW(MAX_PATH, temp_path);
+    if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
+        return;
     ok(ret != 0, "GetTempPathW error %ld", GetLastError());
     ok(ret < MAX_PATH, "temp path should fit into MAX_PATH");
 
@@ -556,6 +554,8 @@
     DWORD ret;
 
     ret = GetTempPathW(MAX_PATH, temp_path);
+    if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
+        return;
     ok(ret != 0, "GetTempPathW error %ld", GetLastError());
     ok(ret < MAX_PATH, "temp path should fit into MAX_PATH");
 
@@ -574,12 +574,35 @@
 static void test_DeleteFileA( void )
 {
     BOOL ret;
+
+    ret = DeleteFileA(NULL);
+    ok(!ret && (GetLastError() == ERROR_INVALID_PARAMETER ||
+                GetLastError() == ERROR_PATH_NOT_FOUND),
+       "DeleteFileA(NULL) returned ret=%d error=%ld",ret,GetLastError());
+
     ret = DeleteFileA("");
-    ok((!ret) && (GetLastError() == ERROR_FILE_NOT_FOUND),
-       "DeleteFile should fail with an empty path, and last error value should be ERROR_FILE_NOT_FOUND");
+    ok(!ret && (GetLastError() == ERROR_PATH_NOT_FOUND ||
+                GetLastError() == ERROR_BAD_PATHNAME),
+       "DeleteFileA(\"\") returned ret=%d error=%ld",ret,GetLastError());
 }
 
-#define PATTERN_OFFSET	0x10
+static void test_DeleteFileW( void )
+{
+    BOOL ret;
+    WCHAR emptyW[]={'\0'};
+
+    ret = DeleteFileW(NULL);
+    if (ret==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
+        return;
+    ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND,
+       "DeleteFileW(NULL) returned ret=%d error=%ld",ret,GetLastError());
+
+    ret = DeleteFileW(emptyW);
+    ok(!ret && GetLastError() == ERROR_PATH_NOT_FOUND,
+       "DeleteFileW(\"\") returned ret=%d error=%ld",ret,GetLastError());
+}
+
+#define PATTERN_OFFSET 0x10
 
 void test_offset_in_overlapped_structure(void)
 {
@@ -657,5 +680,6 @@
     test_CreateFileA();
     test_CreateFileW();
     test_DeleteFileA();
+    test_DeleteFileW();
     test_offset_in_overlapped_structure();
 }