reshuffling of dlls
[reactos.git] / reactos / lib / kernel32 / file / delete.c
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: lib/kernel32/file/delete.c
6 * PURPOSE: Deleting files
7 * PROGRAMMER: Ariadne (ariadne@xs4all.nl)
8 * UPDATE HISTORY:
9 * Created 01/11/98
10 */
11
12 /* INCLUDES ****************************************************************/
13
14 #include <k32.h>
15
16 #define NDEBUG
17 #include "../include/debug.h"
18
19
20 /* FUNCTIONS ****************************************************************/
21
22 /*
23 * @implemented
24 */
25 BOOL
26 STDCALL
27 DeleteFileA (
28 LPCSTR lpFileName
29 )
30 {
31 PWCHAR FileNameW;
32
33 if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
34 return FALSE;
35
36 return DeleteFileW (FileNameW);
37 }
38
39
40 /*
41 * @implemented
42 */
43 BOOL
44 STDCALL
45 DeleteFileW (
46 LPCWSTR lpFileName
47 )
48 {
49 FILE_DISPOSITION_INFORMATION FileDispInfo;
50 OBJECT_ATTRIBUTES ObjectAttributes;
51 IO_STATUS_BLOCK IoStatusBlock;
52 UNICODE_STRING NtPathU;
53 HANDLE FileHandle;
54 NTSTATUS Status;
55
56 DPRINT("DeleteFileW (lpFileName %S)\n",lpFileName);
57
58 if (!RtlDosPathNameToNtPathName_U (lpFileName,
59 &NtPathU,
60 NULL,
61 NULL))
62 {
63 SetLastError(ERROR_PATH_NOT_FOUND);
64 return FALSE;
65 }
66
67 DPRINT("NtPathU \'%wZ\'\n", &NtPathU);
68
69 InitializeObjectAttributes(&ObjectAttributes,
70 &NtPathU,
71 OBJ_CASE_INSENSITIVE,
72 NULL,
73 NULL);
74
75 Status = NtCreateFile (&FileHandle,
76 DELETE,
77 &ObjectAttributes,
78 &IoStatusBlock,
79 NULL,
80 FILE_ATTRIBUTE_NORMAL,
81 FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
82 FILE_OPEN,
83 FILE_NON_DIRECTORY_FILE,
84 NULL,
85 0);
86
87 RtlFreeHeap(RtlGetProcessHeap(),
88 0,
89 NtPathU.Buffer);
90
91 if (!NT_SUCCESS(Status))
92 {
93 CHECKPOINT;
94 SetLastErrorByStatus (Status);
95 return FALSE;
96 }
97
98 FileDispInfo.DeleteFile = TRUE;
99
100 Status = NtSetInformationFile (FileHandle,
101 &IoStatusBlock,
102 &FileDispInfo,
103 sizeof(FILE_DISPOSITION_INFORMATION),
104 FileDispositionInformation);
105 if (!NT_SUCCESS(Status))
106 {
107 CHECKPOINT;
108 NtClose (FileHandle);
109 SetLastErrorByStatus (Status);
110 return FALSE;
111 }
112
113 Status = NtClose (FileHandle);
114 if (!NT_SUCCESS (Status))
115 {
116 CHECKPOINT;
117 SetLastErrorByStatus (Status);
118 return FALSE;
119 }
120
121 return TRUE;
122 }
123
124 /* EOF */