diff --git a/README.md b/README.md index e1716963..c43a3140 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Wine. All those differences are also documented on the Included bug fixes and improvements ----------------------------------- -**Bug fixes and features included in the next upcoming release [11]:** +**Bug fixes and features included in the next upcoming release [12]:** * Add stubs for d3dx10_43.D3DX10CreateEffectFromFileA/W ([Wine Bug #27739](https://bugs.winehq.org/show_bug.cgi?id=27739)) * Add support for ThreadQuerySetWin32StartAddress info class ([Wine Bug #8277](https://bugs.winehq.org/show_bug.cgi?id=8277)) @@ -52,6 +52,7 @@ Included bug fixes and improvements * Return dummy ID3DXSkinInfo interface when skinning info not present ([Wine Bug #33904](https://bugs.winehq.org/show_bug.cgi?id=33904)) * Share source of d3dx9_36 with d3dx9_33 to avoid Wine DLL forwards ([Wine Bug #21817](https://bugs.winehq.org/show_bug.cgi?id=21817)) * Silence repeated LocaleNameToLCID/LCIDToLocaleName unsupported flags FIXMEs ([Wine Bug #30076](https://bugs.winehq.org/show_bug.cgi?id=30076)) +* Store registry timestamps with nanoseconds precision ([Wine Bug #38927](https://bugs.winehq.org/show_bug.cgi?id=38927)) **Bug fixes and features in Wine Staging 1.7.47 [230]:** diff --git a/debian/changelog b/debian/changelog index 5d00c13f..e49a5b26 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,6 +17,7 @@ wine-staging (1.7.48) UNRELEASED; urgency=low * Added patch to export additional OpenAL32 functions. * Added patch to return dummy ID3DXSkinInfo interface when skinning info not present. + * Added patch to store registry timestamps with nanoseconds precision. * Removed patch to allow to enable/disable InsertMode in wineconsole settings (accepted upstream). * Removed patch to improve IoGetDeviceObjectPointer stub to appease SecuROM diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 3fe37935..f7bdb888 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -263,6 +263,7 @@ patch_enable_all () enable_winedevice_Fix_Relocation="$1" enable_winemenubuilder_Desktop_Icon_Path="$1" enable_winepulse_PulseAudio_Support="$1" + enable_wineserver_Registry_Timestamp="$1" enable_winex11_CandidateWindowPos="$1" enable_winex11_Clipboard_HTML="$1" enable_winex11_DragAndDrop="$1" @@ -864,6 +865,9 @@ patch_enable () winepulse-PulseAudio_Support) enable_winepulse_PulseAudio_Support="$2" ;; + wineserver-Registry_Timestamp) + enable_wineserver_Registry_Timestamp="$2" + ;; winex11-CandidateWindowPos) enable_winex11_CandidateWindowPos="$2" ;; @@ -5466,6 +5470,21 @@ if test "$enable_winepulse_PulseAudio_Support" -eq 1; then ) >> "$patchlist" fi +# Patchset wineserver-Registry_Timestamp +# | +# | This patchset fixes the following Wine bugs: +# | * [#38927] Store registry timestamps with nanoseconds precision +# | +# | Modified files: +# | * server/registry.c +# | +if test "$enable_wineserver_Registry_Timestamp" -eq 1; then + patch_apply wineserver-Registry_Timestamp/0001-wineserver-Increase-precision-when-saving-loading-re.patch + ( + echo '+ { "Michael Müller", "wineserver: Increase precision when saving / loading registry modification date.", 1 },'; + ) >> "$patchlist" +fi + # Patchset winex11-CandidateWindowPos # | # | This patchset fixes the following Wine bugs: diff --git a/patches/wineserver-Registry_Timestamp/0001-wineserver-Increase-precision-when-saving-loading-re.patch b/patches/wineserver-Registry_Timestamp/0001-wineserver-Increase-precision-when-saving-loading-re.patch new file mode 100644 index 00000000..d2c1fd45 --- /dev/null +++ b/patches/wineserver-Registry_Timestamp/0001-wineserver-Increase-precision-when-saving-loading-re.patch @@ -0,0 +1,51 @@ +From b802fbbf522c400c30d26170152daa5e1f41f94d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Tue, 28 Jul 2015 17:46:13 +0200 +Subject: wineserver: Increase precision when saving / loading registry + modification date + +--- + server/registry.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/server/registry.c b/server/registry.c +index 43527df..45eebb8 100644 +--- a/server/registry.c ++++ b/server/registry.c +@@ -264,7 +264,8 @@ static void save_subkeys( const struct key *key, const struct key *base, FILE *f + { + fprintf( f, "\n[" ); + if (key != base) dump_path( key, base, f ); +- fprintf( f, "] %u\n", (unsigned int)((key->modif - ticks_1601_to_1970) / TICKS_PER_SEC) ); ++ fprintf( f, "] %u %u\n", (unsigned int)((key->modif - ticks_1601_to_1970) / TICKS_PER_SEC), ++ (unsigned int)((key->modif - ticks_1601_to_1970) % TICKS_PER_SEC) ); + if (key->class) + { + fprintf( f, "#class=\"" ); +@@ -1347,9 +1348,10 @@ static struct key *load_key( struct key *base, const char *buffer, + WCHAR *p; + struct unicode_str name; + int res; +- unsigned int mod; ++ unsigned int mod, mod_nano; + timeout_t modif = current_time; + data_size_t len; ++ int elements; + + if (!get_file_tmp_space( info, strlen(buffer) * sizeof(WCHAR) )) return NULL; + +@@ -1359,8 +1361,9 @@ static struct key *load_key( struct key *base, const char *buffer, + file_read_error( "Malformed key", info ); + return NULL; + } +- if (sscanf( buffer + res, " %u", &mod ) == 1) +- modif = (timeout_t)mod * TICKS_PER_SEC + ticks_1601_to_1970; ++ elements = sscanf( buffer + res, " %u %u", &mod, &mod_nano ); ++ if (elements >= 1) modif = (timeout_t)mod * TICKS_PER_SEC + ticks_1601_to_1970; ++ if (elements >= 2) modif += mod_nano; + + p = info->tmp; + while (prefix_len && *p) { if (*p++ == '\\') prefix_len--; } +-- +2.4.5 + diff --git a/patches/wineserver-Registry_Timestamp/definition b/patches/wineserver-Registry_Timestamp/definition new file mode 100644 index 00000000..ffb6c921 --- /dev/null +++ b/patches/wineserver-Registry_Timestamp/definition @@ -0,0 +1 @@ +Fixes: [38927] Store registry timestamps with nanoseconds precision