2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/kernel32/file/delete.c
5 * PURPOSE: Deleting files
6 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
11 /* INCLUDES ****************************************************************/
13 #include <ddk/ntddk.h>
19 #include <kernel32/kernel32.h>
21 /* EXTERNS ******************************************************************/
23 DWORD STDCALL
GetCurrentDriveW(DWORD nBufferLength
, PWSTR lpBuffer
);
25 /* FUNCTIONS ****************************************************************/
27 WINBOOL STDCALL
DeleteFileA(LPCSTR lpFileName
)
30 WCHAR FileNameW
[MAX_PATH
];
33 while ((*lpFileName
)!=0 && i
< MAX_PATH
)
35 FileNameW
[i
] = *lpFileName
;
40 return DeleteFileW(FileNameW
);
43 WINBOOL STDCALL
DeleteFileW(LPCWSTR lpFileName
)
45 OBJECT_ATTRIBUTES ObjectAttributes
;
46 UNICODE_STRING FileNameString
;
48 WCHAR PathNameW
[MAX_PATH
];
49 WCHAR FileNameW
[MAX_PATH
];
51 FILE_DISPOSITION_INFORMATION FileDispInfo
;
52 IO_STATUS_BLOCK IoStatusBlock
;
55 DPRINT("DeleteFileW (lpFileName %w)\n",lpFileName
);
57 if (lpFileName
[1] == (WCHAR
)':')
59 wcscpy(PathNameW
, lpFileName
);
61 else if (wcslen(lpFileName
) > 4 &&
62 lpFileName
[0] == (WCHAR
)'\\' &&
63 lpFileName
[1] == (WCHAR
)'\\' &&
64 lpFileName
[2] == (WCHAR
)'.' &&
65 lpFileName
[3] == (WCHAR
)'\\')
67 wcscpy(PathNameW
, lpFileName
);
69 else if (lpFileName
[0] == (WCHAR
)'\\')
71 GetCurrentDriveW(MAX_PATH
,PathNameW
);
72 wcscat(PathNameW
, lpFileName
);
76 Len
= GetCurrentDirectoryW(MAX_PATH
,PathNameW
);
79 if ( PathNameW
[Len
-1] != L
'\\' ) {
80 PathNameW
[Len
] = L
'\\';
83 wcscat(PathNameW
,lpFileName
);
91 wcscat(FileNameW
,PathNameW
);
93 FileNameString
.Length
= wcslen( FileNameW
)*sizeof(WCHAR
);
95 if ( FileNameString
.Length
== 0 )
98 if ( FileNameString
.Length
> MAX_PATH
*sizeof(WCHAR
) )
101 FileNameString
.Buffer
= (WCHAR
*)FileNameW
;
102 FileNameString
.MaximumLength
= FileNameString
.Length
+ sizeof(WCHAR
);
104 ObjectAttributes
.Length
= sizeof(OBJECT_ATTRIBUTES
);
105 ObjectAttributes
.RootDirectory
= NULL
;
106 ObjectAttributes
.ObjectName
= &FileNameString
;
107 ObjectAttributes
.Attributes
= OBJ_CASE_INSENSITIVE
| OBJ_INHERIT
;
108 ObjectAttributes
.SecurityDescriptor
= NULL
;
109 ObjectAttributes
.SecurityQualityOfService
= NULL
;
111 DPRINT("FileName %w\n",FileNameW
);
113 errCode
= ZwCreateFile(&FileHandle
,
114 FILE_WRITE_ATTRIBUTES
,
118 FILE_ATTRIBUTE_NORMAL
,
125 if (!NT_SUCCESS(errCode
))
128 SetLastError(RtlNtStatusToDosError(errCode
));
132 FileDispInfo
.DeleteFile
= TRUE
;
134 errCode
= NtSetInformationFile(FileHandle
,
137 sizeof(FILE_DISPOSITION_INFORMATION
),
138 FileDispositionInformation
);
140 if (!NT_SUCCESS(errCode
))
144 SetLastError(RtlNtStatusToDosError(errCode
));
148 errCode
= NtClose(FileHandle
);
150 if (!NT_SUCCESS(errCode
))
153 SetLastError(RtlNtStatusToDosError(errCode
));