From be1a768bcac34f9d14c78b0dc12c3c7cfba83cff Mon Sep 17 00:00:00 2001 From: Tunip3 Date: Sat, 31 Jul 2021 04:36:08 +0100 Subject: [PATCH] improve uwp fileio by using from app variants whereever possible --- .gitignore | 1 + .../vfs/vfs_implementation_uwp.cpp | 37 ++++++++++-------- .../Package.appxmanifest | 2 +- .../RetroArch-msvc2019-UWP.vcxproj | 3 +- .../RetroArch-msvc2019-UWP_TemporaryKey.pfx | Bin 2528 -> 2512 bytes 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 485e7b46fe..e79b4a5556 100644 --- a/.gitignore +++ b/.gitignore @@ -223,3 +223,4 @@ param.sfo *.elf *.self *.vpk +/.vs diff --git a/libretro-common/vfs/vfs_implementation_uwp.cpp b/libretro-common/vfs/vfs_implementation_uwp.cpp index 7e8246af00..bf0d76c8db 100644 --- a/libretro-common/vfs/vfs_implementation_uwp.cpp +++ b/libretro-common/vfs/vfs_implementation_uwp.cpp @@ -31,6 +31,7 @@ #include #include #include +#include using namespace Windows::Foundation; using namespace Windows::Foundation::Collections; @@ -388,7 +389,7 @@ libretro_vfs_implementation_file *retro_vfs_file_open_impl( OPEN_ALWAYS : CREATE_ALWAYS; } - file_handle = CreateFile2(path_str->Data(), desireAccess, FILE_SHARE_READ, creationDisposition, NULL); + file_handle = CreateFile2FromAppW(path_str->Data(), desireAccess, FILE_SHARE_READ, creationDisposition, NULL); if (file_handle != INVALID_HANDLE_VALUE) { @@ -744,7 +745,7 @@ int retro_vfs_file_remove_impl(const char *path) free(path_wide); /* Try Win32 first, this should work in AppData */ - result = DeleteFileW(path_str->Data()); + result = DeleteFileFromAppW(path_str->Data()); if (result) return 0; @@ -827,6 +828,7 @@ int retro_vfs_stat_impl(const char *path, int32_t *size) Platform::String^ path_str; IStorageItem^ item; DWORD file_info; + _WIN32_FILE_ATTRIBUTE_DATA attribdata; if (!path || !*path) return 0; @@ -837,21 +839,22 @@ int retro_vfs_stat_impl(const char *path, int32_t *size) free(path_wide); /* Try Win32 first, this should work in AppData */ - file_info = GetFileAttributesW(path_str->Data()); - if (file_info != INVALID_FILE_ATTRIBUTES) + if (GetFileAttributesExFromAppW(path_str->Data(), GetFileExInfoStandard, &attribdata)) { - HANDLE file_handle = CreateFile2(path_str->Data(), GENERIC_READ, FILE_SHARE_READ, OPEN_ALWAYS, NULL); - if (file_handle != INVALID_HANDLE_VALUE) - { - LARGE_INTEGER sz; - if (GetFileSizeEx(file_handle, &sz)) - { - if (size) - *size = sz.QuadPart; - } - CloseHandle(file_handle); - } - return (file_info & FILE_ATTRIBUTE_DIRECTORY) ? RETRO_VFS_STAT_IS_VALID | RETRO_VFS_STAT_IS_DIRECTORY : RETRO_VFS_STAT_IS_VALID; + file_info = attribdata.dwFileAttributes; + if (file_info != INVALID_FILE_ATTRIBUTES) + { + if (!(file_info & FILE_ATTRIBUTE_DIRECTORY)) + { + LARGE_INTEGER sz; + if (size) + { + sz.HighPart = attribdata.nFileSizeHigh; + sz.LowPart = attribdata.nFileSizeLow; + } + } + return (file_info & FILE_ATTRIBUTE_DIRECTORY) ? RETRO_VFS_STAT_IS_VALID | RETRO_VFS_STAT_IS_DIRECTORY : RETRO_VFS_STAT_IS_VALID; + } } if (GetLastError() == ERROR_FILE_NOT_FOUND) @@ -917,7 +920,7 @@ int retro_vfs_mkdir_impl(const char *dir) free(dir_local); /* Try Win32 first, this should work in AppData */ - result = CreateDirectoryW(dir_str->Data(), NULL); + result = CreateDirectoryFromAppW(dir_str->Data(), NULL); if (result) return 0; diff --git a/pkg/msvc-uwp/RetroArch-msvc2019-UWP/Package.appxmanifest b/pkg/msvc-uwp/RetroArch-msvc2019-UWP/Package.appxmanifest index f2bd299335..7c8afb0c3f 100755 --- a/pkg/msvc-uwp/RetroArch-msvc2019-UWP/Package.appxmanifest +++ b/pkg/msvc-uwp/RetroArch-msvc2019-UWP/Package.appxmanifest @@ -1,6 +1,6 @@  - + RetroArch diff --git a/pkg/msvc-uwp/RetroArch-msvc2019-UWP/RetroArch-msvc2019-UWP.vcxproj b/pkg/msvc-uwp/RetroArch-msvc2019-UWP/RetroArch-msvc2019-UWP.vcxproj index 2ceaa5c7e8..b92fe92a4d 100755 --- a/pkg/msvc-uwp/RetroArch-msvc2019-UWP/RetroArch-msvc2019-UWP.vcxproj +++ b/pkg/msvc-uwp/RetroArch-msvc2019-UWP/RetroArch-msvc2019-UWP.vcxproj @@ -232,11 +232,12 @@ 1 OnApplicationRun Always - B86DAF5EC706754FEBABD0B011B0C4C3C2F73251 + 261A18AB51F9C1DC1956AF9084285F82A2A7FD30 SHA256 True 0 True + RetroArch-msvc2019-UWP_TemporaryKey.pfx diff --git a/pkg/msvc-uwp/RetroArch-msvc2019-UWP/RetroArch-msvc2019-UWP_TemporaryKey.pfx b/pkg/msvc-uwp/RetroArch-msvc2019-UWP/RetroArch-msvc2019-UWP_TemporaryKey.pfx index ea119d5c2fe6e16404c6964edcc5484c0d4246c1..91256913f005e5da1c97a4233ba684ae558c625f 100755 GIT binary patch delta 2326 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 delta 2343 zcmV+?3E1|~6W|jfFoFr(0s#Xsf(e)g2`Yw2hW8Bt2LYgh35f)P3576%34xI!Mt|R> z=xiG2bW;KX2haq91lR#UTP*`*5PAi7)g64{_{~Bs0|4W&eVx6wjr_XUamjYCSpzTz zM3<6cG0fXnkEm|5S3YqRQHtc;pGjw}3ti1~__M)w`CvC1TaBkxa&jl4&x7jNsQt8nxQc^L6sg;M>mDV z^q(Mv$2BM!oRtRN1G|^pop=f?R<}=;Vnf4*y)@oIEycbe%z;s>W34nzOopr5{{yqH zX%<|ao8Fqs_t@J;@&3(96@QO#q9Oq3Zu>}t))T-V3_W`l#8J43ILfg{-4q{BqIYQ? zkaKrNszqk*oexH(-eNT#m1nDiD44MbyAPCS5!Qxc9M!iO|36pfrT12dQIEZfD5I?+ zsW9k)s~JuL_^F?u)+ut?q;Qy7lQJjK7WuF48DF?mTXD?5+q`Y$L4O*l`su#`5rE7j z4w6Ac^o8C_cR#}hHQV4qBlvi(yR%cc(NEE$^obL+hzC>hR?Ei0r$x zxST{G%L)n7m4~df8YqJTPMvTj6!!pbI<2Q?g|AYJ+9K?~>sB78su|@>?a`~d!=B9U zXQm5~P;+?G#9D+hWzx=@l;Lz36*m26W5fVs;2aN{Ar++_%zv5#3(vn8K|lrSq3RSZ z3%M7mejuGCJSS@r7EtG5YF1H0Tml{{YH|{ zrlNgA{PGmpJ)jO41<~cm?X-A_T}C>T+7JMT#=|ahrtbWh+oD#uiTR^SNyA;v-q|Ol zY$SvtT8i+F!D-ViJLsUk4FLok*+F(%1gw3eFi4F6yMJl)pw87#s3dJ`2A3qxh^Ow8 zR6MK=4jT8!V`N2CxKtRAOydbB!^ych((fsPgM~5C7AYvvjL?M`+sUI)aO`|X(MJUW zq&pV|$P@T@Laz<3?Iq%;h-=_M|LINuVes-ZQy3>Mzhb31{D5#i$EebtK+_D|yl2nI zUND9jPJin@|5+$!Bdk-+X&IMkTfN~s!s9;Q>TZ{jSU2Ns=C!ztjDlzg?Dw5?$c<5g zb$kc&C7O7!eBdP+0}2|9ELjVN5?pKNTRfHL#i7${m^BlEmlpN;6{fB9&4l5sOlJ2C zLFH_N5UAM7n3ji&LNQU8!(<``e_g$q-Jicez$O`#kc@ z>3VuX#b|CXkAD}5`h{fH31!!f5DDdU-^Usrg^g{%!~-0lsipM;C~${RC)C(rjj3qcLT1VlQ3Nb>MToxi z3vNdk=tZf`bkA8&RK;RPUAS+1Ud|~VH%Kaf-a5Fo|0~-c)$hMSv$x5UGwkekY27<` ze|Pt1x2ra7<2rFhy1*MM>~TAZ^k|mS*i%rE2!8|zTegs2n#?cn%@b`&5F-9XS)Xm4 zcHMV(BST)HtrO<*;~;iDlAqqdJO8F9+j;n@MaMYlMl~UD-3(i%IZ@Fwod8~WEcv%K zwwnP*Y*zT0WCbOAi~D-KziCBXR6?2KUn%&HJ&YRhe|-I3;)6z{OcK=Q`e9R9b= zfq!A;*)dR*tmqXs0;c@9W*6c2Y^pc0m83JK>L~`qi@P)s>8f%Mu59@K+#|LZWNbAX zJ&!KI;xl$em4zYFZs^id)EnHDAz$WYxwr4&4_4%^15PHsaiF;f&&b~TSN@=s;AEKb z+!`KTePGp$v(Myr|0;WTLTI!Dv8v_}i+>NG-&9UWO3RYEOVp}-MjJQEp;>F7$$O+2 zkV50O0G8Rj;Q5kHaCEHJ(wuYOJ5==P0JxSWYudenx#1tf_W