3 * UWP w32file support for Mono.
5 * Copyright 2016 Microsoft
6 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
10 #include "mono/utils/mono-compiler.h"
12 #if G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)
14 #include "mono/metadata/w32file-win32-internals.h"
17 mono_w32file_move (gunichar2 *path, gunichar2 *dest, gint32 *error)
19 gboolean result = FALSE;
22 result = MoveFileEx (path, dest, MOVEFILE_COPY_ALLOWED);
23 if (result == FALSE) {
24 *error=GetLastError ();
32 mono_w32file_replace (gunichar2 *destinationFileName, gunichar2 *sourceFileName,
33 gunichar2 *destinationBackupFileName, guint32 flags, gint32 *error)
35 gboolean result = FALSE;
38 result = ReplaceFile (destinationFileName, sourceFileName, destinationBackupFileName, flags, NULL, NULL);
39 if (result == FALSE) {
40 *error=GetLastError ();
48 mono_w32file_copy (gunichar2 *path, gunichar2 *dest, gboolean overwrite, gint32 *error)
50 gboolean result = FALSE;
51 COPYFILE2_EXTENDED_PARAMETERS copy_param = {0};
53 copy_param.dwSize = sizeof (COPYFILE2_EXTENDED_PARAMETERS);
54 copy_param.dwCopyFlags = (!overwrite) ? COPY_FILE_FAIL_IF_EXISTS : 0;
58 result = SUCCEEDED (CopyFile2 (path, dest, ©_param));
59 if (result == FALSE) {
60 *error=GetLastError ();
68 mono_w32file_get_file_size (HANDLE handle, gint32 *error)
74 if (!GetFileSizeEx (handle, &length)) {
75 *error=GetLastError ();
76 length.QuadPart = INVALID_FILE_SIZE;
80 return length.QuadPart;
84 mono_w32file_lock (HANDLE handle, gint64 position, gint64 length, gint32 *error)
86 gboolean result = FALSE;
89 result = LockFile (handle, position & 0xFFFFFFFF, position >> 32,
90 length & 0xFFFFFFFF, length >> 32);
92 if (result == FALSE) {
93 *error = GetLastError ();
101 mono_w32file_unlock (HANDLE handle, gint64 position, gint64 length, gint32 *error)
103 gboolean result = FALSE;
106 result = UnlockFile (handle, position & 0xFFFFFFFF, position >> 32,
107 length & 0xFFFFFFFF, length >> 32);
109 if (result == FALSE) {
110 *error = GetLastError ();
118 mono_w32file_get_console_output (void)
120 MonoError mono_error;
121 error_init (&mono_error);
123 g_unsupported_api ("GetStdHandle (STD_OUTPUT_HANDLE)");
125 mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "GetStdHandle (STD_OUTPUT_HANDLE)");
126 mono_error_set_pending_exception (&mono_error);
128 SetLastError (ERROR_NOT_SUPPORTED);
130 return INVALID_HANDLE_VALUE;
134 mono_w32file_get_console_input (void)
136 MonoError mono_error;
137 error_init (&mono_error);
139 g_unsupported_api ("GetStdHandle (STD_INPUT_HANDLE)");
141 mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "GetStdHandle (STD_INPUT_HANDLE)");
142 mono_error_set_pending_exception (&mono_error);
144 SetLastError (ERROR_NOT_SUPPORTED);
146 return INVALID_HANDLE_VALUE;
150 mono_w32file_get_console_error (void)
152 MonoError mono_error;
153 error_init (&mono_error);
155 g_unsupported_api ("GetStdHandle (STD_ERROR_HANDLE)");
157 mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "GetStdHandle (STD_ERROR_HANDLE)");
158 mono_error_set_pending_exception (&mono_error);
160 SetLastError (ERROR_NOT_SUPPORTED);
162 return INVALID_HANDLE_VALUE;
165 #else /* G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) */
167 MONO_EMPTY_SOURCE_FILE (file_io_windows_uwp);
168 #endif /* G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) */