Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
December 2020
- 68 participants
- 931 messages
Re: [PATCH] po: Update Ukrainian translation.
by Nikolay Sivov
On 12/25/20 8:44 PM, Andrey Gusev wrote:
> #: dlls/comdlg32/comdlg32.rc:289
> msgid "|S&olid"
> -msgstr ""
> +msgstr "|&Твердий"
>
> #: dlls/comdlg32/comdlg32.rc:290
> msgid "&Red:"
> @@ -737,11 +737,9 @@ msgid "&Define Custom Colors >>"
> msgstr "&Визначити колір >>"
>
> #: dlls/comdlg32/comdlg32.rc:312
> -#, fuzzy
> -#| msgid "&No"
> msgctxt "Solid"
> -msgid "&o"
> -msgstr "&Ні"
> +msgid "&Sol"
> +msgstr "&Тврд"
Is this correct? In this context it means "solid color", as opposed to
"solid body".
Dec. 25, 2020
[PATCH] po: Update Ukrainian translation.
by Andrey Gusev
Signed-off-by: Andrey Gusev <andrey.goosev(a)gmail.com>
---
po/uk.po | 734 ++++++++++++++++++++++++-------------------------------
1 file changed, 317 insertions(+), 417 deletions(-)
diff --git a/po/uk.po b/po/uk.po
index 7ef7b4f29f6..2b3a5ad8577 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: Wine\n"
"Report-Msgid-Bugs-To: https://bugs.winehq.org\n"
"POT-Creation-Date: N/A\n"
-"PO-Revision-Date: 2019-12-09 22:24+0200\n"
+"PO-Revision-Date: 2020-12-25 19:38+0200\n"
"Last-Translator: Andrey Gusev <andrey.goosev(a)gmail.com>\n"
"Language-Team: Ukrainian\n"
"Language: uk\n"
@@ -700,7 +700,7 @@ msgstr "Д&одаткові кольори:"
#: dlls/comdlg32/comdlg32.rc:289
msgid "|S&olid"
-msgstr ""
+msgstr "|&Твердий"
#: dlls/comdlg32/comdlg32.rc:290
msgid "&Red:"
@@ -737,11 +737,9 @@ msgid "&Define Custom Colors >>"
msgstr "&Визначити колір >>"
#: dlls/comdlg32/comdlg32.rc:312
-#, fuzzy
-#| msgid "&No"
msgctxt "Solid"
-msgid "&o"
-msgstr "&Ні"
+msgid "&Sol"
+msgstr "&Тврд"
#: dlls/comdlg32/comdlg32.rc:318 programs/regedit/regedit.rc:275
#: programs/regedit/regedit.rc:285
@@ -3743,7 +3741,7 @@ msgstr "Ігрові Контролери"
#: dlls/joy.cpl/joy.rc:32
msgid "Test and configure game controllers."
-msgstr ""
+msgstr "Перевірте та налаштуйте ігрові контролери."
#: dlls/jscript/jscript.rc:28
msgid "Error converting object to primitive type"
@@ -3758,10 +3756,8 @@ msgid "Subscript out of range"
msgstr "Індекс поза діапазоном"
#: dlls/jscript/jscript.rc:31
-#, fuzzy
-#| msgid "Out of paper; "
msgid "Out of stack space"
-msgstr "Не вистачає паперу; "
+msgstr "В стеку немає місця"
#: dlls/jscript/jscript.rc:32
msgid "Object required"
@@ -3910,16 +3906,12 @@ msgid "JScript object expected"
msgstr "Очікується об'єкт JScript"
#: dlls/jscript/jscript.rc:63
-#, fuzzy
-#| msgid "Array object expected"
msgid "Enumerator object expected"
-msgstr "Очікується об'єкт Array"
+msgstr "Очікується об’єкт перечислювача"
#: dlls/jscript/jscript.rc:64
-#, fuzzy
-#| msgid "Boolean object expected"
msgid "Regular Expression object expected"
-msgstr "Очікується об'єкт Boolean"
+msgstr "Очікується об’єкт регулярного виразу"
#: dlls/jscript/jscript.rc:65
msgid "Syntax error in regular expression"
@@ -3927,7 +3919,7 @@ msgstr "Синтаксична помилка в регулярному вира
#: dlls/jscript/jscript.rc:66
msgid "Exception thrown and not caught"
-msgstr ""
+msgstr "Виняток викликано, але не перехоплено"
#: dlls/jscript/jscript.rc:68
msgid "URI to be encoded contains invalid characters"
@@ -6944,32 +6936,24 @@ msgid "Connection reset by peer.\n"
msgstr "У з'єднанні відмовлено.\n"
#: dlls/kernel32/winerror.mc:3767
-#, fuzzy
-#| msgid "Not implemented"
msgid "Not implemented.\n"
-msgstr "Не реалізовано"
+msgstr "Не реалізовано.\n"
#: dlls/kernel32/winerror.mc:3788
-#, fuzzy
-#| msgid "Creation failed.\n"
msgid "Call failed.\n"
-msgstr "Помилка створення.\n"
+msgstr "Помилка запиту.\n"
#: dlls/kernel32/winerror.mc:3760
msgid "No Signature found in file.\n"
msgstr "Відсутній підпис файла.\n"
#: dlls/kernel32/winerror.mc:3774
-#, fuzzy
-#| msgid "Invalid level.\n"
msgid "Invalid call.\n"
-msgstr "Невірний рівень.\n"
+msgstr "Невірний запит.\n"
#: dlls/kernel32/winerror.mc:3781
-#, fuzzy
-#| msgid "Value is not available.\n"
msgid "Resource is not currently available.\n"
-msgstr "Значення недоступне.\n"
+msgstr "Наразі ресурс недоступний.\n"
#: dlls/localspl/localspl.rc:31 dlls/localui/localui.rc:31
#: dlls/winspool.drv/winspool.rc:30
@@ -7029,10 +7013,8 @@ msgid "Sink has not been finalized.\n"
msgstr "Вихід не було завершено.\n"
#: dlls/mferror/mferror.mc:732
-#, fuzzy
-#| msgid "Sink was already stopped.\n"
msgid "Clock was stopped\n"
-msgstr "Вихід вже було припинино.\n"
+msgstr "Годинник зупинино\n"
#: dlls/mferror/mferror.mc:32
msgid "Media Foundation platform is not initialized.\n"
@@ -7411,10 +7393,8 @@ msgid "Clock state was already set.\n"
msgstr "Статус годинника вже встановлено.\n"
#: dlls/mferror/mferror.mc:725
-#, fuzzy
-#| msgid "Clock is not available.\n"
msgid "Clock is not simple\n"
-msgstr "Годинник недоступний.\n"
+msgstr "Годинник не простий\n"
#: dlls/mpr/mpr.rc:35 dlls/wininet/wininet.rc:48
msgid "Enter Network Password"
@@ -8582,98 +8562,72 @@ msgid "Off"
msgstr "Вимкнено"
#: dlls/oledb32/version.rc:56
-#, fuzzy
-#| msgid "video"
msgid "Provider"
-msgstr "відео"
+msgstr "Постачальник"
#: dlls/oledb32/version.rc:59
-#, fuzzy
-#| msgid "Select the format you want to use:"
msgid "Select the data you want to connect to:"
-msgstr "Виберіть формат, який ви хочете використати:"
+msgstr "Виберіть дані, до яких потрібно підключитися:"
#: dlls/oledb32/version.rc:66
-#, fuzzy
-#| msgid "Connections"
msgid "Connection"
msgstr "Підключення"
#: dlls/oledb32/version.rc:69
-#, fuzzy
-#| msgid "Select the format you want to use:"
msgid "Specify the following to connect to ODBC data:"
-msgstr "Виберіть формат, який ви хочете використати:"
+msgstr "Вкажіть наступне для підключення до даних ODBC:"
#: dlls/oledb32/version.rc:70
msgid "1. Specify the source of data:"
-msgstr ""
+msgstr "1. Вкажіть джерело даних:"
#: dlls/oledb32/version.rc:71
-#, fuzzy
-#| msgid "Please enter your name"
msgid "Use &data source name"
-msgstr "Введіть ваше ім'я"
+msgstr "Використовувати &ім'я джерела даних"
#: dlls/oledb32/version.rc:74
-#, fuzzy
-#| msgid "Reset Connections"
msgid "Use c&onnection string"
-msgstr "Скинутих Підключень"
+msgstr "Використовувати р&ядок підключення"
#: dlls/oledb32/version.rc:75
-#, fuzzy
-#| msgid "Connections"
msgid "&Connection string:"
-msgstr "Підключення"
+msgstr "&Рядок з'єднання:"
#: dlls/oledb32/version.rc:77
-#, fuzzy
-#| msgid "A&dd..."
msgid "B&uild..."
-msgstr "&Додати..."
+msgstr "&Створити..."
#: dlls/oledb32/version.rc:78
msgid "2. Enter information to log on to the server"
-msgstr ""
+msgstr "2. Введіть інформацію для входу на сервер"
#: dlls/oledb32/version.rc:79
-#, fuzzy
-#| msgid "&User name:"
msgid "User &name:"
-msgstr "&Користувач:"
+msgstr "Ім'я &користувача:"
#: dlls/oledb32/version.rc:83
-#, fuzzy
-#| msgid "&Blank page"
msgid "&Blank password"
-msgstr "По&рожня сторінка"
+msgstr "&Пустий пароль"
#: dlls/oledb32/version.rc:84
-#, fuzzy
-#| msgid "Wrong password.\n"
msgid "Allow &saving password"
-msgstr "Невірний пароль.\n"
+msgstr "Дозволити &збереження пароля"
#: dlls/oledb32/version.rc:85
msgid "3. Enter the &initial catalog to use:"
-msgstr ""
+msgstr "3. Введіть &початковий каталог для використання:"
#: dlls/oledb32/version.rc:87
-#, fuzzy
-#| msgid "Reset Connections"
msgid "&Test Connection"
-msgstr "Скинутих Підключень"
+msgstr "&Тест підключення"
#: dlls/oledb32/version.rc:92
msgid "Advanced"
msgstr "Майстер"
#: dlls/oledb32/version.rc:95
-#, fuzzy
-#| msgid "Network share"
msgid "Network settings"
-msgstr "Мережний диск"
+msgstr "Мережеві налаштування"
#: dlls/oledb32/version.rc:96
msgid "&Impersonation level:"
@@ -8681,83 +8635,67 @@ msgstr ""
#: dlls/oledb32/version.rc:98
msgid "P&rotection level:"
-msgstr ""
+msgstr "Р&івень захисту:"
#: dlls/oledb32/version.rc:101
-#, fuzzy
-#| msgid "Connected"
msgid "Connect:"
-msgstr "Під'єднано"
+msgstr "З'єднання:"
#: dlls/oledb32/version.rc:103
-#, fuzzy
-#| msgid "seconds"
msgid "seconds."
-msgstr "сек."
+msgstr "секунд."
#: dlls/oledb32/version.rc:104
-#, fuzzy
-#| msgid "Success"
msgid "A&ccess:"
-msgstr "Успіх"
+msgstr "&Доступ:"
#: dlls/oledb32/version.rc:110
-#, fuzzy
-#| msgid "&All"
msgid "All"
-msgstr "&Все"
+msgstr "Все"
#: dlls/oledb32/version.rc:114
msgid ""
"These are the initialization properties for this type of data. To edit a "
"value, select a property, then choose Edit Value below."
msgstr ""
+"Це властивості ініціалізації даних цього типу. Щоб відредагувати "
+"значення, виберіть властивість, а потім нижче виберіть Редагувати Значення."
#: dlls/oledb32/version.rc:115
-#, fuzzy
-#| msgid "&Edit..."
msgid "&Edit Value..."
-msgstr "&Змінити..."
+msgstr "&Редагувати Значення..."
#: dlls/oledb32/version.rc:49
-#, fuzzy
-#| msgid "Properties"
msgid "Data Link Error"
-msgstr "Властивості"
+msgstr "Помилка при передачі даних"
#: dlls/oledb32/version.rc:50
-#, fuzzy
-#| msgid "Please select a file."
msgid "Please select a provider."
-msgstr "Виберіть файл."
+msgstr "Виберіть постачальника послуг."
#: dlls/oledb32/version.rc:51
msgid ""
"Provider is no longer available. Ensure that the provider is installed "
"properly."
msgstr ""
+"Постачальник більше не доступний. Переконайтеся, що постачальник "
+"встановлений належним чином."
#: dlls/oledb32/version.rc:36
-#, fuzzy
-#| msgid "Properties"
msgid "Data Link Properties"
-msgstr "Властивості"
+msgstr "Властивості каналу передачі даних"
#: dlls/oledb32/version.rc:37
msgid "OLE DB Provider(s)"
-msgstr ""
+msgstr "Постачальник(и) OLE DB"
#: dlls/oledb32/version.rc:41
-#, fuzzy
-#| msgid "Ready"
msgid "Read"
-msgstr "Готово"
+msgstr "Читання"
#: dlls/oledb32/version.rc:42
-#, fuzzy
-#| msgid "Readme:"
msgid "ReadWrite"
-msgstr "Файл Readme:"
+msgstr "Читання/Запис"
#: dlls/oledb32/version.rc:43
msgid "Share Deny None"
@@ -8776,10 +8714,8 @@ msgid "Share Exclusive"
msgstr ""
#: dlls/oledb32/version.rc:47
-#, fuzzy
-#| msgid "I/O Writes"
msgid "Write"
-msgstr "Кількість записів"
+msgstr "Запис"
#: dlls/oledlg/oledlg.rc:55
msgid "Insert Object"
@@ -9973,895 +9909,895 @@ msgstr "Виберіть джерело"
#: dlls/tzres/tzres.rc:90
msgid "China Standard Time"
-msgstr ""
+msgstr "Китайський стандартний час"
#: dlls/tzres/tzres.rc:91
msgid "China Daylight Time"
-msgstr ""
+msgstr "Китайський літній час"
#: dlls/tzres/tzres.rc:180
msgid "North Asia Standard Time"
-msgstr ""
+msgstr "Північноазіатський стандартний час"
#: dlls/tzres/tzres.rc:181
msgid "North Asia Daylight Time"
-msgstr ""
+msgstr "Північноазіатський літній час"
#: dlls/tzres/tzres.rc:116
msgid "Georgian Standard Time"
-msgstr ""
+msgstr "Грузинський стандартний час"
#: dlls/tzres/tzres.rc:117
msgid "Georgian Daylight Time"
-msgstr ""
+msgstr "Грузинський літній час"
#: dlls/tzres/tzres.rc:172
msgid "Nepal Standard Time"
-msgstr ""
+msgstr "Непальський стандартний час"
#: dlls/tzres/tzres.rc:173
msgid "Nepal Daylight Time"
-msgstr ""
+msgstr "Непальський літній час"
#: dlls/tzres/tzres.rc:66
msgid "Cape Verde Standard Time"
-msgstr ""
+msgstr "Стандартний час Кабо-Верде"
#: dlls/tzres/tzres.rc:67
msgid "Cape Verde Daylight Time"
-msgstr ""
+msgstr "Літній час Кабо-Верде"
#: dlls/tzres/tzres.rc:126
msgid "Haiti Standard Time"
-msgstr ""
+msgstr "Стандартний час Гаїті"
#: dlls/tzres/tzres.rc:127
msgid "Haiti Daylight Time"
-msgstr ""
+msgstr "Літній час Гаїті"
#: dlls/tzres/tzres.rc:80
msgid "Central European Standard Time"
-msgstr ""
+msgstr "Центральноєвропейський стандартний час"
#: dlls/tzres/tzres.rc:81
msgid "Central European Daylight Time"
-msgstr ""
+msgstr "Центральноєвропейський літній час"
#: dlls/tzres/tzres.rc:160
msgid "Morocco Standard Time"
-msgstr ""
+msgstr "Стандартний час Марокко"
#: dlls/tzres/tzres.rc:161
msgid "Morocco Daylight Time"
-msgstr ""
+msgstr "Літній час Марокко"
#: dlls/tzres/tzres.rc:78
msgid "Central Europe Standard Time"
-msgstr ""
+msgstr "Центральноєвропейський стандартний час"
#: dlls/tzres/tzres.rc:79
msgid "Central Europe Daylight Time"
-msgstr ""
+msgstr "Центральноєвропейський літній час"
#: dlls/tzres/tzres.rc:132
msgid "Iran Standard Time"
-msgstr ""
+msgstr "Іранський стандартний час"
#: dlls/tzres/tzres.rc:133
msgid "Iran Daylight Time"
-msgstr ""
+msgstr "Іранський літній час"
#: dlls/tzres/tzres.rc:204
msgid "Saint Pierre Standard Time"
-msgstr ""
+msgstr "Стандартний час Сен-П'єра"
#: dlls/tzres/tzres.rc:205
msgid "Saint Pierre Daylight Time"
-msgstr ""
+msgstr "Літній час Сен-П'єра"
#: dlls/tzres/tzres.rc:170
msgid "Namibia Standard Time"
-msgstr ""
+msgstr "Стандартний час Намібії"
#: dlls/tzres/tzres.rc:171
msgid "Namibia Daylight Time"
-msgstr ""
+msgstr "Літній час Намібії"
#: dlls/tzres/tzres.rc:226
msgid "Tonga Standard Time"
-msgstr ""
+msgstr "Стандартний час Королівства Тонга"
#: dlls/tzres/tzres.rc:227
msgid "Tonga Daylight Time"
-msgstr ""
+msgstr "Літній час Королівства Тонга"
#: dlls/tzres/tzres.rc:164
msgid "Mountain Standard Time (Mexico)"
-msgstr ""
+msgstr "Гірський стандартний час (Мексика)"
#: dlls/tzres/tzres.rc:165
msgid "Mountain Daylight Time (Mexico)"
-msgstr ""
+msgstr "Гірський літній час (Мексика)"
#: dlls/tzres/tzres.rc:118
msgid "GMT Standard Time"
-msgstr ""
+msgstr "GMT стандартний час"
#: dlls/tzres/tzres.rc:119
msgid "GMT Daylight Time"
-msgstr ""
+msgstr "GMT літній час"
#: dlls/tzres/tzres.rc:74
msgid "Central Asia Standard Time"
-msgstr ""
+msgstr "Середньоазіатський стандартний час"
#: dlls/tzres/tzres.rc:75
msgid "Central Asia Daylight Time"
-msgstr ""
+msgstr "Середньоазіатський літній час"
#: dlls/tzres/tzres.rc:146
msgid "Lord Howe Standard Time"
-msgstr ""
+msgstr "Стандартний час острова Лорд-Хау"
#: dlls/tzres/tzres.rc:147
msgid "Lord Howe Daylight Time"
-msgstr ""
+msgstr "Літній час острова Лорд-Хау"
#: dlls/tzres/tzres.rc:40
msgid "Arabic Standard Time"
-msgstr ""
+msgstr "Арабський стандартний час"
#: dlls/tzres/tzres.rc:41
msgid "Arabic Daylight Time"
-msgstr ""
+msgstr "Арабський літній час"
#: dlls/tzres/tzres.rc:148
msgid "Magadan Standard Time"
-msgstr ""
+msgstr "Магаданський стандартний час"
#: dlls/tzres/tzres.rc:149
msgid "Magadan Daylight Time"
-msgstr ""
+msgstr "Магаданський літній час"
#: dlls/tzres/tzres.rc:176
msgid "Newfoundland Standard Time"
-msgstr ""
+msgstr "Стандартний час Ньюфаундленда"
#: dlls/tzres/tzres.rc:177
msgid "Newfoundland Daylight Time"
-msgstr ""
+msgstr "Літній час Ньюфаундленда"
#: dlls/tzres/tzres.rc:250
msgid "West Pacific Standard Time"
-msgstr ""
+msgstr "Західно-Тихоокеанський стандартний час"
#: dlls/tzres/tzres.rc:251
msgid "West Pacific Daylight Time"
-msgstr ""
+msgstr "Західно-Тихоокеанський літній час"
#: dlls/tzres/tzres.rc:186
msgid "Pacific Standard Time"
-msgstr ""
+msgstr "Тихоокеанський стандартний час"
#: dlls/tzres/tzres.rc:187
msgid "Pacific Daylight Time"
-msgstr ""
+msgstr "Тихоокеанський літній час"
#: dlls/tzres/tzres.rc:52
msgid "Azerbaijan Standard Time"
-msgstr ""
+msgstr "Азербайджанський стандартний час"
#: dlls/tzres/tzres.rc:53
msgid "Azerbaijan Daylight Time"
-msgstr ""
+msgstr "Азербайджанський літній час"
#: dlls/tzres/tzres.rc:150
msgid "Magallanes Standard Time"
-msgstr ""
+msgstr "Стандартний час Магальянеса"
#: dlls/tzres/tzres.rc:151
msgid "Magallanes Daylight Time"
-msgstr ""
+msgstr "Літній час Магальянеса"
#: dlls/tzres/tzres.rc:206
msgid "Samoa Standard Time"
-msgstr ""
+msgstr "Стандартний час Самоа"
#: dlls/tzres/tzres.rc:207
msgid "Samoa Daylight Time"
-msgstr ""
+msgstr "Літній час Самоа"
#: dlls/tzres/tzres.rc:138
msgid "Kaliningrad Standard Time"
-msgstr ""
+msgstr "Калінінградський стандартний час"
#: dlls/tzres/tzres.rc:139
msgid "Kaliningrad Daylight Time"
-msgstr ""
+msgstr "Калінінградський літній час"
#: dlls/tzres/tzres.rc:188
msgid "Pacific Standard Time (Mexico)"
-msgstr ""
+msgstr "Тихоокеанський стандартний час (Мексика)"
#: dlls/tzres/tzres.rc:189
msgid "Pacific Daylight Time (Mexico)"
-msgstr ""
+msgstr "Тихоокеанський літній час (Мексика)"
#: dlls/tzres/tzres.rc:156
msgid "Middle East Standard Time"
-msgstr ""
+msgstr "Близькосхідний стандартний час"
#: dlls/tzres/tzres.rc:157
msgid "Middle East Daylight Time"
-msgstr ""
+msgstr "Близькосхідний літній час"
#: dlls/tzres/tzres.rc:224
msgid "Tokyo Standard Time"
-msgstr ""
+msgstr "Токійський стандартний час"
#: dlls/tzres/tzres.rc:225
msgid "Tokyo Daylight Time"
-msgstr ""
+msgstr "Токійський літній час"
#: dlls/tzres/tzres.rc:144
msgid "Line Islands Standard Time"
-msgstr ""
+msgstr "Стандартний час островів Лайн"
#: dlls/tzres/tzres.rc:145
msgid "Line Islands Daylight Time"
-msgstr ""
+msgstr "Літній час островів Лайн"
#: dlls/tzres/tzres.rc:92
msgid "Cuba Standard Time"
-msgstr ""
+msgstr "Кубинський стандартний час"
#: dlls/tzres/tzres.rc:93
msgid "Cuba Daylight Time"
-msgstr ""
+msgstr "Кубинський літній час"
#: dlls/tzres/tzres.rc:136
msgid "Jordan Standard Time"
-msgstr ""
+msgstr "Йорданський стандартний час"
#: dlls/tzres/tzres.rc:137
msgid "Jordan Daylight Time"
-msgstr ""
+msgstr "Йорданський літній час"
#: dlls/tzres/tzres.rc:84
msgid "Central Standard Time"
-msgstr ""
+msgstr "Центральний стандартний час"
#: dlls/tzres/tzres.rc:85
msgid "Central Daylight Time"
-msgstr ""
+msgstr "Центральний літній час"
#: dlls/tzres/tzres.rc:54
msgid "Azores Standard Time"
-msgstr ""
+msgstr "Стандартний час Азорських островів"
#: dlls/tzres/tzres.rc:55
msgid "Azores Daylight Time"
-msgstr ""
+msgstr "Літній час Азорських островів"
#: dlls/tzres/tzres.rc:178
msgid "North Asia East Standard Time"
-msgstr ""
+msgstr "Північноазіатський східний стандартний час"
#: dlls/tzres/tzres.rc:179
msgid "North Asia East Daylight Time"
-msgstr ""
+msgstr "Північноазіатський східний літній час"
#: dlls/tzres/tzres.rc:42
msgid "Argentina Standard Time"
-msgstr ""
+msgstr "Аргентинський стандартний час"
#: dlls/tzres/tzres.rc:43
msgid "Argentina Daylight Time"
-msgstr ""
+msgstr "Аргентинський літній час"
#: dlls/tzres/tzres.rc:152
msgid "Marquesas Standard Time"
-msgstr ""
+msgstr "Стандартний час Маркізьких островів"
#: dlls/tzres/tzres.rc:153
msgid "Marquesas Daylight Time"
-msgstr ""
+msgstr "Літній час Маркізьких островів"
#: dlls/tzres/tzres.rc:166
msgid "Myanmar Standard Time"
-msgstr ""
+msgstr "Стандартний час М'янми"
#: dlls/tzres/tzres.rc:167
msgid "Myanmar Daylight Time"
-msgstr ""
+msgstr "Літній час М'янми"
#: dlls/tzres/tzres.rc:236 dlls/tzres/tzres.rc:237
msgid "Coordinated Universal Time"
-msgstr ""
+msgstr "Всесвітній координований час"
#: dlls/tzres/tzres.rc:130
msgid "India Standard Time"
-msgstr ""
+msgstr "Індійський стандартний час"
#: dlls/tzres/tzres.rc:131
msgid "India Daylight Time"
-msgstr ""
+msgstr "Індійський літній час"
#: dlls/tzres/tzres.rc:124
msgid "GTB Standard Time"
-msgstr ""
+msgstr "GTB стандартний час"
#: dlls/tzres/tzres.rc:125
msgid "GTB Daylight Time"
-msgstr ""
+msgstr "GTB літній час"
#: dlls/tzres/tzres.rc:228
msgid "Turkey Standard Time"
-msgstr ""
+msgstr "Турецький стандартний час"
#: dlls/tzres/tzres.rc:229
msgid "Turkey Daylight Time"
-msgstr ""
+msgstr "Турецький літній час"
#: dlls/tzres/tzres.rc:112
msgid "Fiji Standard Time"
-msgstr ""
+msgstr "Стандартний час Фіджі"
#: dlls/tzres/tzres.rc:113
msgid "Fiji Daylight Time"
-msgstr ""
+msgstr "Літній час Фіджі"
#: dlls/tzres/tzres.rc:64
msgid "Canada Central Standard Time"
-msgstr ""
+msgstr "Центральний стандартний час Канади"
#: dlls/tzres/tzres.rc:65
msgid "Canada Central Daylight Time"
-msgstr ""
+msgstr "Центральний літній час Канади"
#: dlls/tzres/tzres.rc:218
msgid "Taipei Standard Time"
-msgstr ""
+msgstr "Тайбейський стандартний час"
#: dlls/tzres/tzres.rc:219
msgid "Taipei Daylight Time"
-msgstr ""
+msgstr "Тайбейський літній час"
#: dlls/tzres/tzres.rc:246
msgid "W. Europe Standard Time"
-msgstr ""
+msgstr "Західноєвропейський стандартний час"
#: dlls/tzres/tzres.rc:247
msgid "W. Europe Daylight Time"
-msgstr ""
+msgstr "Західноєвропейський літній час"
#: dlls/tzres/tzres.rc:158
msgid "Montevideo Standard Time"
-msgstr ""
+msgstr "Стандартний час Монтевідео"
#: dlls/tzres/tzres.rc:159
msgid "Montevideo Daylight Time"
-msgstr ""
+msgstr "Літній час Монтевідео"
#: dlls/tzres/tzres.rc:190
msgid "Pakistan Standard Time"
-msgstr ""
+msgstr "Пакистанський стандартний час"
#: dlls/tzres/tzres.rc:191
msgid "Pakistan Daylight Time"
-msgstr ""
+msgstr "Пакистанський літній час"
#: dlls/tzres/tzres.rc:68
msgid "Caucasus Standard Time"
-msgstr ""
+msgstr "Кавказький стандартний час"
#: dlls/tzres/tzres.rc:69
msgid "Caucasus Daylight Time"
-msgstr ""
+msgstr "Кавказький літній час"
#: dlls/tzres/tzres.rc:50
msgid "AUS Eastern Standard Time"
-msgstr ""
+msgstr "AUS східний стандартний час"
#: dlls/tzres/tzres.rc:51
msgid "AUS Eastern Daylight Time"
-msgstr ""
+msgstr "AUS східний літній час"
#: dlls/tzres/tzres.rc:168
msgid "N. Central Asia Standard Time"
-msgstr ""
+msgstr "Північно-Центральна Азія за стандартним часом"
#: dlls/tzres/tzres.rc:169
msgid "N. Central Asia Daylight Time"
-msgstr ""
+msgstr "Північно-Центральна Азія за літнім часом"
#: dlls/tzres/tzres.rc:104
msgid "Eastern Standard Time"
-msgstr ""
+msgstr "Східний стандартний час"
#: dlls/tzres/tzres.rc:105
msgid "Eastern Daylight Time"
-msgstr ""
+msgstr "Східний літній час"
#: dlls/tzres/tzres.rc:86
msgid "Central Standard Time (Mexico)"
-msgstr ""
+msgstr "Центральний стандартний час (Мексика)"
#: dlls/tzres/tzres.rc:87
msgid "Central Daylight Time (Mexico)"
-msgstr ""
+msgstr "Центральний літній час (Мексика)"
#: dlls/tzres/tzres.rc:44
msgid "Atlantic Standard Time"
-msgstr ""
+msgstr "Атлантичний стандартний час"
#: dlls/tzres/tzres.rc:45
msgid "Atlantic Daylight Time"
-msgstr ""
+msgstr "Атлантичний літній час"
#: dlls/tzres/tzres.rc:162
msgid "Mountain Standard Time"
-msgstr ""
+msgstr "Гірський стандартний час"
#: dlls/tzres/tzres.rc:163
msgid "Mountain Daylight Time"
-msgstr ""
+msgstr "Гірський літній час"
#: dlls/tzres/tzres.rc:232
msgid "US Eastern Standard Time"
-msgstr ""
+msgstr "Східний стандартний час США"
#: dlls/tzres/tzres.rc:233
msgid "US Eastern Daylight Time"
-msgstr ""
+msgstr "Східний літній час США"
#: dlls/tzres/tzres.rc:182
msgid "North Korea Standard Time"
-msgstr ""
+msgstr "Північнокорейський стандартний час"
#: dlls/tzres/tzres.rc:183
msgid "North Korea Daylight Time"
-msgstr ""
+msgstr "Північнокорейський літній час"
#: dlls/tzres/tzres.rc:220
msgid "Tasmania Standard Time"
-msgstr ""
+msgstr "Тасманійський стандартний час"
#: dlls/tzres/tzres.rc:221
msgid "Tasmania Daylight Time"
-msgstr ""
+msgstr "Тасманійський літній час"
#: dlls/tzres/tzres.rc:72
msgid "Central America Standard Time"
-msgstr ""
+msgstr "Центральна Америка за стандартним часом"
#: dlls/tzres/tzres.rc:73
msgid "Central America Daylight Time"
-msgstr ""
+msgstr "Центральна Америка за літнім часом"
#: dlls/tzres/tzres.rc:234
msgid "US Mountain Standard Time"
-msgstr ""
+msgstr "Американський гірський стандартний час"
#: dlls/tzres/tzres.rc:235
msgid "US Mountain Daylight Time"
-msgstr ""
+msgstr "Американський гірський літній час"
#: dlls/tzres/tzres.rc:212
msgid "South Africa Standard Time"
-msgstr ""
+msgstr "Південно-Африканський стандартний час"
#: dlls/tzres/tzres.rc:213
msgid "South Africa Daylight Time"
-msgstr ""
+msgstr "Південно-Африканський літній час"
#: dlls/tzres/tzres.rc:70
msgid "Cen. Australia Standard Time"
-msgstr ""
+msgstr "Цен. Австралійський стандартний час"
#: dlls/tzres/tzres.rc:71
msgid "Cen. Australia Daylight Time"
-msgstr ""
+msgstr "Цен. Австралійський літній час"
#: dlls/tzres/tzres.rc:214
msgid "Sri Lanka Standard Time"
-msgstr ""
+msgstr "Стандартний час Шрі-Ланки"
#: dlls/tzres/tzres.rc:215
msgid "Sri Lanka Daylight Time"
-msgstr ""
+msgstr "Літній час Шрі-Ланки"
#: dlls/tzres/tzres.rc:30
msgid "Afghanistan Standard Time"
-msgstr ""
+msgstr "Стандартний час в Афганістані"
#: dlls/tzres/tzres.rc:31
msgid "Afghanistan Daylight Time"
-msgstr ""
+msgstr "Літній час в Афганістані"
#: dlls/tzres/tzres.rc:252
msgid "Yakutsk Standard Time"
-msgstr ""
+msgstr "Якутський стандартний час"
#: dlls/tzres/tzres.rc:253
msgid "Yakutsk Daylight Time"
-msgstr ""
+msgstr "Якутський літній час"
#: dlls/tzres/tzres.rc:198
msgid "SA Eastern Standard Time"
-msgstr ""
+msgstr "SA східний стандартний час"
#: dlls/tzres/tzres.rc:199
msgid "SA Eastern Daylight Time"
-msgstr ""
+msgstr "SA східний літній час"
#: dlls/tzres/tzres.rc:36
msgid "Arab Standard Time"
-msgstr ""
+msgstr "Арабський стандартний час"
#: dlls/tzres/tzres.rc:37
msgid "Arab Daylight Time"
-msgstr ""
+msgstr "Арабський літній час"
#: dlls/tzres/tzres.rc:38
msgid "Arabian Standard Time"
-msgstr ""
+msgstr "Арабський стандартний час"
#: dlls/tzres/tzres.rc:39
msgid "Arabian Daylight Time"
-msgstr ""
+msgstr "Арабський літній час"
#: dlls/tzres/tzres.rc:222
msgid "Tocantins Standard Time"
-msgstr ""
+msgstr "Стандартний час Токантінс"
#: dlls/tzres/tzres.rc:223
msgid "Tocantins Daylight Time"
-msgstr ""
+msgstr "Літній час Токантінс"
#: dlls/tzres/tzres.rc:196
msgid "Russian Standard Time"
-msgstr ""
+msgstr "Російський стандартний час"
#: dlls/tzres/tzres.rc:197
msgid "Russian Daylight Time"
-msgstr ""
+msgstr "Російський літній час"
#: dlls/tzres/tzres.rc:48
msgid "Aus Central W. Standard Time"
-msgstr ""
+msgstr "Aus Central W. стандартний час"
#: dlls/tzres/tzres.rc:49
msgid "Aus Central W. Daylight Time"
-msgstr ""
+msgstr "Aus Central W. літній час"
#: dlls/tzres/tzres.rc:194
msgid "Romance Standard Time"
-msgstr ""
+msgstr "Романський стандартний час"
#: dlls/tzres/tzres.rc:195
msgid "Romance Daylight Time"
-msgstr ""
+msgstr "Романський літній час"
#: dlls/tzres/tzres.rc:110
msgid "Ekaterinburg Standard Time"
-msgstr ""
+msgstr "Стандартний час Єкатеринбурга"
#: dlls/tzres/tzres.rc:111
msgid "Ekaterinburg Daylight Time"
-msgstr ""
+msgstr "Літній час Єкатеринбурга"
#: dlls/tzres/tzres.rc:216
msgid "Syria Standard Time"
-msgstr ""
+msgstr "Стандартний час Сирії"
#: dlls/tzres/tzres.rc:217
msgid "Syria Daylight Time"
-msgstr ""
+msgstr "Літній час Сирії"
#: dlls/tzres/tzres.rc:46
msgid "AUS Central Standard Time"
-msgstr ""
+msgstr "Центральний стандартний час AUS"
#: dlls/tzres/tzres.rc:47
msgid "AUS Central Daylight Time"
-msgstr ""
+msgstr "Центральний літній час AUS"
#: dlls/tzres/tzres.rc:122
msgid "Greenwich Standard Time"
-msgstr ""
+msgstr "Стандартний час за Грінвічем"
#: dlls/tzres/tzres.rc:123
msgid "Greenwich Daylight Time"
-msgstr ""
+msgstr "Літній час за Грінвічем"
#: dlls/tzres/tzres.rc:230
msgid "Ulaanbaatar Standard Time"
-msgstr ""
+msgstr "Стандартний час Улан-Батора"
#: dlls/tzres/tzres.rc:231
msgid "Ulaanbaatar Daylight Time"
-msgstr ""
+msgstr "Літній час Улан-Батора"
#: dlls/tzres/tzres.rc:134
msgid "Israel Standard Time"
-msgstr ""
+msgstr "Стандартний час Ізраїлю"
#: dlls/tzres/tzres.rc:135
msgid "Israel Daylight Time"
-msgstr ""
+msgstr "Літній час Ізраїлю"
#: dlls/tzres/tzres.rc:58
msgid "Bangladesh Standard Time"
-msgstr ""
+msgstr "Стандартний час Бангладеш"
#: dlls/tzres/tzres.rc:59
msgid "Bangladesh Daylight Time"
-msgstr ""
+msgstr "Літній час Бангладеш"
#: dlls/tzres/tzres.rc:200
msgid "SA Pacific Standard Time"
-msgstr ""
+msgstr "SA Тихоокеанський стандартний час"
#: dlls/tzres/tzres.rc:201
msgid "SA Pacific Daylight Time"
-msgstr ""
+msgstr "SA Тихоокеанський літній час"
#: dlls/tzres/tzres.rc:248
msgid "West Asia Standard Time"
-msgstr ""
+msgstr "Західноазіатський стандартний час"
#: dlls/tzres/tzres.rc:249
msgid "West Asia Daylight Time"
-msgstr ""
+msgstr "Західноазіатський літній час"
#: dlls/tzres/tzres.rc:32
msgid "Alaskan Standard Time"
-msgstr ""
+msgstr "Аляскинський стандартний час"
#: dlls/tzres/tzres.rc:33
msgid "Alaskan Daylight Time"
-msgstr ""
+msgstr "Аляскинський літній час"
#: dlls/tzres/tzres.rc:192
msgid "Paraguay Standard Time"
-msgstr ""
+msgstr "Парагвайський стандартний час"
#: dlls/tzres/tzres.rc:193
msgid "Paraguay Daylight Time"
-msgstr ""
+msgstr "Парагвайський літній час"
#: dlls/tzres/tzres.rc:94
msgid "Dateline Standard Time"
-msgstr ""
+msgstr "Стандартний час у Дателіні"
#: dlls/tzres/tzres.rc:95
msgid "Dateline Daylight Time"
-msgstr ""
+msgstr "Літній час у Дателіні"
#: dlls/tzres/tzres.rc:142
msgid "Libya Standard Time"
-msgstr ""
+msgstr "Лівійський стандартний час"
#: dlls/tzres/tzres.rc:143
msgid "Libya Daylight Time"
-msgstr ""
+msgstr "Лівійський літній час"
#: dlls/tzres/tzres.rc:56
msgid "Bahia Standard Time"
-msgstr ""
+msgstr "Стандартний час Баїя"
#: dlls/tzres/tzres.rc:57
msgid "Bahia Daylight Time"
-msgstr ""
+msgstr "Літній час Баїя"
#: dlls/tzres/tzres.rc:238
msgid "Venezuela Standard Time"
-msgstr ""
+msgstr "Стандартний час Венесуели"
#: dlls/tzres/tzres.rc:239
msgid "Venezuela Daylight Time"
-msgstr ""
+msgstr "Літній час Венесуели"
#: dlls/tzres/tzres.rc:62
msgid "Bougainville Standard Time"
-msgstr ""
+msgstr "Стандартний час Бугенвіля"
#: dlls/tzres/tzres.rc:63
msgid "Bougainville Daylight Time"
-msgstr ""
+msgstr "Літній час Бугенвіля"
#: dlls/tzres/tzres.rc:128
msgid "Hawaiian Standard Time"
-msgstr ""
+msgstr "Гавайський стандартний час"
#: dlls/tzres/tzres.rc:129
msgid "Hawaiian Daylight Time"
-msgstr ""
+msgstr "Гавайський літній час"
#: dlls/tzres/tzres.rc:208
msgid "SE Asia Standard Time"
-msgstr ""
+msgstr "Південно-Східний Азіатський стандартний час"
#: dlls/tzres/tzres.rc:209
msgid "SE Asia Daylight Time"
-msgstr ""
+msgstr "Південно-Східний Азіатський літній час"
#: dlls/tzres/tzres.rc:174
msgid "New Zealand Standard Time"
-msgstr ""
+msgstr "Стандартний час Нової Зеландії"
#: dlls/tzres/tzres.rc:175
msgid "New Zealand Daylight Time"
-msgstr ""
+msgstr "Літній час Нової Зеландії"
#: dlls/tzres/tzres.rc:34
msgid "Aleutian Standard Time"
-msgstr ""
+msgstr "Алеутський стандартний час"
#: dlls/tzres/tzres.rc:35
msgid "Aleutian Daylight Time"
-msgstr ""
+msgstr "Алеутський літній час"
#: dlls/tzres/tzres.rc:76
msgid "Central Brazilian Standard Time"
-msgstr ""
+msgstr "Центральний бразильський стандартний час"
#: dlls/tzres/tzres.rc:77
msgid "Central Brazilian Daylight Time"
-msgstr ""
+msgstr "Центральний бразильський літній час"
#: dlls/tzres/tzres.rc:60
msgid "Belarus Standard Time"
-msgstr ""
+msgstr "Білоруський стандартний час"
#: dlls/tzres/tzres.rc:61
msgid "Belarus Daylight Time"
-msgstr ""
+msgstr "Білоруський літній час"
#: dlls/tzres/tzres.rc:202
msgid "SA Western Standard Time"
-msgstr ""
+msgstr "SA Західний стандартний час"
#: dlls/tzres/tzres.rc:203
msgid "SA Western Daylight Time"
-msgstr ""
+msgstr "SA Західний літній час"
#: dlls/tzres/tzres.rc:120
msgid "Greenland Standard Time"
-msgstr ""
+msgstr "Стандартний час Гренландії"
#: dlls/tzres/tzres.rc:121
msgid "Greenland Daylight Time"
-msgstr ""
+msgstr "Літній час Гренландії"
#: dlls/tzres/tzres.rc:102
msgid "Easter Island Standard Time"
-msgstr ""
+msgstr "Стандартний час острова Пасхи"
#: dlls/tzres/tzres.rc:103
msgid "Easter Island Daylight Time"
-msgstr ""
+msgstr "Літній час острова Пасхи"
#: dlls/tzres/tzres.rc:108
msgid "Egypt Standard Time"
-msgstr ""
+msgstr "Єгипетський стандартний час"
#: dlls/tzres/tzres.rc:109
msgid "Egypt Daylight Time"
-msgstr ""
+msgstr "Єгипетський літній час"
#: dlls/tzres/tzres.rc:106
msgid "Eastern Standard Time (Mexico)"
-msgstr ""
+msgstr "Східний стандартний час (Мексика)"
#: dlls/tzres/tzres.rc:107
msgid "Eastern Daylight Time (Mexico)"
-msgstr ""
+msgstr "Східний літній час (Мексика)"
#: dlls/tzres/tzres.rc:154
msgid "Mauritius Standard Time"
-msgstr ""
+msgstr "Стандартний час Маврикія"
#: dlls/tzres/tzres.rc:155
msgid "Mauritius Daylight Time"
-msgstr ""
+msgstr "Літній час Маврикія"
#: dlls/tzres/tzres.rc:240
msgid "Vladivostok Standard Time"
-msgstr ""
+msgstr "Стандартний час Владивостока"
#: dlls/tzres/tzres.rc:241
msgid "Vladivostok Daylight Time"
-msgstr ""
+msgstr "Літній час Владивостока"
#: dlls/tzres/tzres.rc:210
msgid "Singapore Standard Time"
-msgstr ""
+msgstr "Стандартний час Сінгапуру"
#: dlls/tzres/tzres.rc:211
msgid "Singapore Daylight Time"
-msgstr ""
+msgstr "Літній час Сінгапуру"
#: dlls/tzres/tzres.rc:140
msgid "Korea Standard Time"
-msgstr ""
+msgstr "Корейський стандартний час"
#: dlls/tzres/tzres.rc:141
msgid "Korea Daylight Time"
-msgstr ""
+msgstr "Корейський літній час"
#: dlls/tzres/tzres.rc:88
msgid "Chatham Islands Standard Time"
-msgstr ""
+msgstr "Стандартний час островів Чатем"
#: dlls/tzres/tzres.rc:89
msgid "Chatham Islands Daylight Time"
-msgstr ""
+msgstr "Літній час островів Чатем"
#: dlls/tzres/tzres.rc:96
msgid "E. Africa Standard Time"
-msgstr ""
+msgstr "E. Стандартний час в Африці"
#: dlls/tzres/tzres.rc:97
msgid "E. Africa Daylight Time"
-msgstr ""
+msgstr "E. Літній час в Африці"
#: dlls/tzres/tzres.rc:114
msgid "FLE Standard Time"
-msgstr ""
+msgstr "Стандартний час FLE"
#: dlls/tzres/tzres.rc:115
msgid "FLE Daylight Time"
-msgstr ""
+msgstr "Літній час FLE"
#: dlls/tzres/tzres.rc:100
msgid "E. South America Standard Time"
-msgstr ""
+msgstr "E. Стандартний час Південної Америки"
#: dlls/tzres/tzres.rc:101
msgid "E. South America Daylight Time"
-msgstr ""
+msgstr "E. Літній час Південної Америки"
#: dlls/tzres/tzres.rc:82
msgid "Central Pacific Standard Time"
-msgstr ""
+msgstr "Центральний тихоокеанський стандартний час"
#: dlls/tzres/tzres.rc:83
msgid "Central Pacific Daylight Time"
-msgstr ""
+msgstr "Центральний тихоокеанський літній час"
#: dlls/tzres/tzres.rc:244
msgid "W. Central Africa Standard Time"
-msgstr ""
+msgstr "В. Стандартний час у Центральній Африці"
#: dlls/tzres/tzres.rc:245
msgid "W. Central Africa Daylight Time"
-msgstr ""
+msgstr "В. Літній час у Центральній Африці"
#: dlls/tzres/tzres.rc:184
msgid "Pacific SA Standard Time"
-msgstr ""
+msgstr "Тихоокеанський стандартний час SA"
#: dlls/tzres/tzres.rc:185
msgid "Pacific SA Daylight Time"
-msgstr ""
+msgstr "Тихоокеанський літній час SA"
#: dlls/tzres/tzres.rc:98
msgid "E. Australia Standard Time"
-msgstr ""
+msgstr "E. Стандартний час в Австралії"
#: dlls/tzres/tzres.rc:99
msgid "E. Australia Daylight Time"
-msgstr ""
+msgstr "E. Літній час в Австралії"
#: dlls/tzres/tzres.rc:242
msgid "W. Australia Standard Time"
-msgstr ""
+msgstr "В. Стандартний час в Австралії"
#: dlls/tzres/tzres.rc:243
msgid "W. Australia Daylight Time"
-msgstr ""
+msgstr "В. Літній час в Австралії"
#: dlls/urlmon/urlmon.rc:32 dlls/wininet/wininet.rc:88
msgid "Security Warning"
@@ -10960,147 +10896,115 @@ msgstr "&Ще вікна..."
#: dlls/vbscript/vbscript.rc:30
msgid "Overflow"
-msgstr ""
+msgstr "Переповнення"
#: dlls/vbscript/vbscript.rc:31
-#, fuzzy
-#| msgid "Out of memory."
msgid "Out of memory"
-msgstr "Замало пам'яті."
+msgstr "Замало пам'яті"
#: dlls/vbscript/vbscript.rc:33
msgid "This array is fixed or temporarily locked"
-msgstr ""
+msgstr "Цей масив виправлений або тимчасово заблокований"
#: dlls/vbscript/vbscript.rc:34
-#, fuzzy
-#| msgid "Data type mismatch.\n"
msgid "Type mismatch"
-msgstr "Невідповідність типів даних.\n"
+msgstr "Невідповідність типу"
#: dlls/vbscript/vbscript.rc:36
msgid "Device I/O error"
-msgstr ""
+msgstr "Помилка вводу-виводу пристрою"
#: dlls/vbscript/vbscript.rc:37
-#, fuzzy
-#| msgid "File already exists.\n"
msgid "File already exists"
-msgstr "Файл вже існує.\n"
+msgstr "Файл вже існує"
#: dlls/vbscript/vbscript.rc:38
-#, fuzzy
-#| msgid "Disk full.\n"
msgid "Disk full"
-msgstr "Диск заповнений.\n"
+msgstr "Диск заповнений"
#: dlls/vbscript/vbscript.rc:39
-#, fuzzy
-#| msgid "Too many open files.\n"
msgid "Too many files"
-msgstr "Забагато відкритих файлів.\n"
+msgstr "Забагато файлів"
#: dlls/vbscript/vbscript.rc:40
-#, fuzzy
-#| msgid "Access denied.\n"
msgid "Permission denied"
-msgstr "Доступ заборонено.\n"
+msgstr "Доступ заборонено"
#: dlls/vbscript/vbscript.rc:41
msgid "Path/File access error"
-msgstr ""
+msgstr "Помилка доступу до шляху/файлу"
#: dlls/vbscript/vbscript.rc:42
-#, fuzzy
-#| msgid "Path not found.\n"
msgid "Path not found"
-msgstr "Шлях не знайдено.\n"
+msgstr "Шлях не знайдено"
#: dlls/vbscript/vbscript.rc:43
-#, fuzzy
-#| msgid "(value not set)"
msgid "Object variable not set"
-msgstr "(значення не задане)"
+msgstr "Не встановлена змінна об'єкта"
#: dlls/vbscript/vbscript.rc:44
-#, fuzzy
-#| msgid "Invalid cursor handle.\n"
msgid "Invalid use of Null"
-msgstr "Невірна рукоятка курсора.\n"
+msgstr "Неправильне використання Null"
#: dlls/vbscript/vbscript.rc:45
msgid "Can't create necessary temporary file"
-msgstr ""
+msgstr "Не вдається створити необхідний тимчасовий файл"
#: dlls/vbscript/vbscript.rc:46
-#, fuzzy
-#| msgid "Automation server can't create object"
msgid "ActiveX component can't create object"
-msgstr "Сервер автоматизації не може створити об'єкт"
+msgstr "Компонент ActiveX не може створити об’єкт"
#: dlls/vbscript/vbscript.rc:47
-#, fuzzy
-#| msgid "Object doesn't support this action"
msgid "Class doesn't support Automation"
-msgstr "Об'єкт не підтримує цю дію"
+msgstr "Клас не підтримує автоматизацію"
#: dlls/vbscript/vbscript.rc:48
msgid "File name or class name not found during Automation operation"
-msgstr ""
+msgstr "Ім'я файлу або ім'я класу не знайдено під час операції автоматизації"
#: dlls/vbscript/vbscript.rc:51
-#, fuzzy
-#| msgid "Object doesn't support this action"
msgid "Object doesn't support named arguments"
-msgstr "Об'єкт не підтримує цю дію"
+msgstr "Об'єкт не підтримує названі аргументи"
#: dlls/vbscript/vbscript.rc:52
-#, fuzzy
-#| msgid "Object doesn't support this action"
msgid "Object doesn't support current locale setting"
-msgstr "Об'єкт не підтримує цю дію"
+msgstr "Об’єкт не підтримує поточні налаштування мови"
#: dlls/vbscript/vbscript.rc:53 dlls/vbscript/vbscript.rc:54
-#, fuzzy
-#| msgid "Element not found.\n"
msgid "Named argument not found"
-msgstr "Елемент не знайдено.\n"
+msgstr "Названий аргумент не знайдено"
#: dlls/vbscript/vbscript.rc:55
msgid "Wrong number of arguments or invalid property assignment"
-msgstr ""
+msgstr "Неправильна кількість аргументів або недійсне призначення властивості"
#: dlls/vbscript/vbscript.rc:56
-#, fuzzy
-#| msgid "Object Class Violation"
msgid "Object not a collection"
-msgstr "Порушення класу об'єкту"
+msgstr "Об'єкт не є набором"
#: dlls/vbscript/vbscript.rc:57
-#, fuzzy
-#| msgid "Specified control was not found in message"
msgid "Specified DLL function not found"
-msgstr "Вказаний елемент керування не знайдено в повідомленні"
+msgstr "Вказану функцію DLL не знайдено"
#: dlls/vbscript/vbscript.rc:58
msgid "Variable uses an Automation type not supported in VBScript"
-msgstr ""
+msgstr "Змінна використовує тип автоматизації, який не підтримується у VBScript"
#: dlls/vbscript/vbscript.rc:59
msgid "The remote server machine does not exist or is unavailable"
-msgstr ""
+msgstr "Віддалений сервер не існує або недоступний"
#: dlls/vbscript/vbscript.rc:60
msgid "Invalid or unqualified reference"
-msgstr ""
+msgstr "Недійсне або невизначене посилання"
#: dlls/vbscript/vbscript.rc:62
msgid "Microsoft VBScript compilation error"
-msgstr ""
+msgstr "Помилка компіляції Microsoft VBScript"
#: dlls/vbscript/vbscript.rc:63
msgid "Microsoft VBScript runtime error"
-msgstr ""
+msgstr "Помилка виконання Microsoft VBScript"
#: dlls/winemac.drv/winemac.rc:33
msgid "Hide %@"
@@ -11197,33 +11101,27 @@ msgstr "Існує принаймні одна невизначена пробл
#: dlls/wininet/wininet.rc:35
msgid "Effective Date"
-msgstr ""
+msgstr "Дата набрання чинності"
#: dlls/wininet/wininet.rc:37
-#, fuzzy
-#| msgid "Security"
msgid "Security Protocol"
-msgstr "Безпека"
+msgstr "Протокол безпеки"
#: dlls/wininet/wininet.rc:38
-#, fuzzy
-#| msgid "Signature"
msgid "Signature Type"
-msgstr "Підпис"
+msgstr "Тип підпису"
#: dlls/wininet/wininet.rc:39
-#, fuzzy
-#| msgid "Encrypting File System"
msgid "Encryption Type"
-msgstr "Зашифрована Файлова Система"
+msgstr "Тип шифрування"
#: dlls/wininet/wininet.rc:40
msgid "Privacy Strength"
-msgstr ""
+msgstr "Сила конфіденційності"
#: dlls/wininet/wininet.rc:43
msgid "bits"
-msgstr ""
+msgstr "біти"
#: dlls/wininet/winineterror.mc:26
msgid "The request has timed out.\n"
@@ -13236,6 +13134,9 @@ msgid ""
"\n"
"hardlink hardlink management\n"
msgstr ""
+"- Підтримувані команди -\n"
+"\n"
+"hardlink управління жорстким посиланням\n"
#: programs/fsutil/fsutil.mc:35
msgid ""
@@ -13243,10 +13144,13 @@ msgid ""
"\n"
"create create a hardlink\n"
msgstr ""
+"- Жорстке посилання - Підтримувані команди -\n"
+"\n"
+"create створити жорстке посилання\n"
#: programs/fsutil/fsutil.mc:40
msgid "Syntax: fsutil hardlink create <new> <existing>\n"
-msgstr ""
+msgstr "Синтаксис: fsutil hardlink create <нове> <існуюче>\n"
#: programs/hostname/hostname.rc:30
msgid "Usage: hostname\n"
@@ -16053,10 +15957,10 @@ msgid ""
"data before it is terminated. Are you sure you want to\n"
"terminate the process?"
msgstr ""
-"УВАГА: Завершення цього процесу може призвести до\n"
-"небажаних результатів, включаючи втрату даних та\n"
-"нестабільність системи. Процес не зможе зберегти\n"
-"свою позицію чи дані. Ви справді хочете завершити\n"
+"УВАГА: Завершення цього процесу може призвести до "
+"небажаних результатів, включаючи втрату даних та "
+"нестабільність системи. Процес не зможе зберегти "
+"свою позицію чи дані. Ви справді хочете завершити "
"процес?"
#: programs/taskmgr/taskmgr.rc:311
@@ -17069,10 +16973,8 @@ msgid "&Beginner"
msgstr "Н&овачок"
#: programs/winemine/winemine.rc:45
-#, fuzzy
-#| msgid "Interface"
msgid "&Intermediate"
-msgstr "Інтерфейс"
+msgstr "&Проміжний"
#: programs/winemine/winemine.rc:46
msgid "&Expert"
@@ -17103,10 +17005,8 @@ msgid "Beginner"
msgstr "Новачок"
#: programs/winemine/winemine.rc:65
-#, fuzzy
-#| msgid "Interface"
msgid "Intermediate"
-msgstr "Інтерфейс"
+msgstr "Проміжний"
#: programs/winemine/winemine.rc:66
msgid "Expert"
--
2.29.2
Dec. 25, 2020
[PATCH] wined3d: Use debug_d3dusage() for both usage and usage query flags.
by Zebediah Figura
Avoid spurious FIXME messages in wined3d_check_device_format().
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/wined3d/directx.c | 4 ++--
dlls/wined3d/utils.c | 29 ++++++++---------------------
dlls/wined3d/wined3d_private.h | 1 -
3 files changed, 10 insertions(+), 24 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index d35108710c2..2764b113065 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1692,10 +1692,10 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d,
DWORD format_flags = 0;
DWORD allowed_usage;
- TRACE("wined3d %p, adapter %p, device_type %s, adapter_format %s, usage %s, %s, "
+ TRACE("wined3d %p, adapter %p, device_type %s, adapter_format %s, usage %s, "
"bind_flags %s, resource_type %s, check_format %s.\n",
wined3d, adapter, debug_d3ddevicetype(device_type), debug_d3dformat(adapter_format_id),
- debug_d3dusage(usage), debug_d3dusagequery(usage), wined3d_debug_bind_flags(bind_flags),
+ debug_d3dusage(usage), wined3d_debug_bind_flags(bind_flags),
debug_d3dresourcetype(resource_type), debug_d3dformat(check_format_id));
adapter_format = wined3d_get_format(adapter, adapter_format_id, WINED3D_BIND_RENDER_TARGET);
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 88175d4bf26..4ec6e4db42d 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -4710,6 +4710,14 @@ const char *debug_d3dusage(DWORD usage)
WINED3DUSAGE_TO_STR(WINED3DUSAGE_OWNDC);
WINED3DUSAGE_TO_STR(WINED3DUSAGE_STATICDECL);
WINED3DUSAGE_TO_STR(WINED3DUSAGE_OVERLAY);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_FILTER);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_GENMIPMAP);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_LEGACYBUMPMAP);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_SRGBREAD);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_SRGBWRITE);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_VERTEXTEXTURE);
+ WINED3DUSAGE_TO_STR(WINED3DUSAGE_QUERY_WRAPANDMIP);
#undef WINED3DUSAGE_TO_STR
if (usage)
FIXME("Unrecognized usage flag(s) %#x.\n", usage);
@@ -4717,27 +4725,6 @@ const char *debug_d3dusage(DWORD usage)
return wine_dbg_sprintf("%s", buffer.str);
}
-const char *debug_d3dusagequery(DWORD usage)
-{
- struct debug_buffer buffer;
-
- init_debug_buffer(&buffer, "0");
-#define WINED3DUSAGEQUERY_TO_STR(x) if (usage & x) { debug_append(&buffer, #x, " | "); usage &= ~x; }
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_FILTER);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_GENMIPMAP);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_LEGACYBUMPMAP);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_SRGBREAD);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_SRGBWRITE);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_VERTEXTEXTURE);
- WINED3DUSAGEQUERY_TO_STR(WINED3DUSAGE_QUERY_WRAPANDMIP);
-#undef WINED3DUSAGEQUERY_TO_STR
- if (usage)
- FIXME("Unrecognized usage query flag(s) %#x.\n", usage);
-
- return wine_dbg_sprintf("%s", buffer.str);
-}
-
const char *debug_d3ddeclmethod(enum wined3d_decl_method method)
{
switch (method)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 0749f95f998..bd848f61e32 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -5273,7 +5273,6 @@ const char *debug_d3dformat(enum wined3d_format_id format_id) DECLSPEC_HIDDEN;
const char *debug_d3ddevicetype(enum wined3d_device_type device_type) DECLSPEC_HIDDEN;
const char *debug_d3dresourcetype(enum wined3d_resource_type resource_type) DECLSPEC_HIDDEN;
const char *debug_d3dusage(DWORD usage) DECLSPEC_HIDDEN;
-const char *debug_d3dusagequery(DWORD usagequery) DECLSPEC_HIDDEN;
const char *debug_d3ddeclmethod(enum wined3d_decl_method method) DECLSPEC_HIDDEN;
const char *debug_d3ddeclusage(enum wined3d_decl_usage usage) DECLSPEC_HIDDEN;
const char *debug_d3dinput_classification(enum wined3d_input_classification classification) DECLSPEC_HIDDEN;
--
2.29.2
Dec. 25, 2020
[PATCH] d3dcompiler/tests: Avoid initializing nameless unions in designated initializers.
by Zebediah Figura
Old versions of gcc can't handle this.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50397
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/d3dcompiler_43/tests/hlsl_d3d11.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/dlls/d3dcompiler_43/tests/hlsl_d3d11.c b/dlls/d3dcompiler_43/tests/hlsl_d3d11.c
index 7a1243b9ccf..53dbd3e2df7 100644
--- a/dlls/d3dcompiler_43/tests/hlsl_d3d11.c
+++ b/dlls/d3dcompiler_43/tests/hlsl_d3d11.c
@@ -526,6 +526,7 @@ static void test_trig(void)
static void test_sampling(void)
{
+ D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc = {0};
struct test_context test_context;
ID3D11ShaderResourceView *srv;
ID3D11SamplerState *sampler;
@@ -592,13 +593,6 @@ static void test_sampling(void)
static const D3D11_SUBRESOURCE_DATA resource_data = {&texture_data, sizeof(texture_data) / 2};
- static const D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc =
- {
- .Format = DXGI_FORMAT_R32G32B32A32_FLOAT,
- .ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D,
- .Texture2D.MipLevels = 1,
- };
-
static const D3D11_SAMPLER_DESC sampler_desc =
{
.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR,
@@ -614,6 +608,9 @@ static void test_sampling(void)
hr = ID3D11Device_CreateTexture2D(test_context.device, &texture_desc, &resource_data, &texture);
ok(hr == S_OK, "Failed to create texture, hr %#x.\n", hr);
+ srv_desc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
+ srv_desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
+ srv_desc.Texture2D.MipLevels = 1;
hr = ID3D11Device_CreateShaderResourceView(test_context.device, (ID3D11Resource *)texture, &srv_desc, &srv);
ok(hr == S_OK, "Failed to create SRV, hr %#x.\n", hr);
ID3D11DeviceContext_PSSetShaderResources(test_context.immediate_context, 0, 1, &srv);
--
2.29.2
Dec. 25, 2020
[PATCH v2] winegstreamer: Split audio data to fit in the sample buffer.
by Anton Baskanov
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50355
Signed-off-by: Anton Baskanov <baskanov(a)gmail.com>
---
v2: Set discontinuity and sync point flags only for the first sample.
---
dlls/winegstreamer/gstdemux.c | 144 +++++++++++++++++++++-------------
1 file changed, 90 insertions(+), 54 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 9114e6610a3..676b7396515 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -81,6 +81,7 @@ struct gstdemux_source
HANDLE caps_event, eos_event;
GstSegment *segment;
SourceSeeking seek;
+ DWORD bytes_per_second;
};
static inline struct gstdemux *impl_from_strmbase_filter(struct strmbase_filter *iface)
@@ -801,6 +802,7 @@ static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *bu
BYTE *ptr = NULL;
IMediaSample *sample;
GstMapInfo info;
+ gsize position = 0;
TRACE("%p %p\n", pad, buf);
@@ -809,76 +811,108 @@ static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *bu
return GST_FLOW_OK;
}
- hr = BaseOutputPinImpl_GetDeliveryBuffer(&pin->pin, &sample, NULL, NULL, 0);
-
- if (hr == VFW_E_NOT_CONNECTED) {
- gst_buffer_unref(buf);
- return GST_FLOW_NOT_LINKED;
- }
+ gst_buffer_map(buf, &info, GST_MAP_READ);
- if (FAILED(hr)) {
- gst_buffer_unref(buf);
- ERR("Could not get a delivery buffer (%x), returning GST_FLOW_FLUSHING\n", hr);
- return GST_FLOW_FLUSHING;
- }
+ while (position < info.size)
+ {
+ gsize advance;
- gst_buffer_map(buf, &info, GST_MAP_READ);
+ hr = BaseOutputPinImpl_GetDeliveryBuffer(&pin->pin, &sample, NULL, NULL, 0);
- hr = IMediaSample_SetActualDataLength(sample, info.size);
- if(FAILED(hr)){
- WARN("SetActualDataLength failed: %08x\n", hr);
- return GST_FLOW_FLUSHING;
- }
+ if (hr == VFW_E_NOT_CONNECTED) {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ return GST_FLOW_NOT_LINKED;
+ }
- IMediaSample_GetPointer(sample, &ptr);
+ if (FAILED(hr)) {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ ERR("Could not get a delivery buffer (%x), returning GST_FLOW_FLUSHING\n", hr);
+ return GST_FLOW_FLUSHING;
+ }
- memcpy(ptr, info.data, info.size);
+ advance = min(IMediaSample_GetSize(sample), info.size - position);
- gst_buffer_unmap(buf, &info);
+ hr = IMediaSample_SetActualDataLength(sample, advance);
+ if(FAILED(hr)){
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ WARN("SetActualDataLength failed: %08x\n", hr);
+ return GST_FLOW_FLUSHING;
+ }
- if (GST_BUFFER_PTS_IS_VALID(buf)) {
- REFERENCE_TIME rtStart = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, buf->pts);
- if (rtStart >= 0)
- rtStart /= 100;
-
- if (GST_BUFFER_DURATION_IS_VALID(buf)) {
- REFERENCE_TIME tStart = buf->pts / 100;
- REFERENCE_TIME tStop = (buf->pts + buf->duration) / 100;
- REFERENCE_TIME rtStop;
- rtStop = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, buf->pts + buf->duration);
- if (rtStop >= 0)
- rtStop /= 100;
- TRACE("Current time on %p: %i to %i ms\n", pin, (int)(rtStart / 10000), (int)(rtStop / 10000));
- IMediaSample_SetTime(sample, &rtStart, rtStop >= 0 ? &rtStop : NULL);
- IMediaSample_SetMediaTime(sample, &tStart, &tStop);
+ IMediaSample_GetPointer(sample, &ptr);
+
+ memcpy(ptr, &info.data[position], advance);
+
+ if (GST_BUFFER_PTS_IS_VALID(buf)) {
+ REFERENCE_TIME rtStart;
+ GstClockTime ptsStart = buf->pts;
+ if (position > 0 && pin->bytes_per_second)
+ ptsStart = buf->pts + gst_util_uint64_scale(position, GST_SECOND, pin->bytes_per_second);
+ rtStart = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, ptsStart);
+ if (rtStart >= 0)
+ rtStart /= 100;
+
+ if (GST_BUFFER_DURATION_IS_VALID(buf)) {
+ REFERENCE_TIME rtStop;
+ REFERENCE_TIME tStart;
+ REFERENCE_TIME tStop;
+ GstClockTime ptsStop = buf->pts + buf->duration;
+ if (position + advance < info.size && pin->bytes_per_second)
+ ptsStop = buf->pts + gst_util_uint64_scale(position + advance, GST_SECOND, pin->bytes_per_second);
+ tStart = ptsStart / 100;
+ tStop = ptsStop / 100;
+ rtStop = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, ptsStop);
+ if (rtStop >= 0)
+ rtStop /= 100;
+ TRACE("Current time on %p: %i to %i ms\n", pin, (int)(rtStart / 10000), (int)(rtStop / 10000));
+ IMediaSample_SetTime(sample, &rtStart, rtStop >= 0 ? &rtStop : NULL);
+ IMediaSample_SetMediaTime(sample, &tStart, &tStop);
+ } else {
+ IMediaSample_SetTime(sample, rtStart >= 0 ? &rtStart : NULL, NULL);
+ IMediaSample_SetMediaTime(sample, NULL, NULL);
+ }
} else {
- IMediaSample_SetTime(sample, rtStart >= 0 ? &rtStart : NULL, NULL);
+ IMediaSample_SetTime(sample, NULL, NULL);
IMediaSample_SetMediaTime(sample, NULL, NULL);
}
- } else {
- IMediaSample_SetTime(sample, NULL, NULL);
- IMediaSample_SetMediaTime(sample, NULL, NULL);
- }
- IMediaSample_SetDiscontinuity(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT));
- IMediaSample_SetPreroll(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_LIVE));
- IMediaSample_SetSyncPoint(sample, !GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DELTA_UNIT));
+ IMediaSample_SetDiscontinuity(sample,
+ !position && GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT));
+ IMediaSample_SetPreroll(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_LIVE));
+ IMediaSample_SetSyncPoint(sample,
+ !position && !GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DELTA_UNIT));
- if (!pin->pin.pin.peer)
- hr = VFW_E_NOT_CONNECTED;
- else
- hr = IMemInputPin_Receive(pin->pin.pMemInputPin, sample);
+ if (!pin->pin.pin.peer)
+ hr = VFW_E_NOT_CONNECTED;
+ else
+ hr = IMemInputPin_Receive(pin->pin.pMemInputPin, sample);
- TRACE("sending sample returned: %08x\n", hr);
+ TRACE("sending sample returned: %08x\n", hr);
- gst_buffer_unref(buf);
- IMediaSample_Release(sample);
+ IMediaSample_Release(sample);
- if (hr == VFW_E_NOT_CONNECTED)
- return GST_FLOW_NOT_LINKED;
+ if (hr == VFW_E_NOT_CONNECTED)
+ {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ return GST_FLOW_NOT_LINKED;
+ }
- if (FAILED(hr))
- return GST_FLOW_FLUSHING;
+ if (FAILED(hr))
+ {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ return GST_FLOW_FLUSHING;
+ }
+
+ position += advance;
+ }
+
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
return GST_FLOW_OK;
}
@@ -2104,6 +2138,8 @@ static HRESULT WINAPI GSTOutPin_DecideBufferSize(struct strmbase_source *iface,
{
WAVEFORMATEX *format = (WAVEFORMATEX *)pin->pin.pin.mt.pbFormat;
buffer_size = format->nAvgBytesPerSec;
+
+ pin->bytes_per_second = format->nAvgBytesPerSec;
}
props->cBuffers = max(props->cBuffers, 1);
--
2.25.1
Dec. 25, 2020
[PATCH] winegstreamer: Split audio data to fit in the sample buffer.
by Anton Baskanov
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50355
Signed-off-by: Anton Baskanov <baskanov(a)gmail.com>
---
dlls/winegstreamer/gstdemux.c | 142 +++++++++++++++++++++-------------
1 file changed, 88 insertions(+), 54 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 9114e6610a3..8a9c0a84191 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -81,6 +81,7 @@ struct gstdemux_source
HANDLE caps_event, eos_event;
GstSegment *segment;
SourceSeeking seek;
+ DWORD bytes_per_second;
};
static inline struct gstdemux *impl_from_strmbase_filter(struct strmbase_filter *iface)
@@ -801,6 +802,7 @@ static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *bu
BYTE *ptr = NULL;
IMediaSample *sample;
GstMapInfo info;
+ gsize position = 0;
TRACE("%p %p\n", pad, buf);
@@ -809,76 +811,106 @@ static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *bu
return GST_FLOW_OK;
}
- hr = BaseOutputPinImpl_GetDeliveryBuffer(&pin->pin, &sample, NULL, NULL, 0);
-
- if (hr == VFW_E_NOT_CONNECTED) {
- gst_buffer_unref(buf);
- return GST_FLOW_NOT_LINKED;
- }
+ gst_buffer_map(buf, &info, GST_MAP_READ);
- if (FAILED(hr)) {
- gst_buffer_unref(buf);
- ERR("Could not get a delivery buffer (%x), returning GST_FLOW_FLUSHING\n", hr);
- return GST_FLOW_FLUSHING;
- }
+ while (position < info.size)
+ {
+ gsize advance;
- gst_buffer_map(buf, &info, GST_MAP_READ);
+ hr = BaseOutputPinImpl_GetDeliveryBuffer(&pin->pin, &sample, NULL, NULL, 0);
- hr = IMediaSample_SetActualDataLength(sample, info.size);
- if(FAILED(hr)){
- WARN("SetActualDataLength failed: %08x\n", hr);
- return GST_FLOW_FLUSHING;
- }
+ if (hr == VFW_E_NOT_CONNECTED) {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ return GST_FLOW_NOT_LINKED;
+ }
- IMediaSample_GetPointer(sample, &ptr);
+ if (FAILED(hr)) {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ ERR("Could not get a delivery buffer (%x), returning GST_FLOW_FLUSHING\n", hr);
+ return GST_FLOW_FLUSHING;
+ }
- memcpy(ptr, info.data, info.size);
+ advance = min(IMediaSample_GetSize(sample), info.size - position);
- gst_buffer_unmap(buf, &info);
+ hr = IMediaSample_SetActualDataLength(sample, advance);
+ if(FAILED(hr)){
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ WARN("SetActualDataLength failed: %08x\n", hr);
+ return GST_FLOW_FLUSHING;
+ }
- if (GST_BUFFER_PTS_IS_VALID(buf)) {
- REFERENCE_TIME rtStart = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, buf->pts);
- if (rtStart >= 0)
- rtStart /= 100;
-
- if (GST_BUFFER_DURATION_IS_VALID(buf)) {
- REFERENCE_TIME tStart = buf->pts / 100;
- REFERENCE_TIME tStop = (buf->pts + buf->duration) / 100;
- REFERENCE_TIME rtStop;
- rtStop = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, buf->pts + buf->duration);
- if (rtStop >= 0)
- rtStop /= 100;
- TRACE("Current time on %p: %i to %i ms\n", pin, (int)(rtStart / 10000), (int)(rtStop / 10000));
- IMediaSample_SetTime(sample, &rtStart, rtStop >= 0 ? &rtStop : NULL);
- IMediaSample_SetMediaTime(sample, &tStart, &tStop);
+ IMediaSample_GetPointer(sample, &ptr);
+
+ memcpy(ptr, &info.data[position], advance);
+
+ if (GST_BUFFER_PTS_IS_VALID(buf)) {
+ REFERENCE_TIME rtStart;
+ GstClockTime ptsStart = buf->pts;
+ if (position > 0 && pin->bytes_per_second)
+ ptsStart = buf->pts + gst_util_uint64_scale(position, GST_SECOND, pin->bytes_per_second);
+ rtStart = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, ptsStart);
+ if (rtStart >= 0)
+ rtStart /= 100;
+
+ if (GST_BUFFER_DURATION_IS_VALID(buf)) {
+ REFERENCE_TIME rtStop;
+ REFERENCE_TIME tStart;
+ REFERENCE_TIME tStop;
+ GstClockTime ptsStop = buf->pts + buf->duration;
+ if (position + advance < info.size && pin->bytes_per_second)
+ ptsStop = buf->pts + gst_util_uint64_scale(position + advance, GST_SECOND, pin->bytes_per_second);
+ tStart = ptsStart / 100;
+ tStop = ptsStop / 100;
+ rtStop = gst_segment_to_running_time(pin->segment, GST_FORMAT_TIME, ptsStop);
+ if (rtStop >= 0)
+ rtStop /= 100;
+ TRACE("Current time on %p: %i to %i ms\n", pin, (int)(rtStart / 10000), (int)(rtStop / 10000));
+ IMediaSample_SetTime(sample, &rtStart, rtStop >= 0 ? &rtStop : NULL);
+ IMediaSample_SetMediaTime(sample, &tStart, &tStop);
+ } else {
+ IMediaSample_SetTime(sample, rtStart >= 0 ? &rtStart : NULL, NULL);
+ IMediaSample_SetMediaTime(sample, NULL, NULL);
+ }
} else {
- IMediaSample_SetTime(sample, rtStart >= 0 ? &rtStart : NULL, NULL);
+ IMediaSample_SetTime(sample, NULL, NULL);
IMediaSample_SetMediaTime(sample, NULL, NULL);
}
- } else {
- IMediaSample_SetTime(sample, NULL, NULL);
- IMediaSample_SetMediaTime(sample, NULL, NULL);
- }
- IMediaSample_SetDiscontinuity(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT));
- IMediaSample_SetPreroll(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_LIVE));
- IMediaSample_SetSyncPoint(sample, !GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DELTA_UNIT));
+ IMediaSample_SetDiscontinuity(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT));
+ IMediaSample_SetPreroll(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_LIVE));
+ IMediaSample_SetSyncPoint(sample, !GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DELTA_UNIT));
- if (!pin->pin.pin.peer)
- hr = VFW_E_NOT_CONNECTED;
- else
- hr = IMemInputPin_Receive(pin->pin.pMemInputPin, sample);
+ if (!pin->pin.pin.peer)
+ hr = VFW_E_NOT_CONNECTED;
+ else
+ hr = IMemInputPin_Receive(pin->pin.pMemInputPin, sample);
- TRACE("sending sample returned: %08x\n", hr);
+ TRACE("sending sample returned: %08x\n", hr);
- gst_buffer_unref(buf);
- IMediaSample_Release(sample);
+ IMediaSample_Release(sample);
- if (hr == VFW_E_NOT_CONNECTED)
- return GST_FLOW_NOT_LINKED;
+ if (hr == VFW_E_NOT_CONNECTED)
+ {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ return GST_FLOW_NOT_LINKED;
+ }
- if (FAILED(hr))
- return GST_FLOW_FLUSHING;
+ if (FAILED(hr))
+ {
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
+ return GST_FLOW_FLUSHING;
+ }
+
+ position += advance;
+ }
+
+ gst_buffer_unmap(buf, &info);
+ gst_buffer_unref(buf);
return GST_FLOW_OK;
}
@@ -2104,6 +2136,8 @@ static HRESULT WINAPI GSTOutPin_DecideBufferSize(struct strmbase_source *iface,
{
WAVEFORMATEX *format = (WAVEFORMATEX *)pin->pin.pin.mt.pbFormat;
buffer_size = format->nAvgBytesPerSec;
+
+ pin->bytes_per_second = format->nAvgBytesPerSec;
}
props->cBuffers = max(props->cBuffers, 1);
--
2.25.1
Dec. 24, 2020
Re: [PATCH] ucrtbase: Do not prefix MSVCRT_ to the exported function name of _lrot*.
by Piotr Caban
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com>
> On 24 Dec 2020, at 18:44, Zebediah Figura <z.figura12(a)gmail.com> wrote:
>
> Fixes: e8936e79c20f09156afe8ecac0fe9cde87905a71
> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
> ---
> dlls/ucrtbase/ucrtbase.spec | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
> index 8b884366fa0..e593f5d745c 100644
> --- a/dlls/ucrtbase/ucrtbase.spec
> +++ b/dlls/ucrtbase/ucrtbase.spec
> @@ -568,8 +568,8 @@
> @ cdecl _logb(double)
> @ cdecl -arch=!i386 _logbf(float)
> @ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp
> -@ cdecl MSVCRT__lrotl(long long) MSVCRT__lrotl
> -@ cdecl MSVCRT__lrotr(long long) MSVCRT__lrotr
> +@ cdecl _lrotl(long long) MSVCRT__lrotl
> +@ cdecl _lrotr(long long) MSVCRT__lrotr
> @ cdecl _lsearch(ptr ptr ptr long ptr)
> @ stub _lsearch_s
> @ cdecl _lseek(long long long)
> --
> 2.29.2
>
>
Dec. 24, 2020
[PATCH] ucrtbase: Do not prefix MSVCRT_ to the exported function name of _lrot*.
by Zebediah Figura
Fixes: e8936e79c20f09156afe8ecac0fe9cde87905a71
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/ucrtbase/ucrtbase.spec | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 8b884366fa0..e593f5d745c 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -568,8 +568,8 @@
@ cdecl _logb(double)
@ cdecl -arch=!i386 _logbf(float)
@ cdecl -arch=i386 _longjmpex(ptr long) MSVCRT_longjmp
-@ cdecl MSVCRT__lrotl(long long) MSVCRT__lrotl
-@ cdecl MSVCRT__lrotr(long long) MSVCRT__lrotr
+@ cdecl _lrotl(long long) MSVCRT__lrotl
+@ cdecl _lrotr(long long) MSVCRT__lrotr
@ cdecl _lsearch(ptr ptr ptr long ptr)
@ stub _lsearch_s
@ cdecl _lseek(long long long)
--
2.29.2
Dec. 24, 2020
Re: [PATCH v2] comctl32/tests: add test for getting listview data during sorting.
by Nikolay Sivov
As you can see from test runs, results are inconsistent. So I'm not sure
we should be doing anything with it, unless tests do not demonstrate the
issue you're seeing.
Dec. 24, 2020
Dec. 24, 2020
Re: [PATCH] d3dx9: Avoid closing invalid handles.
by Matteo Bruni
On Wed, Dec 23, 2020 at 2:30 PM Akihiro Sagawa <sagawa.aki(a)gmail.com> wrote:
>
> On Tue, 22 Dec 2020 21:34:34 +0100, Matteo Bruni wrote:
> > On Mon, Dec 21, 2020 at 2:44 PM Akihiro Sagawa <sagawa.aki(a)gmail.com> wrote:
> > >
> > > Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50373
> > > Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com>
> > > ---
> > > dlls/d3dx9_36/util.c | 6 ++++--
> > > 1 file changed, 4 insertions(+), 2 deletions(-)
> > >
> >
> > Do you know why it fails to map the file in the first place? Maybe it
> > simply doesn't exist?
> Yes, the file simply doesn't exist.
> It fails to load the specific .bmp file by D3DXCreateTextureFromFile and
> trys to load non-existent .dds/.png files next.
Okay, good to know.
> > FWIW I'd like to eventually replace map_view_of_file() entirely with
> > plain file loading, i.e. ReadFile and such. That's something for after
> > the code freeze though.
> Just curiously, why is plain file loading better?
> Could it be that page boundaries?
Using plain heap memory would avoid requiring page-size alignment and
granularity for the allocated memory, which is marginal but nice to
have on 32-bit in particular. But the main reason is that applications
might have the file already (or, still) open, perhaps because they
just created it, and IIRC you can't really use a more lax share mode
in CreateFile() if you want to call CreateFileMapping() onto it.
I feel like there was a somewhat recent bug along those lines (perhaps
to one of the other d3dx libs) but, of course, now I can't find it...
Dec. 23, 2020
Re: [PATCH 1/3] shell32/tests: Remove no longer used parameter.
by Dmitry Timoshkov
Marvin <testbot(a)winehq.org> wrote:
> While running your changed tests, I think I found new failures.
> Being a bot and all I'm not very good at pattern recognition, so I might be
> wrong, but could you please double-check?
>
> Full results can be found at:
> https://testbot.winehq.org/JobDetails.pl?Key=83660
>
> Your paranoid android.
These are existing failures, here's a clean run of the merged patches:
https://testbot.winehq.org/JobDetails.pl?Key=83659
--
Dmitry.
Dec. 23, 2020
Re: [PATCH 1/3] shell32/tests: Remove no longer used parameter.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=83660
Your paranoid android.
=== w7u_el (32 bit report) ===
shell32:
autocomplete.c:554: Test failed: Expected 5 expansions, got 4
autocomplete.c:556: Test failed: Expected 6 resets, got 5
autocomplete.c:561: Test failed: Expected 6 expansions, got 5
autocomplete.c:563: Test failed: Expected 7 resets, got 6
=== w8 (32 bit report) ===
shell32:
autocomplete.c:513: Test failed: Expected 1 expansion, got 0
autocomplete.c:514: Test failed: Expected L"test\\", got L""
autocomplete.c:515: Test failed: Expected 1 reset, got 0
autocomplete.c:520: Test failed: Expected 2 expansions, got 1
autocomplete.c:522: Test failed: Expected 2 resets, got 1
autocomplete.c:531: Test failed: Expected 2 expansions, got 1
autocomplete.c:532: Test failed: Expected 2 resets, got 1
autocomplete.c:535: Test failed: Expected 3 expansions, got 2
autocomplete.c:537: Test failed: Expected 3 resets, got 2
autocomplete.c:542: Test failed: Expected 4 expansions, got 3
autocomplete.c:544: Test failed: Expected 4 resets, got 3
autocomplete.c:548: Test failed: Expected 4 expansions, got 3
autocomplete.c:549: Test failed: Expected 5 resets, got 4
autocomplete.c:554: Test failed: Expected 5 expansions, got 4
autocomplete.c:556: Test failed: Expected 6 resets, got 5
autocomplete.c:561: Test failed: Expected 6 expansions, got 5
autocomplete.c:563: Test failed: Expected 7 resets, got 6
=== w10pro64 (32 bit report) ===
shell32:
autocomplete.c:773: Test failed: Expected L"auto complete", got L"au"
autocomplete.c:774: Test failed: Expected 2 resets, got 1
autocomplete.c:779: Test failed: AutoComplete DropDown should be visible
autocomplete.c:784: Test failed: AutoComplete DropDown should have been hidden
autocomplete.c:513: Test failed: Expected 1 expansion, got 0
autocomplete.c:514: Test failed: Expected L"test\\", got L""
autocomplete.c:515: Test failed: Expected 1 reset, got 0
autocomplete.c:520: Test failed: Expected 2 expansions, got 1
autocomplete.c:522: Test failed: Expected 2 resets, got 1
autocomplete.c:531: Test failed: Expected 2 expansions, got 1
autocomplete.c:532: Test failed: Expected 2 resets, got 1
autocomplete.c:535: Test failed: Expected 3 expansions, got 2
autocomplete.c:537: Test failed: Expected 3 resets, got 2
autocomplete.c:542: Test failed: Expected 4 expansions, got 3
autocomplete.c:544: Test failed: Expected 4 resets, got 3
autocomplete.c:548: Test failed: Expected 4 expansions, got 3
autocomplete.c:549: Test failed: Expected 5 resets, got 4
autocomplete.c:554: Test failed: Expected 5 expansions, got 4
autocomplete.c:556: Test failed: Expected 6 resets, got 5
autocomplete.c:561: Test failed: Expected 6 expansions, got 5
autocomplete.c:563: Test failed: Expected 7 resets, got 6
autocomplete.c:637: Test failed: Expected L"www.ac", got L"www.a"
autocomplete.c:638: Test failed: AutoComplete DropDown not visible
autocomplete.c:638: Test failed: AutoComplete DropDown not visible
autocomplete.c:638: Test failed: Expected L"https://www.ac", got (null)
autocomplete.c:638: Test failed: AutoComplete DropDown not visible
autocomplete.c:638: Test failed: Expected L"http://www.add", got (null)
autocomplete.c:638: Test failed: AutoComplete DropDown not visible
autocomplete.c:638: Test failed: Expected L"www.ax", got (null)
autocomplete.c:638: Test failed: AutoComplete DropDown not visible
autocomplete.c:675: Test failed: AutoComplete DropDown not visible
autocomplete.c:675: Test failed: AutoComplete DropDown not visible
autocomplete.c:675: Test failed: Expected L"http://a0", got (null)
autocomplete.c:675: Test failed: AutoComplete DropDown not visible
autocomplete.c:675: Test failed: Expected L"http://abc.aa.com", got (null)
autocomplete.c:675: Test failed: AutoComplete DropDown not visible
=== w10pro64 (64 bit report) ===
shell32:
autocomplete.c:520: Test failed: Expected 2 expansions, got 1
autocomplete.c:521: Test failed: Expected L"test\\foo\\bar\\", got L"test\\"
autocomplete.c:531: Test failed: Expected 2 expansions, got 1
autocomplete.c:532: Test failed: Expected 2 resets, got 1
autocomplete.c:535: Test failed: Expected 3 expansions, got 2
autocomplete.c:537: Test failed: Expected 3 resets, got 2
autocomplete.c:542: Test failed: Expected 4 expansions, got 3
autocomplete.c:544: Test failed: Expected 4 resets, got 3
autocomplete.c:548: Test failed: Expected 4 expansions, got 3
autocomplete.c:549: Test failed: Expected 5 resets, got 4
autocomplete.c:554: Test failed: Expected 5 expansions, got 4
autocomplete.c:556: Test failed: Expected 6 resets, got 5
autocomplete.c:561: Test failed: Expected 6 expansions, got 5
autocomplete.c:563: Test failed: Expected 7 resets, got 6
autocomplete.c:667: Test failed: Expected L"http://a0", got L"http://a"
autocomplete.c:668: Test failed: AutoComplete DropDown not visible
autocomplete.c:668: Test failed: AutoComplete DropDown not visible
autocomplete.c:668: Test failed: Expected L"http://a0", got (null)
autocomplete.c:668: Test failed: AutoComplete DropDown not visible
autocomplete.c:668: Test failed: Expected L"http://abc.aa.com", got (null)
autocomplete.c:668: Test failed: AutoComplete DropDown not visible
=== w10pro64_he (64 bit report) ===
shell32:
autocomplete.c:554: Test failed: Expected 5 expansions, got 4
autocomplete.c:556: Test failed: Expected 6 resets, got 5
autocomplete.c:561: Test failed: Expected 6 expansions, got 4
autocomplete.c:563: Test failed: Expected 7 resets, got 5
=== w1064v1809 (32 bit report) ===
shell32:
shlfolder.c:4830: Test failed: MKDIR: expected notification type 8, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 8)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
=== w1064 (32 bit report) ===
shell32:
shlfolder.c:4830: Test failed: CREATE: expected notification type 2, got: 4000000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4838: Test failed: Expected PIDL to be NULL
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 2)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
=== w1064v1809 (64 bit report) ===
shell32:
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
=== w1064 (64 bit report) ===
shell32:
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
shlfolder.c:4830: Test failed: RMDIR: expected notification type 10, got: 4000000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4838: Test failed: Expected PIDL to be NULL
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 10)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4830: Test failed: RMDIR: expected notification type 10, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 10)
shlfolder.c:4830: Test failed: CREATE: expected notification type 2, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
=== w1064_2qxl (64 bit report) ===
shell32:
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4830: Test failed: RMDIR: expected notification type 10, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 10)
=== w10pro64_ar (64 bit report) ===
shell32:
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
=== w10pro64_he (64 bit report) ===
shell32:
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4830: Test failed: RMDIR: expected notification type 10, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 10)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
=== w10pro64_ja (64 bit report) ===
shell32:
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 40000)
=== w10pro64_zh_CN (64 bit report) ===
shell32:
shlfolder.c:4830: Test failed: CREATE: expected notification type 2, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 2)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 4000000)
shlfolder.c:4830: Test failed: RMDIR: expected notification type 10, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 10)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
shlfolder.c:4830: Test failed: RMDIR: expected notification type 10, got: 40000
shlfolder.c:4837: Test failed: GetDisplayNameOf failed: 0x80070057
shlfolder.c:4847: Test failed: Didn't expect a WM_USER_NOTIFY message (event: 3)
Dec. 23, 2020
[PATCH 3/3] shell32: IPersistFile::Save(NULL) should use previously stored file name.
by Dmitry Timoshkov
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/shell32/shelllink.c | 14 ++++++++++----
dlls/shell32/tests/shelllink.c | 10 ++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c
index 5b044d4be1..23c5935a7b 100644
--- a/dlls/shell32/shelllink.c
+++ b/dlls/shell32/shelllink.c
@@ -367,7 +367,10 @@ static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFile
TRACE("(%p)->(%s)\n",This,debugstr_w(pszFileName));
if (!pszFileName)
- return E_FAIL;
+ {
+ pszFileName = This->filepath;
+ fRemember = FALSE;
+ }
r = SHCreateStreamOnFileW( pszFileName, STGM_READWRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE, &stm );
if( SUCCEEDED( r ) )
@@ -379,9 +382,12 @@ static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFile
{
StartLinkProcessor( pszFileName );
- /* update file path */
- heap_free(This->filepath);
- This->filepath = strdupW(pszFileName);
+ if (fRemember)
+ {
+ /* update file path */
+ heap_free(This->filepath);
+ This->filepath = strdupW(pszFileName);
+ }
This->bDirty = FALSE;
}
diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c
index 20c48814f1..21e9107fa6 100644
--- a/dlls/shell32/tests/shelllink.c
+++ b/dlls/shell32/tests/shelllink.c
@@ -467,6 +467,16 @@ void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc)
lok(!wcscmp(path, str), "Expected %s, got %s\n", wine_dbgstr_w(path), wine_dbgstr_w(str));
CoTaskMemFree(str);
+ r = IPersistFile_Save(pf, NULL, TRUE);
+ lok(r == S_OK, "save failed (0x%08x)\n", r);
+
+ /* test GetCurFile after ::Save */
+ r = IPersistFile_GetCurFile(pf, &str);
+ lok(r == S_OK, "got 0x%08x\n", r);
+ lok(str != NULL, "Didn't expect NULL\n");
+ lok(!wcscmp(path, str), "Expected %s, got %s\n", wine_dbgstr_w(path), wine_dbgstr_w(str));
+ CoTaskMemFree(str);
+
IPersistFile_Release(pf);
}
--
2.29.2
Dec. 23, 2020
[PATCH 2/3] shell32/tests: Remove workarounds for shell32 < 5.0.
by Dmitry Timoshkov
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/shell32/tests/shelllink.c | 39 +++++++---------------------------
1 file changed, 8 insertions(+), 31 deletions(-)
diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c
index 4f650d801d..20c48814f1 100644
--- a/dlls/shell32/tests/shelllink.c
+++ b/dlls/shell32/tests/shelllink.c
@@ -454,9 +454,7 @@ void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc)
/* test GetCurFile before ::Save */
str = (LPWSTR)0xdeadbeef;
r = IPersistFile_GetCurFile(pf, &str);
- lok(r == S_FALSE ||
- broken(r == S_OK), /* shell32 < 5.0 */
- "got 0x%08x\n", r);
+ lok(r == S_FALSE, "got 0x%08x\n", r);
lok(str == NULL, "got %p\n", str);
r = IPersistFile_Save(pf, path, TRUE);
@@ -465,16 +463,9 @@ void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc)
/* test GetCurFile after ::Save */
r = IPersistFile_GetCurFile(pf, &str);
lok(r == S_OK, "got 0x%08x\n", r);
- lok(str != NULL ||
- broken(str == NULL), /* shell32 < 5.0 */
- "Didn't expect NULL\n");
- if (str)
- {
- lok(!wcscmp(path, str), "Expected %s, got %s\n", wine_dbgstr_w(path), wine_dbgstr_w(str));
- CoTaskMemFree(str);
- }
- else
- win_skip("GetCurFile fails on shell32 < 5.0\n");
+ lok(str != NULL, "Didn't expect NULL\n");
+ lok(!wcscmp(path, str), "Expected %s, got %s\n", wine_dbgstr_w(path), wine_dbgstr_w(str));
+ CoTaskMemFree(str);
IPersistFile_Release(pf);
}
@@ -507,9 +498,7 @@ static void check_lnk_(int line, const WCHAR* path, lnk_desc_t* desc, int todo)
/* test GetCurFile before ::Load */
str = (LPWSTR)0xdeadbeef;
r = IPersistFile_GetCurFile(pf, &str);
- lok(r == S_FALSE ||
- broken(r == S_OK), /* shell32 < 5.0 */
- "got 0x%08x\n", r);
+ lok(r == S_FALSE, "got 0x%08x\n", r);
lok(str == NULL, "got %p\n", str);
r = IPersistFile_Load(pf, path, STGM_READ);
@@ -518,23 +507,11 @@ static void check_lnk_(int line, const WCHAR* path, lnk_desc_t* desc, int todo)
/* test GetCurFile after ::Save */
r = IPersistFile_GetCurFile(pf, &str);
lok(r == S_OK, "got 0x%08x\n", r);
- lok(str != NULL ||
- broken(str == NULL), /* shell32 < 5.0 */
- "Didn't expect NULL\n");
- if (str != NULL)
- {
- lok(!wcscmp(path, str), "Expected %s, got %s\n", wine_dbgstr_w(path), wine_dbgstr_w(str));
- CoTaskMemFree(str);
- }
- else
- win_skip("GetCurFile fails on shell32 < 5.0\n");
+ lok(str != NULL, "Didn't expect NULL\n");
+ lok(!wcscmp(path, str), "Expected %s, got %s\n", wine_dbgstr_w(path), wine_dbgstr_w(str));
+ CoTaskMemFree(str);
IPersistFile_Release(pf);
- if (r != S_OK)
- {
- IShellLinkA_Release(sl);
- return;
- }
if (desc->description)
{
--
2.29.2
Dec. 23, 2020
[PATCH 1/3] shell32/tests: Remove no longer used parameter.
by Dmitry Timoshkov
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/shell32/tests/shell32_test.h | 4 ++--
dlls/shell32/tests/shelllink.c | 23 +++++++++++------------
dlls/shell32/tests/shlexec.c | 4 ++--
3 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/dlls/shell32/tests/shell32_test.h b/dlls/shell32/tests/shell32_test.h
index 42a74fb2d5..89d08e70c0 100644
--- a/dlls/shell32/tests/shell32_test.h
+++ b/dlls/shell32/tests/shell32_test.h
@@ -33,5 +33,5 @@ typedef struct
WORD hotkey;
} lnk_desc_t;
-#define create_lnk(a,b,c) create_lnk_(__LINE__, (a), (b), (c))
-void create_lnk_(int,const WCHAR*,lnk_desc_t*,int);
+#define create_lnk(a,b) create_lnk_(__LINE__, (a), (b))
+void create_lnk_(int,const WCHAR*,lnk_desc_t*);
diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c
index e4f176237f..4f650d801d 100644
--- a/dlls/shell32/tests/shelllink.c
+++ b/dlls/shell32/tests/shelllink.c
@@ -386,7 +386,7 @@ static void test_get_set(void)
#define lok ok_(__FILE__, line)
#define check_lnk(a,b,c) check_lnk_(__LINE__, (a), (b), (c))
-void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc, int save_fails)
+void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc)
{
HRESULT r;
IShellLinkA *sl;
@@ -460,8 +460,7 @@ void create_lnk_(int line, const WCHAR* path, lnk_desc_t* desc, int save_fails)
lok(str == NULL, "got %p\n", str);
r = IPersistFile_Save(pf, path, TRUE);
- todo_wine_if (save_fails)
- lok(r == S_OK, "save failed (0x%08x)\n", r);
+ lok(r == S_OK, "save failed (0x%08x)\n", r);
/* test GetCurFile after ::Save */
r = IPersistFile_GetCurFile(pf, &str);
@@ -628,7 +627,7 @@ static void test_load_save(void)
/* Save an empty .lnk file */
memset(&desc, 0, sizeof(desc));
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
/* It should come back as a bunch of empty strings */
desc.description="";
@@ -648,7 +647,7 @@ static void test_load_save(void)
desc.icon="c:\\nonexistent\\icon\\file";
desc.icon_id=1234;
desc.hotkey=0;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
check_lnk(lnkfile, &desc, 0x0);
r=GetModuleFileNameA(NULL, mypath, sizeof(mypath));
@@ -672,7 +671,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
check_lnk(lnkfile, &desc, 0x0);
/* Test omitting .exe from an absolute path */
@@ -689,7 +688,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
strcat(realpath, ".exe");
check_lnk(lnkfile, &desc, 0x4);
@@ -703,7 +702,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
/* Check that link is created to proper location */
SearchPathA( NULL, desc.path, NULL, MAX_PATH, realpath, NULL);
desc.path=realpath;
@@ -719,7 +718,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
/* Check that link is created to proper location */
SearchPathA( NULL, "rundll32", NULL, MAX_PATH, realpath, NULL);
desc.path=realpath;
@@ -750,7 +749,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
check_lnk(lnkfile, &desc, 0x0);
r = GetShortPathNameA(mydir, mypath, sizeof(mypath));
@@ -770,7 +769,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
desc.path=realpath;
check_lnk(lnkfile, &desc, 0x0);
@@ -800,7 +799,7 @@ static void test_load_save(void)
desc.icon=mypath;
desc.icon_id=0;
desc.hotkey=0x1234;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
desc.path = realpath;
check_lnk(lnkfile, &desc, 0x4);
diff --git a/dlls/shell32/tests/shlexec.c b/dlls/shell32/tests/shlexec.c
index 8ee662321d..2481fb6faa 100644
--- a/dlls/shell32/tests/shlexec.c
+++ b/dlls/shell32/tests/shlexec.c
@@ -2742,7 +2742,7 @@ static void init_test(void)
desc.icon=NULL;
desc.icon_id=0;
desc.hotkey=0;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
sprintf(filename, "%s\\test_shortcut_exe.lnk", tmpdir);
MultiByteToWideChar(CP_ACP, 0, filename, -1, lnkfile, ARRAY_SIZE(lnkfile));
@@ -2756,7 +2756,7 @@ static void init_test(void)
desc.icon=NULL;
desc.icon_id=0;
desc.hotkey=0;
- create_lnk(lnkfile, &desc, 0);
+ create_lnk(lnkfile, &desc);
/* Create a basic association suitable for most tests */
if (!create_test_association(".shlexec"))
--
2.29.2
Dec. 23, 2020
Re: [PATCH] d3dx9: Avoid closing invalid handles.
by Akihiro Sagawa
On Tue, 22 Dec 2020 21:34:34 +0100, Matteo Bruni wrote:
> On Mon, Dec 21, 2020 at 2:44 PM Akihiro Sagawa <sagawa.aki(a)gmail.com> wrote:
> >
> > Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50373
> > Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com>
> > ---
> > dlls/d3dx9_36/util.c | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
>
> Do you know why it fails to map the file in the first place? Maybe it
> simply doesn't exist?
Yes, the file simply doesn't exist.
It fails to load the specific .bmp file by D3DXCreateTextureFromFile and
trys to load non-existent .dds/.png files next.
> FWIW I'd like to eventually replace map_view_of_file() entirely with
> plain file loading, i.e. ReadFile and such. That's something for after
> the code freeze though.
Just curiously, why is plain file loading better?
Could it be that page boundaries?
Dec. 23, 2020
Re: Looking for TestBot help
by Francois Gouget
On Mon, 21 Dec 2020, Francois Gouget wrote:
[...]
> [...]
> > I wonder if it would be better if we do video capture instead? If we
> > don't plan on keeping the video forever, I think a 2 mins video
> > shouldn't be too large. A few megabytes I think, depending on the
> > video format.
>
> Video would obviously be nice but the VMs typically don't have access
> to a graphics card to offload the video compression.
Another point that the video must be able to deal with resolution
changes.
--
Francois Gouget <fgouget(a)free.fr> http://fgouget.free.fr/
Indifference will certainly be the downfall of mankind, but who cares?
Dec. 23, 2020
[PATCH] ntdll: Preserve syscall frame when calling async IO system APC.
by Paul Gofman
The frame can currently be reset from ws2_32.dll async IO callbacks
which are still in the user part and are calling 'syscall' functions.
If the user APC is processed after that during the same call to
server_select(), the call_user_apc_dispatcher() faults.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49782
Signed-off-by: Paul Gofman <pgofman(a)codeweavers.com>
---
dlls/ntdll/unix/server.c | 16 ++++++++++++++++
dlls/ntdll/unix/signal_arm.c | 9 +++++++++
dlls/ntdll/unix/signal_arm64.c | 10 ++++++++++
dlls/ntdll/unix/signal_i386.c | 10 ++++++++++
dlls/ntdll/unix/signal_x86_64.c | 9 +++++++++
dlls/ntdll/unix/unix_private.h | 3 +++
6 files changed, 57 insertions(+)
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
index 87dd4b10b83..a9608abfb73 100644
--- a/dlls/ntdll/unix/server.c
+++ b/dlls/ntdll/unix/server.c
@@ -389,8 +389,24 @@ static void invoke_system_apc( const apc_call_t *call, apc_result_t *result )
{
IO_STATUS_BLOCK *iosb = wine_server_get_ptr( call->async_io.sb );
NTSTATUS (**user)(void *, IO_STATUS_BLOCK *, NTSTATUS) = wine_server_get_ptr( call->async_io.user );
+ void *saved_frame = get_syscall_frame();
+ void *frame;
+
result->type = call->type;
result->async_io.status = (*user)( user, iosb, call->async_io.status );
+
+ if ((frame = get_syscall_frame()) != saved_frame)
+ {
+ /* The frame can be altered by syscalls from ws2_32 async callbacks
+ * which are currently in the user part. */
+ static unsigned int once;
+
+ if (!once++)
+ FIXME( "syscall frame changed in APC function, frame %p, saved_frame %p.\n", frame, saved_frame );
+
+ set_syscall_frame( saved_frame );
+ }
+
if (result->async_io.status != STATUS_PENDING)
result->async_io.total = iosb->Information;
break;
diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c
index e8971d22dbd..487c8501cc7 100644
--- a/dlls/ntdll/unix/signal_arm.c
+++ b/dlls/ntdll/unix/signal_arm.c
@@ -203,6 +203,15 @@ static inline struct arm_thread_data *arm_thread_data(void)
return (struct arm_thread_data *)ntdll_get_thread_data()->cpu_data;
}
+void *get_syscall_frame(void)
+{
+ return arm_thread_data()->syscall_frame;
+}
+
+void set_syscall_frame(void *frame)
+{
+ arm_thread_data()->syscall_frame = frame;
+}
/***********************************************************************
* unwind_builtin_dll
diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c
index 3beef729dca..95042de45e1 100644
--- a/dlls/ntdll/unix/signal_arm64.c
+++ b/dlls/ntdll/unix/signal_arm64.c
@@ -157,6 +157,16 @@ static inline struct arm64_thread_data *arm64_thread_data(void)
return (struct arm64_thread_data *)ntdll_get_thread_data()->cpu_data;
}
+void *get_syscall_frame(void)
+{
+ return arm64_thread_data()->syscall_frame;
+}
+
+void set_syscall_frame(void *frame)
+{
+ arm64_thread_data()->syscall_frame = frame;
+}
+
extern void raise_func_trampoline( EXCEPTION_RECORD *rec, CONTEXT *context, void *dispatcher );
/***********************************************************************
diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c
index c8690b51f2f..ff9d8a12c14 100644
--- a/dlls/ntdll/unix/signal_i386.c
+++ b/dlls/ntdll/unix/signal_i386.c
@@ -495,6 +495,16 @@ static inline struct x86_thread_data *x86_thread_data(void)
return (struct x86_thread_data *)ntdll_get_thread_data()->cpu_data;
}
+void *get_syscall_frame(void)
+{
+ return x86_thread_data()->syscall_frame;
+}
+
+void set_syscall_frame(void *frame)
+{
+ x86_thread_data()->syscall_frame = frame;
+}
+
static inline WORD get_cs(void) { WORD res; __asm__( "movw %%cs,%0" : "=r" (res) ); return res; }
static inline WORD get_ds(void) { WORD res; __asm__( "movw %%ds,%0" : "=r" (res) ); return res; }
static inline WORD get_fs(void) { WORD res; __asm__( "movw %%fs,%0" : "=r" (res) ); return res; }
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index 837cd9ed654..1fd26d5bd76 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -306,6 +306,15 @@ static inline struct amd64_thread_data *amd64_thread_data(void)
return (struct amd64_thread_data *)ntdll_get_thread_data()->cpu_data;
}
+void *get_syscall_frame(void)
+{
+ return amd64_thread_data()->syscall_frame;
+}
+
+void set_syscall_frame(void *frame)
+{
+ amd64_thread_data()->syscall_frame = frame;
+}
/***********************************************************************
* Definitions for Dwarf unwind tables
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 23731f0fdc6..f8f50d0ab27 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -247,6 +247,9 @@ extern void WINAPI DECLSPEC_NORETURN call_user_exception_dispatcher( EXCEPTION_R
NTSTATUS (WINAPI *dispatcher)(EXCEPTION_RECORD*,CONTEXT*) ) DECLSPEC_HIDDEN;
extern void WINAPI DECLSPEC_NORETURN call_raise_user_exception_dispatcher( NTSTATUS (WINAPI *dispatcher)(void) ) DECLSPEC_HIDDEN;
+extern void *get_syscall_frame(void) DECLSPEC_HIDDEN;
+extern void set_syscall_frame(void *frame) DECLSPEC_HIDDEN;
+
#define TICKSPERSEC 10000000
#define SECS_1601_TO_1970 ((369 * 365 + 89) * (ULONGLONG)86400)
--
2.29.2
Dec. 23, 2020
[PATCH] msado15: Set row_set point to NULL on close
by Alistair Leslie-Hughes
Stops a crash when Close then Release is called on a Recordset.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/msado15/recordset.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index 17200d73790..e915922fdc4 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -760,6 +760,7 @@ static void close_recordset( struct recordset *recordset )
ULONG row, col, col_count;
if ( recordset->row_set ) IRowset_Release( recordset->row_set );
+ recordset->row_set = NULL;
if (!recordset->fields) return;
col_count = get_column_count( recordset );
--
2.29.2
Dec. 23, 2020
[PATCH] msado15/tests: Add test for interface ADOConnectionConstruction15
by Alistair Leslie-Hughes
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/msado15/tests/msado15.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index cafb73d64e4..8b08e8af193 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -1024,6 +1024,7 @@ static void test_Connection(void)
IRunnableObject *runtime;
ISupportErrorInfo *errorinfo;
IConnectionPointContainer *pointcontainer;
+ ADOConnectionConstruction15 *construct;
LONG state, timeout;
BSTR str, str2, str3;
ConnectModeEnum mode;
@@ -1044,6 +1045,11 @@ static void test_Connection(void)
ok(hr == S_OK, "Failed to get IConnectionPointContainer interface %08x\n", hr);
IConnectionPointContainer_Release(pointcontainer);
+ hr = _Connection_QueryInterface(connection, &IID_ADOConnectionConstruction15, (void**)&construct);
+ todo_wine ok(hr == S_OK, "Failed to get ADOConnectionConstruction15 interface %08x\n", hr);
+ if (hr == S_OK)
+ ADOConnectionConstruction15_Release(construct);
+
if (0) /* Crashes on windows */
{
hr = _Connection_get_State(connection, NULL);
--
2.29.2
Dec. 23, 2020
Re: [PATCH v2] comctl32/tests: add test for getting listview data during sorting.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=83655
Your paranoid android.
=== w2008s64 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w7u_2qxl (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w7u_adm (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w7u_el (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w8 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w8adm (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w864 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064v1507 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064v1809 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w10pro64 (32 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== wvistau64 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w2008s64 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w864 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064v1507 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064v1809 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w1064_2qxl (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w10pro64 (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w10pro64_ar (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w10pro64_he (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w10pro64_ja (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
=== w10pro64_zh_CN (64 bit report) ===
comctl32:
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got 1
listview.c:3035: Test failed: Expected 0, got -1
Dec. 23, 2020
Dec. 23, 2020
Dec. 23, 2020
Re: [PATCH] d3dx9: Avoid closing invalid handles.
by Matteo Bruni
On Mon, Dec 21, 2020 at 2:44 PM Akihiro Sagawa <sagawa.aki(a)gmail.com> wrote:
>
>
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50373
> Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com>
> ---
> dlls/d3dx9_36/util.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
Do you know why it fails to map the file in the first place? Maybe it
simply doesn't exist?
FWIW I'd like to eventually replace map_view_of_file() entirely with
plain file loading, i.e. ReadFile and such. That's something for after
the code freeze though.
Dec. 22, 2020
Re: [PATCH v2] kernelbase: Ignore SORT_DIGITSASNUMBERS in CompareStringEx()
by Alexandre Julliard
John Zourlios <john.kinigos(a)gmail.com> writes:
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50362
>
> Signed-off-by: John Zourlios <john.kinigos(a)gmail.com>
>
> ---
> dlls/kernelbase/locale.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
This breaks the tests:
tools/runtest -q -P wine -T . -M kernel32.dll -p dlls/kernel32/tests/kernel32_test.exe locale && touch dlls/kernel32/tests/locale.ok
locale.c:1880: Test failed: unexpected error code -559038737
locale.c:1882: Test failed: CompareStringA must fail with invalid flag
make: *** [Makefile:67005: dlls/kernel32/tests/locale.ok] Error 2
--
Alexandre Julliard
julliard(a)winehq.org
Dec. 22, 2020
Re: [PATCH] d3dx9: Avoid closing invalid handles.
by Matteo Bruni
Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com>
Dec. 22, 2020
Re: [PATCH] qcap: Avoid unused variable warning if v4l is absent.
by Zebediah Figura (she/her)
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
Dec. 22, 2020
Re: [PATCH] programs/ping: add IcmpCloseHandle(icmp_file) and fix a memory leak.
by Alexandre Julliard
"Jiangyi Chen" <cjy520lcy(a)163.com> writes:
> @@ -218,6 +218,12 @@ int __cdecl main(int argc, char** argv)
> min, max, avg);
> }
>
> + if(icmp_file != INVALID_HANDLE_VALUE)
> + {
> + IcmpCloseHandle(icmp_file);
> + icmp_file = INVALID_HANDLE_VALUE;
> + }
> + if(send_data) heap_free(send_data);
There's no reason to bother closing handles or freeing data when the
process is exiting anyway.
--
Alexandre Julliard
julliard(a)winehq.org
Dec. 22, 2020
[PATCH] shell32: Return S_OK from IShellLink::SetFlags() stub.
by Dmitry Timoshkov
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/shell32/shelllink.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c
index 5b044d4be1..46d9bc994f 100644
--- a/dlls/shell32/shelllink.c
+++ b/dlls/shell32/shelllink.c
@@ -2297,7 +2297,7 @@ static HRESULT WINAPI
ShellLink_SetFlags( IShellLinkDataList* iface, DWORD dwFlags )
{
FIXME("(%p)->(%u): stub\n", iface, dwFlags);
- return E_NOTIMPL;
+ return S_OK;
}
static const IShellLinkDataListVtbl dlvt =
--
2.29.2
Dec. 22, 2020
[PATCH] qcap: Avoid unused variable warning if v4l is absent.
by Huw Davies
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/qcap/v4l.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/dlls/qcap/v4l.c b/dlls/qcap/v4l.c
index da09b2b26d6..ccc06194b99 100644
--- a/dlls/qcap/v4l.c
+++ b/dlls/qcap/v4l.c
@@ -57,10 +57,9 @@
#include "qcap_private.h"
#include "winternl.h"
-WINE_DEFAULT_DEBUG_CHANNEL(qcap);
-
#ifdef HAVE_LINUX_VIDEODEV2_H
+WINE_DEFAULT_DEBUG_CHANNEL(qcap);
WINE_DECLARE_DEBUG_CHANNEL(winediag);
static typeof(open) *video_open = open;
--
2.23.0
Dec. 22, 2020
[PATCH] msi: Also set "MsiRunningElevated" installer property.
by Dmitry Timoshkov
This property is supposed to be set starting from Windows Installer 4.0 targeting
Windows Vista.
This patch fixes the installer that checks this property in addition to VersionNT
and ALLUSERS.
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/msi/package.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 2483d99e2b..25e22f040a 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -737,6 +737,7 @@ static VOID set_installer_properties(MSIPACKAGE *package)
/* in a wine environment the user is always admin and privileged */
msi_set_property( package->db, L"AdminUser", L"1", -1 );
msi_set_property( package->db, L"Privileged", L"1", -1 );
+ msi_set_property( package->db, L"MsiRunningElevated", L"1", -1 );
/* set the os things */
OSVersion.dwOSVersionInfoSize = sizeof(OSVersion);
@@ -963,6 +964,8 @@ void msi_adjust_privilege_properties( MSIPACKAGE *package )
msi_set_property( package->db, L"ALLUSERS", L"1", -1 );
}
msi_set_property( package->db, L"AdminUser", L"1", -1 );
+ msi_set_property( package->db, L"Privileged", L"1", -1 );
+ msi_set_property( package->db, L"MsiRunningElevated", L"1", -1 );
}
MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db )
--
2.29.2
Dec. 22, 2020
Dec. 22, 2020
[PATCH] dwrite: Add a notice regarding HarfBuzz.
by Nikolay Sivov
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/dwrite/shape.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/dlls/dwrite/shape.c b/dlls/dwrite/shape.c
index 82eb5308da6..be8a69c27c4 100644
--- a/dlls/dwrite/shape.c
+++ b/dlls/dwrite/shape.c
@@ -17,6 +17,11 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ *
+ * Shaping features processing, default features, and lookups handling logic are
+ * derived from HarfBuzz implementation. Consult project documentation for the full
+ * list of its authors.
*/
#define COBJMACROS
--
2.29.2
Dec. 22, 2020
[PATCH 2/2] wbemprox: Flesh out a bit SystemRestore::Enable() implementation.
by Dmitry Timoshkov
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/wbemprox/sysrestore.c | 48 +++++++++++++++++++++++++++++++++++--
dlls/wbemprox/tests/query.c | 2 +-
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/dlls/wbemprox/sysrestore.c b/dlls/wbemprox/sysrestore.c
index b840d220b5..d59077381f 100644
--- a/dlls/wbemprox/sysrestore.c
+++ b/dlls/wbemprox/sysrestore.c
@@ -45,8 +45,52 @@ HRESULT disable_restore( IWbemClassObject *obj, IWbemClassObject *in, IWbemClass
HRESULT enable_restore( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
{
- FIXME("stub\n");
- return S_OK;
+ VARIANT drive, retval;
+ IWbemClassObject *sig, *out_params = NULL;
+ HRESULT hr;
+
+ TRACE("%p, %p\n", in, out);
+
+ hr = IWbemClassObject_Get( in, L"Drive", 0, &drive, NULL, NULL );
+ if (hr != S_OK) return hr;
+
+ hr = create_signature( L"SystemRestore", L"Enable", PARAM_OUT, &sig );
+ if (hr != S_OK)
+ {
+ VariantClear( &drive );
+ return hr;
+ }
+
+ if (out)
+ {
+ hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
+ if (hr != S_OK)
+ {
+ VariantClear( &drive );
+ IWbemClassObject_Release( sig );
+ return hr;
+ }
+ }
+
+ FIXME("%s: stub\n", wine_dbgstr_variant(&drive));
+
+ VariantClear( &drive );
+ IWbemClassObject_Release( sig );
+
+ if (out_params)
+ {
+ set_variant( VT_UI4, ERROR_SUCCESS, NULL, &retval );
+ hr = IWbemClassObject_Put( out_params, L"ReturnValue", 0, &retval, CIM_UINT32 );
+ }
+
+ if (hr == S_OK && out)
+ {
+ *out = out_params;
+ IWbemClassObject_AddRef( out_params );
+ }
+ if (out_params) IWbemClassObject_Release( out_params );
+
+ return hr;
}
HRESULT get_last_restore_status( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c
index 1c7a615dd4..67c0b218ce 100644
--- a/dlls/wbemprox/tests/query.c
+++ b/dlls/wbemprox/tests/query.c
@@ -1805,7 +1805,7 @@ static void test_SystemRestore( IWbemServices *services )
out = NULL;
hr = IWbemServices_ExecMethod( services, class, method, 0, NULL, in, &out, NULL );
ok( hr == S_OK || hr == WBEM_E_ACCESS_DENIED, "failed to execute method %08x\n", hr );
- if (hr == S_OK && out)
+ if (hr == S_OK)
{
VariantInit( &var );
hr = IWbemClassObject_Get( out, L"ReturnValue", 0, &var, NULL, NULL );
--
2.29.2
Dec. 22, 2020
[PATCH 1/2] wbemprox: Add class SystemRestore stub implementation.
by Dmitry Timoshkov
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50033
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/wbemprox/Makefile.in | 1 +
dlls/wbemprox/builtin.c | 38 ++++++++++++++++++++
dlls/wbemprox/sysrestore.c | 62 ++++++++++++++++++++++++++++++++
dlls/wbemprox/tests/query.c | 7 ++--
dlls/wbemprox/wbemprox_private.h | 5 +++
5 files changed, 111 insertions(+), 2 deletions(-)
create mode 100644 dlls/wbemprox/sysrestore.c
diff --git a/dlls/wbemprox/Makefile.in b/dlls/wbemprox/Makefile.in
index a26c833878..ed2710f885 100644
--- a/dlls/wbemprox/Makefile.in
+++ b/dlls/wbemprox/Makefile.in
@@ -14,6 +14,7 @@ C_SRCS = \
security.c \
service.c \
services.c \
+ sysrestore.c \
table.c \
wbemlocator.c
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
index 9bd58ca77e..1924598bbe 100644
--- a/dlls/wbemprox/builtin.c
+++ b/dlls/wbemprox/builtin.c
@@ -406,6 +406,20 @@ static const struct column col_systemsecurity[] =
{ L"GetSD", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
{ L"SetSD", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
};
+static const struct column col_sysrestore[] =
+{
+ { L"CreationTime", CIM_STRING },
+ { L"Description", CIM_STRING },
+ { L"EventType", CIM_UINT32 },
+ { L"RestorePointType", CIM_UINT32 },
+ { L"SequenceNumber", CIM_UINT32 },
+ /* methods */
+ { L"CreateRestorePoint", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
+ { L"Disable", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
+ { L"Enable", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
+ { L"GetLastRestoreStatus", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
+ { L"Restore", CIM_FLAG_ARRAY|COL_FLAG_METHOD },
+};
static const struct column col_videocontroller[] =
{
{ L"AdapterCompatibility", CIM_STRING },
@@ -783,6 +797,19 @@ struct record_stdregprov
class_method *enumvalues;
class_method *getstringvalue;
};
+struct record_sysrestore
+{
+ const WCHAR *creation_time;
+ const WCHAR *description;
+ UINT32 event_type;
+ UINT32 restore_point_type;
+ UINT32 seuence_number;
+ class_method *create_restore_point;
+ class_method *disable_restore;
+ class_method *enable_restore;
+ class_method *get_last_restore_status;
+ class_method *restore;
+};
struct record_systemsecurity
{
class_method *getsd;
@@ -865,6 +892,10 @@ static const struct record_param data_param[] =
{ L"StdRegProv", L"GetStringValue", 1, L"sValueName", CIM_STRING },
{ L"StdRegProv", L"GetStringValue", -1, L"ReturnValue", CIM_UINT32 },
{ L"StdRegProv", L"GetStringValue", -1, L"sValue", CIM_STRING },
+ { L"SystemRestore", L"Disable", 1, L"Drive", CIM_STRING },
+ { L"SystemRestore", L"Disable", -1, L"ReturnValue", CIM_UINT32 },
+ { L"SystemRestore", L"Enable", 1, L"Drive", CIM_STRING },
+ { L"SystemRestore", L"Enable", -1, L"ReturnValue", CIM_UINT32 },
{ L"Win32_Process", L"GetOwner", -1, L"ReturnValue", CIM_UINT32 },
{ L"Win32_Process", L"GetOwner", -1, L"User", CIM_STRING },
{ L"Win32_Process", L"GetOwner", -1, L"Domain", CIM_STRING },
@@ -895,6 +926,12 @@ static const struct record_stdregprov data_stdregprov[] =
{
{ reg_create_key, reg_enum_key, reg_enum_values, reg_get_stringvalue }
};
+
+static const struct record_sysrestore data_sysrestore[] =
+{
+ { NULL, NULL, 0, 0, 0, create_restore_point, disable_restore, enable_restore, get_last_restore_status, restore }
+};
+
static UINT16 systemenclosure_chassistypes[] =
{
1,
@@ -3981,6 +4018,7 @@ static struct table builtin_classes[] =
{ L"CIM_LogicalDisk", C(col_logicaldisk), 0, 0, NULL, fill_logicaldisk },
{ L"CIM_Processor", C(col_processor), 0, 0, NULL, fill_processor },
{ L"StdRegProv", C(col_stdregprov), D(data_stdregprov) },
+ { L"SystemRestore", C(col_sysrestore), D(data_sysrestore) },
{ L"Win32_BIOS", C(col_bios), 0, 0, NULL, fill_bios },
{ L"Win32_BaseBoard", C(col_baseboard), 0, 0, NULL, fill_baseboard },
{ L"Win32_CDROMDrive", C(col_cdromdrive), 0, 0, NULL, fill_cdromdrive },
diff --git a/dlls/wbemprox/sysrestore.c b/dlls/wbemprox/sysrestore.c
new file mode 100644
index 0000000000..b840d220b5
--- /dev/null
+++ b/dlls/wbemprox/sysrestore.c
@@ -0,0 +1,62 @@
+/*
+ * SystemRestore implementation
+ *
+ * Copyright 2020 Dmitry Timoshkov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wbemcli.h"
+
+#include "wine/debug.h"
+#include "wbemprox_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
+
+HRESULT create_restore_point( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
+{
+ FIXME("stub\n");
+ return S_OK;
+}
+
+HRESULT disable_restore( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
+{
+ FIXME("stub\n");
+ return S_OK;
+}
+
+HRESULT enable_restore( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
+{
+ FIXME("stub\n");
+ return S_OK;
+}
+
+HRESULT get_last_restore_status( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
+{
+ FIXME("stub\n");
+ return E_NOTIMPL;
+}
+
+HRESULT restore( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
+{
+ FIXME("stub\n");
+ return S_OK;
+}
diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c
index 37b6fb4e8d..1c7a615dd4 100644
--- a/dlls/wbemprox/tests/query.c
+++ b/dlls/wbemprox/tests/query.c
@@ -1772,16 +1772,19 @@ static void test_SystemRestore( IWbemServices *services )
hr = IWbemServices_GetObject( services, class, 0, NULL, &service, NULL );
if (hr != S_OK)
{
- skip( "SystemRestore not available\n" );
+ win_skip( "SystemRestore not available\n" );
SysFreeString( class );
return;
}
check_property( service, L"CreationTime", VT_NULL, CIM_STRING );
check_property( service, L"Description", VT_NULL, CIM_STRING );
+ if (0) /* FIXME */
+ {
check_property( service, L"EventType", VT_NULL, CIM_UINT32 );
check_property( service, L"RestorePointType", VT_NULL, CIM_UINT32 );
check_property( service, L"SequenceNumber", VT_NULL, CIM_UINT32 );
+ }
method = SysAllocString( L"Enable" );
sig_in = NULL;
@@ -1802,7 +1805,7 @@ static void test_SystemRestore( IWbemServices *services )
out = NULL;
hr = IWbemServices_ExecMethod( services, class, method, 0, NULL, in, &out, NULL );
ok( hr == S_OK || hr == WBEM_E_ACCESS_DENIED, "failed to execute method %08x\n", hr );
- if (hr == S_OK)
+ if (hr == S_OK && out)
{
VariantInit( &var );
hr = IWbemClassObject_Get( out, L"ReturnValue", 0, &var, NULL, NULL );
diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h
index 3064925764..ff9a7f6ff8 100644
--- a/dlls/wbemprox/wbemprox_private.h
+++ b/dlls/wbemprox/wbemprox_private.h
@@ -253,6 +253,11 @@ HRESULT service_start_service(IWbemClassObject *, IWbemClassObject *, IWbemClass
HRESULT service_stop_service(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
HRESULT security_get_sd(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
HRESULT security_set_sd(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
+HRESULT create_restore_point(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
+HRESULT disable_restore(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
+HRESULT enable_restore(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
+HRESULT get_last_restore_status(IWbemClassObject *, IWbemClassObject *in, IWbemClassObject **) DECLSPEC_HIDDEN;
+HRESULT restore(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
static inline WCHAR *heap_strdupW( const WCHAR *src )
{
--
2.29.2
Dec. 22, 2020
Re: [PATCH] comctl32/tests: add test for getting listview data during sorting.
by Nikolay Sivov
The patch can't work due to infinite loops, but with that fixed it gives
me failures on Windows, and no failures on Wine. So I'm not sure what
it's supposed to demonstrate.
Dec. 22, 2020
Re: [PATCH] comctl32/tests: add test for getting listview data during sorting.
by Marvin
Hi,
While running your changed tests, I think I found new failures.
Being a bot and all I'm not very good at pattern recognition, so I might be
wrong, but could you please double-check?
Full results can be found at:
https://testbot.winehq.org/JobDetails.pl?Key=83637
Your paranoid android.
=== w2008s64 (32 bit report) ===
comctl32:
listview: Timeout
=== w7u_2qxl (32 bit report) ===
comctl32:
listview: Timeout
=== w7u_adm (32 bit report) ===
comctl32:
listview: Timeout
=== w7u_el (32 bit report) ===
comctl32:
listview: Timeout
=== w8 (testbot log) ===
The task timed out
=== w8adm (testbot log) ===
The task timed out
=== w864 (32 bit report) ===
comctl32:
listview: Timeout
=== w1064v1507 (32 bit report) ===
comctl32:
listview: Timeout
=== w1064v1809 (32 bit report) ===
comctl32:
listview: Timeout
=== w1064 (32 bit report) ===
comctl32:
listview: Timeout
=== w10pro64 (32 bit report) ===
comctl32:
listview: Timeout
=== wvistau64 (64 bit report) ===
comctl32:
listview: Timeout
=== w2008s64 (64 bit report) ===
comctl32:
listview: Timeout
=== w864 (64 bit report) ===
comctl32:
listview: Timeout
=== w1064v1507 (64 bit report) ===
comctl32:
listview: Timeout
=== w1064v1809 (64 bit report) ===
comctl32:
listview: Timeout
=== w1064 (64 bit report) ===
comctl32:
listview: Timeout
=== w1064_2qxl (64 bit report) ===
comctl32:
listview: Timeout
=== w10pro64 (64 bit report) ===
comctl32:
listview: Timeout
=== w10pro64_ar (64 bit report) ===
comctl32:
listview: Timeout
=== w10pro64_he (64 bit report) ===
comctl32:
listview: Timeout
=== w10pro64_ja (64 bit report) ===
comctl32:
listview: Timeout
=== w10pro64_zh_CN (64 bit report) ===
comctl32:
listview: Timeout
Dec. 22, 2020
Dec. 22, 2020
[PATCH vkd3d v4 2/4] vkd3d-shader: Implement basic support for #if and #endif.
by Zebediah Figura
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
v4: Tweak preproc_parse_integer() a bit.
include/private/vkd3d_memory.h | 11 +++
libs/vkd3d-shader/preproc.h | 17 ++++
libs/vkd3d-shader/preproc.l | 106 +++++++++++++++++++++--
libs/vkd3d-shader/preproc.y | 102 +++++++++++++++++++++-
libs/vkd3d-shader/vkd3d_shader_main.c | 24 +++++
libs/vkd3d-shader/vkd3d_shader_private.h | 6 ++
tests/hlsl_d3d12.c | 2 +-
7 files changed, 258 insertions(+), 10 deletions(-)
diff --git a/include/private/vkd3d_memory.h b/include/private/vkd3d_memory.h
index df93abf5..bd56d30a 100644
--- a/include/private/vkd3d_memory.h
+++ b/include/private/vkd3d_memory.h
@@ -22,6 +22,7 @@
#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
+#include <string.h>
#include "vkd3d_debug.h"
@@ -54,6 +55,16 @@ static inline void vkd3d_free(void *ptr)
free(ptr);
}
+static inline char *vkd3d_strdup(const char *string)
+{
+ size_t len = strlen(string) + 1;
+ char *ptr;
+
+ if ((ptr = vkd3d_malloc(len)))
+ memcpy(ptr, string, len);
+ return ptr;
+}
+
bool vkd3d_array_reserve(void **elements, size_t *capacity,
size_t element_count, size_t element_size) DECLSPEC_HIDDEN;
diff --git a/libs/vkd3d-shader/preproc.h b/libs/vkd3d-shader/preproc.h
index bd9dfdd3..0f494fcd 100644
--- a/libs/vkd3d-shader/preproc.h
+++ b/libs/vkd3d-shader/preproc.h
@@ -23,6 +23,12 @@
#include "vkd3d_shader_private.h"
+struct preproc_if_state
+{
+ /* Are we currently in a "true" block? */
+ bool current_true;
+};
+
struct preproc_ctx
{
void *scanner;
@@ -31,7 +37,18 @@ struct preproc_ctx
struct vkd3d_string_buffer buffer;
struct vkd3d_shader_location location;
+ struct preproc_if_state *if_stack;
+ size_t if_count, if_stack_size;
+
+ int current_directive;
+
+ bool last_was_newline;
+ bool last_was_eof;
+
bool error;
};
+void preproc_warning(struct preproc_ctx *ctx, const struct vkd3d_shader_location *loc,
+ enum vkd3d_shader_error error, const char *format, ...) VKD3D_PRINTF_FUNC(4, 5) DECLSPEC_HIDDEN;
+
#endif
diff --git a/libs/vkd3d-shader/preproc.l b/libs/vkd3d-shader/preproc.l
index b406af09..c60970cd 100644
--- a/libs/vkd3d-shader/preproc.l
+++ b/libs/vkd3d-shader/preproc.l
@@ -50,6 +50,7 @@ static void update_location(struct preproc_ctx *ctx);
%s C_COMMENT
%s CXX_COMMENT
+NEWLINE \r?\n
WS [ \t]
IDENTIFIER [A-Za-z_][A-Za-z0-9_]*
@@ -57,10 +58,10 @@ IDENTIFIER [A-Za-z_][A-Za-z0-9_]*
<INITIAL>"//" {yy_push_state(CXX_COMMENT, yyscanner);}
<INITIAL>"/*" {yy_push_state(C_COMMENT, yyscanner);}
-<CXX_COMMENT>\\\r?\n {}
+<CXX_COMMENT>\\{NEWLINE} {}
<CXX_COMMENT>\n {
yy_pop_state(yyscanner);
- return T_TEXT;
+ return T_NEWLINE;
}
<C_COMMENT>"*/" {yy_pop_state(yyscanner);}
<C_COMMENT,CXX_COMMENT><<EOF>> {yy_pop_state(yyscanner);}
@@ -68,13 +69,15 @@ IDENTIFIER [A-Za-z_][A-Za-z0-9_]*
<INITIAL>{IDENTIFIER} {return T_TEXT;}
+ /* We have no use for floats, but shouldn't parse them as integers. */
+
<INITIAL>[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;}
<INITIAL>[0-9]+\.([eE][+-]?[0-9]+)?[hHfF]? {return T_TEXT;}
<INITIAL>[0-9]+([eE][+-]?[0-9]+)?[hHfF] {return T_TEXT;}
<INITIAL>[0-9]+[eE][+-]?[0-9]+ {return T_TEXT;}
-<INITIAL>0[xX][0-9a-fA-f]+[ul]{0,2} {return T_TEXT;}
-<INITIAL>0[0-7]*[ul]{0,2} {return T_TEXT;}
-<INITIAL>[1-9][0-9]*[ul]{0,2} {return T_TEXT;}
+<INITIAL>0[xX][0-9a-fA-f]+[ul]{0,2} {return T_INTEGER;}
+<INITIAL>0[0-7]*[ul]{0,2} {return T_INTEGER;}
+<INITIAL>[1-9][0-9]*[ul]{0,2} {return T_INTEGER;}
<INITIAL>"&&" {return T_TEXT;}
<INITIAL>"||" {return T_TEXT;}
@@ -87,6 +90,29 @@ IDENTIFIER [A-Za-z_][A-Za-z0-9_]*
/* C strings (including escaped quotes). */
<INITIAL>\"([^"\\]|\\.)*\" {return T_TEXT;}
+<INITIAL>#{WS}*{IDENTIFIER} {
+ struct preproc_ctx *ctx = yyget_extra(yyscanner);
+ const char *p;
+
+ if (!ctx->last_was_newline)
+ return T_TEXT;
+
+ for (p = yytext + 1; strchr(" \t", *p); ++p)
+ ;
+
+ if (!strcmp(p, "endif"))
+ return T_ENDIF;
+ if (!strcmp(p, "if"))
+ return T_IF;
+
+ preproc_warning(ctx, yyget_lloc(yyscanner), VKD3D_SHADER_WARNING_PP_UNKNOWN_DIRECTIVE,
+ "Ignoring unknown directive \"%s\".", yytext);
+ return T_TEXT;
+ }
+
+<INITIAL>\\{NEWLINE} {}
+<INITIAL>{NEWLINE} {return T_NEWLINE;}
+
<INITIAL>{WS}+ {}
<INITIAL>. {return T_TEXT;}
@@ -113,6 +139,27 @@ static void update_location(struct preproc_ctx *ctx)
}
}
+static bool preproc_is_writing(struct preproc_ctx *ctx)
+{
+ if (!ctx->if_count)
+ return true;
+ return ctx->if_stack[ctx->if_count - 1].current_true;
+}
+
+static int return_token(int token, YYSTYPE *lval, const char *text)
+{
+ switch (token)
+ {
+ case T_INTEGER:
+ case T_TEXT:
+ if (!(lval->string = vkd3d_strdup(text)))
+ return 0;
+ break;
+ }
+
+ return token;
+}
+
int yylex(YYSTYPE *lval, YYLTYPE *lloc, yyscan_t scanner)
{
struct preproc_ctx *ctx = yyget_extra(scanner);
@@ -122,11 +169,44 @@ int yylex(YYSTYPE *lval, YYLTYPE *lloc, yyscan_t scanner)
const char *text;
int token;
- if (!(token = preproc_lexer_lex(lval, lloc, scanner)))
+ if (ctx->last_was_eof)
return 0;
- text = yyget_text(scanner);
- TRACE("Parsing token %d, line %d, string %s.\n", token, lloc->line, debugstr_a(text));
+ if (!(token = preproc_lexer_lex(lval, lloc, scanner)))
+ {
+ ctx->last_was_eof = true;
+ token = T_NEWLINE;
+ text = "\n";
+ }
+ else
+ {
+ text = yyget_text(scanner);
+ }
+
+ if (ctx->last_was_newline)
+ {
+ switch (token)
+ {
+ case T_ENDIF:
+ case T_IF:
+ ctx->current_directive = token;
+ break;
+
+ default:
+ ctx->current_directive = 0;
+ }
+ }
+
+ ctx->last_was_newline = (token == T_NEWLINE);
+
+ TRACE("Parsing token %d, line %d, in directive %d, string %s.\n",
+ token, lloc->line, ctx->current_directive, debugstr_a(text));
+
+ if (!ctx->current_directive && !preproc_is_writing(ctx))
+ continue;
+
+ if (ctx->current_directive)
+ return return_token(token, lval, text);
vkd3d_string_buffer_printf(&ctx->buffer, "%s ", text);
}
@@ -147,12 +227,22 @@ int preproc_lexer_parse(const struct vkd3d_shader_compile_info *compile_info,
yylex_init_extra(&ctx, &ctx.scanner);
top_buffer = yy_scan_bytes(compile_info->source.code, compile_info->source.size, ctx.scanner);
+ ctx.last_was_newline = true;
preproc_yyparse(ctx.scanner, &ctx);
yy_delete_buffer(top_buffer, ctx.scanner);
yylex_destroy(ctx.scanner);
+ if (ctx.if_count)
+ {
+ const struct vkd3d_shader_location loc = {.source_name = ctx.location.source_name};
+
+ preproc_warning(&ctx, &loc, VKD3D_SHADER_WARNING_PP_UNTERMINATED_IF, "Unterminated #if block.");
+ }
+
+ vkd3d_free(ctx.if_stack);
+
if (ctx.error)
{
WARN("Failed to preprocess.\n");
diff --git a/libs/vkd3d-shader/preproc.y b/libs/vkd3d-shader/preproc.y
index 16b84ea9..3dc7e7cb 100644
--- a/libs/vkd3d-shader/preproc.y
+++ b/libs/vkd3d-shader/preproc.y
@@ -51,11 +51,71 @@ static void preproc_error(struct preproc_ctx *ctx, const struct vkd3d_shader_loc
ctx->error = true;
}
+void preproc_warning(struct preproc_ctx *ctx, const struct vkd3d_shader_location *loc,
+ enum vkd3d_shader_error error, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ vkd3d_shader_vwarning(ctx->message_context, loc, error, format, args);
+ va_end(args);
+}
+
static void yyerror(const YYLTYPE *loc, void *scanner, struct preproc_ctx *ctx, const char *string)
{
preproc_error(ctx, loc, VKD3D_SHADER_ERROR_PP_INVALID_SYNTAX, "%s", string);
}
+static bool preproc_was_writing(struct preproc_ctx *ctx)
+{
+ if (ctx->if_count < 2)
+ return true;
+ return ctx->if_stack[ctx->if_count - 2].current_true;
+}
+
+static bool preproc_push_if(struct preproc_ctx *ctx, bool condition)
+{
+ struct preproc_if_state *state;
+
+ if (!vkd3d_array_reserve((void **)&ctx->if_stack, &ctx->if_stack_size, ctx->if_count + 1, sizeof(*ctx->if_stack)))
+ return false;
+ state = &ctx->if_stack[ctx->if_count++];
+ state->current_true = condition && preproc_was_writing(ctx);
+ return true;
+}
+
+static int char_to_int(char c)
+{
+ if ('0' <= c && c <= '9')
+ return c - '0';
+ if ('A' <= c && c <= 'F')
+ return c - 'A' + 10;
+ if ('a' <= c && c <= 'f')
+ return c - 'a' + 10;
+ return -1;
+}
+
+static uint32_t preproc_parse_integer(const char *s)
+{
+ uint32_t base = 10, ret = 0;
+ int digit;
+
+ if (*s == '0')
+ {
+ base = 8;
+ ++s;
+ if (*s == 'x' || *s == 'X')
+ {
+ base = 16;
+ ++s;
+ }
+ }
+
+ while ((digit = char_to_int(*s++)) >= 0)
+ ret = ret * base + (uint32_t)digit;
+ return ret;
+}
+
}
%define api.prefix {preproc_yy}
@@ -67,9 +127,49 @@ static void yyerror(const YYLTYPE *loc, void *scanner, struct preproc_ctx *ctx,
%parse-param {void *scanner}
%parse-param {struct preproc_ctx *ctx}
-%token T_TEXT
+%union
+{
+ char *string;
+ uint32_t integer;
+}
+
+%token <string> T_INTEGER
+%token <string> T_TEXT
+
+%token T_NEWLINE
+
+%token T_ENDIF "#endif"
+%token T_IF "#if"
+
+%type <integer> expr
%%
shader_text
: %empty
+ | shader_text directive
+ {
+ vkd3d_string_buffer_printf(&ctx->buffer, "\n");
+ }
+
+directive
+ : T_IF expr T_NEWLINE
+ {
+ if (!preproc_push_if(ctx, !!$2))
+ YYABORT;
+ }
+ | T_ENDIF T_NEWLINE
+ {
+ if (ctx->if_count)
+ --ctx->if_count;
+ else
+ preproc_warning(ctx, &@$, VKD3D_SHADER_WARNING_PP_INVALID_DIRECTIVE,
+ "Ignoring #endif without prior #if.");
+ }
+
+expr
+ : T_INTEGER
+ {
+ $$ = preproc_parse_integer($1);
+ vkd3d_free($1);
+ }
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 173ff170..df3b1a57 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -144,6 +144,30 @@ bool vkd3d_shader_message_context_copy_messages(struct vkd3d_shader_message_cont
return true;
}
+void vkd3d_shader_vwarning(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location,
+ enum vkd3d_shader_error error, const char *format, va_list args)
+{
+ if (context->log_level < VKD3D_SHADER_LOG_WARNING)
+ return;
+
+ if (location)
+ {
+ const char *source_name = location->source_name ? location->source_name : "<anonymous>";
+
+ if (location->line)
+ vkd3d_string_buffer_printf(&context->messages, "%s:%u:%u: W%04u: ",
+ source_name, location->line, location->column, error);
+ else
+ vkd3d_string_buffer_printf(&context->messages, "%s: W%04u: ", source_name, error);
+ }
+ else
+ {
+ vkd3d_string_buffer_printf(&context->messages, "W%04u: ", error);
+ }
+ vkd3d_string_buffer_vprintf(&context->messages, format, args);
+ vkd3d_string_buffer_printf(&context->messages, "\n");
+}
+
void vkd3d_shader_verror(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location,
enum vkd3d_shader_error error, const char *format, va_list args)
{
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 882a8060..b89d20e2 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -81,6 +81,10 @@ enum vkd3d_shader_error
VKD3D_SHADER_ERROR_RS_MIXED_DESCRIPTOR_RANGE_TYPES = 3004,
VKD3D_SHADER_ERROR_PP_INVALID_SYNTAX = 4000,
+
+ VKD3D_SHADER_WARNING_PP_INVALID_DIRECTIVE = 4301,
+ VKD3D_SHADER_WARNING_PP_UNKNOWN_DIRECTIVE = 4303,
+ VKD3D_SHADER_WARNING_PP_UNTERMINATED_IF = 4305,
};
enum VKD3D_SHADER_INSTRUCTION_HANDLER
@@ -871,6 +875,8 @@ void vkd3d_shader_error(struct vkd3d_shader_message_context *context, const stru
enum vkd3d_shader_error error, const char *format, ...) VKD3D_PRINTF_FUNC(4, 5) DECLSPEC_HIDDEN;
void vkd3d_shader_verror(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location,
enum vkd3d_shader_error error, const char *format, va_list args) DECLSPEC_HIDDEN;
+void vkd3d_shader_vwarning(struct vkd3d_shader_message_context *context, const struct vkd3d_shader_location *location,
+ enum vkd3d_shader_error error, const char *format, va_list args) DECLSPEC_HIDDEN;
int shader_extract_from_dxbc(const void *dxbc, size_t dxbc_length,
struct vkd3d_shader_message_context *message_context, const char *source_name,
diff --git a/tests/hlsl_d3d12.c b/tests/hlsl_d3d12.c
index 61324fa9..77a7ea1a 100644
--- a/tests/hlsl_d3d12.c
+++ b/tests/hlsl_d3d12.c
@@ -414,7 +414,7 @@ static void test_preprocess(void)
hr = D3DPreprocess(test_include_top, strlen(test_include_top), NULL, NULL, &test_include_fail, &blob, &errors);
todo ok(hr == E_FAIL, "Got hr %#x.\n", hr);
todo ok(blob == (ID3D10Blob *)0xdeadbeef, "Expected no compiled shader blob.\n");
- todo ok(!!errors, "Expected non-NULL error blob.\n");
+ ok(!!errors, "Expected non-NULL error blob.\n");
if (errors)
{
if (vkd3d_test_state.debug_level)
--
2.29.2
Dec. 21, 2020
Re: [PATCH vkd3d v3 2/4] vkd3d-shader: Implement basic support for #if and #endif.
by Zebediah Figura (she/her)
On 12/21/20 3:11 AM, Matteo Bruni wrote:
> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com>
> ---
> Apparently I never got the email so I'm adding a couple of comments
> right here...
>
> preproc_was_writing() manages to trigger my review alarms every
> time. The function is definitely correct though, and clearly so after
> patch 4/4. So nothing to do but ignore the alarm.
Yeah, I know :-/
I'm not sure there's a better option though, besides crawling the whole
stack in preproc_is_writing(). Granted, that may not be awful for
performance (who's going to stack that many #ifs?)
>
> +static uint32_t preproc_parse_integer(const char *s)
> +{
> + uint32_t base = 10, ret = 0;
> + int digit;
> +
> + if (s[0] == '0')
> + {
> + base = 8;
>
> I'd "++s;" here
>
> + if (s[1] == 'x' || s[1] == 'X')
> + {
> + base = 16;
> + s += 2;
>
> And then replace this one with another "++s;" (fixing up the if
> condition above to now check *s).
>
> + }
> + }
> +
> + while ((digit = char_to_int(*s++)) >= 0)
> + ret = ret * base + (uint32_t)digit;
> + return ret;
> +}
>
> AFAICS this should still work. It's all just a nitpick, it doesn't
> really matter.
>
Sounds reasonable; I'll adjust that.
Dec. 21, 2020
[PATCH] conhost: Fix copy-paste typos in selection coordinates.
by Jacek Caban
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50052
Signed-off-by: Jacek Caban <jacek(a)codeweavers.com>
---
programs/conhost/window.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Dec. 21, 2020
[PATCH] amstream/tests: Define NONAMELESSUNION.
by Zebediah Figura
Old versions of gcc allow nameless unions, but can't parse them in designated initializers.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50378
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/amstream/tests/amstream.c | 255 +++++++++++++++++----------------
1 file changed, 128 insertions(+), 127 deletions(-)
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c
index 279b040339c..648d5ee93c3 100644
--- a/dlls/amstream/tests/amstream.c
+++ b/dlls/amstream/tests/amstream.c
@@ -19,6 +19,7 @@
*/
#define COBJMACROS
+#define NONAMELESSUNION
#include "wine/test.h"
#include "dshow.h"
@@ -79,7 +80,7 @@ static const VIDEOINFO rgb565_video_info =
.bmiHeader.biPlanes = 1,
.bmiHeader.biBitCount = 16,
.bmiHeader.biCompression = BI_BITFIELDS,
- .dwBitMasks = {0xf800, 0x07e0, 0x001f},
+ .u.dwBitMasks = {0xf800, 0x07e0, 0x001f},
};
static const VIDEOINFO rgb24_video_info =
@@ -158,7 +159,7 @@ static const DDSURFACEDESC rgb8_format =
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED8,
- .ddpfPixelFormat.dwRGBBitCount = 8,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 8,
};
static const DDSURFACEDESC rgb555_format =
@@ -167,10 +168,10 @@ static const DDSURFACEDESC rgb555_format =
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB,
- .ddpfPixelFormat.dwRGBBitCount = 16,
- .ddpfPixelFormat.dwRBitMask = 0x7c00,
- .ddpfPixelFormat.dwGBitMask = 0x03e0,
- .ddpfPixelFormat.dwBBitMask = 0x001f,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 16,
+ .ddpfPixelFormat.u2.dwRBitMask = 0x7c00,
+ .ddpfPixelFormat.u3.dwGBitMask = 0x03e0,
+ .ddpfPixelFormat.u4.dwBBitMask = 0x001f,
};
static const DDSURFACEDESC rgb565_format =
@@ -179,10 +180,10 @@ static const DDSURFACEDESC rgb565_format =
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB,
- .ddpfPixelFormat.dwRGBBitCount = 16,
- .ddpfPixelFormat.dwRBitMask = 0xf800,
- .ddpfPixelFormat.dwGBitMask = 0x07e0,
- .ddpfPixelFormat.dwBBitMask = 0x001f,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 16,
+ .ddpfPixelFormat.u2.dwRBitMask = 0xf800,
+ .ddpfPixelFormat.u3.dwGBitMask = 0x07e0,
+ .ddpfPixelFormat.u4.dwBBitMask = 0x001f,
};
static const DDSURFACEDESC rgb24_format =
@@ -191,10 +192,10 @@ static const DDSURFACEDESC rgb24_format =
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB,
- .ddpfPixelFormat.dwRGBBitCount = 24,
- .ddpfPixelFormat.dwRBitMask = 0xff0000,
- .ddpfPixelFormat.dwGBitMask = 0x00ff00,
- .ddpfPixelFormat.dwBBitMask = 0x0000ff,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 24,
+ .ddpfPixelFormat.u2.dwRBitMask = 0xff0000,
+ .ddpfPixelFormat.u3.dwGBitMask = 0x00ff00,
+ .ddpfPixelFormat.u4.dwBBitMask = 0x0000ff,
};
static const DDSURFACEDESC rgb32_format =
@@ -203,10 +204,10 @@ static const DDSURFACEDESC rgb32_format =
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB,
- .ddpfPixelFormat.dwRGBBitCount = 32,
- .ddpfPixelFormat.dwRBitMask = 0xff0000,
- .ddpfPixelFormat.dwGBitMask = 0x00ff00,
- .ddpfPixelFormat.dwBBitMask = 0x0000ff,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 32,
+ .ddpfPixelFormat.u2.dwRBitMask = 0xff0000,
+ .ddpfPixelFormat.u3.dwGBitMask = 0x00ff00,
+ .ddpfPixelFormat.u4.dwBBitMask = 0x0000ff,
};
static const DDSURFACEDESC argb32_format =
@@ -215,11 +216,11 @@ static const DDSURFACEDESC argb32_format =
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS,
- .ddpfPixelFormat.dwRGBBitCount = 32,
- .ddpfPixelFormat.dwRBitMask = 0xff0000,
- .ddpfPixelFormat.dwGBitMask = 0x00ff00,
- .ddpfPixelFormat.dwBBitMask = 0x0000ff,
- .ddpfPixelFormat.dwRGBAlphaBitMask = 0xff000000,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 32,
+ .ddpfPixelFormat.u2.dwRBitMask = 0xff0000,
+ .ddpfPixelFormat.u3.dwGBitMask = 0x00ff00,
+ .ddpfPixelFormat.u4.dwBBitMask = 0x0000ff,
+ .ddpfPixelFormat.u5.dwRGBAlphaBitMask = 0xff000000,
};
static const DDSURFACEDESC yuy2_format =
@@ -229,7 +230,7 @@ static const DDSURFACEDESC yuy2_format =
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_FOURCC,
.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y', 'U', 'Y', '2'),
- .ddpfPixelFormat.dwYUVBitCount = 16,
+ .ddpfPixelFormat.u1.dwYUVBitCount = 16,
};
static const DDSURFACEDESC yv12_format =
@@ -239,7 +240,7 @@ static const DDSURFACEDESC yv12_format =
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_FOURCC,
.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y', 'V', '1', '2'),
- .ddpfPixelFormat.dwYUVBitCount = 12,
+ .ddpfPixelFormat.u1.dwYUVBitCount = 12,
};
static const WCHAR primary_video_sink_id[] = L"I{A35FF56A-9FDA-11D0-8FDF-00C04FD9189D}";
@@ -3799,9 +3800,9 @@ static void test_ddrawstream_receive_connection(void)
ok(hr == VFW_E_TYPE_NOT_ACCEPTED, "Got hr %#x.\n", hr);
format = yuy2_format;
- format.ddpfPixelFormat.dwRBitMask = 0xf800;
- format.ddpfPixelFormat.dwGBitMask = 0x07e0;
- format.ddpfPixelFormat.dwBBitMask = 0x001f;
+ format.ddpfPixelFormat.u2.dwRBitMask = 0xf800;
+ format.ddpfPixelFormat.u3.dwGBitMask = 0x07e0;
+ format.ddpfPixelFormat.u4.dwBBitMask = 0x001f;
hr = IDirectDrawMediaStream_SetFormat(ddraw_stream, &format, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -5116,7 +5117,7 @@ static void test_ddrawstream_set_format(void)
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED1,
- .ddpfPixelFormat.dwRGBBitCount = 1,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 1,
};
static const DDSURFACEDESC rgb2_format =
{
@@ -5124,7 +5125,7 @@ static void test_ddrawstream_set_format(void)
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED2,
- .ddpfPixelFormat.dwRGBBitCount = 2,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 2,
};
static const DDSURFACEDESC rgb4_format =
{
@@ -5132,7 +5133,7 @@ static void test_ddrawstream_set_format(void)
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED4,
- .ddpfPixelFormat.dwRGBBitCount = 4,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 4,
};
static const DDSURFACEDESC rgb4to8_format =
{
@@ -5140,7 +5141,7 @@ static void test_ddrawstream_set_format(void)
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXEDTO8,
- .ddpfPixelFormat.dwRGBBitCount = 4,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 4,
};
static const DDSURFACEDESC rgb332_format =
{
@@ -5148,10 +5149,10 @@ static void test_ddrawstream_set_format(void)
.dwFlags = DDSD_PIXELFORMAT,
.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT),
.ddpfPixelFormat.dwFlags = DDPF_RGB,
- .ddpfPixelFormat.dwRGBBitCount = 8,
- .ddpfPixelFormat.dwRBitMask = 0xe0,
- .ddpfPixelFormat.dwGBitMask = 0x1c,
- .ddpfPixelFormat.dwBBitMask = 0x03,
+ .ddpfPixelFormat.u1.dwRGBBitCount = 8,
+ .ddpfPixelFormat.u2.dwRBitMask = 0xe0,
+ .ddpfPixelFormat.u3.dwGBitMask = 0x1c,
+ .ddpfPixelFormat.u4.dwBBitMask = 0x03,
};
IDirectDrawMediaStream *ddraw_stream;
@@ -5231,19 +5232,19 @@ static void test_ddrawstream_set_format(void)
check_ddrawstream_set_format(ddraw_stream, &format, NULL, DDERR_INVALIDSURFACETYPE);
format = rgb565_format;
- format.ddpfPixelFormat.dwRBitMask = 0x001f;
- format.ddpfPixelFormat.dwGBitMask = 0x07e0;
- format.ddpfPixelFormat.dwBBitMask = 0xf800;
+ format.ddpfPixelFormat.u2.dwRBitMask = 0x001f;
+ format.ddpfPixelFormat.u3.dwGBitMask = 0x07e0;
+ format.ddpfPixelFormat.u4.dwBBitMask = 0xf800;
check_ddrawstream_set_format(ddraw_stream, &format, NULL, DDERR_INVALIDSURFACETYPE);
format = rgb32_format;
- format.ddpfPixelFormat.dwRBitMask = 0x00ff00;
- format.ddpfPixelFormat.dwGBitMask = 0x0000ff;
- format.ddpfPixelFormat.dwBBitMask = 0xff0000;
+ format.ddpfPixelFormat.u2.dwRBitMask = 0x00ff00;
+ format.ddpfPixelFormat.u3.dwGBitMask = 0x0000ff;
+ format.ddpfPixelFormat.u4.dwBBitMask = 0xff0000;
check_ddrawstream_set_format(ddraw_stream, &format, NULL, DDERR_INVALIDSURFACETYPE);
format = yuy2_format;
- format.ddpfPixelFormat.dwYUVBitCount = 0;
+ format.ddpfPixelFormat.u1.dwYUVBitCount = 0;
check_ddrawstream_set_format(ddraw_stream, &format, NULL, E_INVALIDARG);
format = rgb32_format;
@@ -5289,10 +5290,10 @@ static void test_ddrawstream_set_format(void)
"Got subtype %s.\n", wine_dbgstr_guid(&source.source.pin.mt.subtype));
hr = IDirectDrawMediaStream_GetFormat(ddraw_stream, ¤t_format, NULL, &desired_format, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(current_format.ddpfPixelFormat.dwRGBBitCount == 8,
- "Got rgb bit count %u.\n", current_format.ddpfPixelFormat.dwRGBBitCount);
- ok(desired_format.ddpfPixelFormat.dwRGBBitCount == 8,
- "Got rgb bit count %u.\n", desired_format.ddpfPixelFormat.dwRGBBitCount);
+ ok(current_format.ddpfPixelFormat.u1.dwRGBBitCount == 8,
+ "Got rgb bit count %u.\n", current_format.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desired_format.ddpfPixelFormat.u1.dwRGBBitCount == 8,
+ "Got rgb bit count %u.\n", desired_format.ddpfPixelFormat.u1.dwRGBBitCount);
format = rgb555_format;
format.dwFlags = 0;
@@ -5312,10 +5313,10 @@ static void test_ddrawstream_set_format(void)
"Got subtype %s.\n", wine_dbgstr_guid(&source.source.pin.mt.subtype));
hr = IDirectDrawMediaStream_GetFormat(ddraw_stream, ¤t_format, NULL, &desired_format, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(current_format.ddpfPixelFormat.dwRGBBitCount == 16,
- "Got rgb bit count %u.\n", current_format.ddpfPixelFormat.dwRGBBitCount);
- ok(desired_format.ddpfPixelFormat.dwRGBBitCount == 16,
- "Got rgb bit count %u.\n", desired_format.ddpfPixelFormat.dwRGBBitCount);
+ ok(current_format.ddpfPixelFormat.u1.dwRGBBitCount == 16,
+ "Got rgb bit count %u.\n", current_format.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desired_format.ddpfPixelFormat.u1.dwRGBBitCount == 16,
+ "Got rgb bit count %u.\n", desired_format.ddpfPixelFormat.u1.dwRGBBitCount);
video_info = rgb555_video_info;
video_info.bmiHeader.biWidth = 222;
@@ -7189,7 +7190,7 @@ static void test_ddrawstream_create_sample(void)
ok(desc.dwWidth == 100, "Expected width 100, got %d.\n", desc.dwWidth);
ok(desc.dwHeight == 100, "Expected height 100, got %d.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == DDPF_RGB, "Expected format flags DDPF_RGB, got %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount, "Expected non-zero RGB bit count.\n");
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount, "Expected non-zero RGB bit count.\n");
IDirectDrawSurface_Release(surface);
IDirectDrawStreamSample_Release(sample);
EXPECT_REF(stream, 3);
@@ -7233,11 +7234,11 @@ static void test_ddrawstream_create_sample(void)
desc.dwHeight = 400;
desc.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
- desc.ddpfPixelFormat.dwRGBBitCount = 32;
- desc.ddpfPixelFormat.dwRBitMask = 0xff0000;
- desc.ddpfPixelFormat.dwGBitMask = 0x00ff00;
- desc.ddpfPixelFormat.dwBBitMask = 0x0000ff;
- desc.ddpfPixelFormat.dwRGBAlphaBitMask = 0xff000000;
+ desc.ddpfPixelFormat.u1.dwRGBBitCount = 32;
+ desc.ddpfPixelFormat.u2.dwRBitMask = 0xff0000;
+ desc.ddpfPixelFormat.u3.dwGBitMask = 0x00ff00;
+ desc.ddpfPixelFormat.u4.dwBBitMask = 0x0000ff;
+ desc.ddpfPixelFormat.u5.dwRGBAlphaBitMask = 0xff000000;
desc.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN;
hr = IDirectDraw_CreateSurface(ddraw, &desc, &surface, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7278,7 +7279,7 @@ static void test_ddrawstream_create_sample(void)
desc.dwHeight = 400;
desc.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
desc.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED4;
- desc.ddpfPixelFormat.dwRGBBitCount = 4;
+ desc.ddpfPixelFormat.u1.dwRGBBitCount = 4;
desc.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN;
hr = IDirectDraw_CreateSurface(ddraw, &desc, &surface, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7304,10 +7305,10 @@ static void test_ddrawstream_create_sample(void)
ok(desc.dwWidth == 100, "Got width %u.\n", desc.dwWidth);
ok(desc.dwHeight == 100, "Got height %u.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == DDPF_RGB, "Got flags %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.dwRGBBitCount);
- ok(desc.ddpfPixelFormat.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.dwRBitMask);
- ok(desc.ddpfPixelFormat.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.dwGBitMask);
- ok(desc.ddpfPixelFormat.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desc.ddpfPixelFormat.u2.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.u2.dwRBitMask);
+ ok(desc.ddpfPixelFormat.u3.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.u3.dwGBitMask);
+ ok(desc.ddpfPixelFormat.u4.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
format1 = rgb8_format;
format1.dwFlags |= DDSD_WIDTH;
@@ -7333,30 +7334,30 @@ static void test_ddrawstream_create_sample(void)
ok(desc.dwWidth == 333, "Got width %u.\n", desc.dwWidth);
ok(desc.dwHeight == 444, "Got height %u.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == DDPF_RGB, "Got flags %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.dwRGBBitCount);
- ok(desc.ddpfPixelFormat.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.dwRBitMask);
- ok(desc.ddpfPixelFormat.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.dwGBitMask);
- ok(desc.ddpfPixelFormat.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desc.ddpfPixelFormat.u2.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.u2.dwRBitMask);
+ ok(desc.ddpfPixelFormat.u3.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.u3.dwGBitMask);
+ ok(desc.ddpfPixelFormat.u4.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
get_ddrawstream_create_sample_desc(&rgb565_format, NULL, NULL, &desc);
ok(desc.dwWidth == 100, "Got width %u.\n", desc.dwWidth);
ok(desc.dwHeight == 100, "Got height %u.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == DDPF_RGB, "Got flags %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount == 16, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.dwRGBBitCount);
- ok(desc.ddpfPixelFormat.dwRBitMask == 0xf800, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.dwRBitMask);
- ok(desc.ddpfPixelFormat.dwGBitMask == 0x07e0, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.dwGBitMask);
- ok(desc.ddpfPixelFormat.dwBBitMask == 0x001f, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount == 16, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desc.ddpfPixelFormat.u2.dwRBitMask == 0xf800, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.u2.dwRBitMask);
+ ok(desc.ddpfPixelFormat.u3.dwGBitMask == 0x07e0, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.u3.dwGBitMask);
+ ok(desc.ddpfPixelFormat.u4.dwBBitMask == 0x001f, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
get_ddrawstream_create_sample_desc(&argb32_format, NULL, NULL, &desc);
ok(desc.dwWidth == 100, "Got width %u.\n", desc.dwWidth);
ok(desc.dwHeight == 100, "Got height %u.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == (DDPF_RGB | DDPF_ALPHAPIXELS), "Got flags %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.dwRGBBitCount);
- ok(desc.ddpfPixelFormat.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.dwRBitMask);
- ok(desc.ddpfPixelFormat.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.dwGBitMask);
- ok(desc.ddpfPixelFormat.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
- ok(desc.ddpfPixelFormat.dwRGBAlphaBitMask == 0xff000000,
- "Got alpha bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desc.ddpfPixelFormat.u2.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.u2.dwRBitMask);
+ ok(desc.ddpfPixelFormat.u3.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.u3.dwGBitMask);
+ ok(desc.ddpfPixelFormat.u4.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u5.dwRGBAlphaBitMask == 0xff000000,
+ "Got alpha bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
format1 = rgb32_format;
format1.dwFlags |= DDSD_CAPS;
@@ -7368,10 +7369,10 @@ static void test_ddrawstream_create_sample(void)
ok(desc.dwWidth == 100, "Got width %u.\n", desc.dwWidth);
ok(desc.dwHeight == 100, "Got height %u.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == DDPF_RGB, "Got flags %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.dwRGBBitCount);
- ok(desc.ddpfPixelFormat.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.dwRBitMask);
- ok(desc.ddpfPixelFormat.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.dwGBitMask);
- ok(desc.ddpfPixelFormat.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desc.ddpfPixelFormat.u2.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.u2.dwRBitMask);
+ ok(desc.ddpfPixelFormat.u3.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.u3.dwGBitMask);
+ ok(desc.ddpfPixelFormat.u4.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
format1 = rgb32_format;
format1.dwFlags |= DDSD_CKSRCBLT;
@@ -7382,10 +7383,10 @@ static void test_ddrawstream_create_sample(void)
ok(desc.dwWidth == 100, "Got width %u.\n", desc.dwWidth);
ok(desc.dwHeight == 100, "Got height %u.\n", desc.dwHeight);
ok(desc.ddpfPixelFormat.dwFlags == DDPF_RGB, "Got flags %#x.\n", desc.ddpfPixelFormat.dwFlags);
- ok(desc.ddpfPixelFormat.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.dwRGBBitCount);
- ok(desc.ddpfPixelFormat.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.dwRBitMask);
- ok(desc.ddpfPixelFormat.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.dwGBitMask);
- ok(desc.ddpfPixelFormat.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.dwBBitMask);
+ ok(desc.ddpfPixelFormat.u1.dwRGBBitCount == 32, "Got rgb bit count %u.\n", desc.ddpfPixelFormat.u1.dwRGBBitCount);
+ ok(desc.ddpfPixelFormat.u2.dwRBitMask == 0xff0000, "Got r bit mask %#x.\n", desc.ddpfPixelFormat.u2.dwRBitMask);
+ ok(desc.ddpfPixelFormat.u3.dwGBitMask == 0x00ff00, "Got g bit mask %#x.\n", desc.ddpfPixelFormat.u3.dwGBitMask);
+ ok(desc.ddpfPixelFormat.u4.dwBBitMask == 0x0000ff, "Got b bit mask %#x.\n", desc.ddpfPixelFormat.u4.dwBBitMask);
ok(desc.ddckCKSrcBlt.dwColorSpaceLowValue == 0, "Got color key low value %#x.\n",
desc.ddckCKSrcBlt.dwColorSpaceLowValue);
ok(desc.ddckCKSrcBlt.dwColorSpaceHighValue == 0, "Got color key high value %#x.\n",
@@ -7557,7 +7558,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7574,11 +7575,11 @@ static void test_ddrawstreamsample_update(void)
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7605,7 +7606,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7622,11 +7623,11 @@ static void test_ddrawstreamsample_update(void)
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7658,7 +7659,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7674,11 +7675,11 @@ static void test_ddrawstreamsample_update(void)
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7707,7 +7708,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7723,11 +7724,11 @@ static void test_ddrawstreamsample_update(void)
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7743,7 +7744,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7755,18 +7756,18 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7778,11 +7779,11 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7811,7 +7812,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- memcpy((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12);
+ memcpy((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12);
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7837,7 +7838,7 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
for (i = 0; i < 5; ++i)
- ok(memcmp((BYTE *)desc.lpSurface + i * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + i * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@@ -7848,11 +7849,11 @@ static void test_ddrawstreamsample_update(void)
hr = IDirectDrawSurface_Lock(surface, NULL, &desc, 0, NULL);
ok(hr == S_OK, "Got hr %#x.\n", hr);
- ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
- ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 0 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 1 * desc.u1.lPitch, &test_data[12], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 2 * desc.u1.lPitch, &test_data[0], 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 3 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
+ ok(memcmp((BYTE *)desc.lpSurface + 4 * desc.u1.lPitch, initial_data, 12) == 0, "Sample data didn't match.\n");
hr = IDirectDrawSurface_Unlock(surface, desc.lpSurface);
ok(hr == S_OK, "Got hr %#x.\n", hr);
--
2.29.2
Dec. 21, 2020
Re: [PATCH 2/2] include: Add IAMCameraControl definition in axextend.idl.
by Zebediah Figura (she/her)
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
Dec. 21, 2020
Re: Looking for TestBot help
by Francois Gouget
On Mon, 21 Dec 2020, Zhiyi Zhang wrote:
[...]
> > * Write or find a Windows tool to automatically take a screenshot every
> > few seconds and deduplicate identical screenshots. The requirements
> > are:
> I can help out with this one. I had been debugging some screenshot problems on
> Wine and already have a few code snippets to do screenshots and save them.
That's great.
> For this tool, I'm thinking doing it generally the following way:
> 1. Capture the whole virtual screen and save it in a png in memory.
> 2. Compare the png in 1, if it's not equal to the previous screenshot,
> save it to disk in a folder.
Yes, that sounds good.
[...]
> I wonder if it would be better if we do video capture instead? If we
> don't plan on keeping the video forever, I think a 2 mins video
> shouldn't be too large. A few megabytes I think, depending on the
> video format.
Video would obviously be nice but the VMs typically don't have access to
a graphics card to offload the video compression. So I worry that the
CPU usage would be too high and/or interfere with the tests. Also
compression would have to happen in real time because we don't want the
VM to be stuck compressing the video for 5 minutes after the test is
done.
That pretty much means MJPEG [1] but then you either get large files or
bad quality. Maybe it could work if we put a frontend detecting
duplicate frames but then I don't know how we could preserve the frame
interval in the MJPEG file [2].
Disk usage could also be an issue though a video encoder should allow us
to solve that by lowering the bitrate, assuming we can still get a
reasonable quality. Bandwidth usage may be more of an issue, both in
terms of billing, and in terms of transfer time (from the VM hosts to
the offsite TestBot server).
But maybe I'm overestimating the challenges of video encoding.
Currently my plan would be to do tests and then set the screenshot
interval between 1 and 10 seconds based on the results.
[1] Some internet forums suggest huffyuv or lagarith but neither
provides interframe compression which I think would be very
beneficial in our case (even if it's very basic like doing a simple
diff). The other issue as soon as one strays away from the
'mainstream encoders' is browser support.
[2] It seems like variable rate 'mjpeg' should be possible with a
'modern container' like mkv and mp4 (the latter being probably more
compatible with browsers).
--
Francois Gouget <fgouget(a)free.fr> http://fgouget.free.fr/
Any sufficiently advanced bug is indistinguishable from a feature.
-- from some indian guy
Dec. 21, 2020
Dec. 21, 2020
Re: Looking for TestBot help
by Francois Gouget
On Sun, 20 Dec 2020, Zebediah Figura (she/her) wrote:
>
> On 12/17/20 3:28 AM, Francois Gouget wrote:
> >
> > In these freezing times I'm looking for volunteers to help with three
> > TestBot related tasks:
> >
> > * Modify WineTest to detect which tests can be run by running
> > 'xxx_test --list' and automatically detecting and dismissing the
> > "Missing dll" / "Missing entrypoint" dialogs.
>
> Are we sure we want to do it this way? It seems potentially quite fragile...
I think it would be more robust than what we're doing now which is
trying to predict whether the linker will find all the dependencies the
test needs, taking into account manifests, recursive dll dependencies,
etc.
I expect it would also be less code and less duplication.
--
Francois Gouget <fgouget(a)free.fr> http://fgouget.free.fr/
All generalizations are false, including this one.
-- Mark Twain
Dec. 21, 2020
[PATCH] d3dx9: Avoid closing invalid handles.
by Akihiro Sagawa
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50373
Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com>
---
dlls/d3dx9_36/util.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Dec. 21, 2020