ReactOS 0.4.16-dev-340-g0540c21
fileutils.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Applications
3 * LICENSE: LGPL - See COPYING in the top level directory
4 * FILE: base/applications/msconfig_new/fileutils.c
5 * PURPOSE: File Utility Functions
6 * COPYRIGHT: Copyright 2011-2012 Hermes BELUSCA - MAITO <hermes.belusca@sfr.fr>
7 */
8
9#include "precomp.h"
10#include "utils.h"
11#include "fileutils.h"
12
13//
14// NOTE: A function called "FileExists" with the very same prototype
15// already exists in the PSDK headers (in setupapi.h)
16//
17BOOL
18MyFileExists(IN LPCWSTR lpszFilePath,
20{
21 BOOL bIsFound = FALSE;
23
24 DWORD dwNumOfChars;
25 LPWSTR lpszCmdLine;
27
28 dwNumOfChars = ExpandEnvironmentStringsW(lpszFilePath, NULL, 0);
29 lpszCmdLine = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
30 ExpandEnvironmentStringsW(lpszFilePath, lpszCmdLine, dwNumOfChars);
31
32 search = FindFirstFileW(lpszCmdLine, &find_data);
33 MemFree(lpszCmdLine);
34
35 bIsFound = (search != INVALID_HANDLE_VALUE);
36
38
39 if (bIsFound && pFindData)
40 *pFindData = find_data;
41
42 return bIsFound;
43}
44
47 IN LPCWSTR FileNamesQuery,
50{
53
54 LPWSTR lpszQuery;
55 SIZE_T dwNumOfChars;
56 LPWSTR lpszExpandedQuery;
58
59 dwNumOfChars = wcslen(Path) + 1 + wcslen(FileNamesQuery) + 1;
60 lpszQuery = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
61 wcscpy(lpszQuery, Path);
62 wcscat(lpszQuery, L"\\");
63 wcscat(lpszQuery, FileNamesQuery);
64
65 dwNumOfChars = ExpandEnvironmentStringsW(lpszQuery, NULL, 0);
66 lpszExpandedQuery = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
67 ExpandEnvironmentStringsW(lpszQuery, lpszExpandedQuery, dwNumOfChars);
68 MemFree(lpszQuery);
69
70 search = FindFirstFileW(lpszExpandedQuery, &find_data);
72 {
73 do
74 {
76 while (pTable && pTable->QueryRoutine)
77 {
78 pTable->QueryRoutine(Path, FileNamesQuery, lpszExpandedQuery, &find_data, Context, pTable->EntryContext);
79 ++pTable;
80 }
81 } while (/*res = */ FindNextFileW(search, &find_data));
82 }
83 else
85
87
88 MemFree(lpszExpandedQuery);
89
90 return res;
91}
92
94{
96 SIZE_T dwNumOfChars = 0;
97 LPWSTR SourceFile, DestFile;
98 LPWSTR lpName, lpPath;
99
100 dwNumOfChars = ExpandEnvironmentStringsW(lpszIniFile, NULL, 0);
101 SourceFile = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
102 ExpandEnvironmentStringsW(lpszIniFile, SourceFile, dwNumOfChars);
103
104 lpName = wcsrchr(SourceFile, L'\\');
105 lpName = (lpName ? lpName + 1 : SourceFile);
106 dwNumOfChars = wcslen(L"%SystemRoot%\\pss\\") + wcslen(lpName) + 7 + 1;
107 lpPath = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
108 wcscpy(lpPath, L"%SystemRoot%\\pss\\");
109 wcscat(lpPath, lpName);
110 wcscat(lpPath, L".backup");
111
112 dwNumOfChars = ExpandEnvironmentStringsW(lpPath, NULL, 0);
113 DestFile = (LPWSTR)MemAlloc(0, dwNumOfChars * sizeof(WCHAR));
114 ExpandEnvironmentStringsW(lpPath, DestFile, dwNumOfChars);
115 MemFree(lpPath);
116
117 Success = CopyFileW(SourceFile, DestFile, TRUE /* don't overwrite */ /* FALSE */ /* overwrite */);
118
119 MemFree(DestFile);
120 MemFree(SourceFile);
121
122 return Success;
123}
PRTL_UNICODE_STRING_BUFFER Path
BOOL MyFileExists(IN LPCWSTR lpszFilePath, OUT PWIN32_FIND_DATAW pFindData OPTIONAL)
Definition: fileutils.c:18
LRESULT FileQueryFiles(IN LPCWSTR Path, IN LPCWSTR FileNamesQuery, IN PQUERY_FILES_TABLE QueryTable, IN PVOID Context)
Definition: fileutils.c:46
BOOL BackupIniFile(IN LPCWSTR lpszIniFile)
Definition: fileutils.c:93
BOOL MemFree(IN PVOID lpMem)
Definition: utils.c:26
PVOID MemAlloc(IN DWORD dwFlags, IN SIZE_T dwBytes)
Definition: utils.c:33
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static int find_data(const struct Vector *v, const BYTE *pData, int size)
Definition: filtermapper.c:162
#define wcsrchr
Definition: compat.h:16
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:439
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static short search(int val, const short *table, int size)
Definition: msg711.c:255
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
Definition: rtlfuncs.h:4220
#define L(x)
Definition: ntvdm.h:50
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define IN
Definition: typedefs.h:39
#define OUT
Definition: typedefs.h:40
static const EHCI_PERIOD pTable[]
Definition: usbehci.c:29
_In_ LPCSTR lpName
Definition: winbase.h:2814
LONG_PTR LRESULT
Definition: windef.h:209
#define ERROR_NO_MORE_FILES
Definition: winerror.h:121
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185