2 * w32file-win32-uwp.c: UWP w32file support for Mono.
4 * Copyright 2016 Microsoft
5 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
9 #include "mono/utils/mono-compiler.h"
11 #if G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT)
13 #include "mono/metadata/w32file-win32-internals.h"
16 mono_w32file_move (gunichar2 *path, gunichar2 *dest, gint32 *error)
18 gboolean result = FALSE;
21 result = MoveFileEx (path, dest, MOVEFILE_COPY_ALLOWED);
22 if (result == FALSE) {
23 *error=GetLastError ();
31 mono_w32file_replace (gunichar2 *destinationFileName, gunichar2 *sourceFileName,
32 gunichar2 *destinationBackupFileName, guint32 flags, gint32 *error)
34 gboolean result = FALSE;
37 result = ReplaceFile (destinationFileName, sourceFileName, destinationBackupFileName, flags, NULL, NULL);
38 if (result == FALSE) {
39 *error=GetLastError ();
47 mono_w32file_copy (gunichar2 *path, gunichar2 *dest, gboolean overwrite, gint32 *error)
49 gboolean result = FALSE;
50 COPYFILE2_EXTENDED_PARAMETERS copy_param = {0};
52 copy_param.dwSize = sizeof (COPYFILE2_EXTENDED_PARAMETERS);
53 copy_param.dwCopyFlags = (!overwrite) ? COPY_FILE_FAIL_IF_EXISTS : 0;
57 result = SUCCEEDED (CopyFile2 (path, dest, ©_param));
58 if (result == FALSE) {
59 *error=GetLastError ();
67 mono_w32file_get_file_size (HANDLE handle, gint32 *error)
73 if (!GetFileSizeEx (handle, &length)) {
74 *error=GetLastError ();
75 length.QuadPart = INVALID_FILE_SIZE;
79 return length.QuadPart;
83 mono_w32file_lock (HANDLE handle, gint64 position, gint64 length, gint32 *error)
85 gboolean result = FALSE;
88 result = LockFile (handle, position & 0xFFFFFFFF, position >> 32,
89 length & 0xFFFFFFFF, length >> 32);
91 if (result == FALSE) {
92 *error = GetLastError ();
100 mono_w32file_unlock (HANDLE handle, gint64 position, gint64 length, gint32 *error)
102 gboolean result = FALSE;
105 result = UnlockFile (handle, position & 0xFFFFFFFF, position >> 32,
106 length & 0xFFFFFFFF, length >> 32);
108 if (result == FALSE) {
109 *error = GetLastError ();
117 mono_w32file_get_console_output (void)
119 MonoError mono_error;
120 error_init (&mono_error);
122 g_unsupported_api ("GetStdHandle (STD_OUTPUT_HANDLE)");
124 mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "GetStdHandle (STD_OUTPUT_HANDLE)");
125 mono_error_set_pending_exception (&mono_error);
127 SetLastError (ERROR_NOT_SUPPORTED);
129 return INVALID_HANDLE_VALUE;
133 mono_w32file_get_console_input (void)
135 MonoError mono_error;
136 error_init (&mono_error);
138 g_unsupported_api ("GetStdHandle (STD_INPUT_HANDLE)");
140 mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "GetStdHandle (STD_INPUT_HANDLE)");
141 mono_error_set_pending_exception (&mono_error);
143 SetLastError (ERROR_NOT_SUPPORTED);
145 return INVALID_HANDLE_VALUE;
149 mono_w32file_get_console_error (void)
151 MonoError mono_error;
152 error_init (&mono_error);
154 g_unsupported_api ("GetStdHandle (STD_ERROR_HANDLE)");
156 mono_error_set_not_supported (&mono_error, G_UNSUPPORTED_API, "GetStdHandle (STD_ERROR_HANDLE)");
157 mono_error_set_pending_exception (&mono_error);
159 SetLastError (ERROR_NOT_SUPPORTED);
161 return INVALID_HANDLE_VALUE;
164 #else /* G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) */
166 MONO_EMPTY_SOURCE_FILE (file_io_windows_uwp);
167 #endif /* G_HAVE_API_SUPPORT(HAVE_UWP_WINAPI_SUPPORT) */