From 6ec5f8841beae660c9dd92d36a4451d6b6da5ba8 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 21:48:33 +0200 Subject: [PATCH 001/750] [FDEBUG] Update Romanian (ro-RO) translation (#7340) --- boot/freeldr/fdebug/lang/ro-RO.rc | 40 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/boot/freeldr/fdebug/lang/ro-RO.rc b/boot/freeldr/fdebug/lang/ro-RO.rc index ac354a92b500a..4df4ad77df7df 100644 --- a/boot/freeldr/fdebug/lang/ro-RO.rc +++ b/boot/freeldr/fdebug/lang/ro-RO.rc @@ -1,4 +1,10 @@ -/* Translator: Ștefan Fulea (stefan dot fulea at mail dot com) */ +/* + * PROJECT: ReactOS FreeLoader Debugger + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Romanian resource file + * TRANSLATORS: Copyright 2011-2018 Ștefan Fulea + * Copyright 2024 Andrei Miloiu + */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -10,16 +16,16 @@ BEGIN MENUITEM "&Conectare", IDM_FILE_CONNECT MENUITEM "&Deconectare", IDM_FILE_DISCONNECT, GRAYED MENUITEM SEPARATOR - MENUITEM "C&urăță ecran", IDM_FILE_CLEARDISPLAY + MENUITEM "C&urățare a ecranului", IDM_FILE_CLEARDISPLAY MENUITEM SEPARATOR - MENUITEM "&Pornește captură", IDM_FILE_STARTCAPTURE - MENUITEM "&Oprește captură", IDM_FILE_STOPCAPTURE, GRAYED + MENUITEM "&Pornire a capturii", IDM_FILE_STARTCAPTURE + MENUITEM "&Oprire a capturii", IDM_FILE_STOPCAPTURE, GRAYED MENUITEM SEPARATOR MENUITEM "Ecou loc&al", IDM_FILE_LOCALECHO MENUITEM SEPARATOR MENUITEM "I&eșire", IDM_EXIT END - POPUP "Aj&utor" + POPUP "&Ajutor" BEGIN MENUITEM "&Despre…", IDM_ABOUT END @@ -41,8 +47,6 @@ FONT 8, "MS Shell Dlg" BEGIN CONTROL "Depanatorul FreeLoader\nDrept de autor (C) 2003\nde Brian Palmer (brianp@reactos.org)", IDC_STATIC, "Static", SS_LEFTNOWORDWRAP | WS_GROUP, 53, 28, 122, 26 DEFPUSHBUTTON "Î&nchide", IDOK, 189, 44, 50, 14, WS_GROUP - ICON IDI_FDEBUG, IDC_STATIC, 19, 30, 20, 20 - EDITTEXT IDC_LICENSE_EDIT, 53, 63, 174, 107, ES_MULTILINE | ES_READONLY | WS_VSCROLL END IDD_CONNECTION DIALOGEX 0, 0, 196, 100 @@ -50,12 +54,12 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Opțiuni de conectare" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Alegeți portul COM (ex. COM1):", IDC_STATIC, 7, 7, 108, 8 + LTEXT "Treceți portul COM (ex. COM1):", IDC_STATIC, 7, 7, 108, 8 EDITTEXT IDC_COMPORT, 7, 17, 182, 14, ES_AUTOHSCROLL - LTEXT "Rata baud (ex. 115200):", IDC_STATIC, 7, 38, 114, 8 + LTEXT "Treceți rata baud (ex. 115200):", IDC_STATIC, 7, 38, 114, 8 EDITTEXT IDC_BAUTRATE, 7, 48, 182, 14, ES_AUTOHSCROLL - DEFPUSHBUTTON "Con&firmă", IDOK, 45, 79, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 100, 79, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 45, 79, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 100, 79, 50, 14 END IDD_CAPTURE DIALOGEX 0, 0, 251, 95 @@ -63,23 +67,23 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Fișierul de captură" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Numele fișierului:", IDC_STATIC, 7, 17, 62, 8 + LTEXT "Nume fișier capt.:", IDC_STATIC, 7, 17, 62, 8 EDITTEXT IDC_CAPTUREFILENAME, 7, 26, 181, 14, ES_AUTOHSCROLL - PUSHBUTTON "&Caută", IDC_BROWSE, 194, 26, 50, 14 - DEFPUSHBUTTON "Con&firmă", IDOK, 139, 74, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 194, 74, 50, 14 + PUSHBUTTON "&Specificare", IDC_BROWSE, 194, 26, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 139, 74, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 194, 74, 50, 14 END /* String Tables */ STRINGTABLE BEGIN - IDS_APP_TITLE "Program de depanare FreeLoader" - IDS_HELLO "Salut, lume!" + IDS_APP_TITLE "Depanatorul FreeLoader" + IDS_HELLO "Salut lume!" IDC_FDEBUG "FDEBUG" END STRINGTABLE BEGIN - IDS_LICENSE "Această aplicație este un soft public; poate fi redistribuită și/sau modificată respectând termenii Licenței Publice Generale GNU publicată de Free Software Foundation; sau respectând Licența în versiunea 2, sau (la alegere) o altă versiune ulterioară.\r\n\r\nAceastă aplicație este distribuită în speranța că va fi utilă, FĂRĂ însă NICI O GARANŢIE; nici măcar cu garanția implicită a VANDABILITĂŢII sau a UTILITĂŢII ÎNTR-UN SCOP ANUME. Consultați Licența Publică Generală GNU pentru mai multe detalii.\r\n\r\nPuteți vedea această licență aici:\r\nhttp://www.gnu.org/licenses/gpl.html\r\n\r\nDe asemenea puteți consulta traduceri neoficiale ale acestei licențe aici:\r\nhttp://www.gnu.org/licenses/translations.html" + IDS_LICENSE "Acest program este un software liber: dumneavoastră îl puteţi redistribui şi/sau modifica, în condiţiile Licenţei publice generale GNU, aşa cum a fost aceasta publicată de către Free Software Foundation, fie versiunea 2 a acestei Licenţe, fie (la alegerea dumneavoastră), orice versiune ulterioară.\r\n\r\nAcest program este distribuit în speranţa că va fi util, dar FĂRĂ NICIO GARANŢIE; chiar şi fără garanţia implicită de MERCANTILITATE sau de ADECVARE PENTRU UN ANUMIT SCOP. Vezi Licenţa publică generală GNU pentru mai multe detalii.\r\n\r\nTrebuie ca dumneavoastră să fi primit o copie a Licenţei publice generale GNU împreună cu acest program. Dacă nu, scrie la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 SUA." END From c212c184f39109ea6d745f45d2b3169406c6a33e Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 21:54:26 +0200 Subject: [PATCH 002/750] [EVENTVWR] Update Romanian (ro-RO) translation (#7352) --- .../mscutils/eventvwr/lang/ro-RO.rc | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/base/applications/mscutils/eventvwr/lang/ro-RO.rc b/base/applications/mscutils/eventvwr/lang/ro-RO.rc index baa02ec0431c8..947cfad7da7fa 100644 --- a/base/applications/mscutils/eventvwr/lang/ro-RO.rc +++ b/base/applications/mscutils/eventvwr/lang/ro-RO.rc @@ -14,21 +14,21 @@ BEGIN POPUP "&Jurnal" BEGIN MENUITEM "&Deschidere…", IDM_OPEN_EVENTLOG - MENUITEM "&Salvare jurnal de evenimente ca…", IDM_SAVE_EVENTLOG//FIXME: accelerator collision &S + MENUITEM "&Salvare a jurnalului de evenimente ca…", IDM_SAVE_EVENTLOG MENUITEM "Î&nchidere", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR MENUITEM "Înlăt&urare a tuturor evenimentelor", IDM_CLEAR_EVENTS MENUITEM "&Redenumire\tF2", IDM_RENAME_EVENTLOG - MENUITEM "&Setări pentru jurnal…", IDM_EVENTLOG_SETTINGS//FIXME: accelerator collision &S + MENUITEM "Se&tări pentru jurnal…", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "I&eșire", IDM_EXIT END POPUP "&Afișare" BEGIN - MENUITEM "După vârstă &crescător", IDM_LIST_NEWEST - MENUITEM "După vârstă &descrescător", IDM_LIST_OLDEST//FIXME: accelerator collision &D + MENUITEM "Cel mai &nou primul", IDM_LIST_NEWEST + MENUITEM "Cel mai &vechi primul", IDM_LIST_OLDEST MENUITEM SEPARATOR - MENUITEM "&Detalii…\tEnter", IDM_EVENT_DETAILS//FIXME: accelerator collision &D + MENUITEM "&Detalii…\tEnter", IDM_EVENT_DETAILS MENUITEM SEPARATOR MENUITEM "Împ&rospătare\tF5", IDM_REFRESH END @@ -41,7 +41,7 @@ BEGIN END POPUP "Aj&utor" BEGIN - MENUITEM "&Manual…", IDM_HELP + MENUITEM "Aju&tor", IDM_HELP MENUITEM SEPARATOR MENUITEM "&Despre…", IDM_ABOUT END @@ -51,12 +51,12 @@ IDM_EVENTWR_CTX MENU BEGIN POPUP "" BEGIN - MENUITEM "&Deschidere jurnalul de evenimente...", IDM_OPEN_EVENTLOG - MENUITEM "Salv&are jurnal de evenimente ca...", IDM_SAVE_EVENTLOG + MENUITEM "&Deschidere jurnalul de evenimente…", IDM_OPEN_EVENTLOG + MENUITEM "Salv&are a jurnalului de evenimente ca…", IDM_SAVE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "Șter&gere toate evenimentele", IDM_CLEAR_EVENTS + MENUITEM "Șter&gere a tuturor evenimentelor", IDM_CLEAR_EVENTS MENUITEM "&Redenumire\tF2", IDM_RENAME_EVENTLOG - MENUITEM "Setări de &jurnal...", IDM_EVENTLOG_SETTINGS + MENUITEM "Setări ale &jurnalului…", IDM_EVENTLOG_SETTINGS END END @@ -71,12 +71,12 @@ END IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Detalii eveniment" +CAPTION "Detalii despre eveniment" FONT 8, "MS Shell Dlg" BEGIN LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215 - PUSHBUTTON "&Manual…", IDHELP, 8, 220, 50, 14 - DEFPUSHBUTTON "Î&nchide", IDOK, 208, 220, 50, 14 + PUSHBUTTON "&Ajutor", IDHELP, 8, 220, 50, 14 + DEFPUSHBUTTON "Î&nchidere", IDOK, 208, 220, 50, 14 END IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215 @@ -115,79 +115,79 @@ END IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "N&ume afișat:", IDC_STATIC, 7, 9, 60, 8 + LTEXT "&Nume afișat:", IDC_STATIC, 7, 9, 60, 8 EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP - LTEXT "Nume de ju&rnal:", IDC_STATIC, 7, 25, 60, 8 + LTEXT "Numele &jurnalului:", IDC_STATIC, 7, 25, 60, 8 EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP - LTEXT "Fiși&er de jurnal:", IDC_STATIC, 7, 41, 60, 8 + LTEXT "&Fișier de jurnal:", IDC_STATIC, 7, 41, 60, 8 EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP // The following 4 IDC_STATIC shall have accels in ReactOS, although MS doesn't have accels for them. // Translation note: First fill out ALL accels that MS has in this dialog for your language, // and only then as a final step use some remaining unused letters for those 4 controls! - LTEXT "Dimen&siune:", IDC_STATIC, 7, 57, 60, 8 + LTEXT "&Dimensiune:", IDC_STATIC, 7, 57, 60, 8 EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Crea&t:", IDC_STATIC, 7, 69, 60, 8 + LTEXT "&Creat:", IDC_STATIC, 7, 69, 60, 8 EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "&Modificat:", IDC_STATIC, 7, 81, 60, 8 EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "&Accesat:", IDC_STATIC, 7, 93, 60, 8 EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - GROUPBOX "Dimensiune jurnal", IDC_STATIC, 7, 106, 238, 99 - LTEXT "Dimensiune ma&ximă pentru jurnal:", IDC_STATIC, 17, 122, 58, 8 + GROUPBOX "Dimensiunea jurnalului", IDC_STATIC, 7, 106, 238, 99 + LTEXT "Dimensiune ma&ximă a jurnalului:", IDC_STATIC, 17, 122, 58, 8 EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 - LTEXT "Kio", IDC_STATIC, 130, 122, 20, 8 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 LTEXT "Când dimensiunea maximă este atinsă:", IDC_STATIC, 17, 140, 219, 8 - AUTORADIOBUTTON "Suprascrie evenimentele cân&d este necesar", IDC_OVERWRITE_AS_NEEDED, 17, 155, 219, 10, WS_GROUP | WS_TABSTOP - AUTORADIOBUTTON "Suprascrie evenimentele mai &vechi de", IDC_OVERWRITE_OLDER_THAN, 17, 168, 155, 10 - AUTORADIOBUTTON "Inter&zice suprascrierea\n(gestiune manuală de jurnal)", IDC_NO_OVERWRITE, 17, 180, 143, 20, BS_MULTILINE | WS_TABSTOP + AUTORADIOBUTTON "&Suprascriere a evenimentelor când este necesar", IDC_OVERWRITE_AS_NEEDED, 17, 155, 219, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "Suprascriere a evenimentelor mai &vechi de", IDC_OVERWRITE_OLDER_THAN, 17, 168, 155, 10 + AUTORADIOBUTTON "Nu se suprascriu evenimentele\n(&golire manuală a jurnalului)", IDC_NO_OVERWRITE, 17, 180, 143, 20, BS_MULTILINE | WS_TABSTOP EDITTEXT IDC_EDIT_EVENTS_AGE, 175, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS, 104, 165, 10, 14 LTEXT "zile", IDC_STATIC, 215, 168, 20, 8 - PUSHBUTTON "&Opțiuni implicite", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 - AUTOCHECKBOX "Conexiune de &bandă limitată", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Restaurare implicite", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "&Folosind o conexiune de viteză mică", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 PUSHBUTTON "&Curăță jurnal", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE BEGIN IDS_COPYRIGHT "Drept de autor (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)" - IDS_APP_TITLE "Observator de evenimente" + IDS_APP_TITLE "Vizualizator de evenimente" IDS_APP_TITLE_EX "%s - %s autentificat pe \\\\" IDS_STATUS_MSG "%s are %lu (de) eveniment(e) (afișate: %lu)" - IDS_LOADING_WAIT "Jurnal de evenimente în încărcare. Așteptați…" - IDS_NO_ITEMS "Nu există elemente de afișat." // "No events in this log." + IDS_LOADING_WAIT "Se încarcă jurnalele de evenimente. Așteptați…" + IDS_NO_ITEMS "Nu există elemente de afișat în această vizualizare." // "No events in this log." IDS_EVENTLOG_SYSTEM "Jurnale de sistem" - IDS_EVENTLOG_APP "Jurnale de aplicație" + IDS_EVENTLOG_APP "Jurnale de aplicații" IDS_EVENTLOG_USER "Jurnale de utilizator" IDS_SAVE_FILTER "Jurnal de evenimente (*.evt)\0*.evt\0" IDS_CLEAREVENTS_MSG "Doriți să salvați acest jurnal de evenimente înainte de a-l închide?" - IDS_RESTOREDEFAULTS "Doriți să restaurați toate setările pentru acest jurnal la valorile lor implicite?" - IDS_EVENTSTRINGIDNOTFOUND "Descrierea evenimentului cu ID-ul ( %lu ) în sursa ( %s ) nu a fost găsită. Este posibil ca în calculatorul local să nu existe informațiile de registru necesare sau fișierele dll de mesaje să afișeze mesaje de la un calculator din rețea.\n\nInformații aferente evenimentului:\n\n" + IDS_RESTOREDEFAULTS "Doriți să restabiliți toate setările pentru acest jurnal la valorile lor implicite?" + IDS_EVENTSTRINGIDNOTFOUND "Imposibil de găsit descrierea evenimentului cu ID-ul ( %lu ) în sursa ( %s ). Este posibil ca computerul local să nu aibă informațiile de registru necesare sau fișierele DLL de mesaje pentru a afișa mesaje de la un computer la distanță.\n\nUrmătoarele informații fac parte din eveniment:\n\n" END STRINGTABLE BEGIN /* Please note that explicit TAB characters '\t' are used to fix the alignment of the message in the MessageBox */ - IDS_USAGE "Inspector de Evenimente ReactOS\n\ + IDS_USAGE "Vizualizatorul de evenimente ReactOS\n\ \n\ -EventVwr [nume calculator] [/L:] [/?]\n\ +EventVwr [numele computerului] [/L:] [/?]\n\ \n\ -""nume calculator"" : Specifică calculatorul la distanță de la care\n\ -\tvor fi preluate evenimentele afișate. Dacă nu e furnizat un\n\ -\tnume de calculator, va fi utilizat calculatorul local.\n\ +""numele computerului"" : Specifică computerul de la distanță unde să se conecteze\n\ +\pentru a prelua evenimentele de afișat. Dacă nu este specificat niciun nume,\n\ +\tcomputerul local este folosit.\n\ \n\ -/L: : Specifică deschiderea unui fișier.\n\ +/L: : Specifică deschiderea unui fișier.\n\ \tSunt acceptate doar fișierele în format .evt (NT ≤ 5.2)\n\ \n\ /? : Afișează acest mesaj cu informații de utilizare.\n\ " - IDS_EVENTLOGFILE "Fișier jurnal de evenimente" + IDS_EVENTLOGFILE "Fișier de jurnal de evenimente" END STRINGTABLE @@ -216,7 +216,7 @@ BEGIN IDS_COLUMNCATEGORY "Categorie" IDS_COLUMNEVENT "Eveniment" IDS_COLUMNUSER "Utilizator" - IDS_COLUMNCOMPUTER "Calculator" + IDS_COLUMNCOMPUTER "Computer" END STRINGTABLE @@ -229,12 +229,12 @@ ID eveniment: %s\r\n\ Dată: %s\r\n\ Oră: %s\r\n\ Utilizator: %s\r\n\ -Calculator: %s\r\n\ +Computer: %s\r\n\ Descriere:\r\n%s" END STRINGTABLE BEGIN - IDS_NONE "Nespecificată" - IDS_NOT_AVAILABLE "Nespecificat" + IDS_NONE "Nespecificat" + IDS_NOT_AVAILABLE "N/A" END From 5a030eaa334def1410e0383a25e15908aa88b3c1 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 21:58:25 +0200 Subject: [PATCH 003/750] [WINED3DCFG] Update Romanian (ro-RO) translation (#7406) --- dll/cpl/wined3dcfg/lang/ro-RO.rc | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/dll/cpl/wined3dcfg/lang/ro-RO.rc b/dll/cpl/wined3dcfg/lang/ro-RO.rc index 157eafb3cddba..8152264d0ea4c 100644 --- a/dll/cpl/wined3dcfg/lang/ro-RO.rc +++ b/dll/cpl/wined3dcfg/lang/ro-RO.rc @@ -1,39 +1,45 @@ -/* Translator: Ștefan Fulea (stefan dot fulea at mail dot com) */ +/* + * PROJECT: ReactOS WineD3D Configuration Control Panel + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Romanian resource file + * TRANSLATORS: Copyright 2011-2018 Ștefan Fulea + * Copyright 2024 Andrei Miloiu + */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_PROPPAGEGENERAL DIALOGEX 0, 0, 246, 228 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Generale" +CAPTION "General" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_CPLICON, IDI_CPLICON, 8, 0, 21, 20 GROUPBOX "Efecte de umbrire", -1, 5, 25, 230, 80 - LTEXT "Activează GLSL:", -1, 15, 42, 120, 10 + LTEXT "&Activare a GLSL:", -1, 15, 42, 120, 10 COMBOBOX IDC_GLSL, 135, 40, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Nivelul GS maxim:", -1, 15, 57, 120, 10 + LTEXT "Nivelul &GS maxim:", -1, 15, 57, 120, 10 COMBOBOX IDC_GSLEVEL, 135, 55, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Nivelul PS maxim:", -1, 15, 72, 120, 10 + LTEXT "Nivelul &PS maxim:", -1, 15, 72, 120, 10 COMBOBOX IDC_PSLEVEL, 135, 70, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Nivelul VS maxim:", -1, 15, 87, 120, 10 + LTEXT "Nivelul &VS maxim:", -1, 15, 87, 120, 10 COMBOBOX IDC_VSLEVEL, 135, 85, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST GROUPBOX "Randare", -1, 5, 110, 230, 110 - LTEXT "Multieșantionare:", -1, 15, 127, 120, 10 + LTEXT "&Multieșantionare:", -1, 15, 127, 120, 10 COMBOBOX IDC_MULTISAMPLING, 135, 125, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Ordinea strictă de desenare:", -1, 15, 142, 120, 10 + LTEXT "&Ordine strictă de desenare:", -1, 15, 142, 120, 10 COMBOBOX IDC_STRICTDRAWORDERING, 135, 140, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Randarea extra-ecran:", -1, 15, 157, 120, 10 + LTEXT "&Randare extra-ecran:", -1, 15, 157, 120, 10 COMBOBOX IDC_OFFSCREEN, 135, 155, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Întotdeauna extra-ecran:", -1, 15, 172, 120, 10, SS_LEFT + LTEXT "Î&ntotdeauna extra-ecran:", -1, 15, 172, 120, 10, SS_LEFT COMBOBOX IDC_ALWAYSOFFSCREEN, 135, 170, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Dimensiunea memoriei video:", -1, 15, 187, 120, 10, SS_LEFT + LTEXT "Dim&ensiunea memoriei video:", -1, 15, 187, 120, 10, SS_LEFT COMBOBOX IDC_VIDMEMSIZE, 135, 185, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST - LTEXT "Randator DirectDraw:", -1, 15, 202, 120, 10, SS_LEFT + LTEXT "Randator &DirectDraw:", -1, 15, 202, 120, 10, SS_LEFT COMBOBOX IDC_DDRENDERER, 135, 200, 90, 10, WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST END STRINGTABLE BEGIN IDS_CPLNAME "Opțiuni WineD3D" - IDS_CPLDESCRIPTION "Configurarea opțiunilor de execuție WineD3D." + IDS_CPLDESCRIPTION "Configurează setările de rulare WineD3D." END From 5251d086630c81ebc61f25dae23ad80691346ac6 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 22:02:30 +0200 Subject: [PATCH 004/750] [MSCTFIME] Add Romanian (ro-RO) translation (#7365) --- dll/ime/msctfime/lang/ro-RO.rc | 23 +++++++++++++++++++++++ dll/ime/msctfime/msctfime.rc | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 dll/ime/msctfime/lang/ro-RO.rc diff --git a/dll/ime/msctfime/lang/ro-RO.rc b/dll/ime/msctfime/lang/ro-RO.rc new file mode 100644 index 0000000000000..91cfb96576078 --- /dev/null +++ b/dll/ime/msctfime/lang/ro-RO.rc @@ -0,0 +1,23 @@ +/* + * PROJECT: ReactOS msctfime.ime + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Romanian resource file + * TRANSLATOR: Copyright 2024 Andrei Miloiu + */ + +LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_OK "OK" + IDS_CANCEL "Revocare" + IDS_ABORT "Î&ntrerupere" + IDS_RETRY "&Reîncercare" + IDS_IGNORE "&Ignorare" + IDS_YES "&Da" + IDS_NO "&Nu" + + IDS_ENTER "Intrare" + IDS_FINALIZE_STRING "Finalizare a șirului" + IDS_CONVERSION "Conversie" +END diff --git a/dll/ime/msctfime/msctfime.rc b/dll/ime/msctfime/msctfime.rc index 412ac4783f01d..59311d805e43a 100644 --- a/dll/ime/msctfime/msctfime.rc +++ b/dll/ime/msctfime/msctfime.rc @@ -33,6 +33,9 @@ IDI_DOWN ICON "res/down.ico" #ifdef LANGUAGE_PT_PT #include "lang/pt-PT.rc" #endif +#ifdef LANGUAGE_RO_RO + #include "lang/ro-RO.rc" +#endif #ifdef LANGUAGE_RU_RU #include "lang/ru-RU.rc" #endif From d8daf05e4a01bf7de65f55a5d55f393122d22a5f Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 22:05:33 +0200 Subject: [PATCH 005/750] [IEFRAME] Update Romanian (ro-RO) translation (#7356) --- dll/win32/ieframe/lang/ro-RO.rc | 44 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/dll/win32/ieframe/lang/ro-RO.rc b/dll/win32/ieframe/lang/ro-RO.rc index f188dca989942..c31364a70ec1e 100644 --- a/dll/win32/ieframe/lang/ro-RO.rc +++ b/dll/win32/ieframe/lang/ro-RO.rc @@ -3,7 +3,7 @@ * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) * PURPOSE: Romanian resource file * TRANSLATORS: Copyright 2011-2018 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL @@ -17,30 +17,30 @@ IDR_BROWSE_MAIN_MENU MENU MENUITEM "&Fereastră", ID_BROWSE_NEW_WINDOW } MENUITEM "&Deschidere…", ID_BROWSE_OPEN - MENUITEM "S&alvează", ID_BROWSE_SAVE - MENUITEM "Salvea&ză ca…", ID_BROWSE_SAVE_AS + MENUITEM "&Salvează", ID_BROWSE_SAVE + MENUITEM "S&alvare ca…", ID_BROWSE_SAVE_AS MENUITEM SEPARATOR - MENUITEM "Formatare imprima&bil…", ID_BROWSE_PRINT_FORMAT - MENUITEM "I&mprimare…", ID_BROWSE_PRINT - MENUITEM "Pre&vizionează pagină", ID_BROWSE_PRINT_PREVIEW + MENUITEM "Formatare i&mprimare…", ID_BROWSE_PRINT_FORMAT + MENUITEM "Im&primare…", ID_BROWSE_PRINT + MENUITEM "&Previzionare a paginii", ID_BROWSE_PRINT_PREVIEW MENUITEM SEPARATOR MENUITEM "Pr&oprietăți…", ID_BROWSE_PROPERTIES MENUITEM "I&eșire", ID_BROWSE_QUIT } POPUP "&Afișare" { - POPUP "&Bare" + POPUP "&Bare de instrumente" { MENUITEM "Bară stan&dard", ID_BROWSE_BAR_STD - MENUITEM "Bară de &adrasă", ID_BROWSE_BAR_ADDR + MENUITEM "Bară de &adresă", ID_BROWSE_BAR_ADDR } } POPUP "Fa&vorite" { - MENUITEM "&Adaugă la Favorite…", ID_BROWSE_ADDFAV + MENUITEM "&Adăugare la Favorite…", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } - POPUP "Aj&utor" + POPUP "A&jutor" { MENUITEM "&Despre Internet Explorer", ID_BROWSE_ABOUT } @@ -48,13 +48,13 @@ IDR_BROWSE_MAIN_MENU MENU STRINGTABLE { - IDS_INTERNET "Navigatorul de Internet" - IDS_INTERNET_DESCRIPTION "Deschide navigatorul de rețea și afișează informații din Internet." + IDS_INTERNET "Browserul de Internet" + IDS_INTERNET_DESCRIPTION "Deschide un browser Web și afișează informații de pe Internet." IDS_TB_BACK "Înapoi" IDS_TB_FORWARD "Înainte" - IDS_TB_STOP "Oprește" - IDS_TB_REFRESH "Împrospătează" + IDS_TB_STOP "Oprire" + IDS_TB_REFRESH "Împrospătare" IDS_TB_HOME "Acasă" IDS_TB_PRINT "Imprimare…" } @@ -66,24 +66,24 @@ STRINGTABLE STRINGTABLE { - IDS_FINDINGRESOURCE "În căutarea resursei %s" - IDS_BEGINDOWNLOADDATA "În început de descărcare din %s" - IDS_ENDDOWNLOADDATA "În curs de descărcare din %s" - IDS_SENDINGREQUEST "În așteptarea răspunsului de la %s" + IDS_FINDINGRESOURCE "Se caută %s" + IDS_BEGINDOWNLOADDATA "Începe descărcarea %s" + IDS_ENDDOWNLOADDATA "Se descarcă %s" + IDS_SENDINGREQUEST "Se interoghează %s" } IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70 STYLE DS_MODALFRAME | WS_CAPTION -CAPTION "Deschide URL" +CAPTION "Deschidere URL" FONT 8, "MS Shell Dlg" { - LTEXT "Specificați adresa URL pe care doriți s-o deschideți în Internet Explorer",-1, 35,5,160,25 + LTEXT "Specificați adresa URL pe care doriți să o deschideți în Internet Explorer",-1, 35,5,160,25 LTEXT "Deschide:", -1, 5, 32, 30, 15 #ifdef __REACTOS__ ICON IDC_PAGEICO, IDC_PAGEICO, 2, 5, 21, 20, SS_ICON #endif EDITTEXT IDC_BROWSE_OPEN_URL, 35, 30, 160, 13 - DEFPUSHBUTTON "Con&firmă", IDOK, 90, 50, 50, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 145, 50, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 90, 50, 50, 14 + PUSHBUTTON "Revocare", IDCANCEL, 145, 50, 50, 14 } From 29ef7062a7a6ae87398e84b1636e96a2fd26865d Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 22:12:45 +0200 Subject: [PATCH 006/750] [CONSOLE] Update Romanian (ro-RO) translation (#7404) --- dll/cpl/console/lang/ro-RO.rc | 80 +++++++++++++++++------------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/dll/cpl/console/lang/ro-RO.rc b/dll/cpl/console/lang/ro-RO.rc index 0fa6fd79d65e2..fc60aff96f3f3 100644 --- a/dll/cpl/console/lang/ro-RO.rc +++ b/dll/cpl/console/lang/ro-RO.rc @@ -14,27 +14,27 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Opțiuni" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Dimensiune cursor", IDC_STATIC, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP - AUTORADIOBUTTON "Red&usă", IDC_RADIO_SMALL_CURSOR, 15, 20, 90, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "Me&die", IDC_RADIO_MEDIUM_CURSOR, 15, 40, 90, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "&Mărită", IDC_RADIO_LARGE_CURSOR, 15, 60, 90, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - GROUPBOX "Mod de afișare", IDC_STATIC, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP - AUTORADIOBUTTON "În fere&astră", IDC_RADIO_DISPLAY_WINDOW, 142, 20, 70, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "Pe t&ot ecranul", IDC_RADIO_DISPLAY_FULL, 142, 40, 70, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - GROUPBOX "Istoric pentru comenzi", IDC_STATIC, 7, 85, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP - LTEXT "Ma&xim înregistrări:", IDC_STATIC, 14, 101, 70, 12 + GROUPBOX "Dimensiunea cursorului", IDC_STATIC, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + AUTORADIOBUTTON "&Mică", IDC_RADIO_SMALL_CURSOR, 15, 20, 90, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "M&edie", IDC_RADIO_MEDIUM_CURSOR, 15, 40, 90, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "M&are", IDC_RADIO_LARGE_CURSOR, 15, 60, 90, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "Opțiuni de afișare", IDC_STATIC, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + AUTORADIOBUTTON "&Fereastră", IDC_RADIO_DISPLAY_WINDOW, 142, 20, 70, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "E&cran complet", IDC_RADIO_DISPLAY_FULL, 142, 40, 70, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "Istoricul comenzilor", IDC_STATIC, 7, 85, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Dimensiune tampon:", IDC_STATIC, 14, 101, 70, 12 EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 119, 97, 12, 15 - LTEXT "&Cantitate registre:", IDC_STATIC, 14, 124, 70, 12 + LTEXT "&Număr tampoane:", IDC_STATIC, 14, 124, 70, 12 EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 119, 120, 12, 15 - AUTOCHECKBOX "Înlătură duplicatele &vechi", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + AUTOCHECKBOX "Anulare a duplicatelor &vechi", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 GROUPBOX "Opțiuni de editare", IDC_STATIC, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP - AUTOCHECKBOX "Mod de &editare rapidă", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTOCHECKBOX "Mod de inse&rție", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP - GROUPBOX "Cod de pagină", IDC_STATIC, 7, 170, 238, 31 + AUTOCHECKBOX "M&odul de editare rapidă", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTOCHECKBOX "Modul de inse&rare", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "Pagina de cod", IDC_STATIC, 7, 170, 238, 31 COMBOBOX IDL_CODEPAGE, 13, 181, 224, 58, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -43,15 +43,15 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Font" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Previzionare:", IDC_STATIC, 7, 7, 115, 10 + LTEXT "Previzionare a ferestrei:", IDC_STATIC, 7, 7, 115, 10 CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "WinPreview", WS_BORDER | WS_CHILD | WS_VISIBLE, 7, 20, 115, 70 LTEXT "Mărime:", IDC_STATIC, 130, 7, 45, 10 LISTBOX IDC_LBOX_FONTSIZE, 130, 20, 50, 86, LBS_SORT | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_CBOX_FONTSIZE, 130, 20, 30, 86, CBS_SIMPLE | CBS_SORT | WS_VSCROLL | WS_TABSTOP AUTORADIOBUTTON "pi&xeli", IDC_RADIO_PIXEL_UNIT, 165, 17, 60, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "p&uncte", IDC_RADIO_POINT_UNIT, 165, 28, 60, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - LTEXT "F&ont:", IDC_STATIC, 10, 105, 33, 10 - AUTOCHECKBOX "&Aldin", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + AUTORADIOBUTTON "&puncte", IDC_RADIO_POINT_UNIT, 165, 28, 60, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "&Font:", IDC_STATIC, 10, 105, 33, 10 + AUTOCHECKBOX "Fonturi &aldine", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 LISTBOX IDC_LBOX_FONTTYPE, 10, 120, 110, 40, LBS_SORT | LBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP GROUPBOX "Font selectat", IDC_GROUPBOX_FONT_NAME, 7, 156, 240, 50 CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 12, 166, 104, 35, WS_EX_CLIENTEDGE @@ -66,11 +66,11 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Aspect" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Previzionare:", IDC_STATIC, 7, 7, 115, 10 + LTEXT "Previzionare a ferestrei:", IDC_STATIC, 7, 7, 115, 10 CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "WinPreview", WS_BORDER | WS_CHILD | WS_VISIBLE, 7, 20, 115, 70 - GROUPBOX "Dimensiunea textului", IDC_STATIC, 130, 12, 115, 50 - LTEXT "&Coloane:", IDC_STATIC, 140, 28, 40, 10 - LTEXT "&Rânduri:", IDC_STATIC, 140, 46, 39, 10 + GROUPBOX "Dimensiunea tamponului de ecran", IDC_STATIC, 130, 12, 115, 50 + LTEXT "&Lăţime:", IDC_STATIC, 140, 28, 40, 10 + LTEXT "&Înălțime:", IDC_STATIC, 140, 46, 39, 10 EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 238, 25, 13, 14 @@ -78,8 +78,8 @@ BEGIN CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 238, 42, 13, 14 GROUPBOX "Dimensiunea ferestrei", IDC_STATIC, 130, 65, 115, 47 - LTEXT "C&oloane:", IDC_STATIC, 140, 78, 39, 10 - LTEXT "Rân&duri:", IDC_STATIC, 140, 95, 37, 10 + LTEXT "Lăți&me:", IDC_STATIC, 140, 78, 39, 10 + LTEXT "Î&nălțime:", IDC_STATIC, 140, 95, 37, 10 EDITTEXT IDC_EDIT_WINDOW_SIZE_WIDTH, 203, 75, 35, 14, ES_RIGHT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 238, 75, 13, 14 @@ -95,7 +95,7 @@ BEGIN EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 238, 146, 13, 14 - AUTOCHECKBOX "Po&ziționat de sistem", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 + AUTOCHECKBOX "Fereastră po&ziționată de sist.", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 END IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 @@ -103,11 +103,11 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Culori" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "T&ext ecran", IDC_RADIO_SCREEN_TEXT, 10, 12, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "F&undal ecran", IDC_RADIO_SCREEN_BACKGROUND, 10, 30, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "Te&xt ferestre popup", IDC_RADIO_POPUP_TEXT, 10, 48, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "Fun&dal ferestre popup", IDC_RADIO_POPUP_BACKGROUND, 10, 67, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - GROUPBOX "Paleta culorii selectate:", IDC_STATIC, 129, 7, 118, 73 + AUTORADIOBUTTON "&Textul ecranului", IDC_RADIO_SCREEN_TEXT, 10, 12, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "&Fundalul ecranului", IDC_RADIO_SCREEN_BACKGROUND, 10, 30, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "Te&xtul ferestrelor popup", IDC_RADIO_POPUP_TEXT, 10, 48, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "F&undalul ferestrelor popup", IDC_RADIO_POPUP_BACKGROUND, 10, 67, 112, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "Componentele de culoare selectate", IDC_STATIC, 129, 7, 118, 73 LTEXT "&Roșu:", IDC_STATIC, 140, 25, 48, 10 EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | ES_NUMBER | WS_GROUP CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | @@ -144,20 +144,20 @@ END IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Aplicare proprietăți" +CAPTION "Aplicare a proprietăților" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "&Doar pentru această fereastră", IDC_RADIO_APPLY_CURRENT, 12, 12, 207, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - AUTORADIOBUTTON "&Pentru toate ferestrele cu acest titlu", IDC_RADIO_APPLY_ALL, 12, 31, 207, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP - PUSHBUTTON "Con&firmă", IDOK, 58, 58, 50, 14, WS_VISIBLE - PUSHBUTTON "A&nulează", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE + AUTORADIOBUTTON "&Aplicare a proprietăților doar pentru festrele curente", IDC_RADIO_APPLY_CURRENT, 12, 12, 207, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + AUTORADIOBUTTON "&Salvare proprietăți pentru ferestrele viitoare cu același titlu", IDC_RADIO_APPLY_ALL, 12, 31, 207, 10, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE + PUSHBUTTON "Revocare", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE END STRINGTABLE BEGIN - IDS_CPLNAME "Linie de comandă" - IDS_CPLDESCRIPTION "Configurarea proprietăților pentru programe linie de comandă." - IDS_APPLY_SHORTCUT_ALL "Modifică scurtătura care a pornit aplicația" - IDS_RASTERFONTS "Fonturi rastre" - IDS_GROUPBOX_FONT_NAME "Font selectat: " + IDS_CPLNAME "Consolă" + IDS_CPLDESCRIPTION "Configurează proprietățile pentru consolă." + IDS_APPLY_SHORTCUT_ALL "Modifică &scurtătura care a pornit această aplicație" + IDS_RASTERFONTS "Fonturi raster" + IDS_GROUPBOX_FONT_NAME "Fontul selectat: " END From e6c18b4497fddfe56adf458d6e75bd7d9541bec6 Mon Sep 17 00:00:00 2001 From: Andrei Miloiu Date: Fri, 6 Dec 2024 22:15:51 +0200 Subject: [PATCH 007/750] [VGAFONTEDIT] Update Romanian (ro-RO) translation (#7354) --- .../devutils/vgafontedit/lang/ro-RO.rc | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/modules/rosapps/applications/devutils/vgafontedit/lang/ro-RO.rc b/modules/rosapps/applications/devutils/vgafontedit/lang/ro-RO.rc index 8c18c22973fb7..cd36a4ddcc43a 100644 --- a/modules/rosapps/applications/devutils/vgafontedit/lang/ro-RO.rc +++ b/modules/rosapps/applications/devutils/vgafontedit/lang/ro-RO.rc @@ -2,34 +2,34 @@ * PROJECT: ReactOS VGA Font Editor * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Romanian resource file - * TRANSLATORS: Copyright 2008 Ștefan Fulea - * Copyright 2023 Andrei Miloiu + * TRANSLATORS: Copyright 2014-2018 Ștefan Fulea + * Copyright 2023-2024 Andrei Miloiu */ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_ABOUT DIALOGEX 10, 10, 130, 62 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "About" +CAPTION "Despre" FONT 8, "MS Shell Dlg" BEGIN ICON IDI_MAIN, IDC_STATIC, 10, 10, 20, 20 LTEXT "Editor de font VGA ReactOS", IDC_STATIC, 37, 10, 93, 10 LTEXT "Drept de autor 2008 Colin Finck", IDC_STATIC, 37, 20, 93, 10 - DEFPUSHBUTTON "Î&nchide", IDCANCEL, 40, 44, 55, 15 + DEFPUSHBUTTON "Î&nchidere", IDCANCEL, 40, 44, 55, 15 END IDD_EDITGLYPH DIALOGEX 32768, 32768, 246, 197 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Editare glifă" +CAPTION "Editare a glifei" FONT 8, "MS Shell Dlg" BEGIN CONTROL "", IDC_EDIT_GLYPH_TOOLBOX, TOOLBARCLASSNAMEA, CCS_NODIVIDER | CCS_NORESIZE, 5, 5, 24, 82 CONTROL "", IDC_EDIT_GLYPH_EDIT, EDIT_GLYPH_EDIT_CLASSW, 0, 39, 5, 160, 160 CONTROL "", IDC_EDIT_GLYPH_PREVIEW, EDIT_GLYPH_PREVIEW_CLASSW, 0, 209, 5, 32, 32 - DEFPUSHBUTTON "Con&firmă", IDOK, 48, 177, 70, 14 - PUSHBUTTON "A&nulează", IDCANCEL, 125, 177, 70, 14 + DEFPUSHBUTTON "OK", IDOK, 48, 177, 70, 14 + PUSHBUTTON "Revocare", IDCANCEL, 125, 177, 70, 14 END IDM_MAINMENU MENU @@ -40,31 +40,31 @@ BEGIN MENUITEM "&Deschidere…\tCtrl+O", ID_FILE_OPEN MENUITEM "În&chide", ID_FILE_CLOSE MENUITEM SEPARATOR - MENUITEM "Sal&vează\tCtrl+S", ID_FILE_SAVE - MENUITEM "Salvea&ză ca…", ID_FILE_SAVE_AS + MENUITEM "&Salvare\tCtrl+S", ID_FILE_SAVE + MENUITEM "S&alvare ca…", ID_FILE_SAVE_AS MENUITEM SEPARATOR MENUITEM "I&eșire\tAlt+F4", ID_FILE_EXIT END POPUP "&Editare" BEGIN - MENUITEM "&Copiază\tCtrl+C", ID_EDIT_COPY - MENUITEM "&Lipește\tCtrl+V", ID_EDIT_PASTE + MENUITEM "&Copiere\tCtrl+C", ID_EDIT_COPY + MENUITEM "&Lipire\tCtrl+V", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Editare glifă…", ID_EDIT_GLYPH + MENUITEM "&Editare a glifei…", ID_EDIT_GLYPH END POPUP "Fe&restre" BEGIN - MENUITEM "Aranjare în &cascadă", ID_WINDOW_CASCADE - MENUITEM "Aranjări &orizontale", ID_WINDOW_TILE_HORZ - MENUITEM "Aranjări &verticale", ID_WINDOW_TILE_VERT - MENUITEM "&Aranjează pictograme", ID_WINDOW_ARRANGE + MENUITEM "&Cascadă", ID_WINDOW_CASCADE + MENUITEM "Dale &orizontale", ID_WINDOW_TILE_HORZ + MENUITEM "Dale &verticale", ID_WINDOW_TILE_VERT + MENUITEM "&Aranjare a pictogramelor", ID_WINDOW_ARRANGE MENUITEM SEPARATOR - MENUITEM "&Următoarea\tCtrl+F6", ID_WINDOW_NEXT + MENUITEM "&Următorul\tCtrl+F6", ID_WINDOW_NEXT END - POPUP "&?" + POPUP "&Ajutor" BEGIN MENUITEM "&Despre…", ID_HELP_ABOUT END @@ -72,22 +72,22 @@ END STRINGTABLE BEGIN - IDS_OPENFILTER, "Toate formatele compatibile (*.bin,*.psf)|*.bin;*.psf|Fișiere de font binar (*.bin)|*.bin|Fonturi (de versiune 1) PC Screen (*.psf)|*.psf|" - IDS_SAVEFILTER, "Fișiere de font binar (*.bin)|*.bin|" + IDS_OPENFILTER, "Toate formatele compatibile (*.bin,*.psf)|*.bin;*.psf|Fișiere de font binare (*.bin)|*.bin|Fonturi pentru ecranul PC Versiunea 1 (*.psf)|*.psf|" + IDS_SAVEFILTER, "Fișiere de font binare (*.bin)|*.bin|" IDS_OPENERROR, "Eroare la deschiderea fișierului! (Număr de eroare %1!u!)" IDS_READERROR, "Eroare la citirea fișierului! (Număr de eroare %1!u!)" IDS_WRITEERROR, "Eroare la scrierea fișierului! (Număr de eroare %1!u!)" IDS_UNSUPPORTEDFORMAT, "Format de fișier incompatibil!" IDS_UNSUPPORTEDPSF, "Format incompatibil de font PSF! Posibilitățile editorului se limitează la fonturile 8x8 fără moduri speciale." IDS_DOCNAME, "Font %1!u!" - IDS_SAVEPROMPT, "Modificările în fișierul „%1” încă nu au fost salvate.\n\nDoriți salvarea lor?" - IDS_APPTITLE, "Editor de font VGA ReactOS" - IDS_CLOSEEDIT, "Închideți mai întâi toate ferestrele de editare!" + IDS_SAVEPROMPT, "Fișierul ""%1"" a fost modificat, dar nu salvat.\n\nDoriți salvarea lor?" + IDS_APPTITLE, "Editorul de font VGA ReactOS" + IDS_CLOSEEDIT, "Închideți mai întâi toate ferestrele de Editare deschise!" IDS_TOOLTIP_NEW, "Nou" - IDS_TOOLTIP_OPEN, "Deschide" - IDS_TOOLTIP_SAVE, "Salvează" - IDS_TOOLTIP_EDIT_GLYPH, "Editează glifă" - IDS_TOOLTIP_COPY, "Copiază" - IDS_TOOLTIP_PASTE, "Lipește" + IDS_TOOLTIP_OPEN, "Deschidere" + IDS_TOOLTIP_SAVE, "Salvare" + IDS_TOOLTIP_EDIT_GLYPH, "Editare a glifei" + IDS_TOOLTIP_COPY, "Copiere" + IDS_TOOLTIP_PASTE, "Lipire" END From 92231340ec071bd7a461d8a941b4cd82b865bc81 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Sat, 7 Dec 2024 09:15:11 +0700 Subject: [PATCH 008/750] [WINMM] PlaySound: Fix user-specific environment variables handling (#7536) Correctly retrieve user-specific environment variables when impersonating. Addendum to commit f18111b64120806529e93404f21b6320f211ec39. CORE-13951 --- dll/win32/winmm/CMakeLists.txt | 2 +- dll/win32/winmm/playsound.c | 60 ++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/dll/win32/winmm/CMakeLists.txt b/dll/win32/winmm/CMakeLists.txt index aca0942d4be1e..2566277f94d7e 100644 --- a/dll/win32/winmm/CMakeLists.txt +++ b/dll/win32/winmm/CMakeLists.txt @@ -30,7 +30,7 @@ endif() set_module_type(winmm win32dll) target_link_libraries(winmm wine ${PSEH_LIB} oldnames) -add_importlibs(winmm advapi32 user32 msvcrt kernel32 ntdll) +add_importlibs(winmm userenv advapi32 user32 msvcrt kernel32 ntdll) add_pch(winmm winemm.h SOURCE) add_cd_file(TARGET winmm DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/winmm/playsound.c b/dll/win32/winmm/playsound.c index df532f05cfd9f..991299a0a7fc8 100644 --- a/dll/win32/winmm/playsound.c +++ b/dll/win32/winmm/playsound.c @@ -26,6 +26,7 @@ #include "winemm.h" #include +#include WINE_DEFAULT_DEBUG_CHANNEL(winmm); @@ -39,6 +40,61 @@ typedef struct tagWINE_PLAYSOUND static WINE_PLAYSOUND *PlaySoundCurrent; static BOOL bPlaySoundStop; +/* An impersonation-aware equivalent of ExpandEnvironmentStringsW */ +static DWORD PlaySound_ExpandEnvironmentStrings(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize) +{ + HANDLE hToken; + DWORD dwError; + DWORD dwLength = 0; + + if (!OpenThreadToken(GetCurrentThread(), + TOKEN_QUERY | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, + TRUE, + &hToken)) + { + dwError = GetLastError(); + + if (dwError == ERROR_NO_TOKEN) + { + /* We are not impersonating, forward this to ExpandEnvironmentStrings */ + return ExpandEnvironmentStringsW(lpSrc, lpDst, nSize); + } + + ERR("OpenThreadToken failed (0x%x)\n", dwError); + return 0; + } + + if (!ExpandEnvironmentStringsForUserW(hToken, lpSrc, lpDst, nSize)) + { + dwError = GetLastError(); + + if (dwError == ERROR_INSUFFICIENT_BUFFER || nSize == 0) + { + /* The buffer is too small, find the required buffer size. + * NOTE: ExpandEnvironmentStringsForUser doesn't support retrieving buffer size. */ + WCHAR szExpanded[1024]; + + if (ExpandEnvironmentStringsForUserW(hToken, lpSrc, szExpanded, ARRAY_SIZE(szExpanded))) + { + /* We success, return the required buffer size */ + dwLength = lstrlenW(szExpanded) + 1; + goto Cleanup; + } + } + + ERR("ExpandEnvironmentStringsForUser failed (0x%x)\n", dwError); + } + else + { + /* We success, return the size of the string */ + dwLength = lstrlenW(lpDst) + 1; + } + +Cleanup: + CloseHandle(hToken); + return dwLength; +} + static HMMIO get_mmioFromFile(LPCWSTR lpszName) { HMMIO ret; @@ -158,7 +214,7 @@ static HMMIO get_mmioFromProfile(UINT uFlags, LPCWSTR lpszName) if (type == REG_EXPAND_SZ) { - count = ExpandEnvironmentStringsW(str, NULL, 0); + count = PlaySound_ExpandEnvironmentStrings(str, NULL, 0); if (count == 0) goto None; @@ -166,7 +222,7 @@ static HMMIO get_mmioFromProfile(UINT uFlags, LPCWSTR lpszName) if (!pszSnd) goto None; - if (ExpandEnvironmentStringsW(str, pszSnd, count) == 0) + if (PlaySound_ExpandEnvironmentStrings(str, pszSnd, count) == 0) { HeapFree(GetProcessHeap(), 0, pszSnd); goto None; From 18c3f39c1866a4b033c151c4731d5d23ba5027bb Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 8 Dec 2024 23:03:30 +0100 Subject: [PATCH 009/750] [SETUPAPI] Implement CM_Set_Class_Registry_PropertyW() The conversion of text SDs to binary SDs is not implemented yet. --- dll/win32/setupapi/cfgmgr.c | 64 +++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index 30a38e811346f..ffef4d5590c63 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -7863,10 +7863,70 @@ CM_Set_Class_Registry_PropertyW( _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine) { - FIXME("CM_Set_Class_Registry_PropertyW(%p %lx %p %lu %lx %p)\n", + RPC_BINDING_HANDLE BindingHandle = NULL; + WCHAR szGuidString[PNP_MAX_GUID_STRING_LEN + 1]; + ULONG ulType = 0; + CONFIGRET ret; + + TRACE("CM_Set_Class_Registry_PropertyW(%p %lx %p %lu %lx %p)\n", ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine); - return CR_CALL_NOT_IMPLEMENTED; + if (ClassGuid == NULL) + return CR_INVALID_POINTER; + + if ((Buffer == NULL) && (ulLength != 0)) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (pSetupStringFromGuid(ClassGuid, + szGuidString, + PNP_MAX_GUID_STRING_LEN) != 0) + return CR_INVALID_DATA; + + if ((ulProperty < CM_CRP_MIN) || (ulProperty > CM_CRP_MAX)) + return CR_INVALID_PROPERTY; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + ulType = GetRegistryPropertyType(ulProperty); + if ((ulType == REG_DWORD) && (ulLength != sizeof(DWORD))) + return CR_INVALID_DATA; + + if (ulProperty == CM_CRP_SECURITY_SDS) + { + FIXME("Conversion from text SD to binary SD is not implemented yet!\n"); + return CR_CALL_NOT_IMPLEMENTED; + } + + RpcTryExcept + { + ret = PNP_SetClassRegProp(BindingHandle, + szGuidString, + ulProperty, + ulType, + (LPBYTE)Buffer, + ulLength, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; } From 77bfc12e0f2a5f59573dae13e1de5d0bc2320799 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Tue, 3 Dec 2024 23:55:11 +0700 Subject: [PATCH 010/750] [WINLOGON] Move logoff flags handling code to HandleLogoff --- base/system/winlogon/sas.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/base/system/winlogon/sas.c b/base/system/winlogon/sas.c index c9675ba314de9..0bb363fd87fe3 100644 --- a/base/system/winlogon/sas.c +++ b/base/system/winlogon/sas.c @@ -786,8 +786,8 @@ DestroyLogoffSecurityAttributes( static NTSTATUS HandleLogoff( - IN OUT PWLSESSION Session, - IN UINT Flags) + _Inout_ PWLSESSION Session, + _In_ DWORD wlxAction) { PLOGOFF_SHUTDOWN_DATA LSData; PSECURITY_ATTRIBUTES psa; @@ -802,7 +802,13 @@ HandleLogoff( ERR("Failed to allocate mem for thread data\n"); return STATUS_NO_MEMORY; } - LSData->Flags = Flags; + + LSData->Flags = EWX_LOGOFF; + if (wlxAction == WLX_SAS_ACTION_FORCE_LOGOFF) + { + LSData->Flags |= EWX_FORCE; + } + LSData->Session = Session; Status = CreateLogoffSecurityAttributes(&psa); @@ -1065,12 +1071,9 @@ DoGenericAction( case WLX_SAS_ACTION_SHUTDOWN_REBOOT: /* 0x0b */ if (Session->LogonState != STATE_LOGGED_OFF) { - UINT LogOffFlags = EWX_LOGOFF; - if (wlxAction == WLX_SAS_ACTION_FORCE_LOGOFF) - LogOffFlags |= EWX_FORCE; if (!Session->Gina.Functions.WlxIsLogoffOk(Session->Gina.Context)) break; - if (!NT_SUCCESS(HandleLogoff(Session, LogOffFlags))) + if (!NT_SUCCESS(HandleLogoff(Session, wlxAction))) { RemoveStatusMessage(Session); break; From 37375fcc4dbe1d7629463d528aa09dad75b4c937 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Wed, 4 Dec 2024 00:19:26 +0700 Subject: [PATCH 011/750] [WINLOGON] Implement shutdown sound support CORE-13951 --- base/system/winlogon/sas.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/base/system/winlogon/sas.c b/base/system/winlogon/sas.c index 0bb363fd87fe3..f00bbf50b18c8 100644 --- a/base/system/winlogon/sas.c +++ b/base/system/winlogon/sas.c @@ -367,13 +367,17 @@ PlayLogonSound( static VOID -PlayLogoffSound( - _In_ PWLSESSION Session) +PlayLogoffShutdownSound( + _In_ PWLSESSION Session, + _In_ BOOL bShutdown) { if (!ImpersonateLoggedOnUser(Session->UserToken)) return; - PlaySoundRoutine(L"WindowsLogoff", FALSE, SND_ALIAS | SND_NODEFAULT); + /* NOTE: Logoff and shutdown sounds play synchronously */ + PlaySoundRoutine(bShutdown ? L"SystemExit" : L"WindowsLogoff", + FALSE, + SND_ALIAS | SND_NODEFAULT); RevertToSelf(); } @@ -848,7 +852,7 @@ HandleLogoff( SwitchDesktop(Session->WinlogonDesktop); - PlayLogoffSound(Session); + PlayLogoffShutdownSound(Session, WLX_SHUTTINGDOWN(wlxAction)); SetWindowStationUser(Session->InteractiveWindowStation, &LuidNone, NULL, 0); From 2557948179d807373705407eca291591041e0b1b Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Wed, 4 Dec 2024 01:00:28 +0700 Subject: [PATCH 012/750] [WINLOGON] Implement startup sound support (HACK) CORE-13951 --- base/system/winlogon/sas.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/base/system/winlogon/sas.c b/base/system/winlogon/sas.c index f00bbf50b18c8..8b169f73df694 100644 --- a/base/system/winlogon/sas.c +++ b/base/system/winlogon/sas.c @@ -285,6 +285,22 @@ PlaySoundRoutine( return Ret; } +static +BOOL +IsFirstLogon(VOID) +{ + /* FIXME: All of this is a HACK, designed specifically for PlayLogonSoundThread. + * Don't call IsFirstLogon multiple times inside the same function. And please + * note that this function is not thread-safe. */ + static BOOL bFirstLogon = TRUE; + if (bFirstLogon) + { + bFirstLogon = FALSE; + return TRUE; + } + return FALSE; +} + DWORD WINAPI PlayLogonSoundThread( @@ -347,7 +363,9 @@ PlayLogonSoundThread( } else { - PlaySoundRoutine(L"WindowsLogon", TRUE, SND_ALIAS | SND_NODEFAULT); + PlaySoundRoutine(IsFirstLogon() ? L"SystemStart" : L"WindowsLogon", + TRUE, + SND_ALIAS | SND_NODEFAULT); RevertToSelf(); } return 0; From 4d9f67c79b1f23b3dbbdd80f6702df88febca6b1 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Thu, 5 Dec 2024 12:17:24 +0700 Subject: [PATCH 013/750] [REACTOS] Rename ReactOS_LogOn.wav to ReactOS_Startup.wav CORE-13951 --- boot/bootdata/hivedef.inf | 8 ++++---- media/sounds/CMakeLists.txt | 2 +- .../{ReactOS_LogOn.wav => ReactOS_Startup.wav} | Bin 3 files changed, 5 insertions(+), 5 deletions(-) rename media/sounds/{ReactOS_LogOn.wav => ReactOS_Startup.wav} (100%) diff --git a/boot/bootdata/hivedef.inf b/boot/bootdata/hivedef.inf index 6ca744345cc69..6f4b78d8ab6d4 100644 --- a/boot/bootdata/hivedef.inf +++ b/boot/bootdata/hivedef.inf @@ -2076,14 +2076,14 @@ HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion",,0x00000012 HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current","",0x00020000,"" HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default","",0x00020000,"" HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_Startup.wav" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_Startup.wav" HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff",,0x00000012 HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current","",0x00020000,"" HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default","",0x00020000,"" HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"" HKCU,"AppEvents\Schemes\Apps\Explorer","",0x00000002,"ReactOS Explorer" HKCU,"AppEvents\Schemes\Apps\Explorer","DispFileName",0x00000000,"@mmsys.cpl,-5854" HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin",,0x00000012 diff --git a/media/sounds/CMakeLists.txt b/media/sounds/CMakeLists.txt index 03da1c51adce1..952de0b9353e0 100644 --- a/media/sounds/CMakeLists.txt +++ b/media/sounds/CMakeLists.txt @@ -1,5 +1,5 @@ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ReactOS_Critical_Stop.wav DESTINATION reactos/media FOR all) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ReactOS_LogOn.wav DESTINATION reactos/media FOR all) +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ReactOS_Startup.wav DESTINATION reactos/media FOR all) add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ReactOS_Notify.wav DESTINATION reactos/media FOR all) add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ReactOS_Recycle.wav DESTINATION reactos/media FOR all) diff --git a/media/sounds/ReactOS_LogOn.wav b/media/sounds/ReactOS_Startup.wav similarity index 100% rename from media/sounds/ReactOS_LogOn.wav rename to media/sounds/ReactOS_Startup.wav From 01a10da73d8281fc77865d751d62369c28e13772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 9 Dec 2024 13:42:44 +0100 Subject: [PATCH 014/750] [VIDEOPRT] VideoPortInitialize(): Display the invalid and expected struct sizes on error --- win32ss/drivers/videoprt/videoprt.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/win32ss/drivers/videoprt/videoprt.c b/win32ss/drivers/videoprt/videoprt.c index 97c5290b76fcb..53e158ab6958a 100644 --- a/win32ss/drivers/videoprt/videoprt.c +++ b/win32ss/drivers/videoprt/videoprt.c @@ -794,7 +794,11 @@ VideoPortInitialize( break; default: - ERR_(VIDEOPRT, "Invalid HwInitializationData size.\n"); + ERR_(VIDEOPRT, "Invalid HwInitializationData size %lu (expected %lu, %lu or %lu)\n", + HwInitializationData->HwInitDataSize, + SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA, + SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA, + sizeof(VIDEO_HW_INITIALIZATION_DATA)); return STATUS_UNSUCCESSFUL; } From b667d82f0bd7a0be6c0e4ece3dd77f530976bee8 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 9 Dec 2024 21:53:08 +0100 Subject: [PATCH 015/750] [SETUPAPI] Implement CM_Set_Class_Registry_PropertyA() --- dll/win32/setupapi/cfgmgr.c | 71 +++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index ffef4d5590c63..bfd1da4a5f71f 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -7843,10 +7843,77 @@ CM_Set_Class_Registry_PropertyA( _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine) { - FIXME("CM_Set_Class_Registry_PropertyA(%p %lx %p %lu %lx %p)\n", + LPWSTR lpBuffer; + ULONG ulType; + CONFIGRET ret; + + TRACE("CM_Set_Class_Registry_PropertyA(%p %lx %p %lu %lx %p)\n", ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine); - return CR_CALL_NOT_IMPLEMENTED; + if (ClassGuid == NULL) + return CR_INVALID_POINTER; + + if ((Buffer == NULL) && (ulLength != 0)) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (Buffer == NULL) + { + ret = CM_Set_Class_Registry_PropertyW(ClassGuid, + ulProperty, + Buffer, + ulLength, + ulFlags, + hMachine); + } + else + { + /* Get property type */ + ulType = GetRegistryPropertyType(ulProperty); + + /* Allocate buffer if needed */ + if ((ulType == REG_SZ) || (ulType == REG_MULTI_SZ)) + { + lpBuffer = MyMalloc(ulLength * sizeof(WCHAR)); + if (lpBuffer == NULL) + { + ret = CR_OUT_OF_MEMORY; + } + else + { + if (!MultiByteToWideChar(CP_ACP, 0, Buffer, + ulLength, lpBuffer, ulLength)) + { + MyFree(lpBuffer); + ret = CR_FAILURE; + } + else + { + ret = CM_Set_Class_Registry_PropertyW(ClassGuid, + ulProperty, + lpBuffer, + ulLength * sizeof(WCHAR), + ulFlags, + hMachine); + MyFree(lpBuffer); + } + } + } + else + { + ret = CM_Set_Class_Registry_PropertyW(ClassGuid, + ulProperty, + Buffer, + ulLength, + ulFlags, + hMachine); + } + + } + + return ret; } From e897a5654d0951311b9745d05f377d4685dc05ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Zouzal=C3=ADk?= Date: Mon, 18 Nov 2024 22:51:22 +0100 Subject: [PATCH 016/750] [ACPPAGE] Update German (de-DE) translation --- dll/shellext/acppage/lang/de-DE.rc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dll/shellext/acppage/lang/de-DE.rc b/dll/shellext/acppage/lang/de-DE.rc index a1232a3c17a76..352ae5699cec7 100644 --- a/dll/shellext/acppage/lang/de-DE.rc +++ b/dll/shellext/acppage/lang/de-DE.rc @@ -1,3 +1,14 @@ +/* + * PROJECT: ReactOS Compatibility Layer Shell Extension + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: German resource file + * TRANSLATORS: Copyright 2005 Klemens Friedl + * Copyright 2013 Daniel Reimer + * Copyright 2014 Zehnvor + * Copyright 2017 Robert Naumann + * Copyright 2024 Václav Zouzalík (Venca24) + */ + LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL IDD_ACPPAGESHEET DIALOGEX 0, 0, 224, 226 @@ -30,8 +41,8 @@ BEGIN PUSHBUTTON "<",IDC_REMOVE,144,60,18,14,WS_DISABLED PUSHBUTTON "&OK",IDOK,174,114,60,14 PUSHBUTTON "&Abbrechen",IDCANCEL,240,114,60,14 - LTEXT "Available modes",-1,6,6,52,8 - LTEXT "Selected modes",-1,168,6,51,8 + LTEXT "Verfügbare Modi",-1,6,6,53,8 + LTEXT "Ausgewählte Modi",-1,168,6,58,8 END STRINGTABLE From 34e76ade03659b419b36058c402c12128e9daac1 Mon Sep 17 00:00:00 2001 From: Daniel Victor Date: Fri, 22 Nov 2024 11:16:17 -0300 Subject: [PATCH 017/750] [FREELDR] Make it more compatible with w2k3 ini file --- boot/freeldr/freeldr/lib/inifile/ini_init.c | 11 +++++-- boot/freeldr/freeldr/settings.c | 33 +++++++++++++++++---- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/boot/freeldr/freeldr/lib/inifile/ini_init.c b/boot/freeldr/freeldr/lib/inifile/ini_init.c index 9992b0b715129..4596eac759fbd 100644 --- a/boot/freeldr/freeldr/lib/inifile/ini_init.c +++ b/boot/freeldr/freeldr/lib/inifile/ini_init.c @@ -38,8 +38,15 @@ BOOLEAN IniFileInitialize(VOID) if (Status != ESUCCESS) { ERR("Error while opening freeldr.ini, Status: %d\n", Status); - UiMessageBoxCritical("Error opening freeldr.ini or file not found.\nYou need to re-install FreeLoader."); - return FALSE; + + /* Try to open boot.ini */ + Status = FsOpenFile("boot.ini", FrLdrBootPath, OpenReadOnly, &FileId); + if (Status != ESUCCESS) + { + ERR("Error while opening boot.ini, Status: %d\n", Status); + UiMessageBoxCritical("Error opening freeldr.ini/boot.ini or file not found.\nYou need to re-install FreeLoader."); + return FALSE; + } } /* Get the file size */ diff --git a/boot/freeldr/freeldr/settings.c b/boot/freeldr/freeldr/settings.c index 7f1e44e51af2b..fdf284c460ca1 100644 --- a/boot/freeldr/freeldr/settings.c +++ b/boot/freeldr/freeldr/settings.c @@ -126,12 +126,35 @@ LoadSettings( return; } - /* Open the [FreeLoader] section and load the settings */ - if ((BootMgrInfo.FrLdrSection == 0) && - !IniOpenSection("FreeLoader", &BootMgrInfo.FrLdrSection)) + BOOLEAN FoundLoaderSection = FALSE; + PCSTR LoaderSections[] = { + "FreeLoader", + "Boot Loader", + "FlexBoot", + "MultiBoot", + }; + + /* Search for the first section in LoaderSections and load the settings, + * prioritizing the order in the file. + * If a section is already loaded, skip further checks. */ + if (!BootMgrInfo.FrLdrSection) { - UiMessageBoxCritical("Section [FreeLoader] not found in freeldr.ini"); - return; + for (ULONG i = 0; i < sizeof(LoaderSections) / sizeof(LoaderSections[0]); i++) + { + PCSTR Section = LoaderSections[i]; + + if (IniOpenSection(Section, &BootMgrInfo.FrLdrSection)) + { + FoundLoaderSection = TRUE; + break; + } + } + + if (!FoundLoaderSection) + { + UiMessageBoxCritical("Bootloader Section not found in freeldr.ini"); + return; + } } /* Get the debug string. Always override it with the one from freeldr.ini */ From d936dba7ff2731fb78f39c5e059149ad51841325 Mon Sep 17 00:00:00 2001 From: Ratin Gao Date: Sun, 8 Dec 2024 08:14:55 +0800 Subject: [PATCH 018/750] [REACTOS] Fix 'seperate' typos --- dll/win32/shell32/lang/ca-ES.rc | 2 +- dll/win32/shell32/lang/da-DK.rc | 2 +- dll/win32/shell32/lang/en-GB.rc | 2 +- dll/win32/shell32/lang/en-US.rc | 2 +- dll/win32/shell32/lang/fi-FI.rc | 2 +- dll/win32/shell32/lang/ko-KR.rc | 2 +- dll/win32/shell32/lang/nl-NL.rc | 2 +- dll/win32/shell32/lang/sl-SI.rc | 2 +- modules/rostests/apitests/ntdll/RtlQueryTimeZoneInfo.c | 2 +- ntoskrnl/cache/section/data.c | 2 +- ntoskrnl/cache/section/fault.c | 4 ++-- sdk/tools/mkisofs/CMakeLists.txt | 2 +- win32ss/gdi/dib/dib32bpp.c | 2 +- 13 files changed, 14 insertions(+), 14 deletions(-) diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc index 518dd4329d67b..50088b84052e0 100644 --- a/dll/win32/shell32/lang/ca-ES.rc +++ b/dll/win32/shell32/lang/ca-ES.rc @@ -216,7 +216,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Abort", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc index 7ba29c63939b1..7cb598194ad42 100644 --- a/dll/win32/shell32/lang/da-DK.rc +++ b/dll/win32/shell32/lang/da-DK.rc @@ -223,7 +223,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Abort", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc index 7d3e5ef59a8e4..5c7426cba7305 100644 --- a/dll/win32/shell32/lang/en-GB.rc +++ b/dll/win32/shell32/lang/en-GB.rc @@ -216,7 +216,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorised program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Abort", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc index e8195754991bb..be1df9decac4a 100644 --- a/dll/win32/shell32/lang/en-US.rc +++ b/dll/win32/shell32/lang/en-US.rc @@ -216,7 +216,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Cancel", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc index 6243ce5615350..1d7a4be529fca 100644 --- a/dll/win32/shell32/lang/fi-FI.rc +++ b/dll/win32/shell32/lang/fi-FI.rc @@ -216,7 +216,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Abort", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc index 2e4478491baa2..b702a01f108d3 100644 --- a/dll/win32/shell32/lang/ko-KR.rc +++ b/dll/win32/shell32/lang/ko-KR.rc @@ -223,7 +223,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "확인", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "중단", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc index f3c20c78acc43..4ffb90d81eb05 100644 --- a/dll/win32/shell32/lang/nl-NL.rc +++ b/dll/win32/shell32/lang/nl-NL.rc @@ -216,7 +216,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Abort", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc index 516ea2483f233..40013522a90da 100644 --- a/dll/win32/shell32/lang/sl-SI.rc +++ b/dll/win32/shell32/lang/sl-SI.rc @@ -216,7 +216,7 @@ BEGIN LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 CHECKBOX "Run with different credentials", IDC_SHORTEX_RUN_DIFFERENT, 25, 50, 150, 10 LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED + CHECKBOX "Run in separate memory space", IDC_SHORTEX_RUN_SEPARATE, 25, 100, 150, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 63, 124, 50, 15, WS_VISIBLE PUSHBUTTON "Abort", IDCANCEL, 120, 124, 50, 15, WS_VISIBLE END diff --git a/modules/rostests/apitests/ntdll/RtlQueryTimeZoneInfo.c b/modules/rostests/apitests/ntdll/RtlQueryTimeZoneInfo.c index cd645a4c5a759..ed2d8d12876ac 100644 --- a/modules/rostests/apitests/ntdll/RtlQueryTimeZoneInfo.c +++ b/modules/rostests/apitests/ntdll/RtlQueryTimeZoneInfo.c @@ -30,7 +30,7 @@ typedef struct _RTL_SYSTEM_TIME { /* * RTL_TIME_ZONE_INFORMATION is the same as the TIME_ZONE_INFORMATION structure * defined in winbase.h, however we need to define RTL_TIME_ZONE_INFORMATION - * seperately here so we don't depend on winbase.h. + * separately here so we don't depend on winbase.h. * This is used by RtlQueryTimeZoneInformation and RtlSetTimeZoneInformation. */ typedef struct _RTL_TIME_ZONE_INFORMATION { diff --git a/ntoskrnl/cache/section/data.c b/ntoskrnl/cache/section/data.c index 3b4aafac89f57..b9afadb1fdf61 100644 --- a/ntoskrnl/cache/section/data.c +++ b/ntoskrnl/cache/section/data.c @@ -60,7 +60,7 @@ of this change is that a mapping of a small files takes a bit more than 1/4 of the size in nonpaged kernel space as it did previously. When we need other threads that may be competing for the same page fault to -wait, we have a mechanism seperate from PageOps for dealing with that, which +wait, we have a mechanism separate from PageOps for dealing with that, which was suggested by Travis Geiselbrecht after a conversation I had with Alex Ionescu. That mechanism is the MM_WAIT_ENTRY, which is the all-ones SWAPENTRY. diff --git a/ntoskrnl/cache/section/fault.c b/ntoskrnl/cache/section/fault.c index e869dac88fb7b..10fc379d48df7 100644 --- a/ntoskrnl/cache/section/fault.c +++ b/ntoskrnl/cache/section/fault.c @@ -498,7 +498,7 @@ MmpFaultWorker(PVOID Parameter) /* -This code seperates the action of fault handling into an upper and lower +This code separates the action of fault handling into an upper and lower handler to allow the inner handler to optionally be called in work item if the stack is getting too deep. My experiments show that the third recursive page fault taken at PASSIVE_LEVEL must be shunted away to a @@ -739,7 +739,7 @@ MmAccessFaultCacheSection(KPROCESSOR_MODE Mode, /* -As above, this code seperates the active part of fault handling from a carrier +As above, this code separates the active part of fault handling from a carrier that can use the thread's active fault count to determine whether a work item is required. Also as above, this function repeatedly calls the active not present fault handler until a clear success or failure is received, using a diff --git a/sdk/tools/mkisofs/CMakeLists.txt b/sdk/tools/mkisofs/CMakeLists.txt index 840e837f61132..6674d1f5c4a48 100644 --- a/sdk/tools/mkisofs/CMakeLists.txt +++ b/sdk/tools/mkisofs/CMakeLists.txt @@ -11,7 +11,7 @@ include_directories( ${REACTOS_BINARY_DIR}/sdk/include) # libschily and libsiconv are licensed under CDDL whereas mkisofs is licensed under GPL. -# As such, we cannot mix the library sources with mkisofs sources and have to build them seperately. +# As such, we cannot mix the library sources with mkisofs sources and have to build them separately. # Later on, they may still be linked together though. # # Reference: http://opensource.stackexchange.com/questions/2094 diff --git a/win32ss/gdi/dib/dib32bpp.c b/win32ss/gdi/dib/dib32bpp.c index 2b752556cda03..5cbec6bdd828c 100644 --- a/win32ss/gdi/dib/dib32bpp.c +++ b/win32ss/gdi/dib/dib32bpp.c @@ -614,7 +614,7 @@ DIB_32BPP_BitBltSrcCopy(PBLTINFO BltInfo) * Then we do a flip in place at the destination location and we are done. */ if ((BltInfo->SourcePoint.y != BltInfo->DestRect.top) && // The values are not equal and - (abs(BltInfo->SourcePoint.y - BltInfo->DestRect.top) < (DestHeight + 2)) && // they are NOT seperated by > DestHeight + (abs(BltInfo->SourcePoint.y - BltInfo->DestRect.top) < (DestHeight + 2)) && // they are NOT separated by > DestHeight (BltInfo->SourceSurface->pvScan0 == BltInfo->DestSurface->pvScan0)) // and same surface (probably screen) { DPRINT("Flips Need Adjustments, so do move here.\n"); From 0540c212eae4c42c66abbac41e9469e35dd44c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Vesel=C3=BD?= Date: Wed, 11 Dec 2024 20:58:15 +0100 Subject: [PATCH 019/750] [USER32_APITEST] Improve RedrawWindow API test. Follow up of #7160 (#7297) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * extension-RedrawWindow-apitest-by-flags-update Co-authored-by: Hermès BÉLUSCA - MAÏTO --- .../rostests/apitests/user32/RedrawWindow.c | 268 +++++++++--------- 1 file changed, 135 insertions(+), 133 deletions(-) diff --git a/modules/rostests/apitests/user32/RedrawWindow.c b/modules/rostests/apitests/user32/RedrawWindow.c index c5ce8d333f42a..a36b6291e2a87 100644 --- a/modules/rostests/apitests/user32/RedrawWindow.c +++ b/modules/rostests/apitests/user32/RedrawWindow.c @@ -34,7 +34,7 @@ WndProc( return DefWindowProcW(hWnd, message, wParam, lParam); } -void GetMessageRedrawWindowTest() +void GetMessageRedrawWindowTest(void) { HWND hWnd; MSG msg; @@ -52,9 +52,9 @@ void GetMessageRedrawWindowTest() ShowWindow(hWnd, SW_SHOW); - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) + while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { - DispatchMessageA( &msg ); + DispatchMessageW(&msg); } ok(got_paint == TRUE, "Did not process WM_PAINT message\n"); @@ -66,7 +66,7 @@ void GetMessageRedrawWindowTest() ok(ret == TRUE, "RedrawWindow failed\n"); i = 0; - while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) + while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { RECORD_MESSAGE(1, msg.message, POST, 0, 0); if (msg.message == WM_PAINT) @@ -79,7 +79,7 @@ void GetMessageRedrawWindowTest() } if (msg.message != WM_PAINT || i >= 10) { - DispatchMessageA( &msg ); + DispatchMessageW(&msg); } } @@ -136,12 +136,13 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return 0; } } - return DefWindowProc(hwnd, uMsg, wParam, lParam); + return DefWindowProcW(hwnd, uMsg, wParam, lParam); } LRESULT CALLBACK ChildWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - switch (uMsg) { + switch (uMsg) + { case WM_SYNCPAINT: { PAINTSTRUCT ps; @@ -168,7 +169,7 @@ LRESULT CALLBACK ChildWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPa return 0; } } - return DefWindowProc(hwnd, uMsg, wParam, lParam); + return DefWindowProcW(hwnd, uMsg, wParam, lParam); } typedef struct STRUCT_TestRedrawWindow @@ -223,10 +224,10 @@ void ServeSomeMessages(int messageTime, int messageCount) startTime = GetTickCount(); while (GetTickCount() - startTime < messageTime * messageCount) { - if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + if (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); - DispatchMessage(&msg); + DispatchMessageW(&msg); } else { @@ -235,7 +236,8 @@ void ServeSomeMessages(int messageTime, int messageCount) } } -void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { +void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) +{ DWORD style; int width; int height; @@ -252,7 +254,7 @@ void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { wc.hInstance = GetModuleHandle(NULL); wc.lpszClassName = ptestRW->testName; RegisterClassW(&wc); - RECT rectWin = { 0, 0, 800, 600 }; + RECT rectWin = { 0, 0, 700, 500 }; style = WS_OVERLAPPEDWINDOW; AdjustWindowRectEx(&rectWin, style, FALSE, 0); width = rectWin.right - rectWin.left; @@ -261,6 +263,7 @@ void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { CW_USEDEFAULT, CW_USEDEFAULT, width, height, NULL, NULL, GetModuleHandle(NULL), NULL); if (hwnd == NULL) return; + MoveWindow(hwnd, 10, 10, width, height, TRUE); ShowWindow(hwnd, SW_SHOW); if(!ptestRW->testChild) @@ -285,10 +288,12 @@ void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { GetModuleHandle(NULL), NULL ); + if (hChildWnd == NULL) + return; } HDC hdc = GetDC(hwnd); - RECT drect = { 0, 0, 800, 600 }; + RECT drect = { 0, 0, 700, 500 }; DrawContent(hdc, &drect, RGB(255, 0, 0)); ReleaseDC(hwnd, hdc); @@ -298,7 +303,7 @@ void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { RgnUpdate = CreateRectRgn(ptestRW->regRect.left, ptestRW->regRect.top, ptestRW->regRect.right, ptestRW->regRect.bottom); } - prect=NULL; + prect = NULL; if (ptestRW->useRect) { prect = &ptestRW->rectRect; @@ -337,7 +342,8 @@ void TestRedrawWindow(STRUCT_TestRedrawWindow* ptestRW) { ptestRW->resultWmNcPaint = resultWmNcPaint; ptestRW->resultPaintIndex = paintIndex; - if (RgnUpdate) DeleteObject(RgnUpdate); + if (RgnUpdate) + DeleteObject(RgnUpdate); if (hChildWnd != NULL) DestroyWindow(hChildWnd); @@ -425,14 +431,7 @@ UINT TestRedrawWindow2(STRUCT_TestRedrawWindow* ptestRW, STRUCT_TestRedrawWindow return countErrors; } -void InitRect(RECT *rect, int left, int top, int right, int bottom) { - rect->left = left; - rect->top = top; - rect->right = right; - rect->bottom = bottom; -} - -void FlagsRedrawWindowTest() +void FlagsRedrawWindowTest(void) { STRUCT_TestRedrawWindow testRW; STRUCT_TestRedrawWindowCompare testRWcompare; @@ -440,19 +439,22 @@ void FlagsRedrawWindowTest() testRW.testPixelPre1x = 50; testRW.testPixelPre1y = 50; testRW.testPixelPre2x = 50; - testRW.testPixelPre2y = 550; + testRW.testPixelPre2y = 400; testRW.testPixelPost1x = 50; testRW.testPixelPost1y = 50; testRW.testPixelPost2x = 50; - testRW.testPixelPost2y = 550; + testRW.testPixelPost2y = 400; + + trace("Screen Width/Height (%dx%d)\n", + GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); // RDW_ERASE tests testRW.testName = L"Test1"; testRW.flags = 0; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -460,7 +462,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); + SetRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -470,9 +472,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test2"; testRW.flags = RDW_ERASE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -480,7 +482,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); + SetRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -490,9 +492,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test3"; testRW.flags = RDW_INVALIDATE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -500,7 +502,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -510,9 +512,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test4"; testRW.flags = RDW_INVALIDATE | RDW_ERASE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -520,7 +522,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = TRUE; testRWcompare.resultWmNcPaint = FALSE; @@ -531,9 +533,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test5"; testRW.flags = RDW_FRAME; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -541,7 +543,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -551,9 +553,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test6"; testRW.flags = RDW_INVALIDATE | RDW_FRAME; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -561,7 +563,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = TRUE; @@ -572,9 +574,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test7"; testRW.flags = RDW_INTERNALPAINT; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -582,7 +584,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -592,9 +594,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test8"; testRW.flags = RDW_INVALIDATE | RDW_INTERNALPAINT; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -602,7 +604,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -613,9 +615,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test9"; testRW.flags = RDW_NOERASE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -623,7 +625,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -633,9 +635,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test10"; testRW.flags = RDW_INVALIDATE | RDW_NOERASE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -643,7 +645,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -653,9 +655,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test11"; testRW.flags = RDW_NOERASE | RDW_ERASE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -663,7 +665,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -673,9 +675,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test12"; testRW.flags = RDW_INVALIDATE | RDW_NOERASE | RDW_ERASE; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -683,7 +685,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = TRUE; testRWcompare.resultWmNcPaint = FALSE; @@ -694,9 +696,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test13"; testRW.flags = RDW_NOFRAME; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -704,7 +706,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -714,9 +716,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test14"; testRW.flags = RDW_INVALIDATE | RDW_NOFRAME; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -724,7 +726,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -734,9 +736,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test15"; testRW.flags = RDW_INVALIDATE | RDW_VALIDATE | RDW_NOFRAME; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -744,7 +746,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -754,9 +756,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test16"; testRW.flags = RDW_VALIDATE | RDW_NOFRAME; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -764,7 +766,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -775,9 +777,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test17"; testRW.flags = RDW_NOINTERNALPAINT; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -785,7 +787,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -795,9 +797,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test18"; testRW.flags = RDW_INVALIDATE | RDW_NOINTERNALPAINT; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -805,7 +807,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -815,9 +817,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test19"; testRW.flags = RDW_VALIDATE | RDW_NOINTERNALPAINT; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -825,7 +827,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -836,9 +838,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test20"; testRW.flags = RDW_ERASENOW; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -846,7 +848,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -856,9 +858,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test21"; testRW.flags = RDW_INVALIDATE | RDW_ERASENOW; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -866,7 +868,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -876,9 +878,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test22"; testRW.flags = RDW_VALIDATE | RDW_ERASENOW; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -886,7 +888,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -897,9 +899,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test23"; testRW.flags = RDW_UPDATENOW; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -907,7 +909,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -917,9 +919,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test24"; testRW.flags = RDW_INVALIDATE | RDW_UPDATENOW; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -927,7 +929,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -937,9 +939,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test25"; testRW.flags = RDW_VALIDATE | RDW_UPDATENOW; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -947,7 +949,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -958,9 +960,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test26"; testRW.flags = RDW_NOCHILDREN; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -968,7 +970,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -978,9 +980,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test27"; testRW.flags = RDW_INVALIDATE | RDW_NOCHILDREN; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -988,7 +990,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x0000FF00; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -998,9 +1000,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test28"; testRW.flags = RDW_VALIDATE | RDW_NOCHILDREN; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1008,7 +1010,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1018,9 +1020,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test29"; testRW.flags = RDW_ALLCHILDREN; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1028,7 +1030,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1038,9 +1040,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test30"; testRW.flags = RDW_INVALIDATE | RDW_ALLCHILDREN; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1048,7 +1050,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPre1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1058,9 +1060,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test31"; testRW.flags = RDW_VALIDATE | RDW_ALLCHILDREN; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1068,7 +1070,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1078,9 +1080,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test32"; testRW.flags = RDW_NOCHILDREN; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1088,7 +1090,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1098,9 +1100,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test33"; testRW.flags = RDW_INVALIDATE | RDW_NOCHILDREN; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1108,7 +1110,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPre1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1118,9 +1120,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test34"; testRW.flags = RDW_VALIDATE | RDW_NOCHILDREN; testRW.useRegion = TRUE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = FALSE; - InitRect(&testRW.rectRect, 0, 0, 200, 200); + SetRect(&testRW.rectRect, 0, 0, 200, 200); testRW.forcePaint = TRUE; testRW.testChild = TRUE; @@ -1128,7 +1130,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x0000FF00; testRWcompare.resultColorPost1 = 0x00FF0000; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1139,9 +1141,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test35"; testRW.flags = 0; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = TRUE; - InitRect(&testRW.rectRect, 0, 500, 800, 600); + SetRect(&testRW.rectRect, 0, 300, 700, 500); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -1149,7 +1151,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x000000FF; - InitRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); + SetRect(&testRWcompare.resultUpdateRect, 0, 0, 200, 200); testRWcompare.resultNeedsUpdate = FALSE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; @@ -1159,9 +1161,9 @@ void FlagsRedrawWindowTest() testRW.testName = L"Test36"; testRW.flags = RDW_INVALIDATE | RDW_ERASENOW; testRW.useRegion = FALSE; - InitRect(&testRW.regRect, 0, 500, 800, 600); + SetRect(&testRW.regRect, 0, 300, 700, 500); testRW.useRect = TRUE; - InitRect(&testRW.rectRect, 0, 500, 800, 600); + SetRect(&testRW.rectRect, 0, 300, 700, 500); testRW.forcePaint = TRUE; testRW.testChild = FALSE; @@ -1169,7 +1171,7 @@ void FlagsRedrawWindowTest() testRWcompare.resultColorPre2 = 0x000000FF; testRWcompare.resultColorPost1 = 0x000000FF; testRWcompare.resultColorPost2 = 0x0000FF00; - InitRect(&testRWcompare.resultUpdateRect, 0, 500, 800, 600); + SetRect(&testRWcompare.resultUpdateRect, 0, 300, 700, 500); testRWcompare.resultNeedsUpdate = TRUE; testRWcompare.resultWmEraseGnd = FALSE; testRWcompare.resultWmNcPaint = FALSE; From b96e648019152e20f984bdb1dab11167ab0b1722 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 14 Dec 2024 13:52:55 +0100 Subject: [PATCH 020/750] [SETUPAPI] CM_Set_Class_Registry_PropertyW: Implement SD conversion Convert text SD to binary SD for the CM_CRP_SECURITY_SDS property. --- dll/win32/setupapi/cfgmgr.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index bfd1da4a5f71f..0444611c1840a 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -7933,6 +7933,8 @@ CM_Set_Class_Registry_PropertyW( RPC_BINDING_HANDLE BindingHandle = NULL; WCHAR szGuidString[PNP_MAX_GUID_STRING_LEN + 1]; ULONG ulType = 0; + PSECURITY_DESCRIPTOR pSecurityDescriptor = NULL; + ULONG SecurityDescriptorSize = 0; CONFIGRET ret; TRACE("CM_Set_Class_Registry_PropertyW(%p %lx %p %lu %lx %p)\n", @@ -7973,8 +7975,19 @@ CM_Set_Class_Registry_PropertyW( if (ulProperty == CM_CRP_SECURITY_SDS) { - FIXME("Conversion from text SD to binary SD is not implemented yet!\n"); - return CR_CALL_NOT_IMPLEMENTED; + if (!ConvertStringSecurityDescriptorToSecurityDescriptorW((LPCWSTR)Buffer, + SDDL_REVISION_1, + &pSecurityDescriptor, + &SecurityDescriptorSize)) + { + ERR("ConvertStringSecurityDescriptorToSecurityDescriptorW() failed (Error %lu)\n", GetLastError()); + return CR_INVALID_DATA; + } + + Buffer = (PCVOID)pSecurityDescriptor; + ulLength = SecurityDescriptorSize; + ulProperty = CM_CRP_SECURITY; + ulType = REG_BINARY; } RpcTryExcept @@ -7993,6 +8006,9 @@ CM_Set_Class_Registry_PropertyW( } RpcEndExcept; + if (pSecurityDescriptor) + LocalFree(pSecurityDescriptor); + return ret; } From 4795177ced1da7d33a72b652a6ebfaee3ce2612b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 13 Dec 2024 22:33:26 +0100 Subject: [PATCH 021/750] [DRIVERS] Fix misusages of the RTL_REGISTRY_OPTIONAL flag. See https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-rtlqueryregistryvalues The RTL_REGISTRY_OPTIONAL applies to the first parameter of the RtlQueryRegistryValues() function, not to the Flags member of the table entries. However, a RTL_QUERY_REGISTRY_REQUIRED flag exists to mark values whose existence is NOT optional. Problematic usage was introduced in the following modules: drivers/input/i8042prt: Commit e7e959fb0 (r30000) drivers/input/kbdclass: Commit 5a77f871d (r18911) drivers/input/mouclass: Commit aeeab7d1f (r18906) drivers/input/sermouse: Commit 3f348259c (r19100) rosapps/drivers/green : Commit c8a90f769 (r21165) --- drivers/input/i8042prt/registry.c | 32 ++++++++++++++-------------- drivers/input/kbdclass/kbdclass.c | 8 +++---- drivers/input/mouclass/mouclass.c | 8 +++---- drivers/input/sermouse/sermouse.c | 4 ++-- modules/rosapps/drivers/green/misc.c | 8 +++---- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/drivers/input/i8042prt/registry.c b/drivers/input/i8042prt/registry.c index 48b6ebfd234fa..9a675daa7427d 100644 --- a/drivers/input/i8042prt/registry.c +++ b/drivers/input/i8042prt/registry.c @@ -55,105 +55,105 @@ ReadRegistryEntries( Parameters[0].Flags = RTL_QUERY_REGISTRY_SUBKEY; Parameters[0].Name = L"Parameters"; - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[1].Name = L"KeyboardDataQueueSize"; Parameters[1].EntryContext = &Settings->KeyboardDataQueueSize; Parameters[1].DefaultType = REG_DWORD; Parameters[1].DefaultData = &DefaultKeyboardDataQueueSize; Parameters[1].DefaultLength = sizeof(ULONG); - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[2].Name = L"KeyboardDeviceBaseName"; Parameters[2].EntryContext = &Settings->KeyboardDeviceBaseName; Parameters[2].DefaultType = REG_SZ; Parameters[2].DefaultData = (PVOID)DefaultKeyboardDeviceBaseName; Parameters[2].DefaultLength = 0; - Parameters[3].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[3].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[3].Name = L"MouseDataQueueSize"; Parameters[3].EntryContext = &Settings->MouseDataQueueSize; Parameters[3].DefaultType = REG_DWORD; Parameters[3].DefaultData = &DefaultMouseDataQueueSize; Parameters[3].DefaultLength = sizeof(ULONG); - Parameters[4].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[4].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[4].Name = L"MouseResolution"; Parameters[4].EntryContext = &Settings->MouseResolution; Parameters[4].DefaultType = REG_DWORD; Parameters[4].DefaultData = &DefaultMouseResolution; Parameters[4].DefaultLength = sizeof(ULONG); - Parameters[5].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[5].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[5].Name = L"MouseSynchIn100ns"; Parameters[5].EntryContext = &Settings->MouseSynchIn100ns; Parameters[5].DefaultType = REG_DWORD; Parameters[5].DefaultData = &DefaultMouseSynchIn100ns; Parameters[5].DefaultLength = sizeof(ULONG); - Parameters[6].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[6].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[6].Name = L"NumberOfButtons"; Parameters[6].EntryContext = &Settings->NumberOfButtons; Parameters[6].DefaultType = REG_DWORD; Parameters[6].DefaultData = &DefaultNumberOfButtons; Parameters[6].DefaultLength = sizeof(ULONG); - Parameters[7].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[7].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[7].Name = L"PointerDeviceBaseName"; Parameters[7].EntryContext = &Settings->PointerDeviceBaseName; Parameters[7].DefaultType = REG_SZ; Parameters[7].DefaultData = (PVOID)DefaultPointerDeviceBaseName; Parameters[7].DefaultLength = 0; - Parameters[8].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[8].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[8].Name = L"PollStatusIterations"; Parameters[8].EntryContext = &Settings->PollStatusIterations; Parameters[8].DefaultType = REG_DWORD; Parameters[8].DefaultData = &DefaultPollStatusIterations; Parameters[8].DefaultLength = sizeof(ULONG); - Parameters[9].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[9].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[9].Name = L"OverrideKeyboardType"; Parameters[9].EntryContext = &Settings->OverrideKeyboardType; Parameters[9].DefaultType = REG_DWORD; Parameters[9].DefaultData = &DefaultOverrideKeyboardType; Parameters[9].DefaultLength = sizeof(ULONG); - Parameters[10].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[10].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[10].Name = L"OverrideKeyboardSubtype"; Parameters[10].EntryContext = &Settings->OverrideKeyboardSubtype; Parameters[10].DefaultType = REG_DWORD; Parameters[10].DefaultData = &DefaultOverrideKeyboardSubtype; Parameters[10].DefaultLength = sizeof(ULONG); - Parameters[11].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[11].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[11].Name = L"PollingIterations"; Parameters[11].EntryContext = &Settings->PollingIterations; Parameters[11].DefaultType = REG_DWORD; Parameters[11].DefaultData = &DefaultPollingIterations; Parameters[11].DefaultLength = sizeof(ULONG); - Parameters[12].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[12].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[12].Name = L"PollingIterationsMaximum"; Parameters[12].EntryContext = &Settings->PollingIterationsMaximum; Parameters[12].DefaultType = REG_DWORD; Parameters[12].DefaultData = &DefaultPollingIterationsMaximum; Parameters[12].DefaultLength = sizeof(ULONG); - Parameters[13].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[13].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[13].Name = L"ResendIterations"; Parameters[13].EntryContext = &Settings->ResendIterations; Parameters[13].DefaultType = REG_DWORD; Parameters[13].DefaultData = &DefaultResendIterations; Parameters[13].DefaultLength = sizeof(ULONG); - Parameters[14].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[14].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[14].Name = L"SampleRate"; Parameters[14].EntryContext = &Settings->SampleRate; Parameters[14].DefaultType = REG_DWORD; Parameters[14].DefaultData = &DefaultSampleRate; Parameters[14].DefaultLength = sizeof(ULONG); - Parameters[15].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[15].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[15].Name = L"CrashOnCtrlScroll"; Parameters[15].EntryContext = &Settings->CrashOnCtrlScroll; Parameters[15].DefaultType = REG_DWORD; @@ -161,7 +161,7 @@ ReadRegistryEntries( Parameters[15].DefaultLength = sizeof(ULONG); Status = RtlQueryRegistryValues( - RTL_REGISTRY_ABSOLUTE, + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, RegistryPath->Buffer, Parameters, NULL, diff --git a/drivers/input/kbdclass/kbdclass.c b/drivers/input/kbdclass/kbdclass.c index ccf83532aaf6c..357eb581cd115 100644 --- a/drivers/input/kbdclass/kbdclass.c +++ b/drivers/input/kbdclass/kbdclass.c @@ -254,21 +254,21 @@ ReadRegistryEntries( RtlZeroMemory(Parameters, sizeof(Parameters)); - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[0].Name = L"ConnectMultiplePorts"; Parameters[0].EntryContext = &DriverExtension->ConnectMultiplePorts; Parameters[0].DefaultType = REG_DWORD; Parameters[0].DefaultData = &DefaultConnectMultiplePorts; Parameters[0].DefaultLength = sizeof(ULONG); - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[1].Name = L"KeyboardDataQueueSize"; Parameters[1].EntryContext = &DriverExtension->DataQueueSize; Parameters[1].DefaultType = REG_DWORD; Parameters[1].DefaultData = &DefaultDataQueueSize; Parameters[1].DefaultLength = sizeof(ULONG); - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[2].Name = L"KeyboardDeviceBaseName"; Parameters[2].EntryContext = &DriverExtension->DeviceBaseName; Parameters[2].DefaultType = REG_SZ; @@ -276,7 +276,7 @@ ReadRegistryEntries( Parameters[2].DefaultLength = 0; Status = RtlQueryRegistryValues( - RTL_REGISTRY_ABSOLUTE, + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, ParametersRegistryKey.Buffer, Parameters, NULL, diff --git a/drivers/input/mouclass/mouclass.c b/drivers/input/mouclass/mouclass.c index f84dcc30238c2..81e1e38618dce 100644 --- a/drivers/input/mouclass/mouclass.c +++ b/drivers/input/mouclass/mouclass.c @@ -221,21 +221,21 @@ ReadRegistryEntries( RtlZeroMemory(Parameters, sizeof(Parameters)); - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[0].Name = L"ConnectMultiplePorts"; Parameters[0].EntryContext = &DriverExtension->ConnectMultiplePorts; Parameters[0].DefaultType = REG_DWORD; Parameters[0].DefaultData = &DefaultConnectMultiplePorts; Parameters[0].DefaultLength = sizeof(ULONG); - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[1].Name = L"MouseDataQueueSize"; Parameters[1].EntryContext = &DriverExtension->DataQueueSize; Parameters[1].DefaultType = REG_DWORD; Parameters[1].DefaultData = &DefaultDataQueueSize; Parameters[1].DefaultLength = sizeof(ULONG); - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[2].Name = L"PointerDeviceBaseName"; Parameters[2].EntryContext = &DriverExtension->DeviceBaseName; Parameters[2].DefaultType = REG_SZ; @@ -243,7 +243,7 @@ ReadRegistryEntries( Parameters[2].DefaultLength = 0; Status = RtlQueryRegistryValues( - RTL_REGISTRY_ABSOLUTE, + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, ParametersRegistryKey.Buffer, Parameters, NULL, diff --git a/drivers/input/sermouse/sermouse.c b/drivers/input/sermouse/sermouse.c index c7e8b789a4691..9b4868133d7af 100644 --- a/drivers/input/sermouse/sermouse.c +++ b/drivers/input/sermouse/sermouse.c @@ -56,7 +56,7 @@ ReadRegistryEntries( RtlZeroMemory(Parameters, sizeof(Parameters)); - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[0].Name = L"NumberOfButtons"; Parameters[0].EntryContext = &DriverExtension->NumberOfButtons; Parameters[0].DefaultType = REG_DWORD; @@ -64,7 +64,7 @@ ReadRegistryEntries( Parameters[0].DefaultLength = sizeof(ULONG); Status = RtlQueryRegistryValues( - RTL_REGISTRY_ABSOLUTE, + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, ParametersRegistryKey.Buffer, Parameters, NULL, diff --git a/modules/rosapps/drivers/green/misc.c b/modules/rosapps/drivers/green/misc.c index b467146a742fd..50b84755bbf4c 100644 --- a/modules/rosapps/drivers/green/misc.c +++ b/modules/rosapps/drivers/green/misc.c @@ -85,18 +85,18 @@ ReadRegistryEntries( RtlZeroMemory(Parameters, sizeof(Parameters)); - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED; Parameters[0].Name = L"AttachedDevice"; Parameters[0].EntryContext = &DriverExtension->AttachedDeviceName; - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[1].Name = L"DeviceReported"; Parameters[1].EntryContext = &DriverExtension->DeviceReported; Parameters[1].DefaultType = REG_DWORD; Parameters[1].DefaultData = &DefaultDeviceReported; Parameters[1].DefaultLength = sizeof(ULONG); - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; Parameters[2].Name = L"SampleRate"; Parameters[2].EntryContext = &DriverExtension->SampleRate; Parameters[2].DefaultType = REG_DWORD; @@ -104,7 +104,7 @@ ReadRegistryEntries( Parameters[2].DefaultLength = sizeof(ULONG); Status = RtlQueryRegistryValues( - RTL_REGISTRY_ABSOLUTE, + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, ParametersRegistryKey.Buffer, Parameters, NULL, From 4d376dfd6487d63c3374f62d75dcb82a4563aac3 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 14 Dec 2024 20:09:27 +0100 Subject: [PATCH 022/750] [SETUPAPI] CM_Set_Class_Registry_PropertyW: Do not convert SD if ulLength is 0 --- dll/win32/setupapi/cfgmgr.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index 0444611c1840a..f0b49db3fe9e4 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -7975,17 +7975,21 @@ CM_Set_Class_Registry_PropertyW( if (ulProperty == CM_CRP_SECURITY_SDS) { - if (!ConvertStringSecurityDescriptorToSecurityDescriptorW((LPCWSTR)Buffer, - SDDL_REVISION_1, - &pSecurityDescriptor, - &SecurityDescriptorSize)) + if (ulLength != 0) { - ERR("ConvertStringSecurityDescriptorToSecurityDescriptorW() failed (Error %lu)\n", GetLastError()); - return CR_INVALID_DATA; + if (!ConvertStringSecurityDescriptorToSecurityDescriptorW((LPCWSTR)Buffer, + SDDL_REVISION_1, + &pSecurityDescriptor, + &SecurityDescriptorSize)) + { + ERR("ConvertStringSecurityDescriptorToSecurityDescriptorW() failed (Error %lu)\n", GetLastError()); + return CR_INVALID_DATA; + } + + Buffer = (PCVOID)pSecurityDescriptor; + ulLength = SecurityDescriptorSize; } - Buffer = (PCVOID)pSecurityDescriptor; - ulLength = SecurityDescriptorSize; ulProperty = CM_CRP_SECURITY; ulType = REG_BINARY; } From ba342e1d14e9a36fb3ad6f739a5cd46a1a458b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 25 Nov 2024 22:43:56 +0100 Subject: [PATCH 023/750] [FREELDR] peloader.c: Minor code enhancements. PeLdrCheckForLoadedDll(): - Use a for-loop to iterate over the linked list. - Adjust few comments. - Use SAL2 annotations. PeLdrpCompareDllName(): - Make its input paramters const. - Use SAL2 annotations. --- boot/freeldr/freeldr/include/peloader.h | 6 ++-- boot/freeldr/freeldr/lib/peloader.c | 44 ++++++++++++------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/boot/freeldr/freeldr/include/peloader.h b/boot/freeldr/freeldr/include/peloader.h index b2374f74ceb41..80792698c08bf 100644 --- a/boot/freeldr/freeldr/include/peloader.h +++ b/boot/freeldr/freeldr/include/peloader.h @@ -63,9 +63,9 @@ PeLdrScanImportDescriptorTable( BOOLEAN PeLdrCheckForLoadedDll( - IN OUT PLIST_ENTRY ModuleListHead, - IN PCH DllName, - OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry); + _Inout_ PLIST_ENTRY ModuleListHead, + _In_ PCSTR DllName, + _Out_ PLDR_DATA_TABLE_ENTRY* LoadedEntry); PVOID PeLdrInitSecurityCookie( diff --git a/boot/freeldr/freeldr/lib/peloader.c b/boot/freeldr/freeldr/lib/peloader.c index 06bcf41720b8c..279647d04ac38 100644 --- a/boot/freeldr/freeldr/lib/peloader.c +++ b/boot/freeldr/freeldr/lib/peloader.c @@ -74,11 +74,11 @@ PeLdrpFetchAddressOfSecurityCookie(PVOID BaseAddress, ULONG SizeOfImage) return Cookie; } -/* DllName - physical, UnicodeString->Buffer - virtual */ +/* DllName: physical, UnicodeString->Buffer: virtual */ static BOOLEAN PeLdrpCompareDllName( - IN PCH DllName, - IN PUNICODE_STRING UnicodeName) + _In_ PCSTR DllName, + _In_ PCUNICODE_STRING UnicodeName) { PWSTR Buffer; SIZE_T i, Length; @@ -92,8 +92,8 @@ PeLdrpCompareDllName( UnicodeNamePA.Length = UnicodeName->Length; UnicodeNamePA.MaximumLength = UnicodeName->MaximumLength; UnicodeNamePA.Buffer = VaToPa(UnicodeName->Buffer); - TRACE("PeLdrpCompareDllName: %s and %wZ, Length = %d " - "UN->Length %d\n", DllName, &UnicodeNamePA, Length, UnicodeName->Length); + TRACE("PeLdrpCompareDllName: %s and %wZ, Length = %d, UN->Length %d\n", + DllName, &UnicodeNamePA, Length, UnicodeName->Length); } #endif @@ -122,7 +122,7 @@ PeLdrpCompareDllName( return TRUE; } - /* Strings don't match, return FALSE */ + /* Strings don't match */ return FALSE; } @@ -582,27 +582,28 @@ PeLdrInitSecurityCookie(PLDR_DATA_TABLE_ENTRY LdrEntry) return Cookie; } -/* Returns TRUE if DLL has already been loaded - looks in LoadOrderList in LPB */ +/* Returns TRUE if the DLL has already been loaded in the module list */ BOOLEAN PeLdrCheckForLoadedDll( - IN OUT PLIST_ENTRY ModuleListHead, - IN PCH DllName, - OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry) + _Inout_ PLIST_ENTRY ModuleListHead, + _In_ PCSTR DllName, + _Out_ PLDR_DATA_TABLE_ENTRY* LoadedEntry) { + PLIST_ENTRY ModuleEntry; PLDR_DATA_TABLE_ENTRY DataTableEntry; - LIST_ENTRY *ModuleEntry; TRACE("PeLdrCheckForLoadedDll: DllName %s\n", DllName); - /* Just go through each entry in the LoadOrderList and compare loaded module's - name with a given name */ - ModuleEntry = ModuleListHead->Flink; - while (ModuleEntry != ModuleListHead) + /* Go through each entry in the LoadOrderList and + * compare the module's name with the given name */ + for (ModuleEntry = ModuleListHead->Flink; + ModuleEntry != ModuleListHead; + ModuleEntry = ModuleEntry->Flink) { - /* Get pointer to the current DTE */ + /* Get a pointer to the current DTE */ DataTableEntry = CONTAINING_RECORD(ModuleEntry, - LDR_DATA_TABLE_ENTRY, - InLoadOrderLinks); + LDR_DATA_TABLE_ENTRY, + InLoadOrderLinks); TRACE("PeLdrCheckForLoadedDll: DTE %p, EP %p, Base %p, Name '%.*S'\n", DataTableEntry, DataTableEntry->EntryPoint, DataTableEntry->DllBase, @@ -612,16 +613,13 @@ PeLdrCheckForLoadedDll( /* Compare names */ if (PeLdrpCompareDllName(DllName, &DataTableEntry->BaseDllName)) { - /* Yes, found it, report pointer to the loaded module's DTE - to the caller and increase load count for it */ + /* Found it, return a pointer to the loaded module's + * DTE to the caller and increase its load count */ *LoadedEntry = DataTableEntry; DataTableEntry->LoadCount++; TRACE("PeLdrCheckForLoadedDll: LoadedEntry 0x%p\n", DataTableEntry); return TRUE; } - - /* Go to the next entry */ - ModuleEntry = ModuleEntry->Flink; } /* Nothing found */ From cb0c9a4570b2c563c866d07d98be1b7729cbbc26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 28 Nov 2024 20:07:25 +0100 Subject: [PATCH 024/750] [NTOS:KD64] KdInitSystem(): Minor code enhancements. - Move local variables to the code blocks where they are used. - if-s one-line bodies on their own lines. - Massage the boot-images symbols loading, using a for-loop. --- ntoskrnl/kd64/kdinit.c | 71 +++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/ntoskrnl/kd64/kdinit.c b/ntoskrnl/kd64/kdinit.c index 93f2bd7dfca64..99ff187b96214 100644 --- a/ntoskrnl/kd64/kdinit.c +++ b/ntoskrnl/kd64/kdinit.c @@ -162,21 +162,10 @@ KdInitSystem( _In_ ULONG BootPhase, _In_opt_ PLOADER_PARAMETER_BLOCK LoaderBlock) { - BOOLEAN EnableKd, DisableKdAfterInit = FALSE, BlockEnable; - PSTR CommandLine, DebugLine, DebugOptionStart, DebugOptionEnd; - STRING ImageName; + BOOLEAN EnableKd, DisableKdAfterInit = FALSE, BlockEnable = FALSE; PLDR_DATA_TABLE_ENTRY LdrEntry; - PLIST_ENTRY NextEntry; - ULONG i, j, Length; - SIZE_T DebugOptionLength; + ULONG i; SIZE_T MemSizeMBs; - CHAR NameBuffer[256]; - PWCHAR Name; - -#if defined(__GNUC__) - /* Make gcc happy */ - BlockEnable = FALSE; -#endif /* Check if this is Phase 1 */ if (BootPhase) @@ -187,7 +176,8 @@ KdInitSystem( } /* Check if we already initialized once */ - if (KdDebuggerEnabled) return TRUE; + if (KdDebuggerEnabled) + return TRUE; /* Set the Debug Routine as the Stub for now */ KiDebugRoutine = KdpStub; @@ -233,6 +223,8 @@ KdInitSystem( /* Check if we have a loader block */ if (LoaderBlock) { + PSTR CommandLine, DebugLine; + /* Get the image entry */ LdrEntry = CONTAINING_RECORD(LoaderBlock->LoadOrderListHead.Flink, LDR_DATA_TABLE_ENTRY, @@ -263,7 +255,7 @@ KdInitSystem( /* Don't enable KD and don't let it be enabled later */ KdPitchDebugger = TRUE; } - else if ((DebugLine = strstr(CommandLine, "DEBUG")) != NULL) + else if ((DebugLine = strstr(CommandLine, "DEBUG"))) { /* Enable KD */ EnableKd = TRUE; @@ -272,11 +264,14 @@ KdInitSystem( if (DebugLine[5] == '=') { /* Save pointers */ + PSTR DebugOptionStart, DebugOptionEnd; DebugOptionStart = DebugOptionEnd = &DebugLine[6]; /* Scan the string for debug options */ for (;;) { + SIZE_T DebugOptionLength; + /* Loop until we reach the end of the string */ while (*DebugOptionEnd != ANSI_NULL) { @@ -287,7 +282,7 @@ KdInitSystem( { /* * We reached the end of the option or - * the end of the string, break out + * the end of the string, break out. */ break; } @@ -301,20 +296,19 @@ KdInitSystem( /* Calculate the length of the current option */ DebugOptionLength = (DebugOptionEnd - DebugOptionStart); - /* - * Break out if we reached the last option - * or if there were no options at all - */ - if (!DebugOptionLength) break; + /* + * Break out if we reached the last option + * or if there were no options at all. + */ + if (!DebugOptionLength) + break; /* Now check which option this is */ if ((DebugOptionLength == 10) && !(strncmp(DebugOptionStart, "AUTOENABLE", 10))) { - /* - * Disable the debugger, but - * allow it to be reenabled - */ + /* Disable the debugger, but + * allow to re-enable it later */ DisableKdAfterInit = TRUE; BlockEnable = FALSE; KdAutoEnableOnEvent = TRUE; @@ -335,14 +329,11 @@ KdInitSystem( } /* - * If there are more options then - * the next character should be a comma + * If there are more options then the next character + * should be a comma. Break out if it isn't. */ if (*DebugOptionEnd != ',') - { - /* It isn't, break out */ break; - } /* Move on to the next option */ DebugOptionEnd++; @@ -431,10 +422,16 @@ KdInitSystem( /* Check if we have a loader block */ if (LoaderBlock) { - /* Loop boot images */ - NextEntry = LoaderBlock->LoadOrderListHead.Flink; - i = 0; - while ((NextEntry != &LoaderBlock->LoadOrderListHead) && (i < 2)) + PLIST_ENTRY NextEntry; + ULONG j, Length; + PWCHAR Name; + STRING ImageName; + CHAR NameBuffer[256]; + + /* Loop over the first two boot images: HAL and kernel */ + for (NextEntry = LoaderBlock->LoadOrderListHead.Flink, i = 0; + NextEntry != &LoaderBlock->LoadOrderListHead && (i < 2); + NextEntry = NextEntry->Flink, ++i) { /* Get the image entry */ LdrEntry = CONTAINING_RECORD(NextEntry, @@ -454,15 +451,11 @@ KdInitSystem( /* Null-terminate */ NameBuffer[j] = ANSI_NULL; - /* Load symbols for image */ + /* Load the symbols */ RtlInitString(&ImageName, NameBuffer); DbgLoadImageSymbols(&ImageName, LdrEntry->DllBase, (ULONG_PTR)PsGetCurrentProcessId()); - - /* Go to the next entry */ - NextEntry = NextEntry->Flink; - i++; } /* Check for incoming break-in and break on symbol load From c53eb190c7a7dcd5752d3c59281d2b6203c11102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 28 Nov 2024 21:52:22 +0100 Subject: [PATCH 025/750] [NTOS:KD64] Revamp the debugger banner helpers a little. - Directly call KdpGetMemorySizeInMBs() within KdpPrintBanner(), instead of having the caller doing it. - Use the miarm.h MiIsMemoryTypeInvisible() helper. - Add Doxygen comments. --- ntoskrnl/kd64/kdinit.c | 47 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/ntoskrnl/kd64/kdinit.c b/ntoskrnl/kd64/kdinit.c index 99ff187b96214..c371d1526b242 100644 --- a/ntoskrnl/kd64/kdinit.c +++ b/ntoskrnl/kd64/kdinit.c @@ -25,14 +25,15 @@ /* UTILITY FUNCTIONS *********************************************************/ -/* - * Get the total size of the memory before - * Mm is initialized, by counting the number - * of physical pages. Useful for debug logging. +#include // For MiIsMemoryTypeInvisible() + +/** + * @brief + * Retrieves the total size of the memory before Mm is initialized, + * by counting the number of physical pages. Useful for debug logging. * - * Strongly inspired by: - * mm\ARM3\mminit.c : MiScanMemoryDescriptors(...) - */ + * Adapted from mm/ARM3/mminit.c!MiScanMemoryDescriptors(). + **/ static SIZE_T KdpGetMemorySizeInMBs( @@ -63,20 +64,14 @@ KdpGetMemorySizeInMBs( MEMORY_ALLOCATION_DESCRIPTOR, ListEntry); - /* Check if this is invisible memory */ - if ((Descriptor->MemoryType == LoaderFirmwarePermanent) || - (Descriptor->MemoryType == LoaderSpecialMemory) || - (Descriptor->MemoryType == LoaderHALCachedMemory) || - (Descriptor->MemoryType == LoaderBBTMemory)) - { - /* Skip this descriptor */ + /* If this is invisible memory, skip this descriptor */ + if (MiIsMemoryTypeInvisible(Descriptor->MemoryType)) continue; - } - /* Check if this is bad memory */ + /* Check if this isn't bad memory */ if (Descriptor->MemoryType != LoaderBad) { - /* Count this in the total of pages */ + /* Count it in the physical pages */ NumberOfPhysicalPages += Descriptor->PageCount; } } @@ -86,10 +81,16 @@ KdpGetMemorySizeInMBs( return ALIGN_UP_BY(NumberOfPhysicalPages * PAGE_SIZE, 1024 * 1024) / (1024 * 1024); } +/** + * @brief + * Displays the kernel debugger initialization banner. + **/ static VOID -KdpPrintBanner(IN SIZE_T MemSizeMBs) +KdpPrintBanner(VOID) { + SIZE_T MemSizeMBs = KdpGetMemorySizeInMBs(KeLoaderBlock); + DPRINT1("-----------------------------------------------------\n"); DPRINT1("ReactOS " KERNEL_VERSION_STR " (Build " KERNEL_VERSION_BUILD_STR ") (Commit " KERNEL_VERSION_COMMIT_HASH ")\n"); DPRINT1("%u System Processor [%u MB Memory]\n", KeNumberProcessors, MemSizeMBs); @@ -97,7 +98,9 @@ KdpPrintBanner(IN SIZE_T MemSizeMBs) if (KeLoaderBlock) { DPRINT1("Command Line: %s\n", KeLoaderBlock->LoadOptions); - DPRINT1("ARC Paths: %s %s %s %s\n", KeLoaderBlock->ArcBootDeviceName, KeLoaderBlock->NtHalPathName, KeLoaderBlock->ArcHalDeviceName, KeLoaderBlock->NtBootPathName); + DPRINT1("ARC Paths: %s %s %s %s\n", + KeLoaderBlock->ArcBootDeviceName, KeLoaderBlock->NtHalPathName, + KeLoaderBlock->ArcHalDeviceName, KeLoaderBlock->NtBootPathName); } } @@ -165,7 +168,6 @@ KdInitSystem( BOOLEAN EnableKd, DisableKdAfterInit = FALSE, BlockEnable = FALSE; PLDR_DATA_TABLE_ENTRY LdrEntry; ULONG i; - SIZE_T MemSizeMBs; /* Check if this is Phase 1 */ if (BootPhase) @@ -401,9 +403,8 @@ KdInitSystem( /* Let user-mode know that it's enabled as well */ SharedUserData->KdDebuggerEnabled = TRUE; - /* Display separator + ReactOS version at start of the debug log */ - MemSizeMBs = KdpGetMemorySizeInMBs(KeLoaderBlock); - KdpPrintBanner(MemSizeMBs); + /* Display separator + ReactOS version at the start of the debug log */ + KdpPrintBanner(); /* Check if the debugger should be disabled initially */ if (DisableKdAfterInit) From f395f87bb35fbc66c920abf2ea6acb9be9dd49fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 28 Nov 2024 21:11:24 +0100 Subject: [PATCH 026/750] [NTOS:MM] MiScanMemoryDescriptors(): Use the MiIsMemoryTypeInvisible() and MiIsMemoryTypeFree() helpers. --- ntoskrnl/mm/ARM3/mminit.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/ntoskrnl/mm/ARM3/mminit.c b/ntoskrnl/mm/ARM3/mminit.c index bd5ab3caa8836..30e17c6edffca 100644 --- a/ntoskrnl/mm/ARM3/mminit.c +++ b/ntoskrnl/mm/ARM3/mminit.c @@ -421,20 +421,14 @@ MiScanMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) /* Count this descriptor */ MiNumberDescriptors++; - /* Check if this is invisible memory */ - if ((Descriptor->MemoryType == LoaderFirmwarePermanent) || - (Descriptor->MemoryType == LoaderSpecialMemory) || - (Descriptor->MemoryType == LoaderHALCachedMemory) || - (Descriptor->MemoryType == LoaderBBTMemory)) - { - /* Skip this descriptor */ + /* If this is invisible memory, skip this descriptor */ + if (MiIsMemoryTypeInvisible(Descriptor->MemoryType)) continue; - } - /* Check if this is bad memory */ + /* Check if this isn't bad memory */ if (Descriptor->MemoryType != LoaderBad) { - /* Count this in the total of pages */ + /* Count it in the physical pages */ MmNumberOfPhysicalPages += (PFN_COUNT)Descriptor->PageCount; } @@ -454,12 +448,9 @@ MiScanMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) } /* Check if this is free memory */ - if ((Descriptor->MemoryType == LoaderFree) || - (Descriptor->MemoryType == LoaderLoadedProgram) || - (Descriptor->MemoryType == LoaderFirmwareTemporary) || - (Descriptor->MemoryType == LoaderOsloaderStack)) + if (MiIsMemoryTypeFree(Descriptor->MemoryType)) { - /* Count it too free pages */ + /* Count it in the free pages */ MiNumberOfFreePages += Descriptor->PageCount; /* Check if this is the largest memory descriptor */ From ec4c169e3ebe128892141d2d39b7ac80dec18bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 28 Nov 2024 20:18:32 +0100 Subject: [PATCH 027/750] [NTOS:EX] Revamp ExpLoadBootSymbols() a bit. - Use a for-loop. - Make some comments more accurate. - Reduce indentation level in the loop. --- ntoskrnl/ex/init.c | 120 ++++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 62 deletions(-) diff --git a/ntoskrnl/ex/init.c b/ntoskrnl/ex/init.c index 433a635d7d2a2..6393a1083f923 100644 --- a/ntoskrnl/ex/init.c +++ b/ntoskrnl/ex/init.c @@ -790,84 +790,79 @@ ExpIsLoaderValid(IN PLOADER_PARAMETER_BLOCK LoaderBlock) return TRUE; } -CODE_SEG("INIT") +static CODE_SEG("INIT") VOID -NTAPI -ExpLoadBootSymbols(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +ExpLoadBootSymbols( + _In_ PLOADER_PARAMETER_BLOCK LoaderBlock) { - ULONG i = 0; PLIST_ENTRY NextEntry; + PLDR_DATA_TABLE_ENTRY LdrEntry; + NTSTATUS Status; + ULONG i; ULONG Count, Length; PWCHAR Name; - PLDR_DATA_TABLE_ENTRY LdrEntry; + STRING ImageName; CHAR NameBuffer[256]; - STRING SymbolString; - NTSTATUS Status; - /* Loop the driver list */ - NextEntry = LoaderBlock->LoadOrderListHead.Flink; - while (NextEntry != &LoaderBlock->LoadOrderListHead) + /* Loop over the boot modules list */ + for (NextEntry = LoaderBlock->LoadOrderListHead.Flink, i = 0; + NextEntry != &LoaderBlock->LoadOrderListHead; + NextEntry = NextEntry->Flink, ++i) { - /* Skip the first two images */ - if (i >= 2) + /* Skip the first two images: HAL and kernel */ + if (i < 2) + continue; + + /* Get the entry */ + LdrEntry = CONTAINING_RECORD(NextEntry, + LDR_DATA_TABLE_ENTRY, + InLoadOrderLinks); + if (LdrEntry->FullDllName.Buffer[0] == L'\\') { - /* Get the entry */ - LdrEntry = CONTAINING_RECORD(NextEntry, - LDR_DATA_TABLE_ENTRY, - InLoadOrderLinks); - if (LdrEntry->FullDllName.Buffer[0] == L'\\') - { - /* We have a name, read its data */ - Name = LdrEntry->FullDllName.Buffer; - Length = LdrEntry->FullDllName.Length / sizeof(WCHAR); + /* We have a name, read its data */ + Name = LdrEntry->FullDllName.Buffer; + Length = LdrEntry->FullDllName.Length / sizeof(WCHAR); - /* Check if our buffer can hold it */ - if (sizeof(NameBuffer) < Length + sizeof(ANSI_NULL)) - { - /* It's too long */ - Status = STATUS_BUFFER_OVERFLOW; - } - else - { - /* Copy the name */ - Count = 0; - do - { - /* Copy the character */ - NameBuffer[Count++] = (CHAR)*Name++; - } while (Count < Length); - - /* Null-terminate */ - NameBuffer[Count] = ANSI_NULL; - Status = STATUS_SUCCESS; - } - } - else + /* Check if our buffer can hold it */ + if (sizeof(NameBuffer) < Length + sizeof(ANSI_NULL)) { - /* Safely print the string into our buffer */ - Status = RtlStringCbPrintfA(NameBuffer, - sizeof(NameBuffer), - "%S\\System32\\Drivers\\%wZ", - &SharedUserData->NtSystemRoot[2], - &LdrEntry->BaseDllName); + /* It's too long */ + Status = STATUS_BUFFER_OVERFLOW; } - - /* Check if the buffer was ok */ - if (NT_SUCCESS(Status)) + else { - /* Initialize the STRING for the debugger */ - RtlInitString(&SymbolString, NameBuffer); + /* Copy the name */ + Count = 0; + do + { + /* Do cheap Unicode to ANSI conversion */ + NameBuffer[Count++] = (CHAR)*Name++; + } while (Count < Length); - /* Load the symbols */ - DbgLoadImageSymbols(&SymbolString, - LdrEntry->DllBase, - (ULONG_PTR)PsGetCurrentProcessId()); + /* Null-terminate */ + NameBuffer[Count] = ANSI_NULL; + Status = STATUS_SUCCESS; } } + else + { + /* Safely print the string into our buffer */ + Status = RtlStringCbPrintfA(NameBuffer, + sizeof(NameBuffer), + "%S\\System32\\Drivers\\%wZ", + &SharedUserData->NtSystemRoot[2], + &LdrEntry->BaseDllName); + } - /* Go to the next entry */ - i++; - NextEntry = NextEntry->Flink; + /* Check if the buffer is OK */ + if (NT_SUCCESS(Status)) + { + /* Load the symbols */ + RtlInitString(&ImageName, NameBuffer); + DbgLoadImageSymbols(&ImageName, + LdrEntry->DllBase, + (ULONG_PTR)PsGetCurrentProcessId()); + } } } @@ -1108,7 +1103,8 @@ ExpInitializeExecutive(IN ULONG Cpu, ExpLoadBootSymbols(LoaderBlock); /* Check if we should break after symbol load */ - if (KdBreakAfterSymbolLoad) DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); + if (KdBreakAfterSymbolLoad) + DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); /* Check if this loader is compatible with NT 5.2 */ if (LoaderBlock->Extension->Size >= sizeof(LOADER_PARAMETER_EXTENSION)) From da59d797d15a957e14d97d179f0859b89f4447ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 7 Dec 2024 16:31:15 +0100 Subject: [PATCH 028/750] [NTOS:EX] Minor enhancements to ExpDebuggerWorker() - Add some DbgPrints. - Use SAL2 annotations. --- ntoskrnl/ex/dbgctrl.c | 24 +++++++++++++++--------- ntoskrnl/include/internal/ex.h | 5 ++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ntoskrnl/ex/dbgctrl.c b/ntoskrnl/ex/dbgctrl.c index 70280703a31ec..f3fc6c0b43bde 100644 --- a/ntoskrnl/ex/dbgctrl.c +++ b/ntoskrnl/ex/dbgctrl.c @@ -49,7 +49,8 @@ ULONG_PTR ExpDebuggerPageIn; */ VOID NTAPI -ExpDebuggerWorker(IN PVOID Context) +ExpDebuggerWorker( + _In_ PVOID Context) { PEPROCESS ProcessToAttach, ProcessToKill; ULONG_PTR PageInAddress; @@ -83,11 +84,10 @@ ExpDebuggerWorker(IN PVOID Context) Process = NULL; /* Check if we need to attach or kill some process */ - if (ProcessToAttach != NULL || ProcessToKill != NULL) + if (ProcessToAttach || ProcessToKill) { /* Find the process in the list */ - Process = PsGetNextProcess(Process); - while (Process) + while ((Process = PsGetNextProcess(Process))) { /* Is this the process we want to attach to? */ if (Process == ProcessToAttach) @@ -104,12 +104,16 @@ ExpDebuggerWorker(IN PVOID Context) ObDereferenceObject(Process); return; } + } - /* Get the next process */ - Process = PsGetNextProcess(Process); + if (!Process) + { + DbgPrintEx(DPFLTR_SYSTEM_ID, DPFLTR_ERROR_LEVEL, + "EX debug work: Unable to find process %p\n", + ProcessToAttach ? ProcessToAttach : ProcessToKill); } - /* We either have found a process, or we default to the current process */ + /* We either have found a process, or we default to the current one */ } /* If we have an address to page in... */ @@ -122,7 +126,9 @@ ExpDebuggerWorker(IN PVOID Context) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - DPRINT1("Failed to page in address 0x%p, Status 0x%08lx\n", PageInAddress, _SEH2_GetExceptionCode()); + DbgPrintEx(DPFLTR_SYSTEM_ID, DPFLTR_ERROR_LEVEL, + "EX page in: Failed to page-in address 0x%p, Status 0x%08lx\n", + PageInAddress, _SEH2_GetExceptionCode()); } _SEH2_END; } @@ -135,7 +141,7 @@ ExpDebuggerWorker(IN PVOID Context) { /* ... we can detach from the process */ KeUnstackDetachProcess(&ApcState); - /* Dereference the process which was referenced for us by PsGetNextProcess */ + /* Dereference the process referenced by PsGetNextProcess() */ ObDereferenceObject(Process); } } diff --git a/ntoskrnl/include/internal/ex.h b/ntoskrnl/include/internal/ex.h index 50dde0cbfc89b..4c212972fcb26 100644 --- a/ntoskrnl/include/internal/ex.h +++ b/ntoskrnl/include/internal/ex.h @@ -70,7 +70,10 @@ extern PEPROCESS ExpDebuggerProcessAttach; extern PEPROCESS ExpDebuggerProcessKill; extern ULONG_PTR ExpDebuggerPageIn; -VOID NTAPI ExpDebuggerWorker(IN PVOID Context); +VOID +NTAPI +ExpDebuggerWorker( + _In_ PVOID Context); #ifdef _WIN64 #define HANDLE_LOW_BITS (PAGE_SHIFT - 4) From 08ed0988ff03964ef001674b1141552780bc6fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 6 Dec 2024 20:47:23 +0100 Subject: [PATCH 029/750] [NTOS:KE] KeRemoveQueueDpc(): Use KeRestoreInterrupts() --- ntoskrnl/ke/dpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ntoskrnl/ke/dpc.c b/ntoskrnl/ke/dpc.c index 04d45fe16659f..39e2c16b9d702 100644 --- a/ntoskrnl/ke/dpc.c +++ b/ntoskrnl/ke/dpc.c @@ -905,7 +905,7 @@ KeRemoveQueueDpc(IN PKDPC Dpc) } /* Re-enable interrupts */ - if (Enable) _enable(); + KeRestoreInterrupts(Enable); /* Return if the DPC was in the queue or not */ return DpcData ? TRUE : FALSE; From b15dcb5cf61bf5e72537a7b8f66981ebe22967d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 7 Dec 2024 16:29:02 +0100 Subject: [PATCH 030/750] [NTOS:KD64] The DbgKdPageInApi, introduced in NT4, has been obsoleted in NT5. It has been replaced by ExpDebuggerPageIn support in ExpDebuggerWorker(). --- ntoskrnl/kd64/kdapi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c index 089af9c5f864f..4baeb4d9c428c 100644 --- a/ntoskrnl/kd64/kdapi.c +++ b/ntoskrnl/kd64/kdapi.c @@ -1497,8 +1497,9 @@ KdpSendWaitContinue(IN ULONG PacketType, case DbgKdPageInApi: - /* TODO */ - KdpDprintf("Page-In support is unimplemented!\n"); + /* This API, introduced in NT4, has been obsoleted in NT5. It is + * replaced by ExpDebuggerPageIn support in ExpDebuggerWorker(). */ + KdpDprintf("DbgKdPageInApi is obsolete!\n"); KdpNotSupported(&ManipulateState); break; From 3abb21080d1bdd39ac33993895bff401d4543135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 12 Dec 2024 21:26:25 +0100 Subject: [PATCH 031/750] [NTOS:KE/EX] Add minimal EMS (headless) support for bugcheck. In particular, the HeadlessGlobals->InBugCheck flag MUST be set prior to displaying the blue-screen, because the HDL global lock function would trigger a (nested) BSoD otherwise. Regarding the unimplemented HeadlessCmdSendBlueScreenData: it sends to the management console an XML description of the bugcheck. An example can be seen in this issue report: https://github.com/cloud-hypervisor/cloud-hypervisor/issues/3168 For more information, please consult: https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/windowsserver2003emssacxml.doc --- ntoskrnl/ex/hdlsterm.c | 10 ++++++++++ ntoskrnl/ke/bug.c | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/ex/hdlsterm.c b/ntoskrnl/ex/hdlsterm.c index b4fd7b949f6d6..bfed212d91df3 100644 --- a/ntoskrnl/ex/hdlsterm.c +++ b/ntoskrnl/ex/hdlsterm.c @@ -450,8 +450,15 @@ HdlspDispatch(IN HEADLESS_CMD Command, case HeadlessCmdGetLine: break; + case HeadlessCmdStartBugCheck: + { + HeadlessGlobals->InBugCheck = TRUE; + HeadlessGlobals->ProcessingCmd = FALSE; + Status = STATUS_SUCCESS; break; + } + case HeadlessCmdDoBugCheckProcessing: break; @@ -518,7 +525,10 @@ HdlspDispatch(IN HEADLESS_CMD Command, } case HeadlessCmdSendBlueScreenData: + // TODO: Send XML description of bugcheck. + // InputBuffer points to the BugCheckCode. break; + case HeadlessCmdQueryGUID: break; diff --git a/ntoskrnl/ke/bug.c b/ntoskrnl/ke/bug.c index 1bf6e7cafbda8..297de556fe4cf 100644 --- a/ntoskrnl/ke/bug.c +++ b/ntoskrnl/ke/bug.c @@ -615,8 +615,20 @@ KiDisplayBlueScreen(IN ULONG MessageId, IN PCHAR HardErrMessage OPTIONAL, IN PCHAR Message) { + ULONG BugCheckCode = (ULONG)KiBugCheckData[0]; + BOOLEAN Enable = TRUE; CHAR AnsiName[107]; + /* Enable headless support for bugcheck */ + HeadlessDispatch(HeadlessCmdStartBugCheck, + NULL, 0, NULL, NULL); + HeadlessDispatch(HeadlessCmdEnableTerminal, + &Enable, sizeof(Enable), + NULL, NULL); + HeadlessDispatch(HeadlessCmdSendBlueScreenData, + &BugCheckCode, sizeof(BugCheckCode), + NULL, NULL); + /* Check if bootvid is installed */ if (InbvIsBootDriverInstalled()) { @@ -664,7 +676,7 @@ KiDisplayBlueScreen(IN ULONG MessageId, if (MessageId == BUGCODE_PSS_MESSAGE) { /* It is, so get the bug code string as well */ - KeGetBugMessageText((ULONG)KiBugCheckData[0], NULL); + KeGetBugMessageText(BugCheckCode, NULL); InbvDisplayString("\r\n\r\n"); } @@ -683,7 +695,7 @@ KiDisplayBlueScreen(IN ULONG MessageId, RtlStringCbPrintfA(AnsiName, sizeof(AnsiName), "\r\n\r\n*** STOP: 0x%08lX (0x%p,0x%p,0x%p,0x%p)\r\n\r\n", - (ULONG)KiBugCheckData[0], + BugCheckCode, (PVOID)KiBugCheckData[1], (PVOID)KiBugCheckData[2], (PVOID)KiBugCheckData[3], From 44564cb6828ba6e8549d211f06f5848005c3b0b5 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 15 Dec 2024 15:54:35 +0100 Subject: [PATCH 032/750] [SETUPAPI] Implement SetupDiGetClassRegistryPropertyW and SetupDiSetClassRegistryPropertyW --- dll/win32/setupapi/devclass.c | 160 +++++++++++++++++++++++++++++++ dll/win32/setupapi/setupapi.spec | 4 +- 2 files changed, 162 insertions(+), 2 deletions(-) diff --git a/dll/win32/setupapi/devclass.c b/dll/win32/setupapi/devclass.c index b8f7840159875..ff3d7d9c070f8 100644 --- a/dll/win32/setupapi/devclass.c +++ b/dll/win32/setupapi/devclass.c @@ -1419,3 +1419,163 @@ SetupDiGetClassDevPropertySheetsW( TRACE("Returning %d\n", ret); return ret; } + +/*********************************************************************** + * SetupDiGetClassRegistryPropertyW(SETUPAPI.@) + */ +BOOL WINAPI +SetupDiGetClassRegistryPropertyW( + IN CONST GUID *ClassGuid, + IN DWORD Property, + OUT PDWORD PropertyRegDataType OPTIONAL, + OUT PBYTE PropertyBuffer, + IN DWORD PropertyBufferSize, + OUT PDWORD RequiredSize OPTIONAL, + IN PCWSTR MachineName OPTIONAL, + IN PVOID Reserved) +{ + HMACHINE hMachine = NULL; + DWORD PropLength = 0; + DWORD Error = ERROR_SUCCESS; + CONFIGRET cr; + + TRACE("%s %lu %p %p %lu %p %s %p\n", + debugstr_guid(ClassGuid), Property, PropertyRegDataType, PropertyBuffer, + PropertyBufferSize, RequiredSize, debugstr_w(MachineName), Reserved); + + if (Reserved != NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (MachineName) + { + cr = CM_Connect_Machine(MachineName, &hMachine); + if (cr != CR_SUCCESS) + goto done; + } + + if (Property >= SPCRP_MAXIMUM_PROPERTY) + { + cr = CR_INVALID_PROPERTY; + goto done; + } + + PropLength = PropertyBufferSize; + cr = CM_Get_Class_Registry_PropertyW((LPGUID)ClassGuid, + Property + (CM_DRP_DEVICEDESC - SPDRP_DEVICEDESC), + PropertyRegDataType, + PropertyBuffer, + &PropLength, + 0, + hMachine); + if ((cr == CR_SUCCESS) || (cr == CR_BUFFER_SMALL)) + { + if (RequiredSize) + *RequiredSize = PropLength; + } + +done: + if (cr != CR_SUCCESS) + { + switch (cr) + { + case CR_INVALID_DEVINST : + Error = ERROR_NO_SUCH_DEVINST; + break; + + case CR_INVALID_PROPERTY : + Error = ERROR_INVALID_REG_PROPERTY; + break; + + case CR_BUFFER_SMALL : + Error = ERROR_INSUFFICIENT_BUFFER; + break; + + default : + Error = GetErrorCodeFromCrCode(cr); + } + } + + if (hMachine != NULL) + CM_Disconnect_Machine(hMachine); + + SetLastError(Error); + return (cr == CR_SUCCESS); +} + +/*********************************************************************** + * SetupDiSetClassRegistryPropertyW(SETUPAPI.@) + */ +BOOL WINAPI +SetupDiSetClassRegistryPropertyW( + IN CONST GUID *ClassGuid, + IN DWORD Property, + IN CONST BYTE *PropertyBuffer OPTIONAL, + IN DWORD PropertyBufferSize, + IN PCWSTR MachineName OPTIONAL, + IN PVOID Reserved) +{ + HMACHINE hMachine = NULL; + DWORD Error = ERROR_SUCCESS; + CONFIGRET cr; + + TRACE("%s %lu %p %lu %s %p\n", + debugstr_guid(ClassGuid), Property, PropertyBuffer, + PropertyBufferSize, debugstr_w(MachineName), Reserved); + + if (Reserved != NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (MachineName) + { + cr = CM_Connect_Machine(MachineName, &hMachine); + if (cr != CR_SUCCESS) + goto done; + } + + if (Property >= SPCRP_MAXIMUM_PROPERTY) + { + cr = CR_INVALID_PROPERTY; + goto done; + } + + cr = CM_Set_Class_Registry_PropertyW((LPGUID)ClassGuid, + Property + (CM_DRP_DEVICEDESC - SPDRP_DEVICEDESC), + PropertyBuffer, + PropertyBufferSize, + 0, + hMachine); + +done: + if (cr != CR_SUCCESS) + { + switch (cr) + { + case CR_INVALID_DEVINST: + Error = ERROR_NO_SUCH_DEVINST; + break; + + case CR_INVALID_PROPERTY: + Error = ERROR_INVALID_REG_PROPERTY; + break; + + case CR_BUFFER_SMALL: + Error = ERROR_INSUFFICIENT_BUFFER; + break; + + default : + Error = GetErrorCodeFromCrCode(cr); + } + } + + if (hMachine != NULL) + CM_Disconnect_Machine(hMachine); + + SetLastError(Error); + return (cr == CR_SUCCESS); +} diff --git a/dll/win32/setupapi/setupapi.spec b/dll/win32/setupapi/setupapi.spec index cc849483b99ab..7a42afad98cdb 100644 --- a/dll/win32/setupapi/setupapi.spec +++ b/dll/win32/setupapi/setupapi.spec @@ -314,7 +314,7 @@ @ stdcall SetupDiGetClassInstallParamsA(ptr ptr ptr long ptr) @ stdcall SetupDiGetClassInstallParamsW(ptr ptr ptr long ptr) @ stub SetupDiGetClassRegistryPropertyA -@ stub SetupDiGetClassRegistryPropertyW +@ stdcall SetupDiGetClassRegistryPropertyW(ptr long ptr ptr long ptr wstr ptr) @ stub SetupDiGetCustomDevicePropertyA @ stub SetupDiGetCustomDevicePropertyW @ stdcall SetupDiGetDeviceInfoListClass(ptr ptr) @@ -375,7 +375,7 @@ @ stdcall SetupDiSetClassInstallParamsA(ptr ptr ptr long) @ stdcall SetupDiSetClassInstallParamsW(ptr ptr ptr long) @ stub SetupDiSetClassRegistryPropertyA -@ stub SetupDiSetClassRegistryPropertyW +@ stdcall SetupDiSetClassRegistryPropertyW(ptr long ptr long wstr ptr) @ stdcall SetupDiSetDeviceInstallParamsA(ptr ptr ptr) @ stdcall SetupDiSetDeviceInstallParamsW(ptr ptr ptr) @ stub SetupDiSetDeviceInterfaceDefault From a43bfe2916814cb521dd2109f950adb0fdebb8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 9 Aug 2024 17:39:00 +0200 Subject: [PATCH 033/750] [NTOS:CM/IO/KE] Implement minimal support for CrashControl:AutoReboot The REG_DWORD value `AutoReboot` stored in the registry key `HKLM\SYSTEM\CurrentControlSet\Control\CrashControl` (used as a boolean value), controls whether to automatically reboot the operating system at the end of the crash dump, after a bugcheck. ReactOS doesn't currently implement crash dumps, so only the auto-reboot is done. (The reason of the apparent redundant `Reboot` variable in KeBugCheckWithTf() is because that variable would be updated on return by the not-yet-existing crash-dump helper routines called from there.) --- ntoskrnl/config/cmdata.c | 9 +++++++-- ntoskrnl/include/internal/io.h | 1 + ntoskrnl/io/iomgr/iomgr.c | 1 + ntoskrnl/ke/bug.c | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/config/cmdata.c b/ntoskrnl/config/cmdata.c index 693c9ac7b2667..4656fe85cdde5 100644 --- a/ntoskrnl/config/cmdata.c +++ b/ntoskrnl/config/cmdata.c @@ -624,8 +624,6 @@ DATA_SEG("INITDATA") CM_SYSTEM_CONTROL_VECTOR CmControlVector[] = NULL, NULL }, - - { L"ProductOptions", L"ProductSuite", @@ -926,6 +924,13 @@ DATA_SEG("INITDATA") CM_SYSTEM_CONTROL_VECTOR CmControlVector[] = NULL, NULL }, + { + L"CrashControl", + L"AutoReboot", + &IopAutoReboot, + NULL, + NULL + }, { NULL, NULL, diff --git a/ntoskrnl/include/internal/io.h b/ntoskrnl/include/internal/io.h index 10dc76bc2bac2..f78c05a14be71 100644 --- a/ntoskrnl/include/internal/io.h +++ b/ntoskrnl/include/internal/io.h @@ -1453,6 +1453,7 @@ extern GENERIC_MAPPING IopFileMapping; extern POBJECT_TYPE _IoFileObjectType; extern HAL_DISPATCH _HalDispatchTable; extern LIST_ENTRY IopErrorLogListHead; +extern ULONG IopAutoReboot; extern ULONG IopNumTriageDumpDataBlocks; extern PVOID IopTriageDumpDataBlocks[64]; extern PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList; diff --git a/ntoskrnl/io/iomgr/iomgr.c b/ntoskrnl/io/iomgr/iomgr.c index b982414e27007..249d93b6cae92 100644 --- a/ntoskrnl/io/iomgr/iomgr.c +++ b/ntoskrnl/io/iomgr/iomgr.c @@ -43,6 +43,7 @@ LARGE_INTEGER IoWriteTransferCount = {{0, 0}}; ULONG IoOtherOperationCount = 0; LARGE_INTEGER IoOtherTransferCount = {{0, 0}}; KSPIN_LOCK IoStatisticsLock = 0; +ULONG IopAutoReboot; ULONG IopNumTriageDumpDataBlocks; PVOID IopTriageDumpDataBlocks[64]; diff --git a/ntoskrnl/ke/bug.c b/ntoskrnl/ke/bug.c index 297de556fe4cf..7cb9c1c2e678e 100644 --- a/ntoskrnl/ke/bug.c +++ b/ntoskrnl/ke/bug.c @@ -1134,6 +1134,8 @@ KeBugCheckWithTf(IN ULONG BugCheckCode, /* FIXME: Support Triage Dump */ /* FIXME: Write the crash dump */ + // TODO: The crash-dump helper must set the Reboot variable. + Reboot = !!IopAutoReboot; } else { From f42c81e4edfab2aee4da407664edbe9571585b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 10 Aug 2024 17:20:44 +0200 Subject: [PATCH 034/750] [NTOS:CM] Allow CmSelfHeal to be configured via registry. This is controlled with a REG_DWORD value named `SelfHealingEnabled` inside the registry key `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager` . The `CmSelfHeal` variable is used to retrieve the data, hence it needs to be a ULONG. --- ntoskrnl/config/cmdata.c | 9 ++++++++- ntoskrnl/include/internal/cm.h | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ntoskrnl/config/cmdata.c b/ntoskrnl/config/cmdata.c index 4656fe85cdde5..aa9b1f010be2e 100644 --- a/ntoskrnl/config/cmdata.c +++ b/ntoskrnl/config/cmdata.c @@ -60,7 +60,7 @@ BOOLEAN CmpShareSystemHives; BOOLEAN CmpMiniNTBoot; ULONG CmpBootType; -BOOLEAN CmSelfHeal = TRUE; +ULONG CmSelfHeal = TRUE; BOOLEAN CmpSelfHeal = TRUE; USHORT CmpUnknownBusCount; @@ -666,6 +666,13 @@ DATA_SEG("INITDATA") CM_SYSTEM_CONTROL_VECTOR CmControlVector[] = &DummyData, &DummyData }, + { + L"Session Manager\\Configuration Manager", + L"SelfHealingEnabled", + &CmSelfHeal, + NULL, + NULL + }, { L"Session Manager", L"ForceNpxEmulation", diff --git a/ntoskrnl/include/internal/cm.h b/ntoskrnl/include/internal/cm.h index f40d842089570..8d33736c48210 100644 --- a/ntoskrnl/include/internal/cm.h +++ b/ntoskrnl/include/internal/cm.h @@ -1452,9 +1452,9 @@ extern HIVE_LIST_ENTRY CmpMachineHiveList[]; extern UNICODE_STRING CmSymbolicLinkValueName; extern UNICODE_STRING CmpSystemStartOptions; extern UNICODE_STRING CmpLoadOptions; -extern BOOLEAN CmSelfHeal; -extern BOOLEAN CmpSelfHeal; extern ULONG CmpBootType; +extern ULONG CmSelfHeal; +extern BOOLEAN CmpSelfHeal; extern HANDLE CmpRegistryRootHandle; extern BOOLEAN ExpInTextModeSetup; extern BOOLEAN InitIsWinPEMode; From cc40a5870a67a2eaefa03e1931408996621c5ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sat, 10 Aug 2024 21:22:11 +0200 Subject: [PATCH 035/750] [NTOS:CM] Implement Win7+ VolatileBoot support. Its support is controlled with a REG_DWORD value named `VolatileBoot` inside the registry key `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager` . Its implementation is very trivial: when enabled, CmpShareSystemHives is set to TRUE and doesn't change state during runtime. In a sense this is similar to what happens in WinPE-boot, except that ALL hives without exception (system hives and others) will be loaded in shared mode. --- ntoskrnl/config/cmdata.c | 9 +++++++++ ntoskrnl/config/cmsysini.c | 6 +++++- ntoskrnl/include/internal/cm.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ntoskrnl/config/cmdata.c b/ntoskrnl/config/cmdata.c index aa9b1f010be2e..e428377a6fc74 100644 --- a/ntoskrnl/config/cmdata.c +++ b/ntoskrnl/config/cmdata.c @@ -54,6 +54,8 @@ UNICODE_STRING CmSymbolicLinkValueName = UNICODE_STRING CmpLoadOptions; +/* TRUE if all hives must be loaded in shared mode */ +ULONG CmpVolatileBoot; /* TRUE if the system hives must be loaded in shared mode */ BOOLEAN CmpShareSystemHives; /* TRUE when the registry is in PE mode */ @@ -673,6 +675,13 @@ DATA_SEG("INITDATA") CM_SYSTEM_CONTROL_VECTOR CmControlVector[] = NULL, NULL }, + { + L"Session Manager\\Configuration Manager", + L"VolatileBoot", + &CmpVolatileBoot, + NULL, + NULL + }, { L"Session Manager", L"ForceNpxEmulation", diff --git a/ntoskrnl/config/cmsysini.c b/ntoskrnl/config/cmsysini.c index a8ddc104073f6..df1de46a210d9 100644 --- a/ntoskrnl/config/cmsysini.c +++ b/ntoskrnl/config/cmsysini.c @@ -1164,7 +1164,7 @@ CmpCreateRegistryRoot(VOID) return FALSE; } - /* Completely sucessful */ + /* Completely successful */ return TRUE; } @@ -1635,6 +1635,10 @@ CmInitSystem1(VOID) CmpMiniNTBoot = TRUE; CmpShareSystemHives = TRUE; } + /* If we are in volatile boot mode, ALL hives without exception + * (system hives and others) will be loaded in shared mode */ + if (CmpVolatileBoot) + CmpShareSystemHives = TRUE; /* Initialize the hive list and lock */ InitializeListHead(&CmpHiveListHead); diff --git a/ntoskrnl/include/internal/cm.h b/ntoskrnl/include/internal/cm.h index 8d33736c48210..02d8b9e177c70 100644 --- a/ntoskrnl/include/internal/cm.h +++ b/ntoskrnl/include/internal/cm.h @@ -1420,6 +1420,7 @@ CmGetSystemDriverList( extern ULONG CmpTraceLevel; extern BOOLEAN CmpSpecialBootCondition; extern BOOLEAN CmpFlushOnLockRelease; +extern ULONG CmpVolatileBoot; extern BOOLEAN CmpShareSystemHives; extern BOOLEAN CmpMiniNTBoot; extern BOOLEAN CmpNoVolatileCreates; From 3c1e022d0e180ec19278fb3cf5492a7dc7e6c63a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 9 Aug 2024 20:43:53 +0200 Subject: [PATCH 036/750] [NTOS:KE] Synchronize KiPcToFileHeader/KiRosPcToUserFileHeader 1st parameter name --- ntoskrnl/include/internal/ke.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/include/internal/ke.h b/ntoskrnl/include/internal/ke.h index d05d2a24049d0..c5fcd5b8af35e 100644 --- a/ntoskrnl/include/internal/ke.h +++ b/ntoskrnl/include/internal/ke.h @@ -1061,14 +1061,14 @@ KiSystemFatalException( PVOID NTAPI -KiPcToFileHeader(IN PVOID Eip, +KiPcToFileHeader(IN PVOID Pc, OUT PLDR_DATA_TABLE_ENTRY *LdrEntry, IN BOOLEAN DriversOnly, OUT PBOOLEAN InKernel); PVOID NTAPI -KiRosPcToUserFileHeader(IN PVOID Eip, +KiRosPcToUserFileHeader(IN PVOID Pc, OUT PLDR_DATA_TABLE_ENTRY *LdrEntry); PCHAR From 5df3a0bb4aeb73f7521828225d5ae00b68f4c3d0 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Mon, 16 Dec 2024 04:42:47 -0600 Subject: [PATCH 037/750] [EVENTVWR] Fix typo in Romanian (ro-RO) translation (#7561) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addendum to 0.4.16-dev-323-g c212c184f39 (#7352). In the usage help message one line started with '\pentru', but it should have been '\tpentru'. Fixes GCC compiler error: base/applications/mscutils/eventvwr/lang/ro-RO.rc:177: unrecognized escape sequence Co-authored-by: George Bișoc --- base/applications/mscutils/eventvwr/lang/ro-RO.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/applications/mscutils/eventvwr/lang/ro-RO.rc b/base/applications/mscutils/eventvwr/lang/ro-RO.rc index 947cfad7da7fa..b888fd857a895 100644 --- a/base/applications/mscutils/eventvwr/lang/ro-RO.rc +++ b/base/applications/mscutils/eventvwr/lang/ro-RO.rc @@ -179,7 +179,7 @@ BEGIN EventVwr [numele computerului] [/L:] [/?]\n\ \n\ ""numele computerului"" : Specifică computerul de la distanță unde să se conecteze\n\ -\pentru a prelua evenimentele de afișat. Dacă nu este specificat niciun nume,\n\ +\tpentru a prelua evenimentele de afișat. Dacă nu este specificat niciun nume,\n\ \tcomputerul local este folosit.\n\ \n\ /L: : Specifică deschiderea unui fișier.\n\ From 91948dea80126028a05e3ee83f9857d06ed5370f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 12 Dec 2024 14:44:05 +0200 Subject: [PATCH 038/750] [NTOS:KE/x64] Fix handling of PCR::UserRsp This is a temporary helper for the system call entry point to store the user mode stack, before switching to the kernel mode stack. Initially it was copied to the trap frame inside KiSystemCallHandler. This has been moved to the system call entry point, but some remnants remained. The problem is that KiSystemCallHandler can be called twice in a system call (when the call is the first GUI call and the stack needs to be extended). In that scenario, when the thread was preempted, a new value could be saved in the PCR before running KiSystemCallHandler again, and then overwriting the proper value with a bogus one from a different thread. This rarely seemed to happen on UP, but happens a lot with SMP. --- ntoskrnl/ke/amd64/traphandler.c | 5 ++--- ntoskrnl/ke/amd64/usercall.c | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/ntoskrnl/ke/amd64/traphandler.c b/ntoskrnl/ke/amd64/traphandler.c index dc72d08fc63da..ef2cb4d7dae27 100644 --- a/ntoskrnl/ke/amd64/traphandler.c +++ b/ntoskrnl/ke/amd64/traphandler.c @@ -159,9 +159,8 @@ KiSystemCallHandler( /* We don't have an exception frame yet */ TrapFrame->ExceptionFrame = 0; - /* Before enabling interrupts get the user rsp from the KPCR */ - UserRsp = __readgsqword(FIELD_OFFSET(KIPCR, UserRsp)); - TrapFrame->Rsp = UserRsp; + /* Get the user Stack pointer */ + UserRsp = TrapFrame->Rsp; /* Enable interrupts */ _enable(); diff --git a/ntoskrnl/ke/amd64/usercall.c b/ntoskrnl/ke/amd64/usercall.c index 9bcc81384b4b9..81f7a81fdfcaa 100644 --- a/ntoskrnl/ke/amd64/usercall.c +++ b/ntoskrnl/ke/amd64/usercall.c @@ -318,9 +318,6 @@ KeUserModeCallback( /* Restore stack and return */ *UserStackPointer = OldStack; -#ifdef _M_AMD64 // could probably move the update to TrapFrame->Rsp from the C handler to the asm code - __writegsqword(FIELD_OFFSET(KIPCR, UserRsp), OldStack); -#endif return CallbackStatus; } From 29721ac552cd104116bbc197b8df1782c72f7710 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 11 Dec 2024 16:47:28 +0200 Subject: [PATCH 039/750] [NTOS:KE/x64] Fix unwinding in KiUserApcDispatcher This adds a MACHINE_FRAME to the user mode APC dispatcher stack frame. --- dll/ntdll/dispatch/amd64/dispatch.S | 26 ++++++++++++++++++++++++++ ntoskrnl/ke/amd64/usercall.c | 18 ++++++++++++------ sdk/include/ndk/amd64/ketypes.h | 9 +++++++++ 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/dll/ntdll/dispatch/amd64/dispatch.S b/dll/ntdll/dispatch/amd64/dispatch.S index ea08389c919ae..60b3f22bb58bc 100644 --- a/dll/ntdll/dispatch/amd64/dispatch.S +++ b/dll/ntdll/dispatch/amd64/dispatch.S @@ -33,6 +33,32 @@ PUBLIC LdrInitializeThunk PUBLIC KiUserApcDispatcher .PROC KiUserApcDispatcher + + /* The stack is set up with a UAPC_FRAME, which ends with a MACHINE_FRAME */ + .PUSHFRAME + .ALLOCSTACK CONTEXT_FRAME_LENGTH + + /* The stack points to a CONTEXT structure. + Create unwind ops for all nonvolatile registers */ + .SAVEREG rbx, CxRbx + .SAVEREG rbp, CxRbp + .SAVEREG rsi, CxRsi + .SAVEREG rdi, CxRdi + .SAVEREG r12, CxR12 + .SAVEREG r13, CxR13 + .SAVEREG r14, CxR14 + .SAVEREG r15, CxR15 + .SAVEXMM128 xmm6, CxXmm6 + .SAVEXMM128 xmm7, CxXmm7 + .SAVEXMM128 xmm8, CxXmm8 + .SAVEXMM128 xmm9, CxXmm9 + .SAVEXMM128 xmm10, CxXmm10 + .SAVEXMM128 xmm11, CxXmm11 + .SAVEXMM128 xmm12, CxXmm12 + .SAVEXMM128 xmm13, CxXmm13 + .SAVEXMM128 xmm14, CxXmm14 + .SAVEXMM128 xmm15, CxXmm15 + .endprolog /* We enter with a 16 byte aligned stack */ diff --git a/ntoskrnl/ke/amd64/usercall.c b/ntoskrnl/ke/amd64/usercall.c index 81f7a81fdfcaa..bab35e9e40ed8 100644 --- a/ntoskrnl/ke/amd64/usercall.c +++ b/ntoskrnl/ke/amd64/usercall.c @@ -16,8 +16,8 @@ * * \brief * Prepares the current trap frame (which must have come from user mode) - * with the ntdll.KiUserApcDispatcher entrypoint, copying a CONTEXT - * record with the context from the old trap frame to the threads user + * with the ntdll.KiUserApcDispatcher entrypoint, copying a UAPC_FRAME + * structure with the context from the old trap frame to the threads user * mode stack. * * \param ExceptionFrame - Pointer to the Exception Frame @@ -53,20 +53,22 @@ KiInitializeUserApc( _In_ PVOID SystemArgument1, _In_ PVOID SystemArgument2) { + PUAPC_FRAME ApcFrame; PCONTEXT Context; EXCEPTION_RECORD ExceptionRecord; /* Sanity check, that the trap frame is from user mode */ ASSERT((TrapFrame->SegCs & MODE_MASK) != KernelMode); - /* Align the user tack to 16 bytes and allocate space for a CONTEXT structure */ - Context = (PCONTEXT)ALIGN_DOWN_POINTER_BY(TrapFrame->Rsp, 16) - 1; + /* Allocate a 16 byte aligned UAPC_FRAME structure on the user stack */ + ApcFrame = (PUAPC_FRAME)ALIGN_DOWN_POINTER_BY(TrapFrame->Rsp - sizeof(*ApcFrame), 16); + Context = &ApcFrame->Context; /* Protect with SEH */ _SEH2_TRY { - /* Probe the context */ - ProbeForWrite(Context, sizeof(CONTEXT), 16); + /* Probe the user mode APC frame */ + ProbeForWrite(ApcFrame, sizeof(*ApcFrame), 16); /* Convert the current trap frame to a context */ Context->ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS; @@ -77,6 +79,10 @@ KiInitializeUserApc( Context->P2Home = (ULONG64)SystemArgument1; Context->P3Home = (ULONG64)SystemArgument2; Context->P4Home = (ULONG64)NormalRoutine; + + /* Set up the machine frame for unwinding */ + ApcFrame->MachineFrame.Rip = TrapFrame->Rip; + ApcFrame->MachineFrame.Rsp = TrapFrame->Rsp; } _SEH2_EXCEPT(ExceptionRecord = *_SEH2_GetExceptionInformation()->ExceptionRecord, EXCEPTION_EXECUTE_HANDLER) { diff --git a/sdk/include/ndk/amd64/ketypes.h b/sdk/include/ndk/amd64/ketypes.h index 410e0b55cb077..ea9031df667aa 100644 --- a/sdk/include/ndk/amd64/ketypes.h +++ b/sdk/include/ndk/amd64/ketypes.h @@ -1073,6 +1073,15 @@ typedef struct _UCALLOUT_FRAME MACHINE_FRAME MachineFrame; } UCALLOUT_FRAME, *PUCALLOUT_FRAME; // size = 0x0058 +// +// User side APC dispatcher frame +// +typedef struct _UAPC_FRAME +{ + CONTEXT Context; + MACHINE_FRAME MachineFrame; +} UAPC_FRAME, *PUAPC_FRAME; + // // Stack frame layout for KiUserExceptionDispatcher // The name is totally made up From 67231bd69ab9b66cc14d92b8ff33d1ffe197392f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Dec 2024 15:37:28 +0200 Subject: [PATCH 040/750] [NTOS:KE/X64] Fix KiInterruptDispatch - Enable interrupts - Acquire the spinlock on SMP builds --- ntoskrnl/ke/amd64/trap.S | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/ntoskrnl/ke/amd64/trap.S b/ntoskrnl/ke/amd64/trap.S index 34b7c906104d3..6f1c2a23521de 100644 --- a/ntoskrnl/ke/amd64/trap.S +++ b/ntoskrnl/ke/amd64/trap.S @@ -23,8 +23,9 @@ EXTERN KiDpcInterruptHandler:PROC EXTERN PsConvertToGuiThread:PROC EXTERN MmCreateKernelStack:PROC EXTERN MmDeleteKernelStack:PROC - EXTERN KdSetOwedBreakpoints:PROC +EXTERN KeAcquireSpinLockAtDpcLevel:PROC +EXTERN KeReleaseSpinLockFromDpcLevel:PROC /* Helper Macros *************************************************************/ @@ -744,11 +745,13 @@ FUNC KiInterruptDispatch movzx rax, byte ptr [rbx + KINTERRUPT_SynchronizeIrql] mov cr8, rax + /* Enable interrupts */ + sti + #ifdef CONFIG_SMP /* Acquire interrupt lock */ - mov r8, [rbx + KINTERRUPT_ActualLock] - - //KxAcquireSpinLock(Interrupt->ActualLock); + mov rcx, [rbx + KINTERRUPT_ActualLock] + call KeAcquireSpinLockAtDpcLevel #endif /* Call the ISR */ @@ -758,10 +761,12 @@ FUNC KiInterruptDispatch #ifdef CONFIG_SMP /* Release interrupt lock */ - //KxReleaseSpinLock(Interrupt->ActualLock); + mov rcx, [rbx + KINTERRUPT_ActualLock] + call KeReleaseSpinLockFromDpcLevel #endif - /* Go back to old irql */ + /* Disable interrupts and go back to old irql */ + cli movzx rax, byte ptr [rbp + KTRAP_FRAME_PreviousIrql] mov cr8, rax From 1f647e447985c839c2c51d3c0436e9f9ce430cd2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Dec 2024 16:51:26 +0200 Subject: [PATCH 041/750] [HAL] Remove KiEoiHelper hack --- hal/halx86/apic/rtctimer.c | 6 ++++++ hal/halx86/include/halp.h | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hal/halx86/apic/rtctimer.c b/hal/halx86/apic/rtctimer.c index 5bdf6bf93c961..2cc67908a0f8d 100644 --- a/hal/halx86/apic/rtctimer.c +++ b/hal/halx86/apic/rtctimer.c @@ -156,7 +156,10 @@ HalpClockInterruptHandler(IN PKTRAP_FRAME TrapFrame) if (!HalBeginSystemInterrupt(CLOCK_LEVEL, APIC_CLOCK_VECTOR, &Irql)) { /* Spurious, just end the interrupt */ +#ifdef _M_IX86 KiEoiHelper(TrapFrame); +#endif + return; } /* Read register C, so that the next interrupt can happen */ @@ -207,7 +210,10 @@ HalpClockIpiHandler(IN PKTRAP_FRAME TrapFrame) if (!HalBeginSystemInterrupt(CLOCK_LEVEL, CLOCK_IPI_VECTOR, &Irql)) { /* Spurious, just end the interrupt */ +#ifdef _M_IX86 KiEoiHelper(TrapFrame); +#endif + return; } /* Call the kernel to update runtimes */ diff --git a/hal/halx86/include/halp.h b/hal/halx86/include/halp.h index c1ee6a67cae9b..64fa72b3df069 100644 --- a/hal/halx86/include/halp.h +++ b/hal/halx86/include/halp.h @@ -586,7 +586,6 @@ HalInitializeBios( #ifdef _M_AMD64 #define KfLowerIrql KeLowerIrql #define KiEnterInterruptTrap(TrapFrame) /* We do all neccessary in asm code */ -#define KiEoiHelper(TrapFrame) return /* Just return to the caller */ #define HalBeginSystemInterrupt(Irql, Vector, OldIrql) ((*(OldIrql) = PASSIVE_LEVEL), TRUE) #endif // _M_AMD64 From 5ebd4783257270ea50dcc02babacd56a6623bce8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Dec 2024 16:53:26 +0200 Subject: [PATCH 042/750] [NTOS][HAL:APIC] Call HalBegin/EndSystemInterrupt from clock handler --- hal/halx86/apic/apic.c | 2 +- hal/halx86/apic/rtctimer.c | 3 +++ hal/halx86/include/halp.h | 1 - ntoskrnl/include/internal/amd64/ke.h | 5 ++++- ntoskrnl/ke/time.c | 5 +++++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/hal/halx86/apic/apic.c b/hal/halx86/apic/apic.c index ae2c2e5a4abeb..e4165bacf2f05 100644 --- a/hal/halx86/apic/apic.c +++ b/hal/halx86/apic/apic.c @@ -743,7 +743,6 @@ HalDisableSystemInterrupt( IOApicWrite(IOAPIC_REDTBL + 2 * Index, ReDirReg.Long0); } -#ifndef _M_AMD64 BOOLEAN NTAPI HalBeginSystemInterrupt( @@ -826,6 +825,7 @@ HalEndSystemInterrupt( /* IRQL MANAGEMENT ************************************************************/ +#ifndef _M_AMD64 KIRQL NTAPI KeGetCurrentIrql(VOID) diff --git a/hal/halx86/apic/rtctimer.c b/hal/halx86/apic/rtctimer.c index 2cc67908a0f8d..a97f0a458a68a 100644 --- a/hal/halx86/apic/rtctimer.c +++ b/hal/halx86/apic/rtctimer.c @@ -191,6 +191,9 @@ HalpClockInterruptHandler(IN PKTRAP_FRAME TrapFrame) /* Update the system time -- on x86 the kernel will exit this trap */ KeUpdateSystemTime(TrapFrame, LastIncrement, Irql); + + /* End the interrupt */ + KiEndInterrupt(Irql, TrapFrame); } VOID diff --git a/hal/halx86/include/halp.h b/hal/halx86/include/halp.h index 64fa72b3df069..ef6111654dfb2 100644 --- a/hal/halx86/include/halp.h +++ b/hal/halx86/include/halp.h @@ -586,7 +586,6 @@ HalInitializeBios( #ifdef _M_AMD64 #define KfLowerIrql KeLowerIrql #define KiEnterInterruptTrap(TrapFrame) /* We do all neccessary in asm code */ -#define HalBeginSystemInterrupt(Irql, Vector, OldIrql) ((*(OldIrql) = PASSIVE_LEVEL), TRUE) #endif // _M_AMD64 extern BOOLEAN HalpNMIInProgress; diff --git a/ntoskrnl/include/internal/amd64/ke.h b/ntoskrnl/include/internal/amd64/ke.h index f0c6785ae6f80..2bd4d5c8f3db3 100644 --- a/ntoskrnl/include/internal/amd64/ke.h +++ b/ntoskrnl/include/internal/amd64/ke.h @@ -356,7 +356,10 @@ KiEndInterrupt(IN KIRQL Irql, { /* Make sure this is from the clock handler */ ASSERT(TrapFrame->ErrorCode == 0xc10c4); - //KeLowerIrql(Irql); + + /* Disable interrupts and end the interrupt */ + _disable(); + HalEndSystemInterrupt(Irql, TrapFrame); } FORCEINLINE diff --git a/ntoskrnl/ke/time.c b/ntoskrnl/ke/time.c index 09b61f0007d06..cb10259bb6529 100644 --- a/ntoskrnl/ke/time.c +++ b/ntoskrnl/ke/time.c @@ -77,7 +77,10 @@ KeUpdateSystemTime(IN PKTRAP_FRAME TrapFrame, /* Increase interrupt count and end the interrupt */ Prcb->InterruptCount++; + +#ifdef _M_IX86 // x86 optimization KiEndInterrupt(Irql, TrapFrame); +#endif /* Note: non-x86 return back to the caller! */ return; @@ -131,8 +134,10 @@ KeUpdateSystemTime(IN PKTRAP_FRAME TrapFrame, Prcb->InterruptCount++; } +#ifdef _M_IX86 // x86 optimization /* Disable interrupts and end the interrupt */ KiEndInterrupt(Irql, TrapFrame); +#endif } VOID From 2416c31a30aa6bd88ff9548d48b224813296f7d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 14:46:36 +0100 Subject: [PATCH 043/750] [BATTC] Fix the wait timeout conversion KeWaitForSingleObject takes 100ns unit for timeout. Both IOCTL_BATTERY_QUERY_TAG and IOCTL_BATTERY_QUERY_STATUS take a wait for the timeout in milliseconds. Supposedly a miniport driver wants to supply a wait of 5000 ms (which is equivalent to 5 s), the miniport driver WON'T BE WAITING 5 seconds but 0.5!!! CORE-18969 CORE-19452 --- drivers/battery/battc/battc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/battery/battc/battc.c b/drivers/battery/battc/battc.c index dd08a9cd956c2..84ae9df061e7d 100644 --- a/drivers/battery/battc/battc.c +++ b/drivers/battery/battc/battc.c @@ -223,7 +223,7 @@ BatteryClassIoctl(PVOID ClassData, WaitTime = IrpSp->Parameters.DeviceIoControl.InputBufferLength == sizeof(ULONG) ? *(PULONG)Irp->AssociatedIrp.SystemBuffer : 0; - Timeout.QuadPart = Int32x32To64(WaitTime, -1000); + Timeout.QuadPart = Int32x32To64(WaitTime, -10000); Status = BattClass->MiniportInfo.QueryTag(BattClass->MiniportInfo.Context, (PULONG)Irp->AssociatedIrp.SystemBuffer); @@ -272,7 +272,7 @@ BatteryClassIoctl(PVOID ClassData, BattWait = *(PBATTERY_WAIT_STATUS)Irp->AssociatedIrp.SystemBuffer; - Timeout.QuadPart = Int32x32To64(BattWait.Timeout, -1000); + Timeout.QuadPart = Int32x32To64(BattWait.Timeout, -10000); BattStatus = Irp->AssociatedIrp.SystemBuffer; Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context, From ea8315ba567ea2bb607554145cb6597b78453ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 15:52:43 +0100 Subject: [PATCH 044/750] [CMBATT] Convert power statistics from mAh to mWh ReactOS (like any other OSes) expects power data to be represented in milliwatts per hour, not in milliamps per hour. Currently CMBATT defaults the stats to unknown values, if that's the case, and there are a bunch of machines that do report their data from _BIF ACPI method in ampere. CORE-18969 CORE-19452 --- drivers/bus/acpi/cmbatt/cmbatt.c | 48 ++++++++++++++++++++++++++------ drivers/bus/acpi/cmbatt/cmbatt.h | 7 +++++ 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/drivers/bus/acpi/cmbatt/cmbatt.c b/drivers/bus/acpi/cmbatt/cmbatt.c index 3935a9c8150e7..452c224231704 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.c +++ b/drivers/bus/acpi/cmbatt/cmbatt.c @@ -275,10 +275,12 @@ CmBattUnload(IN PDRIVER_OBJECT DriverObject) NTSTATUS NTAPI -CmBattVerifyStaticInfo(PCMBATT_DEVICE_EXTENSION DeviceExtension, - ULONG BatteryTag) +CmBattVerifyStaticInfo( + _Inout_ PCMBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG BatteryTag) { ACPI_BIF_DATA BifData; + ULONG DesignVoltage = DeviceExtension->BifData.DesignVoltage; PBATTERY_INFORMATION Info = &DeviceExtension->BatteryInformation; NTSTATUS Status; @@ -292,16 +294,44 @@ CmBattVerifyStaticInfo(PCMBATT_DEVICE_EXTENSION DeviceExtension, // FIXME: take from _BIX method: Info->CycleCount DeviceExtension->BifData = BifData; - if (BifData.PowerUnit == 1) + /* Check if the power stats are reported in ampere or watts */ + if (BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) { - DPRINT1("FIXME: need to convert mAh into mWh\n"); - Info->DesignedCapacity = BATTERY_UNKNOWN_CAPACITY; - Info->FullChargedCapacity = BATTERY_UNKNOWN_CAPACITY; - Info->DefaultAlert1 = BATTERY_UNKNOWN_CAPACITY; - Info->DefaultAlert2 = BATTERY_UNKNOWN_CAPACITY; + /* + * We have got power stats in milli-ampere but ReactOS expects the values + * to be reported in milli-watts, so we have to convert them. + * In order to do so we must expect the design voltage of the battery + * is not unknown. + */ + if ((DesignVoltage != BATTERY_UNKNOWN_VOLTAGE) && (DesignVoltage != 0)) + { + /* Convert the design capacity */ + Info->DesignedCapacity = CONVERT_BATT_INFO(BifData.DesignCapacity, DesignVoltage); + + /* Convert the full charged capacity */ + Info->FullChargedCapacity = CONVERT_BATT_INFO(BifData.LastFullCapacity, DesignVoltage); + + /* Convert the low capacity alarm (DefaultAlert1) */ + Info->DefaultAlert1 = CONVERT_BATT_INFO(BifData.DesignCapacityLow, DesignVoltage); + + /* Convert the designed capacity warning alarm (DefaultAlert2) */ + Info->DefaultAlert2 = CONVERT_BATT_INFO(BifData.DesignCapacityWarning, DesignVoltage); + } + else + { + /* + * Without knowing the nominal designed voltage of the battery + * we cannot determine the power consumption of this battery. + */ + Info->DesignedCapacity = BATTERY_UNKNOWN_CAPACITY; + Info->FullChargedCapacity = BATTERY_UNKNOWN_CAPACITY; + Info->DefaultAlert1 = BATTERY_UNKNOWN_CAPACITY; + Info->DefaultAlert2 = BATTERY_UNKNOWN_CAPACITY; + } } else { + /* The stats are in milli-watts, use them directly */ Info->DesignedCapacity = BifData.DesignCapacity; Info->FullChargedCapacity = BifData.LastFullCapacity; Info->DefaultAlert1 = BifData.DesignCapacityLow; @@ -939,7 +969,7 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, } } } - else if ((DesignVoltage != CM_UNKNOWN_VALUE) && (DesignVoltage)) + else if ((DesignVoltage != CM_UNKNOWN_VALUE) && (DesignVoltage != 0)) // Same as doing DeviceExtension->BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS { /* We have voltage data, what about capacity? */ if (RemainingCapacity == CM_UNKNOWN_VALUE) diff --git a/drivers/bus/acpi/cmbatt/cmbatt.h b/drivers/bus/acpi/cmbatt/cmbatt.h index bb130208763f5..4a4817916f6a9 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.h +++ b/drivers/bus/acpi/cmbatt/cmbatt.h @@ -67,6 +67,13 @@ typedef enum _CMBATT_EXTENSION_TYPE #define CM_MAX_VALUE 0x7FFFFFFF #define CM_UNKNOWN_VALUE 0xFFFFFFFF +#define CONVERT_MAH_TO_MWH(mA, Volts) (((mA) * (Volts) + 500) / 1000) + +#define CONVERT_BATT_INFO(Capacity, DesignVoltage) \ + (((Capacity) != BATTERY_UNKNOWN_CAPACITY) \ + ? CONVERT_MAH_TO_MWH((Capacity), (DesignVoltage)) \ + : BATTERY_UNKNOWN_CAPACITY) + typedef struct _ACPI_BST_DATA { ULONG State; From f3dd15ad64b4d37e807ffafacb419ddd914df995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Mon, 16 Dec 2024 22:09:02 +0100 Subject: [PATCH 045/750] [CMBATT] Grab the design voltage after the BIF data gets copied There was a risk of accessing invalid data as the design voltage was grabbed before the read BIF data was copied into the device extension. --- drivers/bus/acpi/cmbatt/cmbatt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/bus/acpi/cmbatt/cmbatt.c b/drivers/bus/acpi/cmbatt/cmbatt.c index 452c224231704..cff0f8afd145f 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.c +++ b/drivers/bus/acpi/cmbatt/cmbatt.c @@ -280,7 +280,7 @@ CmBattVerifyStaticInfo( _In_ ULONG BatteryTag) { ACPI_BIF_DATA BifData; - ULONG DesignVoltage = DeviceExtension->BifData.DesignVoltage; + ULONG DesignVoltage; PBATTERY_INFORMATION Info = &DeviceExtension->BatteryInformation; NTSTATUS Status; @@ -293,6 +293,7 @@ CmBattVerifyStaticInfo( RtlCopyMemory(Info->Chemistry, BifData.BatteryType, 4); // FIXME: take from _BIX method: Info->CycleCount DeviceExtension->BifData = BifData; + DesignVoltage = DeviceExtension->BifData.DesignVoltage; /* Check if the power stats are reported in ampere or watts */ if (BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) From c10c5224ff76aeda1d83273e736a8a6244d74f4e Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 16 Dec 2024 23:19:31 +0100 Subject: [PATCH 046/750] [SETUPAPI] Implement SetupDiGetClassRegistryPropertyA and SetupDiSetClassRegistryPropertyA --- dll/win32/setupapi/devclass.c | 164 ++++++++++++++++++++++++++++++- dll/win32/setupapi/setupapi.spec | 4 +- 2 files changed, 164 insertions(+), 4 deletions(-) diff --git a/dll/win32/setupapi/devclass.c b/dll/win32/setupapi/devclass.c index ff3d7d9c070f8..c3bc47adb7c31 100644 --- a/dll/win32/setupapi/devclass.c +++ b/dll/win32/setupapi/devclass.c @@ -1420,6 +1420,91 @@ SetupDiGetClassDevPropertySheetsW( return ret; } +/*********************************************************************** + * SetupDiGetClassRegistryPropertyA(SETUPAPI.@) + */ +BOOL WINAPI +SetupDiGetClassRegistryPropertyA( + IN CONST GUID *ClassGuid, + IN DWORD Property, + OUT PDWORD PropertyRegDataType OPTIONAL, + OUT PBYTE PropertyBuffer, + IN DWORD PropertyBufferSize, + OUT PDWORD RequiredSize OPTIONAL, + IN PCSTR MachineName OPTIONAL, + IN PVOID Reserved) +{ + HMACHINE hMachine = NULL; + DWORD PropLength = 0; + DWORD Error = ERROR_SUCCESS; + CONFIGRET cr; + + TRACE("%s %lu %p %p %lu %p %s %p\n", + debugstr_guid(ClassGuid), Property, PropertyRegDataType, PropertyBuffer, + PropertyBufferSize, RequiredSize, MachineName, Reserved); + + if (Reserved != NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (MachineName) + { + cr = CM_Connect_MachineA(MachineName, &hMachine); + if (cr != CR_SUCCESS) + goto done; + } + + if (Property >= SPCRP_MAXIMUM_PROPERTY) + { + cr = CR_INVALID_PROPERTY; + goto done; + } + + PropLength = PropertyBufferSize; + cr = CM_Get_Class_Registry_PropertyA((LPGUID)ClassGuid, + Property + (CM_DRP_DEVICEDESC - SPDRP_DEVICEDESC), + PropertyRegDataType, + PropertyBuffer, + &PropLength, + 0, + hMachine); + if ((cr == CR_SUCCESS) || (cr == CR_BUFFER_SMALL)) + { + if (RequiredSize) + *RequiredSize = PropLength; + } + +done: + if (cr != CR_SUCCESS) + { + switch (cr) + { + case CR_INVALID_DEVINST : + Error = ERROR_NO_SUCH_DEVINST; + break; + + case CR_INVALID_PROPERTY : + Error = ERROR_INVALID_REG_PROPERTY; + break; + + case CR_BUFFER_SMALL : + Error = ERROR_INSUFFICIENT_BUFFER; + break; + + default : + Error = GetErrorCodeFromCrCode(cr); + } + } + + if (hMachine != NULL) + CM_Disconnect_Machine(hMachine); + + SetLastError(Error); + return (cr == CR_SUCCESS); +} + /*********************************************************************** * SetupDiGetClassRegistryPropertyW(SETUPAPI.@) */ @@ -1451,7 +1536,7 @@ SetupDiGetClassRegistryPropertyW( if (MachineName) { - cr = CM_Connect_Machine(MachineName, &hMachine); + cr = CM_Connect_MachineW(MachineName, &hMachine); if (cr != CR_SUCCESS) goto done; } @@ -1505,6 +1590,81 @@ SetupDiGetClassRegistryPropertyW( return (cr == CR_SUCCESS); } +/*********************************************************************** + * SetupDiSetClassRegistryPropertyA(SETUPAPI.@) + */ +BOOL WINAPI +SetupDiSetClassRegistryPropertyA( + IN CONST GUID *ClassGuid, + IN DWORD Property, + IN CONST BYTE *PropertyBuffer OPTIONAL, + IN DWORD PropertyBufferSize, + IN PCSTR MachineName OPTIONAL, + IN PVOID Reserved) +{ + HMACHINE hMachine = NULL; + DWORD Error = ERROR_SUCCESS; + CONFIGRET cr; + + TRACE("%s %lu %p %lu %s %p\n", + debugstr_guid(ClassGuid), Property, PropertyBuffer, + PropertyBufferSize, MachineName, Reserved); + + if (Reserved != NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (MachineName) + { + cr = CM_Connect_MachineA(MachineName, &hMachine); + if (cr != CR_SUCCESS) + goto done; + } + + if (Property >= SPCRP_MAXIMUM_PROPERTY) + { + cr = CR_INVALID_PROPERTY; + goto done; + } + + cr = CM_Set_Class_Registry_PropertyA((LPGUID)ClassGuid, + Property + (CM_DRP_DEVICEDESC - SPDRP_DEVICEDESC), + PropertyBuffer, + PropertyBufferSize, + 0, + hMachine); + +done: + if (cr != CR_SUCCESS) + { + switch (cr) + { + case CR_INVALID_DEVINST: + Error = ERROR_NO_SUCH_DEVINST; + break; + + case CR_INVALID_PROPERTY: + Error = ERROR_INVALID_REG_PROPERTY; + break; + + case CR_BUFFER_SMALL: + Error = ERROR_INSUFFICIENT_BUFFER; + break; + + default : + Error = GetErrorCodeFromCrCode(cr); + } + } + + if (hMachine != NULL) + CM_Disconnect_Machine(hMachine); + + SetLastError(Error); + return (cr == CR_SUCCESS); +} + /*********************************************************************** * SetupDiSetClassRegistryPropertyW(SETUPAPI.@) */ @@ -1533,7 +1693,7 @@ SetupDiSetClassRegistryPropertyW( if (MachineName) { - cr = CM_Connect_Machine(MachineName, &hMachine); + cr = CM_Connect_MachineW(MachineName, &hMachine); if (cr != CR_SUCCESS) goto done; } diff --git a/dll/win32/setupapi/setupapi.spec b/dll/win32/setupapi/setupapi.spec index 7a42afad98cdb..1c86bb655acc0 100644 --- a/dll/win32/setupapi/setupapi.spec +++ b/dll/win32/setupapi/setupapi.spec @@ -313,7 +313,7 @@ @ stdcall SetupDiGetClassImageListExW(ptr wstr ptr) @ stdcall SetupDiGetClassInstallParamsA(ptr ptr ptr long ptr) @ stdcall SetupDiGetClassInstallParamsW(ptr ptr ptr long ptr) -@ stub SetupDiGetClassRegistryPropertyA +@ stdcall SetupDiGetClassRegistryPropertyA(ptr long ptr ptr long ptr str ptr) @ stdcall SetupDiGetClassRegistryPropertyW(ptr long ptr ptr long ptr wstr ptr) @ stub SetupDiGetCustomDevicePropertyA @ stub SetupDiGetCustomDevicePropertyW @@ -374,7 +374,7 @@ @ stub SetupDiSelectOEMDrv @ stdcall SetupDiSetClassInstallParamsA(ptr ptr ptr long) @ stdcall SetupDiSetClassInstallParamsW(ptr ptr ptr long) -@ stub SetupDiSetClassRegistryPropertyA +@ stdcall SetupDiSetClassRegistryPropertyA(ptr long ptr long str ptr) @ stdcall SetupDiSetClassRegistryPropertyW(ptr long ptr long wstr ptr) @ stdcall SetupDiSetDeviceInstallParamsA(ptr ptr ptr) @ stdcall SetupDiSetDeviceInstallParamsW(ptr ptr ptr) From b0680d65feeed36b931e77f7ef861e8799725bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 13:48:46 +0100 Subject: [PATCH 047/750] [BATTC] Signal the wait battery tag event when notifying Battery Class BatteryClassStatusNotify is used by battery miniport drivers to notify the Battery Class of a status change. This can either be a battery status change or battery tag assignation, depending on what the device extension (namely the composite battery) waits for. We do have implementation for EVENT_BATTERY_STATUS but not for EVENT_BATTERY_TAG. What happens is when BatteryClassIoctl fails to query the battery tag because it has not yet been assigned, the thread is stuck on waiting for the event object to be signaled, forever. This tipically happens when a timeout of -1 (meaning the calling thread must wait indefinitely) is supplied. The composite battery driver (COMPBATT) is responsible to signal the Battery Class when a CM (Control Method) ACPI battery receives a tag, which then this function will signal the event. CORE-18969 CORE-19452 --- drivers/battery/battc/battc.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/battery/battc/battc.c b/drivers/battery/battc/battc.c index 84ae9df061e7d..e724f720b5fb4 100644 --- a/drivers/battery/battc/battc.c +++ b/drivers/battery/battc/battc.c @@ -76,11 +76,13 @@ BatteryClassQueryWmiDataBlock(PVOID ClassData, BCLASSAPI NTSTATUS NTAPI -BatteryClassStatusNotify(PVOID ClassData) +BatteryClassStatusNotify( + _In_ PVOID ClassData) { PBATTERY_CLASS_DATA BattClass; PBATTERY_WAIT_STATUS BattWait; BATTERY_STATUS BattStatus; + ULONG Tag; NTSTATUS Status; DPRINT("Received battery status notification from %p\n", ClassData); @@ -99,7 +101,14 @@ BatteryClassStatusNotify(PVOID ClassData) { case EVENT_BATTERY_TAG: ExReleaseFastMutex(&BattClass->Mutex); - DPRINT1("Waiting for battery is UNIMPLEMENTED!\n"); + Status = BattClass->MiniportInfo.QueryTag(BattClass->MiniportInfo.Context, + &Tag); + if (!NT_SUCCESS(Status)) + return Status; + + ExAcquireFastMutex(&BattClass->Mutex); + KeSetEvent(&BattClass->WaitEvent, IO_NO_INCREMENT, FALSE); + ExReleaseFastMutex(&BattClass->Mutex); break; case EVENT_BATTERY_STATUS: From 28b277aa42dd7d8d156e5cacab144b197e278434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sun, 15 Dec 2024 20:58:18 +0100 Subject: [PATCH 048/750] [STOBJECT] Display the estimated battery time when hovering the battery icon We do have IDS_PWR_HOURS_REMAINING and IDS_PWR_MINUTES_REMAINING string resources but they're never used programmatically. Display the estimated battery time ONLY if the returned time is not unknown. CORE-18969 CORE-19452 --- dll/shellext/stobject/power.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/dll/shellext/stobject/power.cpp b/dll/shellext/stobject/power.cpp index ecae456b66ec2..7f714cf62532f 100644 --- a/dll/shellext/stobject/power.cpp +++ b/dll/shellext/stobject/power.cpp @@ -29,6 +29,8 @@ typedef struct _PWRSCHEMECONTEXT CString g_strTooltip; static HICON g_hIconBattery = NULL; +#define HOUR_IN_SECS 3600 +#define MIN_IN_SECS 60 /*++ * @name Quantize @@ -78,6 +80,7 @@ static HICON DynamicLoadIcon(HINSTANCE hinst) { SYSTEM_POWER_STATUS PowerStatus; HICON hBatIcon; + UINT uiHour, uiMin; UINT index = -1; if (!GetSystemPowerStatus(&PowerStatus) || @@ -107,7 +110,25 @@ static HICON DynamicLoadIcon(HINSTANCE hinst) { index = Quantize(PowerStatus.BatteryLifePercent); hBatIcon = LoadIcon(hinst, MAKEINTRESOURCE(br_icons[index])); - g_strTooltip.Format(IDS_PWR_PERCENT_REMAINING, PowerStatus.BatteryLifePercent); + + if (PowerStatus.BatteryLifeTime != BATTERY_UNKNOWN_TIME) + { + uiHour = PowerStatus.BatteryLifeTime / HOUR_IN_SECS; + uiMin = (PowerStatus.BatteryLifeTime % HOUR_IN_SECS) / MIN_IN_SECS; + + if (uiHour != 0) + { + g_strTooltip.Format(IDS_PWR_HOURS_REMAINING, uiHour, uiMin, PowerStatus.BatteryLifePercent); + } + else + { + g_strTooltip.Format(IDS_PWR_MINUTES_REMAINING, uiMin, PowerStatus.BatteryLifePercent); + } + } + else + { + g_strTooltip.Format(IDS_PWR_PERCENT_REMAINING, PowerStatus.BatteryLifePercent); + } } else { From e18763e13f81d92e0cb18c740360b8eb80da6114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Zouzal=C3=ADk?= Date: Tue, 17 Dec 2024 20:28:14 +0100 Subject: [PATCH 049/750] [USERINIT] Update German (de-DE) translation (#7541) * [USERINIT] Update German (de-DE) translation * [USERINIT] Update German (de-DE) translation * [USERINIT] Fix copyright header --- base/system/userinit/lang/de-DE.rc | 32 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/base/system/userinit/lang/de-DE.rc b/base/system/userinit/lang/de-DE.rc index 1ef20ca30b95f..b4fc9726cda1f 100644 --- a/base/system/userinit/lang/de-DE.rc +++ b/base/system/userinit/lang/de-DE.rc @@ -1,3 +1,11 @@ +/* + * PROJECT: ReactOS Userinit Logon Application + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: German resource file + * TRANSLATORS: Copyright 2005 Kevin Schnabel (FooDerGrosse) + * Copyright 2024 Václav Zouzalík (Venca24) + */ + LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL IDD_LOCALEPAGE DIALOGEX 0, 0, 317, 193 @@ -6,15 +14,15 @@ CAPTION "ReactOS LiveCD" FONT 8, "MS Shell Dlg" BEGIN CONTROL "IDB_LOGO", IDC_LOCALELOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 4, 290, 99 - RTEXT "&Language:", IDC_STATIC, 20, 109, 106, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + RTEXT "&Sprache:", IDC_STATIC, 20, 109, 106, 11, WS_CHILD | WS_VISIBLE | WS_GROUP COMBOBOX IDC_LANGUAGELIST, 132, 107, 176, 142, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | CBS_SORT | WS_VSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP - RTEXT "&Keyboard layout:", IDC_STATIC, 20, 132, 106, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + RTEXT "&Tastaturlayout:", IDC_STATIC, 20, 132, 106, 11, WS_CHILD | WS_VISIBLE | WS_GROUP COMBOBOX IDC_LAYOUTLIST, 132, 130, 176, 81, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | CBS_SORT | WS_VSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP - LTEXT "Select your language and keyboard layout and click Next to continue.", IDC_STATIC, 7, 152, 300, 8 + LTEXT "Wählen Sie Ihre Sprache und Ihr Tastaturlayout aus und klicken Sie auf Weiter.", IDC_STATIC, 7, 152, 300, 8 CONTROL "", IDC_STATIC, "STATIC", SS_ETCHEDHORZ, 0, 165, 317, 1 - DEFPUSHBUTTON "&Next", IDOK, 205, 172, 50, 14 - PUSHBUTTON "&Cancel", IDCANCEL, 260, 172, 50, 14 + DEFPUSHBUTTON "&Weiter", IDOK, 205, 172, 50, 14 + PUSHBUTTON "&Abbrechen", IDCANCEL, 260, 172, 50, 14 END IDD_STARTPAGE DIALOGEX 0, 0, 317, 193 @@ -23,24 +31,24 @@ CAPTION "ReactOS LiveCD" FONT 8, "MS Shell Dlg" BEGIN CONTROL "IDB_LOGO", IDC_STARTLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 4, 290, 99 - DEFPUSHBUTTON "Run ReactOS &Live CD", IDC_RUN, 71, 108, 175, 21 - PUSHBUTTON "&Install ReactOS", IDC_INSTALL, 71, 136, 175, 21 + DEFPUSHBUTTON "ReactOS &Live CD starten", IDC_RUN, 71, 108, 175, 21 + PUSHBUTTON "ReactOS &installieren", IDC_INSTALL, 71, 136, 175, 21 // LTEXT "", IDC_STATIC, 7, 152, 300, 8 CONTROL "", IDC_STATIC, "STATIC", SS_ETCHEDHORZ, 0, 165, 317, 1 - PUSHBUTTON "&Previous", IDOK, 205, 172, 50, 14 - PUSHBUTTON "&Cancel", IDCANCEL, 260, 172, 50, 14 + PUSHBUTTON "&Zurück", IDOK, 205, 172, 50, 14 + PUSHBUTTON "&Abbrechen", IDCANCEL, 260, 172, 50, 14 END STRINGTABLE BEGIN IDS_SHELL_FAIL "Userinit konnte die Shell nicht starten!" - IDS_INSTALLER_FAIL "Userinit failed to start the installer!" - IDS_CANCEL_CONFIRM "Are you sure you want to quit the ReactOS LiveCD?\nIf you choose to do so, your computer might restart." + IDS_INSTALLER_FAIL "Userinit konnte das Setup nicht starten!" + IDS_CANCEL_CONFIRM "Sind Sie sicher, dass Sie die ReactOS LiveCD beenden möchten?\nIhr Computer wird möglicherweise neu gestartet, wenn Sie fortfahren." END STRINGTABLE BEGIN - IDS_SPAIN "Spanish (Spain)" + IDS_SPAIN "Spanisch (Spanien)" END From dabe14ae67688e81c16fab6f9714eba0f8d96aab Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Wed, 11 Dec 2024 23:10:05 +0700 Subject: [PATCH 050/750] [NTDLL_APITEST] NtQueryInformationProcess: Add tests for ProcessBasicInformation --- .../ntdll/NtQueryInformationProcess.c | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c b/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c index 9469d4d492c06..a8cc325059799 100644 --- a/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c +++ b/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c @@ -186,6 +186,125 @@ Test_ProcessTimes(void) #undef SPIN_TIME } +static +void +Test_ProcessBasicInformation(void) +{ + NTSTATUS Status; + ULONG Length; + PROCESS_BASIC_INFORMATION BasicInfo; + + /* Everything is NULL */ + Status = NtQueryInformationProcess(NULL, + ProcessBasicInformation, + NULL, + 0, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Right size, invalid process handle */ + Status = NtQueryInformationProcess(NULL, + ProcessBasicInformation, + NULL, + sizeof(BasicInfo), + NULL); + ok_hex(Status, STATUS_INVALID_HANDLE); + + /* Valid process handle, no buffer */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + NULL, + 0, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Unaligned buffer, wrong size */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + (PVOID)2, + 0, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Unaligned buffer, correct size */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + (PVOID)2, + sizeof(BasicInfo), + NULL); + ok_hex(Status, STATUS_DATATYPE_MISALIGNMENT); + + /* Buffer too small */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + NULL, + sizeof(BasicInfo) - 1, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Right buffer size but NULL pointer */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + NULL, + sizeof(BasicInfo), + NULL); + ok_hex(Status, STATUS_ACCESS_VIOLATION); + + /* Buffer too large */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + NULL, + sizeof(BasicInfo) + 1, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Buffer too small, ask for length */ + Length = 0x55555555; + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + NULL, + sizeof(BasicInfo) - 1, + &Length); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + ok_dec(Length, 0x55555555); + + /* Valid parameters, no return length */ + RtlFillMemory(&BasicInfo, sizeof(BasicInfo), 0x55); + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + &BasicInfo, + sizeof(BasicInfo), + NULL); + ok_hex(Status, STATUS_SUCCESS); + + /* Trace the returned data (1) */ + trace("[1] BasicInfo.ExitStatus = %lx\n", BasicInfo.ExitStatus); + trace("[1] BasicInfo.PebBaseAddress = %p\n", BasicInfo.PebBaseAddress); + trace("[1] BasicInfo.AffinityMask = %Ix\n", BasicInfo.AffinityMask); + trace("[1] BasicInfo.BasePriority = %ld\n", BasicInfo.BasePriority); + trace("[1] BasicInfo.UniqueProcessId = %Iu\n", BasicInfo.UniqueProcessId); + trace("[1] BasicInfo.InheritedFromUniqueProcessId = %Iu\n", BasicInfo.InheritedFromUniqueProcessId); + + /* Again, this time with a return length */ + Length = 0x55555555; + RtlFillMemory(&BasicInfo, sizeof(BasicInfo), 0x55); + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessBasicInformation, + &BasicInfo, + sizeof(BasicInfo), + &Length); + ok_hex(Status, STATUS_SUCCESS); + ok_dec(Length, sizeof(BasicInfo)); + + /* Trace the returned data (2) */ + trace("[2] BasicInfo.ExitStatus = %lx\n", BasicInfo.ExitStatus); + trace("[2] BasicInfo.PebBaseAddress = %p\n", BasicInfo.PebBaseAddress); + trace("[2] BasicInfo.AffinityMask = %Ix\n", BasicInfo.AffinityMask); + trace("[2] BasicInfo.BasePriority = %ld\n", BasicInfo.BasePriority); + trace("[2] BasicInfo.UniqueProcessId = %Iu\n", BasicInfo.UniqueProcessId); + trace("[2] BasicInfo.InheritedFromUniqueProcessId = %Iu\n", BasicInfo.InheritedFromUniqueProcessId); +} + static void Test_ProcessPriorityClassAlignment(void) @@ -376,6 +495,7 @@ START_TEST(NtQueryInformationProcess) ok_hex(Status, STATUS_SUCCESS); Test_ProcessTimes(); + Test_ProcessBasicInformation(); Test_ProcessPriorityClassAlignment(); Test_ProcessWx86Information(); Test_ProcQueryAlignmentProbe(); From b1f27287aeaacbdf24e7853c8f6328b8623b863c Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Thu, 12 Dec 2024 02:37:42 +0700 Subject: [PATCH 051/750] [NTDLL_APITEST] NtQueryInformationProcess: Add tests for ProcessQuotaLimits/Ex --- .../ntdll/NtQueryInformationProcess.c | 222 ++++++++++++++++++ 1 file changed, 222 insertions(+) diff --git a/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c b/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c index a8cc325059799..43ac4c7f4240a 100644 --- a/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c +++ b/modules/rostests/apitests/ntdll/NtQueryInformationProcess.c @@ -305,6 +305,226 @@ Test_ProcessBasicInformation(void) trace("[2] BasicInfo.InheritedFromUniqueProcessId = %Iu\n", BasicInfo.InheritedFromUniqueProcessId); } +static +void +Test_ProcessQuotaLimits(void) +{ + NTSTATUS Status; + ULONG Length; + QUOTA_LIMITS QuotaLimits; + + /* Everything is NULL */ + Status = NtQueryInformationProcess(NULL, + ProcessQuotaLimits, + NULL, + 0, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Right size, invalid process handle */ + Status = NtQueryInformationProcess(NULL, + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimits), + NULL); + ok_hex(Status, STATUS_INVALID_HANDLE); + + /* Valid process handle, no buffer */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + 0, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Unaligned buffer, wrong size */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + (PVOID)2, + 0, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Unaligned buffer, correct size */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + (PVOID)2, + sizeof(QuotaLimits), + NULL); + ok_hex(Status, STATUS_DATATYPE_MISALIGNMENT); + + /* Buffer too small */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimits) - 1, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Right buffer size but NULL pointer */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimits), + NULL); + ok_hex(Status, STATUS_ACCESS_VIOLATION); + + /* Buffer too large */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimits) + 1, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Buffer too small, ask for length */ + Length = 0x55555555; + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimits) - 1, + &Length); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + ok_dec(Length, 0x55555555); + + /* Valid parameters, no return length */ + RtlFillMemory(&QuotaLimits, sizeof(QuotaLimits), 0x55); + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + &QuotaLimits, + sizeof(QuotaLimits), + NULL); + ok_hex(Status, STATUS_SUCCESS); + + /* Trace the returned data (1) */ + trace("[1] QuotaLimits.PagedPoolLimit = %Iu\n", QuotaLimits.PagedPoolLimit); + trace("[1] QuotaLimits.NonPagedPoolLimit = %Iu\n", QuotaLimits.NonPagedPoolLimit); + trace("[1] QuotaLimits.MinimumWorkingSetSize = %Iu\n", QuotaLimits.MinimumWorkingSetSize); + trace("[1] QuotaLimits.MaximumWorkingSetSize = %Iu\n", QuotaLimits.MaximumWorkingSetSize); + trace("[1] QuotaLimits.PagefileLimit = %Iu\n", QuotaLimits.PagefileLimit); + trace("[1] QuotaLimits.TimeLimit = %I64d\n", QuotaLimits.TimeLimit.QuadPart); + + /* Again, this time with a return length */ + Length = 0x55555555; + RtlFillMemory(&QuotaLimits, sizeof(QuotaLimits), 0x55); + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + &QuotaLimits, + sizeof(QuotaLimits), + &Length); + ok_hex(Status, STATUS_SUCCESS); + ok_dec(Length, sizeof(QuotaLimits)); + + /* Trace the returned data (2) */ + trace("[2] QuotaLimits.PagedPoolLimit = %Iu\n", QuotaLimits.PagedPoolLimit); + trace("[2] QuotaLimits.NonPagedPoolLimit = %Iu\n", QuotaLimits.NonPagedPoolLimit); + trace("[2] QuotaLimits.MinimumWorkingSetSize = %Iu\n", QuotaLimits.MinimumWorkingSetSize); + trace("[2] QuotaLimits.MaximumWorkingSetSize = %Iu\n", QuotaLimits.MaximumWorkingSetSize); + trace("[2] QuotaLimits.PagefileLimit = %Iu\n", QuotaLimits.PagefileLimit); + trace("[2] QuotaLimits.TimeLimit = %I64d\n", QuotaLimits.TimeLimit.QuadPart); +} + +static +void +Test_ProcessQuotaLimitsEx(void) +{ + NTSTATUS Status; + ULONG Length; + QUOTA_LIMITS_EX QuotaLimitsEx; + + /* Right size, invalid process handle */ + Status = NtQueryInformationProcess(NULL, + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimitsEx), + NULL); + ok_hex(Status, STATUS_INVALID_HANDLE); + + /* Unaligned buffer, correct size */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + (PVOID)2, + sizeof(QuotaLimitsEx), + NULL); + ok_hex(Status, STATUS_DATATYPE_MISALIGNMENT); + + /* Buffer too small */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimitsEx) - 1, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Right buffer size but NULL pointer */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimitsEx), + NULL); + ok_hex(Status, STATUS_ACCESS_VIOLATION); + + /* Buffer too large */ + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimitsEx) + 1, + NULL); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + + /* Buffer too small, ask for length */ + Length = 0x55555555; + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + NULL, + sizeof(QuotaLimitsEx) - 1, + &Length); + ok_hex(Status, STATUS_INFO_LENGTH_MISMATCH); + ok_dec(Length, 0x55555555); + + /* Valid parameters, no return length */ + RtlFillMemory(&QuotaLimitsEx, sizeof(QuotaLimitsEx), 0x55); + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + &QuotaLimitsEx, + sizeof(QuotaLimitsEx), + NULL); + ok_hex(Status, STATUS_SUCCESS); + + /* Trace the returned data (1) */ + trace("[1] QuotaLimitsEx.PagedPoolLimit = %Iu\n", QuotaLimitsEx.PagedPoolLimit); + trace("[1] QuotaLimitsEx.NonPagedPoolLimit = %Iu\n", QuotaLimitsEx.NonPagedPoolLimit); + trace("[1] QuotaLimitsEx.MinimumWorkingSetSize = %Iu\n", QuotaLimitsEx.MinimumWorkingSetSize); + trace("[1] QuotaLimitsEx.MaximumWorkingSetSize = %Iu\n", QuotaLimitsEx.MaximumWorkingSetSize); + trace("[1] QuotaLimitsEx.PagefileLimit = %Iu\n", QuotaLimitsEx.PagefileLimit); + trace("[1] QuotaLimitsEx.TimeLimit = %I64d\n", QuotaLimitsEx.TimeLimit.QuadPart); + //trace("[1] QuotaLimitsEx.WorkingSetLimit = %Iu\n", QuotaLimitsEx.WorkingSetLimit); // Not used on Win2k3 + trace("[1] QuotaLimitsEx.Flags = %lx\n", QuotaLimitsEx.Flags); + trace("[1] QuotaLimitsEx.CpuRateLimit.RateData = %lx\n", QuotaLimitsEx.CpuRateLimit.RateData); + + /* Again, this time with a return length */ + Length = 0x55555555; + RtlFillMemory(&QuotaLimitsEx, sizeof(QuotaLimitsEx), 0x55); + Status = NtQueryInformationProcess(NtCurrentProcess(), + ProcessQuotaLimits, + &QuotaLimitsEx, + sizeof(QuotaLimitsEx), + &Length); + ok_hex(Status, STATUS_SUCCESS); + ok_dec(Length, sizeof(QuotaLimitsEx)); + + /* Trace the returned data (2) */ + trace("[2] QuotaLimitsEx.PagedPoolLimit = %Iu\n", QuotaLimitsEx.PagedPoolLimit); + trace("[2] QuotaLimitsEx.NonPagedPoolLimit = %Iu\n", QuotaLimitsEx.NonPagedPoolLimit); + trace("[2] QuotaLimitsEx.MinimumWorkingSetSize = %Iu\n", QuotaLimitsEx.MinimumWorkingSetSize); + trace("[2] QuotaLimitsEx.MaximumWorkingSetSize = %Iu\n", QuotaLimitsEx.MaximumWorkingSetSize); + trace("[2] QuotaLimitsEx.PagefileLimit = %Iu\n", QuotaLimitsEx.PagefileLimit); + trace("[2] QuotaLimitsEx.TimeLimit = %I64d\n", QuotaLimitsEx.TimeLimit.QuadPart); + //trace("[2] QuotaLimitsEx.WorkingSetLimit = %Iu\n", QuotaLimitsEx.WorkingSetLimit); // Not used on Win2k3 + trace("[2] QuotaLimitsEx.Flags = %lx\n", QuotaLimitsEx.Flags); + trace("[2] QuotaLimitsEx.CpuRateLimit.RateData = %lx\n", QuotaLimitsEx.CpuRateLimit.RateData); +} + static void Test_ProcessPriorityClassAlignment(void) @@ -496,6 +716,8 @@ START_TEST(NtQueryInformationProcess) Test_ProcessTimes(); Test_ProcessBasicInformation(); + Test_ProcessQuotaLimits(); + Test_ProcessQuotaLimitsEx(); Test_ProcessPriorityClassAlignment(); Test_ProcessWx86Information(); Test_ProcQueryAlignmentProbe(); From bf0dbdbd1988baf44ebc2328905565e1bc8434a7 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Mon, 9 Dec 2024 23:56:53 +0700 Subject: [PATCH 052/750] [NTOS:PS] NtQueryInformationProcess: Move process information-specific variables to their own scope --- ntoskrnl/ps/query.c | 62 ++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/ntoskrnl/ps/query.c b/ntoskrnl/ps/query.c index cc7bae50ba46f..4613d7404b004 100644 --- a/ntoskrnl/ps/query.c +++ b/ntoskrnl/ps/query.c @@ -67,23 +67,7 @@ NtQueryInformationProcess( KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); NTSTATUS Status; ULONG Length = 0; - HANDLE DebugPort = 0; - PPROCESS_BASIC_INFORMATION ProcessBasicInfo = - (PPROCESS_BASIC_INFORMATION)ProcessInformation; - PKERNEL_USER_TIMES ProcessTime = (PKERNEL_USER_TIMES)ProcessInformation; - ULONG UserTime, KernelTime; - PPROCESS_PRIORITY_CLASS PsPriorityClass = (PPROCESS_PRIORITY_CLASS)ProcessInformation; - ULONG HandleCount; - PPROCESS_SESSION_INFORMATION SessionInfo = - (PPROCESS_SESSION_INFORMATION)ProcessInformation; - PVM_COUNTERS VmCounters = (PVM_COUNTERS)ProcessInformation; - PIO_COUNTERS IoCounters = (PIO_COUNTERS)ProcessInformation; - PQUOTA_LIMITS QuotaLimits = (PQUOTA_LIMITS)ProcessInformation; - PUNICODE_STRING ImageName; - ULONG Cookie, ExecuteOptions = 0; - ULONG_PTR Wow64 = 0; - PROCESS_VALUES ProcessValues; - ULONG Flags; + PAGED_CODE(); /* Verify Information Class validity */ @@ -119,6 +103,8 @@ NtQueryInformationProcess( { /* Basic process information */ case ProcessBasicInformation: + { + PPROCESS_BASIC_INFORMATION ProcessBasicInfo = (PPROCESS_BASIC_INFORMATION)ProcessInformation; if (ProcessInformationLength != sizeof(PROCESS_BASIC_INFORMATION)) { @@ -162,9 +148,12 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Process quota limits */ case ProcessQuotaLimits: + { + PQUOTA_LIMITS QuotaLimits = (PQUOTA_LIMITS)ProcessInformation; if (ProcessInformationLength != sizeof(QUOTA_LIMITS)) { @@ -227,8 +216,12 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } case ProcessIoCounters: + { + PIO_COUNTERS IoCounters = (PIO_COUNTERS)ProcessInformation; + PROCESS_VALUES ProcessValues; if (ProcessInformationLength != sizeof(IO_COUNTERS)) { @@ -266,9 +259,13 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Timing */ case ProcessTimes: + { + PKERNEL_USER_TIMES ProcessTime = (PKERNEL_USER_TIMES)ProcessInformation; + ULONG UserTime, KernelTime; /* Set the return length */ if (ProcessInformationLength != sizeof(KERNEL_USER_TIMES)) @@ -308,6 +305,7 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Process Debug Port */ case ProcessDebugPort: @@ -349,6 +347,8 @@ NtQueryInformationProcess( break; case ProcessHandleCount: + { + ULONG HandleCount; if (ProcessInformationLength != sizeof(ULONG)) { @@ -387,9 +387,12 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Session ID for the process */ case ProcessSessionInformation: + { + PPROCESS_SESSION_INFORMATION SessionInfo = (PPROCESS_SESSION_INFORMATION)ProcessInformation; if (ProcessInformationLength != sizeof(PROCESS_SESSION_INFORMATION)) { @@ -425,9 +428,12 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Virtual Memory Statistics */ case ProcessVmCounters: + { + PVM_COUNTERS VmCounters = (PVM_COUNTERS)ProcessInformation; /* Validate the input length */ if ((ProcessInformationLength != sizeof(VM_COUNTERS)) && @@ -477,6 +483,7 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Hard Error Processing Mode */ case ProcessDefaultHardErrorMode: @@ -558,6 +565,8 @@ NtQueryInformationProcess( /* DOS Device Map */ case ProcessDeviceMap: + { + ULONG Flags; if (ProcessInformationLength == sizeof(PROCESS_DEVICEMAP_INFORMATION_EX)) { @@ -617,9 +626,12 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } /* Priority class */ case ProcessPriorityClass: + { + PPROCESS_PRIORITY_CLASS PsPriorityClass = (PPROCESS_PRIORITY_CLASS)ProcessInformation; if (ProcessInformationLength != sizeof(PROCESS_PRIORITY_CLASS)) { @@ -656,8 +668,11 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } case ProcessImageFileName: + { + PUNICODE_STRING ImageName; /* Reference the process */ Status = ObReferenceObjectByHandle(ProcessHandle, @@ -710,6 +725,7 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } case ProcessDebugFlags: @@ -787,6 +803,8 @@ NtQueryInformationProcess( /* Per-process security cookie */ case ProcessCookie: + { + ULONG Cookie; if (ProcessInformationLength != sizeof(ULONG)) { @@ -836,6 +854,7 @@ NtQueryInformationProcess( } _SEH2_END; break; + } case ProcessImageInformation: @@ -866,6 +885,8 @@ NtQueryInformationProcess( break; case ProcessDebugObjectHandle: + { + HANDLE DebugPort = 0; if (ProcessInformationLength != sizeof(HANDLE)) { @@ -904,6 +925,7 @@ NtQueryInformationProcess( } _SEH2_END; break; + } case ProcessHandleTracing: DPRINT1("Handle tracing Not implemented: %lx\n", ProcessInformationClass); @@ -976,6 +998,8 @@ NtQueryInformationProcess( break; case ProcessWow64Information: + { + ULONG_PTR Wow64 = 0; if (ProcessInformationLength != sizeof(ULONG_PTR)) { @@ -1024,8 +1048,11 @@ NtQueryInformationProcess( /* Dereference the process */ ObDereferenceObject(Process); break; + } case ProcessExecuteFlags: + { + ULONG ExecuteOptions = 0; if (ProcessInformationLength != sizeof(ULONG)) { @@ -1059,6 +1086,7 @@ NtQueryInformationProcess( _SEH2_END; } break; + } case ProcessLdtInformation: DPRINT1("VDM/16-bit not implemented: %lx\n", ProcessInformationClass); From 1e06829961cb597f7e1927a5e35b66febe674a96 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Wed, 11 Dec 2024 01:50:30 +0700 Subject: [PATCH 053/750] [NTOS:PS] Add query support for QUOTA_LIMITS_EX --- ntoskrnl/include/internal/ps_i.h | 4 +- ntoskrnl/ps/query.c | 77 +++++++++++++++++++------------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/ntoskrnl/include/internal/ps_i.h b/ntoskrnl/include/internal/ps_i.h index 21f8368fa8896..04d564bd36a88 100644 --- a/ntoskrnl/include/internal/ps_i.h +++ b/ntoskrnl/include/internal/ps_i.h @@ -27,7 +27,9 @@ static const INFORMATION_CLASS_INFO PsProcessInfoClass[] = ( QUOTA_LIMITS, ULONG, - ICIF_QUERY | ICIF_SET | ICIF_SET_SIZE_VARIABLE + + /* NOTE: ICIF_SIZE_VARIABLE is for QUOTA_LIMITS_EX support */ + ICIF_QUERY | ICIF_SET | ICIF_SIZE_VARIABLE ), /* ProcessIoCounters */ diff --git a/ntoskrnl/ps/query.c b/ntoskrnl/ps/query.c index 4613d7404b004..01aa0361af838 100644 --- a/ntoskrnl/ps/query.c +++ b/ntoskrnl/ps/query.c @@ -153,15 +153,19 @@ NtQueryInformationProcess( /* Process quota limits */ case ProcessQuotaLimits: { - PQUOTA_LIMITS QuotaLimits = (PQUOTA_LIMITS)ProcessInformation; + QUOTA_LIMITS_EX QuotaLimits; + BOOLEAN Extended; - if (ProcessInformationLength != sizeof(QUOTA_LIMITS)) + if (ProcessInformationLength != sizeof(QUOTA_LIMITS) && + ProcessInformationLength != sizeof(QUOTA_LIMITS_EX)) { Status = STATUS_INFO_LENGTH_MISMATCH; break; } - Length = sizeof(QUOTA_LIMITS); + /* Set return length */ + Length = ProcessInformationLength; + Extended = (Length == sizeof(QUOTA_LIMITS_EX)); /* Reference the process */ Status = ObReferenceObjectByHandle(ProcessHandle, @@ -175,36 +179,49 @@ NtQueryInformationProcess( /* Indicate success */ Status = STATUS_SUCCESS; - _SEH2_TRY + RtlZeroMemory(&QuotaLimits, sizeof(QuotaLimits)); + + /* Get max/min working set sizes */ + QuotaLimits.MaximumWorkingSetSize = + Process->Vm.MaximumWorkingSetSize << PAGE_SHIFT; + QuotaLimits.MinimumWorkingSetSize = + Process->Vm.MinimumWorkingSetSize << PAGE_SHIFT; + + /* Get default time limits */ + QuotaLimits.TimeLimit.QuadPart = -1LL; + + /* Is quota block a default one? */ + if (Process->QuotaBlock == &PspDefaultQuotaBlock) { - /* Set max/min working set sizes */ - QuotaLimits->MaximumWorkingSetSize = - Process->Vm.MaximumWorkingSetSize << PAGE_SHIFT; - QuotaLimits->MinimumWorkingSetSize = - Process->Vm.MinimumWorkingSetSize << PAGE_SHIFT; + /* Get default pools and pagefile limits */ + QuotaLimits.PagedPoolLimit = (SIZE_T)-1; + QuotaLimits.NonPagedPoolLimit = (SIZE_T)-1; + QuotaLimits.PagefileLimit = (SIZE_T)-1; + } + else + { + /* Get limits from non-default quota block */ + QuotaLimits.PagedPoolLimit = + Process->QuotaBlock->QuotaEntry[PsPagedPool].Limit; + QuotaLimits.NonPagedPoolLimit = + Process->QuotaBlock->QuotaEntry[PsNonPagedPool].Limit; + QuotaLimits.PagefileLimit = + Process->QuotaBlock->QuotaEntry[PsPageFile].Limit; + } - /* Set default time limits */ - QuotaLimits->TimeLimit.LowPart = MAXULONG; - QuotaLimits->TimeLimit.HighPart = MAXULONG; + /* Get additional information, if needed */ + if (Extended) + { + /* FIXME: Get the correct information */ + //QuotaLimits.WorkingSetLimit = (SIZE_T)-1; // Not used on Win2k3, it is set to 0 + QuotaLimits.Flags = QUOTA_LIMITS_HARDWS_MIN_DISABLE | QUOTA_LIMITS_HARDWS_MAX_DISABLE; + QuotaLimits.CpuRateLimit.RateData = 0; + } - /* Is quota block a default one? */ - if (Process->QuotaBlock == &PspDefaultQuotaBlock) - { - /* Set default pools and pagefile limits */ - QuotaLimits->PagedPoolLimit = (SIZE_T)-1; - QuotaLimits->NonPagedPoolLimit = (SIZE_T)-1; - QuotaLimits->PagefileLimit = (SIZE_T)-1; - } - else - { - /* Get limits from non-default quota block */ - QuotaLimits->PagedPoolLimit = - Process->QuotaBlock->QuotaEntry[PsPagedPool].Limit; - QuotaLimits->NonPagedPoolLimit = - Process->QuotaBlock->QuotaEntry[PsNonPagedPool].Limit; - QuotaLimits->PagefileLimit = - Process->QuotaBlock->QuotaEntry[PsPageFile].Limit; - } + /* Protect writes with SEH */ + _SEH2_TRY + { + RtlCopyMemory(ProcessInformation, &QuotaLimits, Length); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { From d44ed03b6c3783369b0f25cd368f598757705165 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 18 Dec 2024 23:18:36 +0100 Subject: [PATCH 054/750] [SETUPAPI][PSDK] Implement SetupDiGetCustomDevicePropertyW --- dll/win32/setupapi/devinst.c | 80 ++++++++++++++++++++++++++++++++ dll/win32/setupapi/setupapi.spec | 2 +- sdk/include/psdk/setupapi.h | 1 + 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/dll/win32/setupapi/devinst.c b/dll/win32/setupapi/devinst.c index 47e2bf8beaa4b..53e99ba5d2947 100644 --- a/dll/win32/setupapi/devinst.c +++ b/dll/win32/setupapi/devinst.c @@ -6150,3 +6150,83 @@ SetupDiRestartDevices( return TRUE; } + +/*********************************************************************** + * SetupDiGetCustomDevicePropertyW (SETUPAPI.@) + */ +BOOL +WINAPI +SetupDiGetCustomDevicePropertyW( + IN HDEVINFO DeviceInfoSet, + IN PSP_DEVINFO_DATA DeviceInfoData, + IN PCWSTR CustomPropertyName, + IN DWORD Flags, + OUT PDWORD PropertyRegDataType OPTIONAL, + OUT PBYTE PropertyBuffer, + IN DWORD PropertyBufferSize, + OUT PDWORD RequiredSize OPTIONAL) +{ + struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet; + struct DeviceInfo *deviceInfo; + DWORD ConfigFlags = 0, PropertySize; + CONFIGRET cr; + + TRACE("%s(%p %p %s 0x%lx %p %p %lu %p)\n", __FUNCTION__, DeviceInfoSet, DeviceInfoData, + debugstr_w(CustomPropertyName), Flags, PropertyRegDataType, PropertyBuffer, PropertyBufferSize, RequiredSize); + + if (!DeviceInfoSet || DeviceInfoSet == INVALID_HANDLE_VALUE) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + if (set->magic != SETUP_DEVICE_INFO_SET_MAGIC) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + if (!DeviceInfoData || DeviceInfoData->cbSize != sizeof(SP_DEVINFO_DATA) + || !DeviceInfoData->Reserved) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if (Flags & ~DICUSTOMDEVPROP_MERGE_MULTISZ) + { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + deviceInfo = (struct DeviceInfo *)DeviceInfoData->Reserved; + if (deviceInfo->set != set) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags & DICUSTOMDEVPROP_MERGE_MULTISZ) + { + ConfigFlags |= CM_CUSTOMDEVPROP_MERGE_MULTISZ; + } + + PropertySize = PropertyBufferSize; + cr = CM_Get_DevInst_Custom_Property_ExW(deviceInfo->dnDevInst, + CustomPropertyName, + PropertyRegDataType, + PropertyBuffer, + &PropertySize, + ConfigFlags, + set->hMachine); + if ((cr == CR_SUCCESS) || (cr == CR_BUFFER_SMALL)) + { + if (RequiredSize) + *RequiredSize = PropertySize; + } + + if (cr != CR_SUCCESS) + { + SetLastError(GetErrorCodeFromCrCode(cr)); + return FALSE; + } + + return TRUE; +} diff --git a/dll/win32/setupapi/setupapi.spec b/dll/win32/setupapi/setupapi.spec index 1c86bb655acc0..3a15bffab48b0 100644 --- a/dll/win32/setupapi/setupapi.spec +++ b/dll/win32/setupapi/setupapi.spec @@ -316,7 +316,7 @@ @ stdcall SetupDiGetClassRegistryPropertyA(ptr long ptr ptr long ptr str ptr) @ stdcall SetupDiGetClassRegistryPropertyW(ptr long ptr ptr long ptr wstr ptr) @ stub SetupDiGetCustomDevicePropertyA -@ stub SetupDiGetCustomDevicePropertyW +@ stdcall SetupDiGetCustomDevicePropertyW(ptr ptr wstr long ptr ptr long ptr) @ stdcall SetupDiGetDeviceInfoListClass(ptr ptr) @ stdcall SetupDiGetDeviceInfoListDetailA(ptr ptr) @ stdcall SetupDiGetDeviceInfoListDetailW(ptr ptr) diff --git a/sdk/include/psdk/setupapi.h b/sdk/include/psdk/setupapi.h index efe15a7b0bfda..b209c8f00bbd6 100644 --- a/sdk/include/psdk/setupapi.h +++ b/sdk/include/psdk/setupapi.h @@ -117,6 +117,7 @@ extern "C" { #define DICS_START 4 #define DICS_FLAG_CONFIGGENERAL 4 #define DICS_STOP 5 +#define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001 #define DIF_SELECTDEVICE 1 #define DIF_INSTALLDEVICE 2 #define DIF_ASSIGNRESOURCES 3 From a18424267bf35061809d1198f0616e280504fd91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 11 Aug 2024 16:39:28 +0200 Subject: [PATCH 055/750] [NTOS:CM] Add some more configuration options. Add support for configuring the CM lazy-flush and delay-close variables: `CmpLazyFlushIntervalInSeconds`, `CmpLazyFlushHiveCount`, and `CmpDelayedCloseSize`, using REG_DWORD values named respectively: `RegistryLazyFlushInterval`, `RegistryLazyFlushHiveCount`, and `DelayCloseSize`, in the registry key `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Configuration Manager` . Extra observations: - While delay-close support exists in Windows 2003, configuring the delay-close size is possible only in Windows Vista and later. - The possibility of configuring the lazy-flush hive count has been removed in Windows 8+. See the comparison tables at: https://redplait.blogspot.com/2011/07/cmcontrolvector.html https://redplait.blogspot.com/2012/06/cmcontrolvector-for-w8.html https://redplait.blogspot.com/2016/03/cmcontrolvector-from-windows-10-build.html In addition: Remove `CmpDelayedCloseIndex` from cm.h as it is not used anymore in our code. --- ntoskrnl/config/cmdata.c | 21 +++++++++++++++++++++ ntoskrnl/config/cmlazy.c | 6 +++--- ntoskrnl/include/internal/cm.h | 4 +++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/config/cmdata.c b/ntoskrnl/config/cmdata.c index e428377a6fc74..47f166f56c2e0 100644 --- a/ntoskrnl/config/cmdata.c +++ b/ntoskrnl/config/cmdata.c @@ -675,6 +675,27 @@ DATA_SEG("INITDATA") CM_SYSTEM_CONTROL_VECTOR CmControlVector[] = NULL, NULL }, + { + L"Session Manager\\Configuration Manager", + L"RegistryLazyFlushInterval", + &CmpLazyFlushIntervalInSeconds, + NULL, + NULL + }, + { + L"Session Manager\\Configuration Manager", + L"RegistryLazyFlushHiveCount", + &CmpLazyFlushHiveCount, + NULL, + NULL + }, + { + L"Session Manager\\Configuration Manager", + L"DelayCloseSize", + &CmpDelayedCloseSize, + NULL, + NULL + }, { L"Session Manager\\Configuration Manager", L"VolatileBoot", diff --git a/ntoskrnl/config/cmlazy.c b/ntoskrnl/config/cmlazy.c index ebac8a205324a..201f719a3a420 100644 --- a/ntoskrnl/config/cmlazy.c +++ b/ntoskrnl/config/cmlazy.c @@ -22,7 +22,7 @@ BOOLEAN CmpLazyFlushPending; BOOLEAN CmpForceForceFlush; BOOLEAN CmpHoldLazyFlush = TRUE; ULONG CmpLazyFlushIntervalInSeconds = 5; -static ULONG CmpLazyFlushHiveCount = 7; +ULONG CmpLazyFlushHiveCount = 7; ULONG CmpLazyFlushCount = 1; LONG CmpFlushStarveWriters; @@ -60,7 +60,7 @@ CmpDoFlushNextHive(_In_ BOOLEAN ForceFlush, if (!(CmHive->Hive.HiveFlags & HIVE_NOLAZYFLUSH) && (CmHive->FlushCount != CmpLazyFlushCount)) { - /* Great sucess! */ + /* Great success! */ Result = TRUE; /* One less to flush */ @@ -80,7 +80,7 @@ CmpDoFlushNextHive(_In_ BOOLEAN ForceFlush, DPRINT("Flushing: %wZ\n", &CmHive->FileFullPath); DPRINT("Handle: %p\n", CmHive->FileHandles[HFILE_TYPE_PRIMARY]); Status = HvSyncHive(&CmHive->Hive); - if(!NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { /* Let them know we failed */ DPRINT1("Failed to flush %wZ on handle %p (status 0x%08lx)\n", diff --git a/ntoskrnl/include/internal/cm.h b/ntoskrnl/include/internal/cm.h index 02d8b9e177c70..7aed5fef6e454 100644 --- a/ntoskrnl/include/internal/cm.h +++ b/ntoskrnl/include/internal/cm.h @@ -1460,7 +1460,7 @@ extern HANDLE CmpRegistryRootHandle; extern BOOLEAN ExpInTextModeSetup; extern BOOLEAN InitIsWinPEMode; extern ULONG CmpHashTableSize; -extern ULONG CmpDelayedCloseSize, CmpDelayedCloseIndex; +extern ULONG CmpDelayedCloseSize; extern BOOLEAN CmpNoWrite; extern BOOLEAN CmpForceForceFlush; extern BOOLEAN CmpWasSetupBoot; @@ -1468,6 +1468,8 @@ extern BOOLEAN CmpProfileLoaded; extern PCMHIVE CmiVolatileHive; extern LIST_ENTRY CmiKeyObjectListHead; extern BOOLEAN CmpHoldLazyFlush; +extern ULONG CmpLazyFlushIntervalInSeconds; +extern ULONG CmpLazyFlushHiveCount; extern BOOLEAN HvShutdownComplete; // From 28399a216b744e6263c772754644743e7a6682f1 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Thu, 19 Dec 2024 14:38:27 +0100 Subject: [PATCH 056/750] [SHELL32] Use FS compatible PIDL format for Recycle Bin items (#7532) * [SHELL32] Use FS compatible PIDL format for Recycle Bin items This allows SHChangeNotify to handle these items and DefView will correctly update the recycle folder. CORE-18005 CORE-19239 CORE-13950 CORE-18435 CORE-18436 CORE-18437 --- dll/win32/shell32/CCopyAsPathMenu.cpp | 14 +- dll/win32/shell32/CDefView.cpp | 33 +- dll/win32/shell32/CDefaultContextMenu.cpp | 37 +- dll/win32/shell32/CFolderItemVerbs.cpp | 8 +- dll/win32/shell32/COpenWithMenu.cpp | 20 +- dll/win32/shell32/CSendToMenu.cpp | 9 +- dll/win32/shell32/CShellLink.cpp | 25 +- dll/win32/shell32/dialogs/recycler_prop.cpp | 77 +- dll/win32/shell32/folders/CDesktopFolder.cpp | 2 +- dll/win32/shell32/folders/CFSFolder.cpp | 150 +-- dll/win32/shell32/folders/CFSFolder.h | 7 + dll/win32/shell32/folders/CRecycleBin.cpp | 1008 +++++++++-------- dll/win32/shell32/folders/CRecycleBin.h | 7 +- dll/win32/shell32/precomp.h | 6 + .../shell32/shellrecyclebin/recyclebin.c | 161 +-- .../shell32/shellrecyclebin/recyclebin.h | 133 ++- .../shellrecyclebin/recyclebin_generic.cpp | 12 + .../shellrecyclebin/recyclebin_private.h | 12 + .../shell32/shellrecyclebin/recyclebin_v5.cpp | 40 +- .../shell32/shellrecyclebin/recyclebin_v5.h | 3 +- .../recyclebin_v5_enumerator.cpp | 73 +- dll/win32/shell32/shlexec.cpp | 10 +- dll/win32/shell32/utils.cpp | 94 ++ dll/win32/shell32/utils.h | 40 +- dll/win32/shell32/wine/pidl.c | 86 +- dll/win32/shell32/wine/pidl.h | 13 +- dll/win32/shell32/wine/shell32_main.h | 2 +- 27 files changed, 1141 insertions(+), 941 deletions(-) diff --git a/dll/win32/shell32/CCopyAsPathMenu.cpp b/dll/win32/shell32/CCopyAsPathMenu.cpp index f031874c5d405..3f8f43aeb2dba 100644 --- a/dll/win32/shell32/CCopyAsPathMenu.cpp +++ b/dll/win32/shell32/CCopyAsPathMenu.cpp @@ -103,6 +103,12 @@ CCopyAsPathMenu::DoCopyAsPath(IDataObject *pdto) return hr; } +static const CMVERBMAP g_VerbMap[] = +{ + { "copyaspath", IDC_COPYASPATH }, + { NULL } +}; + STDMETHODIMP CCopyAsPathMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) { @@ -133,7 +139,8 @@ CCopyAsPathMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { TRACE("CCopyAsPathMenu::InvokeCommand(%p %p)\n", this, lpcmi); - if (IS_INTRESOURCE(lpcmi->lpVerb) && LOWORD(lpcmi->lpVerb) == IDC_COPYASPATH) + int CmdId = SHELL_MapContextMenuVerbToCmdId(lpcmi, g_VerbMap); + if (CmdId == IDC_COPYASPATH) return DoCopyAsPath(m_pDataObject); return E_FAIL; @@ -142,10 +149,9 @@ CCopyAsPathMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) STDMETHODIMP CCopyAsPathMenu::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) { - FIXME("CCopyAsPathMenu::GetCommandString(%p %lu %u %p %p %u)\n", this, + TRACE("CCopyAsPathMenu::GetCommandString(%p %lu %u %p %p %u)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); - - return E_NOTIMPL; + return SHELL_GetCommandStringImpl(idCommand, uFlags, lpszName, uMaxNameLen, g_VerbMap); } STDMETHODIMP diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index d4c8ed82cab9e..0505c8e7b6911 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -1318,6 +1318,7 @@ int CDefView::LV_FindItemByPidl(PCUITEMID_CHILD pidl) { for (i = 0; i < cItems; i++) { + //FIXME: ILIsEqual needs absolute pidls! currentpidl = _PidlByItem(i); if (ILIsEqual(pidl, currentpidl)) return i; @@ -2848,29 +2849,35 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & TRACE("(%p)(%p,%p,%p)\n", this, Pidls[0], Pidls[1], lParam); if (_DoFolderViewCB(SFVM_FSNOTIFY, (WPARAM)Pidls, lEvent) == S_FALSE) + { + SHChangeNotification_Unlock(hLock); return FALSE; + } // Translate child IDLs. // SHSimpleIDListFromPathW creates fake PIDLs (lacking some attributes) + lEvent &= ~SHCNE_INTERRUPT; HRESULT hr; PITEMID_CHILD child0 = NULL, child1 = NULL; CComHeapPtr pidl0Temp, pidl1Temp; - if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0])) + if (lEvent != SHCNE_UPDATEIMAGE && lEvent < SHCNE_EXTENDED_EVENT) { - child0 = ILFindLastID(Pidls[0]); - hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp); - if (SUCCEEDED(hr)) - child0 = pidl0Temp; - } - if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1])) - { - child1 = ILFindLastID(Pidls[1]); - hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp); - if (SUCCEEDED(hr)) - child1 = pidl1Temp; + if (_ILIsSpecialFolder(Pidls[0]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[0])) + { + child0 = ILFindLastID(Pidls[0]); + hr = SHGetRealIDL(m_pSFParent, child0, &pidl0Temp); + if (SUCCEEDED(hr)) + child0 = pidl0Temp; + } + if (_ILIsSpecialFolder(Pidls[1]) || ILIsParentOrSpecialParent(m_pidlParent, Pidls[1])) + { + child1 = ILFindLastID(Pidls[1]); + hr = SHGetRealIDL(m_pSFParent, child1, &pidl1Temp); + if (SUCCEEDED(hr)) + child1 = pidl1Temp; + } } - lEvent &= ~SHCNE_INTERRUPT; switch (lEvent) { case SHCNE_MKDIR: diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index 6b83bd8a069b6..90954dd87c98c 100644 --- a/dll/win32/shell32/CDefaultContextMenu.cpp +++ b/dll/win32/shell32/CDefaultContextMenu.cpp @@ -84,6 +84,25 @@ UINT MapVerbToDfmCmd(_In_ LPCSTR verba) return 0; } +static HRESULT +MapVerbToCmdId(PVOID Verb, BOOL IsUnicode, IContextMenu *pCM, UINT idFirst, UINT idLast) +{ + const UINT gcs = IsUnicode ? GCS_VERBW : GCS_VERBA; + for (UINT id = idFirst; id <= idLast; ++id) + { + WCHAR buf[MAX_PATH]; + *buf = UNICODE_NULL; + HRESULT hr = pCM->GetCommandString(id, gcs, NULL, (LPSTR)buf, _countof(buf)); + if (FAILED(hr) || !*buf) + continue; + else if (IsUnicode && !_wcsicmp((LPWSTR)Verb, buf)) + return id; + else if (!IsUnicode && !lstrcmpiA((LPSTR)Verb, (LPSTR)buf)) + return id; + } + return HRESULT_FROM_WIN32(ERROR_NOT_FOUND); +} + static inline bool IsVerbListSeparator(WCHAR Ch) { return Ch == L' ' || Ch == L','; // learn.microsoft.com/en-us/windows/win32/shell/context-menu-handlers @@ -738,7 +757,7 @@ CDefaultContextMenu::AddStaticContextMenusToMenu( return cIds; } -void WINAPI _InsertMenuItemW( +BOOL WINAPI _InsertMenuItemW( HMENU hMenu, UINT indexMenu, BOOL fByPosition, @@ -764,7 +783,7 @@ void WINAPI _InsertMenuItemW( else { ERR("failed to load string %p\n", dwTypeData); - return; + return FALSE; } } else @@ -774,7 +793,7 @@ void WINAPI _InsertMenuItemW( mii.wID = wID; mii.fType = fType; - InsertMenuItemW(hMenu, indexMenu, fByPosition, &mii); + return InsertMenuItemW(hMenu, indexMenu, fByPosition, &mii); } void @@ -1212,6 +1231,18 @@ CDefaultContextMenu::MapVerbToCmdId(PVOID Verb, PUINT idCmd, BOOL IsUnicode) } } + for (POSITION it = m_DynamicEntries.GetHeadPosition(); it != NULL;) + { + DynamicShellEntry& entry = m_DynamicEntries.GetNext(it); + if (!entry.NumIds) + continue; + HRESULT hr = ::MapVerbToCmdId(Verb, IsUnicode, entry.pCM, 0, entry.NumIds - 1); + if (SUCCEEDED(hr)) + { + *idCmd = m_iIdSHEFirst + entry.iIdCmdFirst + hr; + return TRUE; + } + } return FALSE; } diff --git a/dll/win32/shell32/CFolderItemVerbs.cpp b/dll/win32/shell32/CFolderItemVerbs.cpp index 775f342f7375b..ce7f2266ba6e5 100644 --- a/dll/win32/shell32/CFolderItemVerbs.cpp +++ b/dll/win32/shell32/CFolderItemVerbs.cpp @@ -91,13 +91,7 @@ CFolderItemVerbs::~CFolderItemVerbs() HRESULT CFolderItemVerbs::Init(LPITEMIDLIST idlist) { - CComPtr folder; - LPCITEMIDLIST child; - HRESULT hr = SHBindToParent(idlist, IID_PPV_ARG(IShellFolder, &folder), &child); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - - hr = folder->GetUIObjectOf(NULL, 1, &child, IID_IContextMenu, NULL, (PVOID*)&m_contextmenu); + HRESULT hr = SHELL_GetUIObjectOfAbsoluteItem(NULL, idlist, IID_PPV_ARG(IContextMenu, &m_contextmenu)); if (FAILED_UNEXPECTEDLY(hr)) return hr; diff --git a/dll/win32/shell32/COpenWithMenu.cpp b/dll/win32/shell32/COpenWithMenu.cpp index 42f538a7eeb58..96a73dd822d14 100644 --- a/dll/win32/shell32/COpenWithMenu.cpp +++ b/dll/win32/shell32/COpenWithMenu.cpp @@ -1250,6 +1250,11 @@ VOID COpenWithMenu::AddApp(PVOID pApp) m_idCmdLast++; } +static const CMVERBMAP g_VerbMap[] = { + { "openas", 0 }, + { NULL } +}; + HRESULT WINAPI COpenWithMenu::QueryContextMenu( HMENU hMenu, UINT indexMenu, @@ -1328,14 +1333,19 @@ HRESULT WINAPI COpenWithMenu::QueryContextMenu( HRESULT WINAPI COpenWithMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici) { + const SIZE_T idChooseApp = m_idCmdLast; HRESULT hr = E_FAIL; TRACE("This %p idFirst %u idLast %u idCmd %u\n", this, m_idCmdFirst, m_idCmdLast, m_idCmdFirst + LOWORD(lpici->lpVerb)); - if (HIWORD(lpici->lpVerb) == 0 && m_idCmdFirst + LOWORD(lpici->lpVerb) <= m_idCmdLast) + if (!IS_INTRESOURCE(lpici->lpVerb) && SHELL_MapContextMenuVerbToCmdId(lpici, g_VerbMap) == 0) + goto DoChooseApp; + + if (IS_INTRESOURCE(lpici->lpVerb) && m_idCmdFirst + LOWORD(lpici->lpVerb) <= m_idCmdLast) { - if (m_idCmdFirst + LOWORD(lpici->lpVerb) == m_idCmdLast) + if (m_idCmdFirst + LOWORD(lpici->lpVerb) == idChooseApp) { +DoChooseApp: OPENASINFO info; LPCWSTR pwszExt = PathFindExtensionW(m_wszPath); @@ -1371,9 +1381,13 @@ HRESULT WINAPI COpenWithMenu::GetCommandString(UINT_PTR idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax ) { - FIXME("%p %lu %u %p %p %u\n", this, + TRACE("%p %lu %u %p %p %u\n", this, idCmd, uType, pwReserved, pszName, cchMax ); + const SIZE_T idChooseApp = m_idCmdLast; + if (m_idCmdFirst + idCmd == idChooseApp) + return SHELL_GetCommandStringImpl(0, uType, pszName, cchMax, g_VerbMap); + return E_NOTIMPL; } diff --git a/dll/win32/shell32/CSendToMenu.cpp b/dll/win32/shell32/CSendToMenu.cpp index 131f21e2a0a2f..8cce580ba082b 100644 --- a/dll/win32/shell32/CSendToMenu.cpp +++ b/dll/win32/shell32/CSendToMenu.cpp @@ -130,14 +130,7 @@ HRESULT CSendToMenu::GetUIObjectFromPidl(HWND hwnd, PIDLIST_ABSOLUTE pidl, REFIID riid, LPVOID *ppvOut) { *ppvOut = NULL; - - PCITEMID_CHILD pidlLast; - CComPtr pFolder; - HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &pFolder), &pidlLast); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - - hr = pFolder->GetUIObjectOf(hwnd, 1, &pidlLast, riid, NULL, ppvOut); + HRESULT hr = SHELL_GetUIObjectOfAbsoluteItem(hwnd, pidl, riid, ppvOut); if (FAILED_UNEXPECTEDLY(hr)) return hr; diff --git a/dll/win32/shell32/CShellLink.cpp b/dll/win32/shell32/CShellLink.cpp index d99db2f1470e5..9619efcf483f4 100644 --- a/dll/win32/shell32/CShellLink.cpp +++ b/dll/win32/shell32/CShellLink.cpp @@ -1729,18 +1729,10 @@ HRESULT STDMETHODCALLTYPE CShellLink::GetIconLocation(LPWSTR pszIconPath, INT cc static HRESULT SHELL_PidlGetIconLocationW(PCIDLIST_ABSOLUTE pidl, UINT uFlags, PWSTR pszIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) { - LPCITEMIDLIST pidlLast; - CComPtr psf; - - HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - CComPtr pei; - hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei)); + HRESULT hr = SHELL_GetUIObjectOfAbsoluteItem(NULL, pidl, IID_PPV_ARG(IExtractIconW, &pei)); if (FAILED_UNEXPECTEDLY(hr)) return hr; - hr = pei->GetIconLocation(uFlags, pszIconFile, cchMax, piIndex, pwFlags); if (FAILED_UNEXPECTEDLY(hr)) return hr; @@ -3142,20 +3134,9 @@ HRESULT STDMETHODCALLTYPE CShellLink::DragEnter(IDataObject *pDataObject, if (*pdwEffect == DROPEFFECT_NONE) return S_OK; - LPCITEMIDLIST pidlLast; - CComPtr psf; - - HRESULT hr = SHBindToParent(m_pPidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast); - + HRESULT hr = SHELL_GetUIObjectOfAbsoluteItem(NULL, m_pPidl, IID_PPV_ARG(IDropTarget, &m_DropTarget)); if (SUCCEEDED(hr)) - { - hr = psf->GetUIObjectOf(0, 1, &pidlLast, IID_NULL_PPV_ARG(IDropTarget, &m_DropTarget)); - - if (SUCCEEDED(hr)) - hr = m_DropTarget->DragEnter(pDataObject, dwKeyState, pt, pdwEffect); - else - *pdwEffect = DROPEFFECT_NONE; - } + hr = m_DropTarget->DragEnter(pDataObject, dwKeyState, pt, pdwEffect); else *pdwEffect = DROPEFFECT_NONE; diff --git a/dll/win32/shell32/dialogs/recycler_prop.cpp b/dll/win32/shell32/dialogs/recycler_prop.cpp index d7f79251a3e74..72387de388cf8 100644 --- a/dll/win32/shell32/dialogs/recycler_prop.cpp +++ b/dll/win32/shell32/dialogs/recycler_prop.cpp @@ -45,6 +45,9 @@ static void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable) EnableWindow(GetDlgItem(hwndDlg, 14002), TRUE); SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_UNCHECKED, 0); } + + // FIXME: Max capacity not implemented yet, disable for now (CORE-13743) + EnableWindow(GetDlgItem(hwndDlg, 14002), FALSE); } static VOID @@ -129,7 +132,8 @@ InitializeRecycleBinDlg(HWND hwndDlg, WCHAR DefaultDrive) swprintf(szName, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\BitBucket\\Volume\\%04X-%04X", LOWORD(dwSerial), HIWORD(dwSerial)); dwSize = sizeof(DWORD); - RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize); + if (RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize)) + pItem->dwMaxCapacity = ~0; /* Check if the maximum capacity doesn't exceed the available disk space (in megabytes), and truncate it if needed */ FreeBytesAvailable.QuadPart = (FreeBytesAvailable.QuadPart / (1024 * 1024)); @@ -240,7 +244,7 @@ static VOID FreeDriveItemContext(HWND hwndDlg) } static INT -GetDefaultItem(HWND hwndDlg, LVITEMW* li) +GetSelectedDriveItem(HWND hwndDlg, LVITEMW* li) { HWND hDlgCtrl; UINT iItemCount, iIndex; @@ -275,6 +279,7 @@ RecycleBinDlg( WPARAM wParam, LPARAM lParam) { + enum { WM_NEWDRIVESELECTED = WM_APP, WM_UPDATEDRIVESETTINGS }; LPPSHNOTIFY lppsn; LPNMLISTVIEW lppl; LVITEMW li; @@ -329,25 +334,9 @@ RecycleBinDlg( ss.fNoConfirmRecycle = SendDlgItemMessage(hwndDlg, 14004, BM_GETCHECK, 0, 0) == BST_UNCHECKED; SHGetSetSettings(&ss, SSF_NOCONFIRMRECYCLE, TRUE); - if (GetDefaultItem(hwndDlg, &li) > -1) + if (GetSelectedDriveItem(hwndDlg, &li) > -1) { - pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; - if (pItem) - { - uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); - if (bSuccess) - { - /* Check if the maximum capacity doesn't exceed the available disk space (in megabytes), and truncate it if needed */ - FreeBytesAvailable = pItem->FreeBytesAvailable; - FreeBytesAvailable.QuadPart = (FreeBytesAvailable.QuadPart / (1024 * 1024)); - pItem->dwMaxCapacity = min(uResult, FreeBytesAvailable.LowPart); - SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); - } - if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) - pItem->dwNukeOnDelete = TRUE; - else - pItem->dwNukeOnDelete = FALSE; - } + SendMessage(hwndDlg, WM_UPDATEDRIVESETTINGS, 0, li.lParam); } if (StoreDriveSettings(hwndDlg)) { @@ -369,31 +358,45 @@ RecycleBinDlg( if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) { - /* new focused item */ - toggleNukeOnDeleteOption(lppl->hdr.hwndFrom, pItem->dwNukeOnDelete); - SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + // New focused item, delay handling until after kill focus has been processed + PostMessage(hwndDlg, WM_NEWDRIVESELECTED, 0, (LPARAM)pItem); } else if ((lppl->uOldState & LVIS_FOCUSED) && !(lppl->uNewState & LVIS_FOCUSED)) { - /* kill focus */ - uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); - if (bSuccess) - { - /* Check if the maximum capacity doesn't exceed the available disk space (in megabytes), and truncate it if needed */ - FreeBytesAvailable = pItem->FreeBytesAvailable; - FreeBytesAvailable.QuadPart = (FreeBytesAvailable.QuadPart / (1024 * 1024)); - pItem->dwMaxCapacity = min(uResult, FreeBytesAvailable.LowPart); - SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); - } - if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) - pItem->dwNukeOnDelete = TRUE; - else - pItem->dwNukeOnDelete = FALSE; + // Kill focus + SendMessage(hwndDlg, WM_UPDATEDRIVESETTINGS, 0, (LPARAM)pItem); } return TRUE; } break; + case WM_NEWDRIVESELECTED: + if (lParam) + { + pItem = (PDRIVE_ITEM_CONTEXT)lParam; + toggleNukeOnDeleteOption(hwndDlg, pItem->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + } + break; + case WM_UPDATEDRIVESETTINGS: + if (lParam) + { + pItem = (PDRIVE_ITEM_CONTEXT)lParam; + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + { + /* Check if the maximum capacity doesn't exceed the available disk space (in megabytes), and truncate it if needed */ + FreeBytesAvailable = pItem->FreeBytesAvailable; + FreeBytesAvailable.QuadPart = (FreeBytesAvailable.QuadPart / (1024 * 1024)); + pItem->dwMaxCapacity = min(uResult, FreeBytesAvailable.LowPart); + SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + } + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + break; case WM_DESTROY: FreeDriveItemContext(hwndDlg); break; diff --git a/dll/win32/shell32/folders/CDesktopFolder.cpp b/dll/win32/shell32/folders/CDesktopFolder.cpp index 945f3450edede..b785a28a9599f 100644 --- a/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -695,7 +695,7 @@ HRESULT WINAPI CDesktopFolder::GetAttributesOf( *rgfInOut &= dwMyComputerAttributes; else if (_ILIsNetHood(apidl[i])) *rgfInOut &= dwMyNetPlacesAttributes; - else if (_ILIsFolder(apidl[i]) || _ILIsValue(apidl[i]) || _ILIsSpecialFolder(apidl[i])) + else if (_ILIsFolderOrFile(apidl[i]) || _ILIsSpecialFolder(apidl[i])) { CComPtr psf; HRESULT hr = _GetSFFromPidl(apidl[i], &psf); diff --git a/dll/win32/shell32/folders/CFSFolder.cpp b/dll/win32/shell32/folders/CFSFolder.cpp index 9ae1f53da1ff9..dd4b3678771ad 100644 --- a/dll/win32/shell32/folders/CFSFolder.cpp +++ b/dll/win32/shell32/folders/CFSFolder.cpp @@ -620,7 +620,7 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW { DWORD dwFileAttributes, dwShellAttributes; - if (!_ILIsFolder(pidl) && !_ILIsValue(pidl)) + if (!_ILIsFolderOrFile(pidl)) { ERR("Got wrong type of pidl!\n"); *pdwAttributes &= SFGAO_CANLINK; @@ -1007,9 +1007,9 @@ HRESULT WINAPI CFSFolder::BindToObject( /* Get the pidl data */ FileStruct* pData = &_ILGetDataPointer(pidl)->u.file; - FileStructW* pDataW = _ILGetFileStructW(pidl); - - if (!pDataW) + WCHAR szNameBuf[MAX_PATH]; + LPCWSTR pszName = GetItemFileName(pidl, szNameBuf, _countof(szNameBuf)); + if (!pszName) { ERR("CFSFolder::BindToObject: Invalid pidl!\n"); return E_INVALIDARG; @@ -1021,7 +1021,7 @@ HRESULT WINAPI CFSFolder::BindToObject( PERSIST_FOLDER_TARGET_INFO pfti = {0}; pfti.dwAttributes = -1; pfti.csidl = -1; - PathCombineW(pfti.szTargetParsingName, m_sPathTarget, pDataW->wszName); + PathCombineW(pfti.szTargetParsingName, m_sPathTarget, pszName); /* Get the CLSID to bind to */ CLSID clsidFolder; @@ -1088,6 +1088,20 @@ HRESULT WINAPI CFSFolder::BindToStorage( return E_NOTIMPL; } +HRESULT CFSFolder::CompareSortFoldersFirst(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + BOOL bIsFolder1 = _ILIsFolder(pidl1), bIsFolder2 = _ILIsFolder(pidl2); + // When sorting between a File and a Folder, the Folder gets sorted first + if (bIsFolder1 != bIsFolder2) + { + // ...but only if neither of them were generated by SHSimpleIDListFromPath + // because in that case we cannot tell if it's a file or a folder. + if (pidl1 && IsRealItem(*pidl1) && pidl2 && IsRealItem(*pidl2)) + return MAKE_COMPARE_HRESULT(bIsFolder1 ? -1 : 1); + } + return MAKE_SCODE(SEVERITY_ERROR, FACILITY_SHELL, S_EQUAL); +} + /************************************************************************** * CFSFolder::CompareIDs */ @@ -1096,31 +1110,24 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) { + WCHAR szNameBuf1[MAX_PATH], szNameBuf2[_countof(szNameBuf1)]; + LPCWSTR pszName1 = GetItemFileName(pidl1, szNameBuf1, _countof(szNameBuf1)); + LPCWSTR pszName2 = GetItemFileName(pidl2, szNameBuf2, _countof(szNameBuf2)); + if (!pszName1 || !pszName2 || LOWORD(lParam) >= GENERICSHELLVIEWCOLUMNS) + return E_INVALIDARG; + LPPIDLDATA pData1 = _ILGetDataPointer(pidl1); LPPIDLDATA pData2 = _ILGetDataPointer(pidl2); - FileStructW* pDataW1 = _ILGetFileStructW(pidl1); - FileStructW* pDataW2 = _ILGetFileStructW(pidl2); - BOOL bIsFolder1 = _ILIsFolder(pidl1); - BOOL bIsFolder2 = _ILIsFolder(pidl2); LPWSTR pExtension1, pExtension2; - if (!pDataW1 || !pDataW2 || LOWORD(lParam) >= GENERICSHELLVIEWCOLUMNS) - return E_INVALIDARG; - - /* When sorting between a File and a Folder, the Folder gets sorted first */ - if (bIsFolder1 != bIsFolder2) - { - // ...but only if neither of them were generated by SHSimpleIDListFromPath - // because in that case we cannot tell if it's a file or a folder. - if (IsRealItem(*pidl1) && IsRealItem(*pidl2)) - return MAKE_COMPARE_HRESULT(bIsFolder1 ? -1 : 1); - } - + HRESULT hr = CompareSortFoldersFirst(pidl1, pidl2); + if (SUCCEEDED(hr)) + return hr; int result = 0; switch (LOWORD(lParam)) { case SHFSF_COL_NAME: - result = _wcsicmp(pDataW1->wszName, pDataW2->wszName); + result = _wcsicmp(pszName1, pszName2); break; case SHFSF_COL_SIZE: if (pData1->u.file.dwFileSize > pData2->u.file.dwFileSize) @@ -1131,8 +1138,9 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam, result = 0; break; case SHFSF_COL_TYPE: - pExtension1 = PathFindExtensionW(pDataW1->wszName); - pExtension2 = PathFindExtensionW(pDataW2->wszName); + // FIXME: Compare the type strings from SHGetFileInfo + pExtension1 = PathFindExtensionW(pszName1); + pExtension2 = PathFindExtensionW(pszName2); result = _wcsicmp(pExtension1, pExtension2); break; case SHFSF_COL_MDATE: @@ -1273,7 +1281,7 @@ HRESULT WINAPI CFSFolder::GetAttributesOf(UINT cidl, { LPCITEMIDLIST rpidl = ILFindLastID(m_pidlRoot); - if (_ILIsFolder(rpidl) || _ILIsValue(rpidl)) + if (_ILIsFolderOrFile(rpidl)) { SHELL32_GetFSItemAttributes(this, rpidl, rgfInOut); } @@ -1297,7 +1305,7 @@ HRESULT WINAPI CFSFolder::GetAttributesOf(UINT cidl, while (cidl > 0 && *apidl) { pdump(*apidl); - if(_ILIsFolder(*apidl) || _ILIsValue(*apidl)) + if (_ILIsFolderOrFile(*apidl)) SHELL32_GetFSItemAttributes(this, *apidl, rgfInOut); else ERR("Got an unknown type of pidl!!!\n"); @@ -1549,14 +1557,14 @@ HRESULT WINAPI CFSFolder::SetNameOf( DWORD dwFlags, PITEMID_CHILD *pPidlOut) { - WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1]; + WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1], szNameBuf[MAX_PATH]; BOOL bIsFolder = _ILIsFolder (ILFindLastID (pidl)); TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", this, hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut); - FileStructW* pDataW = _ILGetFileStructW(pidl); - if (!pDataW) + LPCWSTR pszName = GetItemFileName(pidl, szNameBuf, _countof(szNameBuf)); + if (!pszName) { ERR("Got garbage pidl:\n"); pdump_always(pidl); @@ -1564,7 +1572,7 @@ HRESULT WINAPI CFSFolder::SetNameOf( } /* build source path */ - PathCombineW(szSrc, m_sPathTarget, pDataW->wszName); // FIXME: PIDLs without wide string + PathCombineW(szSrc, m_sPathTarget, pszName); /* build destination path */ if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER) @@ -1662,6 +1670,7 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, } else { + FILETIME ft; hr = S_OK; psd->str.uType = STRRET_WSTR; if (iColumn != SHFSF_COL_NAME) @@ -1683,7 +1692,11 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, GetItemDescription(pidl, psd->str.pOleStr, MAX_PATH); break; case SHFSF_COL_MDATE: - _ILGetFileDate(pidl, psd->str.pOleStr, MAX_PATH); + if (!_ILGetFileDateTime(pidl, &ft) || FAILED(FormatDateTime(ft, psd->str.pOleStr, MAX_PATH))) + { + *psd->str.pOleStr = UNICODE_NULL; + hr = S_FALSE; + } break; case SHFSF_COL_FATTS: _ILGetFileAttributes(pidl, psd->str.pOleStr, MAX_PATH); @@ -1744,17 +1757,12 @@ HRESULT WINAPI CFSFolder::Initialize(PCIDLIST_ABSOLUTE pidl) m_sPathTarget = NULL; /* set my path */ + HRESULT hr = E_FAIL; if (SHGetPathFromIDListW (pidl, wszTemp)) - { - int len = wcslen(wszTemp); - m_sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); - if (!m_sPathTarget) - return E_OUTOFMEMORY; - memcpy(m_sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR)); - } + hr = SHStrDupW(wszTemp, &m_sPathTarget); TRACE ("--(%p)->(%s)\n", this, debugstr_w(m_sPathTarget)); - return S_OK; + return hr; } /************************************************************************** @@ -1806,44 +1814,28 @@ HRESULT WINAPI CFSFolder::InitializeEx(IBindCtx * pbc, LPCITEMIDLIST pidlRootx, * the target folder is spezified in csidl OR pidlTargetFolder OR * szTargetParsingName */ + HRESULT hr = E_FAIL; if (ppfti) { if (ppfti->csidl != -1) { - if (SHGetSpecialFolderPathW(0, wszTemp, ppfti->csidl, - ppfti->csidl & CSIDL_FLAG_CREATE)) { - int len = wcslen(wszTemp); - m_sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); - if (!m_sPathTarget) - return E_OUTOFMEMORY; - memcpy(m_sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR)); - } + BOOL create = ppfti->csidl & CSIDL_FLAG_CREATE; + if (SHGetSpecialFolderPathW(0, wszTemp, ppfti->csidl, create)) + hr = SHStrDupW(wszTemp, &m_sPathTarget); } else if (ppfti->szTargetParsingName[0]) { - int len = wcslen(ppfti->szTargetParsingName); - m_sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); - if (!m_sPathTarget) - return E_OUTOFMEMORY; - memcpy(m_sPathTarget, ppfti->szTargetParsingName, - (len + 1) * sizeof(WCHAR)); + hr = SHStrDupW(ppfti->szTargetParsingName, &m_sPathTarget); } else if (ppfti->pidlTargetFolder) { if (SHGetPathFromIDListW(ppfti->pidlTargetFolder, wszTemp)) - { - int len = wcslen(wszTemp); - m_sPathTarget = (WCHAR *)SHAlloc((len + 1) * sizeof(WCHAR)); - if (!m_sPathTarget) - return E_OUTOFMEMORY; - memcpy(m_sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR)); - } + hr = SHStrDupW(wszTemp, &m_sPathTarget); } } - TRACE("--(%p)->(target=%s)\n", this, debugstr_w(m_sPathTarget)); pdump(m_pidlRoot); - return (m_sPathTarget) ? S_OK : E_FAIL; + return hr; } HRESULT WINAPI CFSFolder::GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO * ppfti) @@ -1923,17 +1915,16 @@ HRESULT CFSFolder::_GetIconHandler(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvO HRESULT CFSFolder::_CreateShellExtInstance(const CLSID *pclsid, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut) { HRESULT hr; - WCHAR wszPath[MAX_PATH]; + WCHAR wszPath[MAX_PATH], szNameBuf[MAX_PATH]; - FileStructW* pDataW = _ILGetFileStructW(pidl); - if (!pDataW) + LPCWSTR pszName = GetItemFileName(pidl, szNameBuf, _countof(szNameBuf)); + if (!pszName) { ERR("Got garbage pidl\n"); pdump_always(pidl); return E_INVALIDARG; } - - PathCombineW(wszPath, m_sPathTarget, pDataW->wszName); + PathCombineW(wszPath, m_sPathTarget, pszName); CComPtr pp; hr = SHCoCreateInstance(NULL, pclsid, NULL, IID_PPV_ARG(IPersistFile, &pp)); @@ -2104,3 +2095,28 @@ HRESULT WINAPI CFSFolder::MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) } return hr; } + +HRESULT CFSFolder::FormatDateTime(const FILETIME &ft, LPWSTR Buf, UINT cchBuf) +{ + FILETIME lft; + SYSTEMTIME time; + FileTimeToLocalFileTime(&ft, &lft); + FileTimeToSystemTime(&lft, &time); + UINT ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, Buf, cchBuf); + if (ret > 0 && ret < cchBuf) + { + /* Append space + time without seconds */ + Buf[ret-1] = ' '; + GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &Buf[ret], cchBuf - ret); + } + return ret ? S_OK : E_FAIL; +} + +HRESULT CFSFolder::FormatSize(UINT64 size, LPWSTR Buf, UINT cchBuf) +{ + if (StrFormatKBSizeW(size, Buf, cchBuf)) + return S_OK; + if (cchBuf) + *Buf = UNICODE_NULL; + return E_FAIL; +} diff --git a/dll/win32/shell32/folders/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index e3db017578d6d..79f9c2c17e5a1 100644 --- a/dll/win32/shell32/folders/CFSFolder.h +++ b/dll/win32/shell32/folders/CFSFolder.h @@ -130,6 +130,13 @@ class CFSFolder : // Helper functions shared with CDesktopFolder static HRESULT GetFSColumnDetails(UINT iColumn, SHELLDETAILS &sd); static HRESULT GetDefaultFSColumnState(UINT iColumn, SHCOLSTATEF &csFlags); + static HRESULT FormatDateTime(const FILETIME &ft, LPWSTR Buf, UINT cchBuf); + static HRESULT FormatSize(UINT64 size, LPWSTR Buf, UINT cchBuf); + static HRESULT CompareSortFoldersFirst(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2); + static inline int CompareUiStrings(LPCWSTR a, LPCWSTR b) + { + return StrCmpLogicalW(a, b); + } }; #endif /* _CFSFOLDER_H_ */ diff --git a/dll/win32/shell32/folders/CRecycleBin.cpp b/dll/win32/shell32/folders/CRecycleBin.cpp index a9660e216a8c7..bd09268623bb2 100644 --- a/dll/win32/shell32/folders/CRecycleBin.cpp +++ b/dll/win32/shell32/folders/CRecycleBin.cpp @@ -58,78 +58,259 @@ static const columninfo RecycleBinColumns[] = #define COLUMNS_COUNT 6 +// The ROS Recycle Bin PIDL format starts with a NT4/2000 Unicode FS PIDL followed by +// BBITEMDATA and BBITEMFOOTER. This makes it compatible with SHChangeNotify listeners. +#include "pshpack1.h" +#define BBITEMFILETYPE (PT_FS | PT_FS_UNICODE_FLAG | PT_FS_FILE_FLAG) +#define BBITEMFOLDERTYPE (PT_FS | PT_FS_UNICODE_FLAG | PT_FS_FOLDER_FLAG) +struct BBITEMDATA +{ + FILETIME DeletionTime; +#ifdef COLUMN_FATTS + WORD AttribsHi; // Nobody needs this yet +#endif + WORD RecycledPathOffset; + WCHAR OriginalLocation[ANYSIZE_ARRAY]; + // ... @RecycledPathOffset WCHAR RecycledPath[ANYSIZE_ARRAY]; +}; +struct BBITEMFOOTER +{ + enum { ENDSIG = MAKEWORD('K', 'I') }; // "Killed item". MUST have the low bit set so _ILGetFileStructW returns NULL. + WORD DataSize; + WORD EndSignature; +}; +#include "poppack.h" + +static inline BOOL IsFolder(LPCITEMIDLIST pidl) +{ + return _ILGetFSType(pidl) & PT_FS_FOLDER_FLAG; +} + +static BBITEMDATA* ValidateItem(LPCITEMIDLIST pidl) +{ + const UINT minstringsize = sizeof(L"X") + sizeof(""); // PT_FS strings + const UINT minfs = sizeof(WORD) + FIELD_OFFSET(PIDLDATA, u.file.szNames) + minstringsize; + const UINT mindatasize = FIELD_OFFSET(BBITEMDATA, OriginalLocation) + (sizeof(L"C:\\X") * 2); + const UINT minsize = minfs + mindatasize + sizeof(BBITEMFOOTER); + const BYTE type = _ILGetType(pidl); + if ((type == BBITEMFILETYPE || type == BBITEMFOLDERTYPE) && pidl->mkid.cb >= minsize) + { + BBITEMFOOTER *pEnd = (BBITEMFOOTER*)((BYTE*)pidl + pidl->mkid.cb - sizeof(BBITEMFOOTER)); + if (pEnd->EndSignature == BBITEMFOOTER::ENDSIG && pEnd->DataSize >= mindatasize) + return (BBITEMDATA*)((BYTE*)pEnd - pEnd->DataSize); + } + return NULL; +} + +static LPITEMIDLIST CreateItem(LPCWSTR pszTrash, LPCWSTR pszOrig, const DELETED_FILE_INFO &Details) +{ + const BOOL folder = Details.Attributes & FILE_ATTRIBUTE_DIRECTORY; + LPCWSTR pszName = PathFindFileNameW(pszTrash); + SIZE_T ofsName = (SIZE_T)(pszName - pszTrash); + SIZE_T cchName = wcslen(pszName) + 1, cbName = cchName * sizeof(WCHAR); + SIZE_T cbFSNames = cbName + sizeof("") + 1; // Empty short name + 1 for WORD alignment + SIZE_T cbFS = sizeof(WORD) + FIELD_OFFSET(PIDLDATA, u.file.szNames) + cbFSNames; + SIZE_T cchTrash = ofsName + cchName, cbTrash = cchTrash * sizeof(WCHAR); + SIZE_T cchOrig = wcslen(pszOrig) + 1, cbOrig = cchOrig * sizeof(WCHAR); + SIZE_T cbData = FIELD_OFFSET(BBITEMDATA, OriginalLocation) + cbOrig + cbTrash; + SIZE_T cb = cbFS + cbData + sizeof(BBITEMFOOTER); + if (cb > 0xffff) + return NULL; + LPITEMIDLIST pidl = (LPITEMIDLIST)SHAlloc(cb + sizeof(WORD)); + if (!pidl) + return pidl; + + pidl->mkid.cb = cb; + pidl->mkid.abID[0] = folder ? BBITEMFOLDERTYPE : BBITEMFILETYPE; + ILGetNext(pidl)->mkid.cb = 0; // Terminator + FileStruct &fsitem = ((PIDLDATA*)pidl->mkid.abID)->u.file; + fsitem.dummy = 0; + C_ASSERT(sizeof(RECYCLEBINFILESIZETYPE) <= sizeof(fsitem.dwFileSize)); + fsitem.dwFileSize = Details.FileSize; + fsitem.uFileAttribs = LOWORD(Details.Attributes); + FileTimeToDosDateTime(&Details.LastModification, &fsitem.uFileDate, &fsitem.uFileTime); + CopyMemory(fsitem.szNames, pszName, cbName); + LPSTR pszShort = const_cast(&fsitem.szNames[cbName]); + pszShort[0] = '\0'; + pszShort[1] = '\0'; // Fill alignment padding (for ILIsEqual memcmp) + + BBITEMFOOTER *footer = (BBITEMFOOTER*)((BYTE*)pidl + cb - sizeof(BBITEMFOOTER)); + footer->DataSize = cbData; + footer->EndSignature = BBITEMFOOTER::ENDSIG; + + BBITEMDATA *data = (BBITEMDATA*)((BYTE*)footer - footer->DataSize); + data->DeletionTime = Details.DeletionTime; +#ifdef COLUMN_FATTS + data->AttribsHi = HIWORD(Details.Attributes); +#endif + data->RecycledPathOffset = FIELD_OFFSET(BBITEMDATA, OriginalLocation) + cbOrig; + CopyMemory(data->OriginalLocation, pszOrig, cbOrig); + CopyMemory((BYTE*)data + data->RecycledPathOffset, pszTrash, cbTrash); + + assert(!(((SIZE_T)&fsitem.szNames) & 1)); // WORD aligned please + C_ASSERT(!(FIELD_OFFSET(BBITEMDATA, OriginalLocation) & 1)); // WORD aligned please + assert(!(((SIZE_T)data) & 1)); // WORD aligned please + assert(_ILGetFSType(pidl)); + assert(_ILIsPidlSimple(pidl)); + assert(*(WORD*)((BYTE*)pidl + pidl->mkid.cb - sizeof(WORD)) & 1); // ENDSIG bit + assert(_ILGetFileStructW(pidl) == NULL); // Our custom footer is incompatible with WinXP pidl data + assert(ValidateItem(pidl) == data); + return pidl; +} + +static inline UINT GetItemFileSize(LPCITEMIDLIST pidl) +{ + return _ILGetFSType(pidl) ? ((PIDLDATA*)pidl->mkid.abID)->u.file.dwFileSize : 0; +} + +static inline LPCWSTR GetItemOriginalFullPath(const BBITEMDATA &Data) +{ + return Data.OriginalLocation; +} + +static HRESULT GetItemOriginalFolder(const BBITEMDATA &Data, LPWSTR &Out) +{ + HRESULT hr = SHStrDupW(GetItemOriginalFullPath(Data), &Out); + if (SUCCEEDED(hr)) + PathRemoveFileSpecW(Out); + return hr; +} + +static LPCWSTR GetItemOriginalFileName(const BBITEMDATA &Data) +{ + return PathFindFileNameW(GetItemOriginalFullPath(Data)); +} + +static inline LPCWSTR GetItemRecycledFullPath(const BBITEMDATA &Data) +{ + return (LPCWSTR)((BYTE*)&Data + Data.RecycledPathOffset); +} + +static inline LPCWSTR GetItemRecycledFileName(LPCITEMIDLIST pidl, const BBITEMDATA &Data) +{ + C_ASSERT(BBITEMFILETYPE & PT_FS_UNICODE_FLAG); + return (LPCWSTR)((LPPIDLDATA)pidl->mkid.abID)->u.file.szNames; +} + +static int GetItemDriveNumber(LPCITEMIDLIST pidl) +{ + if (BBITEMDATA *pData = ValidateItem(pidl)) + return PathGetDriveNumberW(GetItemRecycledFullPath(*pData)); + WCHAR buf[MAX_PATH]; + return _ILSimpleGetTextW(pidl, buf, _countof(buf)) ? PathGetDriveNumberW(buf) : -1; +} + +static HRESULT GetItemTypeName(PCUITEMID_CHILD pidl, const BBITEMDATA &Data, SHFILEINFOW &shfi) +{ + LPCWSTR path = GetItemRecycledFullPath(Data); + UINT attribs = ((PIDLDATA*)pidl->mkid.abID)->u.file.uFileAttribs; + if (SHGetFileInfoW(path, attribs, &shfi, sizeof(shfi), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES)) + return S_OK; + shfi.szTypeName[0] = UNICODE_NULL; + return E_FAIL; +} + +static HDELFILE GetRecycleBinFileHandleFromItem(const BBITEMDATA &Data) +{ + RECYCLEBINFILEIDENTITY identity = { Data.DeletionTime, GetItemRecycledFullPath(Data) }; + return GetRecycleBinFileHandle(NULL, &identity); +} + /* * Recycle Bin folder */ -BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile); - -static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl); +static UINT GetDefaultRecycleDriveNumber() +{ + int drive = 0; + WCHAR buf[MAX_PATH]; + if (GetWindowsDirectoryW(buf, _countof(buf))) + drive = PathGetDriveNumberW(buf); + return max(0, drive); +} -typedef struct _SEARCH_CONTEXT +static inline LPCWSTR GetGlobalRecycleBinPath() { - PIDLRecycleStruct *pFileDetails; - HDELFILE hDeletedFile; - BOOL bFound; -} SEARCH_CONTEXT, *PSEARCH_CONTEXT; + return NULL; +} -HRESULT CRecyclerExtractIcon_CreateInstance( - LPCITEMIDLIST pidl, REFIID riid, LPVOID * ppvOut) +static BOOL IsRecycleBinEmpty(IShellFolder *pSF) { - PIDLRecycleStruct *pFileDetails = _ILGetRecycleStruct(pidl); - if (pFileDetails == NULL) - goto fallback; + CComPtr spEnumFiles; + HRESULT hr = pSF->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &spEnumFiles); + CComHeapPtr spPidl; + ULONG itemcount; + return FAILED(hr) || spEnumFiles->Next(1, &spPidl, &itemcount) != S_OK; +} - // Try to obtain the file - SEARCH_CONTEXT Context; - Context.pFileDetails = pFileDetails; - Context.bFound = FALSE; +static void CRecycleBin_ChangeNotifyBBItem(_In_ LONG Event, _In_opt_ LPCITEMIDLIST BBItem) +{ + LPITEMIDLIST pidlFolder = SHCloneSpecialIDList(NULL, CSIDL_BITBUCKET, FALSE); + if (!pidlFolder) + return; + if (BBItem) + { + assert(ValidateItem(BBItem)); + if (LPITEMIDLIST pidlFull = ILCombine(pidlFolder, BBItem)) + { + // Send notification for [Desktop][RecycleBin][BBItem] + // FIXME: Windows monitors each RecycleBin FS folder on every drive + // instead of manually sending these? + SHChangeNotify(Event, SHCNF_IDLIST, pidlFull, NULL); + ILFree(pidlFull); + } + } + else + { + SHChangeNotify(Event, SHCNF_IDLIST, pidlFolder, NULL); + } + ILFree(pidlFolder); +} - EnumerateRecycleBinW(NULL, CBSearchRecycleBin, &Context); - if (Context.bFound) +EXTERN_C void CRecycleBin_NotifyRecycled(LPCWSTR OrigPath, const WIN32_FIND_DATAW *pFind, + const RECYCLEBINFILEIDENTITY *pFI) +{ + DELETED_FILE_INFO info; + info.LastModification = pFind->ftLastWriteTime; + info.DeletionTime = pFI->DeletionTime; + info.FileSize = pFind->nFileSizeLow; + info.Attributes = pFind->dwFileAttributes; + if (LPITEMIDLIST pidl = CreateItem(pFI->RecycledFullPath, OrigPath, info)) { - // This should be executed any time, if not, there are some errors in the implementation - IRecycleBinFile* pRecycleFile = (IRecycleBinFile*)Context.hDeletedFile; + CRecycleBin_ChangeNotifyBBItem(IsFolder(pidl) ? SHCNE_MKDIR : SHCNE_CREATE, pidl); + ILFree(pidl); + } +} - // Query the interface from the private interface - HRESULT hr = pRecycleFile->QueryInterface(riid, ppvOut); +static void CRecycleBin_NotifyRemovedFromRecycleBin(LPCITEMIDLIST BBItem) +{ + CRecycleBin_ChangeNotifyBBItem(IsFolder(BBItem) ? SHCNE_RMDIR : SHCNE_DELETE, BBItem); - // Close the file handle as we don't need it anymore - CloseRecycleBinHandle(Context.hDeletedFile); + CComHeapPtr pidlBB(SHCloneSpecialIDList(NULL, CSIDL_BITBUCKET, FALSE)); + CComPtr pSF; + if (pidlBB && SUCCEEDED(SHBindToObject(NULL, pidlBB, IID_PPV_ARG(IShellFolder, &pSF)))) + { + if (IsRecycleBinEmpty(pSF)) + SHUpdateRecycleBinIcon(); + } +} +static HRESULT CRecyclerExtractIcon_CreateInstance( + IShellFolder &FSFolder, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppvOut) +{ + HRESULT hr = FSFolder.GetUIObjectOf(NULL, 1, &pidl, riid, NULL, ppvOut); + if (SUCCEEDED(hr)) return hr; - } -fallback: // In case the search fails we use a default icon ERR("Recycler could not retrieve the icon, this shouldn't happen\n"); - CComPtr initIcon; - HRESULT hr = SHCreateDefaultExtractIcon(IID_PPV_ARG(IDefaultExtractIconInit, &initIcon)); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - - initIcon->SetNormalIcon(swShell32Name, 0); - - return initIcon->QueryInterface(riid, ppvOut); + if (IsFolder(pidl)) + return SHELL_CreateFallbackExtractIconForFolder(riid, ppvOut); + else + return SHELL_CreateFallbackExtractIconForNoAssocFile(riid, ppvOut); } -class CRecycleBinEnum : - public CEnumIDListBase -{ - private: - public: - CRecycleBinEnum(); - ~CRecycleBinEnum(); - HRESULT WINAPI Initialize(DWORD dwFlags); - static BOOL WINAPI CBEnumRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile); - BOOL WINAPI CBEnumRecycleBin(IN HDELFILE hDeletedFile); - - BEGIN_COM_MAP(CRecycleBinEnum) - COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) - END_COM_MAP() -}; - class CRecycleBinItemContextMenu : public CComObjectRootEx, public IContextMenu2 @@ -155,63 +336,23 @@ class CRecycleBinItemContextMenu : END_COM_MAP() }; -BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile) -{ - PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context; - - PDELETED_FILE_DETAILS_W pFileDetails; - DWORD dwSize; - BOOL ret; - - if (!GetDeletedFileDetailsW(hDeletedFile, - 0, - NULL, - &dwSize) && - GetLastError() != ERROR_INSUFFICIENT_BUFFER) - { - ERR("GetDeletedFileDetailsW failed\n"); - return FALSE; - } - - pFileDetails = (DELETED_FILE_DETAILS_W *)SHAlloc(dwSize); - if (!pFileDetails) - { - ERR("No memory\n"); - return FALSE; - } - - if (!GetDeletedFileDetailsW(hDeletedFile, - dwSize, - pFileDetails, - NULL)) - { - ERR("GetDeletedFileDetailsW failed\n"); - SHFree(pFileDetails); - return FALSE; - } - - ret = memcmp(pFileDetails, pContext->pFileDetails, dwSize); - if (!ret) - { - pContext->hDeletedFile = hDeletedFile; - pContext->bFound = TRUE; - } - else - CloseRecycleBinHandle(hDeletedFile); - - SHFree(pFileDetails); - return ret; -} - -static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl) +class CRecycleBinEnum : + public CEnumIDListBase { - LPPIDLDATA pdata = _ILGetDataPointer(pidl); - - if (pdata && pdata->type == 0x00) - return (PIDLRecycleStruct*) & (pdata->u.crecycle); + public: + CRecycleBinEnum(); + ~CRecycleBinEnum(); + HRESULT WINAPI Initialize(DWORD dwFlags); + BOOL CBEnumRecycleBin(IN HDELFILE hDeletedFile); + static BOOL CALLBACK CBEnumRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile) + { + return static_cast(Context)->CBEnumRecycleBin(hDeletedFile); + } - return NULL; -} + BEGIN_COM_MAP(CRecycleBinEnum) + COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList) + END_COM_MAP() +}; CRecycleBinEnum::CRecycleBinEnum() { @@ -223,14 +364,7 @@ CRecycleBinEnum::~CRecycleBinEnum() HRESULT WINAPI CRecycleBinEnum::Initialize(DWORD dwFlags) { - WCHAR szDrive[8]; - if (!GetEnvironmentVariableW(L"SystemDrive", szDrive, _countof(szDrive) - 1)) - { - ERR("GetEnvironmentVariableW failed\n"); - return E_FAIL; - } - PathAddBackslashW(szDrive); - + LPCWSTR szDrive = GetGlobalRecycleBinPath(); if (dwFlags & SHCONTF_NONFOLDERS) { TRACE("Starting Enumeration\n"); @@ -248,83 +382,25 @@ HRESULT WINAPI CRecycleBinEnum::Initialize(DWORD dwFlags) return S_OK; } -static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) -{ - PIDLDATA tmp; - LPITEMIDLIST pidl; - PIDLRecycleStruct * p; - int size0 = (char*)&tmp.u.crecycle.szName - (char*)&tmp.u.crecycle; - int size = size0; - - tmp.type = 0x00; - size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR); - - pidl = (LPITEMIDLIST)SHAlloc(size + 4); - if (!pidl) - return pidl; - - pidl->mkid.cb = size + 2; - memcpy(pidl->mkid.abID, &tmp, 2 + size0); - - p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle; - RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W)); - wcscpy(p->szName, pFileDetails->FileName); - *(WORD*)((char*)pidl + (size + 2)) = 0; - return pidl; -} - -BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN PVOID Context, IN HDELFILE hDeletedFile) +BOOL CRecycleBinEnum::CBEnumRecycleBin(IN HDELFILE hDeletedFile) { - return static_cast(Context)->CBEnumRecycleBin(hDeletedFile); -} - -BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN HDELFILE hDeletedFile) -{ - PDELETED_FILE_DETAILS_W pFileDetails; - DWORD dwSize; LPITEMIDLIST pidl = NULL; - BOOL ret; - - if (!GetDeletedFileDetailsW(hDeletedFile, - 0, - NULL, - &dwSize) && - GetLastError() != ERROR_INSUFFICIENT_BUFFER) + DELETED_FILE_INFO info; + IRecycleBinFile *pRBF = IRecycleBinFileFromHDELFILE(hDeletedFile); + BOOL ret = SUCCEEDED(pRBF->GetInfo(&info)); + if (ret) { - ERR("GetDeletedFileDetailsW failed\n"); - return FALSE; - } - - pFileDetails = (DELETED_FILE_DETAILS_W *)SHAlloc(dwSize); - if (!pFileDetails) - { - ERR("No memory\n"); - return FALSE; + pidl = CreateItem(info.RecycledFullPath.String, info.OriginalFullPath.String, info); + ret = pidl != NULL; + FreeRecycleBinString(&info.OriginalFullPath); + FreeRecycleBinString(&info.RecycledFullPath); } - - if (!GetDeletedFileDetailsW(hDeletedFile, - dwSize, - pFileDetails, - NULL)) + if (pidl) { - ERR("GetDeletedFileDetailsW failed\n"); - SHFree(pFileDetails); - return FALSE; + ret = AddToEnumList(pidl); + if (!ret) + ILFree(pidl); } - - pidl = _ILCreateRecycleItem(pFileDetails); - if (!pidl) - { - SHFree(pFileDetails); - return FALSE; - } - - ret = AddToEnumList(pidl); - - if (!ret) - SHFree(pidl); - SHFree(pFileDetails); - TRACE("Returning %d\n", ret); CloseRecycleBinHandle(hDeletedFile); return ret; } @@ -351,99 +427,122 @@ HRESULT WINAPI CRecycleBinItemContextMenu::Initialize(LPCITEMIDLIST pidl) return S_OK; } +enum { IDC_BB_RESTORE = 1, IDC_BB_CUT, IDC_BB_DELETE, IDC_BB_PROPERTIES }; +static const CMVERBMAP g_BBItemVerbMap[] = +{ + { "undelete", IDC_BB_RESTORE }, + { "cut", IDC_BB_CUT }, + { "delete", IDC_BB_DELETE }, + { "properties", IDC_BB_PROPERTIES }, + { NULL } +}; + HRESULT WINAPI CRecycleBinItemContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) { - WCHAR szBuffer[30] = {0}; - ULONG Count = 1; + UINT idHigh = 0, id; TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); - if (LoadStringW(shell32_hInstance, IDS_RESTORE, szBuffer, _countof(szBuffer))) + id = idCmdFirst + IDC_BB_RESTORE; + if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_RESTORE), 0)) { - szBuffer[_countof(szBuffer)-1] = L'\0'; - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); - Count++; + idHigh = max(idHigh, id); + indexMenu++; } - - if (LoadStringW(shell32_hInstance, IDS_CUT, szBuffer, _countof(szBuffer))) + id = idCmdFirst + IDC_BB_CUT; + if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_CUT), MFS_DISABLED)) { - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); - szBuffer[_countof(szBuffer)-1] = L'\0'; - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + idHigh = max(idHigh, id); + if (_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0)) + indexMenu++; } - - if (LoadStringW(shell32_hInstance, IDS_DELETE, szBuffer, _countof(szBuffer))) + id = idCmdFirst + IDC_BB_DELETE; + if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_DELETE), 0)) { - szBuffer[_countof(szBuffer)-1] = L'\0'; - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + idHigh = max(idHigh, id); + if (_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0)) + indexMenu++; } - - if (LoadStringW(shell32_hInstance, IDS_PROPERTIES, szBuffer, _countof(szBuffer))) + id = idCmdFirst + IDC_BB_PROPERTIES; + if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), 0)) { - szBuffer[_countof(szBuffer)-1] = L'\0'; - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); - _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + idHigh = max(idHigh, id); + if (_InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0)) + indexMenu++; } + return idHigh ? MAKE_HRESULT(SEVERITY_SUCCESS, 0, idHigh - idCmdFirst + 1) : S_OK; +} - return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +static BOOL ConfirmDelete(LPCMINVOKECOMMANDINFO lpcmi, UINT cidl, LPCITEMIDLIST pidl, const BBITEMDATA &Data) +{ + if (lpcmi->fMask & CMIC_MASK_FLAG_NO_UI) + { + return TRUE; + } + else if (cidl == 1) + { + const UINT ask = IsFolder(pidl) ? ASK_DELETE_FOLDER : ASK_DELETE_FILE; + return SHELL_ConfirmYesNoW(lpcmi->hwnd, ask, GetItemOriginalFileName(Data)); + } + WCHAR buf[MAX_PATH]; + wsprintfW(buf, L"%d", cidl); + return SHELL_ConfirmYesNoW(lpcmi->hwnd, ASK_DELETE_MULTIPLE_ITEM, buf); } HRESULT WINAPI CRecycleBinItemContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { - SEARCH_CONTEXT Context; - WCHAR szDrive[8]; - TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi, lpcmi->lpVerb, lpcmi->hwnd); - if (lpcmi->lpVerb == MAKEINTRESOURCEA(1) || lpcmi->lpVerb == MAKEINTRESOURCEA(5)) - { - Context.pFileDetails = _ILGetRecycleStruct(apidl); - Context.bFound = FALSE; + int CmdId = SHELL_MapContextMenuVerbToCmdId(lpcmi, g_BBItemVerbMap); - if (!GetEnvironmentVariableW(L"SystemDrive", szDrive, _countof(szDrive) - 1)) - { - ERR("GetEnvironmentVariableW failed\n"); - return E_FAIL; - } - PathAddBackslashW(szDrive); + // Handle DefView accelerators + if ((SIZE_T)lpcmi->lpVerb == FCIDM_SHVIEW_CUT) + CmdId = IDC_BB_CUT; + if ((SIZE_T)lpcmi->lpVerb == FCIDM_SHVIEW_DELETE) + CmdId = IDC_BB_DELETE; + if ((SIZE_T)lpcmi->lpVerb == FCIDM_SHVIEW_PROPERTIES) + CmdId = IDC_BB_PROPERTIES; - EnumerateRecycleBinW(szDrive, CBSearchRecycleBin, (PVOID)&Context); - if (!Context.bFound) + if (CmdId == IDC_BB_RESTORE || CmdId == IDC_BB_DELETE) + { + BBITEMDATA *pData = ValidateItem(apidl); + if (!pData && FAILED_UNEXPECTEDLY(E_FAIL)) + return E_FAIL; + HDELFILE hDelFile = GetRecycleBinFileHandleFromItem(*pData); + if (!hDelFile && FAILED_UNEXPECTEDLY(E_FAIL)) return E_FAIL; - BOOL ret = TRUE; - - /* restore file */ - if (lpcmi->lpVerb == MAKEINTRESOURCEA(1)) - ret = RestoreFile(Context.hDeletedFile); - /* delete file */ - else - DeleteFileHandleToRecycleBin(Context.hDeletedFile); + HRESULT hr = S_FALSE; + if (CmdId == IDC_BB_RESTORE) + hr = RestoreFileFromRecycleBin(hDelFile) ? S_OK : E_FAIL; + else if (ConfirmDelete(lpcmi, 1, apidl, *pData)) + hr = DeleteFileInRecycleBin(hDelFile) ? S_OK : E_FAIL; - CloseRecycleBinHandle(Context.hDeletedFile); + if (hr == S_OK) + CRecycleBin_NotifyRemovedFromRecycleBin(apidl); - return (ret ? S_OK : E_FAIL); + CloseRecycleBinHandle(hDelFile); + return hr; } - else if (lpcmi->lpVerb == MAKEINTRESOURCEA(3)) + else if (CmdId == IDC_BB_CUT) { FIXME("implement cut\n"); + SHELL_ErrorBox(lpcmi->hwnd, ERROR_NOT_SUPPORTED); return E_NOTIMPL; } - else if (lpcmi->lpVerb == MAKEINTRESOURCEA(7)) + else if (CmdId == IDC_BB_PROPERTIES) { FIXME("implement properties\n"); + SHELL_ErrorBox(lpcmi->hwnd, ERROR_NOT_SUPPORTED); return E_NOTIMPL; } - - return S_OK; + return E_UNEXPECTED; } HRESULT WINAPI CRecycleBinItemContextMenu::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) { TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); - - return E_FAIL; + return SHELL_GetCommandStringImpl(idCommand, uFlags, lpszName, uMaxNameLen, g_BBItemVerbMap); } HRESULT WINAPI CRecycleBinItemContextMenu::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam) @@ -456,11 +555,47 @@ HRESULT WINAPI CRecycleBinItemContextMenu::HandleMenuMsg(UINT uMsg, WPARAM wPara CRecycleBin::CRecycleBin() { pidl = NULL; + ZeroMemory(m_pFSFolders, sizeof(m_pFSFolders)); } CRecycleBin::~CRecycleBin() { SHFree(pidl); + for (SIZE_T i = 0; i < _countof(m_pFSFolders); ++i) + { + if (m_pFSFolders[i]) + m_pFSFolders[i]->Release(); + } +} + +IShellFolder* CRecycleBin::GetFSFolderForItem(LPCITEMIDLIST pidl) +{ + int drive = GetItemDriveNumber(pidl); + if (drive < 0) + drive = GetDefaultRecycleDriveNumber(); + if ((UINT)drive >= _countof(m_pFSFolders) && FAILED_UNEXPECTEDLY(E_FAIL)) + return NULL; + + if (!m_pFSFolders[drive]) + { + HRESULT hr; + PERSIST_FOLDER_TARGET_INFO pfti = {}; + if (FAILED_UNEXPECTEDLY(hr = GetRecycleBinPathFromDriveNumber(drive, pfti.szTargetParsingName))) + return NULL; + pfti.dwAttributes = FILE_ATTRIBUTE_DIRECTORY; + pfti.csidl = -1; + CComHeapPtr pidlRoot; + pidlRoot.Attach(SHELL32_CreateSimpleIDListFromPath(pfti.szTargetParsingName, pfti.dwAttributes)); + if (!pidlRoot && FAILED_UNEXPECTEDLY(E_FAIL)) + return NULL; + IShellFolder *psf; + hr = SHELL32_CoCreateInitSF(pidlRoot, &pfti, NULL, &CLSID_ShellFSFolder, IID_PPV_ARG(IShellFolder, &psf)); + if (FAILED(hr)) + return NULL; + m_pFSFolders[drive] = psf; // Reference count is 1 (for the m_pFSFolders cache) + } + m_pFSFolders[drive]->AddRef(); // AddRef for the caller + return m_pFSFolders[drive]; } /************************************************************************* @@ -472,7 +607,7 @@ HRESULT WINAPI CRecycleBin::GetClassID(CLSID *pClassID) TRACE("(%p, %p)\n", this, pClassID); if (pClassID == NULL) return E_INVALIDARG; - memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); + *pClassID = GetClassID(); return S_OK; } @@ -490,8 +625,7 @@ HRESULT WINAPI CRecycleBin::Initialize(PCIDLIST_ABSOLUTE pidl) HRESULT WINAPI CRecycleBin::GetCurFolder(PIDLIST_ABSOLUTE *ppidl) { TRACE("\n"); - *ppidl = ILClone(pidl); - return S_OK; + return SHILClone((LPCITEMIDLIST)pidl, ppidl); } /************************************************************************* @@ -503,14 +637,7 @@ HRESULT WINAPI CRecycleBin::ParseDisplayName(HWND hwnd, LPBC pbc, ULONG *pdwAttributes) { FIXME("stub\n"); - return E_NOTIMPL; -} - - -PDELETED_FILE_DETAILS_W -UnpackDetailsFromPidl(LPCITEMIDLIST pidl) -{ - return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID; + return E_NOTIMPL; // FIXME: Parse "D.ext" } HRESULT WINAPI CRecycleBin::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) @@ -530,40 +657,82 @@ HRESULT WINAPI CRecycleBin::BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbc, REF return E_NOTIMPL; } -HRESULT WINAPI CRecycleBin::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) +static HRESULT CompareCanonical(const BBITEMDATA &Data1, const BBITEMDATA &Data2) { - PIDLRecycleStruct* pData1 = _ILGetRecycleStruct(pidl1); - PIDLRecycleStruct* pData2 = _ILGetRecycleStruct(pidl2); - LPWSTR pName1, pName2; + // This assumes two files with the same original path cannot be deleted at + // the same time (within the FAT/NTFS FILETIME resolution). + int result = CompareFileTime(&Data1.DeletionTime, &Data2.DeletionTime); + if (result == 0) + result = _wcsicmp(GetItemOriginalFullPath(Data1), GetItemOriginalFullPath(Data2)); + return MAKE_COMPARE_HRESULT(result); +} - if(!pData1 || !pData2 || LOWORD(lParam) >= COLUMNS_COUNT) +HRESULT WINAPI CRecycleBin::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) +{ + UINT column = UINT(lParam & SHCIDS_COLUMNMASK); + if (column >= COLUMNS_COUNT || !_ILGetFSType(pidl1) || !_ILGetFSType(pidl2)) + return E_INVALIDARG; + BBITEMDATA *pData1 = ValidateItem(pidl1), *pData2 = ValidateItem(pidl2); + if ((!pData1 || !pData2) && column != COLUMN_NAME) return E_INVALIDARG; - SHORT result; - LONGLONG diff; - switch (LOWORD(lParam)) + LPCWSTR pName1, pName2; + FILETIME ft1, ft2; + SHFILEINFOW shfi1, shfi2; + int result; + HRESULT hr = CFSFolder::CompareSortFoldersFirst(pidl1, pidl2); + if (SUCCEEDED(hr)) + return hr; + switch (column) { - case 0: /* Name */ - pName1 = PathFindFileNameW(pData1->szName); - pName2 = PathFindFileNameW(pData2->szName); - result = _wcsicmp(pName1, pName2); - break; - case 1: /* Orig. Location */ - result = _wcsicmp(pData1->szName, pData2->szName); + case COLUMN_NAME: + if (pData1 && pData2) + { + if (lParam & SHCIDS_CANONICALONLY) + return CompareCanonical(*pData1, *pData2); + pName1 = GetItemOriginalFileName(*pData1); + pName2 = GetItemOriginalFileName(*pData2); + result = CFSFolder::CompareUiStrings(pName1, pName2); + } + else + { + // We support comparing names even for non-Recycle items because + // SHChangeNotify can broadcast regular FS items. + if (IShellFolder *pSF = GetFSFolderForItem(pidl1)) + { + hr = pSF->CompareIDs(lParam, pidl1, pidl2); + pSF->Release(); + return hr; + } + return E_INVALIDARG; + } break; - case 2: /* Date Deleted */ + case COLUMN_DELFROM: + if (SUCCEEDED(hr = GetItemOriginalFolder(*pData1, const_cast(pName1)))) + { + if (SUCCEEDED(hr = GetItemOriginalFolder(*pData2, const_cast(pName2)))) + { + result = CFSFolder::CompareUiStrings(pName1, pName2); + SHFree(const_cast(pName2)); + } + SHFree(const_cast(pName1)); + } + return SUCCEEDED(hr) ? MAKE_COMPARE_HRESULT(result) : hr; + case COLUMN_DATEDEL: result = CompareFileTime(&pData1->DeletionTime, &pData2->DeletionTime); break; - case 3: /* Size */ - diff = pData1->FileSize.QuadPart - pData2->FileSize.QuadPart; - return MAKE_COMPARE_HRESULT(diff); - case 4: /* Type */ - pName1 = PathFindExtensionW(pData1->szName); - pName2 = PathFindExtensionW(pData2->szName); - result = _wcsicmp(pName1, pName2); + case COLUMN_SIZE: + result = GetItemFileSize(pidl1) - GetItemFileSize(pidl2); + break; + case COLUMN_TYPE: + GetItemTypeName(pidl1, *pData1, shfi1); + GetItemTypeName(pidl2, *pData2, shfi2); + result = CFSFolder::CompareUiStrings(shfi1.szTypeName, shfi2.szTypeName); break; - case 5: /* Modified */ - result = CompareFileTime(&pData1->LastModification, &pData2->LastModification); + case COLUMN_MTIME: + _ILGetFileDateTime(pidl1, &ft1); + _ILGetFileDateTime(pidl2, &ft2); + result = CompareFileTime(&ft1, &ft2); break; } return MAKE_COMPARE_HRESULT(result); @@ -578,7 +747,6 @@ HRESULT WINAPI CRecycleBin::CreateViewObject(HWND hwndOwner, REFIID riid, void * if (!ppv) return hr; - *ppv = NULL; if (IsEqualIID (riid, IID_IDropTarget)) @@ -587,11 +755,12 @@ HRESULT WINAPI CRecycleBin::CreateViewObject(HWND hwndOwner, REFIID riid, void * } else if (IsEqualIID (riid, IID_IContextMenu) || IsEqualIID (riid, IID_IContextMenu2)) { + m_IsBackgroundMenu = true; hr = this->QueryInterface(riid, ppv); } else if (IsEqualIID (riid, IID_IShellView)) { - SFV_CREATE sfvparams = {sizeof(SFV_CREATE), this}; + SFV_CREATE sfvparams = { sizeof(SFV_CREATE), this }; hr = SHCreateShellFolderView(&sfvparams, (IShellView**)ppv); } else @@ -606,8 +775,26 @@ HRESULT WINAPI CRecycleBin::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY api SFGAOF *rgfInOut) { TRACE("(%p, %d, {%p, ...}, {%x})\n", this, cidl, apidl ? apidl[0] : NULL, (unsigned int)*rgfInOut); - *rgfInOut &= SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANLINK; - return S_OK; + HRESULT hr = S_OK; + const SFGAOF ThisFolder = SFGAO_FOLDER | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_CANRENAME | SFGAO_CANLINK; + if (!cidl) + { + *rgfInOut &= ThisFolder; + if (SHRestricted(REST_BITBUCKNOPROP)) + *rgfInOut &= ~SFGAO_HASPROPSHEET; + return hr; + } + SFGAOF remain = SFGAO_LINK & *rgfInOut; + *rgfInOut &= remain | SFGAO_HASPROPSHEET | SFGAO_CANDELETE | SFGAO_FILESYSTEM; // TODO: SFGAO_CANMOVE + for (UINT i = 0; (*rgfInOut & remain) && i < cidl && SUCCEEDED(hr); ++i) + { + if (IShellFolder* pSF = GetFSFolderForItem(apidl[i])) + { + hr = pSF->GetAttributesOf(1, &apidl[i], rgfInOut); + pSF->Release(); + } + } + return hr; } HRESULT WINAPI CRecycleBin::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, @@ -623,14 +810,20 @@ HRESULT WINAPI CRecycleBin::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_C return hr; *ppv = NULL; + assert(!cidl || (apidl && apidl[0])); if ((IsEqualIID (riid, IID_IContextMenu) || IsEqualIID(riid, IID_IContextMenu2)) && (cidl >= 1)) { + // FIXME: Handle multiple items hr = ShellObjectCreatorInit(apidl[0], riid, &pObj); } else if((IsEqualIID(riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) && (cidl == 1)) { - hr = CRecyclerExtractIcon_CreateInstance(apidl[0], riid, &pObj); + if (IShellFolder *pSF = GetFSFolderForItem(apidl[0])) + { + hr = CRecyclerExtractIcon_CreateInstance(*pSF, apidl[0], riid, &pObj); + pSF->Release(); + } } else hr = E_NOINTERFACE; @@ -645,33 +838,36 @@ HRESULT WINAPI CRecycleBin::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_C HRESULT WINAPI CRecycleBin::GetDisplayNameOf(PCUITEMID_CHILD pidl, SHGDNF uFlags, STRRET *pName) { - PIDLRecycleStruct *pFileDetails; - LPWSTR pFileName; - TRACE("(%p, %p, %x, %p)\n", this, pidl, (unsigned int)uFlags, pName); + const BBITEMDATA *pData = ValidateItem(pidl); + if (!pData) + return E_INVALIDARG; - pFileDetails = _ILGetRecycleStruct(pidl); - if (!pFileDetails) + if (IS_SHGDN_FOR_PARSING(uFlags)) { - pName->cStr[0] = 0; - pName->uType = STRRET_CSTR; - return E_INVALIDARG; + LPCWSTR pszName = GetItemRecycledFullPath(*pData); + if (uFlags & SHGDN_INFOLDER) + pszName = PathFindFileNameW(pszName); + pName->pOleStr = SHStrDupW(pszName); } - - pFileName = wcsrchr(pFileDetails->szName, L'\\'); - if (!pFileName) + else { - pName->cStr[0] = 0; - pName->uType = STRRET_CSTR; - return E_UNEXPECTED; + if (uFlags & SHGDN_INFOLDER) + pName->pOleStr = SHStrDupW(GetItemOriginalFileName(*pData)); + else + pName->pOleStr = SHStrDupW(GetItemOriginalFullPath(*pData)); } - pName->pOleStr = StrDupW(pFileName + 1); - if (pName->pOleStr == NULL) - return E_OUTOFMEMORY; - - pName->uType = STRRET_WSTR; - return S_OK; + if (pName->pOleStr) + { + pName->uType = STRRET_WSTR; + if (!IsFolder(pidl)) + SHELL_FS_ProcessDisplayFilename(pName->pOleStr, uFlags); + return S_OK; + } + pName->uType = STRRET_CSTR; + pName->cStr[0] = '\0'; + return E_OUTOFMEMORY; } HRESULT WINAPI CRecycleBin::SetNameOf(HWND hwnd, PCUITEMID_CHILD pidl, LPCOLESTR pszName, @@ -719,33 +915,12 @@ HRESULT WINAPI CRecycleBin::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID return E_NOTIMPL; } -static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) -{ - FILETIME lft; - SYSTEMTIME time; - int ret; - - FileTimeToLocalFileTime(ft, &lft); - FileTimeToSystemTime(&lft, &time); - - ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); - if (ret > 0 && ret < size) - { - /* Append space + time without seconds */ - buffer[ret-1] = ' '; - GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &buffer[ret], size - ret); - } - - return (ret != 0 ? E_FAIL : S_OK); -} - HRESULT WINAPI CRecycleBin::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, LPSHELLDETAILS pDetails) { - PIDLRecycleStruct * pFileDetails; + HRESULT hr; + FILETIME ft; + SHFILEINFOW shfi; WCHAR buffer[MAX_PATH]; - WCHAR szTypeName[100]; - LPWSTR pszBackslash; - UINT Length; TRACE("(%p, %p, %d, %p)\n", this, pidl, iColumn, pDetails); if (iColumn >= COLUMNS_COUNT) @@ -759,66 +934,36 @@ HRESULT WINAPI CRecycleBin::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, LPS } if (iColumn == COLUMN_NAME) - return GetDisplayNameOf(pidl, SHGDN_NORMAL, &pDetails->str); + return GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &pDetails->str); - pFileDetails = _ILGetRecycleStruct(pidl); - if (!pFileDetails && FAILED_UNEXPECTEDLY(E_INVALIDARG)) + const BBITEMDATA *pData = ValidateItem(pidl); + if (!pData && FAILED_UNEXPECTEDLY(E_INVALIDARG)) return E_INVALIDARG; + switch (iColumn) { case COLUMN_DATEDEL: - FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime); + CFSFolder::FormatDateTime(pData->DeletionTime, buffer, _countof(buffer)); break; case COLUMN_DELFROM: - pszBackslash = wcsrchr(pFileDetails->szName, L'\\'); - if (!pszBackslash) - { - ERR("Filename '%ls' not a valid path?\n", pFileDetails->szName); - Length = 0; - } - else - { - Length = (pszBackslash - pFileDetails->szName); - memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR)); - } - buffer[Length] = UNICODE_NULL; - if (buffer[0] && buffer[1] == L':' && !buffer[2]) - { - buffer[2] = L'\\'; - buffer[3] = UNICODE_NULL; - } - break; + if (SUCCEEDED(hr = GetItemOriginalFolder(*pData, pDetails->str.pOleStr))) + pDetails->str.uType = STRRET_WSTR; + return hr; case COLUMN_SIZE: - StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH); + *buffer = UNICODE_NULL; + if (!IsFolder(pidl)) + CFSFolder::FormatSize(GetItemFileSize(pidl), buffer, _countof(buffer)); break; case COLUMN_MTIME: - FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification); + _ILGetFileDateTime(pidl, &ft); + CFSFolder::FormatDateTime(ft, buffer, _countof(buffer)); break; case COLUMN_TYPE: - { - SEARCH_CONTEXT Context; - Context.pFileDetails = pFileDetails; - Context.bFound = FALSE; - EnumerateRecycleBinW(NULL, CBSearchRecycleBin, (PVOID)&Context); - - if (Context.bFound) - { - GetDeletedFileTypeNameW(Context.hDeletedFile, buffer, _countof(buffer), NULL); - - CloseRecycleBinHandle(Context.hDeletedFile); - } - /* load localized file string */ - else if (LoadStringW(shell32_hInstance, IDS_ANY_FILE, szTypeName, _countof(szTypeName))) - { - StringCchPrintfW(buffer, _countof(buffer), szTypeName, PathFindExtensionW(pFileDetails->szName)); - } - - return SHSetStrRet(&pDetails->str, buffer); - } + GetItemTypeName(pidl, *pData, shfi); + return SHSetStrRet(&pDetails->str, shfi.szTypeName); default: return E_FAIL; } - return SHSetStrRet(&pDetails->str, buffer); } @@ -832,85 +977,75 @@ HRESULT WINAPI CRecycleBin::MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid) return S_OK; } -BOOL CRecycleBin::RecycleBinIsEmpty() -{ - CComPtr spEnumFiles; - HRESULT hr = EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &spEnumFiles); - if (FAILED(hr)) - return TRUE; - CComHeapPtr spPidl; - ULONG itemcount; - return spEnumFiles->Next(1, &spPidl, &itemcount) != S_OK; - } - /************************************************************************* * RecycleBin IContextMenu interface */ -HRESULT WINAPI CRecycleBin::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +enum { IDC_EMPTYRECYCLEBIN = 1, IDC_PROPERTIES }; +static const CMVERBMAP g_BBFolderVerbMap[] = { - WCHAR szBuffer[100]; - MENUITEMINFOW mii; - int id = 1; + { "empty", IDC_EMPTYRECYCLEBIN }, + { "properties", IDC_PROPERTIES }, + { NULL } +}; +HRESULT WINAPI CRecycleBin::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) +{ TRACE("QueryContextMenu %p %p %u %u %u %u\n", this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); if (!hMenu) return E_INVALIDARG; - ZeroMemory(&mii, sizeof(mii)); - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; - mii.fState = RecycleBinIsEmpty() ? MFS_DISABLED : MFS_ENABLED; - szBuffer[0] = L'\0'; - LoadStringW(shell32_hInstance, IDS_EMPTY_BITBUCKET, szBuffer, _countof(szBuffer)); - mii.dwTypeData = szBuffer; - mii.cch = wcslen(mii.dwTypeData); - mii.wID = idCmdFirst + id++; - mii.fType = MFT_STRING; - iIdEmpty = 1; - - if (!InsertMenuItemW(hMenu, indexMenu, TRUE, &mii)) - return E_FAIL; + UINT idHigh = 0, id; - return MAKE_HRESULT(SEVERITY_SUCCESS, 0, id); + WORD state = IsRecycleBinEmpty(this) ? MFS_DISABLED : MFS_ENABLED; + id = idCmdFirst + IDC_EMPTYRECYCLEBIN; + if (_InsertMenuItemW(hMenu, indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_EMPTY_BITBUCKET), state)) + { + idHigh = max(idHigh, id); + if (m_IsBackgroundMenu && !SHRestricted(REST_BITBUCKNOPROP)) + { + id = idCmdFirst + IDC_PROPERTIES; + if (_InsertMenuItemW(hMenu, ++indexMenu, TRUE, id, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), 0)) + { + idHigh = max(idHigh, id); + _InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, 0); + } + } + } + return idHigh ? MAKE_HRESULT(SEVERITY_SUCCESS, 0, idHigh - idCmdFirst + 1) : S_OK; } HRESULT WINAPI CRecycleBin::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { - HRESULT hr; - LPSHELLBROWSER lpSB; - IShellView * lpSV = NULL; - WCHAR szDrive[8]; - - TRACE("%p %p verb %p\n", this, lpcmi, lpcmi->lpVerb); - - if (LOWORD(lpcmi->lpVerb) == iIdEmpty) + TRACE("%p %p verb %p\n", this, lpcmi, lpcmi ? lpcmi->lpVerb : NULL); + int CmdId = SHELL_MapContextMenuVerbToCmdId(lpcmi, g_BBFolderVerbMap); + if (CmdId == IDC_EMPTYRECYCLEBIN) { - if (!GetEnvironmentVariableW(L"SystemDrive", szDrive, _countof(szDrive) - 1)) - { - ERR("GetEnvironmentVariableW failed\n"); - return E_FAIL; - } - PathAddBackslashW(szDrive); - - hr = SHEmptyRecycleBinW(lpcmi->hwnd, szDrive, 0); + HRESULT hr = SHEmptyRecycleBinW(lpcmi->hwnd, NULL, 0); TRACE("result %x\n", hr); if (hr != S_OK) return hr; - - lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0); - if (lpSB && SUCCEEDED(lpSB->QueryActiveShellView(&lpSV))) - lpSV->Refresh(); +#if 0 // This is a nasty hack because lpcmi->hwnd might not be a shell browser. + // Not required with working SHChangeNotify. + CComPtr pSV; + LPSHELLBROWSER lpSB = (LPSHELLBROWSER)SendMessage(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0); + if (lpSB && SUCCEEDED(lpSB->QueryActiveShellView(&pSV))) + pSV->Refresh(); +#endif + return hr; } - return S_OK; + else if (CmdId == IDC_PROPERTIES) + { + return SHELL_ShowItemIDListProperties((LPITEMIDLIST)CSIDL_BITBUCKET); + } + return E_INVALIDARG; } HRESULT WINAPI CRecycleBin::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen) { - FIXME("%p %lu %u %p %p %u\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); - - return E_NOTIMPL; + TRACE("%p %lu %u %p %p %u\n", this, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + return SHELL_GetCommandStringImpl(idCommand, uFlags, lpszName, uMaxNameLen, g_BBFolderVerbMap); } /************************************************************************* @@ -937,6 +1072,7 @@ HRESULT WINAPI CRecycleBin::ReplacePage(EXPPS uPageID, LPFNSVADDPROPSHEETPAGE pf HRESULT WINAPI CRecycleBin::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) { TRACE("%p %p %p %p\n", this, pidlFolder, pdtobj, hkeyProgID ); + m_IsBackgroundMenu = false; return S_OK; } @@ -982,7 +1118,7 @@ TRASH_CanTrashFile(LPCWSTR wszPath) swprintf(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); wcscat(szKey, szBuffer); - if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_READ | KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) { ERR("RegCreateKeyExW failed\n"); return FALSE; @@ -996,8 +1132,6 @@ TRASH_CanTrashFile(LPCWSTR wszPath) /* per default unlimited size */ dwSize = -1; RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); - RegCloseKey(hKey); - return TRUE; } else { @@ -1005,27 +1139,18 @@ TRASH_CanTrashFile(LPCWSTR wszPath) ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); if (ret != ERROR_SUCCESS) { - if (ret == ERROR_FILE_NOT_FOUND) + dwNukeOnDelete = 0; + if (ret == ERROR_FILE_NOT_FOUND) { /* restore key and enable bitbucket */ - dwNukeOnDelete = 0; RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); } - RegCloseKey(hKey); - return TRUE; } - else if (dwNukeOnDelete) - { - /* do not delete to bitbucket */ - RegCloseKey(hKey); - return FALSE; - } - /* FIXME - * check if bitbucket is full - */ - RegCloseKey(hKey); - return TRUE; } + BOOL bCanTrash = !dwNukeOnDelete; + // FIXME: Check if bitbucket is full (CORE-13743) + RegCloseKey(hKey); + return bCanTrash; } BOOL @@ -1178,7 +1303,7 @@ HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) while (penumFiles->Next(1, &pidl, NULL) == S_OK) { count++; - pRecycleBin->GetDisplayNameOf(pidl, SHGDN_NORMAL, &StrRet); + pRecycleBin->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &StrRet); StrRetToBuf(&StrRet, pidl, szBuffer, _countof(szBuffer)); CoTaskMemFree(pidl); } @@ -1228,6 +1353,7 @@ HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) if (!ret) return HRESULT_FROM_WIN32(GetLastError()); + CRecycleBin_ChangeNotifyBBItem(SHCNE_UPDATEDIR, NULL); if (!(dwFlags & SHERB_NOSOUND)) { TRASH_PlayEmptyRecycleBinSound(); diff --git a/dll/win32/shell32/folders/CRecycleBin.h b/dll/win32/shell32/folders/CRecycleBin.h index ecf56699447bd..7d676cd687551 100644 --- a/dll/win32/shell32/folders/CRecycleBin.h +++ b/dll/win32/shell32/folders/CRecycleBin.h @@ -37,12 +37,15 @@ class CRecycleBin : { private: LPITEMIDLIST pidl; - INT iIdEmpty; - BOOL RecycleBinIsEmpty(); + IShellFolder *m_pFSFolders[RECYCLEBINMAXDRIVECOUNT]; + bool m_IsBackgroundMenu; + + IShellFolder* GetFSFolderForItem(LPCITEMIDLIST pidl); public: CRecycleBin(); ~CRecycleBin(); + static inline REFCLSID GetClassID() { return CLSID_RecycleBin; } // IPersistFolder STDMETHOD(GetClassID)(CLSID *pClassID) override; diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index a28c023d244e0..48c636fe9f1b3 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -262,6 +262,12 @@ SHBindToObjectEx( _In_ REFIID riid, _Out_ void **ppvObj); +EXTERN_C HRESULT +SHELL_GetUIObjectOfAbsoluteItem( + _In_opt_ HWND hWnd, + _In_ PCIDLIST_ABSOLUTE pidl, + _In_ REFIID riid, _Out_ void **ppvObj); + DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes); HRESULT SHELL_GetIDListTarget(_In_ LPCITEMIDLIST pidl, _Out_ PIDLIST_ABSOLUTE *ppidl); diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin.c b/dll/win32/shell32/shellrecyclebin/recyclebin.c index 88221b0da99cd..5a0153bacf5db 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin.c +++ b/dll/win32/shell32/shellrecyclebin/recyclebin.c @@ -12,7 +12,7 @@ BOOL WINAPI CloseRecycleBinHandle( IN HDELFILE hDeletedFile) { - IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; + IRecycleBinFile *rbf = IRecycleBinFileFromHDELFILE(hDeletedFile); HRESULT hr; TRACE("(%p)\n", hDeletedFile); @@ -90,7 +90,7 @@ DeleteFileToRecycleBinW( } BOOL WINAPI -DeleteFileHandleToRecycleBin( +DeleteFileInRecycleBin( IN HDELFILE hDeletedFile) { IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; @@ -231,9 +231,10 @@ EnumerateRecycleBinW( } else if (!SUCCEEDED(hr)) goto cleanup; - if (!pFnCallback(Context, (HANDLE)prbf)) + if (!pFnCallback(Context, (HDELFILE)prbf)) { - hr = HRESULT_FROM_WIN32(GetLastError()); + UINT error = GetLastError(); + hr = HRESULT_FROM_WIN32(error); goto cleanup; } } @@ -252,132 +253,38 @@ EnumerateRecycleBinW( return FALSE; } -BOOL WINAPI -GetDeletedFileTypeNameW( - IN HDELFILE hDeletedFile, - OUT LPWSTR pTypeName, - IN DWORD BufferSize, - OUT LPDWORD RequiredSize OPTIONAL) +typedef struct _BBENUMFILECONTEXT { - IRecycleBinFile *prbf = (IRecycleBinFile *)hDeletedFile; - SIZE_T FinalSize; - - HRESULT hr = IRecycleBinFile_GetTypeName(prbf, BufferSize, pTypeName, &FinalSize); - - if (SUCCEEDED(hr)) - { - if (RequiredSize) - *RequiredSize = (DWORD)FinalSize; + const RECYCLEBINFILEIDENTITY *pFI; + HDELFILE hDelFile; +} BBENUMFILECONTEXT; - return TRUE; - } - if (HRESULT_FACILITY(hr) == FACILITY_WIN32) - SetLastError(HRESULT_CODE(hr)); - else - SetLastError(ERROR_GEN_FAILURE); - return FALSE; -} - -BOOL WINAPI -GetDeletedFileDetailsA( - IN HDELFILE hDeletedFile, - IN DWORD BufferSize, - IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL, - OUT LPDWORD RequiredSize OPTIONAL) +static BOOL CALLBACK +GetRecycleBinFileHandleCallback(IN PVOID Context, IN HDELFILE hDeletedFile) { - PDELETED_FILE_DETAILS_W FileDetailsW = NULL; - DWORD BufferSizeW = 0; - BOOL ret = FALSE; - - TRACE("(%p, %lu, %p, %p)\n", hDeletedFile, BufferSize, FileDetails, RequiredSize); - - if (BufferSize >= FIELD_OFFSET(DELETED_FILE_DETAILS_A, FileName)) + BBENUMFILECONTEXT *pCtx = (BBENUMFILECONTEXT*)Context; + IRecycleBinFile *pRBF = IRecycleBinFileFromHDELFILE(hDeletedFile); + if (IRecycleBinFile_IsEqualIdentity(pRBF, pCtx->pFI) == S_OK) { - BufferSizeW = FIELD_OFFSET(DELETED_FILE_DETAILS_W, FileName) - + (BufferSize - FIELD_OFFSET(DELETED_FILE_DETAILS_A, FileName)) * sizeof(WCHAR); + pCtx->hDelFile = hDeletedFile; + return FALSE; } - if (FileDetails && BufferSizeW) - { - FileDetailsW = HeapAlloc(GetProcessHeap(), 0, BufferSizeW); - if (!FileDetailsW) - { - SetLastError(ERROR_NOT_ENOUGH_MEMORY); - goto cleanup; - } - } - - ret = GetDeletedFileDetailsW(hDeletedFile, BufferSizeW, FileDetailsW, RequiredSize); - if (!ret) - goto cleanup; - - if (FileDetails) - { - CopyMemory(FileDetails, FileDetailsW, FIELD_OFFSET(DELETED_FILE_DETAILS_A, FileName)); - if (0 == WideCharToMultiByte(CP_ACP, 0, FileDetailsW->FileName, -1, FileDetails->FileName, BufferSize - FIELD_OFFSET(DELETED_FILE_DETAILS_A, FileName), NULL, NULL)) - goto cleanup; - } - ret = TRUE; - -cleanup: - HeapFree(GetProcessHeap(), 0, FileDetailsW); - return ret; + CloseRecycleBinHandle(hDeletedFile); + return TRUE; } -BOOL WINAPI -GetDeletedFileDetailsW( - IN HDELFILE hDeletedFile, - IN DWORD BufferSize, - IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, - OUT LPDWORD RequiredSize OPTIONAL) +EXTERN_C HDELFILE +GetRecycleBinFileHandle( + IN LPCWSTR pszRoot OPTIONAL, + IN const RECYCLEBINFILEIDENTITY *pFI) { - IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; - HRESULT hr; - SIZE_T NameSize, Needed; - - TRACE("(%p, %lu, %p, %p)\n", hDeletedFile, BufferSize, FileDetails, RequiredSize); - - hr = IRecycleBinFile_GetFileName(rbf, 0, NULL, &NameSize); - if (!SUCCEEDED(hr)) - goto cleanup; - Needed = FIELD_OFFSET(DELETED_FILE_DETAILS_W, FileName) + NameSize; - if (RequiredSize) - *RequiredSize = (DWORD)Needed; - if (Needed > BufferSize) - { - hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); - goto cleanup; - } - hr = IRecycleBinFile_GetFileName(rbf, NameSize, FileDetails->FileName, NULL); - if (!SUCCEEDED(hr)) - goto cleanup; - hr = IRecycleBinFile_GetLastModificationTime(rbf, &FileDetails->LastModification); - if (!SUCCEEDED(hr)) - goto cleanup; - hr = IRecycleBinFile_GetDeletionTime(rbf, &FileDetails->DeletionTime); - if (!SUCCEEDED(hr)) - goto cleanup; - hr = IRecycleBinFile_GetFileSize(rbf, &FileDetails->FileSize); - if (!SUCCEEDED(hr)) - goto cleanup; - hr = IRecycleBinFile_GetPhysicalFileSize(rbf, &FileDetails->PhysicalFileSize); - if (!SUCCEEDED(hr)) - goto cleanup; - hr = IRecycleBinFile_GetAttributes(rbf, &FileDetails->Attributes); - if (!SUCCEEDED(hr)) - goto cleanup; - -cleanup: - if (SUCCEEDED(hr)) - return TRUE; - if (HRESULT_FACILITY(hr) == FACILITY_WIN32) - SetLastError(HRESULT_CODE(hr)); - else - SetLastError(ERROR_GEN_FAILURE); - return FALSE; + BBENUMFILECONTEXT context = { pFI, NULL }; + EnumerateRecycleBinW(pszRoot, GetRecycleBinFileHandleCallback, &context); + return context.hDelFile; } BOOL WINAPI -RestoreFile( +RestoreFileFromRecycleBin( IN HDELFILE hDeletedFile) { IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; @@ -395,7 +302,7 @@ RestoreFile( return FALSE; } -HRESULT WINAPI +EXTERN_C HRESULT GetDefaultRecycleBin( IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb) @@ -425,3 +332,17 @@ GetDefaultRecycleBin( IUnknown_Release(pUnk); return hr; } + +EXTERN_C HRESULT +GetRecycleBinPathFromDriveNumber(UINT Drive, LPWSTR Path) +{ + const WCHAR volume[] = { LOWORD('A' + Drive), ':', '\\', '\0' }; + IRecycleBin *pRB; + HRESULT hr = GetDefaultRecycleBin(volume, &pRB); + if (SUCCEEDED(hr)) + { + hr = IRecycleBin_GetDirectory(pRB, Path); + IRecycleBin_Release(pRB); + } + return hr; +} diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin.h b/dll/win32/shell32/shellrecyclebin/recyclebin.h index a48f49264cf3a..b3795b04ebc6c 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin.h +++ b/dll/win32/shell32/shellrecyclebin/recyclebin.h @@ -17,48 +17,64 @@ extern "C" { #include #include -#define ANY_SIZE 1 +#define RECYCLEBINMAXDRIVECOUNT 26 /* Structures used by the API Interface */ -typedef struct _DELETED_FILE_DETAILS_A +typedef UINT RECYCLEBINFILESIZETYPE; + +typedef struct _RECYCLEBINFILEIDENTITY { - FILETIME LastModification; - FILETIME DeletionTime; - ULARGE_INTEGER FileSize; - ULARGE_INTEGER PhysicalFileSize; - DWORD Attributes; - CHAR FileName[ANY_SIZE]; -} DELETED_FILE_DETAILS_A, *PDELETED_FILE_DETAILS_A; -typedef struct _DELETED_FILE_DETAILS_W + FILETIME DeletionTime; + LPCWSTR RecycledFullPath; /* "C:\Recycled\Dc1.ext" etc. */ +} RECYCLEBINFILEIDENTITY, *PRECYCLEBINFILEIDENTITY; + +typedef struct _RECYCLEBINSTRING { - FILETIME LastModification; - FILETIME DeletionTime; - ULARGE_INTEGER FileSize; - ULARGE_INTEGER PhysicalFileSize; - DWORD Attributes; - WCHAR FileName[ANY_SIZE]; -} DELETED_FILE_DETAILS_W, *PDELETED_FILE_DETAILS_W; -#ifdef UNICODE -#define DELETED_FILE_DETAILS DELETED_FILE_DETAILS_W -#define PDELETED_FILE_DETAILS PDELETED_FILE_DETAILS_W -#else -#define DELETED_FILE_DETAILS DELETED_FILE_DETAILS_A -#define PDELETED_FILE_DETAILS PDELETED_FILE_DETAILS_A -#endif + LPCWSTR String; + LPWSTR Alloc; +} RECYCLEBINSTRING, *PRECYCLEBINSTRING; + +typedef struct _DELETED_FILE_INFO +{ + FILETIME LastModification; + FILETIME DeletionTime; + RECYCLEBINFILESIZETYPE FileSize; + DWORD Attributes; + RECYCLEBINSTRING OriginalFullPath; + RECYCLEBINSTRING RecycledFullPath; +} DELETED_FILE_INFO, *PDELETED_FILE_INFO; /* Distinct handle type for deleted file/folder */ DECLARE_HANDLE(HDELFILE); +#define IRecycleBinFileFromHDELFILE(hDF) ( (IRecycleBinFile*)(hDF) ) /* API Interface */ +static inline void +FreeRecycleBinString(PRECYCLEBINSTRING pRBS) +{ + SHFree(pRBS->Alloc); + pRBS->String = pRBS->Alloc = NULL; +} + +static inline void +InitializeRecycleBinStringRef(PRECYCLEBINSTRING pRBS, LPCWSTR String) +{ + pRBS->String = String; + pRBS->Alloc = NULL; +} + +EXTERN_C HRESULT +GetRecycleBinPathFromDriveNumber(UINT Drive, LPWSTR Path); + /* Function called for each deleted file in the recycle bin * Context: value given by the caller of the EnumerateRecycleBin function * hDeletedFile: a handle to the deleted file * Returning FALSE stops the enumeration. * Remarks: the handle must be closed with the CloseRecycleBinHandle function */ -typedef BOOL (WINAPI *PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HDELFILE hDeletedFile); +typedef BOOL (CALLBACK *PENUMERATE_RECYCLEBIN_CALLBACK)(IN PVOID Context, IN HDELFILE hDeletedFile); /* Closes a file deleted handle. * hDeletedFile: the handle to close @@ -85,13 +101,13 @@ DeleteFileToRecycleBinW( #define DeleteFileToRecycleBin DeleteFileToRecycleBinA #endif -/* Moves a file to the recycle bin. +/* Deletes a file in the recycle bin. * hDeletedFile: handle of the deleted file to delete * Returns TRUE if operation succeeded, FALSE otherwise. * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback */ BOOL WINAPI -DeleteFileHandleToRecycleBin( +DeleteFileInRecycleBin( IN HDELFILE hDeletedFile); /* Removes all elements contained in a recycle bin @@ -134,38 +150,10 @@ EnumerateRecycleBinW( #define EnumerateRecycleBin EnumerateRecycleBinA #endif -BOOL WINAPI -GetDeletedFileTypeNameW( - IN HDELFILE hDeletedFile, - OUT LPWSTR pTypeName, - IN DWORD BufferSize, - OUT LPDWORD RequiredSize OPTIONAL); - -/* Gets details about a deleted file - * hDeletedFile: handle of the deleted file to get details about - * BufferSize: size of the 'FileDetails' buffer, in bytes - * FileDetails: if the function succeeded, contains details about the deleted file - * RequiredSize: contains the minimal buffer size required to get file information details - * Returns TRUE if operation succeeded, FALSE otherwise. - * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback - */ -BOOL WINAPI -GetDeletedFileDetailsA( - IN HDELFILE hDeletedFile, - IN DWORD BufferSize, - IN OUT PDELETED_FILE_DETAILS_A FileDetails OPTIONAL, - OUT LPDWORD RequiredSize OPTIONAL); -BOOL WINAPI -GetDeletedFileDetailsW( - IN HDELFILE hDeletedFile, - IN DWORD BufferSize, - IN OUT PDELETED_FILE_DETAILS_W FileDetails OPTIONAL, - OUT LPDWORD RequiredSize OPTIONAL); -#ifdef UNICODE -#define GetDeletedFileDetails GetDeletedFileDetailsW -#else -#define GetDeletedFileDetails GetDeletedFileDetailsA -#endif +EXTERN_C HDELFILE +GetRecycleBinFileHandle( + IN LPCWSTR pszRoot OPTIONAL, + IN const RECYCLEBINFILEIDENTITY *pFI); /* Restores a deleted file * hDeletedFile: handle of the deleted file to restore @@ -173,7 +161,7 @@ GetDeletedFileDetailsW( * Remarks: if the function succeeds, the handle is not valid anymore. */ BOOL WINAPI -RestoreFile( +RestoreFileFromRecycleBin( IN HDELFILE hDeletedFile); /* COM interface */ @@ -189,13 +177,14 @@ DECLARE_INTERFACE_(IRecycleBinFile, IUnknown) STDMETHOD_(ULONG, Release)(THIS) PURE; /* IRecycleBinFile methods */ + STDMETHOD(IsEqualIdentity)(THIS_ const RECYCLEBINFILEIDENTITY *pFI) PURE; + STDMETHOD(GetInfo)(THIS_ PDELETED_FILE_INFO pInfo) PURE; STDMETHOD(GetLastModificationTime)(THIS_ FILETIME *pLastModificationTime) PURE; STDMETHOD(GetDeletionTime)(THIS_ FILETIME *pDeletionTime) PURE; STDMETHOD(GetFileSize)(THIS_ ULARGE_INTEGER *pFileSize) PURE; STDMETHOD(GetPhysicalFileSize)(THIS_ ULARGE_INTEGER *pPhysicalFileSize) PURE; STDMETHOD(GetAttributes)(THIS_ DWORD *pAttributes) PURE; STDMETHOD(GetFileName)(THIS_ SIZE_T BufferSize, LPWSTR Buffer, SIZE_T *RequiredSize) PURE; - STDMETHOD(GetTypeName)(THIS_ SIZE_T BufferSize, LPWSTR Buffer, SIZE_T *RequiredSize) PURE; STDMETHOD(Delete)(THIS) PURE; STDMETHOD(Restore)(THIS) PURE; @@ -233,9 +222,10 @@ DECLARE_INTERFACE_(IRecycleBin, IUnknown) STDMETHOD_(ULONG, Release)(THIS) PURE; /* IRecycleBin methods */ - STDMETHOD(DeleteFile)(THIS_ LPCWSTR szFileName); - STDMETHOD(EmptyRecycleBin)(THIS); - STDMETHOD(EnumObjects)(THIS_ IRecycleBinEnumList **ppEnumList); + STDMETHOD(DeleteFile)(THIS_ LPCWSTR szFileName) PURE; + STDMETHOD(EmptyRecycleBin)(THIS) PURE; + STDMETHOD(EnumObjects)(THIS_ IRecycleBinEnumList **ppEnumList) PURE; + STDMETHOD(GetDirectory)(THIS_ LPWSTR szPath) PURE; END_INTERFACE }; @@ -252,6 +242,10 @@ EXTERN_C const IID IID_IRecycleBin; (This)->lpVtbl->AddRef(This) #define IRecycleBinFile_Release(This) \ (This)->lpVtbl->Release(This) +#define IRecycleBinFile_IsEqualIdentity(This, pFI) \ + (This)->lpVtbl->IsEqualIdentity(This, pFI) +#define IRecycleBinFile_GetInfo(This, pInfo) \ + (This)->lpVtbl->GetInfo(This, pInfo) #define IRecycleBinFile_GetLastModificationTime(This, pLastModificationTime) \ (This)->lpVtbl->GetLastModificationTime(This, pLastModificationTime) #define IRecycleBinFile_GetDeletionTime(This, pDeletionTime) \ @@ -264,8 +258,6 @@ EXTERN_C const IID IID_IRecycleBin; (This)->lpVtbl->GetAttributes(This, pAttributes) #define IRecycleBinFile_GetFileName(This, BufferSize, Buffer, RequiredSize) \ (This)->lpVtbl->GetFileName(This, BufferSize, Buffer, RequiredSize) -#define IRecycleBinFile_GetTypeName(This, BufferSize, Buffer, RequiredSize) \ - (This)->lpVtbl->GetTypeName(This, BufferSize, Buffer, RequiredSize) #define IRecycleBinFile_Delete(This) \ (This)->lpVtbl->Delete(This) #define IRecycleBinFile_Restore(This) \ @@ -296,13 +288,20 @@ EXTERN_C const IID IID_IRecycleBin; (This)->lpVtbl->EmptyRecycleBin(This) #define IRecycleBin_EnumObjects(This, ppEnumList) \ (This)->lpVtbl->EnumObjects(This, ppEnumList) +#define IRecycleBin_GetDirectory(This, szPath) \ + (This)->lpVtbl->GetDirectory(This, szPath) #endif -HRESULT WINAPI +EXTERN_C HRESULT GetDefaultRecycleBin( IN LPCWSTR pszVolume OPTIONAL, OUT IRecycleBin **pprb); +/* Recycle Bin shell folder internal API */ +void CRecycleBin_NotifyRecycled(LPCWSTR OrigPath, const WIN32_FIND_DATAW *pFind, + const RECYCLEBINFILEIDENTITY *pFI); + + #ifdef __cplusplus } #endif diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin_generic.cpp b/dll/win32/shell32/shellrecyclebin/recyclebin_generic.cpp index a7ad1b00de017..09f561f40b674 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin_generic.cpp +++ b/dll/win32/shell32/shellrecyclebin/recyclebin_generic.cpp @@ -23,6 +23,10 @@ class RecycleBinGeneric : public IRecycleBin STDMETHODIMP DeleteFile(LPCWSTR szFileName) override; STDMETHODIMP EmptyRecycleBin() override; STDMETHODIMP EnumObjects(IRecycleBinEnumList **ppEnumList) override; + STDMETHODIMP GetDirectory(LPWSTR szPath) override + { + return E_UNEXPECTED; + } protected: LONG m_ref; @@ -183,3 +187,11 @@ HRESULT RecycleBinGeneric_Constructor(OUT IUnknown **ppUnknown) *ppUnknown = static_cast(pThis); return S_OK; } + +EXTERN_C +BOOL RecycleBinGeneric_IsEqualFileIdentity(const RECYCLEBINFILEIDENTITY *p1, const RECYCLEBINFILEIDENTITY *p2) +{ + return p1->DeletionTime.dwLowDateTime == p2->DeletionTime.dwLowDateTime && + p1->DeletionTime.dwHighDateTime == p2->DeletionTime.dwHighDateTime && + _wcsicmp(p1->RecycledFullPath, p2->RecycledFullPath) == 0; +} diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin_private.h b/dll/win32/shell32/shellrecyclebin/recyclebin_private.h index 42cffd2265665..57e440d389940 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin_private.h +++ b/dll/win32/shell32/shellrecyclebin/recyclebin_private.h @@ -13,11 +13,20 @@ #include WINE_DEFAULT_DEBUG_CHANNEL(recyclebin); +#ifdef __cplusplus +static inline HRESULT HResultFromWin32(DWORD hr) +{ + // HRESULT_FROM_WIN32 will evaluate its parameter twice, this function will not. + return HRESULT_FROM_WIN32(hr); +} +#endif + /* Defines */ #define RECYCLE_BIN_DIRECTORY_WITH_ACL L"RECYCLER" #define RECYCLE_BIN_DIRECTORY_WITHOUT_ACL L"RECYCLED" #define RECYCLE_BIN_FILE_NAME L"INFO2" +#define RECYCLE_BIN_FILE_NAME_V1 L"INFO" #define ROUND_UP(N, S) ((( (N) + (S) - 1) / (S) ) * (S) ) @@ -43,6 +52,9 @@ typedef struct _INFO2_HEADER EXTERN_C HRESULT RecycleBinGeneric_Constructor(OUT IUnknown **ppUnknown); +EXTERN_C +BOOL RecycleBinGeneric_IsEqualFileIdentity(const RECYCLEBINFILEIDENTITY *p1, const RECYCLEBINFILEIDENTITY *p2); + /* recyclebin_generic_enumerator.c */ EXTERN_C diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin_v5.cpp b/dll/win32/shell32/shellrecyclebin/recyclebin_v5.cpp index c7009f94d9ddd..b040851d01144 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin_v5.cpp +++ b/dll/win32/shell32/shellrecyclebin/recyclebin_v5.cpp @@ -143,6 +143,13 @@ class RecycleBin5 : public IRecycleBin5 STDMETHODIMP DeleteFile(_In_ LPCWSTR szFileName) override; STDMETHODIMP EmptyRecycleBin() override; STDMETHODIMP EnumObjects(_Out_ IRecycleBinEnumList **ppEnumList) override; + STDMETHODIMP GetDirectory(LPWSTR szPath) override + { + if (!m_Folder[0]) + return E_UNEXPECTED; + lstrcpynW(szPath, m_Folder, MAX_PATH); + return S_OK; + } /* IRecycleBin5 interface */ STDMETHODIMP Delete( @@ -226,6 +233,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) SYSTEMTIME SystemTime; DWORD ClusterSize, BytesPerSector, SectorsPerCluster; HRESULT hr; + WIN32_FIND_DATAW wfd = {}; TRACE("(%p, %s)\n", this, debugstr_w(szFileName)); @@ -240,7 +248,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) { if (szFullName) CoTaskMemFree(szFullName); - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); } else if (len < dwBufferLength) break; @@ -257,7 +265,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) if (dwAttributes == INVALID_FILE_ATTRIBUTES) { CoTaskMemFree(szFullName); - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); } if (dwBufferLength < 2 || szFullName[1] != ':') @@ -270,7 +278,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) hFile = CreateFileW(szFullName, 0, 0, NULL, OPEN_EXISTING, (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) ? FILE_FLAG_BACKUP_SEMANTICS : 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } @@ -281,7 +289,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) m_hInfoMapped = CreateFileMappingW(m_hInfo, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 0, NULL); if (!m_hInfoMapped) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } @@ -289,7 +297,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) pHeader = (PINFO2_HEADER)MapViewOfFile(m_hInfoMapped, FILE_MAP_WRITE, 0, 0, 0); if (!pHeader) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } @@ -297,7 +305,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) FileSize.u.LowPart = GetFileSize(m_hInfo, &FileSize.u.HighPart); if (FileSize.u.LowPart < sizeof(INFO2_HEADER)) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } dwEntries = (DWORD)((FileSize.QuadPart - sizeof(INFO2_HEADER)) / sizeof(DELETED_FILE_RECORD)) - 1; @@ -307,14 +315,14 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) #if 0 if (!GetFileSizeEx(hFile, (PLARGE_INTEGER)&FileSize)) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } #else FileSize.u.LowPart = GetFileSize(hFile, &FileSize.u.HighPart); if (FileSize.u.LowPart == INVALID_FILE_SIZE && GetLastError() != NO_ERROR) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } #endif @@ -350,7 +358,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) /* Get cluster size */ if (!GetDiskFreeSpaceW(m_VolumePath, &SectorsPerCluster, &BytesPerSector, NULL, NULL)) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } ClusterSize = BytesPerSector * SectorsPerCluster; @@ -359,7 +367,7 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) GetSystemTime(&SystemTime); if (!SystemTimeToFileTime(&SystemTime, &pDeletedFile->DeletionTime)) { - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); goto cleanup; } pDeletedFile->dwPhysicalFileSize = ROUND_UP(FileSize.u.LowPart, ClusterSize); @@ -373,11 +381,21 @@ STDMETHODIMP RecycleBin5::DeleteFile(_In_ LPCWSTR szFileName) goto cleanup; } + wfd.dwFileAttributes = dwAttributes; + wfd.nFileSizeLow = FileSize.u.LowPart; + GetFileTime(hFile, &wfd.ftCreationTime, &wfd.ftLastAccessTime, &wfd.ftLastWriteTime); + /* Move file */ if (MoveFileW(szFullName, DeletedFileName)) hr = S_OK; else - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); + + if (SUCCEEDED(hr)) + { + RECYCLEBINFILEIDENTITY ident = { pDeletedFile->DeletionTime, DeletedFileName }; + CRecycleBin_NotifyRecycled(szFullName, &wfd, &ident); + } cleanup: if (pHeader) diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin_v5.h b/dll/win32/shell32/shellrecyclebin/recyclebin_v5.h index f33b3adbe540c..2461e0bdbca2a 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin_v5.h +++ b/dll/win32/shell32/shellrecyclebin/recyclebin_v5.h @@ -28,7 +28,7 @@ typedef interface IRecycleBin5 IRecycleBin5; EXTERN_C const IID IID_IRecycleBin5; #define INTERFACE IRecycleBin5 -DECLARE_INTERFACE_(IRecycleBin5, IUnknown) +DECLARE_INTERFACE_(IRecycleBin5, IRecycleBin) { BEGIN_INTERFACE @@ -41,6 +41,7 @@ DECLARE_INTERFACE_(IRecycleBin5, IUnknown) STDMETHOD(DeleteFile)(THIS_ IN LPCWSTR szFileName) PURE; STDMETHOD(EmptyRecycleBin)(THIS); STDMETHOD(EnumObjects)(THIS_ OUT IRecycleBinEnumList **ppEnumList) PURE; + STDMETHOD(GetDirectory)(THIS_ LPWSTR szPath) PURE; /* IRecycleBin5 interface */ STDMETHOD(Delete)( diff --git a/dll/win32/shell32/shellrecyclebin/recyclebin_v5_enumerator.cpp b/dll/win32/shell32/shellrecyclebin/recyclebin_v5_enumerator.cpp index ff2593fe84d40..ae5c6d5e5e6af 100644 --- a/dll/win32/shell32/shellrecyclebin/recyclebin_v5_enumerator.cpp +++ b/dll/win32/shell32/shellrecyclebin/recyclebin_v5_enumerator.cpp @@ -28,13 +28,18 @@ class RecycleBin5File : public IRecycleBinFile STDMETHODIMP_(ULONG) Release() override; /* IRecycleBinFile methods */ + STDMETHODIMP IsEqualIdentity(const RECYCLEBINFILEIDENTITY *pFI) override + { + RECYCLEBINFILEIDENTITY self = { m_deletedFile.DeletionTime, m_FullName }; + return RecycleBinGeneric_IsEqualFileIdentity(pFI, &self) ? S_OK : S_FALSE; + } + STDMETHODIMP GetInfo(PDELETED_FILE_INFO pInfo) override; STDMETHODIMP GetLastModificationTime(FILETIME *pLastModificationTime) override; STDMETHODIMP GetDeletionTime(FILETIME *pDeletionTime) override; STDMETHODIMP GetFileSize(ULARGE_INTEGER *pFileSize) override; STDMETHODIMP GetPhysicalFileSize(ULARGE_INTEGER *pPhysicalFileSize) override; STDMETHODIMP GetAttributes(DWORD *pAttributes) override; STDMETHODIMP GetFileName(SIZE_T BufferSize, LPWSTR Buffer, SIZE_T *RequiredSize) override; - STDMETHODIMP GetTypeName(SIZE_T BufferSize, LPWSTR Buffer, SIZE_T *RequiredSize) override; STDMETHODIMP Delete() override; STDMETHODIMP Restore() override; @@ -53,14 +58,8 @@ STDMETHODIMP RecycleBin5File::QueryInterface(REFIID riid, void **ppvObject) return E_POINTER; if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IRecycleBinFile)) - *ppvObject = static_cast(this); - else if (IsEqualIID(riid, IID_IExtractIconA) || IsEqualIID(riid, IID_IExtractIconW)) { - DWORD dwAttributes; - if (GetAttributes(&dwAttributes) == S_OK) - return SHCreateFileExtractIconW(m_FullName, dwAttributes, riid, ppvObject); - else - return S_FALSE; + *ppvObject = static_cast(this); } else { @@ -94,13 +93,29 @@ STDMETHODIMP_(ULONG) RecycleBin5File::Release() return refCount; } +STDMETHODIMP RecycleBin5File::GetInfo(PDELETED_FILE_INFO pInfo) +{ + HRESULT hr = S_OK; + ULARGE_INTEGER uli; + if (FAILED(GetLastModificationTime(&pInfo->LastModification))) + ZeroMemory(&pInfo->LastModification, sizeof(pInfo->LastModification)); + pInfo->DeletionTime = m_deletedFile.DeletionTime; + C_ASSERT(sizeof(pInfo->FileSize) <= sizeof(UINT)); + pInfo->FileSize = FAILED(GetFileSize(&uli)) ? INVALID_FILE_SIZE : uli.LowPart; + if (FAILED(hr = GetAttributes(&pInfo->Attributes))) + pInfo->Attributes = 0; + InitializeRecycleBinStringRef(&pInfo->OriginalFullPath, m_deletedFile.FileNameW); + InitializeRecycleBinStringRef(&pInfo->RecycledFullPath, m_FullName); + return hr; +} + STDMETHODIMP RecycleBin5File::GetLastModificationTime(FILETIME *pLastModificationTime) { TRACE("(%p, %p)\n", this, pLastModificationTime); DWORD dwAttributes = ::GetFileAttributesW(m_FullName); if (dwAttributes == INVALID_FILE_ATTRIBUTES) - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); HANDLE hFile; hFile = CreateFileW(m_FullName, @@ -112,13 +127,13 @@ STDMETHODIMP RecycleBin5File::GetLastModificationTime(FILETIME *pLastModificatio (dwAttributes & FILE_ATTRIBUTE_DIRECTORY) ? FILE_FLAG_BACKUP_SEMANTICS : 0, NULL); if (hFile == INVALID_HANDLE_VALUE) - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); HRESULT hr; if (GetFileTime(hFile, NULL, NULL, pLastModificationTime)) hr = S_OK; else - hr = HRESULT_FROM_WIN32(GetLastError()); + hr = HResultFromWin32(GetLastError()); CloseHandle(hFile); return hr; } @@ -174,7 +189,7 @@ STDMETHODIMP RecycleBin5File::GetAttributes(DWORD *pAttributes) dwAttributes = GetFileAttributesW(m_FullName); if (dwAttributes == INVALID_FILE_ATTRIBUTES) - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); *pAttributes = dwAttributes; return S_OK; @@ -199,36 +214,6 @@ STDMETHODIMP RecycleBin5File::GetFileName(SIZE_T BufferSize, LPWSTR Buffer, SIZE return S_OK; } -STDMETHODIMP RecycleBin5File::GetTypeName(SIZE_T BufferSize, LPWSTR Buffer, SIZE_T *RequiredSize) -{ - HRESULT hr; - DWORD dwRequired; - DWORD dwAttributes; - SHFILEINFOW shFileInfo; - - TRACE("(%p, %u, %p, %p)\n", this, BufferSize, Buffer, RequiredSize); - - hr = GetAttributes(&dwAttributes); - if (!SUCCEEDED(hr)) - return hr; - - hr = SHGetFileInfoW(m_FullName, dwAttributes, &shFileInfo, sizeof(shFileInfo), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); - if (!SUCCEEDED(hr)) - return hr; - - dwRequired = (DWORD)(wcslen(shFileInfo.szTypeName) + 1) * sizeof(WCHAR); - if (RequiredSize) - *RequiredSize = dwRequired; - - if (BufferSize == 0 && !Buffer) - return S_OK; - - if (BufferSize < dwRequired) - return E_OUTOFMEMORY; - CopyMemory(Buffer, shFileInfo.szTypeName, dwRequired); - return S_OK; -} - STDMETHODIMP RecycleBin5File::Delete() { TRACE("(%p)\n", this); @@ -390,7 +375,7 @@ STDMETHODIMP RecycleBin5Enum::Next(DWORD celt, IRecycleBinFile **rgelt, DWORD *p ULARGE_INTEGER FileSize; FileSize.u.LowPart = GetFileSize(m_hInfo, &FileSize.u.HighPart); if (FileSize.u.LowPart == 0) - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); DWORD dwEntries = (DWORD)((FileSize.QuadPart - sizeof(INFO2_HEADER)) / sizeof(DELETED_FILE_RECORD)); @@ -455,7 +440,7 @@ RecycleBin5Enum::Init( m_hInfo = hInfo; m_pInfo = (PINFO2_HEADER)MapViewOfFile(hInfoMapped, FILE_MAP_READ, 0, 0, 0); if (!m_pInfo) - return HRESULT_FROM_WIN32(GetLastError()); + return HResultFromWin32(GetLastError()); if (m_pInfo->dwVersion != 5 || m_pInfo->dwRecordSize != sizeof(DELETED_FILE_RECORD)) return E_FAIL; diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index 3a665288535d9..68befd3292515 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -1390,14 +1390,7 @@ static HRESULT shellex_get_dataobj( LPSHELLEXECUTEINFOW sei, CComPtr shf; - LPCITEMIDLIST pidllast = NULL; - HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &shf), &pidllast); - if (FAILED_UNEXPECTEDLY(hr)) - return hr; - - return shf->GetUIObjectOf(NULL, 1, &pidllast, IID_NULL_PPV_ARG(IDataObject, &dataObj)); + return SHELL_GetUIObjectOfAbsoluteItem(NULL, pidl, IID_PPV_ARG(IDataObject, &dataObj)); } static HRESULT shellex_run_context_menu_default(IShellExtInit *obj, @@ -1582,6 +1575,7 @@ static HRESULT ShellExecute_ContextMenuVerb(LPSHELLEXECUTEINFOW sei) enum { idFirst = 1, idLast = 0x7fff }; HMENU hMenu = CreatePopupMenu(); + // Note: Windows does not pass CMF_EXTENDEDVERBS so "hidden" verbs cannot be executed hr = cm->QueryContextMenu(hMenu, 0, idFirst, idLast, fDefault ? CMF_DEFAULTONLY : 0); if (!FAILED_UNEXPECTEDLY(hr)) { diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index ce2f6f40834bd..a384c6c492526 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -259,6 +259,32 @@ HRESULT SHBindToObject( return SHBindToObjectEx(psf, pidl, NULL, riid, ppvObj); } +EXTERN_C HRESULT +SHELL_GetUIObjectOfAbsoluteItem( + _In_opt_ HWND hWnd, + _In_ PCIDLIST_ABSOLUTE pidl, + _In_ REFIID riid, _Out_ void **ppvObj) +{ + if (!ppvObj) + return E_INVALIDARG; + *ppvObj = NULL; + IShellFolder *psf; + PCUITEMID_CHILD pidlChild; + HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild); + if (SUCCEEDED(hr)) + { + hr = psf->GetUIObjectOf(hWnd, 1, &pidlChild, riid, NULL, ppvObj); + psf->Release(); + if (SUCCEEDED(hr)) + { + if (*ppvObj) + return hr; + hr = E_FAIL; + } + } + return hr; +} + HRESULT Shell_DisplayNameOf( _In_ IShellFolder *psf, @@ -1429,3 +1455,71 @@ GetDfmCmd(_In_ IContextMenu *pCM, _In_ LPCSTR verba) } return MapVerbToDfmCmd(verba); // Returns DFM_CMD_* or 0 } + +HRESULT +SHELL_MapContextMenuVerbToCmdId(LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap) +{ + LPCSTR pVerbA = pICI->lpVerb; + CHAR buf[MAX_PATH]; + LPCMINVOKECOMMANDINFOEX pICIX = (LPCMINVOKECOMMANDINFOEX)pICI; + if (IsUnicode(*pICIX) && !IS_INTRESOURCE(pICIX->lpVerbW)) + { + if (SHUnicodeToAnsi(pICIX->lpVerbW, buf, _countof(buf))) + pVerbA = buf; + } + + if (IS_INTRESOURCE(pVerbA)) + return LOWORD(pVerbA); + for (SIZE_T i = 0; pMap[i].Verb; ++i) + { + assert(SUCCEEDED((int)(pMap[i].CmdId))); // The id must be >= 0 and ideally in the 0..0x7fff range + if (!lstrcmpiA(pMap[i].Verb, pVerbA) && pVerbA[0]) + return pMap[i].CmdId; + } + return E_FAIL; +} + +static const CMVERBMAP* +FindVerbMapEntry(UINT_PTR CmdId, const CMVERBMAP *pMap) +{ + for (SIZE_T i = 0; pMap[i].Verb; ++i) + { + if (pMap[i].CmdId == CmdId) + return &pMap[i]; + } + return NULL; +} + +HRESULT +SHELL_GetCommandStringImpl(SIZE_T CmdId, UINT uFlags, LPSTR Buf, UINT cchBuf, const CMVERBMAP *pMap) +{ + const CMVERBMAP* pEntry; + switch (uFlags | GCS_UNICODE) + { + case GCS_VALIDATEW: + case GCS_VERBW: + pEntry = FindVerbMapEntry(CmdId, pMap); + if ((uFlags | GCS_UNICODE) == GCS_VERBW) + { + if (!pEntry) + return E_INVALIDARG; + else if (uFlags & GCS_UNICODE) + return SHAnsiToUnicode(pEntry->Verb, (LPWSTR)Buf, cchBuf) ? S_OK : E_FAIL; + else + return StringCchCopyA(Buf, cchBuf, pEntry->Verb); + } + return pEntry ? S_OK : S_FALSE; // GCS_VALIDATE + } + return E_NOTIMPL; +} + +HRESULT +SHELL_CreateShell32DefaultExtractIcon(int IconIndex, REFIID riid, LPVOID *ppvOut) +{ + CComPtr initIcon; + HRESULT hr = SHCreateDefaultExtractIcon(IID_PPV_ARG(IDefaultExtractIconInit, &initIcon)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; + initIcon->SetNormalIcon(swShell32Name, IconIndex); + return initIcon->QueryInterface(riid, ppvOut); +} diff --git a/dll/win32/shell32/utils.h b/dll/win32/shell32/utils.h index 92a96888c5d13..5591eb6a46385 100644 --- a/dll/win32/shell32/utils.h +++ b/dll/win32/shell32/utils.h @@ -7,7 +7,16 @@ #pragma once -inline BOOL +#ifdef __cplusplus +static inline LPWSTR +SHStrDupW(LPCWSTR Src) +{ + LPWSTR Dup; + return SUCCEEDED(SHStrDupW(Src, &Dup)) ? Dup : NULL; +} +#endif + +static inline BOOL RegValueExists(HKEY hKey, LPCWSTR Name) { return RegQueryValueExW(hKey, Name, NULL, NULL, NULL, NULL) == ERROR_SUCCESS; @@ -31,12 +40,22 @@ RegSetOrDelete(HKEY hKey, LPCWSTR Name, DWORD Type, LPCVOID Data, DWORD Size) return RegDeleteValueW(hKey, Name); } -inline DWORD +static inline DWORD RegSetString(HKEY hKey, LPCWSTR Name, LPCWSTR Str, DWORD Type = REG_SZ) { return RegSetValueExW(hKey, Name, 0, Type, LPBYTE(Str), (lstrlenW(Str) + 1) * sizeof(WCHAR)); } +typedef struct { + LPCSTR Verb; + WORD CmdId; +} CMVERBMAP; + +HRESULT +SHELL_MapContextMenuVerbToCmdId(LPCMINVOKECOMMANDINFO pICI, const CMVERBMAP *pMap); +HRESULT +SHELL_GetCommandStringImpl(SIZE_T CmdId, UINT uFlags, LPSTR Buf, UINT cchBuf, const CMVERBMAP *pMap); + // SHExtractIconsW is a forward, use this function instead inside shell32 inline HICON SHELL32_SHExtractIcon(LPCWSTR File, int Index, int cx, int cy) @@ -45,3 +64,20 @@ SHELL32_SHExtractIcon(LPCWSTR File, int Index, int cx, int cy) int r = PrivateExtractIconsW(File, Index, cx, cy, &hIco, NULL, 1, 0); return r > 0 ? hIco : NULL; } + +HRESULT +SHELL_CreateShell32DefaultExtractIcon(int IconIndex, REFIID riid, LPVOID *ppvOut); + +static inline HRESULT +SHELL_CreateFallbackExtractIconForFolder(REFIID riid, LPVOID *ppvOut) +{ + const int id = IDI_SHELL_FOLDER; + return SHELL_CreateShell32DefaultExtractIcon(id > 1 ? -id : 0, riid, ppvOut); +} + +static inline HRESULT +SHELL_CreateFallbackExtractIconForNoAssocFile(REFIID riid, LPVOID *ppvOut) +{ + const int id = IDI_SHELL_DOCUMENT; + return SHELL_CreateShell32DefaultExtractIcon(id > 1 ? -id : 0, riid, ppvOut); +} diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index de484982b15d0..2bca7cdd4363f 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -2112,32 +2112,22 @@ BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl) BOOL _ILIsDrive(LPCITEMIDLIST pidl) { - LPPIDLDATA lpPData = _ILGetDataPointer(pidl); - - TRACE("(%p)\n",pidl); - - return (pidl && lpPData && (PT_DRIVE == lpPData->type || - PT_DRIVE1 == lpPData->type || - PT_DRIVE2 == lpPData->type || - PT_DRIVE3 == lpPData->type)); + const BYTE type = _ILGetType(pidl); + const BYTE fldrtype = (PT_DRIVE & PT_FOLDERTYPEMASK); + return (type & PT_FOLDERTYPEMASK) == fldrtype && type != PT_COMPUTER_REGITEM; } BOOL _ILIsFolder(LPCITEMIDLIST pidl) { - LPPIDLDATA lpPData = _ILGetDataPointer(pidl); - - TRACE("(%p)\n",pidl); - - return (pidl && lpPData && (PT_FOLDER == lpPData->type || PT_FOLDER1 == lpPData->type)); + /* A folder or a simple PT_FS with a child */ + const BYTE type = _ILGetFSType(pidl); + return (type & PT_FS_FOLDER_FLAG) != 0 || (type == PT_FS && ILGetNext(pidl)); } BOOL _ILIsValue(LPCITEMIDLIST pidl) { - LPPIDLDATA lpPData = _ILGetDataPointer(pidl); - - TRACE("(%p)\n",pidl); - - return (pidl && lpPData && PT_VALUE == lpPData->type); + const BYTE type = _ILGetFSType(pidl); + return type && !(type & PT_FS_FOLDER_FLAG); } BOOL _ILIsCPanelStruct(LPCITEMIDLIST pidl) @@ -2281,6 +2271,9 @@ static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl) if (!pdata) return NULL; + if (_ILGetFSType(pidl) & PT_FS_UNICODE_FLAG) + return (LPWSTR)pdata->u.file.szNames; + switch (pdata->type) { case PT_GUID: @@ -2311,9 +2304,6 @@ static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl) /*return (LPSTR)&(pdata->u.network.szNames);*/ return NULL; - case PT_VALUEW: - return (LPWSTR)pdata->u.file.szNames; - #ifdef __REACTOS__ /* r54423 */ case PT_CPLAPPLET: return pdata->u.cpanel.szName; @@ -2439,7 +2429,7 @@ FileStructW* _ILGetFileStructW(LPCITEMIDLIST pidl) { FileStructW *pFileStructW; WORD cbOffset; - if (!(_ILIsValue(pidl) || _ILIsFolder(pidl))) + if (!_ILIsFolderOrFile(pidl)) return NULL; cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD)); @@ -2479,48 +2469,12 @@ FileStructW* _ILGetFileStructW(LPCITEMIDLIST pidl) { */ BOOL _ILGetFileDateTime(LPCITEMIDLIST pidl, FILETIME *pFt) { - LPPIDLDATA pdata = _ILGetDataPointer(pidl); - - if (!pdata) - return FALSE; - - switch (pdata->type) + if (_ILGetFSType(pidl) > PT_FS) /* Only non-simple FS items have a date */ { - case PT_FOLDER: - case PT_VALUE: - DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt); - break; - default: - return FALSE; - } - return TRUE; -} - -BOOL _ILGetFileDate(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) -{ - FILETIME ft,lft; - SYSTEMTIME time; - BOOL ret; - - if (_ILGetFileDateTime( pidl, &ft )) - { - FileTimeToLocalFileTime(&ft, &lft); - FileTimeToSystemTime (&lft, &time); - - ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, pOut, uOutSize); - if (ret) - { - /* Append space + time without seconds */ - pOut[ret - 1] = L' '; - GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &pOut[ret], uOutSize - ret); - } - } - else - { - pOut[0] = UNICODE_NULL; - ret = FALSE; + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + return DosDateTimeToFileTime(pdata->u.file.uFileDate, pdata->u.file.uFileTime, pFt); } - return ret; + return FALSE; } /************************************************************************* @@ -2543,15 +2497,13 @@ BOOL _ILGetFileDate(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DWORD _ILGetFileSize(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) { LPPIDLDATA pdata = _ILGetDataPointer(pidl); - DWORD dwSize; - if (!pdata) return 0; - switch (pdata->type) + if (_ILGetFSType(pidl) & PT_FS_FILE_FLAG) { - case PT_VALUE: - dwSize = pdata->u.file.dwFileSize; + /* FIXME: Handle INVALID_FILE_SIZE (get size from disk) */ + DWORD dwSize = pdata->u.file.dwFileSize; if (pOut) StrFormatKBSizeW(dwSize, pOut, uOutSize); return dwSize; diff --git a/dll/win32/shell32/wine/pidl.h b/dll/win32/shell32/wine/pidl.h index 28fff42feb452..bd8e34ea4bdbe 100644 --- a/dll/win32/shell32/wine/pidl.h +++ b/dll/win32/shell32/wine/pidl.h @@ -157,16 +157,6 @@ typedef struct tagPIDLPrinterStruct WCHAR szName[1]; } PIDLPrinterStruct; -typedef struct tagPIDLRecycleStruct -{ - FILETIME LastModification; - FILETIME DeletionTime; - ULARGE_INTEGER FileSize; - ULARGE_INTEGER PhysicalFileSize; - DWORD Attributes; - WCHAR szName[1]; -} PIDLRecycleStruct; - #endif /* !__REACTOS__ */ typedef struct tagGUIDStruct @@ -233,7 +223,6 @@ typedef struct tagPIDLDATA #ifdef __REACTOS__ struct tagPIDLFontStruct cfont; struct tagPIDLPrinterStruct cprinter; - struct tagPIDLRecycleStruct crecycle; #endif }u; } PIDLDATA, *LPPIDLDATA; @@ -243,7 +232,6 @@ typedef struct tagPIDLDATA * getting special values from simple pidls */ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; -BOOL _ILGetFileDate (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; BOOL _ILGetExtension (LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; DWORD _ILGetFileAttributes(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uOutSize) DECLSPEC_HIDDEN; @@ -261,6 +249,7 @@ BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl); BOOL _ILIsBitBucket (LPCITEMIDLIST pidl); BOOL _ILIsNetHood (LPCITEMIDLIST pidl); BOOL _ILIsControlPanel (LPCITEMIDLIST pidl); +#define _ILIsFolderOrFile _ILGetFSType #endif BOOL _ILIsDrive (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN; BOOL _ILIsFolder (LPCITEMIDLIST pidl) DECLSPEC_HIDDEN; diff --git a/dll/win32/shell32/wine/shell32_main.h b/dll/win32/shell32/wine/shell32_main.h index d40e1a164b327..fa5bafd8880e8 100644 --- a/dll/win32/shell32/wine/shell32_main.h +++ b/dll/win32/shell32/wine/shell32_main.h @@ -139,7 +139,7 @@ void FreeChangeNotifications(void) DECLSPEC_HIDDEN; BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pwszDir, BOOL bShowUI); BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir); -void WINAPI _InsertMenuItemW (HMENU hmenu, UINT indexMenu, BOOL fByPosition, +BOOL WINAPI _InsertMenuItemW (HMENU hmenu, UINT indexMenu, BOOL fByPosition, UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState); static __inline BOOL SHELL_OsIsUnicode(void) From 392473c7b515522742a2d4da7a92140b74b06c04 Mon Sep 17 00:00:00 2001 From: Stanislav Motylkov Date: Fri, 20 Dec 2024 18:18:30 +0300 Subject: [PATCH 057/750] [GITHUB] Stick to ubuntu-22.04 for build-linux Fixes clang build, since ubuntu-latest (24.04.1 LTS / Noble Numbat) has no LLVM 13 package available: ``` Ign:6 https://apt.llvm.org/noble llvm-toolchain-noble-13 InRelease Err:9 https://apt.llvm.org/noble llvm-toolchain-noble-13 Release 404 Not Found [IP: 151.101.46.49 443] Reading package lists... E: The repository 'http://apt.llvm.org/noble llvm-toolchain-noble-13 Release' does not have a Release file. Error: Process completed with exit code 100. ``` --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e53c2df7f19c..ecf47dbc9c2ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - dllver: 0x600 config: Release fail-fast: false - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Get RosBE build specifics id: get_rosbe_spec From 85e90601e05bafc7fa709691cc6bf2e90ef03a6a Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 21 Dec 2024 10:35:53 +0100 Subject: [PATCH 058/750] [SETUPAPI] Implement SetupDiGetCustomDevicePropertyA --- dll/win32/setupapi/devinst.c | 80 ++++++++++++++++++++++++++++++++ dll/win32/setupapi/setupapi.spec | 2 +- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/dll/win32/setupapi/devinst.c b/dll/win32/setupapi/devinst.c index 53e99ba5d2947..9dbabb48a32c3 100644 --- a/dll/win32/setupapi/devinst.c +++ b/dll/win32/setupapi/devinst.c @@ -6151,6 +6151,86 @@ SetupDiRestartDevices( return TRUE; } +/*********************************************************************** + * SetupDiGetCustomDevicePropertyA (SETUPAPI.@) + */ +BOOL +WINAPI +SetupDiGetCustomDevicePropertyA( + IN HDEVINFO DeviceInfoSet, + IN PSP_DEVINFO_DATA DeviceInfoData, + IN PCSTR CustomPropertyName, + IN DWORD Flags, + OUT PDWORD PropertyRegDataType OPTIONAL, + OUT PBYTE PropertyBuffer, + IN DWORD PropertyBufferSize, + OUT PDWORD RequiredSize OPTIONAL) +{ + struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet; + struct DeviceInfo *deviceInfo; + DWORD ConfigFlags = 0, PropertySize; + CONFIGRET cr; + + TRACE("%s(%p %p %s 0x%lx %p %p %lu %p)\n", __FUNCTION__, DeviceInfoSet, DeviceInfoData, + CustomPropertyName, Flags, PropertyRegDataType, PropertyBuffer, PropertyBufferSize, RequiredSize); + + if (!DeviceInfoSet || DeviceInfoSet == INVALID_HANDLE_VALUE) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + if (set->magic != SETUP_DEVICE_INFO_SET_MAGIC) + { + SetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + if (!DeviceInfoData || DeviceInfoData->cbSize != sizeof(SP_DEVINFO_DATA) + || !DeviceInfoData->Reserved) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if (Flags & ~DICUSTOMDEVPROP_MERGE_MULTISZ) + { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + deviceInfo = (struct DeviceInfo *)DeviceInfoData->Reserved; + if (deviceInfo->set != set) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags & DICUSTOMDEVPROP_MERGE_MULTISZ) + { + ConfigFlags |= CM_CUSTOMDEVPROP_MERGE_MULTISZ; + } + + PropertySize = PropertyBufferSize; + cr = CM_Get_DevInst_Custom_Property_ExA(deviceInfo->dnDevInst, + CustomPropertyName, + PropertyRegDataType, + PropertyBuffer, + &PropertySize, + ConfigFlags, + set->hMachine); + if ((cr == CR_SUCCESS) || (cr == CR_BUFFER_SMALL)) + { + if (RequiredSize) + *RequiredSize = PropertySize; + } + + if (cr != CR_SUCCESS) + { + SetLastError(GetErrorCodeFromCrCode(cr)); + return FALSE; + } + + return TRUE; +} + /*********************************************************************** * SetupDiGetCustomDevicePropertyW (SETUPAPI.@) */ diff --git a/dll/win32/setupapi/setupapi.spec b/dll/win32/setupapi/setupapi.spec index 3a15bffab48b0..c5d56635107cf 100644 --- a/dll/win32/setupapi/setupapi.spec +++ b/dll/win32/setupapi/setupapi.spec @@ -315,7 +315,7 @@ @ stdcall SetupDiGetClassInstallParamsW(ptr ptr ptr long ptr) @ stdcall SetupDiGetClassRegistryPropertyA(ptr long ptr ptr long ptr str ptr) @ stdcall SetupDiGetClassRegistryPropertyW(ptr long ptr ptr long ptr wstr ptr) -@ stub SetupDiGetCustomDevicePropertyA +@ stdcall SetupDiGetCustomDevicePropertyA(ptr ptr str long ptr ptr long ptr) @ stdcall SetupDiGetCustomDevicePropertyW(ptr ptr wstr long ptr ptr long ptr) @ stdcall SetupDiGetDeviceInfoListClass(ptr ptr) @ stdcall SetupDiGetDeviceInfoListDetailA(ptr ptr) From f06c4dcc6bd015d966cb0800a532319092124319 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 21 Dec 2024 15:28:43 +0100 Subject: [PATCH 059/750] [WKSSVC] InitWorkstationInfo: Set data size before retrieving registry values --- base/services/wkssvc/info.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/base/services/wkssvc/info.c b/base/services/wkssvc/info.c index 98e90256ecd70..e596ffe529cd7 100644 --- a/base/services/wkssvc/info.c +++ b/base/services/wkssvc/info.c @@ -326,6 +326,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_unlock_behind = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UseCloseBehind", 0, @@ -337,6 +338,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_close_behind = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"BufNamedPipes", 0, @@ -348,6 +350,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_buf_named_pipes = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UseLockReadUnlock", 0, @@ -359,6 +362,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_lock_read_unlock = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UtilizeNtCaching", 0, @@ -370,6 +374,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_utilize_nt_caching = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UseRawRead", 0, @@ -381,6 +386,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_raw_read = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UseRawWrite", 0, @@ -392,6 +398,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_raw_write = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UseWriteRawData", 0, @@ -403,6 +410,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_write_raw_data = 0; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"UseEncryption", 0, @@ -414,6 +422,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_use_encryption = 1; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"BufFilesDenyWrite", 0, @@ -425,6 +434,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_buf_files_deny_write = 0; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"BufReadOnlyFiles", 0, @@ -436,6 +446,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_buf_read_only_files = 0; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"ForceCoreCreateMode", 0, @@ -447,6 +458,7 @@ InitWorkstationInfo(VOID) else WkstaInfo502.wki502_force_core_create_mode = 0; + dwSize = sizeof(dwValue); dwError = RegQueryValueExW(hInfoKey, L"Use512ByteMaxTransfer", 0, From 216196a10d90b154f9f1c45001e1e25601c4b79b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 21 Dec 2024 16:19:14 +0100 Subject: [PATCH 060/750] [WKSSVC] Simplify NetrWkstaSetInfo --- base/services/wkssvc/rpcserver.c | 78 ++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index 703e35e693511..5088b48f6e9fb 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -243,6 +243,7 @@ NetrWkstaSetInfo( LPWKSTA_INFO WkstaInfo, unsigned long *ErrorParameter) { + DWORD dwErrParam = 0; DWORD dwResult = NERR_Success; TRACE("NetrWkstaSetInfo(%lu %p %p)\n", @@ -254,45 +255,50 @@ NetrWkstaSetInfo( if (WkstaInfo->WkstaInfo502.wki502_keep_conn >= 1 && WkstaInfo->WkstaInfo502.wki502_keep_conn <= 65535) { WkstaInfo502.wki502_keep_conn = WkstaInfo->WkstaInfo502.wki502_keep_conn; + } + else + { + dwErrParam = WKSTA_KEEPCONN_PARMNUM; + dwResult = ERROR_INVALID_PARAMETER; + } + if (dwResult == NERR_Success) + { if (WkstaInfo->WkstaInfo502.wki502_max_cmds >= 50 && WkstaInfo->WkstaInfo502.wki502_max_cmds <= 65535) { WkstaInfo502.wki502_max_cmds = WkstaInfo->WkstaInfo502.wki502_max_cmds; + } + else + { + dwErrParam = WKSTA_MAXCMDS_PARMNUM; + dwResult = ERROR_INVALID_PARAMETER; + } + } - if (WkstaInfo->WkstaInfo502.wki502_sess_timeout >= 60 && WkstaInfo->WkstaInfo502.wki502_sess_timeout <= 65535) - { - WkstaInfo502.wki502_sess_timeout = WkstaInfo->WkstaInfo502.wki502_sess_timeout; - - if (WkstaInfo->WkstaInfo502.wki502_dormant_file_limit != 0) - { - WkstaInfo502.wki502_dormant_file_limit = WkstaInfo->WkstaInfo502.wki502_dormant_file_limit; - } - else - { - if (ErrorParameter) - *ErrorParameter = WKSTA_DORMANTFILELIMIT_PARMNUM; - dwResult = ERROR_INVALID_PARAMETER; - } - } - else - { - if (ErrorParameter) - *ErrorParameter = WKSTA_SESSTIMEOUT_PARMNUM; - dwResult = ERROR_INVALID_PARAMETER; - } + if (dwResult == NERR_Success) + { + if (WkstaInfo->WkstaInfo502.wki502_sess_timeout >= 60 && WkstaInfo->WkstaInfo502.wki502_sess_timeout <= 65535) + { + WkstaInfo502.wki502_sess_timeout = WkstaInfo->WkstaInfo502.wki502_sess_timeout; } else { - if (ErrorParameter) - *ErrorParameter = WKSTA_MAXCMDS_PARMNUM; + dwErrParam = WKSTA_SESSTIMEOUT_PARMNUM; dwResult = ERROR_INVALID_PARAMETER; } } - else + + if (dwResult == NERR_Success) { - if (ErrorParameter) - *ErrorParameter = WKSTA_KEEPCONN_PARMNUM; - dwResult = ERROR_INVALID_PARAMETER; + if (WkstaInfo->WkstaInfo502.wki502_dormant_file_limit != 0) + { + WkstaInfo502.wki502_dormant_file_limit = WkstaInfo->WkstaInfo502.wki502_dormant_file_limit; + } + else + { + dwErrParam = WKSTA_DORMANTFILELIMIT_PARMNUM; + dwResult = ERROR_INVALID_PARAMETER; + } } break; @@ -303,8 +309,7 @@ NetrWkstaSetInfo( } else { - if (ErrorParameter) - *ErrorParameter = WKSTA_KEEPCONN_PARMNUM; + dwErrParam = WKSTA_KEEPCONN_PARMNUM; dwResult = ERROR_INVALID_PARAMETER; } break; @@ -316,8 +321,7 @@ NetrWkstaSetInfo( } else { - if (ErrorParameter) - *ErrorParameter = WKSTA_SESSTIMEOUT_PARMNUM; + dwErrParam = WKSTA_SESSTIMEOUT_PARMNUM; dwResult = ERROR_INVALID_PARAMETER; } break; @@ -329,23 +333,27 @@ NetrWkstaSetInfo( } else { - if (ErrorParameter) - *ErrorParameter = WKSTA_DORMANTFILELIMIT_PARMNUM; + dwErrParam = WKSTA_DORMANTFILELIMIT_PARMNUM; dwResult = ERROR_INVALID_PARAMETER; } break; default: - FIXME("Level %lu unimplemented\n", Level); + ERR("Invalid Level %lu\n", Level); dwResult = ERROR_INVALID_LEVEL; break; } /* Save the workstation in the registry */ if (dwResult == NERR_Success) + { SaveWorkstationInfo(Level); - /* FIXME: Notify the redirector */ + /* FIXME: Notify the redirector */ + } + + if ((dwResult == ERROR_INVALID_PARAMETER) && (ErrorParameter != NULL)) + *ErrorParameter = dwErrParam; return dwResult; } From 2d4c0b87b1eccecbdd220ef9dea6512bbeb2fcd8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Dec 2024 17:26:00 +0200 Subject: [PATCH 061/750] [WIN32K:NTUSER] Check for NULL desktop window in co_IntProcessMouseMessage --- win32ss/user/ntuser/msgqueue.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/win32ss/user/ntuser/msgqueue.c b/win32ss/user/ntuser/msgqueue.c index 3a8b60704ffda..13a3a106d7d8a 100644 --- a/win32ss/user/ntuser/msgqueue.c +++ b/win32ss/user/ntuser/msgqueue.c @@ -1487,6 +1487,12 @@ BOOL co_IntProcessMouseMessage(MSG* msg, BOOL* RemoveMessages, BOOL* NotForUs, L pti = PsGetCurrentThreadWin32Thread(); pwndDesktop = UserGetDesktopWindow(); + if (pwndDesktop == NULL) + { + ERR("No desktop window!\n"); + return FALSE; + } + MessageQueue = pti->MessageQueue; CurInfo = IntGetSysCursorInfo(); pwndMsg = ValidateHwndNoErr(msg->hwnd); @@ -2001,7 +2007,7 @@ co_MsqPeekHardwareMessage(IN PTHREADINFO pti, UpdateKeyStateFromMsg(MessageQueue, &msg); AcceptMessage = co_IntProcessHardwareMessage(&msg, &Remove, &NotForUs, ExtraInfo, MsgFilterLow, MsgFilterHigh); - + if (!NotForUs && (MsgFilterLow != 0 || MsgFilterHigh != 0)) { /* Don't return message if not in range */ From ae7e375a4d5d9074113172e3edede7c1759746a9 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 22 Dec 2024 11:15:37 +0100 Subject: [PATCH 062/750] [LSALIB][SECURE32][LSASRV] Improve the check for trusted/untrusted callers - A caller of LsaRegisterLogonProcess is a trusted caller if the calling process has got the Tcb privilege, otherwise it is an untrusted caller. - A caller of LsaConnectUntrusted is always an untrusted caller. - A caller of LsapOpenLsaPort is always a trusted caller. --- dll/win32/lsasrv/authport.c | 20 +++++++++++++++++--- dll/win32/secur32/lsalpc.c | 4 ++-- sdk/include/reactos/subsys/lsass/lsass.h | 8 +++++++- sdk/lib/lsalib/lsa.c | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/dll/win32/lsasrv/authport.c b/dll/win32/lsasrv/authport.c index e8140c0930f1b..f15faecbde18c 100644 --- a/dll/win32/lsasrv/authport.c +++ b/dll/win32/lsasrv/authport.c @@ -135,10 +135,24 @@ LsapCheckLogonProcess(PLSA_API_MSG RequestMsg, TRACE("New LogonContext: %p\n", Context); Context->ClientProcessHandle = ProcessHandle; - Context->TrustedCaller = RequestMsg->ConnectInfo.TrustedCaller; - if (Context->TrustedCaller) - Context->TrustedCaller = LsapIsTrustedClient(ProcessHandle); + switch (RequestMsg->ConnectInfo.TrustedCaller) + { + case NO: + Context->TrustedCaller = FALSE; + break; + + case YES: + Context->TrustedCaller = TRUE; + break; + + case CHECK: + default: + Context->TrustedCaller = LsapIsTrustedClient(ProcessHandle); + break; + } + + TRACE("TrustedCaller: %u\n", Context->TrustedCaller); *LogonContext = Context; diff --git a/dll/win32/secur32/lsalpc.c b/dll/win32/secur32/lsalpc.c index 131538103c352..1103e6f6f6b9b 100644 --- a/dll/win32/secur32/lsalpc.c +++ b/dll/win32/secur32/lsalpc.c @@ -74,7 +74,7 @@ LsapOpenLsaPort(VOID) sizeof(ConnectInfo)); ConnectInfo.CreateContext = FALSE; - ConnectInfo.TrustedCaller = TRUE; + ConnectInfo.TrustedCaller = YES; ConnectInfoLength = sizeof(LSA_CONNECTION_INFO); Status = NtConnectPort(&LsaPortHandle, @@ -175,7 +175,7 @@ LsaConnectUntrusted( ConnectInfoLength); ConnectInfo.CreateContext = TRUE; - ConnectInfo.TrustedCaller = FALSE; + ConnectInfo.TrustedCaller = NO; Status = NtConnectPort(LsaHandle, &PortName, diff --git a/sdk/include/reactos/subsys/lsass/lsass.h b/sdk/include/reactos/subsys/lsass/lsass.h index 5522b0ef85f36..ad2df3ee2d99a 100644 --- a/sdk/include/reactos/subsys/lsass/lsass.h +++ b/sdk/include/reactos/subsys/lsass/lsass.h @@ -27,6 +27,12 @@ typedef enum _LSA_API_NUMBER LSASS_REQUEST_MAXIMUM } LSA_API_NUMBER, *PLSA_API_NUMBER; +typedef enum _LSA_TRUSTED_CALLER +{ + NO, + YES, + CHECK +} LSA_TRUSTED_CALLER; typedef struct _LSA_CONNECTION_INFO { @@ -35,7 +41,7 @@ typedef struct _LSA_CONNECTION_INFO ULONG Length; CHAR LogonProcessNameBuffer[LSASS_MAX_LOGON_PROCESS_NAME_LENGTH + 1]; BOOL CreateContext; - BOOL TrustedCaller; + LSA_TRUSTED_CALLER TrustedCaller; } LSA_CONNECTION_INFO, *PLSA_CONNECTION_INFO; diff --git a/sdk/lib/lsalib/lsa.c b/sdk/lib/lsalib/lsa.c index 95a02f41cd7c0..321797e066b7d 100644 --- a/sdk/lib/lsalib/lsa.c +++ b/sdk/lib/lsalib/lsa.c @@ -317,6 +317,7 @@ LsaRegisterLogonProcess(IN PLSA_STRING LogonProcessName, ConnectInfo.Length = LogonProcessName->Length; ConnectInfo.LogonProcessNameBuffer[ConnectInfo.Length] = ANSI_NULL; ConnectInfo.CreateContext = TRUE; + ConnectInfo.TrustedCaller = CHECK; Status = ZwConnectPort(LsaHandle, &PortName, From 9c544a5552892b6312e51b4ba95e4afee0ed9406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 27 Dec 2022 20:17:31 +0100 Subject: [PATCH 063/750] [BASE][DLL][ROSAPPS][SCREENSAVERS] Remove deprecated legacy Win16 resource attributes (#7567) - Remove DISCARDABLE attribute. - Remove MOVEABLE attribute. See: https://learn.microsoft.com/en-us/windows/win32/menurc/common-resource-attributes 3rd-party module rosapps/lib/vfdlib is left unchanged. --- base/applications/calc/resource.rc | 2 +- base/applications/osk/lang/ar-DZ.rc | 2 +- base/applications/osk/lang/cs-CZ.rc | 2 +- base/applications/osk/lang/de-DE.rc | 2 +- base/applications/osk/lang/en-GB.rc | 2 +- base/applications/osk/lang/en-US.rc | 2 +- base/applications/osk/lang/es-ES.rc | 2 +- base/applications/osk/lang/et-EE.rc | 2 +- base/applications/osk/lang/fr-CA.rc | 2 +- base/applications/osk/lang/fr-FR.rc | 2 +- base/applications/osk/lang/he-IL.rc | 2 +- base/applications/osk/lang/id-ID.rc | 2 +- base/applications/osk/lang/it-IT.rc | 2 +- base/applications/osk/lang/pl-PL.rc | 2 +- base/applications/osk/lang/pt-BR.rc | 2 +- base/applications/osk/lang/pt-PT.rc | 2 +- base/applications/osk/lang/ro-RO.rc | 2 +- base/applications/osk/lang/ru-RU.rc | 2 +- base/applications/osk/lang/tr-TR.rc | 2 +- base/applications/osk/lang/zh-CN.rc | 2 +- base/applications/osk/lang/zh-HK.rc | 2 +- base/applications/osk/lang/zh-TW.rc | 2 +- base/applications/screensavers/3dtext/rsrc.rc | 2 +- base/applications/screensavers/logon/logon.rc | 2 +- dll/win32/browseui/lang/bg-BG.rc | 2 +- dll/win32/browseui/lang/de-DE.rc | 2 +- dll/win32/browseui/lang/en-US.rc | 2 +- dll/win32/browseui/lang/es-ES.rc | 2 +- dll/win32/browseui/lang/et-EE.rc | 2 +- dll/win32/browseui/lang/eu-ES.rc | 2 +- dll/win32/browseui/lang/fr-FR.rc | 2 +- dll/win32/browseui/lang/he-IL.rc | 2 +- dll/win32/browseui/lang/hi-IN.rc | 2 +- dll/win32/browseui/lang/hu-HU.rc | 2 +- dll/win32/browseui/lang/id-ID.rc | 2 +- dll/win32/browseui/lang/it-IT.rc | 2 +- dll/win32/browseui/lang/ja-JP.rc | 2 +- dll/win32/browseui/lang/pl-PL.rc | 2 +- dll/win32/browseui/lang/pt-BR.rc | 2 +- dll/win32/browseui/lang/pt-PT.rc | 2 +- dll/win32/browseui/lang/ro-RO.rc | 2 +- dll/win32/browseui/lang/ru-RU.rc | 2 +- dll/win32/browseui/lang/sq-AL.rc | 2 +- dll/win32/browseui/lang/tr-TR.rc | 2 +- dll/win32/browseui/lang/uk-UA.rc | 2 +- dll/win32/browseui/lang/zh-CN.rc | 2 +- dll/win32/browseui/lang/zh-TW.rc | 2 +- dll/win32/devmgr/devmgr.rc | 2 +- dll/win32/devmgr/lang/bg-BG.rc | 9 +++---- dll/win32/devmgr/lang/cs-CZ.rc | 9 +++---- dll/win32/devmgr/lang/de-DE.rc | 9 +++---- dll/win32/devmgr/lang/el-GR.rc | 9 +++---- dll/win32/devmgr/lang/en-US.rc | 9 +++---- dll/win32/devmgr/lang/es-ES.rc | 9 +++---- dll/win32/devmgr/lang/et-EE.rc | 9 +++---- dll/win32/devmgr/lang/fr-FR.rc | 9 +++---- dll/win32/devmgr/lang/he-IL.rc | 9 +++---- dll/win32/devmgr/lang/hu-HU.rc | 9 +++---- dll/win32/devmgr/lang/id-ID.rc | 9 +++---- dll/win32/devmgr/lang/it-IT.rc | 9 +++---- dll/win32/devmgr/lang/ja-JP.rc | 9 +++---- dll/win32/devmgr/lang/no-NO.rc | 9 +++---- dll/win32/devmgr/lang/pl-PL.rc | 9 +++---- dll/win32/devmgr/lang/pt-BR.rc | 9 +++---- dll/win32/devmgr/lang/pt-PT.rc | 8 +++---- dll/win32/devmgr/lang/ro-RO.rc | 9 +++---- dll/win32/devmgr/lang/ru-RU.rc | 9 +++---- dll/win32/devmgr/lang/sk-SK.rc | 9 +++---- dll/win32/devmgr/lang/sq-AL.rc | 9 +++---- dll/win32/devmgr/lang/tr-TR.rc | 8 +++---- dll/win32/devmgr/lang/uk-UA.rc | 9 +++---- dll/win32/devmgr/lang/zh-CN.rc | 9 +++---- dll/win32/devmgr/lang/zh-HK.rc | 9 +++---- dll/win32/devmgr/lang/zh-TW.rc | 9 +++---- .../rosapps/applications/notevil/notevil.rc | 16 ++++++------- .../screensavers/blankscr/lang/bg-BG.rc | 2 +- .../screensavers/blankscr/lang/de-DE.rc | 2 +- .../screensavers/blankscr/lang/en-US.rc | 2 +- .../screensavers/blankscr/lang/es-ES.rc | 2 +- .../screensavers/blankscr/lang/fr-FR.rc | 2 +- .../screensavers/blankscr/lang/it-IT.rc | 2 +- .../screensavers/blankscr/lang/lt-LT.rc | 2 +- .../screensavers/blankscr/lang/nl-NL.rc | 2 +- .../screensavers/blankscr/lang/no-NO.rc | 2 +- .../screensavers/blankscr/lang/pl-PL.rc | 2 +- .../screensavers/blankscr/lang/ro-RO.rc | 2 +- .../screensavers/blankscr/lang/ru-RU.rc | 2 +- .../screensavers/blankscr/lang/sk-SK.rc | 2 +- .../screensavers/blankscr/lang/tr-TR.rc | 2 +- .../screensavers/blankscr/lang/uk-UA.rc | 2 +- .../screensavers/blankscr/lang/zh-CN.rc | 2 +- .../screensavers/blankscr/lang/zh-HK.rc | 2 +- .../screensavers/blankscr/lang/zh-TW.rc | 2 +- .../screensavers/blankscr/scrnsave.rc | 8 +++---- .../screensavers/butterflies/butterflies.rc | 6 ++--- .../screensavers/butterflies/lang/bg-BG.rc | 6 ++--- .../screensavers/butterflies/lang/de-DE.rc | 6 ++--- .../screensavers/butterflies/lang/en-US.rc | 6 ++--- .../screensavers/butterflies/lang/es-ES.rc | 6 ++--- .../screensavers/butterflies/lang/fr-FR.rc | 6 ++--- .../screensavers/butterflies/lang/it-IT.rc | 6 ++--- .../screensavers/butterflies/lang/lt-LT.rc | 6 ++--- .../screensavers/butterflies/lang/no-NO.rc | 6 ++--- .../screensavers/butterflies/lang/pl-PL.rc | 6 ++--- .../screensavers/butterflies/lang/ro-RO.rc | 6 ++--- .../screensavers/butterflies/lang/ru-RU.rc | 6 ++--- .../screensavers/butterflies/lang/sk-SK.rc | 6 ++--- .../screensavers/butterflies/lang/tr-TR.rc | 6 ++--- .../screensavers/butterflies/lang/uk-UA.rc | 6 ++--- .../screensavers/butterflies/lang/zh-CN.rc | 6 ++--- .../screensavers/butterflies/lang/zh-HK.rc | 6 ++--- .../screensavers/butterflies/lang/zh-TW.rc | 6 ++--- .../screensavers/circles/circles.rc | 8 +++---- .../screensavers/circles/lang/de-DE.rc | 2 +- .../screensavers/circles/lang/en-US.rc | 2 +- .../screensavers/circles/lang/es-ES.rc | 2 +- .../screensavers/circles/lang/fr-FR.rc | 2 +- .../screensavers/circles/lang/it-IT.rc | 2 +- .../screensavers/circles/lang/no-NO.rc | 2 +- .../screensavers/circles/lang/pl-PL.rc | 2 +- .../screensavers/circles/lang/ro-RO.rc | 2 +- .../screensavers/circles/lang/ru-RU.rc | 2 +- .../screensavers/circles/lang/sk-SK.rc | 2 +- .../screensavers/circles/lang/tr-TR.rc | 2 +- .../screensavers/circles/lang/uk-UA.rc | 2 +- .../screensavers/circles/lang/zh-CN.rc | 2 +- .../screensavers/circles/lang/zh-HK.rc | 2 +- .../screensavers/circles/lang/zh-TW.rc | 2 +- .../screensavers/cylfrac/cylfrac.rc | 8 +++---- .../screensavers/cylfrac/lang/bg-BG.rc | 2 +- .../screensavers/cylfrac/lang/de-DE.rc | 2 +- .../screensavers/cylfrac/lang/en-US.rc | 2 +- .../screensavers/cylfrac/lang/es-ES.rc | 2 +- .../screensavers/cylfrac/lang/fr-FR.rc | 2 +- .../screensavers/cylfrac/lang/it-IT.rc | 2 +- .../screensavers/cylfrac/lang/lt-LT.rc | 2 +- .../screensavers/cylfrac/lang/nl-NL.rc | 2 +- .../screensavers/cylfrac/lang/no-NO.rc | 2 +- .../screensavers/cylfrac/lang/pl-PL.rc | 2 +- .../screensavers/cylfrac/lang/ro-RO.rc | 2 +- .../screensavers/cylfrac/lang/ru-RU.rc | 2 +- .../screensavers/cylfrac/lang/sk-SK.rc | 2 +- .../screensavers/cylfrac/lang/tr-TR.rc | 2 +- .../screensavers/cylfrac/lang/uk-UA.rc | 2 +- .../screensavers/cylfrac/lang/zh-CN.rc | 2 +- .../screensavers/cylfrac/lang/zh-HK.rc | 2 +- .../screensavers/cylfrac/lang/zh-TW.rc | 2 +- .../screensavers/matrix/lang/bg-BG.rc | 4 ++-- .../screensavers/matrix/lang/de-DE.rc | 4 ++-- .../screensavers/matrix/lang/en-US.rc | 4 ++-- .../screensavers/matrix/lang/es-ES.rc | 4 ++-- .../screensavers/matrix/lang/fr-FR.rc | 4 ++-- .../screensavers/matrix/lang/lt-LT.rc | 4 ++-- .../screensavers/matrix/lang/nl-NL.rc | 4 ++-- .../screensavers/matrix/lang/no-NO.rc | 4 ++-- .../screensavers/matrix/lang/pl-PL.rc | 4 ++-- .../screensavers/matrix/lang/ro-RO.rc | 4 ++-- .../screensavers/matrix/lang/ru-RU.rc | 4 ++-- .../screensavers/matrix/lang/sk-SK.rc | 4 ++-- .../screensavers/matrix/lang/th-TH.rc | 4 ++-- .../screensavers/matrix/lang/tr-TR.rc | 4 ++-- .../screensavers/matrix/lang/uk-UA.rc | 4 ++-- .../screensavers/matrix/lang/zh-CN.rc | 4 ++-- .../screensavers/matrix/lang/zh-HK.rc | 4 ++-- .../screensavers/matrix/lang/zh-TW.rc | 4 ++-- .../applications/screensavers/matrix/rsrc.rc | 6 ++--- .../screensavers/mazescr/lang/de-DE.rc | 6 ++--- .../screensavers/mazescr/lang/en-US.rc | 6 ++--- .../screensavers/mazescr/lang/es-ES.rc | 6 ++--- .../screensavers/mazescr/lang/pl-PL.rc | 6 ++--- .../screensavers/mazescr/lang/ro-RO.rc | 6 ++--- .../screensavers/mazescr/lang/ru-RU.rc | 6 ++--- .../screensavers/mazescr/lang/tr-TR.rc | 6 ++--- .../screensavers/mazescr/lang/zh-CN.rc | 6 ++--- .../screensavers/mazescr/lang/zh-HK.rc | 6 ++--- .../screensavers/mazescr/lang/zh-TW.rc | 6 ++--- .../applications/screensavers/mazescr/maze.rc | 8 +++---- .../screensavers/ssstars/lang/de-DE.rc | 2 +- .../screensavers/ssstars/lang/en-US.rc | 2 +- .../screensavers/ssstars/lang/es-ES.rc | 2 +- .../screensavers/ssstars/lang/it-IT.rc | 2 +- .../screensavers/ssstars/lang/pl-PL.rc | 2 +- .../screensavers/ssstars/lang/ro-RO.rc | 2 +- .../screensavers/ssstars/lang/ru-RU.rc | 2 +- .../screensavers/ssstars/lang/tr-TR.rc | 2 +- .../screensavers/ssstars/lang/zh-CN.rc | 2 +- .../screensavers/ssstars/lang/zh-HK.rc | 2 +- .../screensavers/ssstars/lang/zh-TW.rc | 2 +- .../screensavers/ssstars/resource.rc | 7 +++--- .../screensavers/starfield/lang/bg-BG.rc | 2 +- .../screensavers/starfield/lang/de-DE.rc | 2 +- .../screensavers/starfield/lang/en-US.rc | 2 +- .../screensavers/starfield/lang/es-ES.rc | 2 +- .../screensavers/starfield/lang/fr-FR.rc | 2 +- .../screensavers/starfield/lang/it-IT.rc | 2 +- .../screensavers/starfield/lang/lt-LT.rc | 2 +- .../screensavers/starfield/lang/nl-NL.rc | 2 +- .../screensavers/starfield/lang/no-NO.rc | 2 +- .../screensavers/starfield/lang/pl-PL.rc | 2 +- .../screensavers/starfield/lang/ro-RO.rc | 2 +- .../screensavers/starfield/lang/sk-SK.rc | 2 +- .../screensavers/starfield/lang/tr-TR.rc | 2 +- .../screensavers/starfield/lang/uk-UA.rc | 2 +- .../screensavers/starfield/lang/zh-CN.rc | 2 +- .../screensavers/starfield/lang/zh-HK.rc | 2 +- .../screensavers/starfield/lang/zh-TW.rc | 2 +- .../screensavers/starfield/starfield.rc | 8 +++---- .../rosapps/applications/sysutils/ctm/ctm.rc | 8 +++---- .../applications/sysutils/ctm/lang/de-DE.rc | 4 ++-- .../applications/sysutils/ctm/lang/el-GR.rc | 4 ++-- .../applications/sysutils/ctm/lang/en-US.rc | 4 ++-- .../applications/sysutils/ctm/lang/es-ES.rc | 4 ++-- .../applications/sysutils/ctm/lang/fr-FR.rc | 4 ++-- .../applications/sysutils/ctm/lang/no-NO.rc | 4 ++-- .../applications/sysutils/ctm/lang/pl-PL.rc | 4 ++-- .../applications/sysutils/ctm/lang/ro-RO.rc | 6 ++--- .../applications/sysutils/ctm/lang/ru-RU.rc | 2 +- .../applications/sysutils/ctm/lang/uk-UA.rc | 4 ++-- .../applications/sysutils/ctm/lang/zh-TW.rc | 2 +- .../sysutils/systeminfo/lang/de-DE.rc | 2 +- .../sysutils/systeminfo/lang/en-US.rc | 2 +- .../sysutils/systeminfo/lang/es-ES.rc | 2 +- .../sysutils/systeminfo/lang/fr-FR.rc | 2 +- .../sysutils/systeminfo/lang/it-IT.rc | 2 +- .../sysutils/systeminfo/lang/no-NO.rc | 2 +- .../sysutils/systeminfo/lang/pl-PL.rc | 2 +- .../sysutils/systeminfo/lang/ro-RO.rc | 2 +- .../sysutils/systeminfo/lang/ru-RU.rc | 2 +- .../sysutils/systeminfo/lang/sk-SK.rc | 2 +- .../sysutils/systeminfo/lang/tr-TR.rc | 2 +- .../sysutils/systeminfo/lang/uk-UA.rc | 2 +- .../sysutils/systeminfo/lang/zh-CN.rc | 2 +- .../sysutils/systeminfo/lang/zh-TW.rc | 2 +- modules/rosapps/demos/maze/maze.rc | 2 +- modules/rosapps/templates/dialog/dialog.rc | 14 +++++------ modules/rosapps/templates/mdi/mdi.rc | 24 +++++++++---------- .../templates/old_wordpad/lang/bg-BG.rc | 8 +++---- .../templates/old_wordpad/lang/de-DE.rc | 8 +++---- .../templates/old_wordpad/lang/el-GR.rc | 8 +++---- .../templates/old_wordpad/lang/en-US.rc | 8 +++---- .../templates/old_wordpad/lang/fi-FI.rc | 8 +++---- .../templates/old_wordpad/lang/fr-FR.rc | 8 +++---- .../templates/old_wordpad/lang/it-IT.rc | 8 +++---- .../templates/old_wordpad/lang/nl-NL.rc | 8 +++---- .../templates/old_wordpad/lang/no-NO.rc | 8 +++---- .../templates/old_wordpad/lang/pl-PL.rc | 8 +++---- .../templates/old_wordpad/lang/ru-RU.rc | 8 +++---- .../templates/old_wordpad/lang/th-TH.rc | 8 +++---- .../templates/old_wordpad/lang/uk-UA.rc | 8 +++---- .../templates/old_wordpad/lang/zh-CN.rc | 8 +++---- modules/rosapps/templates/old_wordpad/rsrc.rc | 4 ++-- 251 files changed, 525 insertions(+), 504 deletions(-) diff --git a/base/applications/calc/resource.rc b/base/applications/calc/resource.rc index d756a6687fcce..e09c4d9d2c571 100644 --- a/base/applications/calc/resource.rc +++ b/base/applications/calc/resource.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* Icons */ -IDI_CALC ICON DISCARDABLE "res/calc.ico" +IDI_CALC ICON "res/calc.ico" /* Manifest */ #include diff --git a/base/applications/osk/lang/ar-DZ.rc b/base/applications/osk/lang/ar-DZ.rc index 458a7dd2645b8..cbffe39628503 100644 --- a/base/applications/osk/lang/ar-DZ.rc +++ b/base/applications/osk/lang/ar-DZ.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ARABIC, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/cs-CZ.rc b/base/applications/osk/lang/cs-CZ.rc index b6b45b3eb443c..e45f2601ca09a 100644 --- a/base/applications/osk/lang/cs-CZ.rc +++ b/base/applications/osk/lang/cs-CZ.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/de-DE.rc b/base/applications/osk/lang/de-DE.rc index 357de8326bc15..12b5351c0c6f1 100644 --- a/base/applications/osk/lang/de-DE.rc +++ b/base/applications/osk/lang/de-DE.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Datei" BEGIN diff --git a/base/applications/osk/lang/en-GB.rc b/base/applications/osk/lang/en-GB.rc index 7f9fd716a9ba7..ddbc7208904bc 100644 --- a/base/applications/osk/lang/en-GB.rc +++ b/base/applications/osk/lang/en-GB.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/en-US.rc b/base/applications/osk/lang/en-US.rc index 2a6f9c54331e8..2a03dcf8a68f8 100644 --- a/base/applications/osk/lang/en-US.rc +++ b/base/applications/osk/lang/en-US.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/es-ES.rc b/base/applications/osk/lang/es-ES.rc index 0b44094337dd6..0589661bb6f80 100644 --- a/base/applications/osk/lang/es-ES.rc +++ b/base/applications/osk/lang/es-ES.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Archivo" BEGIN diff --git a/base/applications/osk/lang/et-EE.rc b/base/applications/osk/lang/et-EE.rc index 1d1e85110a2b2..91865d180fc5e 100644 --- a/base/applications/osk/lang/et-EE.rc +++ b/base/applications/osk/lang/et-EE.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/fr-CA.rc b/base/applications/osk/lang/fr-CA.rc index 74801b5c33ef3..a735ddc1be2fc 100644 --- a/base/applications/osk/lang/fr-CA.rc +++ b/base/applications/osk/lang/fr-CA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH_CANADIAN -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/fr-FR.rc b/base/applications/osk/lang/fr-FR.rc index fecb5285be332..0119b1b035daa 100644 --- a/base/applications/osk/lang/fr-FR.rc +++ b/base/applications/osk/lang/fr-FR.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/he-IL.rc b/base/applications/osk/lang/he-IL.rc index f831262f50379..171541faf3a56 100644 --- a/base/applications/osk/lang/he-IL.rc +++ b/base/applications/osk/lang/he-IL.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/id-ID.rc b/base/applications/osk/lang/id-ID.rc index ae174e1705e57..21ac9aebffdf6 100644 --- a/base/applications/osk/lang/id-ID.rc +++ b/base/applications/osk/lang/id-ID.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Be&rkas" BEGIN diff --git a/base/applications/osk/lang/it-IT.rc b/base/applications/osk/lang/it-IT.rc index 1f449cab0f47a..199d71409cd2c 100644 --- a/base/applications/osk/lang/it-IT.rc +++ b/base/applications/osk/lang/it-IT.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "File" BEGIN diff --git a/base/applications/osk/lang/pl-PL.rc b/base/applications/osk/lang/pl-PL.rc index fb584a41db15a..0eb01f95bd085 100644 --- a/base/applications/osk/lang/pl-PL.rc +++ b/base/applications/osk/lang/pl-PL.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_POLISH, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Pl&ik" BEGIN diff --git a/base/applications/osk/lang/pt-BR.rc b/base/applications/osk/lang/pt-BR.rc index f49446e288f86..c1e6b4ea21107 100644 --- a/base/applications/osk/lang/pt-BR.rc +++ b/base/applications/osk/lang/pt-BR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Arquivo" BEGIN diff --git a/base/applications/osk/lang/pt-PT.rc b/base/applications/osk/lang/pt-PT.rc index 71b5c1511dec9..661b0e8d20ba7 100644 --- a/base/applications/osk/lang/pt-PT.rc +++ b/base/applications/osk/lang/pt-PT.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Ficheiro" BEGIN diff --git a/base/applications/osk/lang/ro-RO.rc b/base/applications/osk/lang/ro-RO.rc index afbe9a5fbe915..1ae967695e22f 100644 --- a/base/applications/osk/lang/ro-RO.rc +++ b/base/applications/osk/lang/ro-RO.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "&Fişier" BEGIN diff --git a/base/applications/osk/lang/ru-RU.rc b/base/applications/osk/lang/ru-RU.rc index 7befd7e17de12..cde6662f10b6b 100644 --- a/base/applications/osk/lang/ru-RU.rc +++ b/base/applications/osk/lang/ru-RU.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_NEUTRAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Файл" BEGIN diff --git a/base/applications/osk/lang/tr-TR.rc b/base/applications/osk/lang/tr-TR.rc index ca27a1913b6ea..8769db40a7bf7 100644 --- a/base/applications/osk/lang/tr-TR.rc +++ b/base/applications/osk/lang/tr-TR.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "Dosya" BEGIN diff --git a/base/applications/osk/lang/zh-CN.rc b/base/applications/osk/lang/zh-CN.rc index 079b76f8f7a8a..58bad345027f9 100644 --- a/base/applications/osk/lang/zh-CN.rc +++ b/base/applications/osk/lang/zh-CN.rc @@ -12,7 +12,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "文件" BEGIN diff --git a/base/applications/osk/lang/zh-HK.rc b/base/applications/osk/lang/zh-HK.rc index 21804221f950d..b02047533e586 100644 --- a/base/applications/osk/lang/zh-HK.rc +++ b/base/applications/osk/lang/zh-HK.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "檔案" BEGIN diff --git a/base/applications/osk/lang/zh-TW.rc b/base/applications/osk/lang/zh-TW.rc index 4ebb07cba09d1..ba0c24ed68604 100644 --- a/base/applications/osk/lang/zh-TW.rc +++ b/base/applications/osk/lang/zh-TW.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDR_OSK_MENU MENU DISCARDABLE +IDR_OSK_MENU MENU BEGIN POPUP "檔案" BEGIN diff --git a/base/applications/screensavers/3dtext/rsrc.rc b/base/applications/screensavers/3dtext/rsrc.rc index f0550ade8fe9d..1417b27763a47 100644 --- a/base/applications/screensavers/3dtext/rsrc.rc +++ b/base/applications/screensavers/3dtext/rsrc.rc @@ -6,7 +6,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_3dtext.ico" +IDI_ICON ICON "res/icon_3dtext.ico" #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "OpenGL 3DText ScreenSaver" diff --git a/base/applications/screensavers/logon/logon.rc b/base/applications/screensavers/logon/logon.rc index 710bb93ec0a7b..061340fd299f7 100644 --- a/base/applications/screensavers/logon/logon.rc +++ b/base/applications/screensavers/logon/logon.rc @@ -6,7 +6,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_logon.ico" +IDI_ICON ICON "res/icon_logon.ico" #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Logon ScreenSaver" diff --git a/dll/win32/browseui/lang/bg-BG.rc b/dll/win32/browseui/lang/bg-BG.rc index 37dbe92508379..86e95224f7b92 100644 --- a/dll/win32/browseui/lang/bg-BG.rc +++ b/dll/win32/browseui/lang/bg-BG.rc @@ -93,7 +93,7 @@ BEGIN MENUITEM "&Close Toolbar", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/de-DE.rc b/dll/win32/browseui/lang/de-DE.rc index 825dc9b796299..754346eac2a1c 100644 --- a/dll/win32/browseui/lang/de-DE.rc +++ b/dll/win32/browseui/lang/de-DE.rc @@ -100,7 +100,7 @@ BEGIN MENUITEM "Symbolleiste schließen", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/en-US.rc b/dll/win32/browseui/lang/en-US.rc index 64098afe57619..b67218b1788fd 100644 --- a/dll/win32/browseui/lang/en-US.rc +++ b/dll/win32/browseui/lang/en-US.rc @@ -111,7 +111,7 @@ BEGIN MENUITEM "&Close Toolbar", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/es-ES.rc b/dll/win32/browseui/lang/es-ES.rc index 567ff90a0bc26..8c05bb8206201 100644 --- a/dll/win32/browseui/lang/es-ES.rc +++ b/dll/win32/browseui/lang/es-ES.rc @@ -102,7 +102,7 @@ BEGIN MENUITEM "&Cerrar barra de herramientas", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/et-EE.rc b/dll/win32/browseui/lang/et-EE.rc index 3cd0d001535e2..5ca6ab485de0c 100644 --- a/dll/win32/browseui/lang/et-EE.rc +++ b/dll/win32/browseui/lang/et-EE.rc @@ -100,7 +100,7 @@ BEGIN MENUITEM "&Sule tööriistariba", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/eu-ES.rc b/dll/win32/browseui/lang/eu-ES.rc index 19aa87830de65..503a1abe90741 100644 --- a/dll/win32/browseui/lang/eu-ES.rc +++ b/dll/win32/browseui/lang/eu-ES.rc @@ -100,7 +100,7 @@ BEGIN MENUITEM "&Cerrar barra de herramientas", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/fr-FR.rc b/dll/win32/browseui/lang/fr-FR.rc index 63dd8eb93b721..4a40987c50ddc 100644 --- a/dll/win32/browseui/lang/fr-FR.rc +++ b/dll/win32/browseui/lang/fr-FR.rc @@ -111,7 +111,7 @@ BEGIN MENUITEM "&Fermer la barre d'outils", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/he-IL.rc b/dll/win32/browseui/lang/he-IL.rc index 30c0a9c8f5cab..062f166c00762 100644 --- a/dll/win32/browseui/lang/he-IL.rc +++ b/dll/win32/browseui/lang/he-IL.rc @@ -95,7 +95,7 @@ BEGIN MENUITEM "&Close Toolbar", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/hi-IN.rc b/dll/win32/browseui/lang/hi-IN.rc index a26363efd33e4..d93d138dd71ce 100644 --- a/dll/win32/browseui/lang/hi-IN.rc +++ b/dll/win32/browseui/lang/hi-IN.rc @@ -93,7 +93,7 @@ BEGIN MENUITEM "टूलबार &बंद करें", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/hu-HU.rc b/dll/win32/browseui/lang/hu-HU.rc index 463c43710a6b0..8448a3c5b3cd0 100644 --- a/dll/win32/browseui/lang/hu-HU.rc +++ b/dll/win32/browseui/lang/hu-HU.rc @@ -111,7 +111,7 @@ BEGIN MENUITEM "Az eszköztár &bezárása", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/id-ID.rc b/dll/win32/browseui/lang/id-ID.rc index c1d397fd70f2c..9a9140a8d50f6 100644 --- a/dll/win32/browseui/lang/id-ID.rc +++ b/dll/win32/browseui/lang/id-ID.rc @@ -112,7 +112,7 @@ BEGIN MENUITEM "&Tutup Bilah Alat", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/it-IT.rc b/dll/win32/browseui/lang/it-IT.rc index dd9c906df1556..02def76b811ec 100644 --- a/dll/win32/browseui/lang/it-IT.rc +++ b/dll/win32/browseui/lang/it-IT.rc @@ -93,7 +93,7 @@ BEGIN MENUITEM "&Chiudi barra degli strumenti", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/ja-JP.rc b/dll/win32/browseui/lang/ja-JP.rc index ea4f0583ea719..232cf3d287303 100644 --- a/dll/win32/browseui/lang/ja-JP.rc +++ b/dll/win32/browseui/lang/ja-JP.rc @@ -111,7 +111,7 @@ BEGIN MENUITEM "ツールバーを閉じる(&C)", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/pl-PL.rc b/dll/win32/browseui/lang/pl-PL.rc index f7526430f5401..e0775bc16e329 100644 --- a/dll/win32/browseui/lang/pl-PL.rc +++ b/dll/win32/browseui/lang/pl-PL.rc @@ -102,7 +102,7 @@ BEGIN MENUITEM "&Zamknij pasek narzędzi", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/pt-BR.rc b/dll/win32/browseui/lang/pt-BR.rc index 1a49d76377762..492b13149a5be 100644 --- a/dll/win32/browseui/lang/pt-BR.rc +++ b/dll/win32/browseui/lang/pt-BR.rc @@ -95,7 +95,7 @@ BEGIN MENUITEM "&Close Toolbar", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/pt-PT.rc b/dll/win32/browseui/lang/pt-PT.rc index 2e1cd2c708ae6..ff548d3061b11 100644 --- a/dll/win32/browseui/lang/pt-PT.rc +++ b/dll/win32/browseui/lang/pt-PT.rc @@ -101,7 +101,7 @@ BEGIN MENUITEM "&Fechar barra de ferramentas", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/ro-RO.rc b/dll/win32/browseui/lang/ro-RO.rc index 3ce2a8fa36400..6066a75a76db5 100644 --- a/dll/win32/browseui/lang/ro-RO.rc +++ b/dll/win32/browseui/lang/ro-RO.rc @@ -101,7 +101,7 @@ BEGIN MENUITEM "As&cunde bara de instrumente", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/ru-RU.rc b/dll/win32/browseui/lang/ru-RU.rc index c4eeffd39e968..3adf8d0343a97 100644 --- a/dll/win32/browseui/lang/ru-RU.rc +++ b/dll/win32/browseui/lang/ru-RU.rc @@ -102,7 +102,7 @@ BEGIN MENUITEM "&Закрыть панель инструментов", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/sq-AL.rc b/dll/win32/browseui/lang/sq-AL.rc index 0298e25408956..de25625bc3800 100644 --- a/dll/win32/browseui/lang/sq-AL.rc +++ b/dll/win32/browseui/lang/sq-AL.rc @@ -112,7 +112,7 @@ BEGIN MENUITEM "&Close Toolbar", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/tr-TR.rc b/dll/win32/browseui/lang/tr-TR.rc index 71039340ddd91..8fd35da1e5716 100644 --- a/dll/win32/browseui/lang/tr-TR.rc +++ b/dll/win32/browseui/lang/tr-TR.rc @@ -95,7 +95,7 @@ BEGIN MENUITEM "&Araç Çubuğunu Kapat", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/uk-UA.rc b/dll/win32/browseui/lang/uk-UA.rc index a5dc172200cd8..8da603d91f53a 100644 --- a/dll/win32/browseui/lang/uk-UA.rc +++ b/dll/win32/browseui/lang/uk-UA.rc @@ -101,7 +101,7 @@ BEGIN MENUITEM "&Закрити панель", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/zh-CN.rc b/dll/win32/browseui/lang/zh-CN.rc index 86c1ca80181ec..51434d0c6af5b 100644 --- a/dll/win32/browseui/lang/zh-CN.rc +++ b/dll/win32/browseui/lang/zh-CN.rc @@ -115,7 +115,7 @@ BEGIN MENUITEM "关闭工具栏(&C)", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/browseui/lang/zh-TW.rc b/dll/win32/browseui/lang/zh-TW.rc index 15665202889c3..1c234785f1c3e 100644 --- a/dll/win32/browseui/lang/zh-TW.rc +++ b/dll/win32/browseui/lang/zh-TW.rc @@ -117,7 +117,7 @@ BEGIN MENUITEM "選擇工具列(&C)", IDM_BAND_CLOSE END -IDM_POPUPMENU MENUEX DISCARDABLE +IDM_POPUPMENU MENUEX BEGIN POPUP "" BEGIN diff --git a/dll/win32/devmgr/devmgr.rc b/dll/win32/devmgr/devmgr.rc index ac4f33ea7ec17..c338d67878ee2 100644 --- a/dll/win32/devmgr/devmgr.rc +++ b/dll/win32/devmgr/devmgr.rc @@ -18,7 +18,7 @@ IDI_MAIN_ICON ICON "resources/computer.ico" IDB_ROOT_IMAGE BITMAP "resources/root.bmp" /* main toolbar icons */ -IDB_TOOLBAR BITMAP DISCARDABLE "resources/toolbar.bmp" +IDB_TOOLBAR BITMAP "resources/toolbar.bmp" /* UTF-8 */ diff --git a/dll/win32/devmgr/lang/bg-BG.rc b/dll/win32/devmgr/lang/bg-BG.rc index 7fc1b01d60b78..d421c69316c0d 100644 --- a/dll/win32/devmgr/lang/bg-BG.rc +++ b/dll/win32/devmgr/lang/bg-BG.rc @@ -286,14 +286,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -304,7 +305,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -315,7 +316,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/cs-CZ.rc b/dll/win32/devmgr/lang/cs-CZ.rc index eac630946e47e..2f0afd87efa50 100644 --- a/dll/win32/devmgr/lang/cs-CZ.rc +++ b/dll/win32/devmgr/lang/cs-CZ.rc @@ -290,14 +290,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Správce zařízení ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Zakázáním tohoto zařízení dojde k ukončení jeho činnosti.\nOpravdu si jej přejete zakázat?" IDS_CONFIRM_UNINSTALL "Varování: Chystáte se odebrat toto zařízení ze systému.\nPřejete si pokračovat?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Aktualizovat software ovladače..." IDS_MENU_ENABLE "Povolit" @@ -308,7 +309,7 @@ BEGIN IDS_MENU_PROPERTIES "Vlastnosti" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Vlastnosti" IDS_TOOLTIP_SCAN "Vyhledat změny hardwaru" @@ -319,7 +320,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Otevře seznam vlastností pro vybrané zařízení." diff --git a/dll/win32/devmgr/lang/de-DE.rc b/dll/win32/devmgr/lang/de-DE.rc index 1e341dcc2a09e..4d9ab57721543 100644 --- a/dll/win32/devmgr/lang/de-DE.rc +++ b/dll/win32/devmgr/lang/de-DE.rc @@ -286,14 +286,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Geräte-Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Dieses Gerät zu deaktivieren wird dessen Funktion einstellen.\nWollen Sie es wirklich deaktivieren?" IDS_CONFIRM_UNINSTALL "Warnung: Sie sind dabei, dieses Gerät deinstallieren\nMöchten Sie den Vorgang fortsetzen?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Treibersoftware aktualisieren ..." IDS_MENU_ENABLE "Aktivieren" @@ -304,7 +305,7 @@ BEGIN IDS_MENU_PROPERTIES "Eigenschaften" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Eigenschaften" IDS_TOOLTIP_SCAN "Nach geänderter Hardware suchen" @@ -315,7 +316,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Öffnet Eigenschaftsdialog für die aktuelle Auswahl." diff --git a/dll/win32/devmgr/lang/el-GR.rc b/dll/win32/devmgr/lang/el-GR.rc index c6b70a7b3aec7..8e1e00c476c0b 100644 --- a/dll/win32/devmgr/lang/el-GR.rc +++ b/dll/win32/devmgr/lang/el-GR.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/en-US.rc b/dll/win32/devmgr/lang/en-US.rc index c2da4b467ce7a..530d735a414c9 100644 --- a/dll/win32/devmgr/lang/en-US.rc +++ b/dll/win32/devmgr/lang/en-US.rc @@ -285,14 +285,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -303,7 +304,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -314,7 +315,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/es-ES.rc b/dll/win32/devmgr/lang/es-ES.rc index 41b898b2dbb35..3a9cf882a2083 100644 --- a/dll/win32/devmgr/lang/es-ES.rc +++ b/dll/win32/devmgr/lang/es-ES.rc @@ -294,14 +294,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Administrador de dispositivos de ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Deshabilitar este dispositivo hará que deje de funcionar.\n¿Seguro que quiere deshabilitarlo?" IDS_CONFIRM_UNINSTALL "Advertencia: Está a punto de desinstalar este dispositivo de su equipo.\n¿Seguro que quiere continuar?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Actualizar controladores..." IDS_MENU_ENABLE "Habilitar" @@ -312,7 +313,7 @@ BEGIN IDS_MENU_PROPERTIES "Propiedades" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Propiedades" IDS_TOOLTIP_SCAN "Buscar cambios de hardware" @@ -323,7 +324,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Abre el diálogo de propiedades para le selección actual." diff --git a/dll/win32/devmgr/lang/et-EE.rc b/dll/win32/devmgr/lang/et-EE.rc index 85cb255a969b6..3759f9f200134 100644 --- a/dll/win32/devmgr/lang/et-EE.rc +++ b/dll/win32/devmgr/lang/et-EE.rc @@ -292,14 +292,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Seadmehaldur" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Selle seadme keelamine põhjustab selle töötamise lakkamise.\nKas soovite kindlasti seda keelata?" IDS_CONFIRM_UNINSTALL "Hoiatus: Hakkate seda seadet süsteemist desinstallima.\nKas soovite jätkata?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Draiveritarkvara värskendamine..." IDS_MENU_ENABLE "Luba" @@ -310,7 +311,7 @@ BEGIN IDS_MENU_PROPERTIES "Atribuudid" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Atribuudid" IDS_TOOLTIP_SCAN "Otsi riistvaramuudatusi" @@ -321,7 +322,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Avab antud valike atribuudilehe." diff --git a/dll/win32/devmgr/lang/fr-FR.rc b/dll/win32/devmgr/lang/fr-FR.rc index ea9155328e223..8a8fe52747729 100644 --- a/dll/win32/devmgr/lang/fr-FR.rc +++ b/dll/win32/devmgr/lang/fr-FR.rc @@ -286,14 +286,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Gestionnaire de périphériques ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Désactiver ce périphérique va le rendre inopérant.\nVoulez-vous réellement le désactiver ?" IDS_CONFIRM_UNINSTALL "Attention : vous êtes sur le point de désinstaller ce périphérique de votre système.\nVoulez-vous continuer ?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Mettre le pilote logiciel à jour..." IDS_MENU_ENABLE "Activer" @@ -304,7 +305,7 @@ BEGIN IDS_MENU_PROPERTIES "Propriétés" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Propriétés" IDS_TOOLTIP_SCAN "Vérifier les changements de matériel" @@ -315,7 +316,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Ouvre les priopriétés pour la sélection actuelle." diff --git a/dll/win32/devmgr/lang/he-IL.rc b/dll/win32/devmgr/lang/he-IL.rc index 2c43c050c9595..eca9c521c438c 100644 --- a/dll/win32/devmgr/lang/he-IL.rc +++ b/dll/win32/devmgr/lang/he-IL.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "מנהל ההתקנים של ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/hu-HU.rc b/dll/win32/devmgr/lang/hu-HU.rc index ca3384c9a56cc..dbe9a9a9fcc51 100644 --- a/dll/win32/devmgr/lang/hu-HU.rc +++ b/dll/win32/devmgr/lang/hu-HU.rc @@ -286,14 +286,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Eszközkezelő" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Az eszköz letiltás után nem fog működni.\nBiztosan letiltja?" IDS_CONFIRM_UNINSTALL "Figyelem: arra készül hogy eltávolítsa ezt az eszközt a rendszerből.\nFolytatni szeretné?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Illesztőprogram frissítése..." IDS_MENU_ENABLE "Engedélyezés" @@ -304,7 +305,7 @@ BEGIN IDS_MENU_PROPERTIES "Tulajdonságok" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Tulajdonságok" IDS_TOOLTIP_SCAN "Hardverváltozások keresése" @@ -315,7 +316,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Az aktuális kijelölés tulajdonságainak megnyitása." diff --git a/dll/win32/devmgr/lang/id-ID.rc b/dll/win32/devmgr/lang/id-ID.rc index 6219a40f91754..bc5cfe81b11ce 100644 --- a/dll/win32/devmgr/lang/id-ID.rc +++ b/dll/win32/devmgr/lang/id-ID.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Manajer Perangkat ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Mematikan perangkat ini akan menyebabkan fungsionalitasnya berhenti.\nYakin ingin mematikannya?" IDS_CONFIRM_UNINSTALL "Peringatan: Anda akan mencopot perangkat ini dari sistem anda.\nIngin melanjutkan?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Perbarui perangkat lunak driver..." IDS_MENU_ENABLE "Hidupkan" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Properti" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properti" IDS_TOOLTIP_SCAN "Pindai perubahan perangkat keras" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Buka dialog properti untuk pilihan saat ini." diff --git a/dll/win32/devmgr/lang/it-IT.rc b/dll/win32/devmgr/lang/it-IT.rc index 0d930cbf99a2e..5d58b412ce054 100644 --- a/dll/win32/devmgr/lang/it-IT.rc +++ b/dll/win32/devmgr/lang/it-IT.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/ja-JP.rc b/dll/win32/devmgr/lang/ja-JP.rc index da0477b927478..afbcbaf5eb6d5 100644 --- a/dll/win32/devmgr/lang/ja-JP.rc +++ b/dll/win32/devmgr/lang/ja-JP.rc @@ -285,14 +285,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS デバイス マネージャ" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "このデバイスを無効にすると、機能が止まります。\nこれを本当に無効にしたいですか?" IDS_CONFIRM_UNINSTALL "警告: あなたのシステムからこのデバイスをアンインストールしようとしています。\n続行したいですか?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "ドライバ ソフトウェアを更新..." IDS_MENU_ENABLE "有効にする" @@ -303,7 +304,7 @@ BEGIN IDS_MENU_PROPERTIES "プロパティ" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "プロパティ" IDS_TOOLTIP_SCAN "ハードウェアの変更をスキャン" @@ -314,7 +315,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " 現在の選択に対するプロパティ ダイアログを開きます。" diff --git a/dll/win32/devmgr/lang/no-NO.rc b/dll/win32/devmgr/lang/no-NO.rc index b1bf6dfac0f07..a0dc9ecfd6183 100644 --- a/dll/win32/devmgr/lang/no-NO.rc +++ b/dll/win32/devmgr/lang/no-NO.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/pl-PL.rc b/dll/win32/devmgr/lang/pl-PL.rc index 551077f3365a3..0f5884eceb50d 100644 --- a/dll/win32/devmgr/lang/pl-PL.rc +++ b/dll/win32/devmgr/lang/pl-PL.rc @@ -296,14 +296,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Menedźer urządzeń ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Wyłączenie tego urządzenia spowoduje, że przestanie ono funkcjonować.\nCzy na pewno chcesz je wyłączyć?" IDS_CONFIRM_UNINSTALL "Ostrzeżenie: Urządzenie to zostanie zaraz odinstalowane z systemu.\nCzy chcesz kontynuować?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Aktualizuj sterownik..." IDS_MENU_ENABLE "Włącz" @@ -314,7 +315,7 @@ BEGIN IDS_MENU_PROPERTIES "Właściwości" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Właściwości" IDS_TOOLTIP_SCAN "Skanuj w poszukiwaniu zmian sprzętu" @@ -325,7 +326,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Otwiera okno dialogowe właściwiości dla bieżącego zaznaczenia." diff --git a/dll/win32/devmgr/lang/pt-BR.rc b/dll/win32/devmgr/lang/pt-BR.rc index 9a827214a45a6..bfee500875984 100644 --- a/dll/win32/devmgr/lang/pt-BR.rc +++ b/dll/win32/devmgr/lang/pt-BR.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/pt-PT.rc b/dll/win32/devmgr/lang/pt-PT.rc index d1267d2022e38..5cf2ca97c2b1e 100644 --- a/dll/win32/devmgr/lang/pt-PT.rc +++ b/dll/win32/devmgr/lang/pt-PT.rc @@ -285,7 +285,7 @@ BEGIN END END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Gestor de dispositivos" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" @@ -293,7 +293,7 @@ BEGIN IDS_CONFIRM_UNINSTALL "Aviso: Está prestes a desinstalar este dispositivo do sistema.\nDeseja continuar?" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_MENU_UPDATE "Actualizar software do controlador..." IDS_MENU_ENABLE "Habilitar" @@ -304,7 +304,7 @@ BEGIN IDS_MENU_PROPERTIES "Propriedades" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Propriedades" IDS_TOOLTIP_SCAN "Verificar alterações de hardware" @@ -315,7 +315,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Abrir a caixa de diálogo ""Propriedades"" para a selecção actual." diff --git a/dll/win32/devmgr/lang/ro-RO.rc b/dll/win32/devmgr/lang/ro-RO.rc index d18eeda4c8831..fc2c4ac2b66ab 100644 --- a/dll/win32/devmgr/lang/ro-RO.rc +++ b/dll/win32/devmgr/lang/ro-RO.rc @@ -294,14 +294,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Manager de dispozitive" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Dezactivarea acestui dispozitiv va cauza oprirea funcționării sale.\nSigur doriți dezactivarea sa?" IDS_CONFIRM_UNINSTALL "Avertisment: Urmează să dezinstalați acest dispozitiv din sistem.\nContinuați?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Actualizare driver…" IDS_MENU_ENABLE "Activare" @@ -312,7 +313,7 @@ BEGIN IDS_MENU_PROPERTIES "Proprietăți" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Proprietăți" IDS_TOOLTIP_SCAN "Scanare configurație hardware" @@ -323,7 +324,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Inspectarea proprietăților pentru selecția curentă." diff --git a/dll/win32/devmgr/lang/ru-RU.rc b/dll/win32/devmgr/lang/ru-RU.rc index 0b9feea8c0a74..451b6951bbab8 100644 --- a/dll/win32/devmgr/lang/ru-RU.rc +++ b/dll/win32/devmgr/lang/ru-RU.rc @@ -287,14 +287,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Диспетчер устройств ReactOS" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Отключение устройства означает, что оно перестанет работать.\nОтключить устройство?" IDS_CONFIRM_UNINSTALL "Предупреждение: Сейчас устройство будет удалено из системы.\nВы хотите продолжить?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "&Обновить драйвер..." IDS_MENU_ENABLE "&Включить" @@ -305,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "&Свойства" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Свойства" IDS_TOOLTIP_SCAN "Обновить конфигурацию оборудования" @@ -316,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Открытие страницы свойств для выделенного объекта." diff --git a/dll/win32/devmgr/lang/sk-SK.rc b/dll/win32/devmgr/lang/sk-SK.rc index 617fc5c0b26f3..c9366979efe25 100644 --- a/dll/win32/devmgr/lang/sk-SK.rc +++ b/dll/win32/devmgr/lang/sk-SK.rc @@ -290,14 +290,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -308,7 +309,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -319,7 +320,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/sq-AL.rc b/dll/win32/devmgr/lang/sq-AL.rc index ef2f22b9dfaef..fa3724737d3b7 100644 --- a/dll/win32/devmgr/lang/sq-AL.rc +++ b/dll/win32/devmgr/lang/sq-AL.rc @@ -289,14 +289,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -307,7 +308,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -318,7 +319,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/tr-TR.rc b/dll/win32/devmgr/lang/tr-TR.rc index 819c4e26d0550..6ba85c66875f2 100644 --- a/dll/win32/devmgr/lang/tr-TR.rc +++ b/dll/win32/devmgr/lang/tr-TR.rc @@ -287,7 +287,7 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Aygıt Yöneticisi" IDS_APP_AUTHORS "Telif Hakkı: 2015 Ged Murphy" @@ -295,7 +295,7 @@ BEGIN IDS_CONFIRM_UNINSTALL "Uyarı: Bu aygıtı sisteminizden kaldırmak üzeresiniz.\nDevam etmek istiyor musunuz?" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_MENU_UPDATE "Sürücü Yazılımını Güncelleştir..." IDS_MENU_ENABLE "Etkinleştir" @@ -306,7 +306,7 @@ BEGIN IDS_MENU_PROPERTIES "Özellikler" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Özellikler" IDS_TOOLTIP_SCAN "Donanım Değişiklikleri İçin Tara" @@ -317,7 +317,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Şimdiki seçilen için özellik penceresini açar." diff --git a/dll/win32/devmgr/lang/uk-UA.rc b/dll/win32/devmgr/lang/uk-UA.rc index dd4c1f3f68fa0..c5ca33b935d72 100644 --- a/dll/win32/devmgr/lang/uk-UA.rc +++ b/dll/win32/devmgr/lang/uk-UA.rc @@ -293,14 +293,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS Device Manager" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "Disabling this device will cause it to stop functioning.\nDo you really want to disable it?" IDS_CONFIRM_UNINSTALL "Warning: You are about to uninstall this device from your system.\nDo you want to continue?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "Update driver software..." IDS_MENU_ENABLE "Enable" @@ -311,7 +312,7 @@ BEGIN IDS_MENU_PROPERTIES "Properties" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "Properties" IDS_TOOLTIP_SCAN "Scan for hardware changes" @@ -322,7 +323,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " Open property dialog for the current selection." diff --git a/dll/win32/devmgr/lang/zh-CN.rc b/dll/win32/devmgr/lang/zh-CN.rc index 08a0162814440..f1474bd936be1 100644 --- a/dll/win32/devmgr/lang/zh-CN.rc +++ b/dll/win32/devmgr/lang/zh-CN.rc @@ -294,14 +294,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS 设备管理器" IDS_APP_AUTHORS "Copyright 2015 Ged Murphy" IDS_CONFIRM_DISABLE "禁用此设备会使其停止运行。\n你真的想要禁用它吗?" IDS_CONFIRM_UNINSTALL "警告: 您将要从系统中卸载此设备。\n你想要继续吗?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "更新驱动程序软件..." IDS_MENU_ENABLE "启用" @@ -312,7 +313,7 @@ BEGIN IDS_MENU_PROPERTIES "属性" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "属性" IDS_TOOLTIP_SCAN "扫描检测硬件改动" @@ -323,7 +324,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " 当前所选内容的公开的属性对话框。" diff --git a/dll/win32/devmgr/lang/zh-HK.rc b/dll/win32/devmgr/lang/zh-HK.rc index 833da6c7e388e..c8aae24c56901 100644 --- a/dll/win32/devmgr/lang/zh-HK.rc +++ b/dll/win32/devmgr/lang/zh-HK.rc @@ -293,14 +293,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS 裝置管理員" IDS_APP_AUTHORS "2015 Ged Murphy 版權所有" IDS_CONFIRM_DISABLE "停用這個裝置會使其停止運作。\n你真的想要停用它嗎?" IDS_CONFIRM_UNINSTALL "警告:您將要從系統中解除安裝這個裝置。\n你想要繼續嗎?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "更新驅動程式軟件..." IDS_MENU_ENABLE "啟用" @@ -311,7 +312,7 @@ BEGIN IDS_MENU_PROPERTIES "內容" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "內容" IDS_TOOLTIP_SCAN "掃描硬件變更" @@ -322,7 +323,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " 開啟目前選擇的內容對話方塊。" diff --git a/dll/win32/devmgr/lang/zh-TW.rc b/dll/win32/devmgr/lang/zh-TW.rc index f0565d556e824..f8e0eeea5dbcf 100644 --- a/dll/win32/devmgr/lang/zh-TW.rc +++ b/dll/win32/devmgr/lang/zh-TW.rc @@ -293,14 +293,15 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "ReactOS 裝置管理員" IDS_APP_AUTHORS "2015 Ged Murphy 版權所有" IDS_CONFIRM_DISABLE "停用這個裝置會使其停止運作。\n你真的想要停用它嗎?" IDS_CONFIRM_UNINSTALL "警告:您將要從系統中解除安裝這個裝置。\n你想要繼續嗎?" END -STRINGTABLE DISCARDABLE + +STRINGTABLE BEGIN IDS_MENU_UPDATE "更新驅動程式軟體..." IDS_MENU_ENABLE "啟用" @@ -311,7 +312,7 @@ BEGIN IDS_MENU_PROPERTIES "內容" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_PROPERTIES "內容" IDS_TOOLTIP_SCAN "掃描硬體變更" @@ -322,7 +323,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_PROPERTIES " 開啟目前選擇的內容對話方塊。" diff --git a/modules/rosapps/applications/notevil/notevil.rc b/modules/rosapps/applications/notevil/notevil.rc index cb36ff75b18d8..24840bd832469 100644 --- a/modules/rosapps/applications/notevil/notevil.rc +++ b/modules/rosapps/applications/notevil/notevil.rc @@ -24,7 +24,7 @@ /* UTF-8 */ #pragma code_page(65001) -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 1, "Aleksandar Andrejevic" 2, "Aleksey Bragin" @@ -43,7 +43,7 @@ BEGIN 15, "Brandon Turner" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 16, "Brian Palmer" 17, "Cameron M. Gutman" @@ -64,7 +64,7 @@ BEGIN 32, "Edijs Kolesnikovics" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 33, "Emanuele Aliberti" 34, "Eric Kohl" @@ -83,7 +83,7 @@ BEGIN 47, "Guido de Jong" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 48, "Gunnar Andre' Dalsnes" 49, "Hans Kremer" @@ -102,7 +102,7 @@ BEGIN 62, "Jeffrey Morlan" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 63, "Jens Collin" 64, "Jérôme Gardou" @@ -123,7 +123,7 @@ BEGIN 79, "Marc Piulachs" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 80, "Mark Tempel" 81, "Mark Weaver" @@ -142,7 +142,7 @@ BEGIN 94, "Neeraj Yadav" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 95, "Olaf Siejka" 96, "Oleg Dubinskij" @@ -162,7 +162,7 @@ BEGIN 110, "Samuel Serapión" END -STRINGTABLE MOVEABLE +STRINGTABLE BEGIN 111, "Saveliy Tretiakov" 112, "Sebastian Gasiorek" diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/bg-BG.rc b/modules/rosapps/applications/screensavers/blankscr/lang/bg-BG.rc index 3024d41f1bc40..be118c30ed801 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/bg-BG.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/bg-BG.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Blank" IDS_TEXT "Няма възможност за настройки." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/de-DE.rc b/modules/rosapps/applications/screensavers/blankscr/lang/de-DE.rc index 7c0d2452389d5..da90fbe1f7b77 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Schwarzer Bildschirm" IDS_TEXT "Keine Einstellungen notwendig." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/en-US.rc b/modules/rosapps/applications/screensavers/blankscr/lang/en-US.rc index 078bac53e8cbb..4cb31045a3b69 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Blank screen" IDS_TEXT "No options need to be set." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/es-ES.rc b/modules/rosapps/applications/screensavers/blankscr/lang/es-ES.rc index ffcd986707a73..c28d25fb0cdd4 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/es-ES.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "En blanco" IDS_TEXT "Ninguna opción necesita ser configurada." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/blankscr/lang/fr-FR.rc index 71b013f1a1b09..9af20ffaf1a55 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/fr-FR.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Vide" IDS_TEXT "Il n'y a aucune option à définir." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/it-IT.rc b/modules/rosapps/applications/screensavers/blankscr/lang/it-IT.rc index 0a2ff10a2140d..468b4775d8159 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/it-IT.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/it-IT.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Schermo nero" IDS_TEXT "Non ci sono opzioni da impostare." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/lt-LT.rc b/modules/rosapps/applications/screensavers/blankscr/lang/lt-LT.rc index 713e3c80b0c83..ca91793ee39fa 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/lt-LT.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/lt-LT.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Tuščias" IDS_TEXT "Nėra keičiamų parametrų." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/nl-NL.rc b/modules/rosapps/applications/screensavers/blankscr/lang/nl-NL.rc index 6008bd7c4ebc3..dd765f8a12514 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/nl-NL.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/nl-NL.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Blank" IDS_TEXT "Geen dingen om in te stellen." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/no-NO.rc b/modules/rosapps/applications/screensavers/blankscr/lang/no-NO.rc index bd4eaa1a56ea7..99103e3375bd8 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/no-NO.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Tom skjerm" IDS_TEXT "Ingen valg trenger å settes." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/blankscr/lang/pl-PL.rc index 88ff617fb50f9..9f96672ef1fe6 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/pl-PL.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Puste" IDS_TEXT "Brak opcji do ustawiania." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc index c0e34e20dbbdc..3623caa0b2008 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Ecran gol (animație de inactivitate)" IDS_TEXT "Nu este necesară stabilirea de opțiuni." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/blankscr/lang/ru-RU.rc index 7b7dd145ecd40..0ccaa35eeee47 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/ru-RU.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Пустой экран""" IDS_TEXT "Эта заставка не имеет настраиваемых параметров." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/blankscr/lang/sk-SK.rc index ec1ae29a99cc2..abdbc5c42012b 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/sk-SK.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Blank" IDS_TEXT "Nie sú potrebné žiadne nastavenia." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/blankscr/lang/tr-TR.rc index 52754a1681bd1..0e5904868c2f9 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Boş ekran" IDS_TEXT "Hiçbir seçeneğin ayarlanması gerekmez." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/blankscr/lang/uk-UA.rc index bab25b297f541..69d0e92012dac 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/uk-UA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Порожньо" IDS_TEXT "Ця заставка не має налаштовуваних параметрів." diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/blankscr/lang/zh-CN.rc index 0fdae152b3711..79ae6f45fc21e 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/zh-CN.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "空白屏幕" IDS_TEXT "没有需要设置的选项。" diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/blankscr/lang/zh-HK.rc index eb3023298fb7d..a99425b47054e 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/zh-HK.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "空白螢幕" IDS_TEXT "沒有可設定的選項。" diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/blankscr/lang/zh-TW.rc index 3458789197c5f..2de75773dda18 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "空白螢幕" IDS_TEXT "沒有可設定的選項。" diff --git a/modules/rosapps/applications/screensavers/blankscr/scrnsave.rc b/modules/rosapps/applications/screensavers/blankscr/scrnsave.rc index cb34fae774d37..e843c42366ed3 100644 --- a/modules/rosapps/applications/screensavers/blankscr/scrnsave.rc +++ b/modules/rosapps/applications/screensavers/blankscr/scrnsave.rc @@ -4,12 +4,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_blankscr.ico" +IDI_ICON ICON "res/icon_blankscr.ico" #define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Default ScreenSaver\0" -#define REACTOS_STR_INTERNAL_NAME "scrnsave\0" -#define REACTOS_STR_ORIGINAL_FILENAME "scrnsave.scr\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Default ScreenSaver" +#define REACTOS_STR_INTERNAL_NAME "scrnsave" +#define REACTOS_STR_ORIGINAL_FILENAME "scrnsave.scr" #include #include diff --git a/modules/rosapps/applications/screensavers/butterflies/butterflies.rc b/modules/rosapps/applications/screensavers/butterflies/butterflies.rc index 36962cc10122c..943ea78bab578 100644 --- a/modules/rosapps/applications/screensavers/butterflies/butterflies.rc +++ b/modules/rosapps/applications/screensavers/butterflies/butterflies.rc @@ -4,9 +4,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Butterflies ScreenSaver\0" -#define REACTOS_STR_INTERNAL_NAME "butterflies\0" -#define REACTOS_STR_ORIGINAL_FILENAME "butterflies.scr\0" +#define REACTOS_STR_FILE_DESCRIPTION "Butterflies ScreenSaver" +#define REACTOS_STR_INTERNAL_NAME "butterflies" +#define REACTOS_STR_ORIGINAL_FILENAME "butterflies.scr" #include IDI_ICON ICON "res/icon_butterflies.ico" diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/bg-BG.rc b/modules/rosapps/applications/screensavers/butterflies/lang/bg-BG.rc index 57b3701914faf..e56781d023fa9 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/bg-BG.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/bg-BG.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Екранен предпазител с пеперуди" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "За",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "За" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Butterflies ScreenSaver" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/de-DE.rc b/modules/rosapps/applications/screensavers/butterflies/lang/de-DE.rc index 2a9cba82a3ec5..0207848b0bf87 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Schmetterlinge Einstellungen" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "Über",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Über" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Butterflies Bildschirmschoner" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/en-US.rc b/modules/rosapps/applications/screensavers/butterflies/lang/en-US.rc index 011607810e632..1724c4571ad69 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Butterflies ScreenSaver Settings" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "About",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Butterflies ScreenSaver" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/es-ES.rc b/modules/rosapps/applications/screensavers/butterflies/lang/es-ES.rc index 03f19130b676c..05fde1103b13a 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/es-ES.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuración del Salvapantallas de Mariposas" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "Acerca de",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Acerca de" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Salvapantallas de Mariposas revoloteando" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/butterflies/lang/fr-FR.rc index 13f0998fee4eb..6332326bc5456 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/fr-FR.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuration de l'écran de veille de papillons" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "À propos de",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "À propos de" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Écran de veille de papillons" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/it-IT.rc b/modules/rosapps/applications/screensavers/butterflies/lang/it-IT.rc index 5e9b02ce71d76..d4d7856fe1fe0 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/it-IT.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/it-IT.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Impostazioni salvaschermo" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "Informazioni",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Informazioni" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Salvaschermo Farfalle" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/lt-LT.rc b/modules/rosapps/applications/screensavers/butterflies/lang/lt-LT.rc index 10380a7dffa82..339779ff1d151 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/lt-LT.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/lt-LT.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ekrano užsklandos nustatymai" FONT 8, "MS Shell Dlg" @@ -21,7 +21,7 @@ BEGIN PUSHBUTTON "Apie",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Apie" FONT 8, "MS Shell Dlg" @@ -37,7 +37,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Drugeliai" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/no-NO.rc b/modules/rosapps/applications/screensavers/butterflies/lang/no-NO.rc index a129375254a63..9f5449e5b5955 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/no-NO.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Sommerfugl skjermsparer innstilling" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "Om",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Om" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Sommerfugl skjermsparer" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/butterflies/lang/pl-PL.rc index 0d5eb4213e395..9fca4c612831a 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/pl-PL.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ustawienia wygaszacza Motylki" FONT 8, "MS Shell Dlg" @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "O programie",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "O programie" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Motylki" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc index add5f7b6da779..890fe7edc4203 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Oprțiuni animație de inactivitate Fluturi" FONT 8, "MS Shell Dlg" @@ -22,7 +22,7 @@ BEGIN PUSHBUTTON "&Despre…",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Despre" FONT 8, "MS Shell Dlg" @@ -38,7 +38,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Fluturi (animație de inactivitate)" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/butterflies/lang/ru-RU.rc index af14eab3c8ac0..daf636b8656f5 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/ru-RU.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Параметры заставки ""Бабочки""" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "О программе",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Бабочки""" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/butterflies/lang/sk-SK.rc index 75df4308f3fb6..8677f487a2b68 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/sk-SK.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nastavenie šetriča obrazovky Motýle" FONT 8, "MS Shell Dlg" @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "Čo je ...",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Čo je ..." FONT 8, "MS Shell Dlg" @@ -32,7 +32,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Motýle - šetrič obrazovky" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/butterflies/lang/tr-TR.rc index 44c5d9646aaa8..ad3355bc55391 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Kelebekler Ekran Koruyucusu Ayarları" FONT 8, "MS Shell Dlg" @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "Hakkında",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hakkında" FONT 8, "MS Shell Dlg" @@ -35,7 +35,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Kelebekler Ekran Koruyucusu" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/butterflies/lang/uk-UA.rc index 44a76d171ec72..4cc84b6322ec1 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/uk-UA.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Параметри заставки ""Метелики""" FONT 8, "MS Shell Dlg" @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "Про",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Про" FONT 8, "MS Shell Dlg" @@ -28,7 +28,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Метелики""" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/butterflies/lang/zh-CN.rc index ea949fd25affd..07f4f2f8ad7f5 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/zh-CN.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "蝴蝶屏幕保护程序设置" FONT 9, "宋体" @@ -14,7 +14,7 @@ BEGIN PUSHBUTTON "关于",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "关于" FONT 9, "宋体" @@ -30,7 +30,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "蝴蝶屏幕保护程序" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/butterflies/lang/zh-HK.rc index a22854e80b279..c7c95780b1144 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/zh-HK.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "蝴蝶螢幕保護程式設定" FONT 9, "新細明體" @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "關於",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "關於" FONT 9, "新細明體" @@ -35,7 +35,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "蝴蝶螢幕保護程式" END diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/butterflies/lang/zh-TW.rc index 83d2ea00b192d..3ee86ab4d8635 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "蝴蝶螢幕保護程式設定" FONT 9, "新細明體" @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "關於",IDABOUT,115,35,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +IDD_DLG_ABOUT DIALOGEX 0, 0, 149, 79 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "關於" FONT 9, "新細明體" @@ -35,7 +35,7 @@ BEGIN NOT WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "蝴蝶螢幕保護程式" END diff --git a/modules/rosapps/applications/screensavers/circles/circles.rc b/modules/rosapps/applications/screensavers/circles/circles.rc index 6e858536e06d5..5b920a17799b6 100644 --- a/modules/rosapps/applications/screensavers/circles/circles.rc +++ b/modules/rosapps/applications/screensavers/circles/circles.rc @@ -4,12 +4,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_circles.ico" +IDI_ICON ICON "res/icon_circles.ico" #define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Circles ScreenSaver\0" -#define REACTOS_STR_INTERNAL_NAME "circles\0" -#define REACTOS_STR_ORIGINAL_FILENAME "circles.scr\0" +#define REACTOS_STR_FILE_DESCRIPTION "Circles ScreenSaver" +#define REACTOS_STR_INTERNAL_NAME "circles" +#define REACTOS_STR_ORIGINAL_FILENAME "circles.scr" #include diff --git a/modules/rosapps/applications/screensavers/circles/lang/de-DE.rc b/modules/rosapps/applications/screensavers/circles/lang/de-DE.rc index 227a74d17a458..fe404e28d0306 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Kreise" IDS_TEXT "Keine Einstellungen notwendig." diff --git a/modules/rosapps/applications/screensavers/circles/lang/en-US.rc b/modules/rosapps/applications/screensavers/circles/lang/en-US.rc index 231497fd03c43..8d4c12e860028 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Circles" IDS_TEXT "No options need to be set." diff --git a/modules/rosapps/applications/screensavers/circles/lang/es-ES.rc b/modules/rosapps/applications/screensavers/circles/lang/es-ES.rc index ac01f2a19d62e..81a91e41a113b 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/es-ES.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Círculos" IDS_TEXT "Ninguna opción necesita ser configurada." diff --git a/modules/rosapps/applications/screensavers/circles/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/circles/lang/fr-FR.rc index 94130ba64e762..cae1f1e72528f 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/fr-FR.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cercles" IDS_TEXT "Il n'y a aucune option à définir." diff --git a/modules/rosapps/applications/screensavers/circles/lang/it-IT.rc b/modules/rosapps/applications/screensavers/circles/lang/it-IT.rc index d497837f57bf7..9d3072711ec26 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/it-IT.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/it-IT.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cerchi" IDS_TEXT "Non ci sono opzioni da impostare." diff --git a/modules/rosapps/applications/screensavers/circles/lang/no-NO.rc b/modules/rosapps/applications/screensavers/circles/lang/no-NO.rc index ff5e94109a37e..efe8f9c634809 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/no-NO.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Sirkeler" IDS_TEXT "Ingen valg trenges å settes." diff --git a/modules/rosapps/applications/screensavers/circles/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/circles/lang/pl-PL.rc index b4d8b1ad23d50..20259c2db5c41 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/pl-PL.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Kółka" IDS_TEXT "Brak opcji do ustawiania." diff --git a/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc index 230556ad54d39..3625ae6c5c7d3 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cercuri (animație de inactivitate)" IDS_TEXT "Nu este necesară stabilirea de opțiuni." diff --git a/modules/rosapps/applications/screensavers/circles/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/circles/lang/ru-RU.rc index 17a01722b7c35..0508119b383e8 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/ru-RU.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Круги""" IDS_TEXT "Эта заставка не имеет настраиваемых параметров." diff --git a/modules/rosapps/applications/screensavers/circles/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/circles/lang/sk-SK.rc index 40e6f120e64fb..2bfbd0f3ba8b4 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/sk-SK.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Kruhy" IDS_TEXT "Nie sú potrebné žiadne nastavenia." diff --git a/modules/rosapps/applications/screensavers/circles/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/circles/lang/tr-TR.rc index 76b81e8be7df7..c7e2b7fff29d4 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Çemberler" IDS_TEXT "Hiçbir seçeneğin ayarlanması gerekmez." diff --git a/modules/rosapps/applications/screensavers/circles/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/circles/lang/uk-UA.rc index 876a582fe76dc..72b6d917699c7 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/uk-UA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Кола""" IDS_TEXT "Ця заставка не має налаштовуваних параметрів." diff --git a/modules/rosapps/applications/screensavers/circles/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/circles/lang/zh-CN.rc index 676df289c24be..26a1386fd348a 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/zh-CN.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "圆圈" IDS_TEXT "没有需要设置的选项。" diff --git a/modules/rosapps/applications/screensavers/circles/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/circles/lang/zh-HK.rc index bf08667dd8522..e72c3a13caf2f 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/zh-HK.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "圓形" IDS_TEXT "沒有可設定的選項。" diff --git a/modules/rosapps/applications/screensavers/circles/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/circles/lang/zh-TW.rc index 19983968d78a2..42992555755df 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "圓形" IDS_TEXT "沒有可設定的選項。" diff --git a/modules/rosapps/applications/screensavers/cylfrac/cylfrac.rc b/modules/rosapps/applications/screensavers/cylfrac/cylfrac.rc index 4d481dbc74328..95decd17185c4 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/cylfrac.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/cylfrac.rc @@ -4,12 +4,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_cylfrac.ico" +IDI_ICON ICON "res/icon_cylfrac.ico" #define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Cylinders fractal ScreenSaver\0" -#define REACTOS_STR_INTERNAL_NAME "cylfrac\0" -#define REACTOS_STR_ORIGINAL_FILENAME "cylfrac.scr\0" +#define REACTOS_STR_FILE_DESCRIPTION "Cylinders fractal ScreenSaver" +#define REACTOS_STR_INTERNAL_NAME "cylfrac" +#define REACTOS_STR_ORIGINAL_FILENAME "cylfrac.scr" #include diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/bg-BG.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/bg-BG.rc index 41ff6b3336f46..b9ff60aee585a 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/bg-BG.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/bg-BG.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Цилиндрични фрактали" IDS_TITLE "За" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/de-DE.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/de-DE.rc index 99b0cbf849cac..841ef9b4cbfc1 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cylinders Fractal" IDS_TITLE "Über" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/en-US.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/en-US.rc index dbdfceaff8084..f257d54b5f24e 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cylinders fractal" IDS_TITLE "About" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/es-ES.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/es-ES.rc index 15d0fc362346c..c94e8866c08c9 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/es-ES.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cilindros fractales" IDS_TITLE "Acerca de" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/fr-FR.rc index c5a3ef84bfe47..7d41feb40494b 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/fr-FR.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Fractale de cylindres" IDS_TITLE "À propos de" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/it-IT.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/it-IT.rc index 93a3c580624e1..a0735703ec9c5 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/it-IT.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/it-IT.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cilindri frattali" IDS_TITLE "Informazioni" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/lt-LT.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/lt-LT.rc index 6be189e584ddd..78ff23a3a9ca3 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/lt-LT.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/lt-LT.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cilindrinis fraktalas" IDS_TITLE "Apie" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/nl-NL.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/nl-NL.rc index 5f3ccde36ee7c..ca0940c833088 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/nl-NL.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/nl-NL.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cylinders fractal" IDS_TITLE "Informatie" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc index 9f75d33207f07..6d642cda6beb3 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Sylindere fraktal" IDS_TITLE "Om" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/pl-PL.rc index c9aca2a3af39e..1b2e28a1e9fe5 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/pl-PL.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Fraktale cylindryczne" IDS_TITLE "O programie" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/ro-RO.rc index 6b3c7f7097167..3117f343c15a4 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/ro-RO.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Fractal cilindri (animație de inactivitate)" IDS_TITLE "Despre" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/ru-RU.rc index e4aaac37f2c5c..b9fe58e720472 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/ru-RU.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Cylinders fractal""" IDS_TITLE "О программе" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/sk-SK.rc index c51d15ec1c42d..a069abe8e02b5 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/sk-SK.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cylinders fractal" IDS_TITLE "Čo je ..." diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/tr-TR.rc index 649531d309fa1..9ef096a469646 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Silindirik Fractaller" IDS_TITLE "Hakkında" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/uk-UA.rc index 2f08a0f2dddb9..10ec907ff48b3 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/uk-UA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Cylinders fractal""" IDS_TITLE "Про" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/zh-CN.rc index 585473ad4c992..86996b478d21e 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/zh-CN.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "圆筒形" IDS_TITLE "关于" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/zh-HK.rc index 33c68f79fd3ef..1a3f0bd3b9ee5 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/zh-HK.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "分形圓筒" IDS_TITLE "關於" diff --git a/modules/rosapps/applications/screensavers/cylfrac/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/cylfrac/lang/zh-TW.rc index 50586a2e98b19..37c71e4a56ff0 100644 --- a/modules/rosapps/applications/screensavers/cylfrac/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/cylfrac/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "分形圓筒" IDS_TITLE "關於" diff --git a/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc b/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc index 435f7f1a53e81..94e6aacbf6a05 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Настройка на екранен предпазител Matrix" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Екранен предпазител Matrix" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc b/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc index 101e574cbb337..4bf36de93114c 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix Bildschirmschoner-Konfiguration" FONT 8, "MS Shell Dlg" @@ -46,7 +46,7 @@ BEGIN CTEXT "Matrix ScreenSaver www.catch22.org.uk",IDC_ABOUT,143, 158, 75, 18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix Bildschirmschoner" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc b/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc index 79a316197831d..817083d04b919 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix ScreenSaver Configuration" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix ScreenSaver" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc b/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc index 9652d2c55a6a8..4b37d9ea12e63 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuración del Salvapantallas Matrix" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Salvapantallas Matrix" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc index de8a38c478cdf..621077c0e32de 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuration de l'écran de veille Matrix" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Écran de veille Matrix" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc b/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc index 3e0208f4d6cb9..37c1f7bc63c7f 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc @@ -11,7 +11,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ekrano užsklandos nustatymai" FONT 8, "MS Shell Dlg" @@ -56,7 +56,7 @@ BEGIN 151,75,25 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrica" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc b/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc index e2ba43ff3b831..9e2eb6275433d 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix Schermbeveiliging Configuratie" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix Schermbeveiliging" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc b/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc index c16698ea5597a..ae9c9f9c74b3b 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix Skjermsparer konfigurasjon" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix Skjermsparer" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc index b0b7e58aa6fa8..c7bfc2bdf166a 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Konfiguracja wygaszacza Matrix" FONT 8, "MS Shell Dlg" @@ -54,7 +54,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc index 96f3204720829..5c5b0e65fbdc4 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc @@ -12,7 +12,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Setări pentru economizorul de ecran Matrix" FONT 8, "MS Shell Dlg" @@ -57,7 +57,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Economizorul de ecran Matrix" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc index 49a4c27a17f2b..e0223244c53d8 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Параметры заставки ""Матрица""" FONT 8, "MS Shell Dlg" @@ -55,7 +55,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Матрица""" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc index 96205f9e2c141..548bf67ee80a8 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Nastavenie šetriča obrazovky Matrix" FONT 8, "MS Shell Dlg" @@ -55,7 +55,7 @@ BEGIN PUSHBUTTON "Zrušiť",IDCANCEL,283,162,50,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix - šetrič obrazovky" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc b/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc index 58523fbe8535f..e81e5ef0c9ec5 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_THAI, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix ScreenSaver Configuration" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix ScreenSaver" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc index 229a1e02a9f69..9a30284906197 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix Ekran Koruyucusu Yapılandırması" FONT 8, "MS Shell Dlg" @@ -54,7 +54,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix Ekran Koruyucu" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc index b2b3089d08eb3..ce9bc2ea98617 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Параметри заставки ""Матриця""" FONT 8, "MS Shell Dlg" @@ -55,7 +55,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Матриця""" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc index 8e2421ce379a8..4e3eb9b280cec 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Matrix 屏幕保护程序配置" FONT 9, "宋体" @@ -49,7 +49,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Matrix 屏幕保护" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc index c49e46b20a676..97c95dd45cffe 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "矩陣螢幕保護程式設定" FONT 9, "新細明體" @@ -54,7 +54,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "矩陣螢幕保護程式" END diff --git a/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc index d5cf0efd1c7ad..466c3d5c7cae1 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "矩陣螢幕保護程式設定" FONT 9, "新細明體" @@ -54,7 +54,7 @@ BEGIN 158,75,18 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "矩陣螢幕保護程式" END diff --git a/modules/rosapps/applications/screensavers/matrix/rsrc.rc b/modules/rosapps/applications/screensavers/matrix/rsrc.rc index 4873f85b92374..ba3ca56db8171 100644 --- a/modules/rosapps/applications/screensavers/matrix/rsrc.rc +++ b/modules/rosapps/applications/screensavers/matrix/rsrc.rc @@ -3,9 +3,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDB_BITMAP1 BITMAP DISCARDABLE "matrix.bmp" -IDC_BLANKCURSOR CURSOR DISCARDABLE "cursor1.cur" -IDI_ICON1 ICON DISCARDABLE "icon1.ico" +IDB_BITMAP1 BITMAP "matrix.bmp" +IDC_BLANKCURSOR CURSOR "cursor1.cur" +IDI_ICON1 ICON "icon1.ico" #include diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/de-DE.rc b/modules/rosapps/applications/screensavers/mazescr/lang/de-DE.rc index cce0c41bb9931..1da7a75e43c94 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Labyrinth Bildschirmschoner Einstellungen" FONT 8, "MS Shell Dlg" @@ -22,7 +22,7 @@ BEGIN PUSHBUTTON "Über",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Über" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Labyrinth Bildschirmschoner" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/en-US.rc b/modules/rosapps/applications/screensavers/mazescr/lang/en-US.rc index a2adcbe48db99..31653825a9372 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Maze ScreenSaver Settings" FONT 8, "MS Shell Dlg" @@ -22,7 +22,7 @@ BEGIN PUSHBUTTON "About",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "About" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Maze Screensaver" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/es-ES.rc b/modules/rosapps/applications/screensavers/mazescr/lang/es-ES.rc index f0b5003dfe790..01fd68da74112 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/es-ES.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configuración del Salvapantallas Maze" FONT 8, "MS Shell Dlg" @@ -22,7 +22,7 @@ BEGIN PUSHBUTTON "Acerca de",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Acerca de" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Salvapantallas Maze" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/mazescr/lang/pl-PL.rc index b84fbb924fa00..203c4cf356863 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/pl-PL.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Ustawienia wygaszacza Maze" FONT 8, "MS Shell Dlg" @@ -22,7 +22,7 @@ BEGIN PUSHBUTTON "O wygaszaczu",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "O wygaszaczu" FONT 8, "MS Shell Dlg" @@ -39,7 +39,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Wygaszacz Maze" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/mazescr/lang/ro-RO.rc index 8e898130f828c..2dd10b9d67a23 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/ro-RO.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Configurație animație de inactivitate „Labirint”" FONT 8, "MS Shell Dlg" @@ -24,7 +24,7 @@ BEGIN PUSHBUTTON "&Despre",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Despre" FONT 8, "MS Shell Dlg" @@ -41,7 +41,7 @@ BEGIN DEFPUSHBUTTON "Î&nchide",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Labirint (animație de inactivitate)" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/mazescr/lang/ru-RU.rc index 8a5e7a4e2f253..0b68a18050329 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/ru-RU.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Maze ScreenSaver Settings" FONT 8, "MS Shell Dlg" @@ -30,7 +30,7 @@ BEGIN PUSHBUTTON "О программе",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "О заставке ""Лабиринт""" FONT 8, "MS Shell Dlg" @@ -47,7 +47,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Лабиринт""" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/mazescr/lang/tr-TR.rc index 350b92c88928c..999ab4bbaa4e2 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Labirent Ekran Koruyucusu Ayarları" FONT 8, "MS Shell Dlg" @@ -29,7 +29,7 @@ BEGIN PUSHBUTTON "Hakkında",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Hakkında" FONT 8, "MS Shell Dlg" @@ -46,7 +46,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Labirent Ekran Koruyucusu" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/mazescr/lang/zh-CN.rc index c00d9bdca75cc..e4f4ba8be5ee0 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/zh-CN.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "迷宫屏幕保护程序设置" FONT 9, "宋体" @@ -24,7 +24,7 @@ BEGIN PUSHBUTTON "关于",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "关于" FONT 9, "宋体" @@ -41,7 +41,7 @@ BEGIN DEFPUSHBUTTON "确定",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "迷宫的屏幕保护程序" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/mazescr/lang/zh-HK.rc index 1fd38af03a3d9..f8a10a06619b8 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/zh-HK.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "迷宮螢幕保護程式設定" FONT 9, "新細明體" @@ -29,7 +29,7 @@ BEGIN PUSHBUTTON "關於",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "關於" FONT 9, "新細明體" @@ -46,7 +46,7 @@ BEGIN DEFPUSHBUTTON "確定",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "迷宮螢幕保護程式" END diff --git a/modules/rosapps/applications/screensavers/mazescr/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/mazescr/lang/zh-TW.rc index 237ad523a7016..b2bedc8849cb1 100644 --- a/modules/rosapps/applications/screensavers/mazescr/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/mazescr/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 276, 112 +IDD_DLG_SCREEN DIALOGEX 0, 0, 276, 112 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "迷宮螢幕保護程式設定" FONT 9, "新細明體" @@ -29,7 +29,7 @@ BEGIN PUSHBUTTON "關於",IDABOUT,167,91,50,14 END -IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 229, 121 +IDD_DLG_ABOUT DIALOGEX 0, 0, 229, 121 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "關於" FONT 9, "新細明體" @@ -46,7 +46,7 @@ BEGIN DEFPUSHBUTTON "確定",IDOK,87,100,56,14 END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "迷宮螢幕保護程式" END diff --git a/modules/rosapps/applications/screensavers/mazescr/maze.rc b/modules/rosapps/applications/screensavers/mazescr/maze.rc index 087c5216d4dd5..bc7ba9d8287e4 100644 --- a/modules/rosapps/applications/screensavers/mazescr/maze.rc +++ b/modules/rosapps/applications/screensavers/mazescr/maze.rc @@ -3,12 +3,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_mazescr.ico" +IDI_ICON ICON "res/icon_mazescr.ico" #define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Maze ScreenSaver\0" -#define REACTOS_STR_INTERNAL_NAME "Maze\0" -#define REACTOS_STR_ORIGINAL_FILENAME "mazescr.scr\0" +#define REACTOS_STR_FILE_DESCRIPTION "Maze ScreenSaver" +#define REACTOS_STR_INTERNAL_NAME "Maze" +#define REACTOS_STR_ORIGINAL_FILENAME "mazescr.scr" #include diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/de-DE.rc b/modules/rosapps/applications/screensavers/ssstars/lang/de-DE.rc index 3ac92d56d6bbc..d346de8c34c4a 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/de-DE.rc @@ -41,7 +41,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield" IDS_ROTATION_NONE "Keine" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/en-US.rc b/modules/rosapps/applications/screensavers/ssstars/lang/en-US.rc index a1658e2335d38..b8cd923396448 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/en-US.rc @@ -41,7 +41,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield" IDS_ROTATION_NONE "None" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/es-ES.rc b/modules/rosapps/applications/screensavers/ssstars/lang/es-ES.rc index c873e7b420d20..cf62675831ef2 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/es-ES.rc @@ -49,7 +49,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield" IDS_ROTATION_NONE "Ninguna" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/it-IT.rc b/modules/rosapps/applications/screensavers/ssstars/lang/it-IT.rc index 56593997252b4..d966903243663 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/it-IT.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/it-IT.rc @@ -41,7 +41,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Campo stellare" IDS_ROTATION_NONE "Nessuna" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/ssstars/lang/pl-PL.rc index 6edb7277db250..b3e7552af8e0e 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/pl-PL.rc @@ -41,7 +41,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Gwiezdne pole" IDS_ROTATION_NONE "brak" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/ssstars/lang/ro-RO.rc index 37ebf55ebd613..a7ad0751f4b46 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/ro-RO.rc @@ -49,7 +49,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Cer înstelat" IDS_ROTATION_NONE "Niciuna" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/ssstars/lang/ru-RU.rc index 75571c1d9e02d..083df5c3f799f 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/ru-RU.rc @@ -41,7 +41,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Звёздное поле" IDS_ROTATION_NONE "Отсутствует" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/ssstars/lang/tr-TR.rc index 8f13df29c8ee5..7761a060f26c4 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/tr-TR.rc @@ -48,7 +48,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield" IDS_ROTATION_NONE "Hiçbiri" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/ssstars/lang/zh-CN.rc index 4b188fde66362..df09e0efa7456 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/zh-CN.rc @@ -43,7 +43,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "星空" IDS_ROTATION_NONE "无" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/ssstars/lang/zh-HK.rc index e7ba222cadb6f..9ee94ad85ade4 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/zh-HK.rc @@ -48,7 +48,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "恒星" IDS_ROTATION_NONE "無" diff --git a/modules/rosapps/applications/screensavers/ssstars/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/ssstars/lang/zh-TW.rc index 879c8d15f08dc..20e7fcb49cf28 100644 --- a/modules/rosapps/applications/screensavers/ssstars/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/ssstars/lang/zh-TW.rc @@ -48,7 +48,7 @@ END // String Tables -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "恒星" IDS_ROTATION_NONE "無" diff --git a/modules/rosapps/applications/screensavers/ssstars/resource.rc b/modules/rosapps/applications/screensavers/ssstars/resource.rc index aea361e3eca17..78ee7984fcef6 100644 --- a/modules/rosapps/applications/screensavers/ssstars/resource.rc +++ b/modules/rosapps/applications/screensavers/ssstars/resource.rc @@ -32,12 +32,11 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // Icons -IDI_STARFIELD ICON DISCARDABLE "res/icon_stars.ico" +IDI_STARFIELD ICON "res/icon_stars.ico" // Bitmap - -IDB_COSMOS BITMAP DISCARDABLE "res/cosmicfractal.bmp" -IDB_STAR BITMAP DISCARDABLE "res/star.bmp" +IDB_COSMOS BITMAP "res/cosmicfractal.bmp" +IDB_STAR BITMAP "res/star.bmp" #include diff --git a/modules/rosapps/applications/screensavers/starfield/lang/bg-BG.rc b/modules/rosapps/applications/screensavers/starfield/lang/bg-BG.rc index cdde641501857..8f6c6099b4c91 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/bg-BG.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/bg-BG.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Екранен предпазител „Зведно поле”" IDS_TITLE "За" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/de-DE.rc b/modules/rosapps/applications/screensavers/starfield/lang/de-DE.rc index 0581b8d298bb4..688c15d1a9be9 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield Bildschirmschoner" IDS_TITLE "Über" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/en-US.rc b/modules/rosapps/applications/screensavers/starfield/lang/en-US.rc index 1d2ad6d545dcd..0bfaebf983571 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield ScreenSaver" IDS_TITLE "About" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/es-ES.rc b/modules/rosapps/applications/screensavers/starfield/lang/es-ES.rc index a68dbd0849100..e138f24ad7b14 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/es-ES.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Salvapantallas Campo de estrellas" IDS_TITLE "Acerca de" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/starfield/lang/fr-FR.rc index 9440ea462dfb5..aba28f7c45e39 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/fr-FR.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Écran de veille Champ d'étoile" IDS_TITLE "À propos de" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/it-IT.rc b/modules/rosapps/applications/screensavers/starfield/lang/it-IT.rc index 51b00dd72f1c5..108d01c3d9779 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/it-IT.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/it-IT.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Salvaschermo Campo stellare" IDS_TITLE "Informazioni" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/lt-LT.rc b/modules/rosapps/applications/screensavers/starfield/lang/lt-LT.rc index ad6d9b98c1898..bbcbcf0dd9a28 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/lt-LT.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/lt-LT.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Žvaigždžių laukas" IDS_TITLE "Apie" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/nl-NL.rc b/modules/rosapps/applications/screensavers/starfield/lang/nl-NL.rc index 67e77c1e1bbe3..b49793f214996 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/nl-NL.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/nl-NL.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Sterren Schermbeveiliging" IDS_TITLE "Informatie" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/no-NO.rc b/modules/rosapps/applications/screensavers/starfield/lang/no-NO.rc index aab31683af034..64c37da7a1362 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/no-NO.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield Skjermsparer" IDS_TITLE "Om" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/starfield/lang/pl-PL.rc index 3b4f09df42632..ad243d1b3077c 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/pl-PL.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Wygaszacz Gwiazdy" IDS_TITLE "O programie" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc index e1e5c2952b089..76f1dccd46e09 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc @@ -10,7 +10,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Câmp de stele (animație de inactivitate)" IDS_TITLE "Despre…" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/starfield/lang/sk-SK.rc index 30777798a45f2..98ea09d8ea770 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/sk-SK.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Hviezdne pole - šetrič obrazovky" IDS_TITLE "Čo je ..." diff --git a/modules/rosapps/applications/screensavers/starfield/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/starfield/lang/tr-TR.rc index d4a27fd6e9d4a..2bee6fc2e6a27 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Starfield Ekran Koruyucu" IDS_TITLE "Hakkında" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/starfield/lang/uk-UA.rc index beed22b4b8871..0d9ff8388d298 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/uk-UA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "Заставка ""Зоряне поле""" IDS_TITLE "Про" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/starfield/lang/zh-CN.rc index a26e4d2f0a02c..0d2da2f3db481 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/zh-CN.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "星空屏幕保护程序" IDS_TITLE "关于" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/starfield/lang/zh-HK.rc index e1bd725376047..d0c95926a0bf1 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/zh-HK.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "星空螢幕保護程式" IDS_TITLE "關於" diff --git a/modules/rosapps/applications/screensavers/starfield/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/starfield/lang/zh-TW.rc index c0a3b70afb3bf..fc26fd17aaa44 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DESCRIPTION "星空螢幕保護程式" IDS_TITLE "關於" diff --git a/modules/rosapps/applications/screensavers/starfield/starfield.rc b/modules/rosapps/applications/screensavers/starfield/starfield.rc index 01960d9058d46..ed4a9d63976fe 100644 --- a/modules/rosapps/applications/screensavers/starfield/starfield.rc +++ b/modules/rosapps/applications/screensavers/starfield/starfield.rc @@ -4,12 +4,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDI_ICON ICON DISCARDABLE "res/icon_starfield.ico" +IDI_ICON ICON "res/icon_starfield.ico" #define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Starfield ScreenSaver\0" -#define REACTOS_STR_INTERNAL_NAME "starfield\0" -#define REACTOS_STR_ORIGINAL_FILENAME "starfield.scr\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Starfield ScreenSaver" +#define REACTOS_STR_INTERNAL_NAME "starfield" +#define REACTOS_STR_ORIGINAL_FILENAME "starfield.scr" #include diff --git a/modules/rosapps/applications/sysutils/ctm/ctm.rc b/modules/rosapps/applications/sysutils/ctm/ctm.rc index 3ba39784ae325..86323fbc8ccf6 100644 --- a/modules/rosapps/applications/sysutils/ctm/ctm.rc +++ b/modules/rosapps/applications/sysutils/ctm/ctm.rc @@ -2,10 +2,10 @@ #include #include "resource.h" -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Console Task Manager\0" -#define REACTOS_STR_INTERNAL_NAME "ctm\0" -#define REACTOS_STR_ORIGINAL_FILENAME "ctm.exe\0" -#define REACTOS_STR_ORIGINAL_COPYRIGHT "2003, Aleksey Bragin\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Console Task Manager" +#define REACTOS_STR_INTERNAL_NAME "ctm" +#define REACTOS_STR_ORIGINAL_FILENAME "ctm.exe" +#define REACTOS_STR_ORIGINAL_COPYRIGHT "2003, Aleksey Bragin" #include /* UTF-8 */ diff --git a/modules/rosapps/applications/sysutils/ctm/lang/de-DE.rc b/modules/rosapps/applications/sysutils/ctm/lang/de-DE.rc index 0704362d071f4..aa571cd91a804 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/de-DE.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/de-DE.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Console TaskManager von Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Speicher" - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Seitenfehler" IDS_IDLE_PROCESS "Leerlaufprozess" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/el-GR.rc b/modules/rosapps/applications/sysutils/ctm/lang/el-GR.rc index 3c685af2c8de6..1ec97a598f1fa 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/el-GR.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/el-GR.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Console TaskManager by Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Χρήση μνήμης" - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Page Faults" IDS_IDLE_PROCESS "Αδρανής διαδικασία" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/en-US.rc b/modules/rosapps/applications/sysutils/ctm/lang/en-US.rc index d96b5c18dce8b..a7a0d299df138 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/en-US.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/en-US.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Console TaskManager by Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Mem Usage" - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Page Faults" IDS_IDLE_PROCESS "System Idle Process" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/es-ES.rc b/modules/rosapps/applications/sysutils/ctm/lang/es-ES.rc index 2bfa1447b7763..60001a0f8e464 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/es-ES.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/es-ES.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Administrador de tareas de la Consola por Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Uso Memor." - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Fallos de paginación" IDS_IDLE_PROCESS "Proceso inactivo del sistema" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/fr-FR.rc b/modules/rosapps/applications/sysutils/ctm/lang/fr-FR.rc index 87203fe2ddfb8..86d87b9d723a9 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/fr-FR.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/fr-FR.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Console TaskManager par Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Util. mém" - IDS_COLUMN_MEM_UNIT "KO" + IDS_COLUMN_MEM_UNIT "KO" IDS_COLUMN_PF "Défauts de page" IDS_IDLE_PROCESS "Processus inactif du système" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/no-NO.rc b/modules/rosapps/applications/sysutils/ctm/lang/no-NO.rc index f18f06695a497..c94ea13c86b3a 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/no-NO.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/no-NO.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Konsoll oppgavebehandler av Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "Prosesor" IDS_COLUMN_MEM "Minnebruk" - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Page Faults" IDS_IDLE_PROCESS "System Idle Process" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/pl-PL.rc b/modules/rosapps/applications/sysutils/ctm/lang/pl-PL.rc index 1ea61476b40bb..ac15f56bdf6b3 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/pl-PL.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/pl-PL.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Console TaskManager by Aleksey Bragin " @@ -11,7 +11,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Użycie pamięci" - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Błędy strony" IDS_IDLE_PROCESS "Proces bezczynności systemu" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/ro-RO.rc b/modules/rosapps/applications/sysutils/ctm/lang/ro-RO.rc index 708e1c71e33c3..cdc1bc1e522cf 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/ro-RO.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/ro-RO.rc @@ -8,9 +8,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Gestionar de activități consolă v0.1 de Aleksey Bragin " @@ -19,7 +17,7 @@ BEGIN IDS_COLUMN_PID "IDP " IDS_COLUMN_CPU "UCP" IDS_COLUMN_MEM "Uz memor." - IDS_COLUMN_MEM_UNIT "ko" + IDS_COLUMN_MEM_UNIT "ko" IDS_COLUMN_PF "Er. de pag." IDS_IDLE_PROCESS "Proces de inactivitate sistem" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/ru-RU.rc b/modules/rosapps/applications/sysutils/ctm/lang/ru-RU.rc index d21c59dde677a..c98159041e877 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/ru-RU.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/ru-RU.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Консольный Диспетчер задач от Алексея Брагина " diff --git a/modules/rosapps/applications/sysutils/ctm/lang/uk-UA.rc b/modules/rosapps/applications/sysutils/ctm/lang/uk-UA.rc index 0441acfb82bfd..856e7032e633b 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/uk-UA.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/uk-UA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "Консольний Диспетчер завдань від Aleksey Bragin " @@ -17,7 +17,7 @@ BEGIN IDS_COLUMN_PID "PID " IDS_COLUMN_CPU "CPU" IDS_COLUMN_MEM "Використання пам'яті" - IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_MEM_UNIT "KB" IDS_COLUMN_PF "Помилок сторінки" IDS_IDLE_PROCESS "Недіяння системи" diff --git a/modules/rosapps/applications/sysutils/ctm/lang/zh-TW.rc b/modules/rosapps/applications/sysutils/ctm/lang/zh-TW.rc index ba074604436fc..f76fa04dd4bf9 100644 --- a/modules/rosapps/applications/sysutils/ctm/lang/zh-TW.rc +++ b/modules/rosapps/applications/sysutils/ctm/lang/zh-TW.rc @@ -2,7 +2,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "主控台工作管理員,由 Aleksey Bragin 開發" diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/de-DE.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/de-DE.rc index d6d37a98fe8ea..71e60e5bd7029 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/de-DE.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/de-DE.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S System [/U Benutzername [/P [Passwort]]]] [/FO Format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/en-US.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/en-US.rc index d603471ba8a5d..f1beb5a29d6d7 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/en-US.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/en-US.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/es-ES.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/es-ES.rc index d0a60d4f3eb56..4b352a983bfb2 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/es-ES.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/es-ES.rc @@ -6,7 +6,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S sistema [/U usuario [/P [contraseña]]]] [/FO formato] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/fr-FR.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/fr-FR.rc index cc751f12f964e..39586d24559db 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/fr-FR.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/fr-FR.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE "SYSTEMINFO [/S système [/U utilisateur [/P [motdepasse]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/it-IT.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/it-IT.rc index 400d1d2a4e6b5..1c4d0c4071d16 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/it-IT.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/it-IT.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S sistema [/U nomeutente [/P [password]]]] [/FO formato] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc index 6d5370d3445fa..840bf5198f148 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc @@ -1,6 +1,6 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S system [/U brukernavn [/P [passord]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/pl-PL.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/pl-PL.rc index 499684413d0c0..f1ba3279fe4ad 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/pl-PL.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/pl-PL.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S system [/U nazwa użytkownika [/P [hasło]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/ro-RO.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/ro-RO.rc index cd5737604e016..647dcd090abf1 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/ro-RO.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/ro-RO.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S sistem [/U nume [/P [parolă]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/ru-RU.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/ru-RU.rc index ffce71e3a403e..5b53f1ee8e2ed 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/ru-RU.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/ru-RU.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S система [/U имяПользователя [/P [пароль]]]] [/FO формат] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc index 04163646ddbb6..0e45f8452f8c7 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc @@ -4,7 +4,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S syst‚m [/U pou§._meno [/P [heslo]]]] [/FO form t] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/tr-TR.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/tr-TR.rc index 19e4005ebbc4a..f3ca6797e32b0 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/tr-TR.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/tr-TR.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S sistem [/U kullanici_adi [/P [sifre]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/uk-UA.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/uk-UA.rc index cae4845e492f3..a601bce2ea0c1 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/uk-UA.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/uk-UA.rc @@ -8,7 +8,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S система [/U користувач [/P [пароль]]]] [/FO формат] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/zh-CN.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/zh-CN.rc index b11a359b25030..a285d95602008 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/zh-CN.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/zh-CN.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/applications/sysutils/systeminfo/lang/zh-TW.rc b/modules/rosapps/applications/sysutils/systeminfo/lang/zh-TW.rc index 8c8dac3e090cc..af26041ba8877 100644 --- a/modules/rosapps/applications/sysutils/systeminfo/lang/zh-TW.rc +++ b/modules/rosapps/applications/sysutils/systeminfo/lang/zh-TW.rc @@ -7,7 +7,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_USAGE, "SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO format] [/NH]\n\n\ diff --git a/modules/rosapps/demos/maze/maze.rc b/modules/rosapps/demos/maze/maze.rc index c1614c45be143..da1dc87f9cb76 100644 --- a/modules/rosapps/demos/maze/maze.rc +++ b/modules/rosapps/demos/maze/maze.rc @@ -6,7 +6,7 @@ #define REACTOS_STR_ORIGINAL_FILENAME "maze.exe" #include -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN idsAppName "Screen Saver.Maze" END diff --git a/modules/rosapps/templates/dialog/dialog.rc b/modules/rosapps/templates/dialog/dialog.rc index e1eba836bcd3f..1c965a9533d48 100644 --- a/modules/rosapps/templates/dialog/dialog.rc +++ b/modules/rosapps/templates/dialog/dialog.rc @@ -1,14 +1,14 @@ #include #include "resource.h" -#define REACTOS_STR_FILE_DESCRIPTION "Tab Control Test\0" -#define REACTOS_STR_INTERNAL_NAME "template_dialog\0" -#define REACTOS_STR_ORIGINAL_FILENAME "template_dialog.exe\0" +#define REACTOS_STR_FILE_DESCRIPTION "Tab Control Test" +#define REACTOS_STR_INTERNAL_NAME "template_dialog" +#define REACTOS_STR_ORIGINAL_FILENAME "template_dialog.exe" #include LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -IDD_TABBED_DIALOG DIALOGEX DISCARDABLE 0, 0, 243, 230 +IDD_TABBED_DIALOG DIALOGEX 0, 0, 243, 230 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "TabTest Dialog" FONT 8, "MS Shell Dlg" @@ -18,7 +18,7 @@ BEGIN CONTROL "Tab1",IDC_TAB,"SysTabControl32",0x0,7,7,229,190 END -IDD_PAGE1 DIALOGEX DISCARDABLE 10, 20, 180, 144 +IDD_PAGE1 DIALOGEX 10, 20, 180, 144 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN @@ -27,7 +27,7 @@ BEGIN LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP END -IDD_PAGE2 DIALOGEX DISCARDABLE 10, 20, 180, 144 +IDD_PAGE2 DIALOGEX 10, 20, 180, 144 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN @@ -35,7 +35,7 @@ BEGIN WS_TABSTOP,26,48,123,9 END -IDD_PAGE3 DIALOGEX DISCARDABLE 10, 20, 180, 144 +IDD_PAGE3 DIALOGEX 10, 20, 180, 144 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN diff --git a/modules/rosapps/templates/mdi/mdi.rc b/modules/rosapps/templates/mdi/mdi.rc index 4b78b4c59679d..7b6a1cb97e7f2 100644 --- a/modules/rosapps/templates/mdi/mdi.rc +++ b/modules/rosapps/templates/mdi/mdi.rc @@ -1,23 +1,23 @@ #include "resource.h" #include -#define REACTOS_STR_FILE_DESCRIPTION "ReactOS MDI Sample Application by Robert Dickenson\0" -#define REACTOS_STR_INTERNAL_NAME "mdi\0" -#define REACTOS_STR_ORIGINAL_FILENAME "mdi.exe\0" -#define REACTOS_STR_ORIGINAL_COPYRIGHT "Copyright © 2002 Robert Dickenson\0" +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS MDI Sample Application by Robert Dickenson" +#define REACTOS_STR_INTERNAL_NAME "mdi" +#define REACTOS_STR_ORIGINAL_FILENAME "mdi.exe" +#define REACTOS_STR_ORIGINAL_COPYRIGHT "Copyright © 2002 Robert Dickenson" #include LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* Icons */ -IDI_MDI_APP ICON DISCARDABLE "res/mdi.ico" -IDI_SMALL ICON DISCARDABLE "res/small.ico" +IDI_MDI_APP ICON "res/mdi.ico" +IDI_SMALL ICON "res/small.ico" /* Bitmaps */ -IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp" -IDB_IMAGES BITMAP DISCARDABLE "res/images.bmp" +IDB_TOOLBAR BITMAP "res/toolbar.bmp" +IDB_IMAGES BITMAP "res/images.bmp" -IDC_MDI_APP MENU DISCARDABLE +IDC_MDI_APP MENU BEGIN POPUP "&File" BEGIN @@ -59,7 +59,7 @@ BEGIN END END -IDD_DIALOG1 DIALOGEX DISCARDABLE 0, 0, 186, 95 +IDD_DIALOG1 DIALOGEX 0, 0, 186, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Shell Dlg" @@ -68,7 +68,7 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 END -IDD_ABOUTBOX DIALOGEX DISCARDABLE 22, 17, 230, 75 +IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "About" FONT 8, "MS Shell Dlg" @@ -80,7 +80,7 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,195,6,30,11,WS_GROUP END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APP_TITLE "ReactOS Application" diff --git a/modules/rosapps/templates/old_wordpad/lang/bg-BG.rc b/modules/rosapps/templates/old_wordpad/lang/bg-BG.rc index 3fcea1ed6be4a..00eb88eaba708 100644 --- a/modules/rosapps/templates/old_wordpad/lang/bg-BG.rc +++ b/modules/rosapps/templates/old_wordpad/lang/bg-BG.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Документ %1!u!" IDS_READY " Готов." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Обогатен словесен документ (RTF)" IDS_DOC_TYPE_UNICODE_TEXT "Словесен документ" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Нов" IDS_TOOLTIP_OPEN "Отваряне" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Създава нов документ." diff --git a/modules/rosapps/templates/old_wordpad/lang/de-DE.rc b/modules/rosapps/templates/old_wordpad/lang/de-DE.rc index a2c21b9ee1fe5..9cdb50b3c1f7b 100644 --- a/modules/rosapps/templates/old_wordpad/lang/de-DE.rc +++ b/modules/rosapps/templates/old_wordpad/lang/de-DE.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "Dieses Programm ist kostenlos; Sie können es frei verteilen mit od. ohne Änderungen unter der GNU Lesser General Public License wie es von der Free Software Foundation veröffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine spätere Version (ihrer Wahl).\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Dokument %1!u!" IDS_READY " Fertig." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Rich Text-Dokument" IDS_DOC_TYPE_UNICODE_TEXT "Text-Dokument" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Neu" IDS_TOOLTIP_OPEN "Öffnen" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Erstellt iin neues Dokument." diff --git a/modules/rosapps/templates/old_wordpad/lang/el-GR.rc b/modules/rosapps/templates/old_wordpad/lang/el-GR.rc index 92563fa6cc818..052185c3f89d1 100644 --- a/modules/rosapps/templates/old_wordpad/lang/el-GR.rc +++ b/modules/rosapps/templates/old_wordpad/lang/el-GR.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Έγγραφο %1!u!" IDS_READY " Έτοιμο." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Μορφή εμπλουτισμένου κειμένου" IDS_DOC_TYPE_UNICODE_TEXT "Έγγραφα κειμένου Unicode" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Νέο" IDS_TOOLTIP_OPEN "Άνοιγμα" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Δημιοργεί ένα νέο έγγραφο." diff --git a/modules/rosapps/templates/old_wordpad/lang/en-US.rc b/modules/rosapps/templates/old_wordpad/lang/en-US.rc index 8d64f37f5a8be..a66404c1fdaae 100644 --- a/modules/rosapps/templates/old_wordpad/lang/en-US.rc +++ b/modules/rosapps/templates/old_wordpad/lang/en-US.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Document %1!u!" IDS_READY " Ready." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Rich Text Document" IDS_DOC_TYPE_UNICODE_TEXT "Text Document" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "New" IDS_TOOLTIP_OPEN "Open" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Creates a new document." diff --git a/modules/rosapps/templates/old_wordpad/lang/fi-FI.rc b/modules/rosapps/templates/old_wordpad/lang/fi-FI.rc index b10b4ca5e14be..2f13db41776f2 100644 --- a/modules/rosapps/templates/old_wordpad/lang/fi-FI.rc +++ b/modules/rosapps/templates/old_wordpad/lang/fi-FI.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Document %1!u!" IDS_READY " Ready." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "RTF-tiedosto" IDS_DOC_TYPE_UNICODE_TEXT "Tekstitiedosto" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Uusi" IDS_TOOLTIP_OPEN "Avaa" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Luo uuden asiakirjan." diff --git a/modules/rosapps/templates/old_wordpad/lang/fr-FR.rc b/modules/rosapps/templates/old_wordpad/lang/fr-FR.rc index 15c812c9f7a5d..1430267edbe48 100644 --- a/modules/rosapps/templates/old_wordpad/lang/fr-FR.rc +++ b/modules/rosapps/templates/old_wordpad/lang/fr-FR.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "Ce programme est un logiciel libre; vous pouvez le redistribuer et/ou le modifier tout en respectant les termes de la ""GNU General Public License"" publiée par la Free Software Foundation; dans sa version 2 (ou selon votre préférence) toute version suivante.\r\n\r\nCe programme est distribué dans l'espoir qu'il sera utile, cependant SANS GARANTIE D'AUCUNE SORTE; sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE. \r\n\r\nVoir la Licence Publique Générale GNU pour plus de détails. Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." IDS_DEFAULT_NAME "Document %1!u!" IDS_READY " Prêt." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Document RTF" IDS_DOC_TYPE_UNICODE_TEXT "Document texte" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Nouveau" IDS_TOOLTIP_OPEN "Ouvrir" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Crée un nouveau document." diff --git a/modules/rosapps/templates/old_wordpad/lang/it-IT.rc b/modules/rosapps/templates/old_wordpad/lang/it-IT.rc index 7c1c84fe6668c..4c2e4fe3fd757 100644 --- a/modules/rosapps/templates/old_wordpad/lang/it-IT.rc +++ b/modules/rosapps/templates/old_wordpad/lang/it-IT.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "Questo programma è software libero; puoi distribuirlo e/o modificarlo nei termini di licenza di 'GNU General Public License' come pubblicata dalla 'Free Software Foundation'; entrambe le versioni 2 della Licenza, o (a vostra scelta) qualunque versione successiva.\r\n\r\nQuesto programma è distribuito con l'augurio che sia utile, ma PRIVO DI OGNI GARANZIA; privo anche della garanzia implicita di COMMERCIABILITÀ o UTILIZZABILITÀ PER UNO SPECIFICO USO. Vedi la 'GNU General Public License' per ulteriori dettagli.\r\n\r\nVoi dovreste aver ricevuto una copia della 'GNU General Public License' assieme a questo programma; se non è cosi' scrivete a 'Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA'." IDS_DEFAULT_NAME "Documento %1!u!" IDS_READY " Pronto." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Documento 'Rich Text'" IDS_DOC_TYPE_UNICODE_TEXT "Testo" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Nuovo" IDS_TOOLTIP_OPEN "Apri" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Crea un nuovo documento." diff --git a/modules/rosapps/templates/old_wordpad/lang/nl-NL.rc b/modules/rosapps/templates/old_wordpad/lang/nl-NL.rc index 0dd541ac1ace2..7bd0f7314ce54 100644 --- a/modules/rosapps/templates/old_wordpad/lang/nl-NL.rc +++ b/modules/rosapps/templates/old_wordpad/lang/nl-NL.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Document %1!u!" IDS_READY " Ready." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Rich Text Document" IDS_DOC_TYPE_UNICODE_TEXT "Text Document" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Nieuw" IDS_TOOLTIP_OPEN "Openen" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Een nieuw document maken." diff --git a/modules/rosapps/templates/old_wordpad/lang/no-NO.rc b/modules/rosapps/templates/old_wordpad/lang/no-NO.rc index 4d98815e7061e..ae3fd33438231 100644 --- a/modules/rosapps/templates/old_wordpad/lang/no-NO.rc +++ b/modules/rosapps/templates/old_wordpad/lang/no-NO.rc @@ -108,14 +108,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "Dette programmet er gratis programvare; du kan distribuere det og/eller endre det under betingelsene av GNU General Public License som er utgitt av Free Software Foundation; version 2 av lisensen, eller (etter din mening) alle senere versjoner.\r\n\r\nDette programmet er utgitt i håp for at det skal kunne brukes, men DET ER INGEN GARANTIER; uten heller forutsatt garantier av SALGBARHET eller SIKKETHET FOR EN ENKELTHET FORMÅL. Se på GNU General Public Lisensen for mere detaljer.\r\n\r\nDu skal ha motatt en kopi av GNU General Public Lisensen sammen med denne programmet; hvis du ikke har motatt det, skriv til Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Dokument %1!u!" IDS_READY " Klar." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Rik tekst dokument" IDS_DOC_TYPE_UNICODE_TEXT "Tekst dokument" @@ -125,7 +125,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Ny" IDS_TOOLTIP_OPEN "Åpen" @@ -140,7 +140,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Opprette et nytt dokument." diff --git a/modules/rosapps/templates/old_wordpad/lang/pl-PL.rc b/modules/rosapps/templates/old_wordpad/lang/pl-PL.rc index dbd6432bd759a..5b464c685b59a 100644 --- a/modules/rosapps/templates/old_wordpad/lang/pl-PL.rc +++ b/modules/rosapps/templates/old_wordpad/lang/pl-PL.rc @@ -113,14 +113,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "Niniejszy program jest wolnym oprogramowaniem; możesz go rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundację Wolnego Oprogramowania - według wersji 2 tej Licencji lub (według Twojego wyboru) którejś z późniejszych wersji.\r\n\r\nNiniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania bliższych informacji sięgnij do Powszechnej Licencji Publicznej GNU.\r\n\r\nZ pewnością wraz z niniejszym programem otrzymałeś też egzemplarz Powszechnej Licencji Publicznej GNU (GNU General Public License); jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple Place, Fifth Floor, Boston, MA 02110-1301 USA." IDS_DEFAULT_NAME "Dokument %1!u!" IDS_READY " Gotowy." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Dokument sformatowany" IDS_DOC_TYPE_UNICODE_TEXT "Dokument tekstowy" @@ -130,7 +130,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Nowy" IDS_TOOLTIP_OPEN "Otwórz" @@ -145,7 +145,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Tworzy nowy dokument." diff --git a/modules/rosapps/templates/old_wordpad/lang/ru-RU.rc b/modules/rosapps/templates/old_wordpad/lang/ru-RU.rc index 6f44446421b3d..123c88a1c7f65 100644 --- a/modules/rosapps/templates/old_wordpad/lang/ru-RU.rc +++ b/modules/rosapps/templates/old_wordpad/lang/ru-RU.rc @@ -110,14 +110,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "Эта программа является свободно распространяемой; Вы можете распространять ее повторно и (или) изменять, соблюдая условия Открытого лицензионного соглашения GNU, опубликованного Фондом свободно распространяемого программного обеспечения; либо редакции 2 Соглашения, либо (на ваше усмотрение) любой редакции, выпущенной позже.\r\n\r\nЭта программа распространяется в надежде на то, что она окажется полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая подразумеваемую гарантию КАЧЕСТВА либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробности содержатся в Открытом лицензионном соглашении GNU.\r\n\r\nВместе с этой программой должен распространяться экземпляр Открытого лицензионного соглашения GNU, если он отсутствует, сообщите об этом в Фонд свободно распространяемого программного обеспечения (Free Software Foundation, Inc.), 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Документ %1!u!" IDS_READY " Готово." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Документ в формате RTF" IDS_DOC_TYPE_UNICODE_TEXT "Текстовый документ" @@ -127,7 +127,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Новый" IDS_TOOLTIP_OPEN "Открыть" @@ -142,7 +142,7 @@ BEGIN END /* Подсказки */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Создать новый документ." diff --git a/modules/rosapps/templates/old_wordpad/lang/th-TH.rc b/modules/rosapps/templates/old_wordpad/lang/th-TH.rc index 18aab5d444bf9..a819f724ca50c 100644 --- a/modules/rosapps/templates/old_wordpad/lang/th-TH.rc +++ b/modules/rosapps/templates/old_wordpad/lang/th-TH.rc @@ -129,14 +129,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "เอกสาร %1!u!" IDS_READY " เสร็จแล้ว." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Rich Text Document" IDS_DOC_TYPE_UNICODE_TEXT "Text Document" @@ -146,7 +146,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "ใหม่" IDS_TOOLTIP_OPEN "เปิด" @@ -161,7 +161,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " สร้างเอกสารใหม่" diff --git a/modules/rosapps/templates/old_wordpad/lang/uk-UA.rc b/modules/rosapps/templates/old_wordpad/lang/uk-UA.rc index 7d54c371b8bff..c8bb44a619178 100644 --- a/modules/rosapps/templates/old_wordpad/lang/uk-UA.rc +++ b/modules/rosapps/templates/old_wordpad/lang/uk-UA.rc @@ -116,14 +116,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program 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 General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA." IDS_DEFAULT_NAME "Документ %1!u!" IDS_READY " Виконано." END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "Документ у форматі RTF" IDS_DOC_TYPE_UNICODE_TEXT "Текстовий документ" @@ -133,7 +133,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "Створити" IDS_TOOLTIP_OPEN "Відкрити" @@ -148,7 +148,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " Створення нового документа." diff --git a/modules/rosapps/templates/old_wordpad/lang/zh-CN.rc b/modules/rosapps/templates/old_wordpad/lang/zh-CN.rc index a409826b61dba..e007f8eec2694 100644 --- a/modules/rosapps/templates/old_wordpad/lang/zh-CN.rc +++ b/modules/rosapps/templates/old_wordpad/lang/zh-CN.rc @@ -117,14 +117,14 @@ BEGIN END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_LICENSE "本程序为自由软件; 您可以根据自由软件基金会发布的 GNU 通用公共许可证的第 2 版,或(根据您的选择)任何更高版本的条款进行重新分发和修改它。\r\n\r\n本程序的发布是希望它有用,但没有任何担保; 甚至没有适销性或特定用途适用性的暗示保证。 有关详细信息,请参阅 GNU 通用公共许可证。\r\n\r\n您应该已收到 GNU 通用公共许可证的副本以及本程序; 如果没有,请写信给 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA。" IDS_DEFAULT_NAME "文档 %1!u!" IDS_READY " 准备就绪。" END -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_DOC_TYPE_RICH_TEXT "RTF 文档" IDS_DOC_TYPE_UNICODE_TEXT "文本文档" @@ -134,7 +134,7 @@ END /* Tooltips */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_TOOLTIP_NEW "新建" IDS_TOOLTIP_OPEN "打开" @@ -149,7 +149,7 @@ BEGIN END /* Hints */ -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_HINT_BLANK " " IDS_HINT_NEW " 创建新文档。" diff --git a/modules/rosapps/templates/old_wordpad/rsrc.rc b/modules/rosapps/templates/old_wordpad/rsrc.rc index 95dc22737386c..43fc40b63fa77 100644 --- a/modules/rosapps/templates/old_wordpad/rsrc.rc +++ b/modules/rosapps/templates/old_wordpad/rsrc.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #define REACTOS_STR_ORIGINAL_FILENAME "editor.exe" //#include -STRINGTABLE DISCARDABLE +STRINGTABLE BEGIN IDS_APPNAME "Editor" IDS_VERSION "v0.1" @@ -18,7 +18,7 @@ END IDI_ICON ICON "res/wordpad.ico" /* main toolbar icons */ -IDB_TEXTTOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp" +IDB_TEXTTOOLBAR BITMAP "res/toolbar.bmp" #include From 40f360445be03ff99f7d7eddb2be79c0d8d2a752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 22 Dec 2024 18:38:34 +0100 Subject: [PATCH 064/750] Merry Christmas time! --- ntoskrnl/inbv/bootanim.c | 2 +- ntoskrnl/inbv/bootanim.rc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/inbv/bootanim.c b/ntoskrnl/inbv/bootanim.c index bd93399ae5946..e9fa08c51c8ee 100644 --- a/ntoskrnl/inbv/bootanim.c +++ b/ntoskrnl/inbv/bootanim.c @@ -32,7 +32,7 @@ * Enable this define for having fancy features * in the boot and shutdown screens. */ -// #define REACTOS_FANCY_BOOT +#define REACTOS_FANCY_BOOT /* * BitBltAligned() alignments diff --git a/ntoskrnl/inbv/bootanim.rc b/ntoskrnl/inbv/bootanim.rc index 202ba1088e256..df453891e4738 100644 --- a/ntoskrnl/inbv/bootanim.rc +++ b/ntoskrnl/inbv/bootanim.rc @@ -23,7 +23,7 @@ IDB_SERVER_HEADER BITMAP "inbv/resources/hserver.bmp" IDB_SERVER_FOOTER BITMAP "inbv/resources/fserver.bmp" /* ReactOS additions */ -//IDB_LOGO_XMAS BITMAP "inbv/resources/logo_xmas.bmp" +IDB_LOGO_XMAS BITMAP "inbv/resources/logo_xmas.bmp" IDB_ROTATING_LINE BITMAP "inbv/resources/line.bmp" IDB_PROGRESS_BAR BITMAP "inbv/resources/progress.bmp" IDB_COPYRIGHT BITMAP "inbv/resources/copyright.bmp" From cc3672cb731ab9d49fc9a665bcbb996626e453e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 22 Dec 2024 16:49:16 +0100 Subject: [PATCH 065/750] [RESOURCES] Remove redundant #pragma code_page(), includes, etc. They are redundant when these are already present in the given module's root resource file, from which the language-specific resource files are being included. --- base/applications/cmdutils/at/at.rc | 1 + base/applications/cmdutils/fc/fc.rc | 4 +++- base/applications/cmdutils/find/find.rc | 1 + base/applications/cmdutils/help/help.rc | 1 + base/applications/cmdutils/tasklist/tasklist.rc | 1 + base/applications/cmdutils/tree/tree.rc | 1 + base/applications/cmdutils/where/where.rc | 3 ++- base/applications/network/dwnl/dwnl.rc | 1 + base/applications/network/tracert/tracert.rc | 1 - base/applications/osk/osk.rc | 6 ++++-- base/applications/regedit/clb/clb.rc | 1 - base/system/services/services.rc | 1 - dll/cpl/console/console.rc | 4 ++-- dll/cpl/inetcpl/inetcpl.rc | 1 - dll/cpl/inetcpl/lang/He.rc | 2 -- dll/cpl/inetcpl/lang/Sr.rc | 2 -- dll/cpl/inetcpl/lang/cs-CZ.rc | 3 --- dll/cpl/inetcpl/lang/de-DE.rc | 2 -- dll/cpl/inetcpl/lang/fr-FR.rc | 3 --- dll/cpl/inetcpl/lang/it-IT.rc | 3 --- dll/cpl/inetcpl/lang/ja-JP.rc | 3 --- dll/cpl/inetcpl/lang/ko-KR.rc | 2 -- dll/cpl/inetcpl/lang/lt-LT.rc | 3 --- dll/cpl/inetcpl/lang/pl-PL.rc | 3 --- dll/cpl/inetcpl/lang/pt-BR.rc | 2 -- dll/cpl/inetcpl/lang/pt-PT.rc | 3 --- dll/cpl/inetcpl/lang/ru-RU.rc | 3 --- dll/cpl/inetcpl/lang/sv-SE.rc | 2 -- dll/cpl/inetcpl/lang/tr-TR.rc | 3 --- dll/cpl/inetcpl/lang/uk-UA.rc | 3 --- dll/shellext/mydocs/mydocs.rc | 10 +++++----- dll/shellext/sendmail/sendmail.rc | 8 ++++---- dll/shellext/zipfldr/zipfldr.rc | 1 - dll/win32/comdlg32/rsrc.rc | 3 ++- dll/win32/credui/lang/credui_Da.rc | 2 -- dll/win32/credui/lang/credui_De.rc | 2 -- dll/win32/credui/lang/credui_Es.rc | 2 -- dll/win32/credui/lang/credui_Fr.rc | 2 -- dll/win32/credui/lang/credui_Hu.rc | 3 --- dll/win32/credui/lang/credui_It.rc | 3 --- dll/win32/credui/lang/credui_Lt.rc | 3 --- dll/win32/credui/lang/credui_Pt.rc | 2 -- dll/win32/credui/lang/credui_Ro.rc | 2 -- dll/win32/credui/lang/credui_Ru.rc | 3 --- dll/win32/credui/lang/credui_Si.rc | 2 -- dll/win32/credui/lang/credui_Uk.rc | 3 --- dll/win32/credui/lang/credui_Zh.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_De.rc | 2 -- dll/win32/cryptdlg/lang/cryptdlg_Fr.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_Hu.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_It.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_Lt.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_No.rc | 2 -- dll/win32/cryptdlg/lang/cryptdlg_Pt.rc | 2 -- dll/win32/cryptdlg/lang/cryptdlg_Ro.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_Ru.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_Uk.rc | 3 --- dll/win32/cryptdlg/lang/cryptdlg_Zh.rc | 3 --- dll/win32/cryptui/lang/cryptui_Bg.rc | 2 -- dll/win32/cryptui/lang/cryptui_De.rc | 2 -- dll/win32/cryptui/lang/cryptui_En.rc | 2 -- dll/win32/cryptui/lang/cryptui_Fr.rc | 2 -- dll/win32/cryptui/lang/cryptui_He.rc | 2 -- dll/win32/cryptui/lang/cryptui_It.rc | 2 -- dll/win32/cryptui/lang/cryptui_Ko.rc | 2 -- dll/win32/cryptui/lang/cryptui_Lt.rc | 2 -- dll/win32/cryptui/lang/cryptui_Nl.rc | 2 -- dll/win32/cryptui/lang/cryptui_No.rc | 2 -- dll/win32/cryptui/lang/cryptui_Pl.rc | 2 -- dll/win32/cryptui/lang/cryptui_Pt.rc | 2 -- dll/win32/cryptui/lang/cryptui_Ro.rc | 2 -- dll/win32/cryptui/lang/cryptui_Ru.rc | 2 -- dll/win32/cryptui/lang/cryptui_Sq.rc | 2 -- dll/win32/cryptui/lang/cryptui_Tr.rc | 2 -- dll/win32/cryptui/lang/cryptui_Uk.rc | 2 -- dll/win32/cryptui/lang/cryptui_Zh.rc | 5 ----- dll/win32/hhctrl.ocx/lang/De.rc | 2 -- dll/win32/hhctrl.ocx/lang/Es.rc | 3 --- dll/win32/hhctrl.ocx/lang/Fr.rc | 3 --- dll/win32/hhctrl.ocx/lang/It.rc | 3 --- dll/win32/hhctrl.ocx/lang/Ja.rc | 3 --- dll/win32/hhctrl.ocx/lang/Lt.rc | 3 --- dll/win32/hhctrl.ocx/lang/Pt.rc | 2 -- dll/win32/hhctrl.ocx/lang/Ro.rc | 2 -- dll/win32/hhctrl.ocx/lang/Ru.rc | 3 --- dll/win32/hhctrl.ocx/lang/Si.rc | 2 -- dll/win32/hhctrl.ocx/lang/Uk.rc | 3 --- dll/win32/hhctrl.ocx/lang/Zh.rc | 3 --- dll/win32/iccvid/lang/iccvid_De.rc | 2 -- dll/win32/iccvid/lang/iccvid_Es.rc | 3 --- dll/win32/iccvid/lang/iccvid_Fr.rc | 3 --- dll/win32/iccvid/lang/iccvid_It.rc | 3 --- dll/win32/iccvid/lang/iccvid_Ja.rc | 3 --- dll/win32/iccvid/lang/iccvid_Lt.rc | 3 --- dll/win32/iccvid/lang/iccvid_Ro.rc | 2 -- dll/win32/iccvid/lang/iccvid_Ru.rc | 3 --- dll/win32/iccvid/lang/iccvid_Si.rc | 2 -- dll/win32/iccvid/lang/iccvid_Uk.rc | 3 --- dll/win32/iccvid/lang/iccvid_Zh.rc | 3 --- dll/win32/jscript/lang/jscript_Da.rc | 2 -- dll/win32/jscript/lang/jscript_De.rc | 2 -- dll/win32/jscript/lang/jscript_Es.rc | 3 --- dll/win32/jscript/lang/jscript_Fr.rc | 3 --- dll/win32/jscript/lang/jscript_Hu.rc | 3 --- dll/win32/jscript/lang/jscript_It.rc | 3 --- dll/win32/jscript/lang/jscript_Ja.rc | 3 --- dll/win32/jscript/lang/jscript_Ko.rc | 3 --- dll/win32/jscript/lang/jscript_Lt.rc | 3 --- dll/win32/jscript/lang/jscript_Nl.rc | 2 -- dll/win32/jscript/lang/jscript_No.rc | 2 -- dll/win32/jscript/lang/jscript_Pt.rc | 2 -- dll/win32/jscript/lang/jscript_Ro.rc | 2 -- dll/win32/jscript/lang/jscript_Ru.rc | 3 --- dll/win32/jscript/lang/jscript_Si.rc | 2 -- dll/win32/jscript/lang/jscript_Uk.rc | 3 --- dll/win32/jscript/lang/jscript_Zh.rc | 3 --- dll/win32/mapi32/lang/Es.rc | 3 --- dll/win32/mapi32/lang/Fr.rc | 3 --- dll/win32/mapi32/lang/Hu.rc | 3 --- dll/win32/mapi32/lang/It.rc | 3 --- dll/win32/mapi32/lang/Ja.rc | 3 --- dll/win32/mapi32/lang/Ko.rc | 3 --- dll/win32/mapi32/lang/Lt.rc | 3 --- dll/win32/mapi32/lang/Nl.rc | 2 -- dll/win32/mapi32/lang/No.rc | 2 -- dll/win32/mapi32/lang/Pt.rc | 2 -- dll/win32/mapi32/lang/Ro.rc | 2 -- dll/win32/mapi32/lang/Ru.rc | 3 --- dll/win32/mapi32/lang/Si.rc | 2 -- dll/win32/mapi32/lang/Uk.rc | 3 --- dll/win32/mapi32/lang/Zh.rc | 3 --- dll/win32/mapi32/version.rc | 1 - dll/win32/mpr/lang/mpr_De.rc | 2 -- dll/win32/mpr/lang/mpr_Fr.rc | 3 --- dll/win32/mpr/lang/mpr_Ja.rc | 3 --- dll/win32/mpr/lang/mpr_Lt.rc | 3 --- dll/win32/mpr/lang/mpr_Pt.rc | 2 -- dll/win32/mpr/lang/mpr_Ro.rc | 2 -- dll/win32/mpr/lang/mpr_Ru.rc | 3 --- dll/win32/mpr/lang/mpr_Si.rc | 2 -- dll/win32/mpr/lang/mpr_Uk.rc | 3 --- dll/win32/mpr/lang/mpr_Zh.rc | 3 --- dll/win32/msacm32/lang/msacm_De.rc | 2 -- dll/win32/msacm32/lang/msacm_Fr.rc | 3 --- dll/win32/msacm32/lang/msacm_He.rc | 3 --- dll/win32/msacm32/lang/msacm_Ja.rc | 3 --- dll/win32/msacm32/lang/msacm_Lt.rc | 3 --- dll/win32/msacm32/lang/msacm_Pt.rc | 2 -- dll/win32/msacm32/lang/msacm_Ro.rc | 2 -- dll/win32/msacm32/lang/msacm_Ru.rc | 3 --- dll/win32/msacm32/lang/msacm_Si.rc | 2 -- dll/win32/msacm32/lang/msacm_Uk.rc | 3 --- dll/win32/msacm32/lang/msacm_Zh.rc | 3 --- dll/win32/msacm32/msacm.rc | 1 - dll/win32/mshtml/lang/Da.rc | 2 -- dll/win32/mshtml/lang/De.rc | 2 -- dll/win32/mshtml/lang/Fr.rc | 3 --- dll/win32/mshtml/lang/Hu.rc | 3 --- dll/win32/mshtml/lang/It.rc | 3 --- dll/win32/mshtml/lang/Ja.rc | 3 --- dll/win32/mshtml/lang/Lt.rc | 3 --- dll/win32/mshtml/lang/No.rc | 2 -- dll/win32/mshtml/lang/Pt.rc | 2 -- dll/win32/mshtml/lang/Ro.rc | 2 -- dll/win32/mshtml/lang/Ru.rc | 3 --- dll/win32/mshtml/lang/Si.rc | 2 -- dll/win32/mshtml/lang/Uk.rc | 3 --- dll/win32/mshtml/lang/Zh.rc | 3 --- dll/win32/msrle32/lang/msrle_Bg.rc | 2 -- dll/win32/msrle32/lang/msrle_Cs.rc | 2 -- dll/win32/msrle32/lang/msrle_Cy.rc | 4 ---- dll/win32/msrle32/lang/msrle_Da.rc | 2 -- dll/win32/msrle32/lang/msrle_De.rc | 4 ---- dll/win32/msrle32/lang/msrle_En.rc | 4 ---- dll/win32/msrle32/lang/msrle_Es.rc | 2 -- dll/win32/msrle32/lang/msrle_Fr.rc | 5 ----- dll/win32/msrle32/lang/msrle_He.rc | 4 ---- dll/win32/msrle32/lang/msrle_Hu.rc | 2 -- dll/win32/msrle32/lang/msrle_It.rc | 2 -- dll/win32/msrle32/lang/msrle_Ja.rc | 5 ----- dll/win32/msrle32/lang/msrle_Ko.rc | 2 -- dll/win32/msrle32/lang/msrle_Lt.rc | 5 ----- dll/win32/msrle32/lang/msrle_Nl.rc | 2 -- dll/win32/msrle32/lang/msrle_No.rc | 2 -- dll/win32/msrle32/lang/msrle_Pl.rc | 2 -- dll/win32/msrle32/lang/msrle_Pt.rc | 2 -- dll/win32/msrle32/lang/msrle_Ro.rc | 4 ---- dll/win32/msrle32/lang/msrle_Ru.rc | 5 ----- dll/win32/msrle32/lang/msrle_Si.rc | 4 ---- dll/win32/msrle32/lang/msrle_Sq.rc | 4 ---- dll/win32/msrle32/lang/msrle_Sv.rc | 2 -- dll/win32/msrle32/lang/msrle_Tr.rc | 2 -- dll/win32/msrle32/lang/msrle_Uk.rc | 5 ----- dll/win32/msrle32/lang/msrle_Zh.rc | 5 ----- dll/win32/msvfw32/lang/msvfw32_De.rc | 2 -- dll/win32/msvfw32/lang/msvfw32_Es.rc | 2 -- dll/win32/msvfw32/lang/msvfw32_Fr.rc | 3 --- dll/win32/msvfw32/lang/msvfw32_It.rc | 3 --- dll/win32/msvfw32/lang/msvfw32_Lt.rc | 3 --- dll/win32/msvfw32/lang/msvfw32_Ro.rc | 2 -- dll/win32/msvfw32/lang/msvfw32_Ru.rc | 3 --- dll/win32/msvfw32/lang/msvfw32_Si.rc | 2 -- dll/win32/msvfw32/lang/msvfw32_Uk.rc | 3 --- dll/win32/msvfw32/lang/msvfw32_Zh.rc | 3 --- dll/win32/msvfw32/rsrc.rc | 1 - dll/win32/msvidc32/lang/msvidc32_De.rc | 2 -- dll/win32/msvidc32/lang/msvidc32_Es.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_Fr.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_It.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_Ja.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_Lt.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_Ro.rc | 2 -- dll/win32/msvidc32/lang/msvidc32_Ru.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_Si.rc | 2 -- dll/win32/msvidc32/lang/msvidc32_Uk.rc | 3 --- dll/win32/msvidc32/lang/msvidc32_Zh.rc | 3 --- dll/win32/netcfgx/netcfgx.rc | 6 +++--- dll/win32/oleacc/lang/oleacc_De.rc | 2 -- dll/win32/oleacc/lang/oleacc_Fr.rc | 3 --- dll/win32/oleacc/lang/oleacc_Hu.rc | 3 --- dll/win32/oleacc/lang/oleacc_It.rc | 3 --- dll/win32/oleacc/lang/oleacc_Lt.rc | 3 --- dll/win32/oleacc/lang/oleacc_No.rc | 3 --- dll/win32/oleacc/lang/oleacc_Pt.rc | 2 -- dll/win32/oleacc/lang/oleacc_Ro.rc | 2 -- dll/win32/oleacc/lang/oleacc_Si.rc | 2 -- dll/win32/oleacc/lang/oleacc_Uk.rc | 3 --- dll/win32/oleacc/lang/oleacc_Zh.rc | 3 --- dll/win32/oleaut32/lang/oleaut32_De.rc | 2 -- dll/win32/oleaut32/lang/oleaut32_Lt.rc | 3 --- dll/win32/oleaut32/lang/oleaut32_Ro.rc | 2 -- dll/win32/oleaut32/lang/oleaut32_Ru.rc | 3 --- dll/win32/oleaut32/lang/oleaut32_Si.rc | 2 -- dll/win32/oleaut32/lang/oleaut32_Uk.rc | 3 --- dll/win32/oleaut32/lang/oleaut32_Zh.rc | 3 --- dll/win32/oledlg/lang/oledlg_De.rc | 2 -- dll/win32/oledlg/lang/oledlg_Fr.rc | 3 --- dll/win32/oledlg/lang/oledlg_Hu.rc | 3 --- dll/win32/oledlg/lang/oledlg_It.rc | 3 --- dll/win32/oledlg/lang/oledlg_Ja.rc | 3 --- dll/win32/oledlg/lang/oledlg_Lt.rc | 3 --- dll/win32/oledlg/lang/oledlg_Nl.rc | 2 -- dll/win32/oledlg/lang/oledlg_Pt.rc | 2 -- dll/win32/oledlg/lang/oledlg_Ro.rc | 2 -- dll/win32/oledlg/lang/oledlg_Ru.rc | 3 --- dll/win32/oledlg/lang/oledlg_Si.rc | 2 -- dll/win32/oledlg/lang/oledlg_Uk.rc | 3 --- dll/win32/oledlg/lang/oledlg_Zh.rc | 3 --- dll/win32/shlwapi/lang/de-DE.rc | 2 -- dll/win32/shlwapi/lang/fr-FR.rc | 3 --- dll/win32/shlwapi/lang/hu-HU.rc | 3 --- dll/win32/shlwapi/lang/ja-JP.rc | 3 --- dll/win32/shlwapi/lang/lt-LT.rc | 3 --- dll/win32/shlwapi/lang/pt-PT.rc | 2 -- dll/win32/shlwapi/lang/ro-RO.rc | 2 -- dll/win32/shlwapi/lang/ru-RU.rc | 3 --- dll/win32/shlwapi/lang/sl-SI.rc | 2 -- dll/win32/shlwapi/lang/uk-UA.rc | 3 --- dll/win32/shlwapi/lang/zh-CN.rc | 3 --- dll/win32/shlwapi/lang/zh-TW.rc | 3 --- dll/win32/themeui/themeui.rc | 1 + dll/win32/wininet/lang/wininet_Da.rc | 2 -- dll/win32/wininet/lang/wininet_De.rc | 2 -- dll/win32/wininet/lang/wininet_Fr.rc | 3 --- dll/win32/wininet/lang/wininet_He.rc | 2 -- dll/win32/wininet/lang/wininet_Hu.rc | 3 --- dll/win32/wininet/lang/wininet_It.rc | 3 --- dll/win32/wininet/lang/wininet_Ja.rc | 3 --- dll/win32/wininet/lang/wininet_Ko.rc | 2 -- dll/win32/wininet/lang/wininet_Lt.rc | 3 --- dll/win32/wininet/lang/wininet_Nl.rc | 2 -- dll/win32/wininet/lang/wininet_No.rc | 2 -- dll/win32/wininet/lang/wininet_Pt.rc | 2 -- dll/win32/wininet/lang/wininet_Ro.rc | 2 -- dll/win32/wininet/lang/wininet_Ru.rc | 3 --- dll/win32/wininet/lang/wininet_Si.rc | 2 -- dll/win32/wininet/lang/wininet_Sr.rc | 2 -- dll/win32/wininet/lang/wininet_Uk.rc | 3 --- dll/win32/wininet/lang/wininet_Zh.rc | 3 --- dll/win32/winmm/lang/winmm_Br.rc | 4 +++- dll/win32/winmm/lang/winmm_Cs.rc | 4 +++- dll/win32/winmm/lang/winmm_De.rc | 4 +++- dll/win32/winmm/lang/winmm_En.rc | 4 +++- dll/win32/winmm/lang/winmm_Es.rc | 4 +++- dll/win32/winmm/lang/winmm_Hu.rc | 4 +++- dll/win32/winmm/lang/winmm_Id.rc | 3 ++- dll/win32/winmm/lang/winmm_It.rc | 4 +++- dll/win32/winmm/lang/winmm_Ja.rc | 4 +++- dll/win32/winmm/lang/winmm_Nl.rc | 4 +++- dll/win32/winmm/lang/winmm_No.rc | 4 +++- dll/win32/winmm/lang/winmm_Pl.rc | 4 +++- dll/win32/winmm/lang/winmm_Pt.rc | 4 +++- dll/win32/winmm/lang/winmm_Ro.rc | 4 +++- dll/win32/winmm/lang/winmm_Ru.rc | 10 ++++------ dll/win32/winmm/lang/winmm_Si.rc | 4 +++- dll/win32/winmm/lang/winmm_Sk.rc | 4 +++- dll/win32/winmm/lang/winmm_Sq.rc | 4 +++- dll/win32/winmm/lang/winmm_Tr.rc | 4 +++- dll/win32/winmm/lang/winmm_Uk.rc | 5 ++--- dll/win32/winmm/lang/winmm_Zh.rc | 11 +++++++---- dll/win32/wldap32/lang/wldap32_De.rc | 2 -- dll/win32/wldap32/lang/wldap32_Fr.rc | 3 --- dll/win32/wldap32/lang/wldap32_Hu.rc | 3 --- dll/win32/wldap32/lang/wldap32_It.rc | 3 --- dll/win32/wldap32/lang/wldap32_Lt.rc | 3 --- dll/win32/wldap32/lang/wldap32_Pt.rc | 2 -- dll/win32/wldap32/lang/wldap32_Ro.rc | 2 -- dll/win32/wldap32/lang/wldap32_Ru.rc | 3 --- dll/win32/wldap32/lang/wldap32_Uk.rc | 3 --- dll/win32/wldap32/lang/wldap32_Zh.rc | 3 --- .../Blackshade/blackshade.msstyles/blackshade.rc | 1 + media/themes/Lautus/lautus.msstyles/lautus.rc | 1 + media/themes/Lunar/lunar.msstyles/lunar.rc | 1 + media/themes/Mizu/mizu.msstyles/mizu.rc | 1 + media/themes/Modern/modern.msstyles/modern.rc | 3 ++- .../applications/screensavers/blankscr/lang/ro-RO.rc | 2 -- .../screensavers/butterflies/lang/ro-RO.rc | 2 -- .../applications/screensavers/circles/lang/ro-RO.rc | 2 -- .../applications/screensavers/matrix/lang/bg-BG.rc | 1 - .../applications/screensavers/matrix/lang/de-DE.rc | 1 - .../applications/screensavers/matrix/lang/en-US.rc | 1 - .../applications/screensavers/matrix/lang/es-ES.rc | 1 - .../applications/screensavers/matrix/lang/fr-FR.rc | 1 - .../applications/screensavers/matrix/lang/lt-LT.rc | 2 -- .../applications/screensavers/matrix/lang/nl-NL.rc | 1 - .../applications/screensavers/matrix/lang/no-NO.rc | 1 - .../applications/screensavers/matrix/lang/pl-PL.rc | 2 -- .../applications/screensavers/matrix/lang/ro-RO.rc | 4 ---- .../applications/screensavers/matrix/lang/ru-RU.rc | 2 -- .../applications/screensavers/matrix/lang/sk-SK.rc | 2 -- .../applications/screensavers/matrix/lang/th-TH.rc | 1 - .../applications/screensavers/matrix/lang/tr-TR.rc | 2 -- .../applications/screensavers/matrix/lang/uk-UA.rc | 2 -- .../applications/screensavers/matrix/lang/zh-CN.rc | 2 -- .../applications/screensavers/matrix/lang/zh-HK.rc | 2 -- .../applications/screensavers/matrix/lang/zh-TW.rc | 2 -- .../applications/screensavers/starfield/lang/ro-RO.rc | 2 -- .../applications/sysutils/fontsub/fontsub_res.rc | 6 +++--- .../applications/sysutils/fontsub/lang/de-DE.rc | 3 --- .../applications/sysutils/fontsub/lang/en-US.rc | 3 --- .../applications/sysutils/fontsub/lang/es-ES.rc | 3 --- .../applications/sysutils/fontsub/lang/ja-JP.rc | 3 --- .../applications/sysutils/fontsub/lang/pl-PL.rc | 3 --- .../applications/sysutils/fontsub/lang/ru-RU.rc | 3 --- .../applications/sysutils/fontsub/lang/tr-TR.rc | 3 --- .../applications/sysutils/fontsub/lang/zh-CN.rc | 3 --- .../applications/sysutils/fontsub/lang/zh-HK.rc | 3 --- .../applications/sysutils/fontsub/lang/zh-TW.rc | 3 --- modules/rostests/apitests/imm32/resource.rc | 4 +++- modules/rostests/winetests/GUI/WinetestsGUI.rc | 1 - win32ss/printing/monitors/localmon/ui/lang/ui_De.rc | 2 -- win32ss/printing/monitors/localmon/ui/lang/ui_Es.rc | 2 -- win32ss/printing/monitors/localmon/ui/lang/ui_Fr.rc | 2 -- win32ss/printing/monitors/localmon/ui/lang/ui_Hu.rc | 3 --- win32ss/printing/monitors/localmon/ui/lang/ui_It.rc | 3 --- win32ss/printing/monitors/localmon/ui/lang/ui_Ja.rc | 3 --- win32ss/printing/monitors/localmon/ui/lang/ui_Lt.rc | 3 --- win32ss/printing/monitors/localmon/ui/lang/ui_Ro.rc | 2 -- win32ss/printing/monitors/localmon/ui/lang/ui_Ru.rc | 3 --- win32ss/printing/monitors/localmon/ui/lang/ui_Si.rc | 2 -- win32ss/printing/monitors/localmon/ui/lang/ui_Uk.rc | 3 --- win32ss/printing/monitors/localmon/ui/lang/ui_Zh.rc | 3 --- 362 files changed, 110 insertions(+), 867 deletions(-) diff --git a/base/applications/cmdutils/at/at.rc b/base/applications/cmdutils/at/at.rc index 364297c3f66a0..da29a956e2441 100644 --- a/base/applications/cmdutils/at/at.rc +++ b/base/applications/cmdutils/at/at.rc @@ -9,6 +9,7 @@ /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/base/applications/cmdutils/fc/fc.rc b/base/applications/cmdutils/fc/fc.rc index d9199235b45d6..77890c55ad8d9 100644 --- a/base/applications/cmdutils/fc/fc.rc +++ b/base/applications/cmdutils/fc/fc.rc @@ -6,7 +6,9 @@ #define REACTOS_STR_ORIGINAL_FILENAME "fc.exe" #include -#pragma code_page(65001) /* UTF-8 */ +/* UTF-8 */ +#pragma code_page(65001) + #ifdef LANGUAGE_BG_BG #include "lang/bg-BG.rc" #endif diff --git a/base/applications/cmdutils/find/find.rc b/base/applications/cmdutils/find/find.rc index 71239582b07f7..b023b942a4918 100644 --- a/base/applications/cmdutils/find/find.rc +++ b/base/applications/cmdutils/find/find.rc @@ -9,6 +9,7 @@ /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_BG_BG #include "lang/bg-BG.rc" #endif diff --git a/base/applications/cmdutils/help/help.rc b/base/applications/cmdutils/help/help.rc index e0b22790180ed..bde222b397f5f 100644 --- a/base/applications/cmdutils/help/help.rc +++ b/base/applications/cmdutils/help/help.rc @@ -12,6 +12,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/base/applications/cmdutils/tasklist/tasklist.rc b/base/applications/cmdutils/tasklist/tasklist.rc index 7f85446d43602..7a01c6003c974 100644 --- a/base/applications/cmdutils/tasklist/tasklist.rc +++ b/base/applications/cmdutils/tasklist/tasklist.rc @@ -9,6 +9,7 @@ /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_BG_BG #include "lang/bg-BG.rc" #endif diff --git a/base/applications/cmdutils/tree/tree.rc b/base/applications/cmdutils/tree/tree.rc index 63ce24f11b203..506578e6f6316 100644 --- a/base/applications/cmdutils/tree/tree.rc +++ b/base/applications/cmdutils/tree/tree.rc @@ -11,6 +11,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/base/applications/cmdutils/where/where.rc b/base/applications/cmdutils/where/where.rc index 115d90a45b6f5..919dc71a35d2c 100644 --- a/base/applications/cmdutils/where/where.rc +++ b/base/applications/cmdutils/where/where.rc @@ -6,7 +6,8 @@ #define REACTOS_STR_ORIGINAL_FILENAME "where.exe" #include -#pragma code_page(65001) /* UTF-8 */ +/* UTF-8 */ +#pragma code_page(65001) #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" diff --git a/base/applications/network/dwnl/dwnl.rc b/base/applications/network/dwnl/dwnl.rc index 8047407d55166..070a9b477b3b0 100644 --- a/base/applications/network/dwnl/dwnl.rc +++ b/base/applications/network/dwnl/dwnl.rc @@ -11,6 +11,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/base/applications/network/tracert/tracert.rc b/base/applications/network/tracert/tracert.rc index a39998756f251..6d24085060ecd 100644 --- a/base/applications/network/tracert/tracert.rc +++ b/base/applications/network/tracert/tracert.rc @@ -7,7 +7,6 @@ #define REACTOS_STR_ORIGINAL_COPYRIGHT "Ged Murphy (gedmurphy@reactos.org)" #include - /* UTF-8 */ #pragma code_page(65001) diff --git a/base/applications/osk/osk.rc b/base/applications/osk/osk.rc index a599e61618498..307fc801c8181 100644 --- a/base/applications/osk/osk.rc +++ b/base/applications/osk/osk.rc @@ -6,6 +6,7 @@ */ /* INCLUDES ******************************************************************/ + #include "precomp.h" #define REACTOS_STR_FILE_DESCRIPTION "ReactOS On Screen Keyboard" @@ -17,7 +18,6 @@ IDI_OSK ICON "res/osk.ico" IDI_SOUNDCLICK WAVE "res/click.wav" - IDI_BACK ICON "res/back.ico" IDI_TAB ICON "res/tab.ico" IDI_CAPS_LOCK ICON "res/caps_lock.ico" @@ -35,8 +35,9 @@ IDI_BOTTOM ICON "res/bottom.ico" #include -// UTF-8 +/* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_AR_DZ #include "lang/ar-DZ.rc" #endif @@ -100,4 +101,5 @@ IDI_BOTTOM ICON "res/bottom.ico" #ifdef LANGUAGE_ZH_TW #include "lang/zh-TW.rc" #endif + /* EOF */ diff --git a/base/applications/regedit/clb/clb.rc b/base/applications/regedit/clb/clb.rc index fa642311fb79a..b6567cb7f5706 100644 --- a/base/applications/regedit/clb/clb.rc +++ b/base/applications/regedit/clb/clb.rc @@ -12,7 +12,6 @@ #include - /* UTF-8 */ #pragma code_page(65001) diff --git a/base/system/services/services.rc b/base/system/services/services.rc index 4b58c2a343af2..e7c3cc7574fff 100644 --- a/base/system/services/services.rc +++ b/base/system/services/services.rc @@ -8,7 +8,6 @@ #define REACTOS_STR_ORIGINAL_FILENAME "services.exe" #include - /* UTF-8 */ #pragma code_page(65001) diff --git a/dll/cpl/console/console.rc b/dll/cpl/console/console.rc index 8143555c8056b..74e1f7b279c22 100644 --- a/dll/cpl/console/console.rc +++ b/dll/cpl/console/console.rc @@ -12,6 +12,8 @@ #include "resource.h" +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Control Panel Console Applet" #define REACTOS_STR_INTERNAL_NAME "console" @@ -22,8 +24,6 @@ IDC_CPLICON ICON "res/terminal.ico" #include -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL - /* UTF-8 */ #pragma code_page(65001) diff --git a/dll/cpl/inetcpl/inetcpl.rc b/dll/cpl/inetcpl/inetcpl.rc index 23f939ca7e9c5..3c4218072af09 100644 --- a/dll/cpl/inetcpl/inetcpl.rc +++ b/dll/cpl/inetcpl/inetcpl.rc @@ -21,7 +21,6 @@ #include "inetcpl.h" - #include /* UTF-8 */ diff --git a/dll/cpl/inetcpl/lang/He.rc b/dll/cpl/inetcpl/lang/He.rc index a320c602cd19d..af905ea975bdc 100644 --- a/dll/cpl/inetcpl/lang/He.rc +++ b/dll/cpl/inetcpl/lang/He.rc @@ -22,8 +22,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/Sr.rc b/dll/cpl/inetcpl/lang/Sr.rc index c205f51c0191c..ffa8e14b5c681 100644 --- a/dll/cpl/inetcpl/lang/Sr.rc +++ b/dll/cpl/inetcpl/lang/Sr.rc @@ -20,8 +20,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/cs-CZ.rc b/dll/cpl/inetcpl/lang/cs-CZ.rc index 411a5d5607146..30bbcdcb62919 100644 --- a/dll/cpl/inetcpl/lang/cs-CZ.rc +++ b/dll/cpl/inetcpl/lang/cs-CZ.rc @@ -3,9 +3,6 @@ * UPDATED: 2014-04-21 */ - /* UTF-8 */ - #pragma code_page(65001) - LANGUAGE LANG_CZECH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/de-DE.rc b/dll/cpl/inetcpl/lang/de-DE.rc index 713072838260e..bc9132464bbd8 100644 --- a/dll/cpl/inetcpl/lang/de-DE.rc +++ b/dll/cpl/inetcpl/lang/de-DE.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/fr-FR.rc b/dll/cpl/inetcpl/lang/fr-FR.rc index 7f3f169456cca..b2d5a43314d33 100644 --- a/dll/cpl/inetcpl/lang/fr-FR.rc +++ b/dll/cpl/inetcpl/lang/fr-FR.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/it-IT.rc b/dll/cpl/inetcpl/lang/it-IT.rc index 8193d19262e05..c5db21ad75e36 100644 --- a/dll/cpl/inetcpl/lang/it-IT.rc +++ b/dll/cpl/inetcpl/lang/it-IT.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/ja-JP.rc b/dll/cpl/inetcpl/lang/ja-JP.rc index c50a0ef068e05..fdb15f7b1b3b6 100644 --- a/dll/cpl/inetcpl/lang/ja-JP.rc +++ b/dll/cpl/inetcpl/lang/ja-JP.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/ko-KR.rc b/dll/cpl/inetcpl/lang/ko-KR.rc index 3032ba5ced12a..56200e37ae6a2 100644 --- a/dll/cpl/inetcpl/lang/ko-KR.rc +++ b/dll/cpl/inetcpl/lang/ko-KR.rc @@ -20,8 +20,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/lt-LT.rc b/dll/cpl/inetcpl/lang/lt-LT.rc index d37d53cdf7dda..2abd4e32eba68 100644 --- a/dll/cpl/inetcpl/lang/lt-LT.rc +++ b/dll/cpl/inetcpl/lang/lt-LT.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/pl-PL.rc b/dll/cpl/inetcpl/lang/pl-PL.rc index dbb04c95e6178..bfd6b32ebb797 100644 --- a/dll/cpl/inetcpl/lang/pl-PL.rc +++ b/dll/cpl/inetcpl/lang/pl-PL.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_POLISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/pt-BR.rc b/dll/cpl/inetcpl/lang/pt-BR.rc index d8fc04bc5f219..71a4816e03377 100644 --- a/dll/cpl/inetcpl/lang/pt-BR.rc +++ b/dll/cpl/inetcpl/lang/pt-BR.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/pt-PT.rc b/dll/cpl/inetcpl/lang/pt-PT.rc index 3b5c9191ca027..65f07cd267d4d 100644 --- a/dll/cpl/inetcpl/lang/pt-PT.rc +++ b/dll/cpl/inetcpl/lang/pt-PT.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/ru-RU.rc b/dll/cpl/inetcpl/lang/ru-RU.rc index 9a283ecc087a4..19b2870bda940 100644 --- a/dll/cpl/inetcpl/lang/ru-RU.rc +++ b/dll/cpl/inetcpl/lang/ru-RU.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/sv-SE.rc b/dll/cpl/inetcpl/lang/sv-SE.rc index 60887d9a7bf4d..fd6779cc7e183 100644 --- a/dll/cpl/inetcpl/lang/sv-SE.rc +++ b/dll/cpl/inetcpl/lang/sv-SE.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/tr-TR.rc b/dll/cpl/inetcpl/lang/tr-TR.rc index b8897f98a5227..24025e35808e0 100644 --- a/dll/cpl/inetcpl/lang/tr-TR.rc +++ b/dll/cpl/inetcpl/lang/tr-TR.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/cpl/inetcpl/lang/uk-UA.rc b/dll/cpl/inetcpl/lang/uk-UA.rc index debac95408d51..27925e9ec001b 100644 --- a/dll/cpl/inetcpl/lang/uk-UA.rc +++ b/dll/cpl/inetcpl/lang/uk-UA.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/shellext/mydocs/mydocs.rc b/dll/shellext/mydocs/mydocs.rc index ec24cb9414b8c..9a9aa19a3c16e 100644 --- a/dll/shellext/mydocs/mydocs.rc +++ b/dll/shellext/mydocs/mydocs.rc @@ -9,18 +9,18 @@ #include #include "resource.h" -#include "mydocs_version.rc" - -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#include "mydocs_version.rc" + 100 ICON "../../win32/shell32/res/icons/235.ico" // IDI_SHELL_MY_DOCUMENTS 101 ICON "../../win32/shell32/res/icons/236.ico" // IDI_SHELL_MY_PICTURES IDR_MYDOCS REGISTRY "res/mydocs.rgs" +/* UTF-8 */ +#pragma code_page(65001) + #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/dll/shellext/sendmail/sendmail.rc b/dll/shellext/sendmail/sendmail.rc index 378b89f444570..c209b8c4f63f7 100644 --- a/dll/shellext/sendmail/sendmail.rc +++ b/dll/shellext/sendmail/sendmail.rc @@ -9,15 +9,15 @@ #include #include "resource.h" +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + #include "sendmail_version.rc" +IDR_DESKLINK REGISTRY "res/desklink.rgs" + /* UTF-8 */ #pragma code_page(65001) -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL - -IDR_DESKLINK REGISTRY "res/desklink.rgs" - #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/dll/shellext/zipfldr/zipfldr.rc b/dll/shellext/zipfldr/zipfldr.rc index 83d736fefd446..8f6b7b9279c68 100644 --- a/dll/shellext/zipfldr/zipfldr.rc +++ b/dll/shellext/zipfldr/zipfldr.rc @@ -22,7 +22,6 @@ IDR_ZIPFLDR REGISTRY "res/zipfldr.rgs" /* UTF-8 */ #pragma code_page(65001) - #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/dll/win32/comdlg32/rsrc.rc b/dll/win32/comdlg32/rsrc.rc index efaec2a50240d..3b589a7c67d1c 100644 --- a/dll/win32/comdlg32/rsrc.rc +++ b/dll/win32/comdlg32/rsrc.rc @@ -42,7 +42,8 @@ * get localized bitmaps for example. */ -#pragma code_page(65001) // UTF-8 +/* UTF-8 */ +#pragma code_page(65001) #ifdef LANGUAGE_BG_BG #include "lang/cdlg_Bg.rc" diff --git a/dll/win32/credui/lang/credui_Da.rc b/dll/win32/credui/lang/credui_Da.rc index 522037a4d3507..fab8e914c51d4 100644 --- a/dll/win32/credui/lang/credui_Da.rc +++ b/dll/win32/credui/lang/credui_Da.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_DANISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/credui/lang/credui_De.rc b/dll/win32/credui/lang/credui_De.rc index a8177d8dfb7e2..ede8139eb8ace 100644 --- a/dll/win32/credui/lang/credui_De.rc +++ b/dll/win32/credui/lang/credui_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Es.rc b/dll/win32/credui/lang/credui_Es.rc index fef58e72e203b..087d5825aa4ca 100644 --- a/dll/win32/credui/lang/credui_Es.rc +++ b/dll/win32/credui/lang/credui_Es.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Fr.rc b/dll/win32/credui/lang/credui_Fr.rc index e59b5f1c23f10..3f5cf64c186a8 100644 --- a/dll/win32/credui/lang/credui_Fr.rc +++ b/dll/win32/credui/lang/credui_Fr.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Hu.rc b/dll/win32/credui/lang/credui_Hu.rc index d47d24b899c8a..7aadcd3e907e8 100644 --- a/dll/win32/credui/lang/credui_Hu.rc +++ b/dll/win32/credui/lang/credui_Hu.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/credui/lang/credui_It.rc b/dll/win32/credui/lang/credui_It.rc index 5889170325416..961d75066686f 100644 --- a/dll/win32/credui/lang/credui_It.rc +++ b/dll/win32/credui/lang/credui_It.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Lt.rc b/dll/win32/credui/lang/credui_Lt.rc index f6cc96ddfcbb7..cb0db4b4a49cf 100644 --- a/dll/win32/credui/lang/credui_Lt.rc +++ b/dll/win32/credui/lang/credui_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Pt.rc b/dll/win32/credui/lang/credui_Pt.rc index a5579fb1d1d0b..29cb751b38acf 100644 --- a/dll/win32/credui/lang/credui_Pt.rc +++ b/dll/win32/credui/lang/credui_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Ro.rc b/dll/win32/credui/lang/credui_Ro.rc index f032f1ab510db..941f8e349de27 100644 --- a/dll/win32/credui/lang/credui_Ro.rc +++ b/dll/win32/credui/lang/credui_Ro.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Ru.rc b/dll/win32/credui/lang/credui_Ru.rc index 504e2ad7546ff..6f319c57b4f41 100644 --- a/dll/win32/credui/lang/credui_Ru.rc +++ b/dll/win32/credui/lang/credui_Ru.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Si.rc b/dll/win32/credui/lang/credui_Si.rc index 92041812a48a3..88d4570c425ac 100644 --- a/dll/win32/credui/lang/credui_Si.rc +++ b/dll/win32/credui/lang/credui_Si.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Uk.rc b/dll/win32/credui/lang/credui_Uk.rc index 50f7ed5a61c6e..a1dca8fd138c4 100644 --- a/dll/win32/credui/lang/credui_Uk.rc +++ b/dll/win32/credui/lang/credui_Uk.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/credui/lang/credui_Zh.rc b/dll/win32/credui/lang/credui_Zh.rc index 6dc6e702920b9..277a788491010 100644 --- a/dll/win32/credui/lang/credui_Zh.rc +++ b/dll/win32/credui/lang/credui_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_De.rc b/dll/win32/cryptdlg/lang/cryptdlg_De.rc index 6550e199d5329..5d543066a1264 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_De.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Fr.rc b/dll/win32/cryptdlg/lang/cryptdlg_Fr.rc index 76b933f14c4e4..1ff68556bd63b 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Fr.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Fr.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Hu.rc b/dll/win32/cryptdlg/lang/cryptdlg_Hu.rc index 59860508291c8..8b62e041d0a80 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Hu.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Hu.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_It.rc b/dll/win32/cryptdlg/lang/cryptdlg_It.rc index 0c29429e66cab..2786b4c4f2e41 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_It.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_It.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Lt.rc b/dll/win32/cryptdlg/lang/cryptdlg_Lt.rc index 9b38e5c9e0b49..b856baf0778dd 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Lt.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_No.rc b/dll/win32/cryptdlg/lang/cryptdlg_No.rc index ae58f2532049c..3eaa6a74a1a60 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_No.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_No.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Pt.rc b/dll/win32/cryptdlg/lang/cryptdlg_Pt.rc index 81adca17db74b..b7ac445c6a88b 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Pt.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Ro.rc b/dll/win32/cryptdlg/lang/cryptdlg_Ro.rc index 3c448e3bd8c11..7b68be9e20bd4 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Ro.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Ro.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Ru.rc b/dll/win32/cryptdlg/lang/cryptdlg_Ru.rc index 0991cceb7a093..518d8d1c81b34 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Ru.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Ru.rc @@ -19,9 +19,6 @@ */ /* Russian language resource file by Kudratov Olimjon (olim98@bk.ru) */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Uk.rc b/dll/win32/cryptdlg/lang/cryptdlg_Uk.rc index 4248eb4c65e75..acf86c6454c75 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Uk.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Uk.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptdlg/lang/cryptdlg_Zh.rc b/dll/win32/cryptdlg/lang/cryptdlg_Zh.rc index 918c75b115264..815dfa758862a 100644 --- a/dll/win32/cryptdlg/lang/cryptdlg_Zh.rc +++ b/dll/win32/cryptdlg/lang/cryptdlg_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Bg.rc b/dll/win32/cryptui/lang/cryptui_Bg.rc index bdb5a2d404a48..0a7291956503d 100644 --- a/dll/win32/cryptui/lang/cryptui_Bg.rc +++ b/dll/win32/cryptui/lang/cryptui_Bg.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_De.rc b/dll/win32/cryptui/lang/cryptui_De.rc index 562f6f3ea8949..b05f3d18307c4 100644 --- a/dll/win32/cryptui/lang/cryptui_De.rc +++ b/dll/win32/cryptui/lang/cryptui_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_En.rc b/dll/win32/cryptui/lang/cryptui_En.rc index d20f90ba006e5..1e4d5cb669501 100644 --- a/dll/win32/cryptui/lang/cryptui_En.rc +++ b/dll/win32/cryptui/lang/cryptui_En.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Fr.rc b/dll/win32/cryptui/lang/cryptui_Fr.rc index 57d074348fb9c..dada7f34074f4 100644 --- a/dll/win32/cryptui/lang/cryptui_Fr.rc +++ b/dll/win32/cryptui/lang/cryptui_Fr.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_He.rc b/dll/win32/cryptui/lang/cryptui_He.rc index 52ffd73ac4b87..c875aeefcb6f1 100644 --- a/dll/win32/cryptui/lang/cryptui_He.rc +++ b/dll/win32/cryptui/lang/cryptui_He.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_It.rc b/dll/win32/cryptui/lang/cryptui_It.rc index 5fd8333dc0c91..841fcac705708 100644 --- a/dll/win32/cryptui/lang/cryptui_It.rc +++ b/dll/win32/cryptui/lang/cryptui_It.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Ko.rc b/dll/win32/cryptui/lang/cryptui_Ko.rc index 1298663d96e21..2b1cda75b3f88 100644 --- a/dll/win32/cryptui/lang/cryptui_Ko.rc +++ b/dll/win32/cryptui/lang/cryptui_Ko.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Lt.rc b/dll/win32/cryptui/lang/cryptui_Lt.rc index 2cfb5ea477193..9b49dca869d81 100644 --- a/dll/win32/cryptui/lang/cryptui_Lt.rc +++ b/dll/win32/cryptui/lang/cryptui_Lt.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Nl.rc b/dll/win32/cryptui/lang/cryptui_Nl.rc index bfb7d54677f8c..a5e7705e6efa6 100644 --- a/dll/win32/cryptui/lang/cryptui_Nl.rc +++ b/dll/win32/cryptui/lang/cryptui_Nl.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_No.rc b/dll/win32/cryptui/lang/cryptui_No.rc index 5ffbd88085468..d773603891e6f 100644 --- a/dll/win32/cryptui/lang/cryptui_No.rc +++ b/dll/win32/cryptui/lang/cryptui_No.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_NORWEGIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Pl.rc b/dll/win32/cryptui/lang/cryptui_Pl.rc index cb0a3e19fe626..9a4e3bd67dd26 100644 --- a/dll/win32/cryptui/lang/cryptui_Pl.rc +++ b/dll/win32/cryptui/lang/cryptui_Pl.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_POLISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Pt.rc b/dll/win32/cryptui/lang/cryptui_Pt.rc index d00f43016571c..3da42cd642691 100644 --- a/dll/win32/cryptui/lang/cryptui_Pt.rc +++ b/dll/win32/cryptui/lang/cryptui_Pt.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Ro.rc b/dll/win32/cryptui/lang/cryptui_Ro.rc index 0d490f78b6213..c4fa60015a38f 100644 --- a/dll/win32/cryptui/lang/cryptui_Ro.rc +++ b/dll/win32/cryptui/lang/cryptui_Ro.rc @@ -22,8 +22,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Ru.rc b/dll/win32/cryptui/lang/cryptui_Ru.rc index a7c71c2ab97f5..5bd0becef11ca 100644 --- a/dll/win32/cryptui/lang/cryptui_Ru.rc +++ b/dll/win32/cryptui/lang/cryptui_Ru.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Sq.rc b/dll/win32/cryptui/lang/cryptui_Sq.rc index 4051dee27dd76..67dabbd0fa39f 100644 --- a/dll/win32/cryptui/lang/cryptui_Sq.rc +++ b/dll/win32/cryptui/lang/cryptui_Sq.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Tr.rc b/dll/win32/cryptui/lang/cryptui_Tr.rc index 7ff03ccc66601..acdd95038bd0f 100644 --- a/dll/win32/cryptui/lang/cryptui_Tr.rc +++ b/dll/win32/cryptui/lang/cryptui_Tr.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Uk.rc b/dll/win32/cryptui/lang/cryptui_Uk.rc index 3f95e2b8ce9f1..6c4166fafd2bb 100644 --- a/dll/win32/cryptui/lang/cryptui_Uk.rc +++ b/dll/win32/cryptui/lang/cryptui_Uk.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "cryptuires.h" - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/cryptui/lang/cryptui_Zh.rc b/dll/win32/cryptui/lang/cryptui_Zh.rc index 24f1089ff42a5..acc1bf434a342 100644 --- a/dll/win32/cryptui/lang/cryptui_Zh.rc +++ b/dll/win32/cryptui/lang/cryptui_Zh.rc @@ -21,11 +21,6 @@ * Copyright 2021 Chan Chilung */ -#include "cryptuires.h" - -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/De.rc b/dll/win32/hhctrl.ocx/lang/De.rc index a88450e4bba02..5e56c0c78abdb 100644 --- a/dll/win32/hhctrl.ocx/lang/De.rc +++ b/dll/win32/hhctrl.ocx/lang/De.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Es.rc b/dll/win32/hhctrl.ocx/lang/Es.rc index 879dae1e77829..8dfd6e950e1bd 100644 --- a/dll/win32/hhctrl.ocx/lang/Es.rc +++ b/dll/win32/hhctrl.ocx/lang/Es.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Fr.rc b/dll/win32/hhctrl.ocx/lang/Fr.rc index 8fb8de93d1048..8bc687255e006 100644 --- a/dll/win32/hhctrl.ocx/lang/Fr.rc +++ b/dll/win32/hhctrl.ocx/lang/Fr.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/It.rc b/dll/win32/hhctrl.ocx/lang/It.rc index 5a934a5cca240..98660dd29abd3 100644 --- a/dll/win32/hhctrl.ocx/lang/It.rc +++ b/dll/win32/hhctrl.ocx/lang/It.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Ja.rc b/dll/win32/hhctrl.ocx/lang/Ja.rc index a359e8bed0cb9..8df2ff64cdca3 100644 --- a/dll/win32/hhctrl.ocx/lang/Ja.rc +++ b/dll/win32/hhctrl.ocx/lang/Ja.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Lt.rc b/dll/win32/hhctrl.ocx/lang/Lt.rc index c01d293968ae2..107728e5d756d 100644 --- a/dll/win32/hhctrl.ocx/lang/Lt.rc +++ b/dll/win32/hhctrl.ocx/lang/Lt.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Pt.rc b/dll/win32/hhctrl.ocx/lang/Pt.rc index 9555029935204..8438b3171ab5b 100644 --- a/dll/win32/hhctrl.ocx/lang/Pt.rc +++ b/dll/win32/hhctrl.ocx/lang/Pt.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Ro.rc b/dll/win32/hhctrl.ocx/lang/Ro.rc index 97555fc898aab..2e3e63ba3b96a 100644 --- a/dll/win32/hhctrl.ocx/lang/Ro.rc +++ b/dll/win32/hhctrl.ocx/lang/Ro.rc @@ -23,8 +23,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE BEGIN #ifdef __REACTOS__ diff --git a/dll/win32/hhctrl.ocx/lang/Ru.rc b/dll/win32/hhctrl.ocx/lang/Ru.rc index 62cef188c0602..742a83f210aa1 100644 --- a/dll/win32/hhctrl.ocx/lang/Ru.rc +++ b/dll/win32/hhctrl.ocx/lang/Ru.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Si.rc b/dll/win32/hhctrl.ocx/lang/Si.rc index 9c62b7b77fc5f..155fe4ecdbe6c 100644 --- a/dll/win32/hhctrl.ocx/lang/Si.rc +++ b/dll/win32/hhctrl.ocx/lang/Si.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Uk.rc b/dll/win32/hhctrl.ocx/lang/Uk.rc index 6bd8fe2650a34..5d19e3e02b128 100644 --- a/dll/win32/hhctrl.ocx/lang/Uk.rc +++ b/dll/win32/hhctrl.ocx/lang/Uk.rc @@ -21,9 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/hhctrl.ocx/lang/Zh.rc b/dll/win32/hhctrl.ocx/lang/Zh.rc index cedf748a8966e..a885cc1169388 100644 --- a/dll/win32/hhctrl.ocx/lang/Zh.rc +++ b/dll/win32/hhctrl.ocx/lang/Zh.rc @@ -19,9 +19,6 @@ * Copyright 2021-2022 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_De.rc b/dll/win32/iccvid/lang/iccvid_De.rc index ed20fc7cbedb5..d757199e0a0e3 100644 --- a/dll/win32/iccvid/lang/iccvid_De.rc +++ b/dll/win32/iccvid/lang/iccvid_De.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Es.rc b/dll/win32/iccvid/lang/iccvid_Es.rc index de6e94ea44136..746995d3538fe 100644 --- a/dll/win32/iccvid/lang/iccvid_Es.rc +++ b/dll/win32/iccvid/lang/iccvid_Es.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Fr.rc b/dll/win32/iccvid/lang/iccvid_Fr.rc index 5998b611ad5a9..9fc32549e757e 100644 --- a/dll/win32/iccvid/lang/iccvid_Fr.rc +++ b/dll/win32/iccvid/lang/iccvid_Fr.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_It.rc b/dll/win32/iccvid/lang/iccvid_It.rc index f1d90385e794c..33c63721fdc6c 100644 --- a/dll/win32/iccvid/lang/iccvid_It.rc +++ b/dll/win32/iccvid/lang/iccvid_It.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Ja.rc b/dll/win32/iccvid/lang/iccvid_Ja.rc index 9b0bac197d9d1..d00995cd78b90 100644 --- a/dll/win32/iccvid/lang/iccvid_Ja.rc +++ b/dll/win32/iccvid/lang/iccvid_Ja.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Lt.rc b/dll/win32/iccvid/lang/iccvid_Lt.rc index a46b01caa1a00..af8b0f7c2ae55 100644 --- a/dll/win32/iccvid/lang/iccvid_Lt.rc +++ b/dll/win32/iccvid/lang/iccvid_Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Ro.rc b/dll/win32/iccvid/lang/iccvid_Ro.rc index 191539ef927d2..9d8f2d544012a 100644 --- a/dll/win32/iccvid/lang/iccvid_Ro.rc +++ b/dll/win32/iccvid/lang/iccvid_Ro.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Ru.rc b/dll/win32/iccvid/lang/iccvid_Ru.rc index 4909cf0640847..333d709675c68 100644 --- a/dll/win32/iccvid/lang/iccvid_Ru.rc +++ b/dll/win32/iccvid/lang/iccvid_Ru.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Si.rc b/dll/win32/iccvid/lang/iccvid_Si.rc index f6a83251b8f57..d10c613cf7300 100644 --- a/dll/win32/iccvid/lang/iccvid_Si.rc +++ b/dll/win32/iccvid/lang/iccvid_Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Uk.rc b/dll/win32/iccvid/lang/iccvid_Uk.rc index 33a3fab364211..7be4f6d6cb8ca 100644 --- a/dll/win32/iccvid/lang/iccvid_Uk.rc +++ b/dll/win32/iccvid/lang/iccvid_Uk.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/iccvid/lang/iccvid_Zh.rc b/dll/win32/iccvid/lang/iccvid_Zh.rc index 96183a28c0c26..4d0a2fbece090 100644 --- a/dll/win32/iccvid/lang/iccvid_Zh.rc +++ b/dll/win32/iccvid/lang/iccvid_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Da.rc b/dll/win32/jscript/lang/jscript_Da.rc index 6f043fb960473..e373a0af9b6c7 100644 --- a/dll/win32/jscript/lang/jscript_Da.rc +++ b/dll/win32/jscript/lang/jscript_Da.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_DANISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_De.rc b/dll/win32/jscript/lang/jscript_De.rc index 88751d4a8cfec..967a39fcab441 100644 --- a/dll/win32/jscript/lang/jscript_De.rc +++ b/dll/win32/jscript/lang/jscript_De.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Es.rc b/dll/win32/jscript/lang/jscript_Es.rc index 5ab0de96853fa..73cfe3b8f02f8 100644 --- a/dll/win32/jscript/lang/jscript_Es.rc +++ b/dll/win32/jscript/lang/jscript_Es.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/*UTF-8*/ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Fr.rc b/dll/win32/jscript/lang/jscript_Fr.rc index cf250f3ea5aad..dc5abfde4df41 100644 --- a/dll/win32/jscript/lang/jscript_Fr.rc +++ b/dll/win32/jscript/lang/jscript_Fr.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Hu.rc b/dll/win32/jscript/lang/jscript_Hu.rc index 3c2061a28828d..401ccd9ca1565 100644 --- a/dll/win32/jscript/lang/jscript_Hu.rc +++ b/dll/win32/jscript/lang/jscript_Hu.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_It.rc b/dll/win32/jscript/lang/jscript_It.rc index 52a11c1ba9b4a..23fa96588a9cd 100644 --- a/dll/win32/jscript/lang/jscript_It.rc +++ b/dll/win32/jscript/lang/jscript_It.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Ja.rc b/dll/win32/jscript/lang/jscript_Ja.rc index 2e2c48f1c0055..415eaee49e3fe 100644 --- a/dll/win32/jscript/lang/jscript_Ja.rc +++ b/dll/win32/jscript/lang/jscript_Ja.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Ko.rc b/dll/win32/jscript/lang/jscript_Ko.rc index acd1747afea71..59c39aadd3cd7 100644 --- a/dll/win32/jscript/lang/jscript_Ko.rc +++ b/dll/win32/jscript/lang/jscript_Ko.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Lt.rc b/dll/win32/jscript/lang/jscript_Lt.rc index 8e77fef5dfbc5..b180923b2130e 100644 --- a/dll/win32/jscript/lang/jscript_Lt.rc +++ b/dll/win32/jscript/lang/jscript_Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Nl.rc b/dll/win32/jscript/lang/jscript_Nl.rc index 164d668d822b1..d4fef4621c642 100644 --- a/dll/win32/jscript/lang/jscript_Nl.rc +++ b/dll/win32/jscript/lang/jscript_Nl.rc @@ -18,8 +18,6 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_TO_PRIMITIVE "Fout bij het omzetten van het object naar een primitief type" diff --git a/dll/win32/jscript/lang/jscript_No.rc b/dll/win32/jscript/lang/jscript_No.rc index 1273e889d884f..1112371cfd9e0 100644 --- a/dll/win32/jscript/lang/jscript_No.rc +++ b/dll/win32/jscript/lang/jscript_No.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Pt.rc b/dll/win32/jscript/lang/jscript_Pt.rc index 26ce7ff983486..5016e05f4037e 100644 --- a/dll/win32/jscript/lang/jscript_Pt.rc +++ b/dll/win32/jscript/lang/jscript_Pt.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Ro.rc b/dll/win32/jscript/lang/jscript_Ro.rc index 40650c482f114..da3db3e404cc3 100644 --- a/dll/win32/jscript/lang/jscript_Ro.rc +++ b/dll/win32/jscript/lang/jscript_Ro.rc @@ -22,8 +22,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_TO_PRIMITIVE "Eroare la convertirea obiectului la un tip primitiv" diff --git a/dll/win32/jscript/lang/jscript_Ru.rc b/dll/win32/jscript/lang/jscript_Ru.rc index c4e9d80f2075b..274e8a659681b 100644 --- a/dll/win32/jscript/lang/jscript_Ru.rc +++ b/dll/win32/jscript/lang/jscript_Ru.rc @@ -17,9 +17,6 @@ */ /* Russian language resource file by Kudratov Olimjon (olim98@bk.ru) */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Si.rc b/dll/win32/jscript/lang/jscript_Si.rc index 8368d6474d58b..b49e212bb227f 100644 --- a/dll/win32/jscript/lang/jscript_Si.rc +++ b/dll/win32/jscript/lang/jscript_Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Uk.rc b/dll/win32/jscript/lang/jscript_Uk.rc index 677f773de3a06..90eb81897361c 100644 --- a/dll/win32/jscript/lang/jscript_Uk.rc +++ b/dll/win32/jscript/lang/jscript_Uk.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/jscript/lang/jscript_Zh.rc b/dll/win32/jscript/lang/jscript_Zh.rc index 5e69793ae1762..c2a11dc12a513 100644 --- a/dll/win32/jscript/lang/jscript_Zh.rc +++ b/dll/win32/jscript/lang/jscript_Zh.rc @@ -19,9 +19,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/mapi32/lang/Es.rc b/dll/win32/mapi32/lang/Es.rc index 22af69c063669..3c9ac28a994e5 100644 --- a/dll/win32/mapi32/lang/Es.rc +++ b/dll/win32/mapi32/lang/Es.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mapi32/lang/Fr.rc b/dll/win32/mapi32/lang/Fr.rc index e7a9296f3bd3c..5d9e7f4d25eda 100644 --- a/dll/win32/mapi32/lang/Fr.rc +++ b/dll/win32/mapi32/lang/Fr.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mapi32/lang/Hu.rc b/dll/win32/mapi32/lang/Hu.rc index e275b269678ae..666f3fbfbfef8 100644 --- a/dll/win32/mapi32/lang/Hu.rc +++ b/dll/win32/mapi32/lang/Hu.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mapi32/lang/It.rc b/dll/win32/mapi32/lang/It.rc index 0c74648b27218..f97240b08fd8a 100644 --- a/dll/win32/mapi32/lang/It.rc +++ b/dll/win32/mapi32/lang/It.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mapi32/lang/Ja.rc b/dll/win32/mapi32/lang/Ja.rc index cd3fc55287bb1..fa686e1c1110c 100644 --- a/dll/win32/mapi32/lang/Ja.rc +++ b/dll/win32/mapi32/lang/Ja.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mapi32/lang/Ko.rc b/dll/win32/mapi32/lang/Ko.rc index e9796bf5a7997..3ca3cc3ab4568 100644 --- a/dll/win32/mapi32/lang/Ko.rc +++ b/dll/win32/mapi32/lang/Ko.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mapi32/lang/Lt.rc b/dll/win32/mapi32/lang/Lt.rc index 63b6e83a2f29c..d1ebadd8b58cc 100644 --- a/dll/win32/mapi32/lang/Lt.rc +++ b/dll/win32/mapi32/lang/Lt.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mapi32/lang/Nl.rc b/dll/win32/mapi32/lang/Nl.rc index dda4221920dd6..b20a26ab00be0 100644 --- a/dll/win32/mapi32/lang/Nl.rc +++ b/dll/win32/mapi32/lang/Nl.rc @@ -21,8 +21,6 @@ LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_NO_MAPI_CLIENT, "Mail kan niet worden verstuurd aangezien er geen MAPI mail client is geïnstalleerd." diff --git a/dll/win32/mapi32/lang/No.rc b/dll/win32/mapi32/lang/No.rc index 63f64bd34da23..4717564d45420 100644 --- a/dll/win32/mapi32/lang/No.rc +++ b/dll/win32/mapi32/lang/No.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/mapi32/lang/Pt.rc b/dll/win32/mapi32/lang/Pt.rc index bc17797d8b241..2fcdc8b8018d2 100644 --- a/dll/win32/mapi32/lang/Pt.rc +++ b/dll/win32/mapi32/lang/Pt.rc @@ -20,8 +20,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/mapi32/lang/Ro.rc b/dll/win32/mapi32/lang/Ro.rc index 56e81fe4cfee3..b440c073f062e 100644 --- a/dll/win32/mapi32/lang/Ro.rc +++ b/dll/win32/mapi32/lang/Ro.rc @@ -20,8 +20,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_NO_MAPI_CLIENT, "Eroare la trimiterea emailului. Nu aveți un client de email MAPI instalat." diff --git a/dll/win32/mapi32/lang/Ru.rc b/dll/win32/mapi32/lang/Ru.rc index b4448fb1ad44b..0675b5c41dccf 100644 --- a/dll/win32/mapi32/lang/Ru.rc +++ b/dll/win32/mapi32/lang/Ru.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mapi32/lang/Si.rc b/dll/win32/mapi32/lang/Si.rc index 519958f1effdf..110d47afc16ee 100644 --- a/dll/win32/mapi32/lang/Si.rc +++ b/dll/win32/mapi32/lang/Si.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mapi32/lang/Uk.rc b/dll/win32/mapi32/lang/Uk.rc index fa1a9edc4344f..5dcf7724b3c3f 100644 --- a/dll/win32/mapi32/lang/Uk.rc +++ b/dll/win32/mapi32/lang/Uk.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mapi32/lang/Zh.rc b/dll/win32/mapi32/lang/Zh.rc index 96a63d8dcb116..14a1b7a5de6e5 100644 --- a/dll/win32/mapi32/lang/Zh.rc +++ b/dll/win32/mapi32/lang/Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/mapi32/version.rc b/dll/win32/mapi32/version.rc index 61b67d3b5750f..65818f28efbe4 100644 --- a/dll/win32/mapi32/version.rc +++ b/dll/win32/mapi32/version.rc @@ -27,7 +27,6 @@ #include "wine/wine_common_ver.rc" - /* UTF-8 */ #pragma code_page(65001) diff --git a/dll/win32/mpr/lang/mpr_De.rc b/dll/win32/mpr/lang/mpr_De.rc index 93c2cf23ad083..14bac1864c149 100644 --- a/dll/win32/mpr/lang/mpr_De.rc +++ b/dll/win32/mpr/lang/mpr_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Fr.rc b/dll/win32/mpr/lang/mpr_Fr.rc index 539005a5413f1..45fb14844e02b 100644 --- a/dll/win32/mpr/lang/mpr_Fr.rc +++ b/dll/win32/mpr/lang/mpr_Fr.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Ja.rc b/dll/win32/mpr/lang/mpr_Ja.rc index a9c5c2e3c6ed3..20f11234e3435 100644 --- a/dll/win32/mpr/lang/mpr_Ja.rc +++ b/dll/win32/mpr/lang/mpr_Ja.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Lt.rc b/dll/win32/mpr/lang/mpr_Lt.rc index 90e9e0a819382..f0e2c62043d5e 100644 --- a/dll/win32/mpr/lang/mpr_Lt.rc +++ b/dll/win32/mpr/lang/mpr_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Pt.rc b/dll/win32/mpr/lang/mpr_Pt.rc index 477b94304b387..234891752770b 100644 --- a/dll/win32/mpr/lang/mpr_Pt.rc +++ b/dll/win32/mpr/lang/mpr_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Ro.rc b/dll/win32/mpr/lang/mpr_Ro.rc index 0ff5ef7eef35d..399c7ca8f7f9c 100644 --- a/dll/win32/mpr/lang/mpr_Ro.rc +++ b/dll/win32/mpr/lang/mpr_Ro.rc @@ -21,8 +21,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_ENTIRENETWORK "Toată rețeaua" diff --git a/dll/win32/mpr/lang/mpr_Ru.rc b/dll/win32/mpr/lang/mpr_Ru.rc index 8b519fc6bbb42..89a7901eec3d5 100644 --- a/dll/win32/mpr/lang/mpr_Ru.rc +++ b/dll/win32/mpr/lang/mpr_Ru.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Si.rc b/dll/win32/mpr/lang/mpr_Si.rc index 8cae253b72d31..1367f6f1a10a7 100644 --- a/dll/win32/mpr/lang/mpr_Si.rc +++ b/dll/win32/mpr/lang/mpr_Si.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Uk.rc b/dll/win32/mpr/lang/mpr_Uk.rc index 73f731b02578c..254bb9775a1ac 100644 --- a/dll/win32/mpr/lang/mpr_Uk.rc +++ b/dll/win32/mpr/lang/mpr_Uk.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mpr/lang/mpr_Zh.rc b/dll/win32/mpr/lang/mpr_Zh.rc index 301cfc385c8f3..00b507f6075be 100644 --- a/dll/win32/mpr/lang/mpr_Zh.rc +++ b/dll/win32/mpr/lang/mpr_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/msacm32/lang/msacm_De.rc b/dll/win32/msacm32/lang/msacm_De.rc index 2867b475a2d57..27800552852d5 100644 --- a/dll/win32/msacm32/lang/msacm_De.rc +++ b/dll/win32/msacm32/lang/msacm_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Fr.rc b/dll/win32/msacm32/lang/msacm_Fr.rc index 8a243331f5504..4221f532664cf 100644 --- a/dll/win32/msacm32/lang/msacm_Fr.rc +++ b/dll/win32/msacm32/lang/msacm_Fr.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_He.rc b/dll/win32/msacm32/lang/msacm_He.rc index cde2c4696613a..bc56636e75cc3 100644 --- a/dll/win32/msacm32/lang/msacm_He.rc +++ b/dll/win32/msacm32/lang/msacm_He.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Ja.rc b/dll/win32/msacm32/lang/msacm_Ja.rc index ba727854e1bcc..26232d27cb1b1 100644 --- a/dll/win32/msacm32/lang/msacm_Ja.rc +++ b/dll/win32/msacm32/lang/msacm_Ja.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Lt.rc b/dll/win32/msacm32/lang/msacm_Lt.rc index 36fc328ce6bbf..76e04e37d266f 100644 --- a/dll/win32/msacm32/lang/msacm_Lt.rc +++ b/dll/win32/msacm32/lang/msacm_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Pt.rc b/dll/win32/msacm32/lang/msacm_Pt.rc index 109847c2a832b..57971d63709c4 100644 --- a/dll/win32/msacm32/lang/msacm_Pt.rc +++ b/dll/win32/msacm32/lang/msacm_Pt.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Ro.rc b/dll/win32/msacm32/lang/msacm_Ro.rc index 9cf54e8105429..d3ece4320a610 100644 --- a/dll/win32/msacm32/lang/msacm_Ro.rc +++ b/dll/win32/msacm32/lang/msacm_Ro.rc @@ -21,8 +21,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Selectare sunet" diff --git a/dll/win32/msacm32/lang/msacm_Ru.rc b/dll/win32/msacm32/lang/msacm_Ru.rc index a4f0e6425ac1c..7192847f8582b 100644 --- a/dll/win32/msacm32/lang/msacm_Ru.rc +++ b/dll/win32/msacm32/lang/msacm_Ru.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Si.rc b/dll/win32/msacm32/lang/msacm_Si.rc index 376520aac6a58..28c7e0d2322fe 100644 --- a/dll/win32/msacm32/lang/msacm_Si.rc +++ b/dll/win32/msacm32/lang/msacm_Si.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Uk.rc b/dll/win32/msacm32/lang/msacm_Uk.rc index 5c652a75bff7e..ca4c2115f7769 100644 --- a/dll/win32/msacm32/lang/msacm_Uk.rc +++ b/dll/win32/msacm32/lang/msacm_Uk.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/lang/msacm_Zh.rc b/dll/win32/msacm32/lang/msacm_Zh.rc index 2ef255ce78bc0..32868f8986a79 100644 --- a/dll/win32/msacm32/lang/msacm_Zh.rc +++ b/dll/win32/msacm32/lang/msacm_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED DLG_ACMFORMATCHOOSE_ID DIALOGEX 10, 20, 225, 118 diff --git a/dll/win32/msacm32/msacm.rc b/dll/win32/msacm32/msacm.rc index f72be33cacaa5..0a27f54ac8da3 100644 --- a/dll/win32/msacm32/msacm.rc +++ b/dll/win32/msacm32/msacm.rc @@ -20,7 +20,6 @@ #include "wineacm.h" - #include /* UTF-8 */ diff --git a/dll/win32/mshtml/lang/Da.rc b/dll/win32/mshtml/lang/Da.rc index 93d8abc5ec794..47b9f3e3cd501 100644 --- a/dll/win32/mshtml/lang/Da.rc +++ b/dll/win32/mshtml/lang/Da.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_DANISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mshtml/lang/De.rc b/dll/win32/mshtml/lang/De.rc index f536587986998..415e82d7ab011 100644 --- a/dll/win32/mshtml/lang/De.rc +++ b/dll/win32/mshtml/lang/De.rc @@ -20,8 +20,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_STATUS_DONE "Fertig" diff --git a/dll/win32/mshtml/lang/Fr.rc b/dll/win32/mshtml/lang/Fr.rc index a02abf42d42ae..77b0274f82e8d 100644 --- a/dll/win32/mshtml/lang/Fr.rc +++ b/dll/win32/mshtml/lang/Fr.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mshtml/lang/Hu.rc b/dll/win32/mshtml/lang/Hu.rc index 990738b5c14a4..c94efbb1d68b9 100644 --- a/dll/win32/mshtml/lang/Hu.rc +++ b/dll/win32/mshtml/lang/Hu.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mshtml/lang/It.rc b/dll/win32/mshtml/lang/It.rc index 0e2c5a45d255e..a9209e5b24f40 100644 --- a/dll/win32/mshtml/lang/It.rc +++ b/dll/win32/mshtml/lang/It.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/*UTF-8*/ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mshtml/lang/Ja.rc b/dll/win32/mshtml/lang/Ja.rc index caa4ac33d4049..d9e619469698b 100644 --- a/dll/win32/mshtml/lang/Ja.rc +++ b/dll/win32/mshtml/lang/Ja.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mshtml/lang/Lt.rc b/dll/win32/mshtml/lang/Lt.rc index 180b0cdeb36d1..96d8582dffe73 100644 --- a/dll/win32/mshtml/lang/Lt.rc +++ b/dll/win32/mshtml/lang/Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/mshtml/lang/No.rc b/dll/win32/mshtml/lang/No.rc index 0120272270666..b28229b7a1a48 100644 --- a/dll/win32/mshtml/lang/No.rc +++ b/dll/win32/mshtml/lang/No.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/mshtml/lang/Pt.rc b/dll/win32/mshtml/lang/Pt.rc index 52c28cd1aee9e..d9b9e2cab9268 100644 --- a/dll/win32/mshtml/lang/Pt.rc +++ b/dll/win32/mshtml/lang/Pt.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/mshtml/lang/Ro.rc b/dll/win32/mshtml/lang/Ro.rc index 44dd4c1148970..181e5b4c78ef5 100644 --- a/dll/win32/mshtml/lang/Ro.rc +++ b/dll/win32/mshtml/lang/Ro.rc @@ -21,8 +21,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_STATUS_DONE "Finalizat" diff --git a/dll/win32/mshtml/lang/Ru.rc b/dll/win32/mshtml/lang/Ru.rc index 5f46c69784c75..6ee3b082e8528 100644 --- a/dll/win32/mshtml/lang/Ru.rc +++ b/dll/win32/mshtml/lang/Ru.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mshtml/lang/Si.rc b/dll/win32/mshtml/lang/Si.rc index 146503cafec8e..9079745465502 100644 --- a/dll/win32/mshtml/lang/Si.rc +++ b/dll/win32/mshtml/lang/Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mshtml/lang/Uk.rc b/dll/win32/mshtml/lang/Uk.rc index 3376b10724eee..0ae3acdcd1646 100644 --- a/dll/win32/mshtml/lang/Uk.rc +++ b/dll/win32/mshtml/lang/Uk.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/mshtml/lang/Zh.rc b/dll/win32/mshtml/lang/Zh.rc index 46e8bebb368d2..5bb65fe989ed6 100644 --- a/dll/win32/mshtml/lang/Zh.rc +++ b/dll/win32/mshtml/lang/Zh.rc @@ -22,9 +22,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Bg.rc b/dll/win32/msrle32/lang/msrle_Bg.rc index ad3bc10aefa89..3e0ec5a10ad2b 100644 --- a/dll/win32/msrle32/lang/msrle_Bg.rc +++ b/dll/win32/msrle32/lang/msrle_Bg.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Cs.rc b/dll/win32/msrle32/lang/msrle_Cs.rc index 6fd321588c230..1ca1fba27ed94 100644 --- a/dll/win32/msrle32/lang/msrle_Cs.rc +++ b/dll/win32/msrle32/lang/msrle_Cs.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ diff --git a/dll/win32/msrle32/lang/msrle_Cy.rc b/dll/win32/msrle32/lang/msrle_Cy.rc index 1794fd551c4e9..e13bc5db4d363 100644 --- a/dll/win32/msrle32/lang/msrle_Cy.rc +++ b/dll/win32/msrle32/lang/msrle_Cy.rc @@ -19,10 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -#pragma code_page(65001) - LANGUAGE LANG_WELSH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Da.rc b/dll/win32/msrle32/lang/msrle_Da.rc index 6c4aba0c9f03e..26d1ef0a3b2ef 100644 --- a/dll/win32/msrle32/lang/msrle_Da.rc +++ b/dll/win32/msrle32/lang/msrle_Da.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_DANISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_De.rc b/dll/win32/msrle32/lang/msrle_De.rc index 71dc2c2be0269..2aef429d5b725 100644 --- a/dll/win32/msrle32/lang/msrle_De.rc +++ b/dll/win32/msrle32/lang/msrle_De.rc @@ -18,10 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_En.rc b/dll/win32/msrle32/lang/msrle_En.rc index 2a3520769d002..69aaba87086aa 100644 --- a/dll/win32/msrle32/lang/msrle_En.rc +++ b/dll/win32/msrle32/lang/msrle_En.rc @@ -18,10 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -#pragma code_page(65001) - LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Es.rc b/dll/win32/msrle32/lang/msrle_Es.rc index 1f5bbecf2018c..c2a66659b43b8 100644 --- a/dll/win32/msrle32/lang/msrle_Es.rc +++ b/dll/win32/msrle32/lang/msrle_Es.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Fr.rc b/dll/win32/msrle32/lang/msrle_Fr.rc index aa046c1d330fa..66830fdd5028c 100644 --- a/dll/win32/msrle32/lang/msrle_Fr.rc +++ b/dll/win32/msrle32/lang/msrle_Fr.rc @@ -18,11 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_He.rc b/dll/win32/msrle32/lang/msrle_He.rc index ff36acd14ca09..69f958fd769e1 100644 --- a/dll/win32/msrle32/lang/msrle_He.rc +++ b/dll/win32/msrle32/lang/msrle_He.rc @@ -20,10 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -#pragma code_page(65001) - LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Hu.rc b/dll/win32/msrle32/lang/msrle_Hu.rc index 0e7876cecf1ff..29d558edee749 100644 --- a/dll/win32/msrle32/lang/msrle_Hu.rc +++ b/dll/win32/msrle32/lang/msrle_Hu.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_It.rc b/dll/win32/msrle32/lang/msrle_It.rc index ebc30056d2baf..d89990db618bd 100644 --- a/dll/win32/msrle32/lang/msrle_It.rc +++ b/dll/win32/msrle32/lang/msrle_It.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Ja.rc b/dll/win32/msrle32/lang/msrle_Ja.rc index 804a8ac0396cd..b42ddccfadff5 100644 --- a/dll/win32/msrle32/lang/msrle_Ja.rc +++ b/dll/win32/msrle32/lang/msrle_Ja.rc @@ -18,11 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Ko.rc b/dll/win32/msrle32/lang/msrle_Ko.rc index c050da9580a67..824795eadd1d2 100644 --- a/dll/win32/msrle32/lang/msrle_Ko.rc +++ b/dll/win32/msrle32/lang/msrle_Ko.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Lt.rc b/dll/win32/msrle32/lang/msrle_Lt.rc index f6e5e0c98e8b6..dff519a0f0c31 100644 --- a/dll/win32/msrle32/lang/msrle_Lt.rc +++ b/dll/win32/msrle32/lang/msrle_Lt.rc @@ -18,11 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Nl.rc b/dll/win32/msrle32/lang/msrle_Nl.rc index ae627ba87394f..939d203294f64 100644 --- a/dll/win32/msrle32/lang/msrle_Nl.rc +++ b/dll/win32/msrle32/lang/msrle_Nl.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_No.rc b/dll/win32/msrle32/lang/msrle_No.rc index 0ce410f940361..fed4c9aae1dbb 100644 --- a/dll/win32/msrle32/lang/msrle_No.rc +++ b/dll/win32/msrle32/lang/msrle_No.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Pl.rc b/dll/win32/msrle32/lang/msrle_Pl.rc index 8a5d995a54214..d4fa19aed57ca 100644 --- a/dll/win32/msrle32/lang/msrle_Pl.rc +++ b/dll/win32/msrle32/lang/msrle_Pl.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_POLISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Pt.rc b/dll/win32/msrle32/lang/msrle_Pt.rc index 0bc8637166b18..09a6e51824610 100644 --- a/dll/win32/msrle32/lang/msrle_Pt.rc +++ b/dll/win32/msrle32/lang/msrle_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Ro.rc b/dll/win32/msrle32/lang/msrle_Ro.rc index d0ac98670f394..119317f1c8bca 100644 --- a/dll/win32/msrle32/lang/msrle_Ro.rc +++ b/dll/win32/msrle32/lang/msrle_Ro.rc @@ -17,12 +17,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_NAME "WINE-MS-RLE" diff --git a/dll/win32/msrle32/lang/msrle_Ru.rc b/dll/win32/msrle32/lang/msrle_Ru.rc index 456d724001894..f1c785b385f09 100644 --- a/dll/win32/msrle32/lang/msrle_Ru.rc +++ b/dll/win32/msrle32/lang/msrle_Ru.rc @@ -18,11 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Si.rc b/dll/win32/msrle32/lang/msrle_Si.rc index e99d6a1bb8950..6073573331c4d 100644 --- a/dll/win32/msrle32/lang/msrle_Si.rc +++ b/dll/win32/msrle32/lang/msrle_Si.rc @@ -18,10 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Sq.rc b/dll/win32/msrle32/lang/msrle_Sq.rc index 9e8e287c9c368..f5dfc7ff44820 100644 --- a/dll/win32/msrle32/lang/msrle_Sq.rc +++ b/dll/win32/msrle32/lang/msrle_Sq.rc @@ -18,10 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -#pragma code_page(65001) - LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Sv.rc b/dll/win32/msrle32/lang/msrle_Sv.rc index d6a4c17e6ecad..6e447b872951c 100644 --- a/dll/win32/msrle32/lang/msrle_Sv.rc +++ b/dll/win32/msrle32/lang/msrle_Sv.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Tr.rc b/dll/win32/msrle32/lang/msrle_Tr.rc index 2e25db5bb1acf..7405961b57090 100644 --- a/dll/win32/msrle32/lang/msrle_Tr.rc +++ b/dll/win32/msrle32/lang/msrle_Tr.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Uk.rc b/dll/win32/msrle32/lang/msrle_Uk.rc index 1e12f4982be5e..8304269140ee2 100644 --- a/dll/win32/msrle32/lang/msrle_Uk.rc +++ b/dll/win32/msrle32/lang/msrle_Uk.rc @@ -19,11 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "msrle_private.h" - -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msrle32/lang/msrle_Zh.rc b/dll/win32/msrle32/lang/msrle_Zh.rc index 3b4211e80cc2b..dabf53abf5eeb 100644 --- a/dll/win32/msrle32/lang/msrle_Zh.rc +++ b/dll/win32/msrle32/lang/msrle_Zh.rc @@ -21,11 +21,6 @@ * Copyright 2021 Chan Chilung */ -#include "msrle_private.h" - -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_De.rc b/dll/win32/msvfw32/lang/msvfw32_De.rc index 3db4ad72ca9c0..334ebbec04d8b 100644 --- a/dll/win32/msvfw32/lang/msvfw32_De.rc +++ b/dll/win32/msvfw32/lang/msvfw32_De.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Es.rc b/dll/win32/msvfw32/lang/msvfw32_Es.rc index d0bb9dafc4080..6d11b237cf494 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Es.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Es.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Fr.rc b/dll/win32/msvfw32/lang/msvfw32_Fr.rc index fd1a88872c090..66fbcd051e8e6 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Fr.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Fr.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_It.rc b/dll/win32/msvfw32/lang/msvfw32_It.rc index 9d5ba8bef04a9..84628f810b0f6 100644 --- a/dll/win32/msvfw32/lang/msvfw32_It.rc +++ b/dll/win32/msvfw32/lang/msvfw32_It.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Lt.rc b/dll/win32/msvfw32/lang/msvfw32_Lt.rc index 4a652aa30fde1..1695ef7edb4f7 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Lt.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Ro.rc b/dll/win32/msvfw32/lang/msvfw32_Ro.rc index 4f25829de03f4..d99ea12bcd851 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Ro.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Ro.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Ru.rc b/dll/win32/msvfw32/lang/msvfw32_Ru.rc index 51924c89b4c7e..379a7c664249a 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Ru.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Ru.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Si.rc b/dll/win32/msvfw32/lang/msvfw32_Si.rc index f359a0ba87275..64def77a23125 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Si.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Uk.rc b/dll/win32/msvfw32/lang/msvfw32_Uk.rc index a5b5efca95504..62fa590eb0028 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Uk.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Uk.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvfw32/lang/msvfw32_Zh.rc b/dll/win32/msvfw32/lang/msvfw32_Zh.rc index add2432531f80..deb7f610c92c9 100644 --- a/dll/win32/msvfw32/lang/msvfw32_Zh.rc +++ b/dll/win32/msvfw32/lang/msvfw32_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/msvfw32/rsrc.rc b/dll/win32/msvfw32/rsrc.rc index 9f502c6da5fb5..460e9a0d03a8f 100644 --- a/dll/win32/msvfw32/rsrc.rc +++ b/dll/win32/msvfw32/rsrc.rc @@ -18,7 +18,6 @@ #include "msvideo_private.h" - #include /* UTF-8 */ diff --git a/dll/win32/msvidc32/lang/msvidc32_De.rc b/dll/win32/msvidc32/lang/msvidc32_De.rc index 97dfddf95f360..5c5547aa9e96f 100644 --- a/dll/win32/msvidc32/lang/msvidc32_De.rc +++ b/dll/win32/msvidc32/lang/msvidc32_De.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Es.rc b/dll/win32/msvidc32/lang/msvidc32_Es.rc index 41a92ba7bbc22..627c3e969f2b7 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Es.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Es.rc @@ -19,9 +19,6 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL -/*UTF-8*/ -#pragma code_page(65001) - STRINGTABLE { IDS_NAME "MS-CRAM" diff --git a/dll/win32/msvidc32/lang/msvidc32_Fr.rc b/dll/win32/msvidc32/lang/msvidc32_Fr.rc index 76240b3dff8ba..9353151392b4e 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Fr.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Fr.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_It.rc b/dll/win32/msvidc32/lang/msvidc32_It.rc index 7c29524774e65..9187fff9f437a 100644 --- a/dll/win32/msvidc32/lang/msvidc32_It.rc +++ b/dll/win32/msvidc32/lang/msvidc32_It.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Ja.rc b/dll/win32/msvidc32/lang/msvidc32_Ja.rc index 6ae1958e5c6e9..c97adb98fa36a 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Ja.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Ja.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Lt.rc b/dll/win32/msvidc32/lang/msvidc32_Lt.rc index 765cd9f13b713..f3ff97726b9c3 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Lt.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Ro.rc b/dll/win32/msvidc32/lang/msvidc32_Ro.rc index 656b0a7d17303..c601a67e43dc8 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Ro.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Ro.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Ru.rc b/dll/win32/msvidc32/lang/msvidc32_Ru.rc index dfd086574ac4c..4c06e53fc077a 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Ru.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Ru.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Si.rc b/dll/win32/msvidc32/lang/msvidc32_Si.rc index d721377ecd01d..298ddd1460302 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Si.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Uk.rc b/dll/win32/msvidc32/lang/msvidc32_Uk.rc index c5b6764888fe7..2cc4ab5867d9c 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Uk.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Uk.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/msvidc32/lang/msvidc32_Zh.rc b/dll/win32/msvidc32/lang/msvidc32_Zh.rc index b9c0e48ed5b4a..0ab97d494acd1 100644 --- a/dll/win32/msvidc32/lang/msvidc32_Zh.rc +++ b/dll/win32/msvidc32/lang/msvidc32_Zh.rc @@ -19,9 +19,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/netcfgx/netcfgx.rc b/dll/win32/netcfgx/netcfgx.rc index a353624735eb1..b6d8f049d7f13 100644 --- a/dll/win32/netcfgx/netcfgx.rc +++ b/dll/win32/netcfgx/netcfgx.rc @@ -17,12 +17,12 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include -/* UTF-8 */ -#pragma code_page(65001) - IDI_NETWORK ICON "res/network.ico" IDI_INTERNET ICON "res/internet.ico" +/* UTF-8 */ +#pragma code_page(65001) + #ifdef LANGUAGE_BG_BG #include "lang/bg-BG.rc" #endif diff --git a/dll/win32/oleacc/lang/oleacc_De.rc b/dll/win32/oleacc/lang/oleacc_De.rc index 44620ad3a9439..3d7f4f653c78e 100644 --- a/dll/win32/oleacc/lang/oleacc_De.rc +++ b/dll/win32/oleacc/lang/oleacc_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Fr.rc b/dll/win32/oleacc/lang/oleacc_Fr.rc index 65a0f2236d3ac..2e632e76c0533 100644 --- a/dll/win32/oleacc/lang/oleacc_Fr.rc +++ b/dll/win32/oleacc/lang/oleacc_Fr.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Hu.rc b/dll/win32/oleacc/lang/oleacc_Hu.rc index 5d50a9989ee6b..8680be38c1bee 100644 --- a/dll/win32/oleacc/lang/oleacc_Hu.rc +++ b/dll/win32/oleacc/lang/oleacc_Hu.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_It.rc b/dll/win32/oleacc/lang/oleacc_It.rc index 3f8d10db2bdae..ae8a243a84458 100644 --- a/dll/win32/oleacc/lang/oleacc_It.rc +++ b/dll/win32/oleacc/lang/oleacc_It.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Lt.rc b/dll/win32/oleacc/lang/oleacc_Lt.rc index 60f4087cbac81..c066d06181572 100644 --- a/dll/win32/oleacc/lang/oleacc_Lt.rc +++ b/dll/win32/oleacc/lang/oleacc_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_No.rc b/dll/win32/oleacc/lang/oleacc_No.rc index e05ae900c5b23..caa7b516029c8 100644 --- a/dll/win32/oleacc/lang/oleacc_No.rc +++ b/dll/win32/oleacc/lang/oleacc_No.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Pt.rc b/dll/win32/oleacc/lang/oleacc_Pt.rc index f09868a421468..fadfecc44ed4f 100644 --- a/dll/win32/oleacc/lang/oleacc_Pt.rc +++ b/dll/win32/oleacc/lang/oleacc_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Ro.rc b/dll/win32/oleacc/lang/oleacc_Ro.rc index b854f9df98d28..32cbf257c6901 100644 --- a/dll/win32/oleacc/lang/oleacc_Ro.rc +++ b/dll/win32/oleacc/lang/oleacc_Ro.rc @@ -21,8 +21,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { 0 "obiect necunoscut" /* undocumented */ diff --git a/dll/win32/oleacc/lang/oleacc_Si.rc b/dll/win32/oleacc/lang/oleacc_Si.rc index cee2ab3a5cd14..20ce8c7b50ca8 100644 --- a/dll/win32/oleacc/lang/oleacc_Si.rc +++ b/dll/win32/oleacc/lang/oleacc_Si.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Uk.rc b/dll/win32/oleacc/lang/oleacc_Uk.rc index 55da93f56da8a..1ea8cd0835a30 100644 --- a/dll/win32/oleacc/lang/oleacc_Uk.rc +++ b/dll/win32/oleacc/lang/oleacc_Uk.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oleacc/lang/oleacc_Zh.rc b/dll/win32/oleacc/lang/oleacc_Zh.rc index 23d77a1936697..9e110733e01fe 100644 --- a/dll/win32/oleacc/lang/oleacc_Zh.rc +++ b/dll/win32/oleacc/lang/oleacc_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/oleaut32/lang/oleaut32_De.rc b/dll/win32/oleaut32/lang/oleaut32_De.rc index 73206c25a1d9f..12a96f622705c 100644 --- a/dll/win32/oleaut32/lang/oleaut32_De.rc +++ b/dll/win32/oleaut32/lang/oleaut32_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oleaut32/lang/oleaut32_Lt.rc b/dll/win32/oleaut32/lang/oleaut32_Lt.rc index 77bd64e56741b..747bf7fc5e3b8 100644 --- a/dll/win32/oleaut32/lang/oleaut32_Lt.rc +++ b/dll/win32/oleaut32/lang/oleaut32_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oleaut32/lang/oleaut32_Ro.rc b/dll/win32/oleaut32/lang/oleaut32_Ro.rc index 8f71883332268..8ede4e8ca0c8f 100644 --- a/dll/win32/oleaut32/lang/oleaut32_Ro.rc +++ b/dll/win32/oleaut32/lang/oleaut32_Ro.rc @@ -19,8 +19,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { IDS_TRUE "Adevărat" diff --git a/dll/win32/oleaut32/lang/oleaut32_Ru.rc b/dll/win32/oleaut32/lang/oleaut32_Ru.rc index e2f0161e5118e..245e40bf94d3e 100644 --- a/dll/win32/oleaut32/lang/oleaut32_Ru.rc +++ b/dll/win32/oleaut32/lang/oleaut32_Ru.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oleaut32/lang/oleaut32_Si.rc b/dll/win32/oleaut32/lang/oleaut32_Si.rc index c0a4d23ec15ef..cd71fb0a39c41 100644 --- a/dll/win32/oleaut32/lang/oleaut32_Si.rc +++ b/dll/win32/oleaut32/lang/oleaut32_Si.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oleaut32/lang/oleaut32_Uk.rc b/dll/win32/oleaut32/lang/oleaut32_Uk.rc index 38b020c486bdd..db469803510cc 100644 --- a/dll/win32/oleaut32/lang/oleaut32_Uk.rc +++ b/dll/win32/oleaut32/lang/oleaut32_Uk.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oleaut32/lang/oleaut32_Zh.rc b/dll/win32/oleaut32/lang/oleaut32_Zh.rc index 0005e4cd43f43..e9b9260c42792 100644 --- a/dll/win32/oleaut32/lang/oleaut32_Zh.rc +++ b/dll/win32/oleaut32/lang/oleaut32_Zh.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_De.rc b/dll/win32/oledlg/lang/oledlg_De.rc index bd99c1c33e297..385228fb5c3c2 100644 --- a/dll/win32/oledlg/lang/oledlg_De.rc +++ b/dll/win32/oledlg/lang/oledlg_De.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Fr.rc b/dll/win32/oledlg/lang/oledlg_Fr.rc index 4f284de68a1fd..06ad4fc20446d 100644 --- a/dll/win32/oledlg/lang/oledlg_Fr.rc +++ b/dll/win32/oledlg/lang/oledlg_Fr.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Hu.rc b/dll/win32/oledlg/lang/oledlg_Hu.rc index a96bd727968a0..75e66af16a8d2 100644 --- a/dll/win32/oledlg/lang/oledlg_Hu.rc +++ b/dll/win32/oledlg/lang/oledlg_Hu.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_It.rc b/dll/win32/oledlg/lang/oledlg_It.rc index 9cdd49c61f898..dbd976013bdea 100644 --- a/dll/win32/oledlg/lang/oledlg_It.rc +++ b/dll/win32/oledlg/lang/oledlg_It.rc @@ -17,9 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Ja.rc b/dll/win32/oledlg/lang/oledlg_Ja.rc index bd18b9219eee2..f33f1e830f5a6 100644 --- a/dll/win32/oledlg/lang/oledlg_Ja.rc +++ b/dll/win32/oledlg/lang/oledlg_Ja.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Lt.rc b/dll/win32/oledlg/lang/oledlg_Lt.rc index bebe9ed51ccb5..d66681ed42900 100644 --- a/dll/win32/oledlg/lang/oledlg_Lt.rc +++ b/dll/win32/oledlg/lang/oledlg_Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Nl.rc b/dll/win32/oledlg/lang/oledlg_Nl.rc index 968fe4f72a0bc..f6fdeff9a6392 100644 --- a/dll/win32/oledlg/lang/oledlg_Nl.rc +++ b/dll/win32/oledlg/lang/oledlg_Nl.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Pt.rc b/dll/win32/oledlg/lang/oledlg_Pt.rc index 23dc29f500588..312b291f2989f 100644 --- a/dll/win32/oledlg/lang/oledlg_Pt.rc +++ b/dll/win32/oledlg/lang/oledlg_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Ro.rc b/dll/win32/oledlg/lang/oledlg_Ro.rc index e976733c9b307..2754d5434475b 100644 --- a/dll/win32/oledlg/lang/oledlg_Ro.rc +++ b/dll/win32/oledlg/lang/oledlg_Ro.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Ru.rc b/dll/win32/oledlg/lang/oledlg_Ru.rc index a5224fc31aadc..d9d4b015bc276 100644 --- a/dll/win32/oledlg/lang/oledlg_Ru.rc +++ b/dll/win32/oledlg/lang/oledlg_Ru.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Si.rc b/dll/win32/oledlg/lang/oledlg_Si.rc index fe7bd07c30530..91523179cde90 100644 --- a/dll/win32/oledlg/lang/oledlg_Si.rc +++ b/dll/win32/oledlg/lang/oledlg_Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Uk.rc b/dll/win32/oledlg/lang/oledlg_Uk.rc index 960841063b61a..f504c56ef0070 100644 --- a/dll/win32/oledlg/lang/oledlg_Uk.rc +++ b/dll/win32/oledlg/lang/oledlg_Uk.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/oledlg/lang/oledlg_Zh.rc b/dll/win32/oledlg/lang/oledlg_Zh.rc index 4ef55df193b7f..0d6e33c5e536e 100644 --- a/dll/win32/oledlg/lang/oledlg_Zh.rc +++ b/dll/win32/oledlg/lang/oledlg_Zh.rc @@ -19,9 +19,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/shlwapi/lang/de-DE.rc b/dll/win32/shlwapi/lang/de-DE.rc index 4dc8a1513ddb2..e84a4c75452f5 100644 --- a/dll/win32/shlwapi/lang/de-DE.rc +++ b/dll/win32/shlwapi/lang/de-DE.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/shlwapi/lang/fr-FR.rc b/dll/win32/shlwapi/lang/fr-FR.rc index b7b4d317e5394..09b036783732b 100644 --- a/dll/win32/shlwapi/lang/fr-FR.rc +++ b/dll/win32/shlwapi/lang/fr-FR.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/shlwapi/lang/hu-HU.rc b/dll/win32/shlwapi/lang/hu-HU.rc index 8fa7afa1db353..ccc262844d071 100644 --- a/dll/win32/shlwapi/lang/hu-HU.rc +++ b/dll/win32/shlwapi/lang/hu-HU.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/shlwapi/lang/ja-JP.rc b/dll/win32/shlwapi/lang/ja-JP.rc index 50388113a38d3..3a770caecba6c 100644 --- a/dll/win32/shlwapi/lang/ja-JP.rc +++ b/dll/win32/shlwapi/lang/ja-JP.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/shlwapi/lang/lt-LT.rc b/dll/win32/shlwapi/lang/lt-LT.rc index 717c17e94343e..16502562dcc30 100644 --- a/dll/win32/shlwapi/lang/lt-LT.rc +++ b/dll/win32/shlwapi/lang/lt-LT.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/shlwapi/lang/pt-PT.rc b/dll/win32/shlwapi/lang/pt-PT.rc index 242b0994dabcf..ed9e5bd24c31e 100644 --- a/dll/win32/shlwapi/lang/pt-PT.rc +++ b/dll/win32/shlwapi/lang/pt-PT.rc @@ -20,8 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/shlwapi/lang/ro-RO.rc b/dll/win32/shlwapi/lang/ro-RO.rc index d31911ba7ec06..c9b7739414cd0 100644 --- a/dll/win32/shlwapi/lang/ro-RO.rc +++ b/dll/win32/shlwapi/lang/ro-RO.rc @@ -21,8 +21,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/shlwapi/lang/ru-RU.rc b/dll/win32/shlwapi/lang/ru-RU.rc index 8e963a0167270..1b1bdd0c69944 100644 --- a/dll/win32/shlwapi/lang/ru-RU.rc +++ b/dll/win32/shlwapi/lang/ru-RU.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/shlwapi/lang/sl-SI.rc b/dll/win32/shlwapi/lang/sl-SI.rc index abcf7e6efc5f5..0e18cd09a4464 100644 --- a/dll/win32/shlwapi/lang/sl-SI.rc +++ b/dll/win32/shlwapi/lang/sl-SI.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/shlwapi/lang/uk-UA.rc b/dll/win32/shlwapi/lang/uk-UA.rc index f4e190975bd9d..8cb3404c4411d 100644 --- a/dll/win32/shlwapi/lang/uk-UA.rc +++ b/dll/win32/shlwapi/lang/uk-UA.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/shlwapi/lang/zh-CN.rc b/dll/win32/shlwapi/lang/zh-CN.rc index 2d6f8d4e92cef..cca4fc59454ce 100644 --- a/dll/win32/shlwapi/lang/zh-CN.rc +++ b/dll/win32/shlwapi/lang/zh-CN.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/shlwapi/lang/zh-TW.rc b/dll/win32/shlwapi/lang/zh-TW.rc index f63a05c64caec..1a774b18e8257 100644 --- a/dll/win32/shlwapi/lang/zh-TW.rc +++ b/dll/win32/shlwapi/lang/zh-TW.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL STRINGTABLE diff --git a/dll/win32/themeui/themeui.rc b/dll/win32/themeui/themeui.rc index 230cac724d45a..a13fe55052ea7 100644 --- a/dll/win32/themeui/themeui.rc +++ b/dll/win32/themeui/themeui.rc @@ -13,6 +13,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_CS_CZ #include "lang/cs-CZ.rc" #endif diff --git a/dll/win32/wininet/lang/wininet_Da.rc b/dll/win32/wininet/lang/wininet_Da.rc index 1411bfd1fcfa7..e857efdfadefc 100644 --- a/dll/win32/wininet/lang/wininet_Da.rc +++ b/dll/win32/wininet/lang/wininet_Da.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_DANISH, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_De.rc b/dll/win32/wininet/lang/wininet_De.rc index eae9240f2c85a..9f89bcd121e5f 100644 --- a/dll/win32/wininet/lang/wininet_De.rc +++ b/dll/win32/wininet/lang/wininet_De.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Fr.rc b/dll/win32/wininet/lang/wininet_Fr.rc index 5e6adfd01a537..3679ff4d7e637 100644 --- a/dll/win32/wininet/lang/wininet_Fr.rc +++ b/dll/win32/wininet/lang/wininet_Fr.rc @@ -22,9 +22,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_He.rc b/dll/win32/wininet/lang/wininet_He.rc index a663f624fbbcf..5a606f45861d9 100644 --- a/dll/win32/wininet/lang/wininet_He.rc +++ b/dll/win32/wininet/lang/wininet_He.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Hu.rc b/dll/win32/wininet/lang/wininet_Hu.rc index 0f7becb9ffcc6..67b4b580450a8 100644 --- a/dll/win32/wininet/lang/wininet_Hu.rc +++ b/dll/win32/wininet/lang/wininet_Hu.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_It.rc b/dll/win32/wininet/lang/wininet_It.rc index 859c1eb08429a..1e84d85484b7f 100644 --- a/dll/win32/wininet/lang/wininet_It.rc +++ b/dll/win32/wininet/lang/wininet_It.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Ja.rc b/dll/win32/wininet/lang/wininet_Ja.rc index a00db74a3a2e0..76307e748ed42 100644 --- a/dll/win32/wininet/lang/wininet_Ja.rc +++ b/dll/win32/wininet/lang/wininet_Ja.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Ko.rc b/dll/win32/wininet/lang/wininet_Ko.rc index 266143045a0dd..f12b6d495dfff 100644 --- a/dll/win32/wininet/lang/wininet_Ko.rc +++ b/dll/win32/wininet/lang/wininet_Ko.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Lt.rc b/dll/win32/wininet/lang/wininet_Lt.rc index 1b7e8427970c6..316baf4ae78c6 100644 --- a/dll/win32/wininet/lang/wininet_Lt.rc +++ b/dll/win32/wininet/lang/wininet_Lt.rc @@ -16,9 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Nl.rc b/dll/win32/wininet/lang/wininet_Nl.rc index 5f8c432495c41..000cd8f75ca2e 100644 --- a/dll/win32/wininet/lang/wininet_Nl.rc +++ b/dll/win32/wininet/lang/wininet_Nl.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_No.rc b/dll/win32/wininet/lang/wininet_No.rc index b0c3e2fc9e871..ed921f882563e 100644 --- a/dll/win32/wininet/lang/wininet_No.rc +++ b/dll/win32/wininet/lang/wininet_No.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Pt.rc b/dll/win32/wininet/lang/wininet_Pt.rc index 83f2878151def..19be6402f9b7f 100644 --- a/dll/win32/wininet/lang/wininet_Pt.rc +++ b/dll/win32/wininet/lang/wininet_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Ro.rc b/dll/win32/wininet/lang/wininet_Ro.rc index 186e7724fed9d..5ac07610f20d8 100644 --- a/dll/win32/wininet/lang/wininet_Ro.rc +++ b/dll/win32/wininet/lang/wininet_Ro.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Ru.rc b/dll/win32/wininet/lang/wininet_Ru.rc index 14b5363db9329..5fe5709cbd8e6 100644 --- a/dll/win32/wininet/lang/wininet_Ru.rc +++ b/dll/win32/wininet/lang/wininet_Ru.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Si.rc b/dll/win32/wininet/lang/wininet_Si.rc index b70d7adbf1bd7..8a01513c5c7e1 100644 --- a/dll/win32/wininet/lang/wininet_Si.rc +++ b/dll/win32/wininet/lang/wininet_Si.rc @@ -16,8 +16,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Sr.rc b/dll/win32/wininet/lang/wininet_Sr.rc index 19ee56ac774d7..473e9636b6521 100644 --- a/dll/win32/wininet/lang/wininet_Sr.rc +++ b/dll/win32/wininet/lang/wininet_Sr.rc @@ -17,8 +17,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Uk.rc b/dll/win32/wininet/lang/wininet_Uk.rc index 7aab43df6e6e5..3519902e335eb 100644 --- a/dll/win32/wininet/lang/wininet_Uk.rc +++ b/dll/win32/wininet/lang/wininet_Uk.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wininet/lang/wininet_Zh.rc b/dll/win32/wininet/lang/wininet_Zh.rc index 32db03edefff1..3d4d81f244745 100644 --- a/dll/win32/wininet/lang/wininet_Zh.rc +++ b/dll/win32/wininet/lang/wininet_Zh.rc @@ -20,9 +20,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/dll/win32/winmm/lang/winmm_Br.rc b/dll/win32/winmm/lang/winmm_Br.rc index 9d09bef1c0cd8..59542df69672e 100644 --- a/dll/win32/winmm/lang/winmm_Br.rc +++ b/dll/win32/winmm/lang/winmm_Br.rc @@ -17,7 +17,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Cs.rc b/dll/win32/winmm/lang/winmm_Cs.rc index da219c68b7d95..b164619ec570d 100644 --- a/dll/win32/winmm/lang/winmm_Cs.rc +++ b/dll/win32/winmm/lang/winmm_Cs.rc @@ -18,7 +18,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_De.rc b/dll/win32/winmm/lang/winmm_De.rc index 5fbcd5e26eea3..1748b31cafc5c 100644 --- a/dll/win32/winmm/lang/winmm_De.rc +++ b/dll/win32/winmm/lang/winmm_De.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_En.rc b/dll/win32/winmm/lang/winmm_En.rc index 3fb0f7c81942a..fb3dd8381b692 100644 --- a/dll/win32/winmm/lang/winmm_En.rc +++ b/dll/win32/winmm/lang/winmm_En.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Es.rc b/dll/win32/winmm/lang/winmm_Es.rc index 5308abdf222c5..7218f3d8ce948 100644 --- a/dll/win32/winmm/lang/winmm_Es.rc +++ b/dll/win32/winmm/lang/winmm_Es.rc @@ -17,7 +17,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL +LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Hu.rc b/dll/win32/winmm/lang/winmm_Hu.rc index 05cf8155a865c..0e9e7dd9d8a2d 100644 --- a/dll/win32/winmm/lang/winmm_Hu.rc +++ b/dll/win32/winmm/lang/winmm_Hu.rc @@ -17,7 +17,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT +LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Id.rc b/dll/win32/winmm/lang/winmm_Id.rc index de3560952c849..6cc8deb5d535a 100644 --- a/dll/win32/winmm/lang/winmm_Id.rc +++ b/dll/win32/winmm/lang/winmm_Id.rc @@ -16,8 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT +LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_It.rc b/dll/win32/winmm/lang/winmm_It.rc index c9cad247d7824..c595c8328a118 100644 --- a/dll/win32/winmm/lang/winmm_It.rc +++ b/dll/win32/winmm/lang/winmm_It.rc @@ -17,7 +17,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL +LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Ja.rc b/dll/win32/winmm/lang/winmm_Ja.rc index e208d91f0da7e..27a9da7542bfc 100644 --- a/dll/win32/winmm/lang/winmm_Ja.rc +++ b/dll/win32/winmm/lang/winmm_Ja.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Nl.rc b/dll/win32/winmm/lang/winmm_Nl.rc index f8b6305da06e9..2d615c8ea1f88 100644 --- a/dll/win32/winmm/lang/winmm_Nl.rc +++ b/dll/win32/winmm/lang/winmm_Nl.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL +LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_No.rc b/dll/win32/winmm/lang/winmm_No.rc index 07c6cf9b7ec93..1373fd48816a0 100644 --- a/dll/win32/winmm/lang/winmm_No.rc +++ b/dll/win32/winmm/lang/winmm_No.rc @@ -20,7 +20,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Pl.rc b/dll/win32/winmm/lang/winmm_Pl.rc index 1b707d57713cc..58aec5c81efdb 100644 --- a/dll/win32/winmm/lang/winmm_Pl.rc +++ b/dll/win32/winmm/lang/winmm_Pl.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_POLISH, SUBLANG_DEFAULT +LANGUAGE LANG_POLISH, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Pt.rc b/dll/win32/winmm/lang/winmm_Pt.rc index 0daf89bc4fc20..ad884b656e9e8 100644 --- a/dll/win32/winmm/lang/winmm_Pt.rc +++ b/dll/win32/winmm/lang/winmm_Pt.rc @@ -17,7 +17,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_PORTUGAL +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_PORTUGAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Ro.rc b/dll/win32/winmm/lang/winmm_Ro.rc index ca900da23bde9..bd8cf96586440 100644 --- a/dll/win32/winmm/lang/winmm_Ro.rc +++ b/dll/win32/winmm/lang/winmm_Ro.rc @@ -18,7 +18,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL +LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Ru.rc b/dll/win32/winmm/lang/winmm_Ru.rc index 1a8eb1f11d335..9e717eb5d751d 100644 --- a/dll/win32/winmm/lang/winmm_Ru.rc +++ b/dll/win32/winmm/lang/winmm_Ru.rc @@ -15,12 +15,12 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -/* UTF-8 */ -#pragma code_page(65001) +/* translation by Zahar Hodoley (mail: zaharh@mail.ru) */ -STRINGTABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -BEGIN +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +STRINGTABLE +BEGIN /* MMSYS errors */ MMSYSERR_NOERROR, "Нет ошибки." @@ -127,5 +127,3 @@ MCIERR_SEQ_PORTUNSPECIFIED, "В системе не указан текущий MCIERR_SEQ_TIMER, "Все таймеры мультимедиа используются другими приложениями. Закройте одно из этих приложений и попробуйте заново." END - -/* translation by Zahar Hodoley (mail: zaharh@mail.ru) */ diff --git a/dll/win32/winmm/lang/winmm_Si.rc b/dll/win32/winmm/lang/winmm_Si.rc index 3cfce8d6e183f..b6a3ce9c22f7f 100644 --- a/dll/win32/winmm/lang/winmm_Si.rc +++ b/dll/win32/winmm/lang/winmm_Si.rc @@ -17,7 +17,9 @@ * */ -STRINGTABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT +LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Sk.rc b/dll/win32/winmm/lang/winmm_Sk.rc index 85af82f4c1db9..8ae469b6b44b6 100644 --- a/dll/win32/winmm/lang/winmm_Sk.rc +++ b/dll/win32/winmm/lang/winmm_Sk.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Sq.rc b/dll/win32/winmm/lang/winmm_Sq.rc index e173ec0858a0f..d1fb4d1de8480 100644 --- a/dll/win32/winmm/lang/winmm_Sq.rc +++ b/dll/win32/winmm/lang/winmm_Sq.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL +LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Tr.rc b/dll/win32/winmm/lang/winmm_Tr.rc index d4e905daa6c9d..1a99691829543 100644 --- a/dll/win32/winmm/lang/winmm_Tr.rc +++ b/dll/win32/winmm/lang/winmm_Tr.rc @@ -16,7 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -STRINGTABLE LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT +LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT + +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Uk.rc b/dll/win32/winmm/lang/winmm_Uk.rc index df1c46fe4296d..58f58a184f065 100644 --- a/dll/win32/winmm/lang/winmm_Uk.rc +++ b/dll/win32/winmm/lang/winmm_Uk.rc @@ -16,10 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -/* UTF-8 */ -#pragma code_page(65001) +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -STRINGTABLE LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT +STRINGTABLE BEGIN /* MMSYS errors */ diff --git a/dll/win32/winmm/lang/winmm_Zh.rc b/dll/win32/winmm/lang/winmm_Zh.rc index 318d1fd1f9f13..4e39d592d7c47 100644 --- a/dll/win32/winmm/lang/winmm_Zh.rc +++ b/dll/win32/winmm/lang/winmm_Zh.rc @@ -19,10 +19,9 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +STRINGTABLE BEGIN /* MMSYS errors */ @@ -128,9 +127,12 @@ MCIERR_SEQ_PORT_MISCERROR, "用指定的端口时出错。" MCIERR_SEQ_PORT_NONEXISTENT, "在系统上没有安装指定的 MIDI 设备。使用控制面板中的驱动程序选项来安装一个 MIDI 设备。" MCIERR_SEQ_PORTUNSPECIFIED, "系统没有指定当前 MIDI 端口。" MCIERR_SEQ_TIMER, "所有多媒体定时器正在被其他应用程序使用。退出这些应用程序;然后,再试一次。" + END -STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL + +STRINGTABLE BEGIN /* MMSYS errors */ @@ -236,4 +238,5 @@ MCIERR_SEQ_PORT_MISCERROR, "指定的連接埠發生了錯誤。" MCIERR_SEQ_PORT_NONEXISTENT, "指定的 MIDI 裝置未安裝到系統上。請使用控制臺中的「驅動程式」選項以安裝 MIDI 裝置。" MCIERR_SEQ_PORTUNSPECIFIED, "系統尚未指定目前的 MIDI 連接埠。" MCIERR_SEQ_TIMER, "所有多媒體計時器正被其他應用程式使用中。請結束其中某一個應用程式,然後再試一次。" + END diff --git a/dll/win32/wldap32/lang/wldap32_De.rc b/dll/win32/wldap32/lang/wldap32_De.rc index 5743b84d0b2f0..da90079942bff 100644 --- a/dll/win32/wldap32/lang/wldap32_De.rc +++ b/dll/win32/wldap32/lang/wldap32_De.rc @@ -18,8 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Fr.rc b/dll/win32/wldap32/lang/wldap32_Fr.rc index ff5d1a59c0188..0c7c52a8c8e23 100644 --- a/dll/win32/wldap32/lang/wldap32_Fr.rc +++ b/dll/win32/wldap32/lang/wldap32_Fr.rc @@ -19,9 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Hu.rc b/dll/win32/wldap32/lang/wldap32_Hu.rc index deb45bd862eaa..ba4e63ded4bd1 100644 --- a/dll/win32/wldap32/lang/wldap32_Hu.rc +++ b/dll/win32/wldap32/lang/wldap32_Hu.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_It.rc b/dll/win32/wldap32/lang/wldap32_It.rc index 6b032ab3c44fe..bf775f7483169 100644 --- a/dll/win32/wldap32/lang/wldap32_It.rc +++ b/dll/win32/wldap32/lang/wldap32_It.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/*UTF-8*/ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Lt.rc b/dll/win32/wldap32/lang/wldap32_Lt.rc index 8527c357bb6b6..a9fecbec256df 100644 --- a/dll/win32/wldap32/lang/wldap32_Lt.rc +++ b/dll/win32/wldap32/lang/wldap32_Lt.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Pt.rc b/dll/win32/wldap32/lang/wldap32_Pt.rc index fd95c104af8c5..6015b533ee2d5 100644 --- a/dll/win32/wldap32/lang/wldap32_Pt.rc +++ b/dll/win32/wldap32/lang/wldap32_Pt.rc @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#pragma code_page(65001) - LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Ro.rc b/dll/win32/wldap32/lang/wldap32_Ro.rc index fe05b0e6ceac0..c916b1a1a4263 100644 --- a/dll/win32/wldap32/lang/wldap32_Ro.rc +++ b/dll/win32/wldap32/lang/wldap32_Ro.rc @@ -21,8 +21,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE { 0 "Succes" diff --git a/dll/win32/wldap32/lang/wldap32_Ru.rc b/dll/win32/wldap32/lang/wldap32_Ru.rc index eeb2d612c8dd1..8032c26601fe1 100644 --- a/dll/win32/wldap32/lang/wldap32_Ru.rc +++ b/dll/win32/wldap32/lang/wldap32_Ru.rc @@ -18,9 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Uk.rc b/dll/win32/wldap32/lang/wldap32_Uk.rc index f5665acff2430..678f20119bd1e 100644 --- a/dll/win32/wldap32/lang/wldap32_Uk.rc +++ b/dll/win32/wldap32/lang/wldap32_Uk.rc @@ -20,9 +20,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/dll/win32/wldap32/lang/wldap32_Zh.rc b/dll/win32/wldap32/lang/wldap32_Zh.rc index cc556548f1887..e40d6b501781a 100644 --- a/dll/win32/wldap32/lang/wldap32_Zh.rc +++ b/dll/win32/wldap32/lang/wldap32_Zh.rc @@ -21,9 +21,6 @@ * Copyright 2021 Chan Chilung */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE diff --git a/media/themes/Blackshade/blackshade.msstyles/blackshade.rc b/media/themes/Blackshade/blackshade.msstyles/blackshade.rc index cc2fbe0ef80f8..8aaff97d4be52 100644 --- a/media/themes/Blackshade/blackshade.msstyles/blackshade.rc +++ b/media/themes/Blackshade/blackshade.msstyles/blackshade.rc @@ -181,6 +181,7 @@ NORMAL_IE_PERSONALBARMENU_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPCOLLAPSE_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPEXPAND_BMP BITMAP "bitmaps/dummy.bmp" +/* UTF-8 */ #pragma code_page(65001) #ifdef LANGUAGE_DE_DE diff --git a/media/themes/Lautus/lautus.msstyles/lautus.rc b/media/themes/Lautus/lautus.msstyles/lautus.rc index 0a464970291a8..304f7a381b4ef 100644 --- a/media/themes/Lautus/lautus.msstyles/lautus.rc +++ b/media/themes/Lautus/lautus.msstyles/lautus.rc @@ -197,6 +197,7 @@ NORMAL_IE_PERSONALBARMENU_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPCOLLAPSE_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPEXPAND_BMP BITMAP "bitmaps/dummy.bmp" +/* UTF-8 */ #pragma code_page(65001) #ifdef LANGUAGE_CS_CZ diff --git a/media/themes/Lunar/lunar.msstyles/lunar.rc b/media/themes/Lunar/lunar.msstyles/lunar.rc index 1b0236bf0b233..b9a91d6bf7e5b 100644 --- a/media/themes/Lunar/lunar.msstyles/lunar.rc +++ b/media/themes/Lunar/lunar.msstyles/lunar.rc @@ -176,6 +176,7 @@ NORMAL_IE_PERSONALBARMENU_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPCOLLAPSE_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPEXPAND_BMP BITMAP "bitmaps/dummy.bmp" +/* UTF-8 */ #pragma code_page(65001) #ifdef LANGUAGE_CS_CZ diff --git a/media/themes/Mizu/mizu.msstyles/mizu.rc b/media/themes/Mizu/mizu.msstyles/mizu.rc index db738797849f5..1522e96bc806b 100644 --- a/media/themes/Mizu/mizu.msstyles/mizu.rc +++ b/media/themes/Mizu/mizu.msstyles/mizu.rc @@ -183,6 +183,7 @@ NORMAL_IE_PERSONALBARMENU_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPCOLLAPSE_BMP BITMAP "bitmaps/dummy.bmp" NORMAL_NORMALGROUPEXPAND_BMP BITMAP "bitmaps/dummy.bmp" +/* UTF-8 */ #pragma code_page(65001) #ifdef LANGUAGE_CS_CZ diff --git a/media/themes/Modern/modern.msstyles/modern.rc b/media/themes/Modern/modern.msstyles/modern.rc index 166a8d8b617f9..d065c17ef91b2 100644 --- a/media/themes/Modern/modern.msstyles/modern.rc +++ b/media/themes/Modern/modern.msstyles/modern.rc @@ -406,8 +406,9 @@ DARK_TREEEXPANDCOLLAPSE15_BMP BITMAP "bitmaps/Dark/DARK_TREEEXPANDCOLLAPSE15.bm DARK_TREEEXPANDCOLLAPSE_BMP BITMAP "bitmaps/Dark/DARK_TREEEXPANDCOLLAPSE.bmp" DARK_USERTILEBACKGROUND_BMP BITMAP "bitmaps/Dark/DARK_USERTILEBACKGROUND.bmp" - +/* UTF-8 */ #pragma code_page(65001) + #ifdef LANGUAGE_CS_CZ #include "lang/cs-CZ.rc" #endif diff --git a/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc index 3623caa0b2008..282c8f56810e7 100644 --- a/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/blankscr/lang/ro-RO.rc @@ -8,8 +8,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE BEGIN IDS_DESCRIPTION "Ecran gol (animație de inactivitate)" diff --git a/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc index 890fe7edc4203..6b546361fbb62 100644 --- a/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/butterflies/lang/ro-RO.rc @@ -8,8 +8,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - IDD_DLG_SCREEN DIALOGEX 0, 0, 172, 57 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Oprțiuni animație de inactivitate Fluturi" diff --git a/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc index 3625ae6c5c7d3..e1c6594102cc3 100644 --- a/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/circles/lang/ro-RO.rc @@ -8,8 +8,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE BEGIN IDS_DESCRIPTION "Cercuri (animație de inactivitate)" diff --git a/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc b/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc index 94e6aacbf6a05..327a8388f7930 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/bg-BG.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT diff --git a/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc b/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc index 4bf36de93114c..2c92fafddd2cf 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/de-DE.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL diff --git a/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc b/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc index 817083d04b919..5af32c58a9a4c 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/en-US.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US diff --git a/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc b/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc index 4b37d9ea12e63..f9cfc3f8787a2 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/es-ES.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL diff --git a/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc b/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc index 621077c0e32de..a2cf1e65434f0 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/fr-FR.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL diff --git a/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc b/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc index 37c1f7bc63c7f..f8accdce481f8 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/lt-LT.rc @@ -7,8 +7,6 @@ * DATE: 2007-12-02 */ -#include "resource.h" - LANGUAGE LANG_LITHUANIAN, SUBLANG_DEFAULT IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc b/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc index 9e2eb6275433d..bec66a70bf97a 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/nl-NL.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL diff --git a/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc b/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc index ae9c9f9c74b3b..41b3a1e8c8058 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/no-NO.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL diff --git a/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc b/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc index c7bfc2bdf166a..860c44d35702a 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/pl-PL.rc @@ -1,5 +1,3 @@ -#include "resource.h" - /* * translated by Caemyr - Olaf Siejka (Feb, 2008) * Use ReactOS forum PM or IRC to contact me diff --git a/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc index 5c5b0e65fbdc4..6310bcd183d46 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/ro-RO.rc @@ -6,12 +6,8 @@ * Copyright 2023-2024 Andrei Miloiu */ -#include "resource.h" - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - IDD_CONFIG DIALOGEX 0, 0, 340, 183 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Setări pentru economizorul de ecran Matrix" diff --git a/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc b/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc index e0223244c53d8..d2f3b22d7120c 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/ru-RU.rc @@ -6,8 +6,6 @@ * TRANSLATOR: Sergey Stopkin */ -#include "resource.h" - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc b/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc index 548bf67ee80a8..533fae2722172 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/sk-SK.rc @@ -6,8 +6,6 @@ * DATE OF TR: 25-07-2007 */ -#include "resource.h" - LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc b/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc index e81e5ef0c9ec5..2d2e243bb762d 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/th-TH.rc @@ -1,4 +1,3 @@ -#include "resource.h" LANGUAGE LANG_THAI, SUBLANG_DEFAULT diff --git a/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc b/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc index 9a30284906197..ef95c6c0e4fbd 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/tr-TR.rc @@ -5,8 +5,6 @@ * TRANSLATOR: Copyright 2022 Süleyman Poyraz */ -#include "resource.h" - LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc b/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc index ce9bc2ea98617..b251f75259999 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/uk-UA.rc @@ -6,8 +6,6 @@ * TRANSLATOR: Artem Reznikov */ -#include "resource.h" - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc b/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc index 4e3eb9b280cec..2ac9bc5f878ff 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/zh-CN.rc @@ -1,7 +1,5 @@ /* Simplified Chinese translation by Henry Tang Ih 2015 (henrytang2@hotmail.com) */ -#include "resource.h" - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc b/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc index 97c95dd45cffe..037f4c94f4b1b 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/zh-HK.rc @@ -5,8 +5,6 @@ * TRANSLATORS: Copyright 2021 Chan Chilung */ -#include "resource.h" - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc b/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc index 466c3d5c7cae1..daebf6f9f061c 100644 --- a/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc +++ b/modules/rosapps/applications/screensavers/matrix/lang/zh-TW.rc @@ -5,8 +5,6 @@ * TRANSLATORS: Copyright 2021 Chan Chilung */ -#include "resource.h" - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL IDD_CONFIG DIALOGEX 0, 0, 340, 183 diff --git a/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc b/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc index 76f1dccd46e09..b8d6dcaa11aaf 100644 --- a/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc +++ b/modules/rosapps/applications/screensavers/starfield/lang/ro-RO.rc @@ -8,8 +8,6 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL -#pragma code_page(65001) - STRINGTABLE BEGIN IDS_DESCRIPTION "Câmp de stele (animație de inactivitate)" diff --git a/modules/rosapps/applications/sysutils/fontsub/fontsub_res.rc b/modules/rosapps/applications/sysutils/fontsub/fontsub_res.rc index 0feaed8017d19..d054576ed59bc 100644 --- a/modules/rosapps/applications/sysutils/fontsub/fontsub_res.rc +++ b/modules/rosapps/applications/sysutils/fontsub/fontsub_res.rc @@ -20,15 +20,15 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #define REACTOS_STR_ORIGINAL_FILENAME "fontsub.exe" #include -/* UTF-8 */ -#pragma code_page(65001) - 1 ICON "fontsub.ico" 2 BITMAP "up.bmp" 3 BITMAP "down.bmp" 4 BITMAP "nil.bmp" +/* UTF-8 */ +#pragma code_page(65001) + #ifdef LANGUAGE_DE_DE #include "lang/de-DE.rc" #endif diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/de-DE.rc b/modules/rosapps/applications/sysutils/fontsub/lang/de-DE.rc index a967b49f5646d..6c14c6cb81096 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/de-DE.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/de-DE.rc @@ -8,9 +8,6 @@ * work. If not, see . */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/en-US.rc b/modules/rosapps/applications/sysutils/fontsub/lang/en-US.rc index 780e0f8b58392..9c6e10ece55b2 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/en-US.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/en-US.rc @@ -8,9 +8,6 @@ * work. If not, see . */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/es-ES.rc b/modules/rosapps/applications/sysutils/fontsub/lang/es-ES.rc index 2b1c2ecd69994..d187c346b6df9 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/es-ES.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/es-ES.rc @@ -10,9 +10,6 @@ * Translation: Julen Urizar Compains */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/ja-JP.rc b/modules/rosapps/applications/sysutils/fontsub/lang/ja-JP.rc index 012bce71d3031..03d460e78926e 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/ja-JP.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/ja-JP.rc @@ -8,9 +8,6 @@ * work. If not, see . */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/pl-PL.rc b/modules/rosapps/applications/sysutils/fontsub/lang/pl-PL.rc index 05dbb31093f46..6bc10b03f2470 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/pl-PL.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/pl-PL.rc @@ -8,9 +8,6 @@ * work. If not, see . */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_POLISH, SUBLANG_DEFAULT 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/ru-RU.rc b/modules/rosapps/applications/sysutils/fontsub/lang/ru-RU.rc index ab6258e087f09..0057ee28e0da0 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/ru-RU.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/ru-RU.rc @@ -8,9 +8,6 @@ * work. If not, see . */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/tr-TR.rc b/modules/rosapps/applications/sysutils/fontsub/lang/tr-TR.rc index 06a49d97abe02..f36f4becbc333 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/tr-TR.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/tr-TR.rc @@ -5,9 +5,6 @@ * TRANSLATOR: Copyright 2022 Süleyman Poyraz */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/zh-CN.rc b/modules/rosapps/applications/sysutils/fontsub/lang/zh-CN.rc index 8a732f5dc2968..b851148c15fbe 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/zh-CN.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/zh-CN.rc @@ -8,9 +8,6 @@ * work. If not, see . */ -/* UTF-8 */ -#pragma code_page(65001) - /* Translated by Luke Luo on 2018-11-13 */ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/zh-HK.rc b/modules/rosapps/applications/sysutils/fontsub/lang/zh-HK.rc index e592bc5613bc8..0dc8bcb7a67f7 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/zh-HK.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/zh-HK.rc @@ -6,9 +6,6 @@ * REFERENCES: Chinese (Traditional) resource file */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_HONGKONG 1 MENU diff --git a/modules/rosapps/applications/sysutils/fontsub/lang/zh-TW.rc b/modules/rosapps/applications/sysutils/fontsub/lang/zh-TW.rc index 34fef3f833ee4..d6f3e0361fbed 100644 --- a/modules/rosapps/applications/sysutils/fontsub/lang/zh-TW.rc +++ b/modules/rosapps/applications/sysutils/fontsub/lang/zh-TW.rc @@ -6,9 +6,6 @@ * Copyright 2021 Chan Chilung */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL 1 MENU diff --git a/modules/rostests/apitests/imm32/resource.rc b/modules/rostests/apitests/imm32/resource.rc index c01bc75b2da58..a74712ad9dd27 100644 --- a/modules/rostests/apitests/imm32/resource.rc +++ b/modules/rostests/apitests/imm32/resource.rc @@ -1,6 +1,8 @@ #include #include -#pragma code_page(65001) /* UTF-8 */ + +/* UTF-8 */ +#pragma code_page(65001) LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT diff --git a/modules/rostests/winetests/GUI/WinetestsGUI.rc b/modules/rostests/winetests/GUI/WinetestsGUI.rc index c07badd922ca2..71728c02d54fc 100644 --- a/modules/rostests/winetests/GUI/WinetestsGUI.rc +++ b/modules/rostests/winetests/GUI/WinetestsGUI.rc @@ -13,7 +13,6 @@ /* UTF-8 */ #pragma code_page(65001) - #ifdef LANGUAGE_EN_US #include "lang/en-US.rc" #endif diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_De.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_De.rc index 12a292c139e29..84ad11ad8b7a8 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_De.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_De.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Es.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Es.rc index 336c9ab5b8f65..18276fc44daa6 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Es.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Es.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Fr.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Fr.rc index 20c0672a38c7a..8cd1ef04bd74c 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Fr.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Fr.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Hu.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Hu.rc index 95fa1dbcce819..a70fc12f3a91c 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Hu.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Hu.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_It.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_It.rc index f580a193aa5e1..96b4bb8415fb4 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_It.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_It.rc @@ -20,9 +20,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Ja.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Ja.rc index 525b8210aa4eb..0982570158151 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Ja.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Ja.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Lt.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Lt.rc index 4e8894854da98..5f2a6becb8196 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Lt.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Lt.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Ro.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Ro.rc index 384d3f1f6736b..fde1a5f4708ab 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Ro.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Ro.rc @@ -23,8 +23,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Ru.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Ru.rc index 623ae6fbcec81..1bcd9f31fd83a 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Ru.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Ru.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Si.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Si.rc index c08313c12887b..f9d604a58aacd 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Si.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Si.rc @@ -19,8 +19,6 @@ * */ -#pragma code_page(65001) - LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Uk.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Uk.rc index d428148d68e47..6882a0c4d033a 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Uk.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Uk.rc @@ -19,9 +19,6 @@ * */ -/* UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT STRINGTABLE diff --git a/win32ss/printing/monitors/localmon/ui/lang/ui_Zh.rc b/win32ss/printing/monitors/localmon/ui/lang/ui_Zh.rc index 67a4eede596ec..384c6ce37906f 100644 --- a/win32ss/printing/monitors/localmon/ui/lang/ui_Zh.rc +++ b/win32ss/printing/monitors/localmon/ui/lang/ui_Zh.rc @@ -19,9 +19,6 @@ * */ -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED STRINGTABLE From 0743faf2e322071416d756ddac72ffdb0f3e31eb Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Sun, 22 Dec 2024 21:27:20 +0100 Subject: [PATCH 066/750] [NETSHELL] Handle DefView accelerators (#7572) CORE-18750 --- dll/shellext/netshell/shfldr_netconnect.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dll/shellext/netshell/shfldr_netconnect.cpp b/dll/shellext/netshell/shfldr_netconnect.cpp index 3c14b9672e9c1..f735806505487 100644 --- a/dll/shellext/netshell/shfldr_netconnect.cpp +++ b/dll/shellext/netshell/shfldr_netconnect.cpp @@ -641,6 +641,14 @@ HRESULT WINAPI CNetConUiObject::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { CmdId = IDS_NET_PROPERTIES; } + else if ((UINT_PTR)lpcmi->lpVerb == FCIDM_SHVIEW_RENAME) // DefView accelerator + { + CmdId = IDS_NET_RENAME; + } + else if ((UINT_PTR)lpcmi->lpVerb == FCIDM_SHVIEW_PROPERTIES) // DefView accelerator + { + CmdId = IDS_NET_PROPERTIES; + } else if (!IS_INTRESOURCE(lpcmi->lpVerb) || LOWORD(lpcmi->lpVerb) > 7) { FIXME("Got invalid command\n"); From 6f60301d25a29583d3959fc957aa6530b076ab41 Mon Sep 17 00:00:00 2001 From: Denis Robert Date: Mon, 23 Dec 2024 14:24:21 +0100 Subject: [PATCH 067/750] [NEWDEV] Fix bad use of PropSheet_SetCurSelByID (#7574) PropSheet_SetCurSelByID() was badly called in response of PSN_WIZBACK or PSN_WIZNEXT notifications. See the reference on these notification codes: https://learn.microsoft.com/en-us/windows/win32/controls/psn-wizback > Returns 0 to allow the wizard to go to the previous page. Returns -1 to > prevent the wizard from changing pages. To display a particular page, > return its dialog resource identifier. > (...) > To set the return value, the dialog box procedure for the page must call > the SetWindowLong function with the DWL_MSGRESULT value and return TRUE. This bug sometimes causes the wrong page to appear (e.g. "Previous" in IDD_NODRIVER should come back in IDD_CHSOURCE, but goes to IDD_WELCOME). --- dll/win32/newdev/wizard.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dll/win32/newdev/wizard.c b/dll/win32/newdev/wizard.c index 3dd231a401382..5204bcdf5d22f 100644 --- a/dll/win32/newdev/wizard.c +++ b/dll/win32/newdev/wizard.c @@ -545,9 +545,9 @@ WelcomeDlgProc( if (SendDlgItemMessage(hwndDlg, IDC_RADIO_AUTO, BM_GETCHECK, (WPARAM)0, (LPARAM)0) == BST_CHECKED) { if (PrepareFoldersToScan(DevInstData, TRUE, FALSE, NULL)) - PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_SEARCHDRV); + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_SEARCHDRV); else - PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_INSTALLFAILED); + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_INSTALLFAILED); } return TRUE; @@ -759,11 +759,11 @@ CHSourceDlgProc( IsDlgButtonChecked(hwndDlg, IDC_CHECK_PATH), GetDlgItem(hwndDlg, IDC_COMBO_PATH))) { - PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_SEARCHDRV); + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_SEARCHDRV); } else { - PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_INSTALLFAILED); + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_INSTALLFAILED); } } else @@ -1059,7 +1059,7 @@ NoDriverDlgProc( hwndControl = GetDlgItem(GetParent(hwndDlg), IDCANCEL); ShowWindow(hwndControl, SW_SHOW); EnableWindow(hwndControl, TRUE); - PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_CHSOURCE); + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_CHSOURCE); return TRUE; case PSN_WIZFINISH: From c19ebd0b0a2c4775b84ed625ed09a53f63ad870c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 23 Dec 2024 21:58:25 +0100 Subject: [PATCH 068/750] [SHLWAPI] Explicitly cast to "int*" the 3rd parameter of StrToIntExW calls (fix build) Fixes build error: ../src/dll/win32/shlwapi/ordinal.c:5417:63: error: passing argument 3 of 'StrToIntExW' from incompatible pointer type [-Werror=incompatible-pointer-types] if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, &V_I4(&variTemp))) In file included from ../src/dll/win32/shlwapi/ordinal.c:45: ../src/sdk/include/psdk/shlwapi.h:1682:52: note: expected 'int *' but argument is of type 'LONG *' {aka 'long int *'} BOOL WINAPI StrToIntExW(_In_ LPCWSTR, DWORD, _Out_ int*); ^~~~ --- dll/win32/shlwapi/ordinal.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dll/win32/shlwapi/ordinal.c b/dll/win32/shlwapi/ordinal.c index f36cb6a6b668c..3d506b0285e8c 100644 --- a/dll/win32/shlwapi/ordinal.c +++ b/dll/win32/shlwapi/ordinal.c @@ -5414,7 +5414,7 @@ HRESULT VariantChangeTypeForRead(_Inout_ VARIANTARG *pvarg, _In_ VARTYPE vt) if (vt == VT_I1 || vt == VT_I2 || vt == VT_I4) { - if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, &V_I4(&variTemp))) + if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, (int*)&V_I4(&variTemp))) goto DoDefault; V_VT(&variTemp) = VT_INT; @@ -5429,7 +5429,7 @@ HRESULT VariantChangeTypeForRead(_Inout_ VARIANTARG *pvarg, _In_ VARTYPE vt) if (vt == VT_UI1 || vt == VT_UI2 || vt == VT_UI4) { - if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, (LPINT)&V_UI4(&variTemp))) + if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, (int*)&V_UI4(&variTemp))) goto DoDefault; V_VT(&variTemp) = VT_UINT; @@ -5441,7 +5441,7 @@ HRESULT VariantChangeTypeForRead(_Inout_ VARIANTARG *pvarg, _In_ VARTYPE vt) if (vt == VT_INT || vt == VT_UINT) { - if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, &V_INT(&variTemp))) + if (!StrToIntExW(V_BSTR(&vargTemp), STIF_SUPPORT_HEX, (int*)&V_INT(&variTemp))) goto DoDefault; V_VT(&variTemp) = VT_UINT; From d7f1a784a86570863804daaf6479ffba2863422f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 23 Dec 2024 21:56:17 +0100 Subject: [PATCH 069/750] [SHLWAPI] Use an explicit "int*" type for the 3rd parameter of StrToIntExA/W As this is already present in our PSDK shlwapi.h header, MS PSDK one, and MSDN. --- dll/win32/shlwapi/string.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dll/win32/shlwapi/string.c b/dll/win32/shlwapi/string.c index dec137a9d677b..7c792d6656411 100644 --- a/dll/win32/shlwapi/string.c +++ b/dll/win32/shlwapi/string.c @@ -883,7 +883,7 @@ int WINAPI StrToIntW(LPCWSTR lpszStr) * the string is treated as a decimal string. A leading '-' is ignored for * hexadecimal numbers. */ -BOOL WINAPI StrToIntExA(LPCSTR lpszStr, DWORD dwFlags, LPINT lpiRet) +BOOL WINAPI StrToIntExA(LPCSTR lpszStr, DWORD dwFlags, int *lpiRet) { LONGLONG li; BOOL bRes; @@ -967,7 +967,7 @@ BOOL WINAPI StrToInt64ExA(LPCSTR lpszStr, DWORD dwFlags, LONGLONG *lpiRet) * * See StrToIntExA. */ -BOOL WINAPI StrToIntExW(LPCWSTR lpszStr, DWORD dwFlags, LPINT lpiRet) +BOOL WINAPI StrToIntExW(LPCWSTR lpszStr, DWORD dwFlags, int *lpiRet) { LONGLONG li; BOOL bRes; From 3b800165b0da7895756a8b88b726a9473f101b87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 30 Oct 2024 12:46:17 +0100 Subject: [PATCH 070/750] [SETUP:REACTOS][SYSSETUP] Fix Shift-F10 cmd.exe invocation. Pressing Shift-F10 to open cmd.exe when the setup program runs from a different current directory than System32, now works correctly. Use the 2nd CreateProcessW() `lpCommandLine` parameter, instead of the 1st parameter `lpApplicationName`, so as to use default path search. The command-line buffer given to the 2nd-parameter can be temporarily modified by CreateProcessW(), thus use an on-stack buffer. https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw#parameters --- base/setup/reactos/reactos.c | 6 +++--- dll/win32/syssetup/install.c | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/base/setup/reactos/reactos.c b/base/setup/reactos/reactos.c index fe169bd3ee91c..8bdb3df629cda 100644 --- a/base/setup/reactos/reactos.c +++ b/base/setup/reactos/reactos.c @@ -2762,7 +2762,6 @@ HotkeyThread(LPVOID Parameter) DPRINT("HotkeyThread start\n"); hotkey = GlobalAddAtomW(L"Setup Shift+F10 Hotkey"); - if (!RegisterHotKey(NULL, hotkey, MOD_SHIFT, VK_F10)) DPRINT1("RegisterHotKey failed with %lu\n", GetLastError()); @@ -2770,11 +2769,12 @@ HotkeyThread(LPVOID Parameter) { if (msg.hwnd == NULL && msg.message == WM_HOTKEY && msg.wParam == hotkey) { + WCHAR CmdLine[] = L"cmd.exe"; // CreateProcess can modify this buffer. STARTUPINFOW si = { sizeof(si) }; PROCESS_INFORMATION pi; - if (CreateProcessW(L"cmd.exe", - NULL, + if (CreateProcessW(NULL, + CmdLine, NULL, NULL, FALSE, diff --git a/dll/win32/syssetup/install.c b/dll/win32/syssetup/install.c index e7ba620479aad..0f6a150da4e9b 100644 --- a/dll/win32/syssetup/install.c +++ b/dll/win32/syssetup/install.c @@ -1049,19 +1049,19 @@ HotkeyThread(LPVOID Parameter) DPRINT("HotkeyThread start\n"); hotkey = GlobalAddAtomW(L"Setup Shift+F10 Hotkey"); - if (!RegisterHotKey(NULL, hotkey, MOD_SHIFT, VK_F10)) DPRINT1("RegisterHotKey failed with %lu\n", GetLastError()); - while (GetMessage(&msg, NULL, 0, 0)) + while (GetMessageW(&msg, NULL, 0, 0)) { if (msg.hwnd == NULL && msg.message == WM_HOTKEY && msg.wParam == hotkey) { + WCHAR CmdLine[] = L"cmd.exe"; // CreateProcess can modify this buffer. STARTUPINFOW si = { sizeof(si) }; PROCESS_INFORMATION pi; - if (CreateProcessW(L"cmd.exe", - NULL, + if (CreateProcessW(NULL, + CmdLine, NULL, NULL, FALSE, From 1ea3af8959da6fcf34d3eb92885fe01ce18de83c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 14 Nov 2023 16:35:10 +0200 Subject: [PATCH 071/750] [SDK] Fix naming of a CPUID structure --- ntoskrnl/ke/amd64/cpu.c | 2 +- sdk/include/reactos/x86x64/Cpuid.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/ke/amd64/cpu.c b/ntoskrnl/ke/amd64/cpu.c index d1e9567c1b82a..24a17d24458c4 100644 --- a/ntoskrnl/ke/amd64/cpu.c +++ b/ntoskrnl/ke/amd64/cpu.c @@ -255,7 +255,7 @@ KiGetFeatureBits(VOID) if (signature.MaxLeaf >= CPUID_EXTENDED_STATE) { /* Read CPUID_EXTENDED_STATE */ - CPUID_EXTENDED_STATE_SUB_LEAF_EAX_REGS ExtStateSub; + CPUID_EXTENDED_STATE_SUB_LEAF_REGS ExtStateSub; __cpuidex(ExtStateSub.AsInt32, CPUID_EXTENDED_STATE, CPUID_EXTENDED_STATE_SUB_LEAF); diff --git a/sdk/include/reactos/x86x64/Cpuid.h b/sdk/include/reactos/x86x64/Cpuid.h index 39ece442c99e3..3c317ccea6215 100644 --- a/sdk/include/reactos/x86x64/Cpuid.h +++ b/sdk/include/reactos/x86x64/Cpuid.h @@ -112,7 +112,7 @@ typedef union CPUID_EXTENDED_STATE_SUB_LEAF_ECX Ecx; UINT32 Edx; // Reports the supported bits of the upper 32 bits of the IA32_XSS MSR. IA32_XSS[n + 32] can be set to 1 only if EDX[n] is 1. }; -} CPUID_EXTENDED_STATE_SUB_LEAF_EAX_REGS; +} CPUID_EXTENDED_STATE_SUB_LEAF_REGS; // CPUID_EXTENDED_CPU_SIG (0x80000001) typedef union From 1c55924045facde76d9f7c855f0760e16365b778 Mon Sep 17 00:00:00 2001 From: Doug Lyons Date: Tue, 24 Dec 2024 17:51:31 -0600 Subject: [PATCH 072/750] [USER32_APTEST][USER32] CopyImage improve regression test and function. (#7524) CORE-19806 and CORE-17902. * Follow-up of PR #6886 and commit d3ec7cd to remove hack. --- modules/rostests/apitests/user32/CopyImage.c | 53 ++++++++++++++++++++ win32ss/user/user32/windows/cursoricon.c | 46 ++++++++++++++--- 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/modules/rostests/apitests/user32/CopyImage.c b/modules/rostests/apitests/user32/CopyImage.c index bad7c472f4fed..2280b20a6ba9c 100644 --- a/modules/rostests/apitests/user32/CopyImage.c +++ b/modules/rostests/apitests/user32/CopyImage.c @@ -3,6 +3,7 @@ * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+) * PURPOSE: Test for SetFocus/GetFocus/GetGUIThreadInfo * COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ +* Copyright 2024 Doug Lyons */ #include "precomp.h" @@ -76,9 +77,61 @@ Test_CopyImage_Flags(UINT uType) DeleteObject(hImage); } +static VOID +Test_CopyImage_hImage_NULL(void) +{ + HANDLE hImg; + DWORD LastError; + + /* Test NULL HANDLE return and GetLastError return. */ + SetLastError(0xdeadbeef); + hImg = CopyImage(NULL, IMAGE_ICON, 16, 16, LR_COPYFROMRESOURCE); + LastError = GetLastError(); + ok(LastError == ERROR_INVALID_CURSOR_HANDLE, "Wrong error 0x%08lx returned\n", LastError); + ok(!hImg, "Image returned should have been NULL, hImg was %p\n", hImg); + + SetLastError(0xdeadbeef); + hImg = CopyImage(NULL, IMAGE_BITMAP, 16, 16, LR_COPYFROMRESOURCE); + LastError = GetLastError(); + ok(LastError == ERROR_INVALID_HANDLE, "Wrong error 0x%08lx returned\n", LastError); + ok(!hImg, "Image returned should have been NULL, hImg was %p\n", hImg); + + + SetLastError(0xdeadbeef); + hImg = CopyImage(NULL, IMAGE_CURSOR, 16, 16, LR_COPYFROMRESOURCE); + LastError = GetLastError(); + ok(LastError == ERROR_INVALID_CURSOR_HANDLE, "Wrong error 0x%08lx returned\n", LastError); + ok(!hImg, "Image returned should have been NULL, hImg was %p\n", hImg); + + /* Test bad Flags for Invalid Parameter return */ + SetLastError(0xdeadbeef); + /* 0x80000000 is an invalid flag value */ + hImg = CopyImage(NULL, IMAGE_BITMAP, 16, 16, 0x80000000); + LastError = GetLastError(); + ok(LastError == ERROR_INVALID_PARAMETER, "Wrong error 0x%08lx returned\n", LastError); + ok(!hImg, "Image returned should have been NULL, hImg was %p\n", hImg); + + /* Test bad Type (5) GetLastError return value. Not Icon, Cursor, or Bitmap. */ + SetLastError(0xdeadbeef); + hImg = CopyImage(NULL, 5, 16, 16, LR_COPYFROMRESOURCE); + LastError = GetLastError(); + ok(LastError == ERROR_INVALID_PARAMETER, "Wrong error 0x%08lx returned\n", LastError); + ok(!hImg, "Image returned should have been NULL, hImg was %p\n", hImg); + + /* Test bad type (5) GetLastError return value with good HANDLE */ + hImg = CreateTestImage(IMAGE_ICON); + SetLastError(0xdeadbeef); + hImg = CopyImage(hImg, 5, 16, 16, LR_COPYFROMRESOURCE); + LastError = GetLastError(); + ok(LastError == ERROR_INVALID_PARAMETER, "Wrong error 0x%08lx returned\n", LastError); + ok(!hImg, "Image returned should have been NULL, hImg was %p\n", hImg); + DeleteObject(hImg); +} + START_TEST(CopyImage) { Test_CopyImage_Flags(IMAGE_BITMAP); Test_CopyImage_Flags(IMAGE_CURSOR); Test_CopyImage_Flags(IMAGE_ICON); + Test_CopyImage_hImage_NULL(); } diff --git a/win32ss/user/user32/windows/cursoricon.c b/win32ss/user/user32/windows/cursoricon.c index 53c98456e8150..b1d8bc7e69ad2 100644 --- a/win32ss/user/user32/windows/cursoricon.c +++ b/win32ss/user/user32/windows/cursoricon.c @@ -2041,16 +2041,50 @@ HANDLE WINAPI CopyImage( switch(uType) { case IMAGE_BITMAP: + if (!hImage) + { + SetLastError(ERROR_INVALID_HANDLE); + break; + } return BITMAP_CopyImage(hImage, cxDesired, cyDesired, fuFlags); case IMAGE_CURSOR: case IMAGE_ICON: - /* HACK: Copying bitmaps with LR_COPYFROMRESOURCE flag fails. CORE-17902. - * This is a way to return the original bit map if we need - * the icons to show up. We need a simpler test. */ { - HANDLE handle = CURSORICON_CopyImage(hImage, uType == IMAGE_ICON, cxDesired, cyDesired, fuFlags); - if (!handle && (fuFlags & (LR_COPYFROMRESOURCE|LR_COPYRETURNORG))) - handle = CURSORICON_CopyImage(hImage, uType == IMAGE_ICON, cxDesired, cyDesired, (fuFlags & ~LR_COPYFROMRESOURCE)); + HANDLE handle; + if (!hImage) + { + SetLastError(ERROR_INVALID_CURSOR_HANDLE); + break; + } + handle = CURSORICON_CopyImage(hImage, uType == IMAGE_ICON, cxDesired, cyDesired, fuFlags); + if (!handle && (fuFlags & LR_COPYFROMRESOURCE)) + { + /* Test if the hImage is the same size as what we want by getting + * its BITMAP and comparing its dimensions to the desired size. */ + BITMAP bm; + + ICONINFO iconinfo = { 0 }; + if (!GetIconInfo(hImage, &iconinfo)) + { + ERR("GetIconInfo Failed. hImage %p\n", hImage); + return NULL; + } + if (!GetObject(iconinfo.hbmColor, sizeof(bm), &bm)) + { + ERR("GetObject Failed. iconinfo %p\n", iconinfo); + return NULL; + } + + DeleteObject(iconinfo.hbmMask); + DeleteObject(iconinfo.hbmColor); + + /* If the images are the same size remove LF_COPYFROMRESOURCE and try again */ + if (cxDesired == bm.bmWidth && cyDesired == bm.bmHeight) + { + handle = CURSORICON_CopyImage(hImage, uType == IMAGE_ICON, cxDesired, + cyDesired, (fuFlags & ~LR_COPYFROMRESOURCE)); + } + } return handle; } default: From 3dd6e3103fd7d587cb42adb14f868776cb795de7 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 25 Dec 2024 12:52:55 +0100 Subject: [PATCH 073/750] [INCLUDE][WKSSVC][MSV1_0] Rename msv1_0p.h to ntmsv1_0.h and move it to the ddk directory --- base/services/wkssvc/precomp.h | 1 + dll/win32/msv1_0/precomp.h | 2 +- sdk/include/ddk/ntmsv1_0.h | 47 ++++++++++++++++++++++++++++++++++ sdk/include/reactos/msv1_0p.h | 17 ------------ 4 files changed, 49 insertions(+), 18 deletions(-) create mode 100644 sdk/include/ddk/ntmsv1_0.h delete mode 100644 sdk/include/reactos/msv1_0p.h diff --git a/base/services/wkssvc/precomp.h b/base/services/wkssvc/precomp.h index b6d575316ab71..f2fbde4e433cb 100644 --- a/base/services/wkssvc/precomp.h +++ b/base/services/wkssvc/precomp.h @@ -15,6 +15,7 @@ #include #include #include +#include //#include #include diff --git a/dll/win32/msv1_0/precomp.h b/dll/win32/msv1_0/precomp.h index a034c3e610061..a56611e4ff2d3 100644 --- a/dll/win32/msv1_0/precomp.h +++ b/dll/win32/msv1_0/precomp.h @@ -27,10 +27,10 @@ #include #include #include +#include #include //#include -#include #include "ntlm/global.h" #include "ntlm/protocol.h" diff --git a/sdk/include/ddk/ntmsv1_0.h b/sdk/include/ddk/ntmsv1_0.h new file mode 100644 index 0000000000000..7db82d1feb155 --- /dev/null +++ b/sdk/include/ddk/ntmsv1_0.h @@ -0,0 +1,47 @@ +#ifndef _NTMSV1_0_ +#define _NTMSV1_0_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _MSV1_0_ENUMUSERS_REQUEST +{ + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; +} MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST; + +typedef struct _MSV1_0_ENUMUSERS_RESPONSE +{ + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG NumberOfLoggedOnUsers; + PLUID LogonIds; + PULONG EnumHandles; +} MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE; + +typedef struct _MSV1_0_GETUSERINFO_REQUEST +{ + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + LUID LogonId; +} MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST; + +typedef struct _MSV1_0_GETUSERINFO_RESPONSE +{ + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + PSID UserSid; + UNICODE_STRING UserName; + UNICODE_STRING LogonDomainName; + UNICODE_STRING LogonServer; + SECURITY_LOGON_TYPE LogonType; +} MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE; + +typedef struct _MSV1_0_RELOGON_REQUEST +{ + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + UNICODE_STRING LogonServer; +} MSV1_0_RELOGON_REQUEST, *PMSV1_0_RELOGON_REQUEST; + +#ifdef __cplusplus +} +#endif + +#endif /* _NTMSV1_0_ */ diff --git a/sdk/include/reactos/msv1_0p.h b/sdk/include/reactos/msv1_0p.h deleted file mode 100644 index 674d5f1f5a20b..0000000000000 --- a/sdk/include/reactos/msv1_0p.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _MSV1_0P_ -#define _MSV1_0P_ - -typedef struct _MSV1_0_ENUMUSERS_REQUEST -{ - MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; -} MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST; - -typedef struct _MSV1_0_ENUMUSERS_RESPONSE -{ - MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; - ULONG NumberOfLoggedOnUsers; - PLUID LogonIds; - PULONG EnumHandles; -} MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE; - -#endif /* _MSV1_0P_ */ From 7d75bfb449286204c43766eea43e872f51065568 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 25 Dec 2024 20:32:08 +0100 Subject: [PATCH 074/750] [SHELL32] ILLoadFromStream must allow loading unknown pidl formats (#7570) --- dll/win32/shell32/debughlp.cpp | 21 ++++++++++++++++----- dll/win32/shell32/wine/pidl.c | 6 +++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/dll/win32/shell32/debughlp.cpp b/dll/win32/shell32/debughlp.cpp index 6778418c7a8bd..f57d399789b07 100644 --- a/dll/win32/shell32/debughlp.cpp +++ b/dll/win32/shell32/debughlp.cpp @@ -22,6 +22,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(pidl); +static inline BYTE _dbg_ILGetType(LPCITEMIDLIST pidl) +{ + return pidl && pidl->mkid.cb >= 3 ? pidl->mkid.abID[0] : 0; +} + +static inline BYTE _dbg_ILGetFSType(LPCITEMIDLIST pidl) +{ + const BYTE type = _dbg_ILGetType(pidl); + return (type & PT_FOLDERTYPEMASK) == PT_FS ? type : 0; +} + static LPITEMIDLIST _dbg_ILGetNext(LPCITEMIDLIST pidl) { @@ -97,6 +108,9 @@ LPWSTR _dbg_ILGetTextPointerW(LPCITEMIDLIST pidl) if (pdata) { + if (_dbg_ILGetFSType(pidl) & PT_FS_UNICODE_FLAG) + return (LPWSTR)&(pdata->u.file.szNames); + switch (pdata->type) { case PT_GUID: @@ -126,9 +140,6 @@ LPWSTR _dbg_ILGetTextPointerW(LPCITEMIDLIST pidl) case PT_SHARE: /* return (LPSTR)&(pdata->u.network.szNames); */ return NULL; - - case PT_VALUEW: - return (LPWSTR)&(pdata->u.file.szNames); } } return NULL; @@ -271,7 +282,7 @@ static void pdump_impl (LPCITEMIDLIST pidl) char szName[MAX_PATH]; _dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH); - if ( pData && (PT_FOLDER == type || PT_VALUE == type) ) + if (_dbg_ILGetFSType(pidltemp)) dwAttrib = pData->u.file.uFileAttribs; MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n", @@ -288,7 +299,7 @@ static void pdump_impl (LPCITEMIDLIST pidl) char szName[MAX_PATH]; _dbg_ILSimpleGetText(pidltemp, szName, MAX_PATH); - if ( pData && (PT_FOLDER == type || PT_VALUE == type) ) + if (_dbg_ILGetFSType(pidltemp)) dwAttrib = pData->u.file.uFileAttribs; MESSAGE ("[%p] size=%04u type=%x attr=0x%08x name=%s (%s,%s)\n", diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 2bca7cdd4363f..94d9a22387ac0 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -333,8 +333,10 @@ HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST * ppPidl) if (*ppPidl && !pcheck(*ppPidl)) { WARN("Check failed\n"); +#ifndef __REACTOS__ /* We don't know all pidl formats, must allow loading unknown */ SHFree(*ppPidl); *ppPidl = NULL; +#endif } IStream_Release (pStream); @@ -2030,11 +2032,9 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl, LPWSTR pOut, UINT uSize) */ BOOL _ILIsUnicode(LPCITEMIDLIST pidl) { - LPPIDLDATA lpPData = _ILGetDataPointer(pidl); - TRACE("(%p)\n",pidl); - return (pidl && lpPData && PT_VALUEW == lpPData->type); + return (_ILGetFSType(pidl) & PT_FS_UNICODE_FLAG) != 0; } BOOL _ILIsDesktop(LPCITEMIDLIST pidl) From aee59404cea67b45aa35b4bc452d6c393c0633b6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 23 Dec 2024 17:13:13 +0100 Subject: [PATCH 075/750] [NDK] Remove amd64/asm.h Most definitions were either duplicated or unused. Move the remaining ones to amd64/ketypes.h. Actual asm definitions are autogenerated. --- sdk/include/ndk/amd64/asm.h | 427 -------------------------------- sdk/include/ndk/amd64/ketypes.h | 20 ++ sdk/include/ndk/asm.h | 6 +- 3 files changed, 22 insertions(+), 431 deletions(-) delete mode 100644 sdk/include/ndk/amd64/asm.h diff --git a/sdk/include/ndk/amd64/asm.h b/sdk/include/ndk/amd64/asm.h deleted file mode 100644 index 9adcc3842d12b..0000000000000 --- a/sdk/include/ndk/amd64/asm.h +++ /dev/null @@ -1,427 +0,0 @@ -/*++ NDK Version: 0095 - -Copyright (c) Alex Ionescu. All rights reserved. - -Header Name: - - amd64/asm.h - -Abstract: - - ASM Offsets for dealing with de-referencing structures in registers. - -Author: - - Timo Kreuzer (timo.kreuzer@reactos.org) 06-Sep-2008 - ---*/ -#ifndef _ASM_AMD64_H -#define _ASM_AMD64_H - -#ifndef HEX - #ifdef _USE_ML - #define HEX(x) x##h - #else - #define HEX(val) 0x0##val - #endif -#endif - -#define SIZEOF_FX_SAVE_AREA 528 // HACK - -// -// CPU Modes -// -#define KernelMode HEX(0) -#define UserMode HEX(1) - -// -// KTSS Offsets -// -#define KTSS64_RSP0 HEX(04) -#define KTSS64_RSP1 HEX(0c) -#define KTSS64_RSP2 HEX(14) -#define KTSS64_IST HEX(1c) -#define KTSS64_IO_MAP_BASE HEX(66) - -// -// KTHREAD Offsets -// -#define KTHREAD_DEBUG_ACTIVE HEX(03) -#define KTHREAD_INITIAL_STACK HEX(28) -#define KTHREAD_STACK_LIMIT HEX(30) -#define KTHREAD_WAIT_IRQL HEX(156) - -// -// KPRCB Offsets -// -#define KPRCB_CurrentThread HEX(08) - - -// -// KPCR Offsets -// -#define KPCR_TSS_BASE HEX(08) -#define KPCR_SELF HEX(18) -#define KPCR_STALL_SCALE_FACTOR HEX(64) -#define KPCR_PRCB HEX(180 - -// -// KTRAP_FRAME Offsets -// -#define KTRAP_FRAME_P1Home HEX(00) -#define KTRAP_FRAME_P2Home HEX(08) -#define KTRAP_FRAME_P3Home HEX(10) -#define KTRAP_FRAME_P4Home HEX(18) -#define KTRAP_FRAME_P5 HEX(20) -#define KTRAP_FRAME_PreviousMode HEX(28) -#define KTRAP_FRAME_PreviousIrql HEX(29) -#define KTRAP_FRAME_FaultIndicator HEX(2A) -#define KTRAP_FRAME_ExceptionActive HEX(2B) -#define KTRAP_FRAME_MxCsr HEX(2C) -#define KTRAP_FRAME_Rax HEX(30) -#define KTRAP_FRAME_Rcx HEX(38) -#define KTRAP_FRAME_Rdx HEX(40) -#define KTRAP_FRAME_R8 HEX(48) -#define KTRAP_FRAME_R9 HEX(50) -#define KTRAP_FRAME_R10 HEX(58) -#define KTRAP_FRAME_R11 HEX(60) -#define KTRAP_FRAME_GsBase HEX(68) -#define KTRAP_FRAME_Xmm0 HEX(70) -#define KTRAP_FRAME_Xmm1 HEX(80) -#define KTRAP_FRAME_Xmm2 HEX(90) -#define KTRAP_FRAME_Xmm3 HEX(A0) -#define KTRAP_FRAME_Xmm4 HEX(B0) -#define KTRAP_FRAME_Xmm5 HEX(C0) -#define KTRAP_FRAME_FaultAddress HEX(D0) -#define KTRAP_FRAME_Dr0 HEX(D8) -#define KTRAP_FRAME_Dr1 HEX(E0) -#define KTRAP_FRAME_Dr2 HEX(E8) -#define KTRAP_FRAME_Dr3 HEX(F0) -#define KTRAP_FRAME_Dr6 HEX(F8) -#define KTRAP_FRAME_Dr7 HEX(100) -#define KTRAP_FRAME_DebugControl HEX(108) -#define KTRAP_FRAME_LastBranchToRip HEX(110) -#define KTRAP_FRAME_LastBranchFromRip HEX(118) -#define KTRAP_FRAME_LastExceptionToRip HEX(120) -#define KTRAP_FRAME_LastExceptionFromRip HEX(128) -#define KTRAP_FRAME_SegDs HEX(130) -#define KTRAP_FRAME_SegEs HEX(132) -#define KTRAP_FRAME_SegFs HEX(134) -#define KTRAP_FRAME_SegGs HEX(136) -#define KTRAP_FRAME_TrapFrame HEX(138) -#define KTRAP_FRAME_Rbx HEX(140) -#define KTRAP_FRAME_Rdi HEX(148) -#define KTRAP_FRAME_Rsi HEX(150) -#define KTRAP_FRAME_Rbp HEX(158) -#define KTRAP_FRAME_ErrorCode HEX(160) -#define KTRAP_FRAME_Rip HEX(168) -#define KTRAP_FRAME_SegCs HEX(170) -#define KTRAP_FRAME_Logging HEX(173) -#define KTRAP_FRAME_EFlags HEX(178) -#define KTRAP_FRAME_Rsp HEX(180) -#define KTRAP_FRAME_SegSs HEX(188) -#define KTRAP_FRAME_CodePatchCycle HEX(18c) -#define SIZE_KTRAP_FRAME HEX(190) -#define KTRAP_FRAME_ALIGN HEX(10) -#define KTRAP_FRAME_LENGTH HEX(190) - -// -// CONTEXT Offsets -// -#define CONTEXT_P1Home 0 -#define CONTEXT_P2Home HEX(08) -#define CONTEXT_P3Home HEX(10) -#define CONTEXT_P4Home HEX(18) -#define CONTEXT_P5Home HEX(20) -#define CONTEXT_P6Home HEX(28) -#define CONTEXT_ContextFlags HEX(30) -#define CONTEXT_MxCsr HEX(34) -#define CONTEXT_SegCs HEX(38) -#define CONTEXT_SegDs HEX(3a) -#define CONTEXT_SegEs HEX(3c) -#define CONTEXT_SegFs HEX(3e) -#define CONTEXT_SegGs HEX(40) -#define CONTEXT_SegSs HEX(42) -#define CONTEXT_EFlags HEX(44) -#define CONTEXT_Dr0 HEX(48) -#define CONTEXT_Dr1 HEX(50) -#define CONTEXT_Dr2 HEX(58) -#define CONTEXT_Dr3 HEX(60) -#define CONTEXT_Dr6 HEX(68) -#define CONTEXT_Dr7 HEX(70) -#define CONTEXT_Rax HEX(78) -#define CONTEXT_Rcx HEX(80) -#define CONTEXT_Rdx HEX(88) -#define CONTEXT_Rbx HEX(90) -#define CONTEXT_Rsp HEX(98) -#define CONTEXT_Rbp HEX(a0) -#define CONTEXT_Rsi HEX(a8) -#define CONTEXT_Rdi HEX(b0) -#define CONTEXT_R8 HEX(b8) -#define CONTEXT_R9 HEX(c0) -#define CONTEXT_R10 HEX(c8) -#define CONTEXT_R11 HEX(d0) -#define CONTEXT_R12 HEX(d8) -#define CONTEXT_R13 HEX(e0) -#define CONTEXT_R14 HEX(e8) -#define CONTEXT_R15 HEX(f0) -#define CONTEXT_Rip HEX(f8) -#define CONTEXT_Header HEX(100) -#define CONTEXT_Legacy HEX(120) -#define CONTEXT_Xmm0 HEX(1a0) -#define CONTEXT_Xmm1 HEX(1b0) -#define CONTEXT_Xmm2 HEX(1c0) -#define CONTEXT_Xmm3 HEX(1d0) -#define CONTEXT_Xmm4 HEX(1e0) -#define CONTEXT_Xmm5 HEX(1f0) -#define CONTEXT_Xmm6 HEX(200) -#define CONTEXT_Xmm7 HEX(210) -#define CONTEXT_Xmm8 HEX(220) -#define CONTEXT_Xmm9 HEX(230) -#define CONTEXT_Xmm10 HEX(240) -#define CONTEXT_Xmm11 HEX(250) -#define CONTEXT_Xmm12 HEX(260) -#define CONTEXT_Xmm13 HEX(270) -#define CONTEXT_Xmm14 HEX(280) -#define CONTEXT_Xmm15 HEX(290) -#define CONTEXT_VectorRegister HEX(300) -#define CONTEXT_VectorControl HEX(4a0) -#define CONTEXT_DebugControl HEX(4a8) -#define CONTEXT_LastBranchToRip HEX(4b0) -#define CONTEXT_LastBranchFromRip HEX(4b8) -#define CONTEXT_LastExceptionToRip HEX(4c0) -#define CONTEXT_LastExceptionFromRip HEX(4c8) - -// -// KEXCEPTION_FRAME offsets -// -#define KEXCEPTION_FRAME_P1Home HEX(000) -#define KEXCEPTION_FRAME_P2Home HEX(008) -#define KEXCEPTION_FRAME_P3Home HEX(010) -#define KEXCEPTION_FRAME_P4Home HEX(018) -#define KEXCEPTION_FRAME_P5 HEX(020) -#define KEXCEPTION_FRAME_InitialStack HEX(028) -#define KEXCEPTION_FRAME_Xmm6 HEX(030) -#define KEXCEPTION_FRAME_Xmm7 HEX(040) -#define KEXCEPTION_FRAME_Xmm8 HEX(050) -#define KEXCEPTION_FRAME_Xmm9 HEX(060) -#define KEXCEPTION_FRAME_Xmm10 HEX(070) -#define KEXCEPTION_FRAME_Xmm11 HEX(080) -#define KEXCEPTION_FRAME_Xmm12 HEX(090) -#define KEXCEPTION_FRAME_Xmm13 HEX(0A0) -#define KEXCEPTION_FRAME_Xmm14 HEX(0B0) -#define KEXCEPTION_FRAME_Xmm15 HEX(0C0) -#define KEXCEPTION_FRAME_TrapFrame HEX(0D0) -#define KEXCEPTION_FRAME_CallbackStack HEX(0D8) -#define KEXCEPTION_FRAME_OutputBuffer HEX(0E0) -#define KEXCEPTION_FRAME_OutputLength HEX(0E8) -#define KEXCEPTION_FRAME_MxCsr HEX(0F0) -#define KEXCEPTION_FRAME_Rbp HEX(0F8) -#define KEXCEPTION_FRAME_Rbx HEX(100) -#define KEXCEPTION_FRAME_Rdi HEX(108) -#define KEXCEPTION_FRAME_Rsi HEX(110) -#define KEXCEPTION_FRAME_R12 HEX(118) -#define KEXCEPTION_FRAME_R13 HEX(120) -#define KEXCEPTION_FRAME_R14 HEX(128) -#define KEXCEPTION_FRAME_R15 HEX(130) -#define KEXCEPTION_FRAME_Return HEX(138) -#define SIZE_KEXCEPTION_FRAME HEX(140) - - -// -// EXCEPTION_RECORD Offsets -// -#define EXCEPTION_RECORD_ExceptionCode HEX(00) -#define EXCEPTION_RECORD_ExceptionFlags HEX(04) -#define EXCEPTION_RECORD_ExceptionRecord HEX(08) -#define EXCEPTION_RECORD_ExceptionAddress HEX(10) -#define EXCEPTION_RECORD_NumberParameters HEX(18) -#define EXCEPTION_RECORD_ExceptionInformation HEX(20) -#define SIZE_EXCEPTION_RECORD HEX(98) - -// -// CR0 -// -#define CR0_PE HEX(1) -#define CR0_MP HEX(2) -#define CR0_EM HEX(4) -#define CR0_TS HEX(8) -#define CR0_ET HEX(10) -#define CR0_NE HEX(20) -#define CR0_WP HEX(10000) -#define CR0_AM HEX(40000) -#define CR0_NW HEX(20000000) -#define CR0_CD HEX(40000000) -#define CR0_PG HEX(80000000) - -/* Number of bytes reserved for syscall parameters */ -#define MAX_SYSCALL_PARAM_SIZE (16 * 8) - -#ifdef _ASM_ -// -// CR4 -// -#define CR4_VME HEX(1) -#define CR4_PVI HEX(2) -#define CR4_TSD HEX(4) -#define CR4_DE HEX(8) -#define CR4_PSE HEX(10) -#define CR4_PAE HEX(20) -#define CR4_MCE HEX(40) -#define CR4_PGE HEX(80) -#define CR4_FXSR HEX(200) -#define CR4_XMMEXCPT HEX(400) -#endif - -// -// Generic Definitions -// -#define PRIMARY_VECTOR_BASE HEX(30) -#define MAXIMUM_IDTVECTOR HEX(FF) - -// -// Usermode callout frame definitions -// -#define CBSTACK_STACK HEX(0) -#define CBSTACK_TRAP_FRAME HEX(8) -#define CBSTACK_CALLBACK_STACK HEX(10) -#define CBSTACK_RBP HEX(18) -#define CBSTACK_RESULT HEX(20) -#define CBSTACK_RESULT_LENGTH HEX(28) - - -/* Following ones are ASM only! ***********************************************/ - -#ifdef __ASM__ - -// -// PCR Access -// -#define PCR gs: - -// -// EFLAGS -// -#define EFLAGS_TF HEX(100) -#define EFLAGS_INTERRUPT_MASK HEX(200) -#define EFLAGS_NESTED_TASK HEX(4000) -#define EFLAGS_V86_MASK HEX(20000) -#define EFLAGS_ALIGN_CHECK HEX(40000) -#define EFLAGS_VIF HEX(80000) -#define EFLAGS_VIP HEX(100000) -#define EFLAG_SIGN HEX(8000) -#define EFLAG_ZERO HEX(4000) -#define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO) -#define EFLAGS_USER_SANITIZE HEX(3F4DD7) - -// -// Exception codes -// -#define EXCEPTION_DIVIDED_BY_ZERO HEX(00000) -#define EXCEPTION_DEBUG HEX(00001) -#define EXCEPTION_NMI HEX(00002) -#define EXCEPTION_INT3 HEX(00003) -#define EXCEPTION_BOUND_CHECK HEX(00005) -#define EXCEPTION_INVALID_OPCODE HEX(00006) -#define EXCEPTION_NPX_NOT_AVAILABLE HEX(00007) -#define EXCEPTION_DOUBLE_FAULT HEX(00008) -#define EXCEPTION_NPX_OVERRUN HEX(00009) -#define EXCEPTION_INVALID_TSS HEX(0000A) -#define EXCEPTION_SEGMENT_NOT_PRESENT HEX(0000B) -#define EXCEPTION_STACK_FAULT HEX(0000C) -#define EXCEPTION_GP_FAULT HEX(0000D) -#define EXCEPTION_RESERVED_TRAP HEX(0000F) -#define EXCEPTION_NPX_ERROR HEX(00010) -#define EXCEPTION_ALIGNMENT_CHECK HEX(00011) - -// -// NTSTATUS values -// -#define STATUS_ACCESS_VIOLATION HEX(C0000005) -#define STATUS_IN_PAGE_ERROR HEX(C0000006) -#define STATUS_GUARD_PAGE_VIOLATION HEX(80000001) -#define STATUS_PRIVILEGED_INSTRUCTION HEX(C0000096) -#define STATUS_STACK_OVERFLOW HEX(C00000FD) -#define KI_EXCEPTION_ACCESS_VIOLATION HEX(10000004) -#define STATUS_INVALID_SYSTEM_SERVICE HEX(C000001C) -#define STATUS_NO_CALLBACK_ACTIVE HEX(C0000258) -#define STATUS_CALLBACK_POP_STACK HEX(C0000423) -#define STATUS_ARRAY_BOUNDS_EXCEEDED HEX(C000008C) -#define STATUS_ILLEGAL_INSTRUCTION HEX(C000001D) -#define STATUS_INVALID_LOCK_SEQUENCE HEX(C000001E) -#define STATUS_BREAKPOINT HEX(80000003) -#define STATUS_SINGLE_STEP HEX(80000004) -#define STATUS_INTEGER_DIVIDE_BY_ZERO HEX(C0000094) -#define STATUS_INTEGER_OVERFLOW HEX(C0000095) -#define STATUS_FLOAT_DENORMAL_OPERAND HEX(C000008D) -#define STATUS_FLOAT_DIVIDE_BY_ZERO HEX(C000008E) -#define STATUS_FLOAT_INEXACT_RESULT HEX(C000008F) -#define STATUS_FLOAT_INVALID_OPERATION HEX(C0000090) -#define STATUS_FLOAT_OVERFLOW HEX(C0000091) -#define STATUS_FLOAT_STACK_CHECK HEX(C0000092) -#define STATUS_FLOAT_UNDERFLOW HEX(C0000093) -#define STATUS_FLOAT_MULTIPLE_FAULTS HEX(C00002B4) -#define STATUS_FLOAT_MULTIPLE_TRAPS HEX(C00002B5) -#define STATUS_ASSERTION_FAILURE HEX(C0000420) - -// -// Bugcheck Codes -// -#define APC_INDEX_MISMATCH HEX(01) -#define IRQL_NOT_GREATER_OR_EQUAL HEX(09) -#define IRQL_NOT_LESS_OR_EQUAL HEX(0A) -#define TRAP_CAUSE_UNKNOWN HEX(12) -#define KMODE_EXCEPTION_NOT_HANDLED HEX(13) -#define IRQL_GT_ZERO_AT_SYSTEM_SERVICE HEX(4A) -#define UNEXPECTED_KERNEL_MODE_TRAP HEX(7F) -#define ATTEMPTED_SWITCH_FROM_DPC HEX(B8) -#define HARDWARE_INTERRUPT_STORM HEX(F2) - -// -// IRQL Levels -// -#define PASSIVE_LEVEL 0 -#define LOW_LEVEL 0 -#define APC_LEVEL 1 -#define DISPATCH_LEVEL 2 -#define CLOCK_LEVEL 13 -#define IPI_LEVEL 14 -#define POWER_LEVEL 14 -#define PROFILE_LEVEL 15 -#define HIGH_LEVEL 15 - -// -// Synchronization-level IRQL -// -#ifndef CONFIG_SMP -#define SYNCH_LEVEL DISPATCH_LEVEL -#else -#define SYNCH_LEVEL (IPI_LEVEL - 2) -#endif - -// -// Quantum Decrements -// -#define CLOCK_QUANTUM_DECREMENT HEX(3) - -// -// Machine types -// -#define MACHINE_TYPE_ISA HEX(0000) -#define MACHINE_TYPE_EISA HEX(0001) -#define MACHINE_TYPE_MCA HEX(0002) - -// -// Kernel Feature Bits -// -#define KF_RDTSC HEX(00000002) - -// -// Kernel Stack Size -// -#define KERNEL_STACK_SIZE HEX(6000) - -#endif // __ASM__ - -#endif // !_ASM_AMD64_H - diff --git a/sdk/include/ndk/amd64/ketypes.h b/sdk/include/ndk/amd64/ketypes.h index ea9031df667aa..08c94196db3fc 100644 --- a/sdk/include/ndk/amd64/ketypes.h +++ b/sdk/include/ndk/amd64/ketypes.h @@ -128,6 +128,21 @@ typedef enum #define KGDT64_R3_CMTEB 0x0050 #define KGDT64_R0_LDT 0x0060 +// +// CR0 +// +#define CR0_PE 0x00000001 +#define CR0_MP 0x00000002 +#define CR0_EM 0x00000004 +#define CR0_TS 0x00000008 +#define CR0_ET 0x00000010 +#define CR0_NE 0x00000020 +#define CR0_WP 0x00010000 +#define CR0_AM 0x00040000 +#define CR0_NW 0x20000000 +#define CR0_CD 0x40000000 +#define CR0_PG 0x80000000 + // // CR4 // @@ -322,6 +337,8 @@ typedef enum // // HAL Variables // +#define PRIMARY_VECTOR_BASE 0x30 +#define MAXIMUM_IDTVECTOR 0xFF #define INITIAL_STALL_COUNT 100 #define MM_HAL_VA_START 0xFFFFFFFFFFC00000ULL /* This is Vista+ */ #define MM_HAL_VA_END 0xFFFFFFFFFFFFFFFFULL @@ -345,6 +362,9 @@ typedef enum #define NMI_STACK_SIZE 0x2000 #define ISR_STACK_SIZE 0x6000 +/* Number of bytes reserved for syscall parameters */ +#define MAX_SYSCALL_PARAM_SIZE (16 * 8) + // // Synchronization-level IRQL // diff --git a/sdk/include/ndk/asm.h b/sdk/include/ndk/asm.h index ce2ada8cd1f17..71c01b3fa72bc 100644 --- a/sdk/include/ndk/asm.h +++ b/sdk/include/ndk/asm.h @@ -18,11 +18,9 @@ Header Name: #if defined(_M_IX86) #include -#elif defined(_M_AMD64) -#include -#elif defined(_M_ARM) || defined(_M_PPC) || defined(_M_ARM64) +#elif defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC) || defined(_M_ARM64) // -// ARM and PPC ports don't use asm.h +// AMD64, ARM and PPC ports don't use asm.h // #else #error Unsupported Architecture From e7354f244ca12abfd37c67bfacfffea586751749 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 30 Nov 2023 11:02:31 +0200 Subject: [PATCH 076/750] [NTOS:KE] Fix freeze in KeBugCheckWithTf --- ntoskrnl/ke/bug.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/ntoskrnl/ke/bug.c b/ntoskrnl/ke/bug.c index 7cb9c1c2e678e..bf0843ed23e6b 100644 --- a/ntoskrnl/ke/bug.c +++ b/ntoskrnl/ke/bug.c @@ -1092,17 +1092,7 @@ KeBugCheckWithTf(IN ULONG BugCheckCode, KeBugCheckOwner = Prcb->Number; /* Freeze the other CPUs */ - for (ULONG i = 0; i < KeNumberProcessors; i++) - { - if (i != Prcb->Number) - { - /* Send the IPI */ - KiIpiSend(AFFINITY_MASK(i), IPI_FREEZE); - } - } - - /* Give the other CPUs one second to catch up */ - KeStallExecutionProcessor(1000000); + KxFreezeExecution(); #endif /* Display the BSOD */ From 1fec01561d06ae6a4cfce38daa474631ed6a9fbe Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Fri, 27 Dec 2024 14:46:30 +0100 Subject: [PATCH 077/750] [SHDOCVW][BROWSEUI][SHELL32] Correctly refcount CNSCBand and Explorer File menu (#7569) CORE-19879 CORE-19780 --- dll/win32/browseui/basebarsite.cpp | 49 +++++++++-------------- dll/win32/browseui/shellbrowser.cpp | 15 +++---- dll/win32/shdocvw/CNSCBand.cpp | 3 +- dll/win32/shell32/CDefView.cpp | 13 ++++-- dll/win32/shell32/shellmenu/CMenuSite.cpp | 3 ++ dll/win32/shell32/shellmenu/CMenuSite.h | 1 + 6 files changed, 38 insertions(+), 46 deletions(-) diff --git a/dll/win32/browseui/basebarsite.cpp b/dll/win32/browseui/basebarsite.cpp index e67e9b7e9bd04..dc40977de4d10 100644 --- a/dll/win32/browseui/basebarsite.cpp +++ b/dll/win32/browseui/basebarsite.cpp @@ -380,15 +380,13 @@ HRESULT STDMETHODCALLTYPE CBaseBarSite::SetDeskBarSite(IUnknown *punkSite) if (punkSite == NULL) { - - TRACE("Destroying site \n"); + TRACE("Destroying site\n"); /* Cleanup our bands */ - while(SUCCEEDED(EnumBands(-1, &dwBandID)) && dwBandID) + for (UINT i = EnumBands(-1, NULL); i;) { - hResult = EnumBands(0, &dwBandID); - if(FAILED_UNEXPECTEDLY(hResult)) - continue; - RemoveBand(dwBandID); + hResult = EnumBands(--i, &dwBandID); + if (!FAILED_UNEXPECTEDLY(hResult)) + RemoveBand(dwBandID); } fDeskBarSite = NULL; } @@ -535,13 +533,11 @@ HRESULT STDMETHODCALLTYPE CBaseBarSite::EnumBands(UINT uBand, DWORD *pdwBandID) { REBARBANDINFO bandInfo; + if (uBand == -1ul) + return (HRESULT)SendMessage(RB_GETBANDCOUNT, 0, 0); if (pdwBandID == NULL) return E_INVALIDARG; - if (uBand == 0xffffffff) - { - *pdwBandID = (DWORD)SendMessage(RB_GETBANDCOUNT, 0, 0); - return S_OK; - } + if (!SUCCEEDED(GetInternalBandInfo(uBand, &bandInfo))) return E_INVALIDARG; *pdwBandID = bandInfo.wID; @@ -565,7 +561,7 @@ HRESULT STDMETHODCALLTYPE CBaseBarSite::RemoveBand(DWORD dwBandID) HRESULT hr; CBarInfo *pInfo; CComPtr pSite; - CComPtr pDockWnd; + CComPtr pDockWnd; DWORD index; // Retrieve the right index of the coolbar knowing the id @@ -580,19 +576,14 @@ HRESULT STDMETHODCALLTYPE CBaseBarSite::RemoveBand(DWORD dwBandID) if (!pInfo) return E_INVALIDARG; - hr = pInfo->fTheBar->QueryInterface(IID_PPV_ARG(IDeskBand, &pDockWnd)); - if (FAILED_UNEXPECTEDLY(hr)) - { - return E_NOINTERFACE; - } - hr = pInfo->fTheBar->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pSite)); - if (FAILED_UNEXPECTEDLY(hr)) - { - return E_NOINTERFACE; - } /* Windows sends a CloseDW before setting site to NULL */ - pDockWnd->CloseDW(0); - pSite->SetSite(NULL); + hr = pInfo->fTheBar->QueryInterface(IID_PPV_ARG(IDockingWindow, &pDockWnd)); + if (SUCCEEDED(hr)) + pDockWnd->CloseDW(0); + + hr = pInfo->fTheBar->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pSite)); + if (SUCCEEDED(hr)) + pSite->SetSite(NULL); // Delete the band from rebar if (!SendMessage(RB_DELETEBAND, index, 0)) @@ -773,15 +764,11 @@ HRESULT CBaseBarSite::FindBandByGUID(REFGUID pGuid, DWORD *pdwBandID) { DWORD numBands; DWORD i; - HRESULT hr; REBARBANDINFO bandInfo; CBarInfo *realInfo; - hr = EnumBands(-1, &numBands); - if (FAILED_UNEXPECTEDLY(hr)) - return E_FAIL; - - for(i = 0; i < numBands; i++) + numBands = EnumBands(-1, NULL); + for (i = 0; i < numBands; i++) { if (FAILED_UNEXPECTEDLY(GetInternalBandInfo(i, &bandInfo))) return E_FAIL; diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index eb67209a6745f..cd729c029988c 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -1276,11 +1276,8 @@ BOOL CShellBrowser::IsBandLoaded(const CLSID clsidBand, bool vertical, DWORD *pd if (FAILED_UNEXPECTEDLY(hResult)) return FALSE; - hResult = bandSite->EnumBands(-1, &numBands); - if (FAILED_UNEXPECTEDLY(hResult)) - return FALSE; - - for(i = 0; i < numBands; i++) + numBands = bandSite->EnumBands(-1, NULL); + for (i = 0; i < numBands; i++) { CComPtr bandPersist; @@ -1504,7 +1501,6 @@ LRESULT CALLBACK CShellBrowser::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, wParam = msg.wParam; lParam = msg.lParam; } - menuBand.Release(); } handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0); @@ -3658,16 +3654,15 @@ LRESULT CShellBrowser::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & // TODO: rip down everything { m_Destroyed = true; // Ignore browse requests from Explorer band TreeView during destruction + fCurrentShellView->UIActivate(SVUIA_DEACTIVATE); fToolbarProxy.Destroy(); fCurrentShellView->DestroyViewWindow(); - fCurrentShellView->UIActivate(SVUIA_DEACTIVATE); for (int i = 0; i < 3; i++) { CComPtr pdw; CComPtr bar; CComPtr pBarSite; - CComPtr pClient; if (fClientBars[i].clientBar == NULL) continue; @@ -3683,6 +3678,7 @@ LRESULT CShellBrowser::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & hr = bar->GetClient(&pBarSite); if (SUCCEEDED(hr) && pBarSite) { + CComPtr pClient; hr = pBarSite->QueryInterface(IID_PPV_ARG(IDeskBarClient, &pClient)); if (SUCCEEDED(hr)) pClient->SetDeskBarSite(NULL); @@ -3690,7 +3686,6 @@ LRESULT CShellBrowser::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & } pdw->CloseDW(0); - pClient = NULL; pBarSite = NULL; pdw = NULL; bar = NULL; @@ -3720,7 +3715,7 @@ LRESULT CShellBrowser::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHa GetEffectiveClientRect(m_hWnd, &availableBounds, excludeItems); for (INT x = 0; x < 3; x++) { - if (fClientBars[x].clientBar != NULL) + if (fClientBars[x].clientBar) { hResult = fClientBars[x].clientBar->QueryInterface( IID_PPV_ARG(IDockingWindow, &dockingWindow)); diff --git a/dll/win32/shdocvw/CNSCBand.cpp b/dll/win32/shdocvw/CNSCBand.cpp index d40a4c8ca3726..f653a1a043c42 100644 --- a/dll/win32/shdocvw/CNSCBand.cpp +++ b/dll/win32/shdocvw/CNSCBand.cpp @@ -93,7 +93,8 @@ CNSCBand::~CNSCBand() VOID CNSCBand::OnFinalMessage(HWND) { // The message loop is finished, now we can safely destruct! - static_cast(this)->Release(); + // HACKFIX: Who did this AddRef? Commenting out Release... + //static_cast(this)->Release(); } // *** helper methods *** diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 0505c8e7b6911..21e7c1bcc4f1b 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -1593,13 +1593,18 @@ LRESULT CDefView::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHand if (!m_Destroyed) { m_Destroyed = TRUE; + RevokeDragDrop(m_hWnd); + SHChangeNotifyDeregister(m_hNotify); + if (m_pFileMenu) + { + IUnknown_SetSite(m_pFileMenu, NULL); + m_pFileMenu = NULL; + } if (m_hMenu) { DestroyMenu(m_hMenu); m_hMenu = NULL; } - RevokeDragDrop(m_hWnd); - SHChangeNotifyDeregister(m_hNotify); m_hNotify = NULL; SHFree(m_pidlParent); m_pidlParent = NULL; @@ -3055,7 +3060,7 @@ HRESULT WINAPI CDefView::TranslateAccelerator(LPMSG lpmsg) TRACE("-- key=0x%04lx\n", lpmsg->wParam); } - return m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0); + return m_pShellBrowser ? m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0) : S_FALSE; } HRESULT WINAPI CDefView::EnableModeless(BOOL fEnable) @@ -3290,7 +3295,7 @@ HRESULT CDefView::SaveViewState(IStream *pStream) lvc.mask = LVCF_WIDTH | LVCF_SUBITEM; for (UINT i = 0, j = 0; i < PERSISTCOLUMNS::MAXCOUNT && ListView_GetColumn(m_ListView, j, &lvc); ++j) { - HRESULT hr = MapListColumnToFolderColumn(lvc.iSubItem); + HRESULT hr = MapListColumnToFolderColumn(j); if (SUCCEEDED(hr)) { cols.Columns[i] = MAKELONG(hr, lvc.cx); diff --git a/dll/win32/shell32/shellmenu/CMenuSite.cpp b/dll/win32/shell32/shellmenu/CMenuSite.cpp index 6faf0fabb0cfa..7596237b596a5 100644 --- a/dll/win32/shell32/shellmenu/CMenuSite.cpp +++ b/dll/win32/shell32/shellmenu/CMenuSite.cpp @@ -85,6 +85,9 @@ HRESULT STDMETHODCALLTYPE CMenuSite::AddBand(IUnknown * punk) HRESULT STDMETHODCALLTYPE CMenuSite::EnumBands(UINT uBand, DWORD* pdwBandID) { + if (uBand == -1ul) + return GetBandCount(); + if (uBand != 0) return E_FAIL; diff --git a/dll/win32/shell32/shellmenu/CMenuSite.h b/dll/win32/shell32/shellmenu/CMenuSite.h index 3421e1be3079a..713791390f0e4 100644 --- a/dll/win32/shell32/shellmenu/CMenuSite.h +++ b/dll/win32/shell32/shellmenu/CMenuSite.h @@ -104,4 +104,5 @@ class CMenuSite : private: IUnknown * ToIUnknown() { return static_cast(this); } + UINT GetBandCount() { return m_BandObject ? 1 : 0; } }; From 1faa571f3f0445f46554ebe33bf105a87baeea2e Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Fri, 27 Dec 2024 14:47:11 +0100 Subject: [PATCH 078/750] [SHELL32] CM::InvokeCommand case-insensitive compare verb string (#7582) CORE-18733 --- dll/win32/shell32/CDefaultContextMenu.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index 90954dd87c98c..b076980e7b6a8 100644 --- a/dll/win32/shell32/CDefaultContextMenu.cpp +++ b/dll/win32/shell32/CDefaultContextMenu.cpp @@ -1214,7 +1214,7 @@ CDefaultContextMenu::MapVerbToCmdId(PVOID Verb, PUINT idCmd, BOOL IsUnicode) { /* The static verbs are ANSI, get a unicode version before doing the compare */ SHAnsiToUnicode(g_StaticInvokeCmdMap[i].szStringVerb, UnicodeStr, MAX_VERB); - if (!wcscmp(UnicodeStr, (LPWSTR)Verb)) + if (!_wcsicmp(UnicodeStr, (LPWSTR)Verb)) { /* Return the Corresponding Id */ *idCmd = g_StaticInvokeCmdMap[i].IntVerb; @@ -1223,7 +1223,7 @@ CDefaultContextMenu::MapVerbToCmdId(PVOID Verb, PUINT idCmd, BOOL IsUnicode) } else { - if (!strcmp(g_StaticInvokeCmdMap[i].szStringVerb, (LPSTR)Verb)) + if (!_stricmp(g_StaticInvokeCmdMap[i].szStringVerb, (LPSTR)Verb)) { *idCmd = g_StaticInvokeCmdMap[i].IntVerb; return TRUE; @@ -1527,6 +1527,8 @@ CDefaultContextMenu::InvokeCommand( /* Get the ID which corresponds to this verb, and update our local copy */ if (MapVerbToCmdId((LPVOID)LocalInvokeInfo.lpVerb, &CmdId, FALSE)) LocalInvokeInfo.lpVerb = MAKEINTRESOURCEA(CmdId); + else + return E_INVALIDARG; } CmdId = LOWORD(LocalInvokeInfo.lpVerb); From 0bb830022c7a2bef814dc96a0311fcc66343389f Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 28 Dec 2024 16:04:50 +0100 Subject: [PATCH 079/750] [MSV1_0] Implement LsaApCallPackage.MsV1_0GetUserInfo --- dll/win32/msv1_0/msv1_0.c | 201 +++++++++++++++++++++++++++++++++++++- 1 file changed, 199 insertions(+), 2 deletions(-) diff --git a/dll/win32/msv1_0/msv1_0.c b/dll/win32/msv1_0/msv1_0.c index 735b4a3e0dfad..35584bba37fed 100644 --- a/dll/win32/msv1_0/msv1_0.c +++ b/dll/win32/msv1_0/msv1_0.c @@ -17,6 +17,10 @@ typedef struct _LOGON_LIST_ENTRY LIST_ENTRY ListEntry; LUID LogonId; ULONG EnumHandle; + UNICODE_STRING UserName; + UNICODE_STRING LogonDomainName; + UNICODE_STRING LogonServer; + SECURITY_LOGON_TYPE LogonType; } LOGON_LIST_ENTRY, *PLOGON_LIST_ENTRY; /* GLOBALS *****************************************************************/ @@ -27,6 +31,32 @@ ULONG EnumCounter; /* FUNCTIONS ***************************************************************/ +static +PLOGON_LIST_ENTRY +GetLogonByLogonId( + _In_ PLUID LogonId) +{ + PLOGON_LIST_ENTRY LogonEntry; + PLIST_ENTRY CurrentEntry; + + CurrentEntry = LogonListHead.Flink; + while (CurrentEntry != &LogonListHead) + { + LogonEntry = CONTAINING_RECORD(CurrentEntry, + LOGON_LIST_ENTRY, + ListEntry); + + if ((LogonEntry->LogonId.HighPart == LogonId->HighPart) && + (LogonEntry->LogonId.LowPart == LogonId->LowPart)) + return LogonEntry; + + CurrentEntry = CurrentEntry->Flink; + } + + return NULL; +} + + static NTSTATUS BuildInteractiveProfileBuffer(IN PLSA_CLIENT_REQUEST ClientRequest, @@ -287,6 +317,7 @@ BuildLm20LogonProfileBuffer( return Status; } + static PSID AppendRidToSid(PSID SrcSid, @@ -854,6 +885,12 @@ MsvpEnumerateUsers( TRACE("MsvpEnumerateUsers()\n"); + if (SubmitBufferLength < sizeof(MSV1_0_ENUMUSERS_REQUEST)) + { + ERR("Invalid SubmitBufferLength %lu\n", SubmitBufferLength); + return STATUS_INVALID_PARAMETER; + } + /* Count the currently logged-on users */ CurrentEntry = LogonListHead.Flink; while (CurrentEntry != &LogonListHead) @@ -931,7 +968,7 @@ MsvpEnumerateUsers( goto done; } - *ProtocolReturnBuffer = (PMSV1_0_INTERACTIVE_PROFILE)ClientBaseAddress; + *ProtocolReturnBuffer = ClientBaseAddress; *ReturnBufferLength = BufferLength; *ProtocolStatus = STATUS_SUCCESS; @@ -946,7 +983,134 @@ MsvpEnumerateUsers( ClientBaseAddress); } - return STATUS_SUCCESS; + return Status; +} + + +static +NTSTATUS +MsvpGetUserInfo( + _In_ PLSA_CLIENT_REQUEST ClientRequest, + _In_ PVOID ProtocolSubmitBuffer, + _In_ PVOID ClientBufferBase, + _In_ ULONG SubmitBufferLength, + _Out_ PVOID *ProtocolReturnBuffer, + _Out_ PULONG ReturnBufferLength, + _Out_ PNTSTATUS ProtocolStatus) +{ + PMSV1_0_GETUSERINFO_REQUEST RequestBuffer; + PLOGON_LIST_ENTRY LogonEntry; + PMSV1_0_GETUSERINFO_RESPONSE LocalBuffer = NULL; + PVOID ClientBaseAddress = NULL; + ULONG BufferLength; + PWSTR BufferPtr; + NTSTATUS Status = STATUS_SUCCESS; + + TRACE("MsvpGetUserInfo()\n"); + + if (SubmitBufferLength < sizeof(MSV1_0_GETUSERINFO_REQUEST)) + { + ERR("Invalid SubmitBufferLength %lu\n", SubmitBufferLength); + return STATUS_INVALID_PARAMETER; + } + + RequestBuffer = (PMSV1_0_GETUSERINFO_REQUEST)ProtocolSubmitBuffer; + + TRACE("LogonId: 0x%lx\n", RequestBuffer->LogonId.LowPart); + + LogonEntry = GetLogonByLogonId(&RequestBuffer->LogonId); + if (LogonEntry == NULL) + { + ERR("No logon found for LogonId %lx\n", RequestBuffer->LogonId.LowPart); + Status = STATUS_INSUFFICIENT_RESOURCES; + goto done; + } + + TRACE("UserName: %wZ\n", &LogonEntry->UserName); + TRACE("LogonDomain: %wZ\n", &LogonEntry->LogonDomainName); + TRACE("LogonServer: %wZ\n", &LogonEntry->LogonServer); + + BufferLength = sizeof(MSV1_0_GETUSERINFO_RESPONSE) + + LogonEntry->UserName.MaximumLength + + LogonEntry->LogonDomainName.MaximumLength + + LogonEntry->LogonServer.MaximumLength; + + LocalBuffer = DispatchTable.AllocateLsaHeap(BufferLength); + if (LocalBuffer == NULL) + { + ERR("Failed to allocate the local buffer!\n"); + Status = STATUS_INSUFFICIENT_RESOURCES; + goto done; + } + + Status = DispatchTable.AllocateClientBuffer(ClientRequest, + BufferLength, + &ClientBaseAddress); + if (!NT_SUCCESS(Status)) + { + ERR("DispatchTable.AllocateClientBuffer failed (Status 0x%08lx)\n", Status); + goto done; + } + + TRACE("ClientBaseAddress: %p\n", ClientBaseAddress); + + /* Fill the local buffer */ + LocalBuffer->MessageType = MsV1_0GetUserInfo; + + BufferPtr = (PWSTR)((ULONG_PTR)LocalBuffer + sizeof(MSV1_0_GETUSERINFO_RESPONSE)); + + /* UserName */ + LocalBuffer->UserName.Length = LogonEntry->UserName.Length; + LocalBuffer->UserName.MaximumLength = LogonEntry->UserName.MaximumLength; + LocalBuffer->UserName.Buffer = (PWSTR)((ULONG_PTR)ClientBaseAddress + (ULONG_PTR)BufferPtr - (ULONG_PTR)LocalBuffer); + + RtlCopyMemory(BufferPtr, LogonEntry->UserName.Buffer, LogonEntry->UserName.MaximumLength); + BufferPtr = (PWSTR)((ULONG_PTR)BufferPtr + (ULONG_PTR)LocalBuffer->UserName.MaximumLength); + + /* LogonDomainName */ + LocalBuffer->LogonDomainName.Length = LogonEntry->LogonDomainName.Length; + LocalBuffer->LogonDomainName.MaximumLength = LogonEntry->LogonDomainName.MaximumLength; + LocalBuffer->LogonDomainName.Buffer = (PWSTR)((ULONG_PTR)ClientBaseAddress + (ULONG_PTR)BufferPtr - (ULONG_PTR)LocalBuffer); + + RtlCopyMemory(BufferPtr, LogonEntry->LogonDomainName.Buffer, LogonEntry->LogonDomainName.MaximumLength); + BufferPtr = (PWSTR)((ULONG_PTR)BufferPtr + (ULONG_PTR)LocalBuffer->LogonDomainName.MaximumLength); + + /* LogonServer */ + LocalBuffer->LogonServer.Length = LogonEntry->LogonServer.Length; + LocalBuffer->LogonServer.MaximumLength = LogonEntry->LogonServer.MaximumLength; + LocalBuffer->LogonServer.Buffer = (PWSTR)((ULONG_PTR)ClientBaseAddress + (ULONG_PTR)BufferPtr - (ULONG_PTR)LocalBuffer); + + RtlCopyMemory(BufferPtr, LogonEntry->LogonServer.Buffer, LogonEntry->LogonServer.MaximumLength); + + /* Logon Type */ + LocalBuffer->LogonType = LogonEntry->LogonType; + + Status = DispatchTable.CopyToClientBuffer(ClientRequest, + BufferLength, + ClientBaseAddress, + LocalBuffer); + if (!NT_SUCCESS(Status)) + { + ERR("DispatchTable.CopyToClientBuffer failed (Status 0x%08lx)\n", Status); + goto done; + } + + *ProtocolReturnBuffer = ClientBaseAddress; + *ReturnBufferLength = BufferLength; + *ProtocolStatus = STATUS_SUCCESS; + +done: + if (LocalBuffer != NULL) + DispatchTable.FreeLsaHeap(LocalBuffer); + + if (!NT_SUCCESS(Status)) + { + if (ClientBaseAddress != NULL) + DispatchTable.FreeClientBuffer(ClientRequest, + ClientBaseAddress); + } + + return Status; } @@ -994,6 +1158,15 @@ LsaApCallPackage(IN PLSA_CLIENT_REQUEST ClientRequest, break; case MsV1_0GetUserInfo: + Status = MsvpGetUserInfo(ClientRequest, + ProtocolSubmitBuffer, + ClientBufferBase, + SubmitBufferLength, + ProtocolReturnBuffer, + ReturnBufferLength, + ProtocolStatus); + break; + case MsV1_0ReLogonUsers: Status = STATUS_INVALID_PARAMETER; break; @@ -1484,6 +1657,30 @@ LsaApLogonUserEx2(IN PLSA_CLIENT_REQUEST ClientRequest, LogonEntry->EnumHandle = EnumCounter; EnumCounter++; + TRACE("Logon User: %wZ %wZ %lx\n", LogonUserName, LogonDomain, LogonId->LowPart); + LogonEntry->UserName.Buffer = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, LogonUserName->MaximumLength); + if (LogonEntry->UserName.Buffer) + { + LogonEntry->UserName.MaximumLength = LogonUserName->MaximumLength; + RtlCopyUnicodeString(&LogonEntry->UserName, LogonUserName); + } + + LogonEntry->LogonDomainName.Buffer = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, LogonDomain->MaximumLength); + if (LogonEntry->LogonDomainName.Buffer) + { + LogonEntry->LogonDomainName.MaximumLength = LogonDomain->MaximumLength; + RtlCopyUnicodeString(&LogonEntry->LogonDomainName, LogonDomain); + } + + LogonEntry->LogonServer.Buffer = RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, ComputerName.MaximumLength); + if (LogonEntry->LogonServer.Buffer) + { + LogonEntry->LogonServer.MaximumLength = ComputerName.MaximumLength; + RtlCopyUnicodeString(&LogonEntry->LogonServer, &ComputerName); + } + + LogonEntry->LogonType = LogonType; + InsertTailList(&LogonListHead, &LogonEntry->ListEntry); } From 45b008dd2318b1d3d5b8dfbe3be35a5c0425fbd6 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 28 Dec 2024 21:14:38 +0100 Subject: [PATCH 080/750] [WKSSVC][NETAPI32][IDL] Implement NetWkstaUserGetInfo using the workstation service --- base/services/wkssvc/precomp.h | 3 + base/services/wkssvc/rpcserver.c | 196 ++++++++++++++++++++++++++++- dll/win32/netapi32/wksta.c | 146 --------------------- dll/win32/netapi32/wksta_new.c | 12 +- sdk/include/reactos/idl/wkssvc.idl | 13 +- 5 files changed, 210 insertions(+), 160 deletions(-) diff --git a/base/services/wkssvc/precomp.h b/base/services/wkssvc/precomp.h index f2fbde4e433cb..71a60f4ea5030 100644 --- a/base/services/wkssvc/precomp.h +++ b/base/services/wkssvc/precomp.h @@ -17,7 +17,10 @@ #include #include //#include +#include +#include #include +#include #include diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index 5088b48f6e9fb..0c50e494f330a 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -77,6 +77,55 @@ void __RPC_USER midl_user_free(void __RPC_FAR * ptr) } +static +NET_API_STATUS +NetpGetClientLogonId( + _Out_ PLUID LogonId) +{ + HANDLE ThreadToken = NULL; + TOKEN_STATISTICS Statistics; + ULONG Length; + NTSTATUS NtStatus; + NET_API_STATUS ApiStatus = NERR_Success; + + ApiStatus = RpcImpersonateClient(NULL); + if (ApiStatus != NERR_Success) + return ApiStatus; + + NtStatus = NtOpenThreadToken(NtCurrentThread(), + TOKEN_QUERY, + TRUE, + &ThreadToken); + if (!NT_SUCCESS(NtStatus)) + { + ApiStatus = RtlNtStatusToDosError(NtStatus); + goto done; + } + + NtStatus = NtQueryInformationToken(ThreadToken, + TokenStatistics, + (PVOID)&Statistics, + sizeof(Statistics), + &Length); + if (!NT_SUCCESS(NtStatus)) + { + ApiStatus = RtlNtStatusToDosError(NtStatus); + goto done; + } + + FIXME("Client LUID: %lx\n", Statistics.AuthenticationId.LowPart); + RtlCopyLuid(LogonId, &Statistics.AuthenticationId); + +done: + if (ThreadToken != NULL) + NtClose(ThreadToken); + + RpcRevertToSelf(); + + return ApiStatus; +} + + /* Function 0 */ unsigned long __stdcall @@ -384,12 +433,149 @@ __stdcall NetrWkstaUserGetInfo( WKSSVC_IDENTIFY_HANDLE Unused, unsigned long Level, - LPWKSTA_USER_INFO UserInfo) -{ - FIXME("(%s, %d, %p)\n", debugstr_w(Unused), Level, UserInfo); + LPWKSTA_USER_INFO *UserInfo) +{ + MSV1_0_GETUSERINFO_REQUEST UserInfoRequest; + PMSV1_0_GETUSERINFO_RESPONSE UserInfoResponseBuffer = NULL; + DWORD UserInfoResponseBufferSize = 0; + NTSTATUS Status, ProtocolStatus; + LUID LogonId; + PWKSTA_USER_INFO pUserInfo; + DWORD dwResult = NERR_Success; - UNIMPLEMENTED; - return 0; + TRACE("NetrWkstaUserGetInfo(%s, %d, %p)\n", debugstr_w(Unused), Level, UserInfo); + + if (Unused != NULL) + return ERROR_INVALID_PARAMETER; + + if (Level > 1 && Level != 1101) + return ERROR_INVALID_LEVEL; + + if (Level != 1101) + { + dwResult = NetpGetClientLogonId(&LogonId); + if (dwResult != NERR_Success) + { + ERR("NetpGetClientLogonId() failed (%u)\n", dwResult); + return dwResult; + } + + TRACE("LogonId: 0x%08lx\n", LogonId.LowPart); + + UserInfoRequest.MessageType = MsV1_0GetUserInfo; + UserInfoRequest.LogonId = LogonId; + Status = LsaCallAuthenticationPackage(LsaHandle, + LsaAuthenticationPackage, + &UserInfoRequest, + sizeof(UserInfoRequest), + (PVOID*)&UserInfoResponseBuffer, + &UserInfoResponseBufferSize, + &ProtocolStatus); + TRACE("LsaCallAuthenticationPackage:MsV1_0GetUserInfo Status 0x%08lx ResponseBufferSize %lu\n", Status, UserInfoResponseBufferSize); + if (!NT_SUCCESS(Status)) + { + ERR("\n"); + return RtlNtStatusToDosError(Status); + } + + TRACE("UserName: %wZ\n", &UserInfoResponseBuffer->UserName); + TRACE("LogonDomain: %wZ\n", &UserInfoResponseBuffer->LogonDomainName); + TRACE("LogonServer: %wZ\n", &UserInfoResponseBuffer->LogonServer); + } + + switch (Level) + { + case 0: + pUserInfo = midl_user_allocate(sizeof(WKSTA_USER_INFO_0)); + if (pUserInfo == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_0)); + + /* User Name */ + pUserInfo->UserInfo0.wkui0_username = midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + if (pUserInfo->UserInfo0.wkui0_username == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo->UserInfo0.wkui0_username, UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo0.wkui0_username, UserInfoResponseBuffer->UserName.Buffer, UserInfoResponseBuffer->UserName.Length); + + *UserInfo = pUserInfo; + break; + + case 1: + pUserInfo = midl_user_allocate(sizeof(WKSTA_USER_INFO_1)); + if (pUserInfo == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo, sizeof(WKSTA_USER_INFO_1)); + + /* User Name */ + pUserInfo->UserInfo1.wkui1_username = midl_user_allocate(UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + if (pUserInfo->UserInfo1.wkui1_username == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo->UserInfo1.wkui1_username, UserInfoResponseBuffer->UserName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo1.wkui1_username, UserInfoResponseBuffer->UserName.Buffer, UserInfoResponseBuffer->UserName.Length); + + /* Logon Domain Name */ + pUserInfo->UserInfo1.wkui1_logon_domain = midl_user_allocate(UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR)); + if (pUserInfo->UserInfo1.wkui1_logon_domain == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_domain, UserInfoResponseBuffer->LogonDomainName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo1.wkui1_logon_domain, UserInfoResponseBuffer->LogonDomainName.Buffer, UserInfoResponseBuffer->LogonDomainName.Length); + + /* FIXME: wkui1_oth_domains */ + + /* Logon Server */ + pUserInfo->UserInfo1.wkui1_logon_server = midl_user_allocate(UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR)); + if (pUserInfo->UserInfo1.wkui1_logon_server == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo->UserInfo1.wkui1_logon_server, UserInfoResponseBuffer->LogonServer.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo->UserInfo1.wkui1_logon_server, UserInfoResponseBuffer->LogonServer.Buffer, UserInfoResponseBuffer->LogonServer.Length); + + *UserInfo = pUserInfo; + break; + + case 1101: + /* FIXME: wkui1101_oth_domains */ + break; + + default: + ERR("\n"); + break; + } + + if (UserInfoResponseBuffer) + LsaFreeReturnBuffer(UserInfoResponseBuffer); + + return dwResult; } diff --git a/dll/win32/netapi32/wksta.c b/dll/win32/netapi32/wksta.c index 8890d7ce7e5c4..d09c5cb201c0b 100644 --- a/dll/win32/netapi32/wksta.c +++ b/dll/win32/netapi32/wksta.c @@ -273,152 +273,6 @@ NetWkstaTransportEnum(LMSTR ServerName, DWORD level, PBYTE* pbuf, } -/************************************************************ - * NetWkstaUserGetInfo (NETAPI32.@) - */ -NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level, - PBYTE* bufptr) -{ - NET_API_STATUS nastatus; - - TRACE("(%s, %d, %p)\n", debugstr_w(reserved), level, bufptr); - switch (level) - { - case 0: - { - PWKSTA_USER_INFO_0 ui; - DWORD dwSize = UNLEN + 1; - - /* set up buffer */ - nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_0) + dwSize * sizeof(WCHAR), - (LPVOID *) bufptr); - if (nastatus != NERR_Success) - return ERROR_NOT_ENOUGH_MEMORY; - - ui = (PWKSTA_USER_INFO_0) *bufptr; - ui->wkui0_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_0)); - - /* get data */ - if (!GetUserNameW(ui->wkui0_username, &dwSize)) - { - NetApiBufferFree(ui); - return ERROR_NOT_ENOUGH_MEMORY; - } - else { - nastatus = NetApiBufferReallocate( - *bufptr, sizeof(WKSTA_USER_INFO_0) + - (lstrlenW(ui->wkui0_username) + 1) * sizeof(WCHAR), - (LPVOID *) bufptr); - if (nastatus != NERR_Success) - { - NetApiBufferFree(ui); - return nastatus; - } - ui = (PWKSTA_USER_INFO_0) *bufptr; - ui->wkui0_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_0)); - } - break; - } - - case 1: - { - PWKSTA_USER_INFO_1 ui; - PWKSTA_USER_INFO_0 ui0; - LSA_OBJECT_ATTRIBUTES ObjectAttributes; - LSA_HANDLE PolicyHandle; - PPOLICY_ACCOUNT_DOMAIN_INFO DomainInfo; - NTSTATUS NtStatus; - - /* sizes of the field buffers in WCHARS */ - int username_sz, logon_domain_sz, oth_domains_sz, logon_server_sz; - - FIXME("Level 1 processing is partially implemented\n"); - oth_domains_sz = 1; - logon_server_sz = 1; - - /* get some information first to estimate size of the buffer */ - ui0 = NULL; - nastatus = NetWkstaUserGetInfo(NULL, 0, (PBYTE *) &ui0); - if (nastatus != NERR_Success) - return nastatus; - username_sz = lstrlenW(ui0->wkui0_username) + 1; - - ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes)); - NtStatus = LsaOpenPolicy(NULL, &ObjectAttributes, - POLICY_VIEW_LOCAL_INFORMATION, - &PolicyHandle); - if (NtStatus != STATUS_SUCCESS) - { - TRACE("LsaOpenPolicyFailed with NT status %x\n", - LsaNtStatusToWinError(NtStatus)); - NetApiBufferFree(ui0); - return ERROR_NOT_ENOUGH_MEMORY; - } - LsaQueryInformationPolicy(PolicyHandle, PolicyAccountDomainInformation, - (PVOID*) &DomainInfo); - logon_domain_sz = lstrlenW(DomainInfo->DomainName.Buffer) + 1; - LsaClose(PolicyHandle); - - /* set up buffer */ - nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1) + - (username_sz + logon_domain_sz + - oth_domains_sz + logon_server_sz) * sizeof(WCHAR), - (LPVOID *) bufptr); - if (nastatus != NERR_Success) { - NetApiBufferFree(ui0); - return nastatus; - } - ui = (WKSTA_USER_INFO_1 *) *bufptr; - ui->wkui1_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_1)); - ui->wkui1_logon_domain = (LMSTR) ( - ((PBYTE) ui->wkui1_username) + username_sz * sizeof(WCHAR)); - ui->wkui1_oth_domains = (LMSTR) ( - ((PBYTE) ui->wkui1_logon_domain) + - logon_domain_sz * sizeof(WCHAR)); - ui->wkui1_logon_server = (LMSTR) ( - ((PBYTE) ui->wkui1_oth_domains) + - oth_domains_sz * sizeof(WCHAR)); - - /* get data */ - lstrcpyW(ui->wkui1_username, ui0->wkui0_username); - NetApiBufferFree(ui0); - - lstrcpynW(ui->wkui1_logon_domain, DomainInfo->DomainName.Buffer, - logon_domain_sz); - LsaFreeMemory(DomainInfo); - - /* FIXME. Not implemented. Populated with empty strings */ - ui->wkui1_oth_domains[0] = 0; - ui->wkui1_logon_server[0] = 0; - break; - } - case 1101: - { - PWKSTA_USER_INFO_1101 ui; - DWORD dwSize = 1; - - FIXME("Stub. Level 1101 processing is not implemented\n"); - /* FIXME see also wkui1_oth_domains for level 1 */ - - /* set up buffer */ - nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1101) + dwSize * sizeof(WCHAR), - (LPVOID *) bufptr); - if (nastatus != NERR_Success) - return nastatus; - ui = (PWKSTA_USER_INFO_1101) *bufptr; - ui->wkui1101_oth_domains = (LMSTR)(ui + 1); - - /* get data */ - ui->wkui1101_oth_domains[0] = 0; - break; - } - default: - TRACE("Invalid level %d is specified\n", level); - return ERROR_INVALID_LEVEL; - } - return NERR_Success; -} - /************************************************************ * NetpGetComputerName (NETAPI32.@) */ diff --git a/dll/win32/netapi32/wksta_new.c b/dll/win32/netapi32/wksta_new.c index 2739a6c86e0ce..f427f3cd35f74 100644 --- a/dll/win32/netapi32/wksta_new.c +++ b/dll/win32/netapi32/wksta_new.c @@ -1116,20 +1116,19 @@ NetWkstaUserEnum( } -#if 0 NET_API_STATUS WINAPI NetWkstaUserGetInfo( - LPWSTR reserved, + _In_ LPWSTR reserved, _In_ DWORD level, - _Out_ PBYTE *bufptr) + _Out_ LPBYTE *bufptr) { NET_API_STATUS status; TRACE("NetWkstaUserGetInfo(%s, %d, %p)\n", debugstr_w(reserved), level, bufptr); - if (reserved != NULL) + if (reserved != NULL || bufptr == NULL) return ERROR_INVALID_PARAMETER; *bufptr = NULL; @@ -1138,7 +1137,7 @@ NetWkstaUserGetInfo( { status = NetrWkstaUserGetInfo(NULL, level, - (LPWKSTA_USER_INFO)bufptr); + (LPWKSTA_USER_INFO*)bufptr); } RpcExcept(EXCEPTION_EXECUTE_HANDLER) { @@ -1148,13 +1147,12 @@ NetWkstaUserGetInfo( return status; } -#endif NET_API_STATUS WINAPI NetWkstaUserSetInfo( - LPWSTR reserved, + _In_ LPWSTR reserved, _In_ DWORD level, _In_ LPBYTE buf, _Out_ LPDWORD parm_err) diff --git a/sdk/include/reactos/idl/wkssvc.idl b/sdk/include/reactos/idl/wkssvc.idl index b4cac96edd39e..88cf97f6057b5 100644 --- a/sdk/include/reactos/idl/wkssvc.idl +++ b/sdk/include/reactos/idl/wkssvc.idl @@ -180,7 +180,7 @@ typedef struct _WKSTA_USER_INFO_1101 { [string] wchar_t *wkui1101_oth_domains; } WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101; - +/* typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO { [case(0)] LPWKSTA_USER_INFO_0 UserInfo0; @@ -188,6 +188,14 @@ typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO [case(1101)] LPWKSTA_USER_INFO_1101 UserInfo1101; [default] ; } WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO; +*/ +typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO +{ + [case(0)] WKSTA_USER_INFO_0 UserInfo0; + [case(1)] WKSTA_USER_INFO_1 UserInfo1; + [case(1101)] WKSTA_USER_INFO_1101 UserInfo1101; + [default] ; +} WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO; typedef struct _WKSTA_TRANSPORT_INFO_0 { @@ -407,7 +415,8 @@ interface wkssvc NetrWkstaUserGetInfo( [in, string, unique] WKSSVC_IDENTIFY_HANDLE Unused, [in] unsigned long Level, - [out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo); + [out, switch_is(Level)] LPWKSTA_USER_INFO *UserInfo); +// [out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo); /* Function 4 */ unsigned long From a9e7d674278b3f50e751998578484b1a7923990c Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 29 Dec 2024 12:17:55 +0100 Subject: [PATCH 081/750] [MSV1_0] LsaApLogonTerminated: Delete the logged-on user from the logon list --- dll/win32/msv1_0/msv1_0.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/dll/win32/msv1_0/msv1_0.c b/dll/win32/msv1_0/msv1_0.c index 35584bba37fed..46d6bff6f553d 100644 --- a/dll/win32/msv1_0/msv1_0.c +++ b/dll/win32/msv1_0/msv1_0.c @@ -1322,9 +1322,30 @@ LsaApInitializePackage(IN ULONG AuthenticationPackageId, */ VOID NTAPI -LsaApLogonTerminated(IN PLUID LogonId) +LsaApLogonTerminated( + _In_ PLUID LogonId) { + PLOGON_LIST_ENTRY LogonEntry; + TRACE("LsaApLogonTerminated()\n"); + + /* Remove the given logon entry from the list */ + LogonEntry = GetLogonByLogonId(LogonId); + if (LogonEntry != NULL) + { + RemoveEntryList(&LogonEntry->ListEntry); + + if (LogonEntry->UserName.Buffer) + RtlFreeHeap(RtlGetProcessHeap(), 0, LogonEntry->UserName.Buffer); + + if (LogonEntry->LogonDomainName.Buffer) + RtlFreeHeap(RtlGetProcessHeap(), 0, LogonEntry->LogonDomainName.Buffer); + + if (LogonEntry->LogonServer.Buffer) + RtlFreeHeap(RtlGetProcessHeap(), 0, LogonEntry->LogonServer.Buffer); + + RtlFreeHeap(RtlGetProcessHeap(), 0, LogonEntry); + } } From fd41270d6db3bcd2fafe84d49061a4f5f1874428 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Sun, 29 Dec 2024 15:22:30 +0100 Subject: [PATCH 082/750] [SHELL32] ShellExecuteW must call ShellExecuteExW (#7587) Adds the DDEWAIT/NOASYNC flag unless compatibility info says otherwise. CORE-19952 --- dll/win32/shell32/shlexec.cpp | 9 +++++---- sdk/include/reactos/shlwapi_undoc.h | 3 +++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index 68befd3292515..6af8844632ea0 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -2341,6 +2341,8 @@ HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpVerb, LPCSTR lpFile, sei.dwHotKey = 0; sei.hProcess = 0; + if (!(SHGetAppCompatFlags(SHACF_WIN95SHLEXEC) & SHACF_WIN95SHLEXEC)) + sei.fMask |= SEE_MASK_NOASYNC; ShellExecuteExA(&sei); return sei.hInstApp; } @@ -2479,9 +2481,6 @@ ShellExecuteExW(LPSHELLEXECUTEINFOW sei) /************************************************************************* * ShellExecuteW [SHELL32.294] - * from shellapi.h - * WINSHELLAPI HINSTANCE APIENTRY ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, - * LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd); */ HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd) @@ -2503,7 +2502,9 @@ HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, sei.dwHotKey = 0; sei.hProcess = 0; - SHELL_execute(&sei, SHELL_ExecuteW); + if (!(SHGetAppCompatFlags(SHACF_WIN95SHLEXEC) & SHACF_WIN95SHLEXEC)) + sei.fMask |= SEE_MASK_NOASYNC; + ShellExecuteExW(&sei); return sei.hInstApp; } diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index def0725cdd22f..c3ffe8c93df17 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -364,6 +364,9 @@ IContextMenu_Invoke( DWORD WINAPI SHGetObjectCompatFlags(IUnknown *pUnk, const CLSID *clsid); +#define SHACF_WIN95SHLEXEC 0x00000200 /* Geoff Chappell */ +DWORD WINAPI SHGetAppCompatFlags(DWORD dwMask); + /* * HACK! These functions are conflicting with inline functions... * We provide a macro option SHLWAPI_ISHELLFOLDER_HELPERS for using these functions. From 42d5dfd3de5e65da6137413c98b5ab0cbc11325e Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Sun, 29 Dec 2024 17:25:43 +0100 Subject: [PATCH 083/750] [SHELL32] SHELL_FindExecutable: import new path handling code from Wine 10.0-rc3 (#7588) https://gitlab.winehq.org/wine/wine/-/blob/wine-10.0-rc3/dlls/shell32/shlexec.c?ref_type=tags#L631 https://gitlab.winehq.org/wine/wine/-/commit/0bad544aab9e2c9ee93bbabac0386e02c58a39c0 Import new path handling code from Wine 10.0-rc3. It uses PathResolveW(), which was hacked in ReactOS for a long time but has been implemented properly starting from 0.4.15-dev. So now it should work correctly, and we don't need to use SearchPathW() anymore. This fixes a heap corruption from shell32.dll when launching SpotifyXP 2.0.3 Beta and trying to login with Spotify credentials via OAuth login method. Also it fixes the same heap corruption when pressing Update button in CCleaner 5.39.6399. CORE-14670, CORE-19953 --- dll/win32/shell32/shlexec.cpp | 61 +++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index 6af8844632ea0..85c7feab0ff07 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -756,8 +756,10 @@ static UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpVerb, WCHAR wBuffer[256]; /* Used to GetProfileString */ UINT retval = SE_ERR_NOASSOC; WCHAR *tok; /* token pointer */ - WCHAR xlpFile[256]; /* result of SearchPath */ + WCHAR xlpFile[MAX_PATH]; /* result of SearchPath */ DWORD attribs; /* file attributes */ + WCHAR curdir[MAX_PATH]; + const WCHAR *search_paths[3] = {0}; TRACE("%s\n", debugstr_w(lpFile)); @@ -782,17 +784,56 @@ static UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpVerb, return 33; } - if (SearchPathW(lpPath, lpFile, L".exe", ARRAY_SIZE(xlpFile), xlpFile, NULL)) + GetCurrentDirectoryW(ARRAY_SIZE(curdir), curdir); + if (!PathIsFileSpecW(lpFile)) { - TRACE("SearchPathW returned non-zero\n"); - lpFile = xlpFile; - /* The file was found in the application-supplied default directory (or the system search path) */ + BOOL found = FALSE; + if (lpPath && *lpPath) + { + TRACE("lpPath %s\n", debugstr_w(lpPath)); + PathCombineW(xlpFile, lpPath, lpFile); + if (PathFileExistsDefExtW(xlpFile, WHICH_DEFAULT | WHICH_OPTIONAL) || PathFileExistsW(xlpFile)) + { + GetFullPathNameW(xlpFile, ARRAY_SIZE(xlpFile), xlpFile, NULL); + found = TRUE; + } + } + if (!found) + { + lstrcpyW(xlpFile, lpFile); + if (PathFileExistsDefExtW(xlpFile, WHICH_DEFAULT | WHICH_OPTIONAL) || PathFileExistsW(xlpFile)) + { + GetFullPathNameW(xlpFile, ARRAY_SIZE(xlpFile), xlpFile, NULL); + found = TRUE; + } + } + if (found) + { + lpFile = xlpFile; + lstrcpyW(lpResult, xlpFile); + } + else + xlpFile[0] = '\0'; } - else if (lpPath && SearchPathW(NULL, lpFile, L".exe", ARRAY_SIZE(xlpFile), xlpFile, NULL)) + else { - TRACE("SearchPathW returned non-zero\n"); - lpFile = xlpFile; - /* The file was found in one of the directories in the system-wide search path */ + if (lpPath && *lpPath) + { + search_paths[0] = lpPath; + search_paths[1] = curdir; + } + else + search_paths[0] = curdir; + lstrcpyW(xlpFile, lpFile); + if (PathResolveW(xlpFile, search_paths, PRF_TRYPROGRAMEXTENSIONS | PRF_VERIFYEXISTS)) + { + TRACE("PathResolveW returned non-zero\n"); + lpFile = xlpFile; + lstrcpyW(lpResult, xlpFile); + /* The file was found in lpPath or one of the directories in the system-wide search path */ + } + else + xlpFile[0] = '\0'; } attribs = GetFileAttributesW(lpFile); @@ -932,7 +973,7 @@ static UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpVerb, } } - TRACE("returning %s\n", debugstr_w(lpResult)); + TRACE("returning path %s, retval %d\n", debugstr_w(lpResult), retval); return retval; } From 26f8fa7ade5c09c6e313b0b695497b1f8a9c75ac Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 29 Dec 2024 21:14:40 +0100 Subject: [PATCH 084/750] [WKSSVC] NetrWkstaGetInfo Level 102: Return the number of currently logged-on users --- base/services/wkssvc/rpcserver.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index 0c50e494f330a..fe39af081bc3b 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -141,6 +141,7 @@ NetrWkstaGetInfo( LSA_OBJECT_ATTRIBUTES ObjectAttributes; LSA_HANDLE PolicyHandle; PPOLICY_PRIMARY_DOMAIN_INFO DomainInfo = NULL; + ULONG LoggedOnUsers; NTSTATUS NtStatus; DWORD dwResult = NERR_Success; @@ -173,6 +174,33 @@ NetrWkstaGetInfo( return LsaNtStatusToWinError(NtStatus); } + if (Level == 102) + { + MSV1_0_ENUMUSERS_REQUEST EnumRequest; + PMSV1_0_ENUMUSERS_RESPONSE EnumResponseBuffer = NULL; + DWORD EnumResponseBufferSize = 0; + NTSTATUS ProtocolStatus; + + /* enumerate all currently logged-on users */ + EnumRequest.MessageType = MsV1_0EnumerateUsers; + NtStatus = LsaCallAuthenticationPackage(LsaHandle, + LsaAuthenticationPackage, + &EnumRequest, + sizeof(EnumRequest), + (PVOID*)&EnumResponseBuffer, + &EnumResponseBufferSize, + &ProtocolStatus); + if (!NT_SUCCESS(NtStatus)) + { + dwResult = RtlNtStatusToDosError(NtStatus); + goto done; + } + + LoggedOnUsers = EnumResponseBuffer->NumberOfLoggedOnUsers; + + LsaFreeReturnBuffer(EnumResponseBuffer); + } + switch (Level) { case 100: @@ -252,7 +280,7 @@ NetrWkstaGetInfo( if (pWkstaInfo->WkstaInfo102.wki102_lanroot != NULL) wcscpy(pWkstaInfo->WkstaInfo102.wki102_lanroot, pszLanRoot); - pWkstaInfo->WkstaInfo102.wki102_logged_on_users = 1; /* FIXME */ + pWkstaInfo->WkstaInfo102.wki102_logged_on_users = LoggedOnUsers; *WkstaInfo = pWkstaInfo; break; @@ -276,6 +304,7 @@ NetrWkstaGetInfo( break; } +done: if (DomainInfo != NULL) LsaFreeMemory(DomainInfo); From 894e5cddd69ad95b27c12646533f4a0eccaa7b1d Mon Sep 17 00:00:00 2001 From: Denis Robert Date: Mon, 30 Dec 2024 14:14:44 +0100 Subject: [PATCH 085/750] [SHELL32] Fix BrowseForFolder expanding a folder containing a zip (#7585) Commit 325d74c30f3 (PR #7437) introduced a side effect that made impossible to expand a folder when it contained both a ZIP file and subfolders. Fix this by ignoring the return value of BrFolder_InsertItem and free the pidlTemp pointer explicitly in all cases. CORE-19955 CORE-19751 --- dll/win32/shell32/brfolder.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dll/win32/shell32/brfolder.cpp b/dll/win32/shell32/brfolder.cpp index 7b211939ef174..705809bb93057 100644 --- a/dll/win32/shell32/brfolder.cpp +++ b/dll/win32/shell32/brfolder.cpp @@ -408,8 +408,8 @@ BrFolder_Expand( ULONG ulFetched; while (S_OK == pEnum->Next(1, &pidlTemp, &ulFetched)) { - if (!BrFolder_InsertItem(info, lpsf, pidlTemp, pidlFull, hParent)) - break; + /* Ignore return value of BrFolder_InsertItem to avoid incomplete folder listing */ + BrFolder_InsertItem(info, lpsf, pidlTemp, pidlFull, hParent); pidlTemp.Free(); // Finally, free the pidl that the shell gave us... } From 8d009776810011c7f3fceab62cacfc130f3fdb05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 31 Oct 2024 22:25:54 +0100 Subject: [PATCH 086/750] [SETUP:REACTOS] Refactor the Welcome page (#7579) - Rewrite the introductory text. - Add a temporary (ReactOS-Alpha) informational message. - Hide the "Back" button when the Welcome page is active, and show it back again when switching to the following ones. --- base/setup/reactos/lang/bg-BG.rc | 14 ++++- base/setup/reactos/lang/cs-CZ.rc | 14 ++++- base/setup/reactos/lang/de-DE.rc | 16 ++++- base/setup/reactos/lang/el-GR.rc | 14 ++++- base/setup/reactos/lang/en-US.rc | 14 ++++- base/setup/reactos/lang/es-ES.rc | 14 ++++- base/setup/reactos/lang/et-EE.rc | 14 ++++- base/setup/reactos/lang/eu-ES.rc | 14 ++++- base/setup/reactos/lang/fi-FI.rc | 14 ++++- base/setup/reactos/lang/fr-FR.rc | 14 ++++- base/setup/reactos/lang/he-IL.rc | 16 ++++- base/setup/reactos/lang/hi-IN.rc | 14 ++++- base/setup/reactos/lang/hu-HU.rc | 16 ++++- base/setup/reactos/lang/id-ID.rc | 14 ++++- base/setup/reactos/lang/it-IT.rc | 14 ++++- base/setup/reactos/lang/ja-JP.rc | 14 ++++- base/setup/reactos/lang/ms-MY.rc | 14 ++++- base/setup/reactos/lang/no-NO.rc | 16 ++++- base/setup/reactos/lang/pl-PL.rc | 14 ++++- base/setup/reactos/lang/pt-BR.rc | 14 ++++- base/setup/reactos/lang/pt-PT.rc | 14 ++++- base/setup/reactos/lang/ro-RO.rc | 14 ++++- base/setup/reactos/lang/ru-RU.rc | 14 ++++- base/setup/reactos/lang/sk-SK.rc | 14 ++++- base/setup/reactos/lang/sq-AL.rc | 14 ++++- base/setup/reactos/lang/tr-TR.rc | 16 ++++- base/setup/reactos/lang/uk-UA.rc | 14 ++++- base/setup/reactos/lang/vi-VN.rc | 14 ++++- base/setup/reactos/lang/zh-CN.rc | 14 ++++- base/setup/reactos/lang/zh-HK.rc | 14 ++++- base/setup/reactos/lang/zh-TW.rc | 14 ++++- base/setup/reactos/reactos.c | 103 +++++++++++++++++++++---------- base/setup/reactos/reactos.h | 4 ++ base/setup/reactos/resource.h | 3 + 34 files changed, 453 insertions(+), 101 deletions(-) diff --git a/base/setup/reactos/lang/bg-BG.rc b/base/setup/reactos/lang/bg-BG.rc index 7c230e346b4d9..ddba90c57c74d 100644 --- a/base/setup/reactos/lang/bg-BG.rc +++ b/base/setup/reactos/lang/bg-BG.rc @@ -8,8 +8,18 @@ CAPTION "Настройка на РеактОС" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Съветникът за настройка на РеактОС ви приветства", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Все още не можете да сложите РеактОС направо от този КД! Презапуснете компютъра с този КД, за да сложите РеактОС.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Натиснете „Приключване“ за изход от настройването.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Натиснете „Напред“ за продължаване на настройката.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/cs-CZ.rc b/base/setup/reactos/lang/cs-CZ.rc index 8f1b30091c773..b96eda89b63a8 100644 --- a/base/setup/reactos/lang/cs-CZ.rc +++ b/base/setup/reactos/lang/cs-CZ.rc @@ -14,8 +14,18 @@ CAPTION "Instalace systému ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Vítejte v průvodci instalace systému ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Systém ReactOS zatím nelze nainstalovat přímo z tohoto CD! Pro instalaci restartuje počítač z tohoto CD.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Klepnutím na Dokončit ukončíte instalaci.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Kliknutím na Další pokračujte v instalaci.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/de-DE.rc b/base/setup/reactos/lang/de-DE.rc index ffb2edbd21786..1ec67347ae667 100644 --- a/base/setup/reactos/lang/de-DE.rc +++ b/base/setup/reactos/lang/de-DE.rc @@ -7,9 +7,19 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS-Setup" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Willkommen beim ReactOS-Setup-Assistenten", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "ReactOS kann noch nicht direkt von dieser CD installiert werden! Bitte starten Sie Ihren Computer mit dieser CD um ReactOS zu installieren.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Klicken Sie auf Beenden um das Setup zu verlassen.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "Willkommen beim ReactOS Installationsassistenten", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Klicken Sie auf Weiter, um fortzufahren.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/el-GR.rc b/base/setup/reactos/lang/el-GR.rc index d8f3c06be632f..e7153a7767216 100644 --- a/base/setup/reactos/lang/el-GR.rc +++ b/base/setup/reactos/lang/el-GR.rc @@ -8,8 +8,18 @@ CAPTION "Εγκατάσταση του ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Καλώς ήλθατε στον οδηγό εγκατάστασης του ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Δε μπορείτε να εγκαταστήσετε το ReactOS απευθείας από αυτό το CD ακόμα! Παρακαλούμε επανεκκινήστε τον υπολογιστή σας από αυτό το CD για να μπορέσετε να εγκαταστήσετε το ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Πατήστε Ολοκλήρωση για να βγείτε από την Εγκατάσταση.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Πατήστε το 'Επόμενο' για να συνεχίσει η εγκατάσταση.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/en-US.rc b/base/setup/reactos/lang/en-US.rc index 0c6d7e32b7ce8..c957f5bc3b1b5 100644 --- a/base/setup/reactos/lang/en-US.rc +++ b/base/setup/reactos/lang/en-US.rc @@ -8,8 +8,18 @@ CAPTION "ReactOS Setup" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Welcome to the ReactOS Setup Wizard", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "You cannot install ReactOS directly from this CD yet! Please restart your computer from this CD in order to install ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Click Finish to exit the Setup.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Click Next to continue with Setup.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/es-ES.rc b/base/setup/reactos/lang/es-ES.rc index acac98fea7c21..e17041d18947b 100644 --- a/base/setup/reactos/lang/es-ES.rc +++ b/base/setup/reactos/lang/es-ES.rc @@ -17,8 +17,18 @@ CAPTION "Instalación de ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Bienvenido al Asistente de Instalación de ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "¡Aún no puede instalar ReactOS desde el ejecutable del CD! Por favor, arranque su equipo desde el CD para instalar ReactOS.", IDC_STATIC, 115, 40, 200, 100 - LTEXT "Pulse Finalizar para salir del instalador.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Pulse Siguiente para continuar con la instalación.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/et-EE.rc b/base/setup/reactos/lang/et-EE.rc index c880c622caf18..998b398aa704d 100644 --- a/base/setup/reactos/lang/et-EE.rc +++ b/base/setup/reactos/lang/et-EE.rc @@ -8,8 +8,18 @@ CAPTION "ReactOS'i paigaldamine" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Tere tulemast ReactOS'i paigaldamus viisardisse", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Selle CD pealt ei saa praegu veel ReactOS'i paigaldada! ReactOS'i paigaldamiseks on tarvis arvuti taaskäivitada selle CD-ga.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Vajuta lõpeta, et installeerimine lõpetada.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Vajuta Edasi paigaldamise jätkamiseks.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/eu-ES.rc b/base/setup/reactos/lang/eu-ES.rc index 5ea81031a3721..18ae8fb314bf2 100644 --- a/base/setup/reactos/lang/eu-ES.rc +++ b/base/setup/reactos/lang/eu-ES.rc @@ -15,8 +15,18 @@ CAPTION "Instalación de ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Bienvenido al Asistente de Instalación de ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "¡Aún no puede instalar ReactOS directamente desde el CD! Por favor, reinicie su equipo desde el CD para instalar ReactOS.", IDC_STATIC, 115, 40, 200, 100 - LTEXT "Pulse Finalizar para salir del instalador.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Sakatu Aurrera instalazioa jarraitzeko.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/fi-FI.rc b/base/setup/reactos/lang/fi-FI.rc index 4acfbcce05647..aaa7e9dcc66cf 100644 --- a/base/setup/reactos/lang/fi-FI.rc +++ b/base/setup/reactos/lang/fi-FI.rc @@ -8,8 +8,18 @@ CAPTION "ReactOS Asennus" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Welcome to the ReactOS Setup Wizard", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Et voi asentaa ReactOS:ä suoraan tältä CDlevyltä! Käynnistä tietokoneesi tältä CD levyltä asentaaksesi ReactOS:ä.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Click Finish to exit the Setup.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Click Next to continue with Setup.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/fr-FR.rc b/base/setup/reactos/lang/fr-FR.rc index a0737ad3a39f6..060ff220b58ce 100644 --- a/base/setup/reactos/lang/fr-FR.rc +++ b/base/setup/reactos/lang/fr-FR.rc @@ -8,8 +8,18 @@ CAPTION "Installation de ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Bienvenue dans l'assistant d'installation de ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Vous ne pouvez pas encore installer ReactOS directement depuis ce CD ! Veuillez redémarrer votre ordinateur depuis ce CD pour pouvoir installer ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Cliquez sur Terminer pour quitter l'installation.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "Cet assistant installe ou met à niveau ReactOS sur votre ordinateur, \ +et prépare la seconde étape d'installation.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " INFORMATION IMPORTANTE ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS est en version Alpha : il n'est pas complet et est \ +en cours de développement. Il est conseillé de ne l'utiliser \ +que pour évaluation et test, pas pour un usage quotidien.\n\ +Il peut corrompre vos données ou endommager votre matériel.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Sauvegardez vos données ou testez sur un ordinateur secondaire \ +si vous souhaitez utiliser ReactOS sur du matériel.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Cliquez sur Suivant pour continuer l'installation.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/he-IL.rc b/base/setup/reactos/lang/he-IL.rc index 1530d86da94f1..cdda584b05db3 100644 --- a/base/setup/reactos/lang/he-IL.rc +++ b/base/setup/reactos/lang/he-IL.rc @@ -9,9 +9,19 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "ברוכים הבאים לאשף ההתקנה של ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "אתה לא יכול להתקין את ReactOS מהדיסק הזה ברגע זה! נע הפעל מחדש את המחשב מהדיסק הזה בשביל להתקין את ReactOS", IDC_STATIC, 115, 40, 195, 100 - LTEXT "לחץ על 'סיום' כדי לסיים את ההתקנה.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "ברוכים לאשף ההתקנה של ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "לחץ על הבא כדי להמשיך עם ההתקנה", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/hi-IN.rc b/base/setup/reactos/lang/hi-IN.rc index e0c2fbc92020e..d21fc04ee1af5 100644 --- a/base/setup/reactos/lang/hi-IN.rc +++ b/base/setup/reactos/lang/hi-IN.rc @@ -15,8 +15,18 @@ CAPTION "रिऐक्ट ओएस सेटअप" FONT 8, "MS Shell Dlg" BEGIN LTEXT "रिऐक्ट ओएस सेटअप विज़ार्ड में आपका स्वागत है।", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "आप अभी तक इस सीडी से सीधे रिऐक्ट ओएस इंस्टॉल नहीं कर सकते हैं! कृपया अपने कंप्यूटर को रिऐक्ट ओएस इंस्टॉल करने के लिए इस सीडी से रीस्टॉर्ट करें।", IDC_STATIC, 115, 40, 195, 100 - LTEXT "सेटअप से बाहर निकलने के लिए समाप्त क्लिक करें।", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "सेटअप के साथ जारी रखने के लिए आगे क्लिक करें।", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/hu-HU.rc b/base/setup/reactos/lang/hu-HU.rc index 93e27c3d5ca3d..81033de9895dd 100644 --- a/base/setup/reactos/lang/hu-HU.rc +++ b/base/setup/reactos/lang/hu-HU.rc @@ -9,9 +9,19 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS telepítõ" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Welcome to the ReactOS Setup Wizard", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Nem tudod feltelepíteni a ReactOS rendszert így! Kérlek indítsd újra a számítógépet ezzel a CD-vel, hogy feltudjad telepíteni a ReactOS rendszert.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Click Finish to exit the Setup.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "Üdvözöljük a ReactOS telepítőben", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Kattintson a Tovább gombra a folytatáshoz.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/id-ID.rc b/base/setup/reactos/lang/id-ID.rc index faeb2b7e961b9..a303bc8e73050 100644 --- a/base/setup/reactos/lang/id-ID.rc +++ b/base/setup/reactos/lang/id-ID.rc @@ -8,8 +8,18 @@ CAPTION "Penyetelan ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Selamat datang di Penuntun Penyetelan ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "ReactOS belum bisa dipasang dari CD secara langsung! Mohon mulai ulang komputer ini dari CD secara berurutan untuk memasang ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Klik selesai untuk keluar dari penyetelan.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Klik Lanjut untuk melanjutkan Penyetelan.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/it-IT.rc b/base/setup/reactos/lang/it-IT.rc index 31368d066029b..1ee24d21c46d4 100644 --- a/base/setup/reactos/lang/it-IT.rc +++ b/base/setup/reactos/lang/it-IT.rc @@ -8,8 +8,18 @@ CAPTION "Installazione di ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Benvenuto al wizard di installazione di ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Non è ancora possibile installare ReactOS direttamente da questo CD! E' necessario riavviare il computer da questo CD per procedere alla installazione di ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Cliccare Fine per uscire.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Selezionare Avanti per proseguire con la configurazione.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/ja-JP.rc b/base/setup/reactos/lang/ja-JP.rc index 580d42049bcfb..31c258c54340e 100644 --- a/base/setup/reactos/lang/ja-JP.rc +++ b/base/setup/reactos/lang/ja-JP.rc @@ -8,8 +8,18 @@ CAPTION "ReactOS セットアップ" FONT 9, "MS UI Gothic" BEGIN LTEXT "ReactOS セットアップウィザードへようこそ", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "このCDからまだ直接ReactOSをインストールできません。ReactOSをインストールするために、このCDからコンピュータを再起動して下さい。", IDC_STATIC, 115, 40, 195, 100 - LTEXT "完了をクリックしてセットアップを終了して下さい。", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "セットアップを続行するには [次へ] をクリックして下さい。", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/ms-MY.rc b/base/setup/reactos/lang/ms-MY.rc index a7cd0c0921fe1..3d429a596e5c6 100644 --- a/base/setup/reactos/lang/ms-MY.rc +++ b/base/setup/reactos/lang/ms-MY.rc @@ -10,8 +10,18 @@ CAPTION "ReactOS Persediaan" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Selamat datang ke Pendeta Persediaan ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Anda tidak boleh memasang ReactOS terus dari CD ini lagi! Sila mula semula komputer anda dari CD ini untuk memasang ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Klik Selesai untuk keluar persediaan.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Click Next to continue with Setup.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/no-NO.rc b/base/setup/reactos/lang/no-NO.rc index 2b4949e4b96f5..5352bc37d9aab 100644 --- a/base/setup/reactos/lang/no-NO.rc +++ b/base/setup/reactos/lang/no-NO.rc @@ -7,9 +7,19 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS installering" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Velkommen til ReactOS installering veiviseren", IDC_STARTTITLE, 115, 8, 220, 24 - LTEXT "Du kan ennå ikke installere ReactOS direkte fra denne CD-en! Vennligst start datamaskinen på nytt og start fra denne platen for å installere ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Trykk på Fullført for å avslutte installeringen.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "Velkommen til ReactOS installering veiviseren", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Klikk Neste for å fortsette installasjonen.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/pl-PL.rc b/base/setup/reactos/lang/pl-PL.rc index c077f071a43f2..463883adbf72b 100644 --- a/base/setup/reactos/lang/pl-PL.rc +++ b/base/setup/reactos/lang/pl-PL.rc @@ -19,8 +19,18 @@ CAPTION "Instalator systemu ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Witamy w Kreatorze instalacji systemu ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Obecnie nie można zainstalować systemu ReactOS bezpośrednio! Uruchom ponownie komputer z tej płyty, aby zainstalować system ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Kliknij przycisk Anuluj, aby zakończyć pracę instalatora.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Kliknij Dalej, by kontynuować.", IDC_STATIC, 115, 169, 160, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/pt-BR.rc b/base/setup/reactos/lang/pt-BR.rc index 750fff7a706df..75ad92346b082 100644 --- a/base/setup/reactos/lang/pt-BR.rc +++ b/base/setup/reactos/lang/pt-BR.rc @@ -8,8 +8,18 @@ CAPTION "Instalação do ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Bem-vindo(a) ao Assistente de Instalação do ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Você não pode instalar o ReactOS diretamente deste CD! Por favor reinicie seu computador a partir deste CD para instalar o ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Clique em Finalizar para sair da Instalação.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Clique Avançar para continuar a instalação.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/pt-PT.rc b/base/setup/reactos/lang/pt-PT.rc index e7867b4b93a56..60ebe7fbdc71f 100644 --- a/base/setup/reactos/lang/pt-PT.rc +++ b/base/setup/reactos/lang/pt-PT.rc @@ -8,8 +8,18 @@ CAPTION "Instalação do ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Bem-vindo(a) ao Assistente de Instalação do ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Não pode instalar o ReactOS directamente deste CD! Por favor reinicie o computador a partir deste CD para instalar o ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Clique em Finalizar para sair da Instalação.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Clique Avançar para continuar a instalação.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/ro-RO.rc b/base/setup/reactos/lang/ro-RO.rc index c0122941cfba5..91dabc7e62cb4 100644 --- a/base/setup/reactos/lang/ro-RO.rc +++ b/base/setup/reactos/lang/ro-RO.rc @@ -17,8 +17,18 @@ CAPTION "Expert de instalare ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Bun venit la instalarea ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "ReactOS încă nu poate fi instalat direct de pe acest CD! Pentru a instala ReactOS, reporniți calculatorul și utilizați acest CD în secvența de inițializare.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Apăsați pe Sfârșit pentru a ieși.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Apăsați Înainte pentru a continua.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/ru-RU.rc b/base/setup/reactos/lang/ru-RU.rc index eacc18ce39d0a..3946f120c7cc0 100644 --- a/base/setup/reactos/lang/ru-RU.rc +++ b/base/setup/reactos/lang/ru-RU.rc @@ -8,8 +8,18 @@ CAPTION "Установка ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Вас приветствует программа установки ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Установку ReactOS можно производить только загрузившись с этого диска! После перезапуска компьютера выберите загрузку с CD и начните установку ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Нажмите кнопку ""Завершить"" для выхода.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Нажмите ""Далее"" для продолжения установки.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/sk-SK.rc b/base/setup/reactos/lang/sk-SK.rc index d94b765f18802..77077aaf141e0 100644 --- a/base/setup/reactos/lang/sk-SK.rc +++ b/base/setup/reactos/lang/sk-SK.rc @@ -13,8 +13,18 @@ CAPTION "Inštalácia systému ReactOS" //ReactOS Setup FONT 8, "MS Shell Dlg" BEGIN LTEXT "Víta Vás sprievodca inštaláciou systému ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Systém ReactOS sa z tohto CD nedá nainštalovať ihneď! Reštartujte, prosím, počítač a inštalačné CD nechajte vložené, aby sa mohol systém ReactOS nainštalovať.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Inštaláciu ukončíte kliknutím na tlačidlo Dokončiť.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Kliknutím na Ďalej pokračujte v inštalácii.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/sq-AL.rc b/base/setup/reactos/lang/sq-AL.rc index 99b09a3d02c21..df2c106654e2e 100644 --- a/base/setup/reactos/lang/sq-AL.rc +++ b/base/setup/reactos/lang/sq-AL.rc @@ -10,8 +10,18 @@ CAPTION "Instalimi i ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Mirë se vini në instalimin e ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Ju nuk mund të instaloni ReactOS direkt nga ky CD! Ju lutem rinisni kompjuterin tuaj nga CD'ja në mënyrë që të instaloni ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Kliko Finish për të dalë nga instalimi.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Klikoni Tjetër për të vazhduar me Ndërtimin.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/tr-TR.rc b/base/setup/reactos/lang/tr-TR.rc index 3cba7f7a35f5c..af9ee0579e2b9 100644 --- a/base/setup/reactos/lang/tr-TR.rc +++ b/base/setup/reactos/lang/tr-TR.rc @@ -14,9 +14,19 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS Kur" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "ReactOS Kur Sihirbazına'na Hoş Geldiniz", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Bu CD'den, henüz ReactOS'u doğrudan kuramazsınız. Lütfen ReactOS'u kurmak için bu CD'den bilgisayarınızı yeniden başlatınız.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Kurulumdan çıkmak için İptal'e tıklayınız.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "ReactOS Kurulum Sihirbazı'na hoşgeldiniz", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Kuruluma devam etmek için İleri'ye tıklayınız.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/uk-UA.rc b/base/setup/reactos/lang/uk-UA.rc index 3ddeee167a261..a83ada50ccafd 100644 --- a/base/setup/reactos/lang/uk-UA.rc +++ b/base/setup/reactos/lang/uk-UA.rc @@ -16,8 +16,18 @@ CAPTION "Встановлення ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Вас вітає програма встановлення ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Ви не можете встановити ReactOS прямо з цього CD! Будь ласка перезапустіть Ваш комп’ютер з цього CD для того, щоб встановити ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Натисніть кнопку Завершити для виходу.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Натисніть ""Далі"", щоб продовжити встановлення.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/vi-VN.rc b/base/setup/reactos/lang/vi-VN.rc index b082e0e475f34..3d007b3447f65 100644 --- a/base/setup/reactos/lang/vi-VN.rc +++ b/base/setup/reactos/lang/vi-VN.rc @@ -8,8 +8,18 @@ CAPTION "Cài đặt ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Chào mừng đến với Trình hướng dẫn thiết lập ReactOS", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Bạn chưa thể cài đặt ReactOS trực tiếp tư đĩa CD này được! Xin hãy khởi động lại máy tính của bạn từ đĩa CD trên để cài đặt ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Ấn Hoàn tất để thoát trình Thiết lập.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "Click Next to continue with Setup.", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/zh-CN.rc b/base/setup/reactos/lang/zh-CN.rc index dc0cc6494b56a..7b7f56da4231c 100644 --- a/base/setup/reactos/lang/zh-CN.rc +++ b/base/setup/reactos/lang/zh-CN.rc @@ -8,8 +8,18 @@ CAPTION "ReactOS 安装程序" FONT 9, "宋体" BEGIN LTEXT "欢迎使用 ReactOS 安装程序", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "您暂时不能直接从此 CD 安装 ReactOS!请重新启动并从 CD 引导您的电脑以便安装 ReactOS。", IDC_STATIC, 115, 40, 195, 100 - LTEXT "点击完成退出安装。", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "若要继续,请单击“下一步”。", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/zh-HK.rc b/base/setup/reactos/lang/zh-HK.rc index 689cc84cb68bf..bc93f406c7438 100644 --- a/base/setup/reactos/lang/zh-HK.rc +++ b/base/setup/reactos/lang/zh-HK.rc @@ -16,8 +16,18 @@ CAPTION "ReactOS 安裝程式" FONT 9, "新細明體" BEGIN LTEXT "歡迎使用 ReactOS 安裝程式精靈", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "您目前不能直接從這個 CD 安裝 ReactOS!\n請重新開機並從 CD 啟動您的電腦以安裝 ReactOS。", IDC_STATIC, 115, 40, 195, 100 - LTEXT "按[完成]退出安裝程式。", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "按[下一步]繼續安裝程式。", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/lang/zh-TW.rc b/base/setup/reactos/lang/zh-TW.rc index 91639246353b5..704248d5c3913 100644 --- a/base/setup/reactos/lang/zh-TW.rc +++ b/base/setup/reactos/lang/zh-TW.rc @@ -17,8 +17,18 @@ CAPTION "ReactOS 安裝程式" FONT 9, "新細明體" BEGIN LTEXT "歡迎使用 ReactOS 安裝程式精靈", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "您目前不能直接從這個 CD 安裝 ReactOS!請重新開機並從 CD 啟動您的電腦以便安裝 ReactOS。", IDC_STATIC, 115, 40, 195, 100 - LTEXT "按[完成]退出安裝程式。", IDC_STATIC, 115, 169, 195, 17 + LTEXT "This wizard will install or upgrade ReactOS on your computer, \ +and prepare the second part of the setup.", IDC_STATIC, 115, 40, 195, 27 +//// + GROUPBOX " IMPORTANT INFORMATION ", IDC_WARNTEXT1, 115, 70, 195, 90, BS_CENTER + LTEXT "ReactOS is in Alpha stage: it is not feature- complete and is \ +under heavy development. It is recommended to use it only for \ +evaluation and testing and not as your daily-usage OS.\n\ +It may corrupt your data or damage your hardware.", IDC_WARNTEXT2, 120, 80, 185, 50, SS_CENTER + LTEXT "Backup your data or test on a secondary computer \ +if you attempt to run ReactOS on real hardware.", IDC_WARNTEXT3, 120, 130, 185, 27, SS_CENTER +//// + LTEXT "按[下一步]繼續安裝程式。", IDC_STATIC, 115, 169, 195, 17 END IDD_TYPEPAGE DIALOGEX 0, 0, 317, 143 diff --git a/base/setup/reactos/reactos.c b/base/setup/reactos/reactos.c index 8bdb3df629cda..64f864d4dfa35 100644 --- a/base/setup/reactos/reactos.c +++ b/base/setup/reactos/reactos.c @@ -79,29 +79,50 @@ CenterWindow(HWND hWnd) SWP_NOSIZE); } +/** + * @brief + * Create a bold font derived from the provided font. + **/ static HFONT -CreateTitleFont(VOID) +CreateBoldFont( + _In_opt_ HFONT hOrigFont, + _In_opt_ INT PointSize) { - NONCLIENTMETRICS ncm; - LOGFONT LogFont; - HDC hdc; - INT FontSize; - HFONT hFont; - - ncm.cbSize = sizeof(NONCLIENTMETRICS); - SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); - - LogFont = ncm.lfMessageFont; - LogFont.lfWeight = FW_BOLD; - _tcscpy(LogFont.lfFaceName, _T("MS Shell Dlg")); - - hdc = GetDC(NULL); - FontSize = 12; - LogFont.lfHeight = 0 - GetDeviceCaps (hdc, LOGPIXELSY) * FontSize / 72; - hFont = CreateFontIndirect(&LogFont); - ReleaseDC(NULL, hdc); - - return hFont; + LOGFONTW lf = {0}; + + if (hOrigFont) + { + GetObjectW(hOrigFont, sizeof(lf), &lf); + } + else + { + NONCLIENTMETRICSW ncm; + ncm.cbSize = sizeof(ncm); + SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); + lf = ncm.lfMessageFont; + } + + /* Make the font bold, keeping the other attributes */ + lf.lfWeight = FW_BOLD; + + /* Determine the font height (logical units) if necessary */ + if (PointSize) + { + HDC hdc = GetDC(NULL); + lf.lfHeight = -MulDiv(PointSize, GetDeviceCaps(hdc, LOGPIXELSY), 72); + // lf.lfWidth = 0; + ReleaseDC(NULL, hdc); + } + + return CreateFontIndirect(&lf); +} + +static inline HFONT +CreateTitleFont( + _In_opt_ HFONT hOrigFont) +{ + /* Title font is 12pt bold */ + return CreateBoldFont(hOrigFont, 12); } INT @@ -307,11 +328,13 @@ StartDlgProc( SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); /* Set title font */ - SendDlgItemMessage(hwndDlg, - IDC_STARTTITLE, - WM_SETFONT, - (WPARAM)pSetupData->hTitleFont, - (LPARAM)TRUE); + SetDlgItemFont(hwndDlg, IDC_STARTTITLE, pSetupData->hTitleFont, TRUE); + + // TEMPTEMP: Set the ReactOS-Alpha information in bold. + // TODO: Remove once we reach 0.5/Beta :) + SetDlgItemFont(hwndDlg, IDC_WARNTEXT1, pSetupData->hBoldFont, TRUE); + SetDlgItemFont(hwndDlg, IDC_WARNTEXT2, pSetupData->hBoldFont, TRUE); + SetDlgItemFont(hwndDlg, IDC_WARNTEXT3, pSetupData->hBoldFont, TRUE); /* Center the wizard window */ CenterWindow(GetParent(hwndDlg)); @@ -325,8 +348,21 @@ StartDlgProc( switch (lpnm->code) { case PSN_SETACTIVE: + { + /* Only "Next" and "Cancel" for the first page and hide "Back" */ PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT); + // PropSheet_ShowWizButtons(GetParent(hwndDlg), 0, PSWIZB_BACK); + ShowDlgItem(GetParent(hwndDlg), ID_WIZBACK, SW_HIDE); break; + } + + case PSN_KILLACTIVE: + { + /* Show "Back" button */ + // PropSheet_ShowWizButtons(GetParent(hwndDlg), PSWIZB_BACK, PSWIZB_BACK); + ShowDlgItem(GetParent(hwndDlg), ID_WIZBACK, SW_SHOW); + break; + } default: break; @@ -2282,11 +2318,7 @@ RestartDlgProc( SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); /* Set title font */ - SendDlgItemMessage(hwndDlg, - IDC_FINISHTITLE, - WM_SETFONT, - (WPARAM)pSetupData->hTitleFont, - (LPARAM)TRUE); + SetDlgItemFont(hwndDlg, IDC_FINISHTITLE, pSetupData->hTitleFont, TRUE); break; case WM_TIMER: @@ -2864,8 +2896,9 @@ _tWinMain(HINSTANCE hInst, // RegisterTreeListClass(hInst); TreeListRegister(hInst); - /* Create title font */ - SetupData.hTitleFont = CreateTitleFont(); + /* Create the title and bold fonts */ + SetupData.hTitleFont = CreateTitleFont(NULL); + SetupData.hBoldFont = CreateBoldFont(NULL, 0); if (!SetupData.bUnattend) { @@ -2976,8 +3009,10 @@ _tWinMain(HINSTANCE hInst, CloseHandle(SetupData.hHaltInstallEvent); SetupData.hHaltInstallEvent = NULL; + if (SetupData.hBoldFont) + DeleteFont(SetupData.hBoldFont); if (SetupData.hTitleFont) - DeleteObject(SetupData.hTitleFont); + DeleteFont(SetupData.hTitleFont); /* Unregister the TreeList control */ // UnregisterTreeListClass(hInst); diff --git a/base/setup/reactos/reactos.h b/base/setup/reactos/reactos.h index 286a303034c7c..9d8aecc04398e 100644 --- a/base/setup/reactos/reactos.h +++ b/base/setup/reactos/reactos.h @@ -51,6 +51,9 @@ #define ShowDlgItem(hDlg, nID, nCmdShow) \ ShowWindow(GetDlgItem((hDlg), (nID)), (nCmdShow)) +#define SetDlgItemFont(hDlg, nID, hFont, bRedraw) \ + SetWindowFont(GetDlgItem((hDlg), (nID)), (hFont), (bRedraw)) + /* These are public names and values determined from MFC, and compatible with Windows */ // Property Sheet control id's (determined with Spy++) #define IDC_TAB_CONTROL 0x3020 @@ -134,6 +137,7 @@ typedef struct _SETUPDATA BOOL bUnattend; HFONT hTitleFont; + HFONT hBoldFont; HANDLE hInstallThread; HANDLE hHaltInstallEvent; diff --git a/base/setup/reactos/resource.h b/base/setup/reactos/resource.h index a54f4035f8cde..c1c47e0cda8da 100644 --- a/base/setup/reactos/resource.h +++ b/base/setup/reactos/resource.h @@ -17,6 +17,9 @@ /* Dialogs */ #define IDD_STARTPAGE 2000 #define IDC_STARTTITLE 2001 +#define IDC_WARNTEXT1 2002 // TEMPTEMP: TODO: Remove once we reach 0.5/Beta :) +#define IDC_WARNTEXT2 2003 // TEMPTEMP: TODO: Remove once we reach 0.5/Beta :) +#define IDC_WARNTEXT3 2004 // TEMPTEMP: TODO: Remove once we reach 0.5/Beta :) #define IDD_TYPEPAGE 2010 #define IDC_INSTALL 2011 From 4920e639f99a4b17ad9b97fbed799a84dcf2692b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 30 Oct 2024 12:34:46 +0100 Subject: [PATCH 087/750] [SETUP:REACTOS] Revamp the Install-type page layout (#7581) - Update the page title and subtitle. - Embolden the types of installation. - Introduce title and subtitle for the upgrade/repair page (not translated yet). --- base/setup/reactos/lang/bg-BG.rc | 15 ++++++++------- base/setup/reactos/lang/cs-CZ.rc | 15 ++++++++------- base/setup/reactos/lang/de-DE.rc | 15 ++++++++------- base/setup/reactos/lang/el-GR.rc | 15 ++++++++------- base/setup/reactos/lang/en-US.rc | 15 ++++++++------- base/setup/reactos/lang/es-ES.rc | 15 ++++++++------- base/setup/reactos/lang/et-EE.rc | 15 ++++++++------- base/setup/reactos/lang/eu-ES.rc | 15 ++++++++------- base/setup/reactos/lang/fi-FI.rc | 15 ++++++++------- base/setup/reactos/lang/fr-FR.rc | 15 ++++++++------- base/setup/reactos/lang/he-IL.rc | 15 ++++++++------- base/setup/reactos/lang/hi-IN.rc | 15 ++++++++------- base/setup/reactos/lang/hu-HU.rc | 15 ++++++++------- base/setup/reactos/lang/id-ID.rc | 15 ++++++++------- base/setup/reactos/lang/it-IT.rc | 15 ++++++++------- base/setup/reactos/lang/ja-JP.rc | 15 ++++++++------- base/setup/reactos/lang/ms-MY.rc | 15 ++++++++------- base/setup/reactos/lang/no-NO.rc | 15 ++++++++------- base/setup/reactos/lang/pl-PL.rc | 15 ++++++++------- base/setup/reactos/lang/pt-BR.rc | 15 ++++++++------- base/setup/reactos/lang/pt-PT.rc | 15 ++++++++------- base/setup/reactos/lang/ro-RO.rc | 15 ++++++++------- base/setup/reactos/lang/ru-RU.rc | 15 ++++++++------- base/setup/reactos/lang/sk-SK.rc | 15 ++++++++------- base/setup/reactos/lang/sq-AL.rc | 15 ++++++++------- base/setup/reactos/lang/tr-TR.rc | 15 ++++++++------- base/setup/reactos/lang/uk-UA.rc | 15 ++++++++------- base/setup/reactos/lang/vi-VN.rc | 15 ++++++++------- base/setup/reactos/lang/zh-CN.rc | 15 ++++++++------- base/setup/reactos/lang/zh-HK.rc | 15 ++++++++------- base/setup/reactos/lang/zh-TW.rc | 15 ++++++++------- base/setup/reactos/reactos.c | 12 ++++++++---- base/setup/reactos/resource.h | 22 ++++++++++++---------- 33 files changed, 268 insertions(+), 231 deletions(-) diff --git a/base/setup/reactos/lang/bg-BG.rc b/base/setup/reactos/lang/bg-BG.rc index ddba90c57c74d..dd3fe00e6b7ec 100644 --- a/base/setup/reactos/lang/bg-BG.rc +++ b/base/setup/reactos/lang/bg-BG.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Настройка на РеактОС" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Слагане на РеактОС", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Поправка или осъвременяване на сложен РеактОС", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Натиснете „Напред“ за настройка на устройствата.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Слагане на РеактОС", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Поправка или осъвременяване на РеактОС", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Настройка на РеактОС" - IDS_TYPETITLE "РеактОС ви приветства!" - IDS_TYPESUBTITLE "Изберете вид на настройването." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Настройване на основните устройства" IDS_DEVICESUBTITLE "Настройка на екрана и клавиатурата." IDS_DRIVETITLE "Приготвяне на дял за слагане и системна папка" diff --git a/base/setup/reactos/lang/cs-CZ.rc b/base/setup/reactos/lang/cs-CZ.rc index b96eda89b63a8..8d694465d5d7e 100644 --- a/base/setup/reactos/lang/cs-CZ.rc +++ b/base/setup/reactos/lang/cs-CZ.rc @@ -33,11 +33,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalace systému ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Nainstalovat systém ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Instalovat novou kopii systému ReactOS. Tato možnost odstraní Vaše soubory, nastavení a programy. Můžete provést úpravu disků a oddílů.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Opravit nebo aktualizovat již nainstalovaný systém ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Aktualizovat nebo opravit kopii systémy ReactOS. Tato možnost zachová Vaše soubory, nastavení a programy. Tato možnost je dostupná pouze pokud je již na Vašem počítači systém ReactOS nainstalován.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Po klepnutí na Další bude možné nastavit zařízení.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Nainstalovat systém ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Instalovat novou kopii systému ReactOS. Tato možnost odstraní Vaše soubory, nastavení a programy. Můžete provést úpravu disků a oddílů.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Opravit nebo aktualizovat ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Aktualizovat nebo opravit kopii systémy ReactOS. Tato možnost zachová Vaše soubory, nastavení a programy. Tato možnost je dostupná pouze pokud je již na Vašem počítači systém ReactOS nainstalován.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -177,8 +176,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Instalace systému ReactOS" - IDS_TYPETITLE "Vítejte v průvodci instalace systému ReactOS" - IDS_TYPESUBTITLE "Volba typu instalace." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Nastavení základních zařízení" IDS_DEVICESUBTITLE "Volba nastavení obrazovky a klávesnice." IDS_DRIVETITLE "Nastavení instalačního oddílu a systémové složky" diff --git a/base/setup/reactos/lang/de-DE.rc b/base/setup/reactos/lang/de-DE.rc index 1ec67347ae667..29f03b8a5bf81 100644 --- a/base/setup/reactos/lang/de-DE.rc +++ b/base/setup/reactos/lang/de-DE.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS-Setup" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Installiere ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Installiert eine neue Kopie von ReactOS. Diese Option behält nicht Ihre Dateien, Einstellungen und Programme bei. Sie können Änderungen an Festplatten und Partitionen durchführen.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Aktualisiere oder repariere ein installiertes ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Aktualisieren oder reparieren einer installierten Kopie von ReactOS. Diese Option behält Ihre Dateien, Einstellungen und Programme bei. Diese Option ist nur verfügbar, wenn ReactOS bereits auf diesem Computer installiert ist.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Klicken Sie auf Weiter um die Geräte einzustellen.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Installiere ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Installiert eine neue Kopie von ReactOS. Diese Option behält nicht Ihre Dateien, Einstellungen und Programme bei. Sie können Änderungen an Festplatten und Partitionen durchführen.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Aktualisiere oder repariere ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Aktualisieren oder reparieren einer installierten Kopie von ReactOS. Diese Option behält Ihre Dateien, Einstellungen und Programme bei. Diese Option ist nur verfügbar, wenn ReactOS bereits auf diesem Computer installiert ist.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Willkommen zum ReactOS-Setup" - IDS_TYPESUBTITLE "Wählen Sie einen Setuptypen." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Einstellen der Basisgeräte" IDS_DEVICESUBTITLE "Einstellungen der Anzeigegeräte und der Tastatur." IDS_DRIVETITLE "Richte Installationspartition und Systemverzeichnis ein" diff --git a/base/setup/reactos/lang/el-GR.rc b/base/setup/reactos/lang/el-GR.rc index e7153a7767216..ba7662cd40911 100644 --- a/base/setup/reactos/lang/el-GR.rc +++ b/base/setup/reactos/lang/el-GR.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Εγκατάσταση του ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Install ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Update or repair an installed ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Πατήστε Επόμενο για να ρυθμίσετε τις συσκευές.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Install ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Update or repair ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Καλώς ήλθατε στην Εγκατάσταση του ReactOS" - IDS_TYPESUBTITLE "Επιλέξτε τύπο εγκατάστασης." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Ορισμός ρυθμίσεων για εμφάνιση και πληκτρολόγιο." IDS_DRIVETITLE "Ρύθμιση του partition εγκατάστασης και του φακέλου συστήματος" diff --git a/base/setup/reactos/lang/en-US.rc b/base/setup/reactos/lang/en-US.rc index c957f5bc3b1b5..fd2f3410e0017 100644 --- a/base/setup/reactos/lang/en-US.rc +++ b/base/setup/reactos/lang/en-US.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS Setup" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Install ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Update or repair ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Click Next to continue.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Install ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Update or repair ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Welcome to ReactOS Setup" - IDS_TYPESUBTITLE "Choose setup type." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Set the settings of display and keyboard." IDS_DRIVETITLE "Setup the installation partition and system folder" diff --git a/base/setup/reactos/lang/es-ES.rc b/base/setup/reactos/lang/es-ES.rc index e17041d18947b..21cfa2cf4a64c 100644 --- a/base/setup/reactos/lang/es-ES.rc +++ b/base/setup/reactos/lang/es-ES.rc @@ -36,11 +36,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalación de ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Instalar ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Instala una nueva copia de ReactOS. Esta opción no protege sus archivos, programas y ajustes. Puede realizar cambios a su disco duro y particiones.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Actualizar o reparar una instalación existente de ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Actualiza o repara una instalación existente de ReactOS. Esta opción protege sus archivos, programas y ajustes. Esta opción sólo está disponible si ha instalado ReactOS previamente en este equipo.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Presione Siguiente para instalar los dispositivos.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Instalar ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Instala una nueva copia de ReactOS. Esta opción no protege sus archivos, programas y ajustes. Puede realizar cambios a su disco duro y particiones.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Actualizar o reparar ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Actualiza o repara una instalación existente de ReactOS. Esta opción protege sus archivos, programas y ajustes. Esta opción sólo está disponible si ha instalado ReactOS previamente en este equipo.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -180,8 +179,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Instalación de ReactOS" - IDS_TYPETITLE "Bienvenido a la instalación de ReactOS" - IDS_TYPESUBTITLE "Seleccione el tipo de instalación." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Instalación de los dispositivos básicos" IDS_DEVICESUBTITLE "Seleccione los ajustes de la pantalla y el teclado." IDS_DRIVETITLE "Crear la partición para la instalación y la carpeta del sistema" diff --git a/base/setup/reactos/lang/et-EE.rc b/base/setup/reactos/lang/et-EE.rc index 998b398aa704d..bf7da3964c8e5 100644 --- a/base/setup/reactos/lang/et-EE.rc +++ b/base/setup/reactos/lang/et-EE.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS'i paigaldamine" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Installeeri ReactOS", IDC_INSTALL, 7, 7, 277, 10 - LTEXT "Paigalda uus koopia ReactOS'ist. See valik ei jäta alles teie faile, suvandeid ja programme. Võite teha muudatusi kettastele ja partitsioonidele.", IDC_INSTALLTEXT, 18, 18, 269, 25 - AUTORADIOBUTTON "Paranda või uuenda installeeritud ReactOS'i", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Uuenda või paranda oma ReactOS'i installatsiooni. See valik säilitab teie failid, suvandid ja programmid. See valik on saadaval juhul kui ReactOS on juba paigaldatud siin arvutis.", IDC_UPDATETEXT, 18, 61, 269, 30 - LTEXT "Vajuta Järgmine, et seadmeid paigaldada.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Installeeri ReactOS", IDC_INSTALL, 7, 20, 277, 10 + LTEXT "Paigalda uus koopia ReactOS'ist. See valik ei jäta alles teie faile, suvandeid ja programme. Võite teha muudatusi kettastele ja partitsioonidele.", IDC_INSTALLTEXT, 19, 36, 279, 27 + AUTORADIOBUTTON "&Paranda või uuenda ReactOS'i", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Uuenda või paranda oma ReactOS'i installatsiooni. See valik säilitab teie failid, suvandid ja programmid. See valik on saadaval juhul kui ReactOS on juba paigaldatud siin arvutis.", IDC_UPDATETEXT, 19, 96, 279, 27 END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS'i paigaldamine" - IDS_TYPETITLE "Tere tulemast ReactOS'i paigaldama" - IDS_TYPESUBTITLE "Vali paigalduse tüüp." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Põhiliste seadmete paigaldamine" IDS_DEVICESUBTITLE "Ekraani ja klaviatuuri seadistamine." IDS_DRIVETITLE "Partitsioonide ja süsteemikausta seadistamine" diff --git a/base/setup/reactos/lang/eu-ES.rc b/base/setup/reactos/lang/eu-ES.rc index 18ae8fb314bf2..650f0bf3af27c 100644 --- a/base/setup/reactos/lang/eu-ES.rc +++ b/base/setup/reactos/lang/eu-ES.rc @@ -34,11 +34,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalación de ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Instalar ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Instala una nueva copia de ReactOS. Esta opción no protege sus archivos, programas y ajustes. Puede realizar cambios a su disco duro y particiones.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Actualizar o reparar una instalación existente de ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Actualiza o repara una instalación existente de ReactOS. Esta opción protege sus archivos, programas y ajustes. Esta opción sólo está disponible si ha instalado ReactOS previamente en este equipo.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Presione Siguiente para instalar los dispositivos.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Instalar ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Instala una nueva copia de ReactOS. Esta opción no protege sus archivos, programas y ajustes. Puede realizar cambios a su disco duro y particiones.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Actualizar o reparar ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Actualiza o repara una instalación existente de ReactOS. Esta opción protege sus archivos, programas y ajustes. Esta opción sólo está disponible si ha instalado ReactOS previamente en este equipo.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -178,8 +177,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Instalación de ReactOS" - IDS_TYPETITLE "Bienvenido a la instalación de ReactOS" - IDS_TYPESUBTITLE "Seleccione el tipo de instalación." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Instalación de los dispositivos básicos" IDS_DEVICESUBTITLE "Seleccione los ajustes de la pantalla y el teclado." IDS_DRIVETITLE "Crear la partición para la instalación y la carpeta del sistema" diff --git a/base/setup/reactos/lang/fi-FI.rc b/base/setup/reactos/lang/fi-FI.rc index aaa7e9dcc66cf..84d0a5f199a81 100644 --- a/base/setup/reactos/lang/fi-FI.rc +++ b/base/setup/reactos/lang/fi-FI.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS Setup" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Install ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Update or repair an installed ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Click Next to setup the devices.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Install ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Update or repair ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Welcome to ReactOS Setup" - IDS_TYPESUBTITLE "Choose setup type." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Set the settings of display and keyboard." IDS_DRIVETITLE "Setup the installation partition and system folder" diff --git a/base/setup/reactos/lang/fr-FR.rc b/base/setup/reactos/lang/fr-FR.rc index 060ff220b58ce..fe3fa52ea6d81 100644 --- a/base/setup/reactos/lang/fr-FR.rc +++ b/base/setup/reactos/lang/fr-FR.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Installation de ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Installer ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Installer une nouvelle copie de ReactOS. Cette option ne conservera pas vos données, paramètres et programmes. Vous pouvez effectuer des modifications sur les disques et les partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Mettre à jour ou réparer ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Mettre à jour ou réparer une copie existante de ReactOS. Cette option conserve vos données, paramètres et programmes. Cette option est seulement disponible si ReactOS est déjà installé sur cet ordinateur.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Appuyer sur Suivant pour configurer les périphériques.", IDC_STATIC, 7, 1280, 297, 8 + AUTORADIOBUTTON "&Installer ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Installe une nouvelle copie de ReactOS. Cette option ne conservera pas vos données, paramètres et programmes. Vous pouvez effectuer des modifications sur les disques et les partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Mettre à niveau ou réparer ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Met à niveau ou répare une copie existante de ReactOS. Cette option conserve vos données, paramètres et programmes. Cette option est seulement disponible si ReactOS est déjà installé sur cet ordinateur.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Installation de ReactOS" - IDS_TYPETITLE "Bienvenue dans l'installation de ReactOS" - IDS_TYPESUBTITLE "Choisissez un type d'installation." + IDS_TYPETITLE "Type d'installation" + IDS_TYPESUBTITLE "Vous pouvez configurer une nouvelle installation de ReactOS, ou bien mettre à niveau ou réparer une installation existante." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Configurer les périphériques de base" IDS_DEVICESUBTITLE "Configurer l'affichage et le clavier." IDS_DRIVETITLE "Configurer la partition d'installation et le dossier système" diff --git a/base/setup/reactos/lang/he-IL.rc b/base/setup/reactos/lang/he-IL.rc index cdda584b05db3..11465212ce5ec 100644 --- a/base/setup/reactos/lang/he-IL.rc +++ b/base/setup/reactos/lang/he-IL.rc @@ -29,11 +29,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "התקנת ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "תיקון או עדכון גרסה קיימת", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "לחץ על 'הבא' כדי להגדיר את ההתקנים.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "(&I)התקנת ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "(&U)תיקון או עדכון ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -173,8 +172,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "התקנת ReactOS" - IDS_TYPETITLE "ברוכים הבאים לתוכנית ההתקנה של ReactOS" - IDS_TYPESUBTITLE "בחירת סוג התקנה." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Set the settings of display and keyboard." IDS_DRIVETITLE "Setup the installation partition and system folder" diff --git a/base/setup/reactos/lang/hi-IN.rc b/base/setup/reactos/lang/hi-IN.rc index d21fc04ee1af5..da3381a871a94 100644 --- a/base/setup/reactos/lang/hi-IN.rc +++ b/base/setup/reactos/lang/hi-IN.rc @@ -34,11 +34,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "रिऐक्ट ओएस सेटअप" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "रिऐक्ट ओएस इंस्टॉल करें", IDC_INSTALL, 7, 7, 277, 10 - LTEXT "रिऐक्ट ओएस की एक नई कापी इन्स्टॉल करें। यह विकल्प आपकी फाइलें, सेटिंग्स और प्रोग्राम नहीं रखता है। आप डिस्क और विभाजन में परिवर्तन कर सकते हैं।", IDC_INSTALLTEXT, 18, 18, 269, 25 - AUTORADIOBUTTON "रिऐक्ट ओएस की अद्यतन या मरम्मत करे। ", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "रिऐक्ट ओएस की एक स्थापित कापी अद्यतन या मरम्मत करे। यह विकल्प आपकी फाइलें, सेटिंग्स और प्रोग्राम रखता है। यह विकल्प केवल तभी उपलब्ध होता है जब इस कंप्यूटर पर रिऐक्ट ओएस पहले से इंस्टॉल हो।", IDC_UPDATETEXT, 18, 61, 269, 30 - LTEXT "जारी रखने के लिए आगे दबाएँ।", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "रिऐक्ट ओएस इंस्टॉल करें(&I)", IDC_INSTALL, 7, 20, 277, 10 + LTEXT "रिऐक्ट ओएस की एक नई कापी इन्स्टॉल करें। यह विकल्प आपकी फाइलें, सेटिंग्स और प्रोग्राम नहीं रखता है। आप डिस्क और विभाजन में परिवर्तन कर सकते हैं।", IDC_INSTALLTEXT, 19, 36, 279, 27 + AUTORADIOBUTTON "रिऐक्ट ओएस की अद्यतन या मरम्मत करे।(&U)", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "रिऐक्ट ओएस की एक स्थापित कापी अद्यतन या मरम्मत करे। यह विकल्प आपकी फाइलें, सेटिंग्स और प्रोग्राम रखता है। यह विकल्प केवल तभी उपलब्ध होता है जब इस कंप्यूटर पर रिऐक्ट ओएस पहले से इंस्टॉल हो।", IDC_UPDATETEXT, 19, 96, 279, 27 END IDD_DEVICEPAGE DIALOGEX 0, 0, 317, 143 @@ -149,8 +148,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "रिऐक्ट ओएस सेटअप" - IDS_TYPETITLE "रिऐक्ट ओएस सेटअप में आपका स्वागत है" - IDS_TYPESUBTITLE "सेटअप प्रकार चुनें।" + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "बुनियादी डिवाइसों को सेटअप करें" IDS_DEVICESUBTITLE "डिस्प्ले और कीबोर्ड की सेटिंग्स सेट करें।" IDS_DRIVETITLE "इन्स्टलेशन विभाजन और सिस्टम फ़ोल्डर सेटअप करें" diff --git a/base/setup/reactos/lang/hu-HU.rc b/base/setup/reactos/lang/hu-HU.rc index 81033de9895dd..b2cae277c1d4a 100644 --- a/base/setup/reactos/lang/hu-HU.rc +++ b/base/setup/reactos/lang/hu-HU.rc @@ -29,11 +29,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS telepítõ" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Install ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Update or repair an installed ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Click Next to setup the devices.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Install ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Update or repair ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -173,8 +172,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Welcome to ReactOS Setup" - IDS_TYPESUBTITLE "Choose setup type." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Set the settings of display and keyboard." IDS_DRIVETITLE "Setup the installation partition and system folder" diff --git a/base/setup/reactos/lang/id-ID.rc b/base/setup/reactos/lang/id-ID.rc index a303bc8e73050..7ecd9fff4bd91 100644 --- a/base/setup/reactos/lang/id-ID.rc +++ b/base/setup/reactos/lang/id-ID.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Penyetelan ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Pasang ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Pasang instalasi ReactOS yang baru. Ini tidak akan menjaga berkas, pengaturan, dan program Anda. Anda bisa membuat perubahan pada disk dan partisi.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Perbarui atau perbaiki ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Perbarui atau perbaiki salinan terpasang dari ReactOS. Pilihan ini tetap menyimpan berkas, Pengaturan dan program. Pilihan ini hanya tersedia jika ReactOS telah terpasang di komputer ini.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Klik lanjut untuk meneruskan.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Pasang ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Pasang instalasi ReactOS yang baru. Ini tidak akan menjaga berkas, pengaturan, dan program Anda. Anda bisa membuat perubahan pada disk dan partisi.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "P&erbarui atau perbaiki ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Perbarui atau perbaiki salinan terpasang dari ReactOS. Pilihan ini tetap menyimpan berkas, Pengaturan dan program. Pilihan ini hanya tersedia jika ReactOS telah terpasang di komputer ini.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Penyetelan ReactOS" - IDS_TYPETITLE "Selamat datang di Penyetelan ReactOS" - IDS_TYPESUBTITLE "Pilih jenis penyetelan." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Menyetel perangkat dasar" IDS_DEVICESUBTITLE "Setel pengaturan tampilan dan papan ketik." IDS_DRIVETITLE "Penyetelan pemasangan partisi dan folder sistem" diff --git a/base/setup/reactos/lang/it-IT.rc b/base/setup/reactos/lang/it-IT.rc index 1ee24d21c46d4..eee40e0ce8733 100644 --- a/base/setup/reactos/lang/it-IT.rc +++ b/base/setup/reactos/lang/it-IT.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Installazione di ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Installa ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Installa una nuova coppia di ReactOS. Questo opzione non mantiene i tuoi file, le impostazioni e i programmi. E' possibile fare degli cambiamenti sul disco e partizioni.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Aggiorna o ripara una installazione precedente di ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Aggiorna o ripara una coppia già installata di ReactOS. Questo opzione mantiene i tuoi file, le impostazioni e i programmi. Questo opzione è disponibile solo se ReactOS è già installato su questo computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Cliccare Avanti per impostare i dispositivi.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Installa ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Installa una nuova coppia di ReactOS. Questo opzione non mantiene i tuoi file, le impostazioni e i programmi. E' possibile fare degli cambiamenti sul disco e partizioni.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Aggiorna o ripara ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Aggiorna o ripara una coppia già installata di ReactOS. Questo opzione mantiene i tuoi file, le impostazioni e i programmi. Questo opzione è disponibile solo se ReactOS è già installato su questo computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Installazione di ReactOS" - IDS_TYPETITLE "Benvenuti nell'installazione di ReactOS" - IDS_TYPESUBTITLE "Scegliere il tipo di installazione." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Impostazione dei dispositivi di base" IDS_DEVICESUBTITLE "Impostazione di monitor e tastiera." IDS_DRIVETITLE "Impostazione della partizione e della cartella per la installazione" diff --git a/base/setup/reactos/lang/ja-JP.rc b/base/setup/reactos/lang/ja-JP.rc index 31c258c54340e..94d413b85f375 100644 --- a/base/setup/reactos/lang/ja-JP.rc +++ b/base/setup/reactos/lang/ja-JP.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS セットアップ" FONT 9, "MS UI Gothic" BEGIN - AUTORADIOBUTTON "ReactOSをインストールする", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "ReactOSを新しくインストールします。このオプションは、あなたのファイル、設定、プログラムを維持しません。あなたはディスクとパーティションに変更を加えることができます。", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "ReactOSを更新または修正する", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "インストールされたReactOSを更新または修正します。このオプションはあなたのファイル、設定、プログラムを保持します。このオプションは、このコンピュータですでにReactOSがインストール済みのときのみ利用できます。", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "次へをクリックすると続行します。", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "ReactOSをインストールする(&I)", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "ReactOSを新しくインストールします。このオプションは、あなたのファイル、設定、プログラムを維持しません。あなたはディスクとパーティションに変更を加えることができます。", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "ReactOSを更新または修正する(&U)", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "インストールされたReactOSを更新または修正します。このオプションはあなたのファイル、設定、プログラムを保持します。このオプションは、このコンピュータですでにReactOSがインストール済みのときのみ利用できます。", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS セットアップ" - IDS_TYPETITLE "ReactOS セットアップにようこそ" - IDS_TYPESUBTITLE "セットアップの種類を選んで下さい。" + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "基本デバイスをセットアップします" IDS_DEVICESUBTITLE "ディスプレイとキーボードの設定をします。" IDS_DRIVETITLE "インストール先パーティションとシステムフォルダをセットアップします" diff --git a/base/setup/reactos/lang/ms-MY.rc b/base/setup/reactos/lang/ms-MY.rc index 3d429a596e5c6..e470da49894a9 100644 --- a/base/setup/reactos/lang/ms-MY.rc +++ b/base/setup/reactos/lang/ms-MY.rc @@ -29,11 +29,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS Persediaan" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Pasang ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Membaiki atau mengemaskini ReactOS yang dipasang", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Klik Seterusnya untuk memasang peranti.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Pasang ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Membaiki atau mengemaskini ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -173,8 +172,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Persediaan" - IDS_TYPETITLE "Selamat datang ke persediaan ReactOS" - IDS_TYPESUBTITLE "Pilih jenis persediaan." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Sediakan peranti asas" IDS_DEVICESUBTITLE "Setkan seting paparan dan papan kekunci." IDS_DRIVETITLE "Sediakan folder pemasangan partition dan sistem" diff --git a/base/setup/reactos/lang/no-NO.rc b/base/setup/reactos/lang/no-NO.rc index 5352bc37d9aab..d3c897a8ef69e 100644 --- a/base/setup/reactos/lang/no-NO.rc +++ b/base/setup/reactos/lang/no-NO.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS installering" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Installere ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Reparere eller oppdatere en installert ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Trykk på Neste for installere enhetene.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Installere ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Reparere eller oppdatere ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS installering" - IDS_TYPETITLE "Velkommen til ReactOS installering" - IDS_TYPESUBTITLE "Velg installering type." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Installer grunnleggende enheter" IDS_DEVICESUBTITLE "Velg innstillingene til skjermen og tastaturet." IDS_DRIVETITLE "Valg av installasjon partisjon og system mappe" diff --git a/base/setup/reactos/lang/pl-PL.rc b/base/setup/reactos/lang/pl-PL.rc index 463883adbf72b..ea6d6591d9b4c 100644 --- a/base/setup/reactos/lang/pl-PL.rc +++ b/base/setup/reactos/lang/pl-PL.rc @@ -38,11 +38,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalator systemu ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Zainstaluj system ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Zainstaluj nową kopię systemu ReactOS. Ta opcja nie zachowa plików, ustawień i programów. Możesz dokonać zmian w dyskach i partycjach.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Napraw lub uaktualnij istniejącą instalację systemu ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Napraw istniejącą instalację lub wykonaj uaktualnienie do nowszej wersji systemu ReactOS. Ta opcja zachowa pliki, ustawienia i programy. Jest dostępna, jeżeli system ReactOS znajduje się już na tym komputerze.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Kliknij Dalej, aby zmienić ustawienia sprzętu.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Zainstaluj system ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Zainstaluj nową kopię systemu ReactOS. Ta opcja nie zachowa plików, ustawień i programów. Możesz dokonać zmian w dyskach i partycjach.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Napraw lub uaktualnij ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Napraw istniejącą instalację lub wykonaj uaktualnienie do nowszej wersji systemu ReactOS. Ta opcja zachowa pliki, ustawienia i programy. Jest dostępna, jeżeli system ReactOS znajduje się już na tym komputerze.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -182,8 +181,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Instalator systemu ReactOS" - IDS_TYPETITLE "Witamy w Kreatorze instalacji systemu ReactOS" - IDS_TYPESUBTITLE "Wybierz typ instalacji." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Ustawienia podstawowych urządzeń" IDS_DEVICESUBTITLE "Zmień ustawienia monitora i klawiatury." IDS_DRIVETITLE "Ustaw partycję instalacji i katalog systemowy" diff --git a/base/setup/reactos/lang/pt-BR.rc b/base/setup/reactos/lang/pt-BR.rc index 75ad92346b082..47ed4e83fd769 100644 --- a/base/setup/reactos/lang/pt-BR.rc +++ b/base/setup/reactos/lang/pt-BR.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalação do ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Instalar ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Reparar ou atualizar uma instalação do ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Clique em Próximo para configurar os dispositivos.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Instalar ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Reparar ou atualizar ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Instalação do ReactOS" - IDS_TYPETITLE "Bem-vindo(a) a Instalação do ReactOS" - IDS_TYPESUBTITLE "Escolha o modo de instalação." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Instalar dispositivos básicos" IDS_DEVICESUBTITLE "Definir as configurações de monitor e teclado." IDS_DRIVETITLE "Configurar a partição de instalação e pasta do sistema" diff --git a/base/setup/reactos/lang/pt-PT.rc b/base/setup/reactos/lang/pt-PT.rc index 60ebe7fbdc71f..9ada098735feb 100644 --- a/base/setup/reactos/lang/pt-PT.rc +++ b/base/setup/reactos/lang/pt-PT.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalação do ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Instalar ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Instalar uma nova cópia do ReactOS. Esta opção não preserva os ficheiros, definições ou programas existentes. Pode fazer alterações nos discos ou partições.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Reparar ou actualizar uma instalação do ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Reparar ou actualizar uma instalação do ReactOS. Esta opção preserva os ficheiros, definições e programas existentes. Esta opção só está disponivel se o ReactOS já está instalado neste computador.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Clique em Próximo para configurar os dispositivos.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Instalar ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Instalar uma nova cópia do ReactOS. Esta opção não preserva os ficheiros, definições ou programas existentes. Pode fazer alterações nos discos ou partições.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Reparar ou actualizar ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Reparar ou actualizar uma instalação do ReactOS. Esta opção preserva os ficheiros, definições e programas existentes. Esta opção só está disponivel se o ReactOS já está instalado neste computador.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Instalação do ReactOS" - IDS_TYPETITLE "Bem-vindo(a) a Instalação do ReactOS" - IDS_TYPESUBTITLE "Escolha o modo de instalação." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Instalar dispositivos básicos" IDS_DEVICESUBTITLE "Definir as configurações de monitor e teclado." IDS_DRIVETITLE "Configurar a partição de instalação e pasta do sistema" diff --git a/base/setup/reactos/lang/ro-RO.rc b/base/setup/reactos/lang/ro-RO.rc index 91dabc7e62cb4..a23fc0a3a797e 100644 --- a/base/setup/reactos/lang/ro-RO.rc +++ b/base/setup/reactos/lang/ro-RO.rc @@ -36,11 +36,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Expert de instalare ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Instalează ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Instalarea unei noi copii a ReactOS. Fișierele, configurațiile și programele existente nu vor fi păstrate. Sunt posibile ajustări asupra discurilor și partițiilor.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Repară sau actualizează ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Repararea sau actualizarea ReactOS. Această opțiune menține fișierele, configurațiile și programele existente. Opțiune validă doar dacă ReactOS e deja instalat în calculator.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Apăsați pe Înainte pentru configurarea de dispozitive.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Instalează ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Instalarea unei noi copii a ReactOS. Fișierele, configurațiile și programele existente nu vor fi păstrate. Sunt posibile ajustări asupra discurilor și partițiilor.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Repară sau actualizează ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Repararea sau actualizarea ReactOS. Această opțiune menține fișierele, configurațiile și programele existente. Opțiune validă doar dacă ReactOS e deja instalat în calculator.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -180,8 +179,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Expertul de instalare ReactOS" - IDS_TYPETITLE "Bun venit la instalarea ReactOS" - IDS_TYPESUBTITLE "Alegeți tipul de instalare." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Instalare dispozitive de bază" IDS_DEVICESUBTITLE "Stabilirea parametrilor de afișare și tastatură." IDS_DRIVETITLE "Stabilirea destinației" diff --git a/base/setup/reactos/lang/ru-RU.rc b/base/setup/reactos/lang/ru-RU.rc index 3946f120c7cc0..def56ff609d24 100644 --- a/base/setup/reactos/lang/ru-RU.rc +++ b/base/setup/reactos/lang/ru-RU.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Установка ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Установка ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Установить новую копию системы ReactOS. Эта опция НЕ сохраняет файлы, настройки и программы. Вы можете изменять диски и разделы.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Восстановить или изменить установленный ранее ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Обновить или восстановить установленную копию системы ReactOS. Эта опция СОХРАНЯЕТ файлы, настройки и программы. Доступно только при наличии уже установленной на компьютере системы ReactOS.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Для установки устройств нажмите ""Далее"".", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Установка ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Установить новую копию системы ReactOS. Эта опция НЕ сохраняет файлы, настройки и программы. Вы можете изменять диски и разделы.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Восстановить или изменить ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Обновить или восстановить установленную копию системы ReactOS. Эта опция СОХРАНЯЕТ файлы, настройки и программы. Доступно только при наличии уже установленной на компьютере системы ReactOS.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Установка ReactOS" - IDS_TYPETITLE "Вас приветствует программа установки ReactOS" - IDS_TYPESUBTITLE "Выберите тип установки." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Установка базовых устройств" IDS_DEVICESUBTITLE "Настройка параметров экрана и клавиатуры." IDS_DRIVETITLE "Выбор расположения на диске и системного каталога" diff --git a/base/setup/reactos/lang/sk-SK.rc b/base/setup/reactos/lang/sk-SK.rc index 77077aaf141e0..17364520feed9 100644 --- a/base/setup/reactos/lang/sk-SK.rc +++ b/base/setup/reactos/lang/sk-SK.rc @@ -32,11 +32,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Inštalácia systému ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Nainštalovať systém ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Opraviť alebo aktualizovať nainštalovaný systém ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Click Next to setup the devices.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Nainštalovať systém ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Opraviť alebo aktualizovať systém ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -176,8 +175,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Víta Vás inštalátor systému ReactOS" //Welcome to ReactOS Setup - IDS_TYPESUBTITLE "Choose setup type." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Set the settings of display and keyboard." IDS_DRIVETITLE "Setup the installation partition and system folder" diff --git a/base/setup/reactos/lang/sq-AL.rc b/base/setup/reactos/lang/sq-AL.rc index df2c106654e2e..d95ccc4a9cd0f 100644 --- a/base/setup/reactos/lang/sq-AL.rc +++ b/base/setup/reactos/lang/sq-AL.rc @@ -29,11 +29,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Instalimi i ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "InstalO ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Riparo ose apdejto ReactOS'in e instaluar", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Kliko vazhdo për të konfiguruar pajisjet.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Instalo ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "&Riparo ose apdejto ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -173,8 +172,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Setup" - IDS_TYPETITLE "Mirë se vini në instalimin e ReactOS" - IDS_TYPESUBTITLE "Zgjidhni llojin e instalimit." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Instaloni pajisjet themelore" IDS_DEVICESUBTITLE "Vendos parametrat e ekranit dhe tastieres." IDS_DRIVETITLE "Konfiguro particionet për instalim dhe dosjet e sistemit" diff --git a/base/setup/reactos/lang/tr-TR.rc b/base/setup/reactos/lang/tr-TR.rc index af9ee0579e2b9..797e0dae23a28 100644 --- a/base/setup/reactos/lang/tr-TR.rc +++ b/base/setup/reactos/lang/tr-TR.rc @@ -34,11 +34,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS Kur" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "ReactOS'u Yükleme", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "ReactOS'un yeni bir kopyasını yükle. Bu seçenek, dosyalarınızı, ayarlarınızı ve programlarınızı korumaz. Disklere ve bölümlere değişiklikler yapabilirsiniz.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Kurulu ReactOS'u Onarma ya da Yükseltme", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Kurulu olan ReactOS'un günceller ya da onarır. Bu seçenek, dosyalarınızı, ayarlarınızı ve programlarınızı korur. Bu seçenek yalnızca ReactOS bu bilgisayarda önceden kuruluysa kullanılabilir.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Aygıtları kurmak için İleri'ye tıklayınız.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "ReactOS'u &Yükleme", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "ReactOS'un yeni bir kopyasını yükle. Bu seçenek, dosyalarınızı, ayarlarınızı ve programlarınızı korumaz. Disklere ve bölümlere değişiklikler yapabilirsiniz.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "ReactOS'u &Onarma ya da Yükseltme", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Kurulu olan ReactOS'un günceller ya da onarır. Bu seçenek, dosyalarınızı, ayarlarınızı ve programlarınızı korur. Bu seçenek yalnızca ReactOS bu bilgisayarda önceden kuruluysa kullanılabilir.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -178,8 +177,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS Kur" - IDS_TYPETITLE "ReactOS Kurulum Yöneticisine Hoş Geldiniz" - IDS_TYPESUBTITLE "Kurulum türünü seçiniz." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Ana Aygıtların Kurulumu" IDS_DEVICESUBTITLE "Ekran ve Klavye ayarlarını yapınız." IDS_DRIVETITLE "Kurulum Bölümünün ve Sistem Dizininin Hazırlanması" diff --git a/base/setup/reactos/lang/uk-UA.rc b/base/setup/reactos/lang/uk-UA.rc index a83ada50ccafd..8fe8483a95b41 100644 --- a/base/setup/reactos/lang/uk-UA.rc +++ b/base/setup/reactos/lang/uk-UA.rc @@ -35,11 +35,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Встановлення ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Встановлення ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Відновити або змінити встановлений раніше ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Для встановлення пристроїв натисніть Далі.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Встановлення ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Install a new copy of ReactOS. This option does not keep your files, settings and programs. You can make changes to disks and partitions.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "В&ідновити або змінити ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Update or repair an installed copy of ReactOS. This option keeps your files, settings and programs. This option is only available if ReactOS is already installed on this computer.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -179,8 +178,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Встановлення ReactOS" - IDS_TYPETITLE "Вас вітає програма встановлення ReactOS" - IDS_TYPESUBTITLE "Виберіть тип встановлення." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Встановлення базових пристроїв" IDS_DEVICESUBTITLE "Налаштування параметрів екрану та клавіатури." IDS_DRIVETITLE "Вибір розташування на диску і системного каталогу" diff --git a/base/setup/reactos/lang/vi-VN.rc b/base/setup/reactos/lang/vi-VN.rc index 3d007b3447f65..301192db9220d 100644 --- a/base/setup/reactos/lang/vi-VN.rc +++ b/base/setup/reactos/lang/vi-VN.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Cài đặt ReactOS" FONT 8, "MS Shell Dlg" BEGIN - AUTORADIOBUTTON "Cài đặt ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "Cài đặt một bản sao mới của ReactOS. Tùy chọn này sẽ không giữ lại các thư mục,tập tin và chương trình của bạn. Bạn có thể thực hiện những thay đổi cho các ổ đĩa và những phần phân chia trong ổ đĩa.", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "Cập nhật hay sửa chữa ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "Cập nhật hay sửa chữa một bản sao đã cài đặt của ReactOS. Tùy chọn này sẽ giữ lại các tập tin, cài đặt và chương trình của bạn. Tùy chọn này chỉ dùng được nếu ReactOS đã được cài đặt trên máy tinh này.", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "Ấn Tiếp để tiếp tục.", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "&Cài đặt ReactOS", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "Cài đặt một bản sao mới của ReactOS. Tùy chọn này sẽ không giữ lại các thư mục,tập tin và chương trình của bạn. Bạn có thể thực hiện những thay đổi cho các ổ đĩa và những phần phân chia trong ổ đĩa.", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "Cập &nhật hay sửa chữa ReactOS", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "Cập nhật hay sửa chữa một bản sao đã cài đặt của ReactOS. Tùy chọn này sẽ giữ lại các tập tin, cài đặt và chương trình của bạn. Tùy chọn này chỉ dùng được nếu ReactOS đã được cài đặt trên máy tinh này.", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "Cài đặt ReactOS" - IDS_TYPETITLE "Chào mừng tới trình Thiết lập ReactOS" - IDS_TYPESUBTITLE "Chọn kiểu thiết lập." + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "Thiết lập các thiết bị cơ bản" IDS_DEVICESUBTITLE "Chọn những cài đặt cho màn hình và bàn phím." IDS_DRIVETITLE "Thiết lập phần ổ cứng để cài đặt và thư mục hệ thống" diff --git a/base/setup/reactos/lang/zh-CN.rc b/base/setup/reactos/lang/zh-CN.rc index 7b7f56da4231c..98439dad03446 100644 --- a/base/setup/reactos/lang/zh-CN.rc +++ b/base/setup/reactos/lang/zh-CN.rc @@ -27,11 +27,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS 安装程序" FONT 9, "宋体" BEGIN - AUTORADIOBUTTON "安装 ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "安装 ReactOS 的新副本。此选项将不会保存你的文件、设置和程序。你可以对磁盘和分区进行更改。", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "修复或更新已安装的 ReactOS 副本", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "更新或修复 ReactOS 安装的副本。此选项会保存您的文件、设置和程序。如果 ReactOS 已经安装,此选项方可使用。", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "点击下一步安装设备。", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "安装 ReactOS(&I)", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "安装 ReactOS 的新副本。此选项将不会保存你的文件、设置和程序。你可以对磁盘和分区进行更改。", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "修复或更新 ReactOS(&U)", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "更新或修复 ReactOS 安装的副本。此选项会保存您的文件、设置和程序。如果 ReactOS 已经安装,此选项方可使用。", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -171,8 +170,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS 安装程序" - IDS_TYPETITLE "ReactOS 安装程序" - IDS_TYPESUBTITLE "选择安装类型。" + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "设置基本设备" IDS_DEVICESUBTITLE "指定显示和键盘设置。" IDS_DRIVETITLE "设置安装分区和系统文件夹" diff --git a/base/setup/reactos/lang/zh-HK.rc b/base/setup/reactos/lang/zh-HK.rc index bc93f406c7438..6f94145c9078b 100644 --- a/base/setup/reactos/lang/zh-HK.rc +++ b/base/setup/reactos/lang/zh-HK.rc @@ -35,11 +35,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS 安裝程式" FONT 9, "新細明體" BEGIN - AUTORADIOBUTTON "安裝 ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "安裝 ReactOS 的新副本。這個選項不會儲存您的檔案、設定和程式。您可以對磁碟和磁碟區進行更改。", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "修復或更新已安裝的 ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "更新或修復已安裝的 ReactOS 副本。這個選項會儲存您的檔案、設定及程式。只有在 ReactOS 已經安裝在此電腦時才可使用這個選項。", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "按[下一步]繼續安裝。", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "安裝 ReactOS(&I)", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "安裝 ReactOS 的新副本。這個選項不會儲存您的檔案、設定和程式。您可以對磁碟和磁碟區進行更改。", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "修復或更新 ReactOS(&U)", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "更新或修復已安裝的 ReactOS 副本。這個選項會儲存您的檔案、設定及程式。只有在 ReactOS 已經安裝在此電腦時才可使用這個選項。", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -179,8 +178,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS 安裝程式" - IDS_TYPETITLE "ReactOS 安裝程式" - IDS_TYPESUBTITLE "選擇安裝類型。" + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "設定基本裝置" IDS_DEVICESUBTITLE "指定顯示和鍵盤設定。" IDS_DRIVETITLE "設定安裝磁碟區和系統資料夾" diff --git a/base/setup/reactos/lang/zh-TW.rc b/base/setup/reactos/lang/zh-TW.rc index 704248d5c3913..7eda19e8506e5 100644 --- a/base/setup/reactos/lang/zh-TW.rc +++ b/base/setup/reactos/lang/zh-TW.rc @@ -36,11 +36,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "ReactOS 安裝程式" FONT 9, "新細明體" BEGIN - AUTORADIOBUTTON "安裝 ReactOS", IDC_INSTALL, 7, 7, 277, 10, WS_GROUP | WS_TABSTOP - LTEXT "安裝 ReactOS 的新副本。此選項不會儲存您的檔案、設定和程式。您可以對磁碟和磁碟區進行更改。", IDC_INSTALLTEXT, 18, 18, 269, 25, NOT WS_GROUP - AUTORADIOBUTTON "修復或更新已安裝的 ReactOS", IDC_UPDATE, 7, 50, 277, 10 - LTEXT "更新或修復已安裝的 ReactOS 副本。此選項會儲存您的檔案、設定和程式。只有在 ReactOS 已經安裝在此電腦時才能使用此選項。", IDC_UPDATETEXT, 18, 61, 269, 30, NOT WS_GROUP - LTEXT "按[下一步]繼續安裝。", IDC_STATIC, 7, 128, 297, 8 + AUTORADIOBUTTON "安裝 ReactOS(&I)", IDC_INSTALL, 7, 20, 277, 10, WS_GROUP | WS_TABSTOP + LTEXT "安裝 ReactOS 的新副本。此選項不會儲存您的檔案、設定和程式。您可以對磁碟和磁碟區進行更改。", IDC_INSTALLTEXT, 19, 36, 279, 27, NOT WS_GROUP + AUTORADIOBUTTON "修復或更新 ReactOS(&U)", IDC_UPDATE, 7, 80, 277, 10 + LTEXT "更新或修復已安裝的 ReactOS 副本。此選項會儲存您的檔案、設定和程式。只有在 ReactOS 已經安裝在此電腦時才能使用此選項。", IDC_UPDATETEXT, 19, 96, 279, 27, NOT WS_GROUP END IDD_UPDATEREPAIRPAGE DIALOGEX 0, 0, 317, 143 @@ -180,8 +179,10 @@ END STRINGTABLE BEGIN IDS_CAPTION "ReactOS 安裝程式" - IDS_TYPETITLE "ReactOS 安裝程式" - IDS_TYPESUBTITLE "選擇安裝類型。" + IDS_TYPETITLE "Installation Type" + IDS_TYPESUBTITLE "You can setup a new ReactOS installation, or update/repair an existing installation." + IDS_UPDATETITLE "Update or Repair ReactOS" + IDS_UPDATESUBTITLE "Choose which existing ReactOS installation you want to update or repair." IDS_DEVICETITLE "設定基本裝置" IDS_DEVICESUBTITLE "指定顯示和鍵盤設定。" IDS_DRIVETITLE "設定安裝磁碟區和系統資料夾" diff --git a/base/setup/reactos/reactos.c b/base/setup/reactos/reactos.c index 64f864d4dfa35..35a68250ff682 100644 --- a/base/setup/reactos/reactos.c +++ b/base/setup/reactos/reactos.c @@ -398,11 +398,15 @@ TypeDlgProc( pSetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLongPtrW(hwndDlg, GWLP_USERDATA, (DWORD_PTR)pSetupData); - /* Check the 'install' radio button */ + /* Set the options in bold */ + SetDlgItemFont(hwndDlg, IDC_INSTALL, pSetupData->hBoldFont, TRUE); + SetDlgItemFont(hwndDlg, IDC_UPDATE, pSetupData->hBoldFont, TRUE); + + /* Check the "Install" radio button */ CheckDlgButton(hwndDlg, IDC_INSTALL, BST_CHECKED); /* - * Enable the 'update' radio button and text only if we have + * Enable the "Update" radio button and text only if we have * available NT installations, otherwise disable them. */ if (pSetupData->NtOsInstallsList && @@ -2926,8 +2930,8 @@ _tWinMain(HINSTANCE hInst, /* Create the upgrade/repair selection page */ psp.dwSize = sizeof(PROPSHEETPAGE); psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; - psp.pszHeaderTitle = MAKEINTRESOURCEW(IDS_TYPETITLE); - psp.pszHeaderSubTitle = MAKEINTRESOURCEW(IDS_TYPESUBTITLE); + psp.pszHeaderTitle = MAKEINTRESOURCEW(IDS_UPDATETITLE); + psp.pszHeaderSubTitle = MAKEINTRESOURCEW(IDS_UPDATESUBTITLE); psp.hInstance = hInst; psp.lParam = (LPARAM)&SetupData; psp.pfnDlgProc = UpgradeRepairDlgProc; diff --git a/base/setup/reactos/resource.h b/base/setup/reactos/resource.h index c1c47e0cda8da..e0420cafa63df 100644 --- a/base/setup/reactos/resource.h +++ b/base/setup/reactos/resource.h @@ -86,16 +86,18 @@ #define IDS_CAPTION 5000 #define IDS_TYPETITLE 5001 #define IDS_TYPESUBTITLE 5002 -#define IDS_DEVICETITLE 5003 -#define IDS_DEVICESUBTITLE 5004 -#define IDS_DRIVETITLE 5005 -#define IDS_DRIVESUBTITLE 5006 -#define IDS_SUMMARYTITLE 5007 -#define IDS_SUMMARYSUBTITLE 5008 -#define IDS_PROCESSTITLE 5009 -#define IDS_PROCESSSUBTITLE 5010 -#define IDS_RESTARTTITLE 5011 -#define IDS_RESTARTSUBTITLE 5012 +#define IDS_UPDATETITLE 5003 +#define IDS_UPDATESUBTITLE 5004 +#define IDS_DEVICETITLE 5005 +#define IDS_DEVICESUBTITLE 5006 +#define IDS_DRIVETITLE 5007 +#define IDS_DRIVESUBTITLE 5008 +#define IDS_SUMMARYTITLE 5009 +#define IDS_SUMMARYSUBTITLE 5010 +#define IDS_PROCESSTITLE 5011 +#define IDS_PROCESSSUBTITLE 5012 +#define IDS_RESTARTTITLE 5013 +#define IDS_RESTARTSUBTITLE 5014 #define IDS_ABORTSETUP 5020 #define IDS_ABORTSETUP2 5021 #define IDS_NO_TXTSETUP_SIF 5022 From ebdb7b3e4d423cd949fb054f9ae8abe7f99ddbd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 1 Jan 2025 00:00:00 +0100 Subject: [PATCH 088/750] A problem has been detected and ReactOS has been shut down to prevent damage to your time machine warp core. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UNEXPECTED_NEW_YEAR_TIMESLIP If this is the first time you have seen this Stop error screen, restart your time machine. If this screen appears again, follow these steps: Check to make sure you wish the ReactOS Community a 🎊 🍾 🥳 *:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:* 🎆 ⚛️ ☢️ █ █ █▀█ █▀█ █▀█ █ █ ██████╗ ██████╗ ██████╗ ███████╗ ██╗ █▀█ █▀█ █▀▀ █▀▀ ▀█▀ ╚════██╗██╔═████╗╚════██╗██╔════╝ ██║ ▀ ▀ ▀ ▀ ▀ ▀ ▀ █████╔╝██║██╔██║ █████╔╝╚█████╗ ██║ █▄ █ █▀▀ █ █ █ █ █ █▀▀ █▀█ █▀█ ██╔═══╝ ████╔╝██║██╔═══╝ ╚═══██╗ ╚═╝ █▀██ █▀▀ █ █ █ ▀█▀ █▀▀ █▀█ ██▀ ███████╗╚██████╔╝███████╗██████╔╝ ██╗ ▀ ▀ ▀▀▀ ▀▀▀ ▀ ▀▀▀ ▀ ▀ ▀ ▀ ╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝ 🎆 ⚛️ ☢️ *:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:* 🎊 🍾 🥳 Also, ensure you use the latest nightly ReactOS version and run it attached to a debugger. If problems continue, Keep Calm And Carry On Developing. Test your code more thoroughly, use a sane compiler and debugger, or ask any questions on ReactOS' official Mattermost channel. Technical information: *** STOP: 0x42000042 (0x67747770,0x000007E9,0x00000001,0x00000001) *** jira.reactos.org - Address chat.reactos.org Base at reactos.org *** github.com/reactos - Address git.reactos.org Base at reactos.org --- dll/win32/msgina/resources/reactos.bmp | Bin 89334 -> 89334 bytes dll/win32/msgina/resources/svg/reactos.svg | 2 +- dll/win32/shell32/res/bitmaps/reactos.bmp | Bin 89334 -> 89334 bytes dll/win32/syssetup/resources/reactos.bmp | Bin 89334 -> 89334 bytes ntoskrnl/inbv/resources/copyright.bmp | Bin 1840 -> 1846 bytes sdk/include/reactos/version.cmake | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dll/win32/msgina/resources/reactos.bmp b/dll/win32/msgina/resources/reactos.bmp index 2ec7eeb1772f6565b836d5f332b2c31fdd785a16..ef1fc5765c85842168c177da02d86ac2f4d6e750 100644 GIT binary patch delta 142 zcmV;90CE5JxdryQ1+cah48pdkgL`q6jDga{wzI+%%mfU{y{*2pq?e9^YGhoqniuH@TfF&~4p8LIg+oBJck}Wc>lZg)GTeU2kWob&00&x15&!@I diff --git a/dll/win32/msgina/resources/svg/reactos.svg b/dll/win32/msgina/resources/svg/reactos.svg index 3daa8299cd4a4..5c9d24de58650 100644 --- a/dll/win32/msgina/resources/svg/reactos.svg +++ b/dll/win32/msgina/resources/svg/reactos.svg @@ -1928,7 +1928,7 @@ x="5.59375" y="1047.7255" style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#1e2122;fill-opacity:1;font-family:Lucida Sans Unicode;-inkscape-font-specification:Lucida Sans Unicode" - id="tspan3618">Copyright © 1996-2024 ReactOS Team & Contributors + id="tspan3618">Copyright © 1996-2025 ReactOS Team & Contributors diff --git a/dll/win32/shell32/res/bitmaps/reactos.bmp b/dll/win32/shell32/res/bitmaps/reactos.bmp index 2ec7eeb1772f6565b836d5f332b2c31fdd785a16..ef1fc5765c85842168c177da02d86ac2f4d6e750 100644 GIT binary patch delta 142 zcmV;90CE5JxdryQ1+cah48pdkgL`q6jDga{wzI+%%mfU{y{*2pq?e9^YGhoqniuH@TfF&~4p8LIg+oBJck}Wc>lZg)GTeU2kWob&00&x15&!@I diff --git a/dll/win32/syssetup/resources/reactos.bmp b/dll/win32/syssetup/resources/reactos.bmp index 2ec7eeb1772f6565b836d5f332b2c31fdd785a16..ef1fc5765c85842168c177da02d86ac2f4d6e750 100644 GIT binary patch delta 142 zcmV;90CE5JxdryQ1+cah48pdkgL`q6jDga{wzI+%%mfU{y{*2pq?e9^YGhoqniuH@TfF&~4p8LIg+oBJck}Wc>lZg)GTeU2kWob&00&x15&!@I diff --git a/ntoskrnl/inbv/resources/copyright.bmp b/ntoskrnl/inbv/resources/copyright.bmp index 8ed8975abfca59f6d3f4badc58e6dbbeda334bb9..5f96f94411ba54f728df89acb372b59dc8546d5e 100644 GIT binary patch delta 188 zcmdnMw~bHP$=8gX0SwB3qy`Z01Y#*5W@KPtU;@$yHY#VburY9aVE_Ml@+6iBRtA=M z1J%iISwev<=>*luuB>jt5+4{iCop_uU}2%&b5o zT-gHH*gmixV9=aAn@vwZh9^PtL0&>$0*GckpgH+Ao0*~%+xtHXZ10~jfM}pK|Cth0 Pfle`EVEWJsq!}0ikkT(p delta 182 zcmdnSw}DUD$=86L0SwB3qy`Z01Y#*5W@KPtU;@&+HY#VburYlA^7toDVu@g8;#Z&i zo+T7ad$PI-%Y0zqoWSsrfe}o{v;1fJFnJNHF9%nSfNlamgZkv3tp3a_kNGEivjwnm zd|-&nSD(C)O;1RUCqeQ-UP4|1h-P5_4^(-d%}ic`?foAGw)f8%Ks3 Date: Wed, 1 Jan 2025 12:53:08 +0100 Subject: [PATCH 089/750] [NETAPI32] Update outdated Annotations --- dll/win32/netapi32/obsolete.c | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/dll/win32/netapi32/obsolete.c b/dll/win32/netapi32/obsolete.c index 42b4440ca1d5e..78f1eea71ca05 100644 --- a/dll/win32/netapi32/obsolete.c +++ b/dll/win32/netapi32/obsolete.c @@ -145,7 +145,7 @@ NetErrorLogRead( _In_opt_ LPDWORD Reserved2, _In_ DWORD Reserved3, _In_ DWORD OffsetFlag, - _Deref_out_ LPBYTE *BufPtr, + _Outptr_ LPBYTE *BufPtr, _In_ DWORD PrefMaxSize, _Out_ LPDWORD BytesRead, _Out_ LPDWORD TotalAvailable) @@ -409,11 +409,11 @@ NetReplSetInfo( NET_API_STATUS WINAPI NetServiceControl( - __in_opt LPCWSTR servername, - __in LPCWSTR service, - __in DWORD opcode, - __in DWORD arg, - __deref_out LPBYTE *bufptr) + _In_opt_ LPCWSTR servername, + _In_ LPCWSTR service, + _In_ DWORD opcode, + _In_ DWORD arg, + _Outptr_ LPBYTE *bufptr) { return ERROR_NOT_SUPPORTED; } @@ -422,13 +422,13 @@ NetServiceControl( NET_API_STATUS WINAPI NetServiceEnum( - __in_opt LPCWSTR servername, - __in DWORD level, - __deref_out LPBYTE *bufptr, - __in DWORD prefmaxlen, - __out LPDWORD entriesread, - __out LPDWORD totalentries, - __inout_opt LPDWORD resume_handle) + _In_opt_ LPCWSTR servername, + _In_ DWORD level, + _Outptr_ LPBYTE *bufptr, + _In_ DWORD prefmaxlen, + _Out_ LPDWORD entriesread, + _Out_ LPDWORD totalentries, + _Inout_opt_ LPDWORD resume_handle) { return ERROR_NOT_SUPPORTED; } @@ -437,10 +437,10 @@ NetServiceEnum( NET_API_STATUS WINAPI NetServiceGetInfo( - __in_opt LPCWSTR servername, - __in LPCWSTR service, - __in DWORD level, - __deref_out LPBYTE *bufptr) + _In_opt_ LPCWSTR servername, + _In_ LPCWSTR service, + _In_ DWORD level, + _Outptr_ LPBYTE *bufptr) { return ERROR_NOT_SUPPORTED; } @@ -449,11 +449,11 @@ NetServiceGetInfo( NET_API_STATUS WINAPI NetServiceInstall( - __in_opt LPCWSTR servername, - __in LPCWSTR service, - __in DWORD argc, - __in_ecount(argc) LPCWSTR argv[], - __deref_out LPBYTE *bufptr) + _In_opt_ LPCWSTR servername, + _In_ LPCWSTR service, + _In_ DWORD argc, + _In_reads_(argc) LPCWSTR argv[], + _Outptr_ LPBYTE *bufptr) { return ERROR_NOT_SUPPORTED; } From 205eadcb84ce04acd23e8920c7313d55fee28fee Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Wed, 1 Jan 2025 19:52:20 +0700 Subject: [PATCH 090/750] [NTOS:PS] Fix returned flags for QUOTA_LIMITS_EX query (#7589) Use the information from EPROCESS::Vm. Addendum to commit 1e06829961cb597f7e1927a5e35b66febe674a96. --- ntoskrnl/ps/query.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ntoskrnl/ps/query.c b/ntoskrnl/ps/query.c index 01aa0361af838..506497c1a17e8 100644 --- a/ntoskrnl/ps/query.c +++ b/ntoskrnl/ps/query.c @@ -212,9 +212,13 @@ NtQueryInformationProcess( /* Get additional information, if needed */ if (Extended) { + QuotaLimits.Flags |= (Process->Vm.Flags.MaximumWorkingSetHard ? + QUOTA_LIMITS_HARDWS_MAX_ENABLE : QUOTA_LIMITS_HARDWS_MAX_DISABLE); + QuotaLimits.Flags |= (Process->Vm.Flags.MinimumWorkingSetHard ? + QUOTA_LIMITS_HARDWS_MIN_ENABLE : QUOTA_LIMITS_HARDWS_MIN_DISABLE); + /* FIXME: Get the correct information */ //QuotaLimits.WorkingSetLimit = (SIZE_T)-1; // Not used on Win2k3, it is set to 0 - QuotaLimits.Flags = QUOTA_LIMITS_HARDWS_MIN_DISABLE | QUOTA_LIMITS_HARDWS_MAX_DISABLE; QuotaLimits.CpuRateLimit.RateData = 0; } From faf6123150344a3843b7055ca327104332273736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Tue, 17 Dec 2024 23:22:39 +0100 Subject: [PATCH 091/750] [CMBATT] Implement support for the _BIX method _BIX is basically _BIF but with more information added, such as cycle count, measurement capacity accuracy and whatnot. Starting with ACPI 4.0 _BIF is rendered obsolete and as a matter of fact a lot of modern hardware fill their ACPI machine data to _BIX. ReactOS must go forward and beyond, compatibility with _BIF is kept. NOTE that a machine can ONLY support one battery static information method! CORE-18969 CORE-19452 --- drivers/bus/acpi/cmbatt/cmbatt.c | 424 ++++++++++++++++++++++++++----- drivers/bus/acpi/cmbatt/cmbatt.h | 55 +++- drivers/bus/acpi/cmbatt/cmexec.c | 64 +++++ 3 files changed, 469 insertions(+), 74 deletions(-) diff --git a/drivers/bus/acpi/cmbatt/cmbatt.c b/drivers/bus/acpi/cmbatt/cmbatt.c index cff0f8afd145f..407fa1495725b 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.c +++ b/drivers/bus/acpi/cmbatt/cmbatt.c @@ -273,71 +273,276 @@ CmBattUnload(IN PDRIVER_OBJECT DriverObject) } } +/** + * @brief + * Retrieves the static information of the battery. + * + * @param[in] DeviceExtension + * A pointer to a Control Method (CM) battery device extension. + * It is used for debugging purposes. + * + * @param[out] UseBix + * A pointer to a boolean value, returned to caller. This can return + * TRUE if this machine supports the _BIX method, FALSE otherwise. + * + * @param[out] BattInfo + * A pointer to a structure that contains the static info of the + * battery. ONLY ONE type of information is filled. See Remarks. + * + * @return + * Returns STATUS_INSUFFICIENT_RESOURCES if there is no enough + * memory to allocate for the static info buffer. Returns + * STATUS_SUCCESS if the operation has succeeded. Otherwise an + * error NTSTATUS code is returned. + * + * @remarks + * It is important to note that a machine can only support one method, + * _BIX or _BIF. Starting with ACPI 4.0, _BIF has become deprecated. + * The caller MUST INSPECT the boolean value, ExtendedData, in order + * to determine if the machine has returned the extended information + * data or not. + */ +static +NTSTATUS +CmBattGetBattStaticInfo( + _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PBOOLEAN UseBix, + _Outptr_ PACPI_BATT_STATIC_INFO *BattInfo) +{ + NTSTATUS Status; + ACPI_BIF_DATA BifData; + ACPI_BIX_DATA BixData; + PACPI_BATT_STATIC_INFO Info; + + /* Allocate pool space for the static information */ + Info = ExAllocatePoolZero(PagedPool, + sizeof(*Info), + CMBATT_BATT_STATIC_INFO_TAG); + if (Info == NULL) + { + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Assume this machine supports the _BIX method */ + *UseBix = TRUE; + + /* Retrieve extended battery static info from _BIX method */ + Status = CmBattGetBixData(DeviceExtension, &BixData); + if (!NT_SUCCESS(Status)) + { + /* + * It failed. This can be expected because not every machine supports + * _BIX, especially the older machines which do not support ACPI 4.0. + * Fallback to _BIF at this point. + */ + Status = CmBattGetBifData(DeviceExtension, &BifData); + if (!NT_SUCCESS(Status)) + { + /* That failed too, time to punt */ + ExFreePoolWithTag(Info, CMBATT_BATT_STATIC_INFO_TAG); + return Status; + } + + /* Acknowledge the caller it will be going to use _BIF */ + *UseBix = FALSE; + Info->BifData = BifData; + } + else + { + Info->BixData = BixData; + } + + /* Return the battery static info to caller */ + Info->ExtendedData = *UseBix; + *BattInfo = Info; + return Status; +} + +/** + * @brief + * Verifies the extended battery information (_BIX) and translates + * such data to the BATTERY_INFORMATION structure. + * + * @param[in] DeviceExtension + * A pointer to a Control Method (CM) battery device extension. + * It is used to gather _BIX data. + * + * @param[in,out] Info + * A pointer to a structure of which this function fills in + * battery information that can be by other battery miniport + * drivers, such as the Composite Battery driver. + */ +static +VOID +CmBattVerifyBixData( + _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, + _Inout_ PBATTERY_INFORMATION Info) +{ + ULONG DesignVoltage; + ACPI_BIX_DATA BixData = DeviceExtension->BattInfo.BixData; + + /* Copy the battery info data */ + Info->Technology = BixData.BatteryTechnology; + Info->CycleCount = BixData.CycleCount; + RtlCopyMemory(Info->Chemistry, BixData.BatteryType, 4); + + /* Check if the power stats are reported in ampere or watts */ + if (BixData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) + { + /* + * We have got power stats in milli-ampere but ReactOS expects the values + * to be reported in milli-watts, so we have to convert them. + * In order to do so we must expect the design voltage of the battery + * is not unknown. + */ + DesignVoltage = BixData.DesignVoltage; + if ((DesignVoltage != BATTERY_UNKNOWN_VOLTAGE) && (DesignVoltage != 0)) + { + /* Convert the design capacity */ + Info->DesignedCapacity = CONVERT_BATT_INFO(BixData.DesignCapacity, DesignVoltage); + + /* Convert the full charged capacity */ + Info->FullChargedCapacity = CONVERT_BATT_INFO(BixData.LastFullCapacity, DesignVoltage); + + /* Convert the low capacity alarm (DefaultAlert1) */ + Info->DefaultAlert1 = CONVERT_BATT_INFO(BixData.DesignCapacityLow, DesignVoltage); + + /* Convert the designed capacity warning alarm (DefaultAlert2) */ + Info->DefaultAlert2 = CONVERT_BATT_INFO(BixData.DesignCapacityWarning, DesignVoltage); + } + else + { + /* + * Without knowing the nominal designed voltage of the battery + * we cannot determine the power consumption of this battery. + */ + Info->DesignedCapacity = BATTERY_UNKNOWN_CAPACITY; + Info->FullChargedCapacity = BATTERY_UNKNOWN_CAPACITY; + Info->DefaultAlert1 = BATTERY_UNKNOWN_CAPACITY; + Info->DefaultAlert2 = BATTERY_UNKNOWN_CAPACITY; + } + } + else + { + /* The stats are in milli-watts, use them directly */ + Info->DesignedCapacity = BixData.DesignCapacity; + Info->FullChargedCapacity = BixData.LastFullCapacity; + Info->DefaultAlert1 = BixData.DesignCapacityLow; + Info->DefaultAlert2 = BixData.DesignCapacityWarning; + } +} + +/** + * @brief + * Verifies the battery information (_BIF) and translates + * such data to the BATTERY_INFORMATION structure. + * + * @param[in] DeviceExtension + * A pointer to a Control Method (CM) battery device extension. + * It is used to gather _BIF data. + * + * @param[in,out] Info + * A pointer to a structure of which this function fills in + * battery information that can be by other battery miniport + * drivers, such as the Composite Battery driver. + */ +static +VOID +CmBattVerifyBifData( + _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, + _Inout_ PBATTERY_INFORMATION Info) +{ + ULONG DesignVoltage; + ACPI_BIF_DATA BifData = DeviceExtension->BattInfo.BifData; + + /* Copy the battery info data, CycleCount is not supported in _BIF */ + Info->Technology = BifData.BatteryTechnology; + Info->CycleCount = 0; + RtlCopyMemory(Info->Chemistry, BifData.BatteryType, 4); + + /* Check if the power stats are reported in ampere or watts */ + if (BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) + { + /* + * We have got power stats in milli-ampere but ReactOS expects the values + * to be reported in milli-watts, so we have to convert them. + * In order to do so we must expect the design voltage of the battery + * is not unknown. + */ + DesignVoltage = BifData.DesignVoltage; + if ((DesignVoltage != BATTERY_UNKNOWN_VOLTAGE) && (DesignVoltage != 0)) + { + /* Convert the design capacity */ + Info->DesignedCapacity = CONVERT_BATT_INFO(BifData.DesignCapacity, DesignVoltage); + + /* Convert the full charged capacity */ + Info->FullChargedCapacity = CONVERT_BATT_INFO(BifData.LastFullCapacity, DesignVoltage); + + /* Convert the low capacity alarm (DefaultAlert1) */ + Info->DefaultAlert1 = CONVERT_BATT_INFO(BifData.DesignCapacityLow, DesignVoltage); + + /* Convert the designed capacity warning alarm (DefaultAlert2) */ + Info->DefaultAlert2 = CONVERT_BATT_INFO(BifData.DesignCapacityWarning, DesignVoltage); + } + else + { + /* + * Without knowing the nominal designed voltage of the battery + * we cannot determine the power consumption of this battery. + */ + Info->DesignedCapacity = BATTERY_UNKNOWN_CAPACITY; + Info->FullChargedCapacity = BATTERY_UNKNOWN_CAPACITY; + Info->DefaultAlert1 = BATTERY_UNKNOWN_CAPACITY; + Info->DefaultAlert2 = BATTERY_UNKNOWN_CAPACITY; + } + } + else + { + /* The stats are in milli-watts, use them directly */ + Info->DesignedCapacity = BifData.DesignCapacity; + Info->FullChargedCapacity = BifData.LastFullCapacity; + Info->DefaultAlert1 = BifData.DesignCapacityLow; + Info->DefaultAlert2 = BifData.DesignCapacityWarning; + } +} + NTSTATUS NTAPI CmBattVerifyStaticInfo( _Inout_ PCMBATT_DEVICE_EXTENSION DeviceExtension, _In_ ULONG BatteryTag) { - ACPI_BIF_DATA BifData; - ULONG DesignVoltage; - PBATTERY_INFORMATION Info = &DeviceExtension->BatteryInformation; NTSTATUS Status; + BOOLEAN UseBix; + PACPI_BATT_STATIC_INFO BattInfo; + PBATTERY_INFORMATION Info = &DeviceExtension->BatteryInformation; - Status = CmBattGetBifData(DeviceExtension, &BifData); + /* FIXME: This function is not fully implemented, more checks need to be implemented */ + UNREFERENCED_PARAMETER(BatteryTag); + + /* Retrieve the battery static info */ + Status = CmBattGetBattStaticInfo(DeviceExtension, &UseBix, &BattInfo); if (NT_SUCCESS(Status)) { + /* Initialize the battery information data */ RtlZeroMemory(Info, sizeof(*Info)); Info->Capabilities = BATTERY_SYSTEM_BATTERY; - Info->Technology = BifData.BatteryTechnology; - RtlCopyMemory(Info->Chemistry, BifData.BatteryType, 4); - // FIXME: take from _BIX method: Info->CycleCount - DeviceExtension->BifData = BifData; - DesignVoltage = DeviceExtension->BifData.DesignVoltage; - - /* Check if the power stats are reported in ampere or watts */ - if (BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) - { - /* - * We have got power stats in milli-ampere but ReactOS expects the values - * to be reported in milli-watts, so we have to convert them. - * In order to do so we must expect the design voltage of the battery - * is not unknown. - */ - if ((DesignVoltage != BATTERY_UNKNOWN_VOLTAGE) && (DesignVoltage != 0)) - { - /* Convert the design capacity */ - Info->DesignedCapacity = CONVERT_BATT_INFO(BifData.DesignCapacity, DesignVoltage); - - /* Convert the full charged capacity */ - Info->FullChargedCapacity = CONVERT_BATT_INFO(BifData.LastFullCapacity, DesignVoltage); - /* Convert the low capacity alarm (DefaultAlert1) */ - Info->DefaultAlert1 = CONVERT_BATT_INFO(BifData.DesignCapacityLow, DesignVoltage); + /* Copy the static information to the device extension of the battery */ + RtlCopyMemory(&DeviceExtension->BattInfo, BattInfo, sizeof(*BattInfo)); - /* Convert the designed capacity warning alarm (DefaultAlert2) */ - Info->DefaultAlert2 = CONVERT_BATT_INFO(BifData.DesignCapacityWarning, DesignVoltage); - } - else - { - /* - * Without knowing the nominal designed voltage of the battery - * we cannot determine the power consumption of this battery. - */ - Info->DesignedCapacity = BATTERY_UNKNOWN_CAPACITY; - Info->FullChargedCapacity = BATTERY_UNKNOWN_CAPACITY; - Info->DefaultAlert1 = BATTERY_UNKNOWN_CAPACITY; - Info->DefaultAlert2 = BATTERY_UNKNOWN_CAPACITY; - } + /* Check if the data from _BIX has to be used or not */ + if (UseBix) + { + CmBattVerifyBixData(DeviceExtension, Info); } else { - /* The stats are in milli-watts, use them directly */ - Info->DesignedCapacity = BifData.DesignCapacity; - Info->FullChargedCapacity = BifData.LastFullCapacity; - Info->DefaultAlert1 = BifData.DesignCapacityLow; - Info->DefaultAlert2 = BifData.DesignCapacityWarning; + CmBattVerifyBifData(DeviceExtension, Info); } + + /* Free the static information buffer as we already copied it */ + ExFreePoolWithTag(BattInfo, CMBATT_BATT_STATIC_INFO_TAG); } return Status; @@ -530,20 +735,44 @@ CmBattIoctl(IN PDEVICE_OBJECT DeviceObject, } break; - case IOCTL_BATTERY_QUERY_BIF: + case IOCTL_BATTERY_QUERY_BIF_BIX: - /* Data is 1060 bytes long */ - if (OutputBufferLength == sizeof(ACPI_BIF_DATA)) + /* Return the battery static information to the caller depending on the supported ACPI method */ + if (DeviceExtension->BattInfo.ExtendedData) { - /* Query it */ - Status = CmBattGetBifData(DeviceExtension, - Irp->AssociatedIrp.SystemBuffer); - if (NT_SUCCESS(Status)) Irp->IoStatus.Information = sizeof(ACPI_BIF_DATA); + if (OutputBufferLength == sizeof(ACPI_BIX_DATA)) + { + /* Query it */ + Status = CmBattGetBixData(DeviceExtension, + Irp->AssociatedIrp.SystemBuffer); + if (NT_SUCCESS(Status)) + { + Irp->IoStatus.Information = sizeof(ACPI_BIX_DATA); + } + } + else + { + /* Buffer size invalid */ + Status = STATUS_INVALID_BUFFER_SIZE; + } } else { - /* Buffer size invalid */ - Status = STATUS_INVALID_BUFFER_SIZE; + if (OutputBufferLength == sizeof(ACPI_BIF_DATA)) + { + /* Query it */ + Status = CmBattGetBifData(DeviceExtension, + Irp->AssociatedIrp.SystemBuffer); + if (NT_SUCCESS(Status)) + { + Irp->IoStatus.Information = sizeof(ACPI_BIF_DATA); + } + } + else + { + /* Buffer size invalid */ + Status = STATUS_INVALID_BUFFER_SIZE; + } } break; @@ -699,7 +928,7 @@ CmBattSetStatusNotify(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, { NTSTATUS Status; ACPI_BST_DATA BstData; - ULONG Capacity, NewTripPoint, TripPoint, DesignVoltage; + ULONG PowerUnit, Capacity, NewTripPoint, TripPoint, DesignVoltage; BOOLEAN Charging; PAGED_CODE(); if (CmBattDebug & (CMBATT_ACPI_WARNING | CMBATT_GENERIC_INFO)) @@ -738,11 +967,22 @@ CmBattSetStatusNotify(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, NewTripPoint = BatteryNotify->LowCapacity; } + /* Is this machine supporting _BIX or _BIF? */ + if (DeviceExtension->BattInfo.ExtendedData) + { + PowerUnit = DeviceExtension->BattInfo.BixData.PowerUnit; + DesignVoltage = DeviceExtension->BattInfo.BixData.DesignVoltage; + } + else + { + PowerUnit = DeviceExtension->BattInfo.BifData.PowerUnit; + DesignVoltage = DeviceExtension->BattInfo.BifData.DesignVoltage; + } + /* Do we have data in Amps or Watts? */ - if (DeviceExtension->BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) + if (PowerUnit == ACPI_BATT_POWER_UNIT_AMPS) { /* We need the voltage to do the conversion */ - DesignVoltage = DeviceExtension->BifData.DesignVoltage; if ((DesignVoltage != BATTERY_UNKNOWN_VOLTAGE) && (DesignVoltage)) { /* Convert from mAh into Ah */ @@ -846,6 +1086,7 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, ULONG PsrData = 0; NTSTATUS Status; ULONG BstState; + ULONG PowerUnit; ULONG DesignVoltage, PresentRate, RemainingCapacity; PAGED_CODE(); if (CmBattDebug & CMBATT_GENERIC_INFO) @@ -946,13 +1187,24 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, DbgPrint("CmBattGetBatteryStatus: AC adapter is NOT connected\n"); } + /* Is this machine supporting _BIX or _BIF? */ + if (DeviceExtension->BattInfo.ExtendedData) + { + PowerUnit = DeviceExtension->BattInfo.BixData.PowerUnit; + DesignVoltage = DeviceExtension->BattInfo.BixData.DesignVoltage; + } + else + { + PowerUnit = DeviceExtension->BattInfo.BifData.PowerUnit; + DesignVoltage = DeviceExtension->BattInfo.BifData.DesignVoltage; + } + /* Get some data we'll need */ - DesignVoltage = DeviceExtension->BifData.DesignVoltage; PresentRate = DeviceExtension->BstData.PresentRate; RemainingCapacity = DeviceExtension->BstData.RemainingCapacity; /* Check if we have battery data in Watts instead of Amps */ - if (DeviceExtension->BifData.PowerUnit == ACPI_BATT_POWER_UNIT_WATTS) + if (PowerUnit == ACPI_BATT_POWER_UNIT_WATTS) { /* Get the data from the BST */ DeviceExtension->RemainingCapacity = RemainingCapacity; @@ -970,7 +1222,7 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, } } } - else if ((DesignVoltage != CM_UNKNOWN_VALUE) && (DesignVoltage != 0)) // Same as doing DeviceExtension->BifData.PowerUnit == ACPI_BATT_POWER_UNIT_AMPS + else if ((DesignVoltage != CM_UNKNOWN_VALUE) && (DesignVoltage != 0)) // Same as doing PowerUnit == ACPI_BATT_POWER_UNIT_AMPS { /* We have voltage data, what about capacity? */ if (RemainingCapacity == CM_UNKNOWN_VALUE) @@ -1180,7 +1432,14 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, case BatteryDeviceName: /* Build the model number string */ - RtlInitAnsiString(&TempString, FdoExtension->BifData.ModelNumber); + if (FdoExtension->BattInfo.ExtendedData) + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BixData.ModelNumber); + } + else + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BifData.ModelNumber); + } /* Convert it to Unicode */ InfoString.Buffer = InfoBuffer; @@ -1202,7 +1461,14 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, case BatteryManufactureName: /* Build the OEM info string */ - RtlInitAnsiString(&TempString, FdoExtension->BifData.OemInfo); + if (FdoExtension->BattInfo.ExtendedData) + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BixData.OemInfo); + } + else + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BifData.OemInfo); + } /* Convert it to Unicode */ InfoString.Buffer = InfoBuffer; @@ -1217,7 +1483,14 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, case BatteryUniqueID: /* Build the serial number string */ - RtlInitAnsiString(&TempString, FdoExtension->BifData.SerialNumber); + if (FdoExtension->BattInfo.ExtendedData) + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BixData.SerialNumber); + } + else + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BifData.SerialNumber); + } /* Convert it to Unicode */ InfoString.Buffer = InfoBuffer; @@ -1229,10 +1502,18 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, TempString2.MaximumLength = sizeof(TempBuffer); /* Check if there's an OEM string */ - if (FdoExtension->BifData.OemInfo[0]) + if ((FdoExtension->BattInfo.ExtendedData && FdoExtension->BattInfo.BixData.OemInfo[0]) || + FdoExtension->BattInfo.BifData.OemInfo[0]) { /* Build the OEM info string */ - RtlInitAnsiString(&TempString, FdoExtension->BifData.OemInfo); + if (FdoExtension->BattInfo.ExtendedData) + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BixData.OemInfo); + } + else + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BifData.OemInfo); + } /* Convert it to Unicode and append it */ RtlAnsiStringToUnicodeString(&TempString2, &TempString, 0); @@ -1240,7 +1521,14 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, } /* Build the model number string */ - RtlInitAnsiString(&TempString, FdoExtension->BifData.ModelNumber); + if (FdoExtension->BattInfo.ExtendedData) + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BixData.ModelNumber); + } + else + { + RtlInitAnsiString(&TempString, FdoExtension->BattInfo.BifData.ModelNumber); + } /* Convert it to Unicode and append it */ RtlAnsiStringToUnicodeString(&TempString2, &TempString, 0); diff --git a/drivers/bus/acpi/cmbatt/cmbatt.h b/drivers/bus/acpi/cmbatt/cmbatt.h index 4a4817916f6a9..e6ab5f029bdac 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.h +++ b/drivers/bus/acpi/cmbatt/cmbatt.h @@ -26,7 +26,7 @@ #define IOCTL_BATTERY_SET_TRIP_POINT \ CTL_CODE(FILE_DEVICE_BATTERY, 0x104, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294410 -#define IOCTL_BATTERY_QUERY_BIF \ +#define IOCTL_BATTERY_QUERY_BIF_BIX \ CTL_CODE(FILE_DEVICE_BATTERY, 0x105, METHOD_BUFFERED, FILE_READ_ACCESS) // 0x294414 #define IOCTL_BATTERY_QUERY_BST \ @@ -85,6 +85,8 @@ typedef struct _ACPI_BST_DATA #define ACPI_BATT_POWER_UNIT_WATTS 0x0 #define ACPI_BATT_POWER_UNIT_AMPS 0x1 +#define ASCIIZ_MAX_LENGTH 256 + typedef struct _ACPI_BIF_DATA { ULONG PowerUnit; @@ -96,12 +98,46 @@ typedef struct _ACPI_BIF_DATA ULONG DesignCapacityLow; ULONG BatteryCapacityGranularity1; ULONG BatteryCapacityGranularity2; - CHAR ModelNumber[256]; - CHAR SerialNumber[256]; - CHAR BatteryType[256]; - CHAR OemInfo[256]; + CHAR ModelNumber[ASCIIZ_MAX_LENGTH]; + CHAR SerialNumber[ASCIIZ_MAX_LENGTH]; + CHAR BatteryType[ASCIIZ_MAX_LENGTH]; + CHAR OemInfo[ASCIIZ_MAX_LENGTH]; } ACPI_BIF_DATA, *PACPI_BIF_DATA; +typedef struct _ACPI_BIX_DATA +{ + ULONG Revision; + ULONG PowerUnit; + ULONG DesignCapacity; + ULONG LastFullCapacity; + ULONG BatteryTechnology; + ULONG DesignVoltage; + ULONG DesignCapacityWarning; + ULONG DesignCapacityLow; + ULONG CycleCount; + ULONG Accuracy; + ULONG MaxSampleTime; + ULONG MinSampleTime; + ULONG MaxAverageInterval; + ULONG MinAverageInterval; + ULONG BatteryCapacityGranularity1; + ULONG BatteryCapacityGranularity2; + CHAR ModelNumber[ASCIIZ_MAX_LENGTH]; + CHAR SerialNumber[ASCIIZ_MAX_LENGTH]; + CHAR BatteryType[ASCIIZ_MAX_LENGTH]; + CHAR OemInfo[ASCIIZ_MAX_LENGTH]; + ULONG SwapCapability; +} ACPI_BIX_DATA, *PACPI_BIX_DATA; + +typedef struct _ACPI_BATT_STATIC_INFO +{ + ACPI_BIF_DATA BifData; + ACPI_BIX_DATA BixData; + BOOLEAN ExtendedData; +} ACPI_BATT_STATIC_INFO, *PACPI_BATT_STATIC_INFO; + +#define CMBATT_BATT_STATIC_INFO_TAG 'nItS' + #define CMBATT_AR_NOTIFY 0x01 #define CMBATT_AR_INSERT 0x02 #define CMBATT_AR_REMOVE 0x04 @@ -132,7 +168,7 @@ typedef struct _CMBATT_DEVICE_EXTENSION ULONG TagData; ULONG Tag; ACPI_BST_DATA BstData; - ACPI_BIF_DATA BifData; + ACPI_BATT_STATIC_INFO BattInfo; ULONG Id; ULONG State; ULONG RemainingCapacity; @@ -203,6 +239,13 @@ CmBattGetBifData( PACPI_BIF_DATA BifData ); +NTSTATUS +NTAPI +CmBattGetBixData( + _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PACPI_BIX_DATA BixData +); + NTSTATUS NTAPI CmBattSetTripPpoint( diff --git a/drivers/bus/acpi/cmbatt/cmexec.c b/drivers/bus/acpi/cmbatt/cmexec.c index b1d294ae9ef4d..b85b07709a318 100644 --- a/drivers/bus/acpi/cmbatt/cmexec.c +++ b/drivers/bus/acpi/cmbatt/cmexec.c @@ -445,6 +445,70 @@ CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, RTL_NUMBER_OF(BifFields)); } +/** + * @brief + * Retrieves the eXtended static battery information from the + * ACPI _BIX method. + * + * @param[in] DeviceExtension + * A pointer to a Control Method (CM) battery device extension. + * It is used to send the ACPI method evaluation operation + * to the ACPI driver of which it is attached to this CM battery. + * + * @param[out] BixData + * A pointer to a structure that contains the _BIX data fields, + * returned to caller. + * + * @return + * Returns STATUS_SUCCESS if the operation has succeeded successfully, + * otherwise a failure NTSTATUS code is returned. + */ +NTSTATUS +NTAPI +CmBattGetBixData( + _In_ PCMBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PACPI_BIX_DATA BixData) +{ + ACPI_PACKAGE_FIELD BixFields[] = { + { "Revision", FALSE, &BixData->Revision }, + { "PowerUnit", FALSE, &BixData->PowerUnit }, + { "DesignCapacity", FALSE, &BixData->DesignCapacity }, + { "LastFullCapacity", FALSE, &BixData->LastFullCapacity }, + { "BatteryTechnology", FALSE, &BixData->BatteryTechnology }, + { "DesignVoltage", FALSE, &BixData->DesignVoltage }, + { "DesignCapacityWarning", FALSE, &BixData->DesignCapacityWarning }, + { "DesignCapacityLow", FALSE, &BixData->DesignCapacityLow }, + { "CycleCount", FALSE, &BixData->CycleCount }, + { "Accuracy", FALSE, &BixData->Accuracy }, + { "MaxSampleTime", FALSE, &BixData->MaxSampleTime }, + { "MinSampleTime", FALSE, &BixData->MinSampleTime }, + { "MaxAverageInterval", FALSE, &BixData->MaxAverageInterval }, + { "MinAverageInterval", FALSE, &BixData->MinAverageInterval }, + { "BatteryCapacityGranularity1", FALSE, &BixData->BatteryCapacityGranularity1 }, + { "BatteryCapacityGranularity2", FALSE, &BixData->BatteryCapacityGranularity2 }, + { "ModelNumber", TRUE, &BixData->ModelNumber }, + { "SerialNumber", TRUE, &BixData->SerialNumber }, + { "BatteryType", TRUE, &BixData->BatteryType }, + { "OemInfo", TRUE, &BixData->OemInfo }, + { "SwapCapability", FALSE, &BixData->SwapCapability }, + }; + PAGED_CODE(); + + if (CmBattDebug & CMBATT_ACPI_ENTRY_EXIT) + { + DbgPrint("CmBattGetBixData: Buffer (0x%x) Device %x Tid %x\n", + BixData, DeviceExtension->DeviceId, KeGetCurrentThread()); + } + + /* Request the ACPI driver to get the _BIX data for us */ + return CmBattCallAcpiPackage("CmBattGetBifData", + DeviceExtension, + 'XIB_', + 512, + BixFields, + RTL_NUMBER_OF(BixFields)); +} + NTSTATUS NTAPI CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, From afc130ff3f5b089c0270686d1b76b3cb08133e38 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Fri, 3 Jan 2025 20:16:56 +0100 Subject: [PATCH 092/750] [SHELL32] Pump COM messages while initializing propsheet from IDataObject (#7571) CORE-19933 --- dll/win32/shell32/dialogs/item_prop.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/dll/win32/shell32/dialogs/item_prop.cpp b/dll/win32/shell32/dialogs/item_prop.cpp index 90160a8062e5f..bcc6473144d1c 100644 --- a/dll/win32/shell32/dialogs/item_prop.cpp +++ b/dll/win32/shell32/dialogs/item_prop.cpp @@ -27,7 +27,7 @@ struct ShellPropSheetDialog HKEY *hKeys, UINT *cKeys); static HRESULT Show(const CLSID *pClsidDefault, IDataObject *pDO, - PFNINITIALIZE InitFunc, LPCWSTR InitString) + PFNINITIALIZE InitFunc, LPCWSTR InitString, HANDLE hEvent = NULL) { HRESULT hr; CRegKeyHandleArray keys; @@ -36,6 +36,8 @@ struct ShellPropSheetDialog WCHAR szCaption[MAX_PATH], *pszCaption = NULL; if (SUCCEEDED(SHELL_GetCaptionFromDataObject(pDO, szCaption, _countof(szCaption)))) pszCaption = szCaption; + if (hEvent) + SetEvent(hEvent); hr = SHOpenPropSheetW(pszCaption, keys, keys, pClsidDefault, pDO, NULL, NULL) ? S_OK : E_FAIL; return hr; } @@ -47,6 +49,7 @@ struct ShellPropSheetDialog CLSID ClsidDefault; const CLSID *pClsidDefault; IStream *pObjStream; + HANDLE hEvent; }; static void FreeData(DATA *pData) @@ -74,6 +77,7 @@ struct ShellPropSheetDialog pData->ClsidDefault = *pClsidDefault; pData->pClsidDefault = &pData->ClsidDefault; } + HANDLE hEvent = pData->hEvent = CreateEventW(NULL, TRUE, FALSE, NULL); HRESULT hr = S_OK; if (pDO) @@ -86,8 +90,21 @@ struct ShellPropSheetDialog pData->pObjStream->Release(); hr = E_FAIL; } - if (FAILED(hr)) + + if (SUCCEEDED(hr)) + { + if (hEvent) + { + DWORD index; + // Pump COM messages until InitFunc is done (for CORE-19933) + CoWaitForMultipleHandles(COWAIT_DEFAULT, INFINITE, 1, &hEvent, &index); + CloseHandle(hEvent); + } + } + else + { FreeData(pData); + } return hr; } @@ -97,7 +114,7 @@ struct ShellPropSheetDialog CComPtr pDO; if (pData->pObjStream) CoGetInterfaceAndReleaseStream(pData->pObjStream, IID_PPV_ARG(IDataObject, &pDO)); - Show(pData->pClsidDefault, pDO, pData->InitFunc, pData->InitString); + Show(pData->pClsidDefault, pDO, pData->InitFunc, pData->InitString, pData->hEvent); FreeData(pData); return 0; } From b114e3a05104dfefede16a9371fea64cbac7ac68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Jab=C5=82o=C5=84ski?= Date: Sat, 4 Jan 2025 17:28:12 +0100 Subject: [PATCH 093/750] [SHELL32] Fix Control_RunDLL single comma syntax out of range dialog box numbers (#7595) If an out of range dialog box number was given in a single comma syntax for Control_RunDLL(), it should be set to 0 to launch the default dialog box instead of failing. Addendum to dcf9eb060a9. CORE-19580 CORE-8981 --- dll/win32/shell32/wine/control.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dll/win32/shell32/wine/control.c b/dll/win32/shell32/wine/control.c index dbbca6a2e4a3d..b07cda047f490 100644 --- a/dll/win32/shell32/wine/control.c +++ b/dll/win32/shell32/wine/control.c @@ -1104,7 +1104,7 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd) } } - if (sp >= applet->count && wszDialogBoxName[0] == L'\0') + if (sp >= applet->count && (wszDialogBoxName[0] == L'\0' || wszDialogBoxName[0] == L'@')) { sp = 0; } From 4cdcbbd1a908716e505f8b8fb4bdbb05153b7c65 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 5 Jan 2025 16:30:40 +0100 Subject: [PATCH 094/750] [MSV1_0] Protect the logon list from concurrent access --- dll/win32/msv1_0/msv1_0.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dll/win32/msv1_0/msv1_0.c b/dll/win32/msv1_0/msv1_0.c index 46d6bff6f553d..1d4d6efc44843 100644 --- a/dll/win32/msv1_0/msv1_0.c +++ b/dll/win32/msv1_0/msv1_0.c @@ -27,6 +27,7 @@ typedef struct _LOGON_LIST_ENTRY BOOL PackageInitialized = FALSE; LIST_ENTRY LogonListHead; +RTL_RESOURCE LogonListResource; ULONG EnumCounter; /* FUNCTIONS ***************************************************************/ @@ -891,6 +892,8 @@ MsvpEnumerateUsers( return STATUS_INVALID_PARAMETER; } + RtlAcquireResourceShared(&LogonListResource, TRUE); + /* Count the currently logged-on users */ CurrentEntry = LogonListHead.Flink; while (CurrentEntry != &LogonListHead) @@ -973,6 +976,8 @@ MsvpEnumerateUsers( *ProtocolStatus = STATUS_SUCCESS; done: + RtlReleaseResource(&LogonListResource); + if (LocalBuffer != NULL) DispatchTable.FreeLsaHeap(LocalBuffer); @@ -1018,6 +1023,8 @@ MsvpGetUserInfo( TRACE("LogonId: 0x%lx\n", RequestBuffer->LogonId.LowPart); + RtlAcquireResourceShared(&LogonListResource, TRUE); + LogonEntry = GetLogonByLogonId(&RequestBuffer->LogonId); if (LogonEntry == NULL) { @@ -1100,6 +1107,8 @@ MsvpGetUserInfo( *ProtocolStatus = STATUS_SUCCESS; done: + RtlReleaseResource(&LogonListResource); + if (LocalBuffer != NULL) DispatchTable.FreeLsaHeap(LocalBuffer); @@ -1278,6 +1287,7 @@ LsaApInitializePackage(IN ULONG AuthenticationPackageId, if (!PackageInitialized) { InitializeListHead(&LogonListHead); + RtlInitializeResource(&LogonListResource); EnumCounter = 0; PackageInitialized = TRUE; } @@ -1333,7 +1343,9 @@ LsaApLogonTerminated( LogonEntry = GetLogonByLogonId(LogonId); if (LogonEntry != NULL) { + RtlAcquireResourceExclusive(&LogonListResource, TRUE); RemoveEntryList(&LogonEntry->ListEntry); + RtlReleaseResource(&LogonListResource); if (LogonEntry->UserName.Buffer) RtlFreeHeap(RtlGetProcessHeap(), 0, LogonEntry->UserName.Buffer); @@ -1702,7 +1714,9 @@ LsaApLogonUserEx2(IN PLSA_CLIENT_REQUEST ClientRequest, LogonEntry->LogonType = LogonType; + RtlAcquireResourceExclusive(&LogonListResource, TRUE); InsertTailList(&LogonListHead, &LogonEntry->ListEntry); + RtlReleaseResource(&LogonListResource); } if (LogonType == Interactive || LogonType == Batch || LogonType == Service) From faf62979728ec2e6a596ec6f3921e318f168bcfc Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 5 Jan 2025 16:38:04 +0100 Subject: [PATCH 095/750] [NETAPI32][WKSSVC][IDL] Implement NetrWkstaUserEnum - TODO: Take PreferredMaximumLength and ResumeHandle into account --- base/services/wkssvc/rpcserver.c | 239 ++++++++++++++++++++++++++++- dll/win32/netapi32/wksta_new.c | 32 ++-- sdk/include/reactos/idl/wkssvc.idl | 13 +- 3 files changed, 267 insertions(+), 17 deletions(-) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index fe39af081bc3b..fc9cf12433b04 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -447,12 +447,243 @@ NetrWkstaUserEnum( unsigned long *TotalEntries, unsigned long *ResumeHandle) { - ERR("NetrWkstaUserEnum(%p %p 0x%lx %p %p)\n", - ServerName, UserInfo, PreferredMaximumLength, TotalEntries, ResumeHandle); + MSV1_0_ENUMUSERS_REQUEST EnumRequest; + PMSV1_0_ENUMUSERS_RESPONSE EnumResponseBuffer = NULL; + MSV1_0_GETUSERINFO_REQUEST UserInfoRequest; + PMSV1_0_GETUSERINFO_RESPONSE UserInfoResponseBuffer = NULL; + PMSV1_0_GETUSERINFO_RESPONSE *UserInfoArray = NULL; + DWORD EnumResponseBufferSize = 0; + DWORD UserInfoResponseBufferSize = 0; + NTSTATUS Status, ProtocolStatus; + ULONG i, start, count; + PLUID pLogonId; + PULONG pEnumHandle; + DWORD dwResult = NERR_Success; + PWKSTA_USER_INFO_0 pUserInfo0 = NULL; + PWKSTA_USER_INFO_1 pUserInfo1 = NULL; - UNIMPLEMENTED; - return 0; + TRACE("NetrWkstaUserEnum(%p %p 0x%lx %p %p)\n", + ServerName, UserInfo, PreferredMaximumLength, TotalEntries, ResumeHandle); + + if (UserInfo->Level > 1) + { + ERR("Invalid Level %lu\n", UserInfo->Level); + return ERROR_INVALID_LEVEL; + } + + /* Enumerate all currently logged-on users */ + EnumRequest.MessageType = MsV1_0EnumerateUsers; + Status = LsaCallAuthenticationPackage(LsaHandle, + LsaAuthenticationPackage, + &EnumRequest, + sizeof(EnumRequest), + (PVOID*)&EnumResponseBuffer, + &EnumResponseBufferSize, + &ProtocolStatus); + + TRACE("LsaCallAuthenticationPackage Status 0x%08lx ResponseBufferSize %lu\n", Status, EnumResponseBufferSize); + if (!NT_SUCCESS(Status)) + { + dwResult = RtlNtStatusToDosError(Status); + goto done; + } + + TRACE("LoggedOnUsers: %lu\n", EnumResponseBuffer->NumberOfLoggedOnUsers); + TRACE("ResponseBuffer: 0x%p\n", EnumResponseBuffer); + TRACE("LogonIds: 0x%p\n", EnumResponseBuffer->LogonIds); + TRACE("EnumHandles: 0x%p\n", EnumResponseBuffer->EnumHandles); + if (EnumResponseBuffer->NumberOfLoggedOnUsers > 0) + { + pLogonId = EnumResponseBuffer->LogonIds; + pEnumHandle = EnumResponseBuffer->EnumHandles; + TRACE("pLogonId: 0x%p\n", pLogonId); + TRACE("pEnumHandle: 0x%p\n", pEnumHandle); + + UserInfoArray = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + EnumResponseBuffer->NumberOfLoggedOnUsers * sizeof(PMSV1_0_GETUSERINFO_RESPONSE)); + if (UserInfoArray == NULL) + { + dwResult = ERROR_NOT_ENOUGH_MEMORY; + goto done; + } + + for (i = 0; i < EnumResponseBuffer->NumberOfLoggedOnUsers; i++) + { + TRACE("Logon %lu: 0x%08lx %lu\n", i, pLogonId->LowPart, *pEnumHandle); + + UserInfoRequest.MessageType = MsV1_0GetUserInfo; + UserInfoRequest.LogonId = *pLogonId; + Status = LsaCallAuthenticationPackage(LsaHandle, + LsaAuthenticationPackage, + &UserInfoRequest, + sizeof(UserInfoRequest), + (PVOID*)&UserInfoResponseBuffer, + &UserInfoResponseBufferSize, + &ProtocolStatus); + TRACE("LsaCallAuthenticationPackage:MsV1_0GetUserInfo Status 0x%08lx ResponseBufferSize %lu\n", Status, UserInfoResponseBufferSize); + if (!NT_SUCCESS(Status)) + { + dwResult = RtlNtStatusToDosError(Status); + goto done; + } + + UserInfoArray[i] = UserInfoResponseBuffer; + + TRACE("UserName: %wZ\n", &UserInfoArray[i]->UserName); + TRACE("LogonDomain: %wZ\n", &UserInfoArray[i]->LogonDomainName); + TRACE("LogonServer: %wZ\n", &UserInfoArray[i]->LogonServer); + + pLogonId++; + pEnumHandle++; + } + + if (PreferredMaximumLength == MAX_PREFERRED_LENGTH) + { + start = 0; + count = EnumResponseBuffer->NumberOfLoggedOnUsers; + } + else + { + FIXME("Calculate the start index and the number of matching array entries!"); + dwResult = ERROR_CALL_NOT_IMPLEMENTED; + goto done; + } + + switch (UserInfo->Level) + { + case 0: + pUserInfo0 = midl_user_allocate(count * sizeof(WKSTA_USER_INFO_0)); + if (pUserInfo0 == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo0, count * sizeof(WKSTA_USER_INFO_0)); + + for (i = 0; i < 0 + count; i++) + { + pUserInfo0[i].wkui0_username = midl_user_allocate(UserInfoArray[start + i]->UserName.Length + sizeof(WCHAR)); + if (pUserInfo0[i].wkui0_username == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo0[i].wkui0_username, UserInfoArray[start + i]->UserName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo0[i].wkui0_username, UserInfoArray[start + i]->UserName.Buffer, UserInfoArray[start + i]->UserName.Length); + } + + UserInfo->WkstaUserInfo.Level0.EntriesRead = count; + UserInfo->WkstaUserInfo.Level0.Buffer = pUserInfo0; + *TotalEntries = EnumResponseBuffer->NumberOfLoggedOnUsers; + *ResumeHandle = 0; + break; + + case 1: + pUserInfo1 = midl_user_allocate(count * sizeof(WKSTA_USER_INFO_1)); + if (pUserInfo1 == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo1, count * sizeof(WKSTA_USER_INFO_1)); + + for (i = 0; i < 0 + count; i++) + { + pUserInfo1[i].wkui1_username = midl_user_allocate(UserInfoArray[start + i]->UserName.Length + sizeof(WCHAR)); + if (pUserInfo1[i].wkui1_username == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo1[i].wkui1_username, UserInfoArray[start + i]->UserName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo1[i].wkui1_username, UserInfoArray[start + i]->UserName.Buffer, UserInfoArray[start + i]->UserName.Length); + + pUserInfo1[i].wkui1_logon_domain = midl_user_allocate(UserInfoArray[start + i]->LogonDomainName.Length + sizeof(WCHAR)); + if (pUserInfo1[i].wkui1_logon_domain == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo1[i].wkui1_logon_domain, UserInfoArray[start + i]->LogonDomainName.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo1[i].wkui1_logon_domain, UserInfoArray[start + i]->LogonDomainName.Buffer, UserInfoArray[start + i]->LogonDomainName.Length); + + // FIXME: wkui1_oth_domains + + pUserInfo1[i].wkui1_logon_server = midl_user_allocate(UserInfoArray[start + i]->LogonServer.Length + sizeof(WCHAR)); + if (pUserInfo1[i].wkui1_logon_server == NULL) + { + ERR("\n"); + dwResult = ERROR_NOT_ENOUGH_MEMORY; + break; + } + + ZeroMemory(pUserInfo1[i].wkui1_logon_server, UserInfoArray[start + i]->LogonServer.Length + sizeof(WCHAR)); + CopyMemory(pUserInfo1[i].wkui1_logon_server, UserInfoArray[start + i]->LogonServer.Buffer, UserInfoArray[start + i]->LogonServer.Length); + } + + UserInfo->WkstaUserInfo.Level1.EntriesRead = count; + UserInfo->WkstaUserInfo.Level1.Buffer = pUserInfo1; + *TotalEntries = EnumResponseBuffer->NumberOfLoggedOnUsers; + *ResumeHandle = 0; + break; + + break; + } + } + else + { + if (UserInfo->Level == 0) + { + UserInfo->WkstaUserInfo.Level0.Buffer = NULL; + UserInfo->WkstaUserInfo.Level0.EntriesRead = 0; + } + else + { + UserInfo->WkstaUserInfo.Level1.Buffer = NULL; + UserInfo->WkstaUserInfo.Level1.EntriesRead = 0; + } + + *TotalEntries = 0; + dwResult = NERR_Success; + } + +done: + if (UserInfoArray !=NULL) + { + + for (i = 0; i < EnumResponseBuffer->NumberOfLoggedOnUsers; i++) + { + if (UserInfoArray[i]->UserName.Buffer != NULL) + LsaFreeReturnBuffer(UserInfoArray[i]->UserName.Buffer); + + if (UserInfoArray[i]->LogonDomainName.Buffer != NULL) + LsaFreeReturnBuffer(UserInfoArray[i]->LogonDomainName.Buffer); + + if (UserInfoArray[i]->LogonServer.Buffer != NULL) + LsaFreeReturnBuffer(UserInfoArray[i]->LogonServer.Buffer); + + LsaFreeReturnBuffer(UserInfoArray[i]); + } + + RtlFreeHeap(RtlGetProcessHeap(), 0, UserInfoArray); + } + + if (EnumResponseBuffer != NULL) + LsaFreeReturnBuffer(EnumResponseBuffer); + + return dwResult; } diff --git a/dll/win32/netapi32/wksta_new.c b/dll/win32/netapi32/wksta_new.c index f427f3cd35f74..48873eefbabdf 100644 --- a/dll/win32/netapi32/wksta_new.c +++ b/dll/win32/netapi32/wksta_new.c @@ -1057,8 +1057,8 @@ NetWkstaUserEnum( _Inout_ LPDWORD resumehandle) { WKSTA_USER_ENUM_STRUCT UserEnumInfo; - WKSTA_USER_INFO_0_CONTAINER Container0; - WKSTA_USER_INFO_1_CONTAINER Container1; +// WKSTA_USER_INFO_0_CONTAINER Container0; +// WKSTA_USER_INFO_1_CONTAINER Container1; NET_API_STATUS status; TRACE("NetWkstaUserEnum(%s, %d, %p, %d, %p, %p, %p)\n", debugstr_w(servername), @@ -1068,15 +1068,19 @@ NetWkstaUserEnum( switch (level) { case 0: - UserEnumInfo.WkstaUserInfo.Level0 = &Container0; - Container0.EntriesRead = 0; - Container0.Buffer = NULL; +// UserEnumInfo.WkstaUserInfo.Level0 = &Container0; +// Container0.EntriesRead = 0; +// Container0.Buffer = NULL; + UserEnumInfo.WkstaUserInfo.Level0.EntriesRead = 0; + UserEnumInfo.WkstaUserInfo.Level0.Buffer = NULL; break; case 1: - UserEnumInfo.WkstaUserInfo.Level1 = &Container1; - Container1.EntriesRead = 0; - Container1.Buffer = NULL; +// UserEnumInfo.WkstaUserInfo.Level1 = &Container1; +// Container1.EntriesRead = 0; +// Container1.Buffer = NULL; + UserEnumInfo.WkstaUserInfo.Level1.EntriesRead = 0; + UserEnumInfo.WkstaUserInfo.Level1.Buffer = NULL; break; default: @@ -1095,13 +1099,17 @@ NetWkstaUserEnum( switch (level) { case 0: - *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level0->Buffer; - *entriesread = UserEnumInfo.WkstaUserInfo.Level0->EntriesRead; +// *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level0->Buffer; +// *entriesread = UserEnumInfo.WkstaUserInfo.Level0->EntriesRead; + *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level0.Buffer; + *entriesread = UserEnumInfo.WkstaUserInfo.Level0.EntriesRead; break; case 1: - *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level1->Buffer; - *entriesread = UserEnumInfo.WkstaUserInfo.Level1->EntriesRead; +// *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level1->Buffer; +// *entriesread = UserEnumInfo.WkstaUserInfo.Level1->EntriesRead; + *bufptr = (LPBYTE)UserEnumInfo.WkstaUserInfo.Level1.Buffer; + *entriesread = UserEnumInfo.WkstaUserInfo.Level1.EntriesRead; break; } } diff --git a/sdk/include/reactos/idl/wkssvc.idl b/sdk/include/reactos/idl/wkssvc.idl index 88cf97f6057b5..6e5cce98ead7a 100644 --- a/sdk/include/reactos/idl/wkssvc.idl +++ b/sdk/include/reactos/idl/wkssvc.idl @@ -311,7 +311,7 @@ typedef struct _WKSTA_USER_INFO_1_CONTAINER unsigned long EntriesRead; [size_is(EntriesRead)] LPWKSTA_USER_INFO_1 Buffer; } WKSTA_USER_INFO_1_CONTAINER, *PWKSTA_USER_INFO_1_CONTAINER, *LPWKSTA_USER_INFO_1_CONTAINER; - +/* typedef struct _WKSTA_USER_ENUM_STRUCT { unsigned long Level; @@ -322,6 +322,17 @@ typedef struct _WKSTA_USER_ENUM_STRUCT [default] ; } WkstaUserInfo; } WKSTA_USER_ENUM_STRUCT, *PWKSTA_USER_ENUM_STRUCT, *LPWKSTA_USER_ENUM_STRUCT; +*/ +typedef struct _WKSTA_USER_ENUM_STRUCT +{ + unsigned long Level; + [switch_is(Level)] union _WKSTA_USER_ENUM_UNION + { + [case(0)] WKSTA_USER_INFO_0_CONTAINER Level0; + [case(1)] WKSTA_USER_INFO_1_CONTAINER Level1; + [default] ; + } WkstaUserInfo; +} WKSTA_USER_ENUM_STRUCT, *PWKSTA_USER_ENUM_STRUCT, *LPWKSTA_USER_ENUM_STRUCT; typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER { From 0929e967283990ed8509ef94cfa94c1a02436ec5 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 5 Jan 2025 16:56:09 +0100 Subject: [PATCH 096/750] [WKSSVC] FIXME --> TRACE --- base/services/wkssvc/rpcserver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/services/wkssvc/rpcserver.c b/base/services/wkssvc/rpcserver.c index fc9cf12433b04..b27e98f79731f 100644 --- a/base/services/wkssvc/rpcserver.c +++ b/base/services/wkssvc/rpcserver.c @@ -113,7 +113,7 @@ NetpGetClientLogonId( goto done; } - FIXME("Client LUID: %lx\n", Statistics.AuthenticationId.LowPart); + TRACE("Client LUID: %lx\n", Statistics.AuthenticationId.LowPart); RtlCopyLuid(LogonId, &Statistics.AuthenticationId); done: From e1b835bdbf8efd009e0d775ad974b7f84050d540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 27 Dec 2024 17:17:53 +0100 Subject: [PATCH 097/750] [PARTMGR] Minor code formatting. --- drivers/storage/partmgr/partition.c | 13 ++++--------- drivers/storage/partmgr/partmgr.c | 20 +++++++------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/drivers/storage/partmgr/partition.c b/drivers/storage/partmgr/partition.c index c7763027951a0..f54ccf555960c 100644 --- a/drivers/storage/partmgr/partition.c +++ b/drivers/storage/partmgr/partition.c @@ -27,7 +27,7 @@ PartitionCreateDevice( UNICODE_STRING deviceName; UINT32 volumeNum; - // create the device object + // Create the partition/volume device object volumeNum = HarddiskVolumeNextId++; swprintf(nameBuf, L"\\Device\\HarddiskVolume%lu", volumeNum); @@ -41,7 +41,6 @@ PartitionCreateDevice( FILE_DEVICE_SECURE_OPEN, FALSE, &partitionDevice); - if (!NT_SUCCESS(status)) { ERR("Unable to create device object %wZ\n", &deviceName); @@ -81,10 +80,10 @@ PartitionCreateDevice( partExt->DeviceObject = partitionDevice; partExt->LowerDevice = FDObject; + // The device is initialized partitionDevice->Flags &= ~DO_DEVICE_INITIALIZING; *PDO = partitionDevice; - return status; } @@ -136,11 +135,9 @@ PartitionHandleStartDevice( return status; } + INFO("Partition interface %wZ\n", &interfaceName); PartExt->PartitionInterfaceName = interfaceName; status = IoSetDeviceInterfaceState(&interfaceName, TRUE); - - INFO("Partition interface %wZ\n", &interfaceName); - if (!NT_SUCCESS(status)) { RtlFreeUnicodeString(&interfaceName); @@ -157,11 +154,9 @@ PartitionHandleStartDevice( return status; } + INFO("Volume interface %wZ\n", &interfaceName); PartExt->VolumeInterfaceName = interfaceName; status = IoSetDeviceInterfaceState(&interfaceName, TRUE); - - INFO("Volume interface %wZ\n", &interfaceName); - if (!NT_SUCCESS(status)) { RtlFreeUnicodeString(&interfaceName); diff --git a/drivers/storage/partmgr/partmgr.c b/drivers/storage/partmgr/partmgr.c index 8d3a175d91ab1..fd3fd89c24753 100644 --- a/drivers/storage/partmgr/partmgr.c +++ b/drivers/storage/partmgr/partmgr.c @@ -340,7 +340,6 @@ PartMgrUpdatePartitionDevices( pdoNumber, NewLayout->PartitionStyle, &partitionDevice); - if (!NT_SUCCESS(status)) { partEntry->PartitionNumber = 0; @@ -948,8 +947,8 @@ FdoHandleStartDevice( _In_ PFDO_EXTENSION FdoExtension, _In_ PIRP Irp) { - // obtain the disk device number - // this is not expected to change thus not in PartMgrRefreshDiskData + // Obtain the disk device number. + // It is not expected to change, thus not in PartMgrRefreshDiskData(). STORAGE_DEVICE_NUMBER deviceNumber; NTSTATUS status = IssueSyncIoControlRequest(IOCTL_STORAGE_GET_DEVICE_NUMBER, FdoExtension->LowerDevice, @@ -965,25 +964,22 @@ FdoHandleStartDevice( FdoExtension->DiskData.DeviceNumber = deviceNumber.DeviceNumber; - // register the disk interface - // partmgr.sys from Windows 8.1 also registers a mysterious GUID_DEVINTERFACE_HIDDEN_DISK here + // Register the disk interface. + // partmgr.sys from Windows 8.1 also registers a mysterious GUID_DEVINTERFACE_HIDDEN_DISK here. UNICODE_STRING interfaceName; status = IoRegisterDeviceInterface(FdoExtension->PhysicalDiskDO, &GUID_DEVINTERFACE_DISK, NULL, &interfaceName); - if(!NT_SUCCESS(status)) { ERR("Failed to register GUID_DEVINTERFACE_DISK, status %x\n", status); return status; } + INFO("Disk interface %wZ\n", &interfaceName); FdoExtension->DiskInterfaceName = interfaceName; status = IoSetDeviceInterfaceState(&interfaceName, TRUE); - - INFO("Disk interface %wZ\n", &interfaceName); - if (!NT_SUCCESS(status)) { RtlFreeUnicodeString(&interfaceName); @@ -1188,12 +1184,11 @@ PartMgrAddDevice( NTSTATUS status = IoCreateDevice(DriverObject, sizeof(FDO_EXTENSION), - 0, + NULL, FILE_DEVICE_BUS_EXTENDER, FILE_AUTOGENERATED_DEVICE_NAME | FILE_DEVICE_SECURE_OPEN, FALSE, &deviceObject); - if (!NT_SUCCESS(status)) { ERR("Failed to create FDO 0x%x\n", status); @@ -1218,9 +1213,8 @@ PartMgrAddDevice( } deviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE; - // device is initialized + // The device is initialized deviceObject->Flags &= ~DO_DEVICE_INITIALIZING; - return STATUS_SUCCESS; } From 8653bb1b322afff64f0361b0d4e801f2ab889e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 5 Jan 2025 18:06:45 +0100 Subject: [PATCH 098/750] [PARTMGR] Few code enhancements. - PartMgrAddDevice(): If IoAttachDeviceToDeviceStack() fails, bail out immediately, instead of continuing initializing the device extension then deciding to fail. - PartitionCreateDevice(): Initialize the fields pertaining to parent device linking in the partition device extension, before the other fields (following in a similar way what's done in PartMgrAddDevice). --- drivers/storage/partmgr/partition.c | 6 +++--- drivers/storage/partmgr/partmgr.c | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/storage/partmgr/partition.c b/drivers/storage/partmgr/partition.c index f54ccf555960c..e8a38e728ca4b 100644 --- a/drivers/storage/partmgr/partition.c +++ b/drivers/storage/partmgr/partition.c @@ -52,6 +52,9 @@ PartitionCreateDevice( PPARTITION_EXTENSION partExt = partitionDevice->DeviceExtension; RtlZeroMemory(partExt, sizeof(*partExt)); + partExt->DeviceObject = partitionDevice; + partExt->LowerDevice = FDObject; + partitionDevice->StackSize = FDObject->StackSize; partitionDevice->Flags |= DO_DIRECT_IO; @@ -77,9 +80,6 @@ PartitionCreateDevice( partExt->DetectedNumber = PdoNumber; // counts only partitions with PDO created partExt->VolumeNumber = volumeNum; - partExt->DeviceObject = partitionDevice; - partExt->LowerDevice = FDObject; - // The device is initialized partitionDevice->Flags &= ~DO_DEVICE_INITIALIZING; diff --git a/drivers/storage/partmgr/partmgr.c b/drivers/storage/partmgr/partmgr.c index fd3fd89c24753..b1c37b5d9646d 100644 --- a/drivers/storage/partmgr/partmgr.c +++ b/drivers/storage/partmgr/partmgr.c @@ -1201,16 +1201,15 @@ PartMgrAddDevice( deviceExtension->IsFDO = TRUE; deviceExtension->DeviceObject = deviceObject; deviceExtension->LowerDevice = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject); - deviceExtension->PhysicalDiskDO = PhysicalDeviceObject; - KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE); - - // the the attaching failed if (!deviceExtension->LowerDevice) { + // The attachment failed IoDeleteDevice(deviceObject); - return STATUS_DEVICE_REMOVED; } + deviceExtension->PhysicalDiskDO = PhysicalDeviceObject; + KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE); + deviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE; // The device is initialized From 02cff5abc15e39a49a8b2eef95e794bc616d1cb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 4 Jun 2024 17:19:29 +0200 Subject: [PATCH 099/750] [NTOS:IO] tag.h: Remove duplicated TAG_SYSB/TAG_SYS_BUF and rename it to TAG_IOBUF --- ntoskrnl/include/internal/tag.h | 4 +--- ntoskrnl/io/iomgr/iofunc.c | 32 ++++++++++++++++---------------- ntoskrnl/io/iomgr/irp.c | 8 ++++---- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/ntoskrnl/include/internal/tag.h b/ntoskrnl/include/internal/tag.h index 35cf14d6ae620..4292f4b439d7a 100644 --- a/ntoskrnl/include/internal/tag.h +++ b/ntoskrnl/include/internal/tag.h @@ -59,7 +59,6 @@ #define TAG_IO_TIMER 'MTOI' #define TAG_DRIVER 'RVRD' #define TAG_DRIVER_EXTENSION 'EVRD' -#define TAG_SYSB 'BSYS' #define TAG_LOCK 'kclF' #define TAG_FILE_NAME 'MANF' #define TAG_FILE_SYSTEM 'SYSF' @@ -84,7 +83,7 @@ #define TAG_REINIT 'iRoI' #define TAG_IOWI 'IWOI' #define TAG_IRP ' prI' -#define TAG_SYS_BUF 'BSYS' +#define TAG_IOBUF 'UBOI' #define TAG_KINTERRUPT 'RSIK' #define TAG_MDL ' LDM' #define TAG_IO_DEVNODE 'donD' @@ -93,7 +92,6 @@ #define TAG_IO_RESOURCE 'CRSR' #define TAG_IO_TIMER 'MTOI' #define TAG_VPB ' BPV' -#define TAG_SYSB 'BSYS' #define TAG_RTLREGISTRY 'vrqR' #define TAG_PNP_DEVACTION 'aDpP' diff --git a/ntoskrnl/io/iomgr/iofunc.c b/ntoskrnl/io/iomgr/iofunc.c index f672f4b5af69d..3c0cf9b69e262 100644 --- a/ntoskrnl/io/iomgr/iofunc.c +++ b/ntoskrnl/io/iomgr/iofunc.c @@ -529,7 +529,7 @@ IopDeviceFsIoControl(IN HANDLE DeviceHandle, Irp->AssociatedIrp.SystemBuffer = ExAllocatePoolWithQuotaTag(PoolType, BufferLength, - TAG_SYS_BUF); + TAG_IOBUF); /* Check if we got a buffer */ if (InputBuffer) @@ -576,7 +576,7 @@ IopDeviceFsIoControl(IN HANDLE DeviceHandle, Irp->AssociatedIrp.SystemBuffer = ExAllocatePoolWithQuotaTag(PoolType, InputBufferLength, - TAG_SYS_BUF); + TAG_IOBUF); /* Copy into the System Buffer */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, @@ -2047,7 +2047,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, AuxBuffer = ExAllocatePoolWithTag(NonPagedPool, CapturedFileName.Length + sizeof(UNICODE_STRING), - TAG_SYSB); + TAG_IOBUF); RtlCopyMemory((PVOID)((ULONG_PTR)AuxBuffer + sizeof(UNICODE_STRING)), CapturedFileName.Buffer, @@ -2064,7 +2064,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Free buffer and return the exception code */ - if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); + if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_IOBUF); _SEH2_YIELD(return _SEH2_GetExceptionCode()); } _SEH2_END; @@ -2100,7 +2100,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, if (!NT_SUCCESS(Status)) { /* Fail */ - if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); + if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_IOBUF); return Status; } @@ -2108,7 +2108,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, if (FileObject->CompletionContext != NULL && ApcRoutine != NULL) { ObDereferenceObject(FileObject); - if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); + if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_IOBUF); return STATUS_INVALID_PARAMETER; } @@ -2125,7 +2125,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, if (!NT_SUCCESS(Status)) { /* Fail */ - if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); + if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_IOBUF); ObDereferenceObject(FileObject); return Status; } @@ -2143,7 +2143,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, { if (Event) ObDereferenceObject(Event); ObDereferenceObject(FileObject); - if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); + if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_IOBUF); return Status; } @@ -2181,13 +2181,13 @@ NtQueryDirectoryFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Allocating failed, clean up and return the exception code */ IopCleanupAfterException(FileObject, Irp, Event, NULL); - if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_SYSB); + if (AuxBuffer) ExFreePoolWithTag(AuxBuffer, TAG_IOBUF); /* Return the exception code */ return _SEH2_GetExceptionCode(); @@ -2517,7 +2517,7 @@ NtQueryInformationFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -2985,7 +2985,7 @@ NtReadFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -3286,7 +3286,7 @@ NtSetInformationFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); /* Copy the data into it */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, @@ -4058,7 +4058,7 @@ NtWriteFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); /* Copy the data into it */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, Buffer, Length); @@ -4385,7 +4385,7 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -4566,7 +4566,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle, { /* Allocate a buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_SYSB); + ExAllocatePoolWithQuotaTag(NonPagedPool, Length, TAG_IOBUF); /* Copy the data into it */ RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, FsInformation, Length); diff --git a/ntoskrnl/io/iomgr/irp.c b/ntoskrnl/io/iomgr/irp.c index 2de843975e01a..c6316c83f7f49 100644 --- a/ntoskrnl/io/iomgr/irp.c +++ b/ntoskrnl/io/iomgr/irp.c @@ -210,7 +210,7 @@ IopCleanupIrp(IN PIRP Irp, if (Irp->Flags & IRP_DEALLOCATE_BUFFER) { /* Free the buffer */ - ExFreePoolWithTag(Irp->AssociatedIrp.SystemBuffer, TAG_SYS_BUF); + ExFreePoolWithTag(Irp->AssociatedIrp.SystemBuffer, TAG_IOBUF); } /* Check if this IRP has a user event, a file object, and is async */ @@ -778,7 +778,7 @@ IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction, { /* Allocate the System Buffer */ Irp->AssociatedIrp.SystemBuffer = - ExAllocatePoolWithTag(NonPagedPool, Length, TAG_SYS_BUF); + ExAllocatePoolWithTag(NonPagedPool, Length, TAG_IOBUF); if (!Irp->AssociatedIrp.SystemBuffer) { /* Free the IRP and fail */ @@ -927,7 +927,7 @@ IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, Irp->AssociatedIrp.SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, BufferLength, - TAG_SYS_BUF); + TAG_IOBUF); if (!Irp->AssociatedIrp.SystemBuffer) { /* Free the IRP and fail */ @@ -970,7 +970,7 @@ IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, Irp->AssociatedIrp.SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, InputBufferLength, - TAG_SYS_BUF); + TAG_IOBUF); if (!Irp->AssociatedIrp.SystemBuffer) { /* Free the IRP and fail */ From 7a05b393c5b5cb54e45d2b14d2ba420cd28d5dac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 5 Jan 2025 21:12:50 +0100 Subject: [PATCH 100/750] [NTOS:IO] TAG_KINTERRUPT -> TAG_IO_INTERRUPT and change its value. Change its value, as per the official Windows pooltag.txt file. --- ntoskrnl/include/internal/tag.h | 2 +- ntoskrnl/io/iomgr/irq.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/include/internal/tag.h b/ntoskrnl/include/internal/tag.h index 4292f4b439d7a..4c71be472400c 100644 --- a/ntoskrnl/include/internal/tag.h +++ b/ntoskrnl/include/internal/tag.h @@ -84,7 +84,7 @@ #define TAG_IOWI 'IWOI' #define TAG_IRP ' prI' #define TAG_IOBUF 'UBOI' -#define TAG_KINTERRUPT 'RSIK' +#define TAG_IO_INTERRUPT 'nioI' #define TAG_MDL ' LDM' #define TAG_IO_DEVNODE 'donD' #define TAG_PNP_NOTIFY 'NPnP' diff --git a/ntoskrnl/io/iomgr/irq.c b/ntoskrnl/io/iomgr/irq.c index 6e09f6b196e33..c8e9c5527e65a 100644 --- a/ntoskrnl/io/iomgr/irq.c +++ b/ntoskrnl/io/iomgr/irq.c @@ -60,7 +60,7 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, IoInterrupt = ExAllocatePoolZero(NonPagedPool, (Count - 1) * sizeof(KINTERRUPT) + sizeof(IO_INTERRUPT), - TAG_KINTERRUPT); + TAG_IO_INTERRUPT); if (!IoInterrupt) return STATUS_INSUFFICIENT_RESOURCES; /* Use the structure's spinlock, if none was provided */ @@ -105,7 +105,7 @@ IoConnectInterrupt(OUT PKINTERRUPT *InterruptObject, if (FirstRun) { /* We failed early so just free this */ - ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); + ExFreePoolWithTag(IoInterrupt, TAG_IO_INTERRUPT); } else { @@ -166,7 +166,7 @@ IoDisconnectInterrupt(PKINTERRUPT InterruptObject) } /* Free the I/O interrupt */ - ExFreePoolWithTag(IoInterrupt, TAG_KINTERRUPT); + ExFreePoolWithTag(IoInterrupt, TAG_IO_INTERRUPT); } NTSTATUS From 5c4fcd99d65af360d4be7ccf3af54695ba3d8dcf Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 5 Jan 2025 21:42:41 +0100 Subject: [PATCH 101/750] [CMBATT] Fix two comments --- drivers/bus/acpi/cmbatt/cmexec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/bus/acpi/cmbatt/cmexec.c b/drivers/bus/acpi/cmbatt/cmexec.c index b85b07709a318..6caf314617cd3 100644 --- a/drivers/bus/acpi/cmbatt/cmexec.c +++ b/drivers/bus/acpi/cmbatt/cmexec.c @@ -300,7 +300,7 @@ CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject, ASSERT(StaData != NULL); *StaData = 0; - /* Request the _PSR method */ + /* Request the _STA method */ *(PULONG)InputBuffer.MethodName = 'ATS_'; InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE; @@ -346,7 +346,7 @@ CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject, ASSERT(UniqueId != NULL); *UniqueId = 0; - /* Request the _PSR method */ + /* Request the _UID method */ *(PULONG)InputBuffer.MethodName = 'DIU_'; InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE; From 5afb7ab003326eeaf3c40b2b8c19798225eeb8a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 4 Jun 2024 17:09:56 +0200 Subject: [PATCH 102/750] [NTOS:IO] IoVolumeDeviceToDosName(): Some stylistic changes. Minor formatting and comments improvements (typo fixes etc.) --- ntoskrnl/io/iomgr/volume.c | 72 +++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/ntoskrnl/io/iomgr/volume.c b/ntoskrnl/io/iomgr/volume.c index 024823636f5f4..600d899ce48b2 100644 --- a/ntoskrnl/io/iomgr/volume.c +++ b/ntoskrnl/io/iomgr/volume.c @@ -9,13 +9,13 @@ * Pierre Schweitzer (pierre.schweitzer@reactos.org) */ -/* INCLUDES *****************************************************************/ +/* INCLUDES ******************************************************************/ #include #define NDEBUG #include -/* GLOBALS ******************************************************************/ +/* GLOBALS *******************************************************************/ ERESOURCE IopDatabaseResource; LIST_ENTRY IopDiskFileSystemQueueHead, IopNetworkFileSystemQueueHead; @@ -1279,10 +1279,10 @@ NTAPI IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, OUT PUNICODE_STRING DosName) { - PIRP Irp; + NTSTATUS Status; ULONG Length; KEVENT Event; - NTSTATUS Status; + PIRP Irp; PFILE_OBJECT FileObject; PDEVICE_OBJECT DeviceObject; IO_STATUS_BLOCK IoStatusBlock; @@ -1290,10 +1290,10 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, MOUNTMGR_VOLUME_PATHS VolumePath; PMOUNTMGR_VOLUME_PATHS VolumePathPtr; /* - * This variable with be required to query device name. + * This variable is used to query the device name. * It's based on MOUNTDEV_NAME (mountmgr.h). - * Doing it that way will prevent dyn memory allocation. - * Device name won't be longer. + * Doing it this way prevents memory allocation. + * The device name won't be longer. */ struct { @@ -1303,10 +1303,11 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, PAGED_CODE(); - /* First step, getting device name */ + /* First, retrieve the corresponding device name */ KeInitializeEvent(&Event, NotificationEvent, FALSE); Irp = IoBuildDeviceIoControlRequest(IOCTL_MOUNTDEV_QUERY_DEVICE_NAME, - VolumeDeviceObject, NULL, 0, + VolumeDeviceObject, + NULL, 0, &DeviceName, sizeof(DeviceName), FALSE, &Event, &IoStatusBlock); if (!Irp) @@ -1320,15 +1321,12 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); Status = IoStatusBlock.Status; } - if (!NT_SUCCESS(Status)) { return Status; } - /* Now that we have the device name, we can query the MountMgr - * So, get its device object first. - */ + /* Now, query the MountMgr for the DOS path */ RtlInitUnicodeString(&MountMgrDevice, MOUNTMGR_DEVICE_NAME); Status = IoGetDeviceObjectPointer(&MountMgrDevice, FILE_READ_ATTRIBUTES, &FileObject, &DeviceObject); @@ -1337,16 +1335,16 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, return Status; } - /* Then, use the proper IOCTL to query the DOS name */ KeInitializeEvent(&Event, NotificationEvent, FALSE); Irp = IoBuildDeviceIoControlRequest(IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH, - DeviceObject, &DeviceName, sizeof(DeviceName), + DeviceObject, + &DeviceName, sizeof(DeviceName), &VolumePath, sizeof(VolumePath), FALSE, &Event, &IoStatusBlock); if (!Irp) { Status = STATUS_INSUFFICIENT_RESOURCES; - goto DereferenceFO; + goto Quit; } Status = IoCallDriver(DeviceObject, Irp); @@ -1356,41 +1354,37 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, Status = IoStatusBlock.Status; } - /* Only tolerated failure here is buffer too small, which is - * expected. - */ - if (!NT_SUCCESS(Status) && Status != STATUS_BUFFER_OVERFLOW) + /* The only tolerated failure here is buffer too small, which is expected */ + if (!NT_SUCCESS(Status) && (Status != STATUS_BUFFER_OVERFLOW)) { - goto DereferenceFO; + goto Quit; } - /* Compute needed size to store DOS name. - * Even if MOUNTMGR_VOLUME_PATHS allows bigger - * name lengths than MAXUSHORT, we can't use - * them, because we have to return this in an UNICODE_STRING - * that stores length on USHORT. - */ - Length = VolumePath.MultiSzLength + sizeof(VolumePath); + /* Compute the needed size to store the DOS name. + * Even if MOUNTMGR_VOLUME_PATHS allows bigger name lengths + * than MAXUSHORT, we can't use them, because we have to return + * this in an UNICODE_STRING that stores length in a USHORT. */ + Length = sizeof(VolumePath) + VolumePath.MultiSzLength; if (Length > MAXUSHORT) { Status = STATUS_INVALID_BUFFER_SIZE; - goto DereferenceFO; + goto Quit; } - /* Reallocate memory, even in case of success, because - * that's the buffer that will be returned to caller - */ + /* Reallocate the memory, even in case of success, because + * that's the buffer that will be returned to the caller */ VolumePathPtr = ExAllocatePoolWithTag(PagedPool, Length, 'D2d '); if (!VolumePathPtr) { Status = STATUS_INSUFFICIENT_RESOURCES; - goto DereferenceFO; + goto Quit; } - /* Requery DOS path with proper size */ + /* Re-query the DOS path with the proper size */ KeInitializeEvent(&Event, NotificationEvent, FALSE); Irp = IoBuildDeviceIoControlRequest(IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH, - DeviceObject, &DeviceName, sizeof(DeviceName), + DeviceObject, + &DeviceName, sizeof(DeviceName), VolumePathPtr, Length, FALSE, &Event, &IoStatusBlock); if (!Irp) @@ -1405,7 +1399,6 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); Status = IoStatusBlock.Status; } - if (!NT_SUCCESS(Status)) { goto ReleaseMemory; @@ -1420,16 +1413,15 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, RtlMoveMemory(DosName->Buffer, VolumePathPtr->MultiSz, VolumePathPtr->MultiSzLength); DosName->Buffer[DosName->Length / sizeof(WCHAR)] = UNICODE_NULL; - /* DON'T release buffer, just dereference FO, and return success */ + /* Don't release the buffer, just dereference the FO and return success */ Status = STATUS_SUCCESS; - goto DereferenceFO; + goto Quit; ReleaseMemory: ExFreePoolWithTag(VolumePathPtr, 'D2d '); -DereferenceFO: +Quit: ObDereferenceObject(FileObject); - return Status; } From e4748fe448e3e8b04d8082c7ca5e250706a4a8d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Tue, 4 Jun 2024 17:18:13 +0200 Subject: [PATCH 103/750] [NTOS:IO] IoVolumeDeviceToDosName(): Add SAL2 annotations, fix pool tag (#6989) The DEV2DOS tag value is from the official Windows pooltag.txt file. --- ntoskrnl/include/internal/tag.h | 1 + ntoskrnl/io/iomgr/volume.c | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/include/internal/tag.h b/ntoskrnl/include/internal/tag.h index 4c71be472400c..6febe9d6e5118 100644 --- a/ntoskrnl/include/internal/tag.h +++ b/ntoskrnl/include/internal/tag.h @@ -94,6 +94,7 @@ #define TAG_VPB ' BPV' #define TAG_RTLREGISTRY 'vrqR' #define TAG_PNP_DEVACTION 'aDpP' +#define TAG_DEV2DOS ' d2D' /* Loader Related Tags */ #define TAG_MODULE_OBJECT 'omlk' /* klmo - kernel ldr module object */ diff --git a/ntoskrnl/io/iomgr/volume.c b/ntoskrnl/io/iomgr/volume.c index 600d899ce48b2..3f614e27c98ca 100644 --- a/ntoskrnl/io/iomgr/volume.c +++ b/ntoskrnl/io/iomgr/volume.c @@ -1276,8 +1276,10 @@ IoSetSystemPartition(IN PUNICODE_STRING VolumeNameString) */ NTSTATUS NTAPI -IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, - OUT PUNICODE_STRING DosName) +IoVolumeDeviceToDosName( + _In_ PVOID VolumeDeviceObject, + _Out_ _When_(return==0, _At_(DosName->Buffer, __drv_allocatesMem(Mem))) + PUNICODE_STRING DosName) { NTSTATUS Status; ULONG Length; @@ -1373,7 +1375,7 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, /* Reallocate the memory, even in case of success, because * that's the buffer that will be returned to the caller */ - VolumePathPtr = ExAllocatePoolWithTag(PagedPool, Length, 'D2d '); + VolumePathPtr = ExAllocatePoolWithTag(PagedPool, Length, TAG_DEV2DOS); if (!VolumePathPtr) { Status = STATUS_INSUFFICIENT_RESOURCES; @@ -1418,7 +1420,7 @@ IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, goto Quit; ReleaseMemory: - ExFreePoolWithTag(VolumePathPtr, 'D2d '); + ExFreePoolWithTag(VolumePathPtr, TAG_DEV2DOS); Quit: ObDereferenceObject(FileObject); From be393a7484b714d64af77ee503126967eb6d3e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mahir=20G=C3=BCl?= Date: Mon, 6 Jan 2025 18:14:40 +0100 Subject: [PATCH 104/750] [NOTEPAD] Update Turkish (tr-TR) translation (#7368) --- base/applications/notepad/lang/tr-TR.rc | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/base/applications/notepad/lang/tr-TR.rc b/base/applications/notepad/lang/tr-TR.rc index f8016b4235d32..b1aaca4b1d18e 100644 --- a/base/applications/notepad/lang/tr-TR.rc +++ b/base/applications/notepad/lang/tr-TR.rc @@ -1,5 +1,12 @@ -// COPYRIGHT: 2012 Arda Tanrıkulu -// 2013-2019 Erdem Ersoy +/* + * PROJECT: ReactOS Notepad + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Turkish resource file + * TRANSLATORS: Copyright 2012 Arda Tanrıkulu + * Copyright 2013-2019 Erdem Ersoy + * Copyright 2021 Süleyman Poyraz + * Copyright 2024 Mahir Gül + */ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT @@ -173,12 +180,12 @@ BEGIN STRING_LINE_COLUMN "%d. Satır, %d. Sütun" STRING_PRINTERROR """%s"" dosyası yazdırılamıyor.\n\nYazıcının açık olduğundan ve doğru yapılandırıldığından emin olunuz." STRING_DEFAULTFONT "Lucida Console" - STRING_LINE_NUMBER_OUT_OF_RANGE "The specified line number is out of range." - STRING_NOWPRINTING "Now printing page..." - STRING_PRINTCANCELING "The print job is being canceled..." - STRING_PRINTCOMPLETE "Printing is successfully done." - STRING_PRINTCANCELED "Printing has been canceled." - STRING_PRINTFAILED "Printing failed." + STRING_LINE_NUMBER_OUT_OF_RANGE "Belirtilen satır numarası aralık dışındadır." + STRING_NOWPRINTING "Yazdırılıyor..." + STRING_PRINTCANCELING "Yazdırma işi iptal ediliyor..." + STRING_PRINTCOMPLETE "Yazdırma işlemi başarıyla tamamlandı." + STRING_PRINTCANCELED "Yazdırma işlemi iptal edildi." + STRING_PRINTFAILED "Yazdırma başarısız oldu." STRING_TEXT_DOCUMENT "Metin Belgesi" STRING_NOTEPAD_AUTHORS "Telif Hakları: 1997,98 Marcel Baur, 2000 Mike McCormack, 2002 Sylvain Petreolle, 2002 Andriy Palamarchuk\r\n" From 873488927202bed66a91fa975dc02cdc20c64afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mahir=20G=C3=BCl?= Date: Mon, 6 Jan 2025 18:15:21 +0100 Subject: [PATCH 105/750] [RAPPS] Update Turkish (tr-TR) translation (#7372) --- base/applications/rapps/lang/tr-TR.rc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/base/applications/rapps/lang/tr-TR.rc b/base/applications/rapps/lang/tr-TR.rc index e6fbdc062b2cf..f94c432487da0 100644 --- a/base/applications/rapps/lang/tr-TR.rc +++ b/base/applications/rapps/lang/tr-TR.rc @@ -178,9 +178,9 @@ BEGIN IDS_WELCOME_TEXT "Solda bir kategori seçiniz, ardından kurmak ya da kaldırmak için bir uygulama seçiniz.\nReactOS'un İnternet sitesi: " IDS_WELCOME_URL "https://reactos.org" - IDS_APPWIZ_TITLE "Add/Remove Programs" - IDS_APPWIZ_TEXT1 "Choose ""Applications"" or ""Updates"" to view the list of applications or updates installed on your system." - IDS_APPWIZ_TEXT2 "To remove a program or to modify its installed components, select it from the list and click on ""Uninstall"" or ""Modify""." + IDS_APPWIZ_TITLE "Program Ekle/Kaldır" + IDS_APPWIZ_TEXT1 "Sisteminizde yüklü olan uygulamaların veya güncellemelerin listesini görüntülemek için ""Uygulamalar"" veya ""Güncellemeler"" öğesini seçin." + IDS_APPWIZ_TEXT2 "Bir programı kaldırmak veya yüklü bileşenlerini değiştirmek için listeden seçin ve ""Kaldır"" veya ""Değiştir"" üzerine tıklayın." END STRINGTABLE @@ -213,7 +213,7 @@ BEGIN IDS_APP_DISPLAY_DETAILS "Detaylar" IDS_APP_DISPLAY_LIST "Liste" IDS_APP_DISPLAY_TILE "Karo" - IDS_NO_SEARCH_RESULTS "No search results" + IDS_NO_SEARCH_RESULTS "Arama sonucu yok" END STRINGTABLE @@ -266,5 +266,5 @@ END STRINGTABLE BEGIN - IDS_INSTGEN_CONFIRMUNINST "Are you sure you want to uninstall %s?" + IDS_INSTGEN_CONFIRMUNINST "Kaldırmak istediğinizden emin misiniz %s?" END From 10f862bd74f5d7d46d1e7d804cf5f3e800ac3865 Mon Sep 17 00:00:00 2001 From: Jose Carlos Jesus Date: Mon, 6 Jan 2025 17:17:00 +0000 Subject: [PATCH 106/750] [SHELL32] Fix typos and improve Portuguese (pt-PT) translation (#7374) - Fix typos and improve Portuguese (pt-PT) translation. - Add missing accel keys and fix accel collisions. - Improve Portuguese (pt-PT) translation. Fix text box width to fit all text. --- dll/win32/shell32/lang/pt-PT.rc | 58 ++++++++++++++++----------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc index 2ca5756dc8ed2..2236d5c1dae33 100644 --- a/dll/win32/shell32/lang/pt-PT.rc +++ b/dll/win32/shell32/lang/pt-PT.rc @@ -102,7 +102,7 @@ IDM_DVSELECT MENU BEGIN POPUP "" BEGIN - MENUITEM "Se&lect", 0 + MENUITEM "Se&leccionar", 0 END END @@ -213,7 +213,7 @@ BEGIN LTEXT "C&omentário:", IDC_SHORTCUT_COMMENT, 8, 154, 68, 10 EDITTEXT IDC_SHORTCUT_COMMENT_EDIT, 79, 152, 150, 14, ES_AUTOHSCROLL PUSHBUTTON "&Localizar destino...", IDC_SHORTCUT_FIND, 9, 172, 70, 14, ES_LEFT - PUSHBUTTON "Troc&ar ícone...", IDC_SHORTCUT_CHANGE_ICON, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "Alter&ar ícone...", IDC_SHORTCUT_CHANGE_ICON, 84, 172, 70, 14, ES_LEFT PUSHBUTTON "A&vançadas...", IDC_SHORTCUT_ADVANCED, 159, 172, 70, 14, ES_LEFT END @@ -256,7 +256,7 @@ BEGIN LTEXT "Atributos:", 14020, 8, 152, 46, 10 AUTOCHECKBOX "&Só de leitura", 14021, 58, 151, 68, 10 AUTOCHECKBOX "&Oculto", 14022, 126, 151, 55, 10 - AUTOCHECKBOX "&Arquivo", 14023, 181, 151, 59, 10 + AUTOCHECKBOX "A&rquivar", 14023, 181, 151, 59, 10 PUSHBUTTON "A&vançadas...", 14028, 158, 170, 70, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP END @@ -272,7 +272,7 @@ BEGIN CONTROL "Ficheiro", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP, 58, 35, 170, 10 LTEXT "Abre com:", 14006, 8, 53, 50, 10 ICON "", 14025, 58, 52, 11, 10, NOT WS_VISIBLE - PUSHBUTTON "&Alterar...", 14024, 168, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP //FIXME: accelerator collision &A. This one is most likely wrong. + PUSHBUTTON "&Alterar...", 14024, 168, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP EDITTEXT 14007, 58, 53, 100, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP LTEXT "", -1, 8, 68, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE LTEXT "Localização:", 14008, 8, 75, 45, 10 @@ -292,7 +292,7 @@ BEGIN LTEXT "Atributos:", 14020, 8, 189, 45, 10 AUTOCHECKBOX "&Só de leitura", 14021, 58, 188, 67, 10 AUTOCHECKBOX "&Oculto", 14022, 126, 188, 50, 10 - AUTOCHECKBOX "&Arquivo", 14023, 181, 188, 49, 10 //FIXME: accelerator collision &A. This one is most likely correct. + AUTOCHECKBOX "A&rquivar", 14023, 181, 188, 49, 10 PUSHBUTTON "A&vançadas...", 14028, 180, 185, 50, 15 END @@ -301,7 +301,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Versão" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Versão do ficheiro:", 14000, 10, 10, 55, 10 //FIXME: text truncation, suggestion: using just "Versão:", maybe in companion with writing "Versão do ficheiro" into the caption, if you think it is not obvious enough already! (Take into consideration how the user reaches that dialog! it is obvious that this is about the files version! + LTEXT "Versão:", 14000, 10, 10, 55, 10 EDITTEXT 14001, 77, 10, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER LTEXT "Descrição:", 14002, 10, 27, 45, 10 EDITTEXT 14003, 77, 27, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER @@ -354,16 +354,16 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN GROUPBOX "Verificar por erros...", -1, 5, 5, 230, 60 ICON IDI_SHELL_TOOLS_CHKDSK, IDC_STATIC, 13, 25, 21, 20 - LTEXT "Esta opção vai verificar o volume por erros.", -1, 40, 25, 160, 20 + LTEXT "Esta opção irá verificar se existem erros no volume.", -1, 40, 25, 160, 20 PUSHBUTTON "Verificar agora...", 14000, 130, 45, 90, 15 GROUPBOX "Desfragmentação", -1, 5, 65, 230, 60 ICON IDI_SHELL_TOOLS_DEFRAG, IDC_STATIC, 13, 85, 21, 20 - LTEXT "Esta opção vai desfragmentar os ficheiros no volume.", -1, 40, 85, 160, 20 + LTEXT "Esta opção irá desfragmentar os ficheiros contidos no volume.", -1, 40, 85, 160, 20 PUSHBUTTON "Desfragmentar agora...", 14001, 130, 105, 90, 15 GROUPBOX "Cópia de segurança", -1, 5, 130, 230, 60 ICON IDI_SHELL_TOOLS_BACKUP, IDC_STATIC, 13, 150, 21, 20 - LTEXT "Esta opção vai verificar os ficheiros do volume.", -1, 40, 150, 160, 20 - PUSHBUTTON "Criar cópia de Segurança...", 14002, 130, 170, 90, 15 + LTEXT "Esta opção irá fazer uma cópia de segurança dos ficheiros contidos no volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "Criar cópia de segurança...", 14002, 130, 170, 90, 15 END IDD_DRIVE_HARDWARE DIALOGEX 0, 0, 240, 220 @@ -400,11 +400,11 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 GROUPBOX "Propriedades para as localizações seleccionadas", -1, 10, 72, 220, 70 - RADIOBUTTON "&Tamanho personalizado:", 14001, 20, 90, 92, 10 + RADIOBUTTON "Tamanho &personalizado:", 14001, 20, 90, 92, 10 EDITTEXT 14002, 116, 103, 50, 14, WS_TABSTOP | ES_NUMBER - LTEXT "Tamanho M&áximo(MB):", -1, 20, 105, 75, 10 - RADIOBUTTON "Não mover os ficheiros para a &reciclagem. Apagá-los definitivamente.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "&Mostrar ecrâ de confirmação de eliminação", 14004, 20, 155, 140, 10 + LTEXT "&Tamanho máximo(MB):", -1, 20, 105, 75, 10 + RADIOBUTTON "&Não mover os ficheiros para a reciclagem. Apagá-los definitivamente.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Mostrar caixa de dialogo de confirmação de eliminação", 14004, 20, 155, 188, 10 END IDD_OPEN_WITH DIALOGEX 0, 0, 264, 256 @@ -438,8 +438,8 @@ BEGIN AUTORADIOBUTTON "Abrir cada pasta na sua &janela", IDC_FOLDER_OPTIONS_OWNWINDOW, 40, 82, 210, 10 GROUPBOX "Seleccione a seguinte opção", -1, 7, 110, 249, 64 CONTROL "", IDC_FOLDER_OPTIONS_CLICKICON, "Static", SS_ICON | WS_CHILD | WS_VISIBLE, 14, 120, 21, 20 - AUTORADIOBUTTON "&Click simples para abrir um item", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP - AUTORADIOBUTTON "&Duplo-click para abrir um item (um click para seleccionar)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 + AUTORADIOBUTTON "&Clique simples para abrir um item", IDC_FOLDER_OPTIONS_SINGLECLICK, 40, 120, 210, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Duplo-clique para abrir um item (um clique para seleccionar)", IDC_FOLDER_OPTIONS_DOUBLECLICK, 40, 156, 210, 10 AUTORADIOBUTTON "Sublinhar títulos de ícones consistentes com meu &navegador", IDC_FOLDER_OPTIONS_ULBROWSER, 50, 132, 205, 10, WS_TABSTOP | WS_GROUP AUTORADIOBUTTON "Sublinhar títulos de ícones sómente quando &apontados", IDC_FOLDER_OPTIONS_ULPOINT, 50, 144, 200, 10 PUSHBUTTON "&Restaurar predefinições", IDC_FOLDER_OPTIONS_RESTORE, 167, 178, 90, 14 @@ -613,7 +613,7 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Iniciar", IDOK, 53, 198, 60, 14 PUSHBUTTON "&Fechar", IDCANCEL, 118, 198, 60, 14 - LTEXT "Capacidade:", -1, 7, 6, 169, 9 //FIXME: needs an accelerator. In the past that was "Ca&pacidade:" and was most likely correct, but the &P is currently blocked by "&Permitir Compressão". Check Windows! + LTEXT "&Capacidade:", -1, 7, 6, 169, 9 COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP LTEXT "&Sistema de ficheiros", -1, 7, 35, 170, 9 COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP @@ -623,8 +623,8 @@ BEGIN LTEXT "&Nome do volume", -1, 7, 93, 170, 9 EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL GROUPBOX "&Opções", 4610, 7, 121, 170, 49 - AUTOCHECKBOX "Formatação &Rápida", 28674, 16, 135, 155, 10 - AUTOCHECKBOX "&Permitir Compressão", 28675, 16, 152, 155, 10 + AUTOCHECKBOX "Formatação &rápida", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Permitir compressão", 28675, 16, 152, 155, 10 END IDD_CHECK_DISK DIALOGEX 50, 50, 194, 115 @@ -635,8 +635,8 @@ BEGIN DEFPUSHBUTTON "Iniciar", IDOK, 63, 95, 60, 14 GROUPBOX "Opções verificação do disco", -1, 7, 6, 179, 40 PUSHBUTTON "Cancelar", IDCANCEL, 128, 95, 60, 14 - AUTOCHECKBOX "Corrigir erros do sistema de ficheiros automaticamente", 14000, 12, 15, 155, 10 //FIXME: needs an accel - AUTOCHECKBOX "&Procurar e tentar recuperar sectores danificados", 14001, 12, 30, 165, 10 + AUTOCHECKBOX "&Corrigir erros do sistema automaticamente", 14000, 12, 15, 155, 10 + AUTOCHECKBOX "&Procurar e recuperar sectores danificados", 14001, 12, 30, 165, 10 CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 50, 179, 8 LTEXT "", 14003, 60, 80, 170, 10 END @@ -665,8 +665,8 @@ BEGIN outra aplicação. Modificar este ficheiro pode danificar o seu\n\ sistema ou torná-lo instável.\n\n\ Tem a certeza que deseja abrir este ficheiro?", IDC_STATIC, 35, 5, 230, 60 - DEFPUSHBUTTON "&Sim", IDYES, 125, 55, 50, 14 - PUSHBUTTON "&Não", IDNO, 180, 55, 50, 14 + DEFPUSHBUTTON "Sim", IDYES, 125, 55, 50, 14 + PUSHBUTTON "Não", IDNO, 180, 55, 50, 14 END IDD_NEWEXTENSION DIALOGEX 0, 0, 260, 75 @@ -873,8 +873,8 @@ BEGIN /* Shortcut property sheet */ IDS_SHORTCUT_RUN_NORMAL "Normal window" - IDS_SHORTCUT_RUN_MIN "Minimized" - IDS_SHORTCUT_RUN_MAX "Maximized" + IDS_SHORTCUT_RUN_MIN "Minimizado" + IDS_SHORTCUT_RUN_MAX "Maximizado" /* Shell folder path default values. See also: dll/win32/userenv/lang */ IDS_PROGRAMS "Menu Iniciar\\Programas" @@ -928,8 +928,8 @@ BEGIN FCIDM_SHVIEW_NEWFOLDER "&Pasta" FCIDM_SHVIEW_NEWLINK "&Atalho" IDS_FOLDER_OPTIONS "Opções das Pastas" - IDS_TASKBAR_OPTIONS "Taskbar and Start Menu" - IDS_TASKBAR_OPTIONS_INFOTIP "Customize the Start Menu and the taskbar, such as the types of items to be displayed and how they should appear." + IDS_TASKBAR_OPTIONS "Barra de tarefas e menu iniciar" + IDS_TASKBAR_OPTIONS_INFOTIP "Personaliza o menu Iniciar e a barra de tarefas, como o tipo de itens a apresentar e o seu aspecto visual." IDS_RECYCLEBIN_LOCATION "Localização da reciclagem" IDS_RECYCLEBIN_DISKSPACE "Espaço disponível" IDS_EMPTY_BITBUCKET "Esvaziar reciclagem" @@ -944,8 +944,8 @@ BEGIN IDS_CANTDISCONNECT "Não foi possível desconectar (Código de erro: %lu)." IDS_NONE "(Nenhum)" - IDS_EXPAND "Exp&and" - IDS_COLLAPSE "Coll&apse" + IDS_EXPAND "Exp&andir" + IDS_COLLAPSE "Col&apsar" /* Friendly File Type Names */ IDS_DIRECTORY "Pasta" From c6749d5c4a05481f066bdef3493351018a6e7997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Zouzal=C3=ADk?= Date: Mon, 6 Jan 2025 18:18:14 +0100 Subject: [PATCH 107/750] [ACCESS] Update Czech (cs-CZ) translation (#7533) --- dll/cpl/access/lang/cs-CZ.rc | 178 ++++++++++++++++++----------------- 1 file changed, 93 insertions(+), 85 deletions(-) diff --git a/dll/cpl/access/lang/cs-CZ.rc b/dll/cpl/access/lang/cs-CZ.rc index a79053291ae80..848cd5d22eb09 100644 --- a/dll/cpl/access/lang/cs-CZ.rc +++ b/dll/cpl/access/lang/cs-CZ.rc @@ -1,3 +1,11 @@ +/* + * PROJECT: ReactOS Accessibility Control Panel + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Czech resource file + * TRANSLATORS: Copyright 2007 Kamil Horníček + * Copyright 2014 Radek Liška (Black_Fox) + * Copyright 2024 Václav Zouzalík (Venca24) + */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT IDD_PROPPAGEKEYBOARD DIALOGEX 0, 0, 246, 220 @@ -33,7 +41,7 @@ BEGIN LTEXT "Použijte funkci Zobrazení zvuku, pokud chcete aby ReactOS vizuálně upozorňoval na každý zvuk vydaný systémem.", -1, 12, 20, 222, 29 AUTOCHECKBOX "&Používat funkci Popis zvuku", IDC_SENTRY_BOX, 12, 49, 120, 14 - LTEXT "Use the following warning:", IDC_SENTRY_TEXT, 12, 72, 222, 11 + LTEXT "Použít následující upozornění:", IDC_SENTRY_TEXT, 12, 72, 222, 11 COMBOBOX IDC_SENTRY_COMBO, 12, 83, 222, 56, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP GROUPBOX "Funkce Zobrazení zvuku", -1, 6, 115, 234, 67 @@ -52,17 +60,17 @@ BEGIN -1, 12, 20, 222, 29 AUTOCHECKBOX "&Použít funkci Vysoký kontrast", IDC_CONTRAST_BOX, 12, 49, 126, 14 PUSHBUTTON "&Nastavení", IDC_CONTRAST_BUTTON, 144, 49, 90, 14 - GROUPBOX "Cursor options", -1, 6, 79, 234, 115 - LTEXT "Use the track bars to modify the blinking speed of the cursor and its width.", + GROUPBOX "Nastavení kurzoru", -1, 6, 79, 234, 115 + LTEXT "Použijte posuvníky pro změnu rychlosti blikání a šířky kurzoru.", -1, 12, 88, 222, 20 - CTEXT "Blinking speed:", -1, 12, 115, 222, 11 - LTEXT "None", -1, 18, 130, 36, 11 - LTEXT "Fast", -1, 192, 130, 36, 11 + CTEXT "Rychlost blikání:", -1, 12, 115, 222, 11 + LTEXT "Žádné", -1, 18, 130, 36, 11 + LTEXT "Rychlé", -1, 192, 130, 36, 11 CONTROL "", IDC_CURSOR_BLINK_TRACK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 60, 124, 126, 20 - CTEXT "Cursor width:", -1, 12, 151, 222, 11 - LTEXT "Narrow", -1, 18, 171, 36, 11 - LTEXT "Wide", -1, 192, 171, 36, 11 + CTEXT "Šířka kurzoru:", -1, 12, 151, 222, 11 + LTEXT "Úzký", -1, 18, 171, 36, 11 + LTEXT "Široký", -1, 192, 171, 36, 11 CONTROL "", IDC_CURSOR_WIDTH_TRACK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 60, 169, 126, 20 LTEXT "", IDC_CURSOR_WIDTH_TEXT, 18, 142, 24, 16 @@ -109,155 +117,155 @@ END IDD_STICKYKEYSOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Sticky Keys Settings" +CAPTION "Nastavení funkce Jedním prstem" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Keys", -1, 6, 11, 234, 62 - LTEXT "Press the SHIFT-Key 5 times in order to activate the Sticky Keys feature.", + GROUPBOX "Klávesy", -1, 6, 11, 234, 62 + LTEXT "Aktivujte funkci Jedním prstem stisknutím klávesy SHIFT 5krát.", -1, 12, 20, 222, 29 - AUTOCHECKBOX "A&ctivate sticky keys", IDC_STICKY_ACTIVATE_CHECK, 12, 49, 222, 14 - GROUPBOX "Options", -1, 6, 83, 234, 44 - AUTOCHECKBOX "&Press modifier key twice to lock", IDC_STICKY_LOCK_CHECK, + AUTOCHECKBOX "A&ktivovat Jedním prstem", IDC_STICKY_ACTIVATE_CHECK, 12, 49, 222, 14 + GROUPBOX "Nastavení", -1, 6, 83, 234, 44 + AUTOCHECKBOX "&Stiskněte modifikační klávesu dvakrát pro její aktivaci", IDC_STICKY_LOCK_CHECK, 12, 94, 222, 14 - AUTOCHECKBOX "&Turn StickyKeys off if two keys are pressed at once", IDC_STICKY_UNLOCK_CHECK, + AUTOCHECKBOX "Vypnou&t, když jsou stisknuty dvě klávesy najednou", IDC_STICKY_UNLOCK_CHECK, 12, 106, 222, 14 - GROUPBOX "Notifications", -1, 6, 133, 234, 44 - AUTOCHECKBOX "&Make sounds when the modifier key is pressed", IDC_STICKY_SOUND_CHECK, + GROUPBOX "Notifikace", -1, 6, 133, 234, 44 + AUTOCHECKBOX "&Přehrát zvuk při stisku modifikační klávesy", IDC_STICKY_SOUND_CHECK, 12, 148, 222, 14 - AUTOCHECKBOX "&Show StickyKeys status on screen", IDC_STICKY_STATUS_CHECK, + AUTOCHECKBOX "&Zobrazit stav funkce Jedním prstem na obrazovce", IDC_STICKY_STATUS_CHECK, 12, 160, 222, 14 DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_FILTERKEYSOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Filter Keys Settings" +CAPTION "Nastavení Filtrování kláves" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Keyboard shortcut", -1, 6, 11, 234, 62 - LTEXT "The shortcut for FilterKeys is:\nHold down for eight seconds.", + GROUPBOX "Klávesová zkratka", -1, 6, 11, 234, 62 + LTEXT "Klávesová zkratka pro Filtrování kláves je:\nPodržte po osm sekund.", -1, 12, 20, 222, 29 - AUTOCHECKBOX "&Use shortcut", IDC_FILTER_ACTIVATE_CHECK, 12, 49, 126, 14 - GROUPBOX "Filter options", -1, 6, 79, 234, 79 - AUTORADIOBUTTON "Ign&ore repeated keystrokes", IDC_FILTER_BOUNCE_RADIO, + AUTOCHECKBOX "&Použít klávesovou zkratku", IDC_FILTER_ACTIVATE_CHECK, 12, 49, 126, 14 + GROUPBOX "Nastavení filtrování", -1, 6, 79, 234, 79 + AUTORADIOBUTTON "Ign&orovat opakovaná stisknutí", IDC_FILTER_BOUNCE_RADIO, 12, 91, 120, 11, WS_GROUP | WS_TABSTOP - AUTORADIOBUTTON "Ig&nore quick keystrokes and slow down the repeat rate", IDC_FILTER_REPEAT_RADIO, + AUTORADIOBUTTON "Ig&norovat rychlá stisknutí a zpomalit opakování", IDC_FILTER_REPEAT_RADIO, 12, 106, 120, 20, BS_TOP | BS_MULTILINE - PUSHBUTTON "&Settings", IDC_FILTER_BOUNCE_BUTTON, 144, 88, 90, 14, WS_GROUP - PUSHBUTTON "S&ettings", IDC_FILTER_REPEAT_BUTTON, 144, 106, 90, 14, WS_GROUP - LTEXT "&Click here and type here to test the settings:", -1, 12, 129, 222, 11 + PUSHBUTTON "&Nastavení", IDC_FILTER_BOUNCE_BUTTON, 144, 88, 90, 14, WS_GROUP + PUSHBUTTON "N&astavení", IDC_FILTER_REPEAT_BUTTON, 144, 106, 90, 14, WS_GROUP + LTEXT "&Klikněte zde a pište pro vyzkoušení nastavení:", -1, 12, 129, 222, 11 EDITTEXT IDC_FILTER_TEST_EDIT, 12, 138, 222, 14, WS_GROUP | ES_AUTOHSCROLL - GROUPBOX "Notifications", -1, 6, 161, 234, 41 - AUTOCHECKBOX "&Beep when keys pressed or accepted", IDC_FILTER_SOUND_CHECK, + GROUPBOX "Notifikace", -1, 6, 161, 234, 41 + AUTOCHECKBOX "&Pípnout když je klávesa stisknuta nebo přijata", IDC_FILTER_SOUND_CHECK, 12, 169, 222, 10 - AUTOCHECKBOX "S&how FilterKey status on screen", IDC_FILTER_STATUS_CHECK, + AUTOCHECKBOX "&Zobrazit stav filtrování na obrazovce", IDC_FILTER_STATUS_CHECK, 12, 188, 222, 10 DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_TOGGLEKEYSOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Toggle Keys Settings" +CAPTION "Nastavení ozvučení kláves" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Keyboard shortcut", -1, 6, 11, 234, 62 - LTEXT "The shortcut for ToggleKeys is:\nHold down for five seconds.", + GROUPBOX "Klávesová zkratka", -1, 6, 11, 234, 62 + LTEXT "Klávesová zkratka pro zvučení kláves je:\nPodržte po dobu pěti sekund.", -1, 12, 20, 222, 29 - AUTOCHECKBOX "Use &shortcut", IDC_TOGGLE_ACTIVATE_CHECK, 12, 49, 222, 14 + AUTOCHECKBOX "Použít &klávesovou zkratku", IDC_TOGGLE_ACTIVATE_CHECK, 12, 49, 222, 14 DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_CONTRASTOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "High Contrast Settings" +CAPTION "Nastavení Vysokého kontrastu" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Keyboard shortcut", -1, 6, 11, 234, 62 - LTEXT "The shortcut for High Contrast is:\nPress .", + GROUPBOX "Klávesová zkratka", -1, 6, 11, 234, 62 + LTEXT "Klávesová zkratka pro Vysoký kontrast je:\nStiskněte .", -1, 12, 20, 222, 29 - AUTOCHECKBOX "&Use shortcut", IDC_CONTRAST_ACTIVATE_CHECK, 12, 49, 222, 14 - GROUPBOX "High Contrast Color Scheme", -1, 6, 83, 234, 44 - LTEXT "Current Color Scheme:", -1, 12, 94, 222, 11 + AUTOCHECKBOX "Po&užít klávesovou zkratku", IDC_CONTRAST_ACTIVATE_CHECK, 12, 49, 222, 14 + GROUPBOX "Barevné schéma Vysokého kontrastu", -1, 6, 83, 234, 44 + LTEXT "Aktuální barevné schéma:", -1, 12, 94, 222, 11 COMBOBOX IDC_CONTRAST_COMBO, 12, 103, 222, 56, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_MOUSEKEYSOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Mouse Keys Settings" +CAPTION "Nastavení Myš klávesnicí" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Keyboard shortcut", -1, 6, 11, 234, 62 - LTEXT "The shortcut for Mouse Keys is:\nPress .", + GROUPBOX "Klávesová zkratka", -1, 6, 11, 234, 62 + LTEXT "Klávesová zkratka pro Myš klávesnicí je:\nStistkněte .", -1, 12, 20, 222, 29 - AUTOCHECKBOX "&Use shortcut", IDC_MOUSEKEYS_ACTIVATE_CHECK, + AUTOCHECKBOX "Po&užít klávesovou zkratku", IDC_MOUSEKEYS_ACTIVATE_CHECK, 12, 49, 222, 14 - GROUPBOX "Pointer speed", -1, 6, 83, 234, 83 - LTEXT "&Top speed:", -1, 12, 96, 48, 11 - LTEXT "Low", -1, 66, 96, 18, 11 + GROUPBOX "Rychlost kurzoru", -1, 6, 83, 234, 83 + LTEXT "&Nejvyšší:", -1, 12, 96, 48, 11 + LTEXT "Nízká", -1, 66, 96, 18, 11 CONTROL "", IDC_MOUSEKEYS_SPEED_TRACK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 94, 114, 20 - LTEXT "High", -1, 204, 96, 18, 11 - LTEXT "&Acceleration:", -1, 12, 123, 48, 11 - LTEXT "Slow", -1, 66, 123, 18, 11 + LTEXT "Vysoká", -1, 204, 96, 24, 11 + LTEXT "&Zrychlení:", -1, 12, 123, 48, 11 + LTEXT "Pomalé", -1, 66, 123, 22, 11 CONTROL "", IDC_MOUSEKEYS_ACCEL_TRACK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 121, 114, 20 - LTEXT "Fast", -1, 204, 123, 18, 11 - AUTOCHECKBOX "&Hold down Ctrl to speed up and Shift to slow down", IDC_MOUSEKEYS_SPEED_CHECK, + LTEXT "Rychlé", -1, 204, 123, 20, 11 + AUTOCHECKBOX "&Podržet Ctrl pro zrychlení a Shift pro zpomalení", IDC_MOUSEKEYS_SPEED_CHECK, 12, 142, 222, 14 - LTEXT "Use MouseKeys when NumLock is:", -1, 6, 171, 120, 11 - AUTORADIOBUTTON "O&n", IDC_MOUSEKEYS_ON_RADIO, 162, 171, 30, 11 - AUTORADIOBUTTON "Of&f", IDC_MOUSEKEYS_OFF_RADIO, 198, 171, 30, 11 - AUTOCHECKBOX "&Show MouseKey status on screen", IDC_MOUSEKEYS_STATUS_CHECK, + LTEXT "Použít Myš klávesnicí když NumLock je:", -1, 6, 171, 120, 11 + AUTORADIOBUTTON "Z&ap.", IDC_MOUSEKEYS_ON_RADIO, 162, 171, 30, 11 + AUTORADIOBUTTON "&Vyp.", IDC_MOUSEKEYS_OFF_RADIO, 198, 171, 30, 11 + AUTOCHECKBOX "Z&obrazit stav Myši klávesnicí na obrazovce", IDC_MOUSEKEYS_STATUS_CHECK, 6, 184, 222, 14 DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_BOUNCEKEYSOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Advanced FilterKeys Settings" +CAPTION "Pokročilá nastavení Filtrování kláves" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Bounce Keys", -1, 6, 11, 234, 47 - LTEXT "&Ignore keystrokes repeated faster than:", -1, 12, 21, 222, 20 + GROUPBOX "Odrazové klávesy", -1, 6, 11, 234, 47 + LTEXT "&Ignorovat stisky kláves opakované rychleji než:", -1, 12, 21, 222, 20 COMBOBOX IDC_BOUNCE_TIME_COMBO, 12, 34, 222, 56, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP - LTEXT "&Test area:", -1, 6, 68, 48, 11 + LTEXT "&Test:", -1, 6, 68, 48, 11 EDITTEXT IDC_BOUNCE_TEST_EDIT, 60, 65, 180, 14, ES_AUTOHSCROLL DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_REPEATKEYSOPTIONS DIALOGEX 0, 0, 246, 220 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Advanced FilterKeys Settings" +CAPTION "Pokročilá nastavení Filtrování kláves" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Repeat Keys", -1, 6, 11, 234, 106 - LTEXT "Override settings on the Keyboard control panel:", + GROUPBOX "Opakování kláves", -1, 6, 11, 234, 106 + LTEXT "Přepsat nastavení ve Vlastnostech klávesnice:", -1, 12, 20, 222, 20 - AUTORADIOBUTTON "&No keyboard repeat", IDC_REPEAT_NOREPEAT_RADIO, 12, 32, 78, 11, WS_GROUP - AUTORADIOBUTTON "&Slow down keyboard repeat rates", IDC_REPEAT_REPEAT_RADIO, 12, 45, 131, 11 - LTEXT "Repeat &delay:", -1, 24, 60, 60, 11 + AUTORADIOBUTTON "Žád&né opakování kláves", IDC_REPEAT_NOREPEAT_RADIO, 12, 32, 90, 11, WS_GROUP + AUTORADIOBUTTON "&Zpomalit rychlost opakování kláves", IDC_REPEAT_REPEAT_RADIO, 12, 45, 131, 11 + LTEXT "Zpož&dění:", -1, 24, 60, 60, 11 COMBOBOX IDC_REPEAT_DELAY_COMBO, 24, 71, 210, 56, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP - LTEXT "Repeat &rate:", -1, 24, 89, 60, 11 + LTEXT "&Rychlost:", -1, 24, 89, 60, 11 COMBOBOX IDC_REPEAT_REPEAT_COMBO, 24, 100, 210, 65, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP - GROUPBOX "Slow Keys", -1, 6, 124, 234, 42 - LTEXT "&Keys must be held down for:", -1, 12, 133, 222, 11 + GROUPBOX "Pomalé klávesy", -1, 6, 124, 234, 42 + LTEXT "&Klávesa musí být podržena po:", -1, 12, 133, 222, 11 COMBOBOX IDC_REPEAT_WAIT_COMBO, 12, 150, 222, 74, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP - LTEXT "&Test area:", -1, 6, 178, 48, 11 + LTEXT "&Test:", -1, 6, 178, 48, 11 EDITTEXT IDC_REPEAT_TEST_EDIT, 60, 180, 180, 14, ES_AUTOHSCROLL DEFPUSHBUTTON "OK", IDOK, 135, 207, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 189, 207, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 207, 50, 14 END IDD_SERIALKEYSOPTIONS DIALOGEX 0, 0, 246, 220 @@ -282,10 +290,10 @@ STRINGTABLE BEGIN IDS_CPLSYSTEMNAME "Možnosti usnadnění" IDS_CPLSYSTEMDESCRIPTION "Upraví možnosti usnadnění pro tento počítač." - IDS_SENTRY_NONE "[None]" - IDS_SENTRY_TITLE "Flash the titlebar" - IDS_SENTRY_WINDOW "Flash the active window" - IDS_SENTRY_DISPLAY "Flash the desktop" - IDS_SECONDS "Seconds" - IDS_MINUTES "Minutes" + IDS_SENTRY_NONE "[Žádné]" + IDS_SENTRY_TITLE "Zablikat horní lištou" + IDS_SENTRY_WINDOW "Zablikat aktivním oknem" + IDS_SENTRY_DISPLAY "Zablikat plochou" + IDS_SECONDS "sekund" + IDS_MINUTES "minut" END From c3e14b54aeb71901fb0e6bc9b49e62e26fdc5f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Zouzal=C3=ADk?= Date: Mon, 6 Jan 2025 18:19:54 +0100 Subject: [PATCH 108/750] [USERINIT] Add Esperanto (eo-AA) translation (#7534) --- base/system/userinit/lang/eo-AA.rc | 53 ++++++++++++++++++++++++++++++ base/system/userinit/userinit.rc | 3 ++ 2 files changed, 56 insertions(+) create mode 100644 base/system/userinit/lang/eo-AA.rc diff --git a/base/system/userinit/lang/eo-AA.rc b/base/system/userinit/lang/eo-AA.rc new file mode 100644 index 0000000000000..a5fe20e83d605 --- /dev/null +++ b/base/system/userinit/lang/eo-AA.rc @@ -0,0 +1,53 @@ +/* + * PROJECT: ReactOS Userinit Logon Application + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Esperanto resource file + * TRANSLATOR: Copyright 2024 Václav Zouzalík (Venca24) + */ + +LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT + +IDD_LOCALEPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS LiveCD" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "IDB_LOGO", IDC_LOCALELOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 4, 290, 99 + RTEXT "&Lingvo:", IDC_STATIC, 20, 109, 106, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + COMBOBOX IDC_LANGUAGELIST, 132, 107, 176, 142, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | CBS_SORT | WS_VSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP + RTEXT "&Klavararanĝo:", IDC_STATIC, 20, 132, 106, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + COMBOBOX IDC_LAYOUTLIST, 132, 130, 176, 81, CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT | CBS_SORT | WS_VSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "Elektu vian lingvon kaj klavararanĝon kaj klaku al Sekva por daŭri.", IDC_STATIC, 7, 152, 300, 8 + + CONTROL "", IDC_STATIC, "STATIC", SS_ETCHEDHORZ, 0, 165, 317, 1 + DEFPUSHBUTTON "&Sekva", IDOK, 205, 172, 50, 14 + PUSHBUTTON "&Nuligi", IDCANCEL, 260, 172, 50, 14 +END + +IDD_STARTPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "ReactOS LiveCD" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "IDB_LOGO", IDC_STARTLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 4, 290, 99 + DEFPUSHBUTTON "Funkciigi ReactOS &Live CD", IDC_RUN, 71, 108, 175, 21 + PUSHBUTTON "&Instali ReactOS", IDC_INSTALL, 71, 136, 175, 21 + + // LTEXT "", IDC_STATIC, 7, 152, 300, 8 + + CONTROL "", IDC_STATIC, "STATIC", SS_ETCHEDHORZ, 0, 165, 317, 1 + PUSHBUTTON "&Antaŭa", IDOK, 205, 172, 50, 14 + PUSHBUTTON "&Nuligi", IDCANCEL, 260, 172, 50, 14 +END + +STRINGTABLE +BEGIN + IDS_SHELL_FAIL "Userinit malsukcesis startigi la ŝelon!" + IDS_INSTALLER_FAIL "Userinit malsukcesis startigi la instalilon!" + IDS_CANCEL_CONFIRM "Ĉu vi certas, ke vi volas foriri el ReactOS LiveCD?\nSe vi elektas tion, via komputilo povas restarti." +END + +STRINGTABLE +BEGIN + IDS_SPAIN "Hispana (Hispanio)" +END diff --git a/base/system/userinit/userinit.rc b/base/system/userinit/userinit.rc index c0c7fb917fedc..679b0a8dbeead 100644 --- a/base/system/userinit/userinit.rc +++ b/base/system/userinit/userinit.rc @@ -32,6 +32,9 @@ IDB_ROSMASK BITMAP "res/rosbitmap_mask.bmp" #ifdef LANGUAGE_EN_US #include "lang/en-US.rc" #endif +#ifdef LANGUAGE_EO_AA + #include "lang/eo-AA.rc" +#endif #ifdef LANGUAGE_ES_ES #include "lang/es-ES.rc" #endif From e0e45ffa1a59b6e228d2e3879ea986c30d9ead70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 27 Dec 2024 12:05:43 +0100 Subject: [PATCH 109/750] [PARTMGR_APITEST] Add a test suite for the partition manager (#7591) CORE-13525 Add a test for IOCTL_STORAGE_GET_DEVICE_NUMBER. --- modules/rostests/apitests/CMakeLists.txt | 1 + .../rostests/apitests/partmgr/CMakeLists.txt | 17 + .../apitests/partmgr/StorDeviceNumber.c | 306 ++++++++++++++++++ modules/rostests/apitests/partmgr/precomp.h | 20 ++ modules/rostests/apitests/partmgr/testlist.c | 10 + 5 files changed, 354 insertions(+) create mode 100644 modules/rostests/apitests/partmgr/CMakeLists.txt create mode 100644 modules/rostests/apitests/partmgr/StorDeviceNumber.c create mode 100644 modules/rostests/apitests/partmgr/precomp.h create mode 100644 modules/rostests/apitests/partmgr/testlist.c diff --git a/modules/rostests/apitests/CMakeLists.txt b/modules/rostests/apitests/CMakeLists.txt index 17a36e94d2314..92ea11342a9f3 100644 --- a/modules/rostests/apitests/CMakeLists.txt +++ b/modules/rostests/apitests/CMakeLists.txt @@ -39,6 +39,7 @@ add_subdirectory(netshell) add_subdirectory(ntdll) add_subdirectory(ole32) add_subdirectory(opengl32) +add_subdirectory(partmgr) add_subdirectory(pefile) add_subdirectory(powrprof) add_subdirectory(rtl) diff --git a/modules/rostests/apitests/partmgr/CMakeLists.txt b/modules/rostests/apitests/partmgr/CMakeLists.txt new file mode 100644 index 0000000000000..32684f3252eb8 --- /dev/null +++ b/modules/rostests/apitests/partmgr/CMakeLists.txt @@ -0,0 +1,17 @@ + +list(APPEND SOURCE + StorDeviceNumber.c) + +list(APPEND PCH_SKIP_SOURCE + testlist.c) + +add_executable(partmgr_apitest + ${SOURCE} + ${PCH_SKIP_SOURCE}) + +target_link_libraries(partmgr_apitest wine ${PSEH_LIB}) +set_module_type(partmgr_apitest win32cui) +add_importlibs(partmgr_apitest msvcrt kernel32 ntdll) +# TODO: Enable this when we get more than one source file to justify its use +#add_pch(partmgr_apitest precomp.h "${PCH_SKIP_SOURCE}") +add_rostests_file(TARGET partmgr_apitest) diff --git a/modules/rostests/apitests/partmgr/StorDeviceNumber.c b/modules/rostests/apitests/partmgr/StorDeviceNumber.c new file mode 100644 index 0000000000000..8407b0475f285 --- /dev/null +++ b/modules/rostests/apitests/partmgr/StorDeviceNumber.c @@ -0,0 +1,306 @@ +/* + * PROJECT: ReactOS API Tests + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Test for IOCTL_STORAGE_GET_DEVICE_NUMBER + * COPYRIGHT: Copyright 2024 Hermès Bélusca-Maïto + */ + +#include "precomp.h" +#include + +static LPCSTR wine_dbgstr_us(const UNICODE_STRING *us) +{ + if (!us) return "(null)"; + return wine_dbgstr_wn(us->Buffer, us->Length / sizeof(WCHAR)); +} + +/* Flags combination allowing all the read, write and delete share modes. + * Currently similar to FILE_SHARE_VALID_FLAGS. */ +#define FILE_SHARE_ALL \ + (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE) + +static BOOLEAN +Test_Device_StorDeviceNumber( + _In_ PCWSTR NtDeviceName) +{ + BOOLEAN Success = FALSE; // Suppose failure. + NTSTATUS Status; + HANDLE DeviceHandle1 = NULL, DeviceHandle2 = NULL; + FILE_FS_DEVICE_INFORMATION DeviceInfo; + STORAGE_DEVICE_NUMBER DeviceNumber; + UNICODE_STRING DeviceName; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + WCHAR NtLegacyDeviceName[MAX_PATH]; + + ULONG BufferSize; + struct { OBJECT_NAME_INFORMATION; WCHAR Buffer[MAX_PATH]; } DeviceName1Buffer; + PUNICODE_STRING DeviceName1 = &DeviceName1Buffer.Name; + struct { OBJECT_NAME_INFORMATION; WCHAR Buffer[MAX_PATH]; } DeviceName2Buffer; + PUNICODE_STRING DeviceName2 = &DeviceName2Buffer.Name; + + /* Open a handle to the device */ + RtlInitUnicodeString(&DeviceName, NtDeviceName); + InitializeObjectAttributes(&ObjectAttributes, + &DeviceName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + Status = NtOpenFile(&DeviceHandle1, + FILE_READ_ATTRIBUTES | SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + FILE_SHARE_ALL, + /* FILE_NON_DIRECTORY_FILE | */ FILE_SYNCHRONOUS_IO_NONALERT); + ok_ntstatus(Status, STATUS_SUCCESS); + if (!NT_SUCCESS(Status)) + { + skip("Device '%s': Opening failed\n", wine_dbgstr_us(&DeviceName)); + goto Quit; + } + + /* Verify the device information before proceeding further */ + Status = NtQueryVolumeInformationFile(DeviceHandle1, + &IoStatusBlock, + &DeviceInfo, + sizeof(DeviceInfo), + FileFsDeviceInformation); + ok_ntstatus(Status, STATUS_SUCCESS); + if (!NT_SUCCESS(Status)) + { + skip("FileFsDeviceInformation('%s') failed, Status 0x%08lx\n", + wine_dbgstr_us(&DeviceName), Status); + goto Quit; + } + + /* Ignore volumes that are NOT on usual disks */ + switch (DeviceInfo.DeviceType) + { + /* Testable devices */ + case FILE_DEVICE_CD_ROM: + // case FILE_DEVICE_CD_ROM_FILE_SYSTEM: + case FILE_DEVICE_DISK: + // case FILE_DEVICE_DISK_FILE_SYSTEM: + // case FILE_DEVICE_NETWORK: + // case FILE_DEVICE_NETWORK_FILE_SYSTEM: + case FILE_DEVICE_VIRTUAL_DISK: + break; + + /* Untestable devices */ + default: + skip("Device '%s': Cannot test, device type %lu\n", + wine_dbgstr_us(&DeviceName), DeviceInfo.DeviceType); + goto Quit; + } +#if 0 + if (DeviceInfo.DeviceType != FILE_DEVICE_DISK && + DeviceInfo.DeviceType != FILE_DEVICE_VIRTUAL_DISK && + DeviceInfo.DeviceType != FILE_DEVICE_CD_ROM) + { + skip("Device '%s': Cannot test, device type %lu\n", + wine_dbgstr_us(&DeviceName), DeviceInfo.DeviceType); + goto Quit; + } +#endif + + /* + * Retrieve the storage device number. + * Note that this call is unsupported if this is a dynamic volume. + * NOTE: Usually fails for floppy disks. + */ + Status = NtDeviceIoControlFile(DeviceHandle1, + NULL, NULL, NULL, + &IoStatusBlock, + IOCTL_STORAGE_GET_DEVICE_NUMBER, + NULL, 0, + &DeviceNumber, sizeof(DeviceNumber)); + if (!NT_SUCCESS(Status)) + { + skip("Device '%s': Couldn't retrieve disk number\n", wine_dbgstr_us(&DeviceName)); + goto Quit; + } + ok(DeviceNumber.DeviceType == DeviceInfo.DeviceType, + "Device '%s': Device type mismatch\n", wine_dbgstr_us(&DeviceName)); + + /* NOTE: this value is set to 0xFFFFFFFF (-1) for the disks that + * represent the physical paths of a multipath I/O (MPIO) disk. */ + ok(DeviceNumber.DeviceNumber != ULONG_MAX, + "Device '%s': Invalid disk number reported\n", wine_dbgstr_us(&DeviceName)); + if (DeviceNumber.DeviceNumber == ULONG_MAX) + goto Quit; + + switch (DeviceInfo.DeviceType) + { + /* Testable devices */ + case FILE_DEVICE_CD_ROM: + // case FILE_DEVICE_CD_ROM_FILE_SYSTEM: + { + /* CD-ROMs don't have partitions, their partition number is -1 */ + ok(DeviceNumber.PartitionNumber == ULONG_MAX, + "Device '%s': Invalid partition number (%lu) reported, expected ULONG_MAX (-1)\n", + wine_dbgstr_us(&DeviceName), DeviceNumber.PartitionNumber); + + /* Map to an NT device name */ + RtlStringCchPrintfW(NtLegacyDeviceName, _countof(NtLegacyDeviceName), + L"\\Device\\CdRom%lu", + DeviceNumber.DeviceNumber); + break; + } + + case FILE_DEVICE_DISK: + // case FILE_DEVICE_DISK_FILE_SYSTEM: + case FILE_DEVICE_VIRTUAL_DISK: + { + /* Check whether this is a floppy or a partitionable device */ + if (DeviceInfo.Characteristics & FILE_FLOPPY_DISKETTE) + { + /* Floppies don't have partitions, their partition number is -1 */ + ok(DeviceNumber.PartitionNumber == ULONG_MAX, + "Device '%s': Invalid partition number (%lu) reported, expected ULONG_MAX (-1)\n", + wine_dbgstr_us(&DeviceName), DeviceNumber.PartitionNumber); + + /* Map to an NT device name */ + RtlStringCchPrintfW(NtLegacyDeviceName, _countof(NtLegacyDeviceName), + L"\\Device\\Floppy%lu", + DeviceNumber.DeviceNumber); + } + else + { + /* The device is partitionable, so it must have a valid partition number */ + ok(DeviceNumber.PartitionNumber != ULONG_MAX, + "Device '%s': Invalid partition number (%lu) reported; unpartitionable device?\n", + wine_dbgstr_us(&DeviceName), DeviceNumber.PartitionNumber); + if (DeviceNumber.PartitionNumber == ULONG_MAX) + goto Quit; + + /* Map to an NT device name */ + RtlStringCchPrintfW(NtLegacyDeviceName, _countof(NtLegacyDeviceName), + L"\\Device\\Harddisk%lu\\Partition%lu", + DeviceNumber.DeviceNumber, DeviceNumber.PartitionNumber); + } + break; + } + + /* Untestable devices */ + default: + skip("Device '%s': Cannot test, device type %lu\n", + wine_dbgstr_us(&DeviceName), DeviceInfo.DeviceType); + goto Quit; + } + + /* Open the device using the legacy path */ + RtlInitUnicodeString(&DeviceName, NtLegacyDeviceName); + InitializeObjectAttributes(&ObjectAttributes, + &DeviceName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + Status = NtOpenFile(&DeviceHandle2, + FILE_READ_ATTRIBUTES | SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + FILE_SHARE_ALL, + /* FILE_NON_DIRECTORY_FILE | */ FILE_SYNCHRONOUS_IO_NONALERT); + ok_ntstatus(Status, STATUS_SUCCESS); + if (!NT_SUCCESS(Status)) + { + skip("Device '%s': Opening failed\n", wine_dbgstr_us(&DeviceName)); + goto Quit; + } + + /* + * Verify whether both retrieved handles refer to the same device. + * Since we're not running on Windows 10, we cannot use kernel32!CompareObjectHandles() + * or ntdll!NtCompareObjects(), therefore we have to rely on comparing + * whether the devices referred by both handles have the same canonical name. + */ + Status = NtQueryObject(DeviceHandle1, + ObjectNameInformation, + &DeviceName1Buffer, + sizeof(DeviceName1Buffer), + &BufferSize); + ok_ntstatus(Status, STATUS_SUCCESS); + + Status = NtQueryObject(DeviceHandle2, + ObjectNameInformation, + &DeviceName2Buffer, + sizeof(DeviceName2Buffer), + &BufferSize); + ok_ntstatus(Status, STATUS_SUCCESS); + + Success = RtlEqualUnicodeString(DeviceName1, DeviceName2, FALSE); + ok(Success, "Devices '%s' and '%s' are not the same!\n", + wine_dbgstr_us(DeviceName1), wine_dbgstr_us(DeviceName2)); + +Quit: + /* Cleanup */ + if (DeviceHandle2) + NtClose(DeviceHandle2); + if (DeviceHandle1) + NtClose(DeviceHandle1); + + return Success; +} + +static BOOLEAN +Test_Drive_StorDeviceNumber( + _In_ WCHAR Drive) +{ + WCHAR NtDeviceName[] = L"\\DosDevices\\?:"; + NtDeviceName[sizeof("\\DosDevices\\")-1] = Drive; + return Test_Device_StorDeviceNumber(NtDeviceName); +} + +START_TEST(StorDeviceNumber) +{ + DWORD Drives; + UCHAR i; + + /* Enumerate existing testable drives */ + Drives = GetLogicalDrives(); + if (Drives == 0) + { + skip("Drives map unavailable, error 0x%lx\n", GetLastError()); + goto otherTests; + } + for (i = 0; i <= 'Z'-'A'; ++i) + { + WCHAR DriveName[] = L"?:\\"; + UINT DriveType; + + /* Skip non-existing drives */ + if (!(Drives & (1 << i))) + continue; + + /* Retrieve the drive type and see whether we can test it */ + DriveName[0] = L'A' + i; + DriveType = GetDriveTypeW(DriveName); + + switch (DriveType) + { + case DRIVE_REMOVABLE: + case DRIVE_FIXED: + case DRIVE_CDROM: + case DRIVE_RAMDISK: + { + Test_Drive_StorDeviceNumber(L'A' + i); + break; + } + + case DRIVE_UNKNOWN: + case DRIVE_NO_ROOT_DIR: + case DRIVE_REMOTE: + default: + /* Unhandled drive type, just skip it silently */ + trace("Drive %c with unhandled type %u\n", 'A' + i, DriveType); + break; + } + } + +otherTests: + /* Test the drive containing SystemRoot */ + Test_Drive_StorDeviceNumber(SharedUserData->NtSystemRoot[0]); + + /* Test \??\PhysicalDrive0, if it exists */ + Test_Device_StorDeviceNumber(L"\\??\\PhysicalDrive0"); +} diff --git a/modules/rostests/apitests/partmgr/precomp.h b/modules/rostests/apitests/partmgr/precomp.h new file mode 100644 index 0000000000000..fc5eaa9b38b80 --- /dev/null +++ b/modules/rostests/apitests/partmgr/precomp.h @@ -0,0 +1,20 @@ +/* + * PROJECT: ReactOS API Tests + * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) + * PURPOSE: Precompiled header + * COPYRIGHT: Copyright 2024 Hermès Bélusca-Maïto + */ + +#pragma once + +#define WIN32_NO_STATUS +#include + +#define NTOS_MODE_USER +#include +#include +#include + +#include + +/* EOF */ diff --git a/modules/rostests/apitests/partmgr/testlist.c b/modules/rostests/apitests/partmgr/testlist.c new file mode 100644 index 0000000000000..01ad0e3a04a9d --- /dev/null +++ b/modules/rostests/apitests/partmgr/testlist.c @@ -0,0 +1,10 @@ +#define STANDALONE +#include + +extern void func_StorDeviceNumber(void); + +const struct test winetest_testlist[] = +{ + { "StorDeviceNumber", func_StorDeviceNumber }, + { 0, 0 } +}; From dac991c056c718fdd1572582af5755803ab5359a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 27 Dec 2024 17:48:04 +0100 Subject: [PATCH 110/750] [PARTMGR] Implement support for IOCTL_STORAGE_GET_DEVICE_NUMBER (#7591) CORE-13525 Now, sending the IOCTL_STORAGE_GET_DEVICE_NUMBER to a disk partition correctly returns a non-zero STORAGE_DEVICE_NUMBER::PartitionNumber value. This is used by the BTRFS filesystem driver and other modules. When the STORAGE_DEVICE_NUMBER DeviceType member equals FILE_DEVICE_DISK, the DeviceNumber and PartitionNumber correspond respectively to the X and Y values in the \Device\Harddisk\Partition device name. References: https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ni-winioctl-ioctl_storage_get_device_number https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddstor/ni-ntddstor-ioctl_storage_get_device_number https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddstor/ns-ntddstor-_storage_device_number --- drivers/storage/partmgr/partition.c | 40 ++++++++++++++++++++++++++--- drivers/storage/partmgr/partmgr.c | 12 ++++++++- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/drivers/storage/partmgr/partition.c b/drivers/storage/partmgr/partition.c index e8a38e728ca4b..3551898389fa6 100644 --- a/drivers/storage/partmgr/partition.c +++ b/drivers/storage/partmgr/partition.c @@ -27,17 +27,26 @@ PartitionCreateDevice( UNICODE_STRING deviceName; UINT32 volumeNum; - // Create the partition/volume device object - volumeNum = HarddiskVolumeNextId++; swprintf(nameBuf, L"\\Device\\HarddiskVolume%lu", volumeNum); RtlCreateUnicodeString(&deviceName, nameBuf); + /* + * Create the partition/volume device object. + * + * Due to the fact we are also a (basic) volume manager, this device is + * ALSO a volume device. Because of this, we need to assign it a device + * name, and a specific device type for IoCreateDevice() to create a VPB + * for this device, so that a filesystem can be mounted on it. + * Once we get a separate volume manager, this partition DO can become + * anonymous, have a different device type, and without any associated VPB. + * (The attached volume, on the contrary, would require a VPB.) + */ PDEVICE_OBJECT partitionDevice; NTSTATUS status = IoCreateDevice(FDObject->DriverObject, sizeof(PARTITION_EXTENSION), &deviceName, - FILE_DEVICE_DISK, + FILE_DEVICE_DISK, // FILE_DEVICE_MASS_STORAGE, FILE_DEVICE_SECURE_OPEN, FALSE, &partitionDevice); @@ -55,6 +64,10 @@ PartitionCreateDevice( partExt->DeviceObject = partitionDevice; partExt->LowerDevice = FDObject; + // NOTE: See comment above. + // PFDO_EXTENSION fdoExtension = FDObject->DeviceExtension; + // partitionDevice->DeviceType = /*fdoExtension->LowerDevice*/FDObject->DeviceType; + partitionDevice->StackSize = FDObject->StackSize; partitionDevice->Flags |= DO_DIRECT_IO; @@ -767,6 +780,27 @@ PartitionHandleDeviceControl( status = STATUS_SUCCESS; break; } + case IOCTL_STORAGE_GET_DEVICE_NUMBER: + { + PSTORAGE_DEVICE_NUMBER deviceNumber = Irp->AssociatedIrp.SystemBuffer; + if (!VerifyIrpOutBufferSize(Irp, sizeof(*deviceNumber))) + { + status = STATUS_BUFFER_TOO_SMALL; + break; + } + + PartMgrAcquireLayoutLock(fdoExtension); + + deviceNumber->DeviceType = partExt->DeviceObject->DeviceType; + deviceNumber->DeviceNumber = fdoExtension->DiskData.DeviceNumber; + deviceNumber->PartitionNumber = partExt->DetectedNumber; + + PartMgrReleaseLayoutLock(fdoExtension); + + status = STATUS_SUCCESS; + Irp->IoStatus.Information = sizeof(*deviceNumber); + break; + } case IOCTL_STORAGE_MEDIA_REMOVAL: { return ForwardIrpAndForget(DeviceObject, Irp); diff --git a/drivers/storage/partmgr/partmgr.c b/drivers/storage/partmgr/partmgr.c index b1c37b5d9646d..5b79d8238987c 100644 --- a/drivers/storage/partmgr/partmgr.c +++ b/drivers/storage/partmgr/partmgr.c @@ -1182,10 +1182,17 @@ PartMgrAddDevice( PAGED_CODE(); + /* + * Create the disk FDO. Use FILE_DEVICE_MASS_STORAGE type (or any other + * one that is NOT FILE_DEVICE_[DISK|VIRTUAL_DISK|CD_ROM|TAPE]), so that + * IoCreateDevice() doesn't automatically create a VPB for this device, + * even if we will later want this device to inherit the type of the + * underlying PDO which can have any of the types mentioned above. + */ NTSTATUS status = IoCreateDevice(DriverObject, sizeof(FDO_EXTENSION), NULL, - FILE_DEVICE_BUS_EXTENDER, + FILE_DEVICE_MASS_STORAGE, FILE_AUTOGENERATED_DEVICE_NAME | FILE_DEVICE_SECURE_OPEN, FALSE, &deviceObject); @@ -1210,6 +1217,9 @@ PartMgrAddDevice( deviceExtension->PhysicalDiskDO = PhysicalDeviceObject; KeInitializeEvent(&deviceExtension->SyncEvent, SynchronizationEvent, TRUE); + // Update now the device type with the actual underlying device type + deviceObject->DeviceType = deviceExtension->LowerDevice->DeviceType; + deviceObject->Flags |= DO_DIRECT_IO | DO_POWER_PAGABLE; // The device is initialized From 02a394ea578376bb069e2fda93ae4c242d53b245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Mon, 30 Dec 2024 21:28:01 +0100 Subject: [PATCH 111/750] [NTDLL_APITEST][KMTESTS] Add tests for NtQueryObject(ObjectNameInformation) (#7592) CORE-13525 --- .../rostests/apitests/ntdll/CMakeLists.txt | 1 + .../rostests/apitests/ntdll/NtQueryObject.c | 107 ++++++++++++++++++ modules/rostests/apitests/ntdll/testlist.c | 2 + modules/rostests/kmtests/ntos_ob/ObQuery.c | 105 +++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 modules/rostests/apitests/ntdll/NtQueryObject.c diff --git a/modules/rostests/apitests/ntdll/CMakeLists.txt b/modules/rostests/apitests/ntdll/CMakeLists.txt index 6f956813680f1..29c1cf96ed976 100644 --- a/modules/rostests/apitests/ntdll/CMakeLists.txt +++ b/modules/rostests/apitests/ntdll/CMakeLists.txt @@ -41,6 +41,7 @@ list(APPEND SOURCE NtQueryInformationThread.c NtQueryInformationToken.c NtQueryKey.c + NtQueryObject.c NtQueryOpenSubKeys.c NtQuerySystemEnvironmentValue.c NtQuerySystemInformation.c diff --git a/modules/rostests/apitests/ntdll/NtQueryObject.c b/modules/rostests/apitests/ntdll/NtQueryObject.c new file mode 100644 index 0000000000000..8ee7157cfcdbf --- /dev/null +++ b/modules/rostests/apitests/ntdll/NtQueryObject.c @@ -0,0 +1,107 @@ +/* + * PROJECT: ReactOS API Tests + * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later) + * PURPOSE: Test for NtQueryObject + * COPYRIGHT: Copyright 2024 Hermès Bélusca-Maïto + */ + +#include "precomp.h" + +/* Flags combination allowing all the read, write and delete share modes. + * Currently similar to FILE_SHARE_VALID_FLAGS. */ +#define FILE_SHARE_ALL \ + (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE) + +/* Adapted from kmtests/ntos_ob/ObQuery.c!ObjectNameInformationTests(). + * Please sync both tests in case you add or remove new features. */ +START_TEST(NtQueryObject) +{ + ULONG g_OsVersion = + SharedUserData->NtMajorVersion << 8 | SharedUserData->NtMinorVersion; + + NTSTATUS Status; + HANDLE DeviceHandle; + UNICODE_STRING DeviceName; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + + ULONG BufferSize1, BufferSize2, BufferSize3; + struct { OBJECT_NAME_INFORMATION; WCHAR Buffer[MAX_PATH]; } ObjectNameBuffer; + PUNICODE_STRING ObjectName = &ObjectNameBuffer.Name; + + /* Test the drive containing SystemRoot */ + WCHAR NtDeviceName[] = L"\\DosDevices\\?:"; + NtDeviceName[sizeof("\\DosDevices\\")-1] = SharedUserData->NtSystemRoot[0]; + + /* Open a handle to the device */ + RtlInitUnicodeString(&DeviceName, NtDeviceName); + InitializeObjectAttributes(&ObjectAttributes, + &DeviceName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + Status = NtOpenFile(&DeviceHandle, + FILE_READ_ATTRIBUTES | SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + FILE_SHARE_ALL, + FILE_SYNCHRONOUS_IO_NONALERT); + ok_ntstatus(Status, STATUS_SUCCESS); + if (!NT_SUCCESS(Status)) + { + skip("Device '%S': Opening failed\n", NtDeviceName); + return; + } + + /* Invoke ObjectNameInformation that retrieves the canonical device name */ + Status = NtQueryObject(DeviceHandle, + ObjectNameInformation, + &ObjectNameBuffer, + 0, + &BufferSize1); + ok_ntstatus(Status, STATUS_INFO_LENGTH_MISMATCH); + + Status = NtQueryObject(DeviceHandle, + ObjectNameInformation, + &ObjectNameBuffer, + sizeof(OBJECT_NAME_INFORMATION), + &BufferSize2); + ok_ntstatus(Status, STATUS_BUFFER_OVERFLOW); + + Status = NtQueryObject(DeviceHandle, + ObjectNameInformation, + &ObjectNameBuffer, + sizeof(ObjectNameBuffer), + &BufferSize3); + ok_ntstatus(Status, STATUS_SUCCESS); + + NtClose(DeviceHandle); + + /* Compare the returned buffer sizes */ + + /* The returned size behaviour changed (when NtQueryObject()'s + * input Length is zero) between Windows <= 2003 and Vista+ */ + if (g_OsVersion < _WIN32_WINNT_VISTA) + ok_eq_ulong(BufferSize1, (ULONG)sizeof(OBJECT_NAME_INFORMATION)); + else + ok_eq_ulong(BufferSize1, (ULONG)sizeof(OBJECT_NAME_INFORMATION) + ObjectName->MaximumLength); + + ok_eq_ulong(BufferSize2, BufferSize3); + ok_eq_ulong(BufferSize3, (ULONG)sizeof(OBJECT_NAME_INFORMATION) + ObjectName->MaximumLength); + + /* Test the name buffer */ + ok(ObjectName->Length > 0, "ObjectName->Length == %hu, expected > 0\n", ObjectName->Length); + ok_eq_uint(ObjectName->MaximumLength, ObjectName->Length + sizeof(WCHAR)); + ok(ObjectName->Buffer[ObjectName->Length / sizeof(WCHAR)] == UNICODE_NULL, + "UNICODE_NULL not found at end of ObjectName->Buffer\n"); + if (ObjectName->Buffer[ObjectName->Length / sizeof(WCHAR)] != UNICODE_NULL) + { + skip("ObjectName->Buffer string length check skipped\n"); + return; + } + /* Verify that ObjectName->Length doesn't count extra NUL-terminators */ + { + SIZE_T strLen = wcslen(ObjectName->Buffer) * sizeof(WCHAR); + ok_eq_size(strLen, (SIZE_T)ObjectName->Length); + } +} diff --git a/modules/rostests/apitests/ntdll/testlist.c b/modules/rostests/apitests/ntdll/testlist.c index 10cc0d987dad7..86f653d5adf3d 100644 --- a/modules/rostests/apitests/ntdll/testlist.c +++ b/modules/rostests/apitests/ntdll/testlist.c @@ -37,6 +37,7 @@ extern void func_NtQueryInformationProcess(void); extern void func_NtQueryInformationThread(void); extern void func_NtQueryInformationToken(void); extern void func_NtQueryKey(void); +extern void func_NtQueryObject(void); extern void func_NtQueryOpenSubKeys(void); extern void func_NtQuerySystemEnvironmentValue(void); extern void func_NtQuerySystemInformation(void); @@ -140,6 +141,7 @@ const struct test winetest_testlist[] = { "NtQueryInformationThread", func_NtQueryInformationThread }, { "NtQueryInformationToken", func_NtQueryInformationToken }, { "NtQueryKey", func_NtQueryKey }, + { "NtQueryObject", func_NtQueryObject }, { "NtQueryOpenSubKeys", func_NtQueryOpenSubKeys }, { "NtQuerySystemEnvironmentValue", func_NtQuerySystemEnvironmentValue }, { "NtQuerySystemInformation", func_NtQuerySystemInformation }, diff --git a/modules/rostests/kmtests/ntos_ob/ObQuery.c b/modules/rostests/kmtests/ntos_ob/ObQuery.c index b58762067f761..be6000f16438a 100644 --- a/modules/rostests/kmtests/ntos_ob/ObQuery.c +++ b/modules/rostests/kmtests/ntos_ob/ObQuery.c @@ -3,6 +3,7 @@ * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Kernel mode tests for object information querying * COPYRIGHT: Copyright 2023 George Bișoc + * Copyright 2024 Hermès Bélusca-Maïto */ #include @@ -65,7 +66,111 @@ ObjectBasicInformationTests(VOID) ZwClose(WinStaDirHandle); } +/* Flags combination allowing all the read, write and delete share modes. + * Currently similar to FILE_SHARE_VALID_FLAGS. */ +#define FILE_SHARE_ALL \ + (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE) + +#define ok_ntstatus ok_eq_hex + +/* Adapted from apitests/ntdll/NtQueryObject.c!START_TEST(NtQueryObject). + * Please sync both tests in case you add or remove new features. */ +static +VOID +ObjectNameInformationTests(VOID) +{ + ULONG g_OsVersion = + SharedUserData->NtMajorVersion << 8 | SharedUserData->NtMinorVersion; + + NTSTATUS Status; + HANDLE DeviceHandle; + UNICODE_STRING DeviceName; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + + ULONG BufferSize1, BufferSize2, BufferSize3; + struct { OBJECT_NAME_INFORMATION; WCHAR Buffer[MAX_PATH]; } ObjectNameBuffer; + PUNICODE_STRING ObjectName = &ObjectNameBuffer.Name; + + /* Test the drive containing SystemRoot */ + WCHAR NtDeviceName[] = L"\\DosDevices\\?:"; + NtDeviceName[sizeof("\\DosDevices\\")-1] = SharedUserData->NtSystemRoot[0]; + + /* We must be in PASSIVE_LEVEL to do all of this stuff */ + ok_irql(PASSIVE_LEVEL); + + /* Open a handle to the device */ + RtlInitUnicodeString(&DeviceName, NtDeviceName); + InitializeObjectAttributes(&ObjectAttributes, + &DeviceName, + OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, + NULL, + NULL); + Status = ZwOpenFile(&DeviceHandle, + FILE_READ_ATTRIBUTES | SYNCHRONIZE, + &ObjectAttributes, + &IoStatusBlock, + FILE_SHARE_ALL, + FILE_SYNCHRONOUS_IO_NONALERT); + ok_ntstatus(Status, STATUS_SUCCESS); + if (skip(NT_SUCCESS(Status), "Device '%wZ': Opening failed\n", &DeviceName)) + return; + + /* Invoke ObjectNameInformation that retrieves the canonical device name */ + Status = ZwQueryObject(DeviceHandle, + ObjectNameInformation, + &ObjectNameBuffer, + 0, + &BufferSize1); + ok_ntstatus(Status, STATUS_INFO_LENGTH_MISMATCH); + + Status = ZwQueryObject(DeviceHandle, + ObjectNameInformation, + &ObjectNameBuffer, + sizeof(OBJECT_NAME_INFORMATION), + &BufferSize2); + ok_ntstatus(Status, STATUS_BUFFER_OVERFLOW); + + Status = ZwQueryObject(DeviceHandle, + ObjectNameInformation, + &ObjectNameBuffer, + sizeof(ObjectNameBuffer), + &BufferSize3); + ok_ntstatus(Status, STATUS_SUCCESS); + + ZwClose(DeviceHandle); + + /* Compare the returned buffer sizes */ + + /* The returned size behaviour changed (when ZwQueryObject()'s + * input Length is zero) between Windows <= 2003 and Vista+ */ + if (g_OsVersion < _WIN32_WINNT_VISTA) + ok_eq_ulong(BufferSize1, sizeof(OBJECT_NAME_INFORMATION)); + else + ok_eq_ulong(BufferSize1, sizeof(OBJECT_NAME_INFORMATION) + ObjectName->MaximumLength); + + ok_eq_ulong(BufferSize2, BufferSize3); + ok_eq_ulong(BufferSize3, sizeof(OBJECT_NAME_INFORMATION) + ObjectName->MaximumLength); + + /* Test the name buffer */ + ok(ObjectName->Length > 0, "ObjectName->Length == %hu, expected > 0\n", ObjectName->Length); + ok_eq_uint(ObjectName->MaximumLength, ObjectName->Length + sizeof(WCHAR)); + ok(ObjectName->Buffer[ObjectName->Length / sizeof(WCHAR)] == UNICODE_NULL, + "UNICODE_NULL not found at end of ObjectName->Buffer\n"); + if (skip(ObjectName->Buffer[ObjectName->Length / sizeof(WCHAR)] == UNICODE_NULL, + "ObjectName->Buffer string length check skipped\n")) + { + return; + } + /* Verify that ObjectName->Length doesn't count extra NUL-terminators */ + { + SIZE_T strLen = wcslen(ObjectName->Buffer) * sizeof(WCHAR); + ok_eq_size(strLen, (SIZE_T)ObjectName->Length); + } +} + START_TEST(ObQuery) { ObjectBasicInformationTests(); + ObjectNameInformationTests(); } From 6363f7820dbe6a7a3b3f4e73d5e0bbc30d787a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 29 Dec 2024 22:16:34 +0100 Subject: [PATCH 112/750] [NTOS:IO] Fix special case in IopQueryNameInternal() (#7592) CORE-13525 This case is invoked from NtQueryObject(ObjectNameInformation). --- ntoskrnl/io/iomgr/file.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ntoskrnl/io/iomgr/file.c b/ntoskrnl/io/iomgr/file.c index bfe11ab295b50..865cd52fc789f 100644 --- a/ntoskrnl/io/iomgr/file.c +++ b/ntoskrnl/io/iomgr/file.c @@ -2108,10 +2108,11 @@ IopQueryNameInternal(IN PVOID ObjectBody, _SEH2_LEAVE; } - /* In such case, zero output */ + /* In such case, zero the output and reset the status */ LocalReturnLength = FIELD_OFFSET(FILE_NAME_INFORMATION, FileName); LocalFileInfo->FileNameLength = 0; LocalFileInfo->FileName[0] = OBJ_NAME_PATH_SEPARATOR; + Status = STATUS_SUCCESS; } else { From 1dfba2a699d76c7974d6ec874c64f6c1f86914ec Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Wed, 8 Jan 2025 08:28:24 +0700 Subject: [PATCH 113/750] [WINLOGON] Add WLSESSION logon timestamp (#7590) Remove startup sound hack. CORE-13951 --- base/system/winlogon/sas.c | 62 +++++++++++++++++++-------------- base/system/winlogon/winlogon.h | 19 ++++++++++ 2 files changed, 55 insertions(+), 26 deletions(-) diff --git a/base/system/winlogon/sas.c b/base/system/winlogon/sas.c index 8b169f73df694..17c7778e13aeb 100644 --- a/base/system/winlogon/sas.c +++ b/base/system/winlogon/sas.c @@ -46,6 +46,12 @@ static BOOL ExitReactOSInProgress = FALSE; LUID LuidNone = {0, 0}; +typedef struct tagLOGON_SOUND_DATA +{ + HANDLE UserToken; + BOOL IsStartup; +} LOGON_SOUND_DATA, *PLOGON_SOUND_DATA; + /* FUNCTIONS ****************************************************************/ static BOOL @@ -286,26 +292,12 @@ PlaySoundRoutine( } static -BOOL -IsFirstLogon(VOID) -{ - /* FIXME: All of this is a HACK, designed specifically for PlayLogonSoundThread. - * Don't call IsFirstLogon multiple times inside the same function. And please - * note that this function is not thread-safe. */ - static BOOL bFirstLogon = TRUE; - if (bFirstLogon) - { - bFirstLogon = FALSE; - return TRUE; - } - return FALSE; -} - DWORD WINAPI PlayLogonSoundThread( - IN LPVOID lpParameter) + _In_ LPVOID lpParameter) { + PLOGON_SOUND_DATA SoundData = (PLOGON_SOUND_DATA)lpParameter; SERVICE_STATUS_PROCESS Info; DWORD dwSize; ULONG Index = 0; @@ -316,7 +308,7 @@ PlayLogonSoundThread( if (!hSCManager) { ERR("OpenSCManager failed (%x)\n", GetLastError()); - return 0; + goto Cleanup; } /* Open the wdmaud service */ @@ -326,7 +318,7 @@ PlayLogonSoundThread( /* The service is not installed */ TRACE("Failed to open wdmaud service (%x)\n", GetLastError()); CloseServiceHandle(hSCManager); - return 0; + goto Cleanup; } /* Wait for wdmaud to start */ @@ -352,35 +344,50 @@ PlayLogonSoundThread( if (Info.dwCurrentState != SERVICE_RUNNING) { WARN("wdmaud has not started!\n"); - return 0; + goto Cleanup; } /* Sound subsystem is running. Play logon sound. */ - TRACE("Playing logon sound\n"); - if (!ImpersonateLoggedOnUser((HANDLE)lpParameter)) + TRACE("Playing %s sound\n", SoundData->IsStartup ? "startup" : "logon"); + if (!ImpersonateLoggedOnUser(SoundData->UserToken)) { ERR("ImpersonateLoggedOnUser failed (%x)\n", GetLastError()); } else { - PlaySoundRoutine(IsFirstLogon() ? L"SystemStart" : L"WindowsLogon", + PlaySoundRoutine(SoundData->IsStartup ? L"SystemStart" : L"WindowsLogon", TRUE, SND_ALIAS | SND_NODEFAULT); RevertToSelf(); } + +Cleanup: + HeapFree(GetProcessHeap(), 0, SoundData); return 0; } static VOID PlayLogonSound( - IN OUT PWLSESSION Session) + _In_ PWLSESSION Session) { + PLOGON_SOUND_DATA SoundData; HANDLE hThread; - hThread = CreateThread(NULL, 0, PlayLogonSoundThread, (PVOID)Session->UserToken, 0, NULL); - if (hThread) - CloseHandle(hThread); + SoundData = HeapAlloc(GetProcessHeap(), 0, sizeof(LOGON_SOUND_DATA)); + if (!SoundData) + return; + + SoundData->UserToken = Session->UserToken; + SoundData->IsStartup = IsFirstLogon(Session); + + hThread = CreateThread(NULL, 0, PlayLogonSoundThread, SoundData, 0, NULL); + if (!hThread) + { + HeapFree(GetProcessHeap(), 0, SoundData); + return; + } + CloseHandle(hThread); } static @@ -571,6 +578,9 @@ HandleLogon( /* Logon has succeeded. Play sound. */ PlayLogonSound(Session); + /* NOTE: The logon timestamp has to be set after calling PlayLogonSound + * to correctly detect the startup event (first logon) */ + SetLogonTimestamp(Session); ret = TRUE; cleanup: diff --git a/base/system/winlogon/winlogon.h b/base/system/winlogon/winlogon.h index 3dcf6fda0c339..4df8e00e63207 100644 --- a/base/system/winlogon/winlogon.h +++ b/base/system/winlogon/winlogon.h @@ -41,6 +41,7 @@ #include #include #include +#include #include /* PSEH for SEH Support */ @@ -233,6 +234,7 @@ typedef struct _WLSESSION HANDLE hProfileInfo; LOGON_STATE LogonState; DWORD DialogTimeout; /* Timeout for dialog boxes, in seconds */ + LARGE_INTEGER LastLogon; /* Screen-saver informations */ #ifndef USE_GETLASTINPUTINFO @@ -285,6 +287,23 @@ extern PWLSESSION WLSession; ((Status) == WLX_SAS_ACTION_SHUTDOWN_HIBERNATE) \ ) +FORCEINLINE +VOID +SetLogonTimestamp( + _Inout_ PWLSESSION Session) +{ + NtQuerySystemTime(&Session->LastLogon); +} + +FORCEINLINE +BOOL +IsFirstLogon( + _In_ PWLSESSION Session) +{ + /* The WLSESSION::LastLogon is initialized to 0 so this is OK */ + return (Session->LastLogon.QuadPart == 0); +} + /* environment.c */ BOOL CreateUserEnvironment(IN PWLSESSION Session); From 03ee0756b872a8a487876a97e5152fffbd524c73 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 8 Jan 2025 12:22:34 +0100 Subject: [PATCH 114/750] [SHELL32] Clone properties IDataObject for unlimited lifetime (#7601) Because SHOpenPropSheetW() is modal, there is no way for us to keep COM alive on the original thread until the dialog completes, so a cloned data object is used instead so that the property sheet handlers may access the object even after ShellExecute() has returned (this is only relevant for callers like Taskmgr that does not initialize COM even though MSDN says they should). Addendum to afc130ff3f5 (PR #7571). CORE-19933 --- dll/win32/shell32/dialogs/item_prop.cpp | 15 +++++++++------ dll/win32/shell32/precomp.h | 1 + dll/win32/shell32/shldataobject.cpp | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/dll/win32/shell32/dialogs/item_prop.cpp b/dll/win32/shell32/dialogs/item_prop.cpp index bcc6473144d1c..75039293c3c20 100644 --- a/dll/win32/shell32/dialogs/item_prop.cpp +++ b/dll/win32/shell32/dialogs/item_prop.cpp @@ -27,7 +27,7 @@ struct ShellPropSheetDialog HKEY *hKeys, UINT *cKeys); static HRESULT Show(const CLSID *pClsidDefault, IDataObject *pDO, - PFNINITIALIZE InitFunc, LPCWSTR InitString, HANDLE hEvent = NULL) + PFNINITIALIZE InitFunc, LPCWSTR InitString) { HRESULT hr; CRegKeyHandleArray keys; @@ -36,8 +36,6 @@ struct ShellPropSheetDialog WCHAR szCaption[MAX_PATH], *pszCaption = NULL; if (SUCCEEDED(SHELL_GetCaptionFromDataObject(pDO, szCaption, _countof(szCaption)))) pszCaption = szCaption; - if (hEvent) - SetEvent(hEvent); hr = SHOpenPropSheetW(pszCaption, keys, keys, pClsidDefault, pDO, NULL, NULL) ? S_OK : E_FAIL; return hr; } @@ -96,7 +94,8 @@ struct ShellPropSheetDialog if (hEvent) { DWORD index; - // Pump COM messages until InitFunc is done (for CORE-19933) + // Pump COM messages until the thread can create its own IDataObject (for CORE-19933). + // SHOpenPropSheetW is modal and we cannot wait for it to complete. CoWaitForMultipleHandles(COWAIT_DEFAULT, INFINITE, 1, &hEvent, &index); CloseHandle(hEvent); } @@ -111,10 +110,14 @@ struct ShellPropSheetDialog static DWORD CALLBACK ShowPropertiesThread(LPVOID Param) { DATA *pData = (DATA*)Param; - CComPtr pDO; + CComPtr pDO, pLocalDO; if (pData->pObjStream) CoGetInterfaceAndReleaseStream(pData->pObjStream, IID_PPV_ARG(IDataObject, &pDO)); - Show(pData->pClsidDefault, pDO, pData->InitFunc, pData->InitString, pData->hEvent); + if (pDO && SUCCEEDED(SHELL_CloneDataObject(pDO, &pLocalDO))) + pDO = pLocalDO; + if (pData->hEvent) + SetEvent(pData->hEvent); + Show(pData->pClsidDefault, pDO, pData->InitFunc, pData->InitString); FreeData(pData); return 0; } diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h index 48c636fe9f1b3..6d65aeac0560f 100644 --- a/dll/win32/shell32/precomp.h +++ b/dll/win32/shell32/precomp.h @@ -297,6 +297,7 @@ HRESULT SHILAppend(_Inout_ LPITEMIDLIST pidl, _Inout_ LPITEMIDLIST *ppidl); PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull(_In_ const CIDA *pCIDA, _In_ UINT Index); PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem(_In_ IDataObject *pDO, _In_ UINT Index); +HRESULT SHELL_CloneDataObject(_In_ IDataObject *pDO, _Out_ IDataObject **ppDO); EXTERN_C HRESULT IUnknown_InitializeCommand( diff --git a/dll/win32/shell32/shldataobject.cpp b/dll/win32/shell32/shldataobject.cpp index 3a7d651424f0a..728cca0dbf376 100644 --- a/dll/win32/shell32/shldataobject.cpp +++ b/dll/win32/shell32/shldataobject.cpp @@ -111,3 +111,22 @@ PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem(_In_ IDataObject *pDO, _In_ UI CDataObjectHIDA cida(pDO); return SUCCEEDED(cida.hr()) ? SHELL_CIDA_ILCloneFull(cida, Index) : NULL; } + +HRESULT SHELL_CloneDataObject(_In_ IDataObject *pDO, _Out_ IDataObject **ppDO) +{ + *ppDO = NULL; + CDataObjectHIDA cida(pDO); + HRESULT hr = cida.hr(); + if (SUCCEEDED(hr)) + { + PCUITEMID_CHILD items = HIDA_GetPIDLItem(cida, 0); + hr = SHCreateFileDataObject(HIDA_GetPIDLFolder(cida), cida->cidl, &items, NULL, ppDO); + if (SUCCEEDED(hr)) + { + POINT pt; + if (SUCCEEDED(DataObject_GetOffset(pDO, &pt))) + DataObject_SetOffset(*ppDO, &pt); + } + } + return hr; +} From 3ff9c476a067367fad1662a1990153cd9910ffce Mon Sep 17 00:00:00 2001 From: Vitaly Orekhov Date: Wed, 8 Jan 2025 14:28:46 +0300 Subject: [PATCH 115/750] [PSDK] Add structures and enumeration describing radio power state (#7596) This piece of data is returned by WlanQueryInterface(). Used by `WlanQueryInterface` with the `wlan_intf_opcode_radio_state` opcode. CORE-6905 --- sdk/include/psdk/wlanapi.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/sdk/include/psdk/wlanapi.h b/sdk/include/psdk/wlanapi.h index e16089372a871..a0675f49e6cca 100644 --- a/sdk/include/psdk/wlanapi.h +++ b/sdk/include/psdk/wlanapi.h @@ -31,6 +31,16 @@ extern "C" { /* Enumerations */ +#if defined(__midl) || defined(__WIDL__) +typedef [v1_enum] enum _DOT11_RADIO_STATE { +#else +typedef enum _DOT11_RADIO_STATE { +#endif + dot11_radio_state_unknown = 0, + dot11_radio_state_on, + dot11_radio_state_off +} DOT11_RADIO_STATE; /* HACK: WIDL is broken, *PDOT11_RADIO_STATE; */ + #if defined(__midl) || defined(__WIDL__) typedef [v1_enum] enum _WLAN_OPCODE_VALUE_TYPE { #else @@ -175,6 +185,17 @@ typedef struct _WLAN_INTERFACE_CAPABILITY { /* enum32 */ long dot11PhyTypes[WLAN_MAX_PHY_INDEX]; } WLAN_INTERFACE_CAPABILITY, *PWLAN_INTERFACE_CAPABILITY; +typedef struct _WLAN_PHY_RADIO_STATE { + DWORD dwPhyIndex; + DOT11_RADIO_STATE dot11SoftwareRadioState; + DOT11_RADIO_STATE dot11HardwareRadioState; +} WLAN_PHY_RADIO_STATE, *PWLAN_PHY_RADIO_STATE; + +typedef struct _WLAN_RADIO_STATE { + DWORD dwNumberOfPhys; + WLAN_PHY_RADIO_STATE PhyRadioState[WLAN_MAX_PHY_INDEX]; +} WLAN_RADIO_STATE, *PWLAN_RADIO_STATE; + typedef struct _WLAN_RAW_DATA { DWORD dwDataSize; #if defined(__midl) || defined(__WIDL__) From 04cd478035a1d1cab2d1dde391f8ffc633bde6ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 20:36:09 +0100 Subject: [PATCH 116/750] [COMPBATT] Prepare the base foundation for the header file - Introduce some new constructs - Annotate the function prototypes with SAL2 - Re-structure & remove some useless fields in COMPBATT_DEVICE_EXTENSION and COMPBATT_BATTERY_DATA --- drivers/bus/acpi/compbatt/compbatt.h | 175 +++++++++++++++++++-------- 1 file changed, 127 insertions(+), 48 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.h b/drivers/bus/acpi/compbatt/compbatt.h index 950e5a5f7dda3..1b8c1fb49d14d 100644 --- a/drivers/bus/acpi/compbatt/compbatt.h +++ b/drivers/bus/acpi/compbatt/compbatt.h @@ -1,20 +1,81 @@ /* - * PROJECT: ReactOS Composite Battery Driver - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/drivers/bus/acpi/compbatt/compbatt.h - * PURPOSE: Main Header File - * PROGRAMMERS: ReactOS Portable Systems Group + * PROJECT: ReactOS Composite Battery Driver + * LICENSE: BSD - See COPYING.ARM in the top level directory + * PURPOSE: Composite battery main header file + * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group + * Copyright 2024 George Bișoc */ +/* INCLUDES *******************************************************************/ + #ifndef _COMPBATT_PCH_ #define _COMPBATT_PCH_ #include #include +/* DEFINES ********************************************************************/ + +// +// I/O remove lock allocate tag +// +#define COMPBATT_TAG 'aBoC' + +// +// Composite battery flags +// #define COMPBATT_BATTERY_INFORMATION_PRESENT 0x04 +#define COMPBATT_STATUS_NOTIFY_SET 0x10 #define COMPBATT_TAG_ASSIGNED 0x80 +// +// IRP complete worker mode states +// +#define COMPBATT_QUERY_TAG 1 +#define COMPBATT_READ_STATUS 2 + +// +// Low/High capacity wait constants +// +#define COMPBATT_WAIT_MIN_LOW_CAPACITY 0 +#define COMPBATT_WAIT_MAX_HIGH_CAPACITY 0x7FFFFFFF + +// +// One hour in seconds, used to calculate the total rate of each battery for time estimation +// +#define COMPBATT_ATRATE_HOUR_IN_SECS 3600 + +// +// Time constant of which the battery status data is considered fresh (50000000 * 100ns == 5s) +// +#define COMPBATT_FRESH_STATUS_TIME 50000000 + +// +// Macro that calculates the delta of a battery's capacity +// +#define COMPUTE_BATT_CAP_DELTA(LowDiff, Batt, TotalRate) \ + ((ULONG)(((LONGLONG)LowDiff * (Batt)->BatteryStatus.Rate) / TotalRate)) + +// +// Macro that calculates the "At Rate" time drain of the battery +// +#define COMPUTE_ATRATE_DRAIN(Batt, Time) \ + ((LONG)((Batt)->BatteryStatus.Capacity) * COMPBATT_ATRATE_HOUR_IN_SECS / Time) + +// +// Composite battery debug levels +// +#define COMPBATT_DEBUG_INFO 0x1 +#define COMPBATT_DEBUG_TRACE 0x2 +#define COMPBATT_DEBUG_WARN 0x4 +#define COMPBATT_DEBUG_ERR 0x10 +#define COMPBATT_DEBUG_ALL_LEVELS (COMPBATT_DEBUG_INFO | COMPBATT_DEBUG_TRACE | COMPBATT_DEBUG_WARN | COMPBATT_DEBUG_ERR) + +/* STRUCTURES *****************************************************************/ + +// +// Individual ACPI battery data +// typedef struct _COMPBATT_BATTERY_DATA { LIST_ENTRY BatteryLink; @@ -22,13 +83,14 @@ typedef struct _COMPBATT_BATTERY_DATA PDEVICE_OBJECT DeviceObject; PIRP Irp; WORK_QUEUE_ITEM WorkItem; - BOOLEAN WaitFlag; + UCHAR Mode; BATTERY_WAIT_STATUS WaitStatus; union { BATTERY_WAIT_STATUS WorkerWaitStatus; BATTERY_STATUS WorkerStatus; - }; + ULONG WorkerTag; + } WorkerBuffer; ULONG Tag; ULONG Flags; BATTERY_INFORMATION BatteryInformation; @@ -37,6 +99,9 @@ typedef struct _COMPBATT_BATTERY_DATA UNICODE_STRING BatteryName; } COMPBATT_BATTERY_DATA, *PCOMPBATT_BATTERY_DATA; +// +// Composite battery device extension data +// typedef struct _COMPBATT_DEVICE_EXTENSION { PVOID ClassData; @@ -47,110 +112,124 @@ typedef struct _COMPBATT_DEVICE_EXTENSION ULONG Flags; BATTERY_INFORMATION BatteryInformation; BATTERY_STATUS BatteryStatus; + BATTERY_WAIT_STATUS WaitNotifyStatus; ULONGLONG InterruptTime; - POWER_STATE PowerState; - ULONG LowCapacity; - ULONG HighCapacity; PDEVICE_OBJECT AttachedDevice; PDEVICE_OBJECT DeviceObject; PVOID NotificationEntry; } COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION; +/* PROTOTYPES *****************************************************************/ + NTSTATUS NTAPI CompBattAddDevice( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT PdoDeviceObject + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDEVICE_OBJECT PdoDeviceObject ); NTSTATUS NTAPI CompBattPowerDispatch( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp ); NTSTATUS NTAPI CompBattPnpDispatch( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp ); NTSTATUS NTAPI CompBattQueryInformation( - IN PCOMPBATT_DEVICE_EXTENSION FdoExtension, - IN ULONG Tag, - IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, - IN OPTIONAL LONG AtRate, - IN PVOID Buffer, - IN ULONG BufferLength, - OUT PULONG ReturnedLength + _In_ PCOMPBATT_DEVICE_EXTENSION FdoExtension, + _In_ ULONG Tag, + _In_ BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, + _In_opt_ LONG AtRate, + _In_ PVOID Buffer, + _In_ ULONG BufferLength, + _Out_ PULONG ReturnedLength ); NTSTATUS NTAPI CompBattQueryStatus( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG Tag, - IN PBATTERY_STATUS BatteryStatus + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG Tag, + _Out_ PBATTERY_STATUS BatteryStatus +); + +NTSTATUS +NTAPI +CompBattGetEstimatedTime( + _Out_ PULONG Time, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension ); NTSTATUS NTAPI CompBattSetStatusNotify( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG BatteryTag, - IN PBATTERY_NOTIFY BatteryNotify + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG BatteryTag, + _In_ PBATTERY_NOTIFY BatteryNotify ); NTSTATUS NTAPI CompBattDisableStatusNotify( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension ); NTSTATUS NTAPI CompBattQueryTag( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - OUT PULONG Tag + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PULONG Tag ); NTSTATUS NTAPI CompBattMonitorIrpComplete( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PKEVENT Event + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_ PVOID Context ); -NTSTATUS +VOID NTAPI CompBattMonitorIrpCompleteWorker( - IN PCOMPBATT_BATTERY_DATA BatteryData + _In_ PCOMPBATT_BATTERY_DATA BatteryData ); NTSTATUS NTAPI CompBattGetDeviceObjectPointer( - IN PUNICODE_STRING DeviceName, - IN ACCESS_MASK DesiredAccess, - OUT PFILE_OBJECT *FileObject, - OUT PDEVICE_OBJECT *DeviceObject + _In_ PUNICODE_STRING DeviceName, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PFILE_OBJECT *FileObject, + _Out_ PDEVICE_OBJECT *DeviceObject ); NTSTATUS NTAPI BatteryIoctl( - IN ULONG IoControlCode, - IN PDEVICE_OBJECT DeviceObject, - IN PVOID InputBuffer, - IN ULONG InputBufferLength, - IN PVOID OutputBuffer, - IN ULONG OutputBufferLength, - IN BOOLEAN InternalDeviceIoControl + _In_ ULONG IoControlCode, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_ PVOID OutputBuffer, + _Inout_ ULONG OutputBufferLength, + _In_ BOOLEAN InternalDeviceIoControl +); + +NTSTATUS +NTAPI +CompBattRemoveBattery( + _In_ PUNICODE_STRING BatteryName, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension ); extern ULONG CompBattDebug; From f9ea9220d8612368be66db2182ebb6837ac68306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 23:07:18 +0100 Subject: [PATCH 117/750] [COMPBATT] Remove the useless WaitFlag field in the code which is never used --- drivers/bus/acpi/compbatt/comppnp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index 141ec2ebbe4ac..f16bfd2ed3ddc 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -165,7 +165,6 @@ CompBattAddNewBattery(IN PUNICODE_STRING BatteryName, /* Set IRP data */ IoSetNextIrpStackLocation(Irp); Irp->IoStatus.Status = STATUS_DEVICE_NOT_CONNECTED; - BatteryData->WaitFlag = 0; /* Insert this battery in the list */ ExAcquireFastMutex(&DeviceExtension->Lock); From 8b5423aa601b2145322841d4923bf95e2d06d2be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 21:36:49 +0100 Subject: [PATCH 118/750] [COMPBATT] Annotate all functions with SAL2 --- drivers/bus/acpi/compbatt/compbatt.c | 87 ++++++++++++++++------------ drivers/bus/acpi/compbatt/compmisc.c | 24 ++++---- drivers/bus/acpi/compbatt/comppnp.c | 43 ++++++++------ 3 files changed, 90 insertions(+), 64 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 2c947910c2949..313780d2d34b4 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -20,8 +20,9 @@ ULONG CompBattDebug; NTSTATUS NTAPI -CompBattOpenClose(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +CompBattOpenClose( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) { PAGED_CODE(); if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING OpenClose\n"); @@ -38,8 +39,9 @@ CompBattOpenClose(IN PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CompBattSystemControl(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +CompBattSystemControl( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) { PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; NTSTATUS Status; @@ -67,17 +69,19 @@ CompBattSystemControl(IN PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CompBattMonitorIrpComplete(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PKEVENT Event) +CompBattMonitorIrpComplete( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_ PVOID Context) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } -NTSTATUS +VOID NTAPI -CompBattMonitorIrpCompleteWorker(IN PCOMPBATT_BATTERY_DATA BatteryData) +CompBattMonitorIrpCompleteWorker( + _In_ PCOMPBATT_BATTERY_DATA BatteryData) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; @@ -85,7 +89,8 @@ CompBattMonitorIrpCompleteWorker(IN PCOMPBATT_BATTERY_DATA BatteryData) VOID NTAPI -CompBattRecalculateTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattRecalculateTag( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PCOMPBATT_BATTERY_DATA BatteryData; ULONG Tag; @@ -122,8 +127,9 @@ CompBattRecalculateTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) NTSTATUS NTAPI -CompBattIoctl(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +CompBattIoctl( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) { PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; NTSTATUS Status; @@ -146,8 +152,9 @@ CompBattIoctl(IN PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CompBattQueryTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - OUT PULONG Tag) +CompBattQueryTag( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PULONG Tag) { NTSTATUS Status; PAGED_CODE(); @@ -181,7 +188,8 @@ CompBattQueryTag(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, NTSTATUS NTAPI -CompBattDisableStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattDisableStatusNotify( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PCOMPBATT_BATTERY_DATA BatteryData; PLIST_ENTRY ListHead, NextEntry; @@ -208,9 +216,10 @@ CompBattDisableStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) NTSTATUS NTAPI -CompBattSetStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG BatteryTag, - IN PBATTERY_NOTIFY BatteryNotify) +CompBattSetStatusNotify( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG BatteryTag, + _In_ PBATTERY_NOTIFY BatteryNotify) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; @@ -218,9 +227,10 @@ CompBattSetStatusNotify(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, NTSTATUS NTAPI -CompBattQueryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG Tag, - IN PBATTERY_STATUS BatteryStatus) +CompBattQueryStatus( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG Tag, + _Out_ PBATTERY_STATUS BatteryStatus) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; @@ -228,8 +238,9 @@ CompBattQueryStatus(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, NTSTATUS NTAPI -CompBattGetBatteryInformation(OUT PBATTERY_INFORMATION BatteryInfo, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattGetBatteryInformation( + _Out_ PBATTERY_INFORMATION BatteryInfo, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { NTSTATUS Status = STATUS_SUCCESS; BATTERY_QUERY_INFORMATION InputBuffer; @@ -384,8 +395,9 @@ CompBattGetBatteryInformation(OUT PBATTERY_INFORMATION BatteryInfo, NTSTATUS NTAPI -CompBattGetBatteryGranularity(OUT PBATTERY_REPORTING_SCALE ReportingScale, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattGetBatteryGranularity( + _Out_ PBATTERY_REPORTING_SCALE ReportingScale, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { NTSTATUS Status = STATUS_SUCCESS; BATTERY_QUERY_INFORMATION InputBuffer; @@ -470,8 +482,9 @@ CompBattGetBatteryGranularity(OUT PBATTERY_REPORTING_SCALE ReportingScale, NTSTATUS NTAPI -CompBattGetEstimatedTime(OUT PULONG Time, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattGetEstimatedTime( + _Out_ PULONG Time, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; @@ -479,13 +492,14 @@ CompBattGetEstimatedTime(OUT PULONG Time, NTSTATUS NTAPI -CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG Tag, - IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, - IN OPTIONAL LONG AtRate, - IN PVOID Buffer, - IN ULONG BufferLength, - OUT PULONG ReturnedLength) +CompBattQueryInformation( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG Tag, + _In_ BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, + _In_opt_ LONG AtRate, + _In_ PVOID Buffer, + _In_ ULONG BufferLength, + _Out_ PULONG ReturnedLength) { BATTERY_INFORMATION BatteryInfo; BATTERY_REPORTING_SCALE BatteryGranularity[4]; @@ -593,8 +607,9 @@ CompBattQueryInformation(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, NTSTATUS NTAPI -DriverEntry(IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath) +DriverEntry( + _In_ PDRIVER_OBJECT DriverObject, + _In_ PUNICODE_STRING RegistryPath) { /* Register add device routine */ DriverObject->DriverExtension->AddDevice = CompBattAddDevice; diff --git a/drivers/bus/acpi/compbatt/compmisc.c b/drivers/bus/acpi/compbatt/compmisc.c index e84a25127060f..5992273863af6 100644 --- a/drivers/bus/acpi/compbatt/compmisc.c +++ b/drivers/bus/acpi/compbatt/compmisc.c @@ -14,13 +14,14 @@ NTSTATUS NTAPI -BatteryIoctl(IN ULONG IoControlCode, - IN PDEVICE_OBJECT DeviceObject, - IN PVOID InputBuffer, - IN ULONG InputBufferLength, - IN PVOID OutputBuffer, - IN ULONG OutputBufferLength, - IN BOOLEAN InternalDeviceIoControl) +BatteryIoctl( + _In_ ULONG IoControlCode, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_ PVOID OutputBuffer, + _Inout_ ULONG OutputBufferLength, + _In_ BOOLEAN InternalDeviceIoControl) { IO_STATUS_BLOCK IoStatusBlock; KEVENT Event; @@ -71,10 +72,11 @@ BatteryIoctl(IN ULONG IoControlCode, NTSTATUS NTAPI -CompBattGetDeviceObjectPointer(IN PUNICODE_STRING DeviceName, - IN ACCESS_MASK DesiredAccess, - OUT PFILE_OBJECT *FileObject, - OUT PDEVICE_OBJECT *DeviceObject) +CompBattGetDeviceObjectPointer( + _In_ PUNICODE_STRING DeviceName, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PFILE_OBJECT *FileObject, + _Out_ PDEVICE_OBJECT *DeviceObject) { NTSTATUS Status; OBJECT_ATTRIBUTES ObjectAttributes; diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index f16bfd2ed3ddc..efc40e9f62ef1 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -16,8 +16,9 @@ NTSTATUS NTAPI -CompBattPowerDispatch(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +CompBattPowerDispatch( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) { PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; if (CompBattDebug & 1) DbgPrint("CompBatt: PowerDispatch received power IRP.\n"); @@ -32,8 +33,9 @@ CompBattPowerDispatch(IN PDEVICE_OBJECT DeviceObject, PCOMPBATT_BATTERY_DATA NTAPI -RemoveBatteryFromList(IN PCUNICODE_STRING BatteryName, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +RemoveBatteryFromList( + _In_ PCUNICODE_STRING BatteryName, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PLIST_ENTRY ListHead, NextEntry; PCOMPBATT_BATTERY_DATA BatteryData; @@ -74,8 +76,9 @@ RemoveBatteryFromList(IN PCUNICODE_STRING BatteryName, BOOLEAN NTAPI -IsBatteryAlreadyOnList(IN PCUNICODE_STRING BatteryName, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +IsBatteryAlreadyOnList( + _In_ PCUNICODE_STRING BatteryName, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PLIST_ENTRY ListHead, NextEntry; PCOMPBATT_BATTERY_DATA BatteryData; @@ -110,8 +113,9 @@ IsBatteryAlreadyOnList(IN PCUNICODE_STRING BatteryName, NTSTATUS NTAPI -CompBattAddNewBattery(IN PUNICODE_STRING BatteryName, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattAddNewBattery( + _In_ PUNICODE_STRING BatteryName, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { NTSTATUS Status = STATUS_SUCCESS; PCOMPBATT_BATTERY_DATA BatteryData; @@ -220,8 +224,9 @@ CompBattAddNewBattery(IN PUNICODE_STRING BatteryName, NTSTATUS NTAPI -CompBattRemoveBattery(IN PCUNICODE_STRING BatteryName, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattRemoveBattery( + _In_ PCUNICODE_STRING BatteryName, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PCOMPBATT_BATTERY_DATA BatteryData; if (CompBattDebug & 1) DbgPrint("CompBatt: RemoveBattery\n"); @@ -245,7 +250,8 @@ CompBattRemoveBattery(IN PCUNICODE_STRING BatteryName, NTSTATUS NTAPI -CompBattGetBatteries(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattGetBatteries( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PWCHAR p; NTSTATUS Status; @@ -286,8 +292,9 @@ CompBattGetBatteries(IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) NTSTATUS NTAPI -CompBattPnpEventHandler(IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification, - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +CompBattPnpEventHandler( + _In_ PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING PnpEventHandler\n"); if (CompBattDebug & 2) DbgPrint("CompBatt: Received device interface change notification\n"); @@ -319,8 +326,9 @@ CompBattPnpEventHandler(IN PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification, NTSTATUS NTAPI -CompBattAddDevice(IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT PdoDeviceObject) +CompBattAddDevice( + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDEVICE_OBJECT PdoDeviceObject) { NTSTATUS Status; UNICODE_STRING DeviceName; @@ -402,8 +410,9 @@ CompBattAddDevice(IN PDRIVER_OBJECT DriverObject, NTSTATUS NTAPI -CompBattPnpDispatch(IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp) +CompBattPnpDispatch( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) { PIO_STACK_LOCATION IoStackLocation = IoGetCurrentIrpStackLocation(Irp); NTSTATUS Status; From 3346301777edabab3f947d8260e5e0ce10b03043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 21:43:56 +0100 Subject: [PATCH 119/750] [COMPBATT] Pass NULL for the work item context, not 0 It expects an arbitrary pointer, do the right thing! --- drivers/bus/acpi/compbatt/comppnp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index efc40e9f62ef1..7e8523537aecc 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -183,7 +183,7 @@ CompBattAddNewBattery( BatteryData); /* Setup the IRP work entry */ - CompBattMonitorIrpComplete(BatteryData->DeviceObject, Irp, 0); + CompBattMonitorIrpComplete(BatteryData->DeviceObject, Irp, NULL); Status = STATUS_SUCCESS; } else From 28bb8c6ff7b82b8216dfa6bfb052f1d169959062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 21:52:24 +0100 Subject: [PATCH 120/750] [COMPBATT] Assign a memory allocation tag for the I/O remove lock IoInitializeRemoveLock expects an allocation tag to be provided when it allocates debug data in the kernel. Passing 0 leads to a bunch of ASSERTs in the kernel as such data is allocated by ExAllocatePoolWithTag of which a tag has to be supplied, it's not optional. --- drivers/bus/acpi/compbatt/comppnp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index 7e8523537aecc..31b05030b4f21 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -177,7 +177,7 @@ CompBattAddNewBattery( ExReleaseFastMutex(&DeviceExtension->Lock); /* Initialize the work item and delete lock */ - IoInitializeRemoveLock(&BatteryData->RemoveLock, 0, 0, 0); + IoInitializeRemoveLock(&BatteryData->RemoveLock, COMPBATT_TAG, 0, 0); ExInitializeWorkItem(&BatteryData->WorkItem, (PVOID)CompBattMonitorIrpCompleteWorker, BatteryData); From c6bdbefdc42e282b584a3c04a1b0e4fb88cec83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:09:10 +0100 Subject: [PATCH 121/750] [COMPBATT] Use the non-constant variant of UNICODE_STRING for the battery name --- drivers/bus/acpi/compbatt/comppnp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index 31b05030b4f21..819badf584338 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -225,7 +225,7 @@ CompBattAddNewBattery( NTSTATUS NTAPI CompBattRemoveBattery( - _In_ PCUNICODE_STRING BatteryName, + _In_ PUNICODE_STRING BatteryName, _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PCOMPBATT_BATTERY_DATA BatteryData; From 95f062bf0d896a25e6522012453f134034f3f4da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:27:07 +0100 Subject: [PATCH 122/750] [COMPBATT] Use the documented debug switches Use the debug switches that are documented and have a name rather than some cryptic values with no meaning or some shit. --- drivers/bus/acpi/compbatt/compbatt.c | 38 ++++++++++---------- drivers/bus/acpi/compbatt/compmisc.c | 8 ++--- drivers/bus/acpi/compbatt/comppnp.c | 52 ++++++++++++++-------------- 3 files changed, 49 insertions(+), 49 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 313780d2d34b4..6100edf8aff7d 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -25,7 +25,7 @@ CompBattOpenClose( _In_ PIRP Irp) { PAGED_CODE(); - if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING OpenClose\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING OpenClose\n"); /* Complete the IRP with success */ Irp->IoStatus.Status = STATUS_SUCCESS; @@ -33,7 +33,7 @@ CompBattOpenClose( IoCompleteRequest(Irp, IO_NO_INCREMENT); /* Return success */ - if (CompBattDebug & 0x100) DbgPrint("CompBatt: Exiting OpenClose\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: Exiting OpenClose\n"); return STATUS_SUCCESS; } @@ -46,7 +46,7 @@ CompBattSystemControl( PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; NTSTATUS Status; PAGED_CODE(); - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING System Control\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING System Control\n"); /* Are we attached yet? */ if (DeviceExtension->AttachedDevice) @@ -95,7 +95,7 @@ CompBattRecalculateTag( PCOMPBATT_BATTERY_DATA BatteryData; ULONG Tag; PLIST_ENTRY ListHead, NextEntry; - if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING CompBattRecalculateTag\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING CompBattRecalculateTag\n"); /* Loop the battery list */ ExAcquireFastMutex(&DeviceExtension->Lock); @@ -122,7 +122,7 @@ CompBattRecalculateTag( /* We're done */ ExReleaseFastMutex(&DeviceExtension->Lock); - if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING CompBattRecalculateTag\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING CompBattRecalculateTag\n"); } NTSTATUS @@ -133,7 +133,7 @@ CompBattIoctl( { PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; NTSTATUS Status; - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING Ioctl\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING Ioctl\n"); /* Let the class driver handle it */ Status = BatteryClassIoctl(DeviceExtension->ClassData, Irp); @@ -146,7 +146,7 @@ CompBattIoctl( } /* Return status */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING Ioctl\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING Ioctl\n"); return Status; } @@ -158,7 +158,7 @@ CompBattQueryTag( { NTSTATUS Status; PAGED_CODE(); - if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING QueryTag\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING QueryTag\n"); /* Was a tag assigned? */ if (!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED)) @@ -182,7 +182,7 @@ CompBattQueryTag( } /* Return status */ - if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING QueryTag\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING QueryTag\n"); return Status; } @@ -193,7 +193,7 @@ CompBattDisableStatusNotify( { PCOMPBATT_BATTERY_DATA BatteryData; PLIST_ENTRY ListHead, NextEntry; - if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING DisableStatusNotify\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING DisableStatusNotify\n"); /* Loop the battery list */ ExAcquireFastMutex(&DeviceExtension->Lock); @@ -210,7 +210,7 @@ CompBattDisableStatusNotify( /* Done */ ExReleaseFastMutex(&DeviceExtension->Lock); - if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING DisableStatusNotify\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING DisableStatusNotify\n"); return STATUS_SUCCESS; } @@ -246,7 +246,7 @@ CompBattGetBatteryInformation( BATTERY_QUERY_INFORMATION InputBuffer; PCOMPBATT_BATTERY_DATA BatteryData; PLIST_ENTRY ListHead, NextEntry; - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING GetBatteryInformation\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING GetBatteryInformation\n"); /* Set defaults */ BatteryInfo->DefaultAlert1 = 0; @@ -298,7 +298,7 @@ CompBattGetBatteryInformation( /* Next time we can use the static copy */ BatteryData->Flags |= COMPBATT_BATTERY_INFORMATION_PRESENT; - if (CompBattDebug & 2) + if (CompBattDebug & COMPBATT_DEBUG_INFO) DbgPrint("CompBattGetBatteryInformation: Read individual BATTERY_INFORMATION\n" "-------- Capabilities = %x\n-------- Technology = %x\n" "-------- Chemistry[4] = %x\n-------- DesignedCapacity = %x\n" @@ -364,7 +364,7 @@ CompBattGetBatteryInformation( } /* Print out final combined data */ - if (CompBattDebug & 2) + if (CompBattDebug & COMPBATT_DEBUG_INFO) DbgPrint("CompBattGetBatteryInformation: Returning BATTERY_INFORMATION\n" "-------- Capabilities = %x\n-------- Technology = %x\n" "-------- Chemistry[4] = %x\n-------- DesignedCapacity = %x\n" @@ -389,7 +389,7 @@ CompBattGetBatteryInformation( } /* We are done */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING GetBatteryInformation\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING GetBatteryInformation\n"); return Status; } @@ -405,7 +405,7 @@ CompBattGetBatteryGranularity( BATTERY_REPORTING_SCALE BatteryScale[4]; PLIST_ENTRY ListHead, NextEntry; ULONG i; - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING GetBatteryGranularity\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING GetBatteryGranularity\n"); /* Set defaults */ ReportingScale[0].Granularity = -1; @@ -476,7 +476,7 @@ CompBattGetBatteryGranularity( /* All done */ ExReleaseFastMutex(&DeviceExtension->Lock); - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING GetBatteryGranularity\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING GetBatteryGranularity\n"); return STATUS_SUCCESS; } @@ -510,7 +510,7 @@ CompBattQueryInformation( ULONG QueryLength = 0; NTSTATUS Status = STATUS_SUCCESS; PAGED_CODE(); - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING QueryInformation\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING QueryInformation\n"); /* Check for valid/correct tag */ if ((Tag != DeviceExtension->Tag) || @@ -601,7 +601,7 @@ CompBattQueryInformation( if ((NT_SUCCESS(Status)) && (QueryData)) RtlCopyMemory(Buffer, QueryData, QueryLength); /* Return function result */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING QueryInformation\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING QueryInformation\n"); return Status; } diff --git a/drivers/bus/acpi/compbatt/compmisc.c b/drivers/bus/acpi/compbatt/compmisc.c index 5992273863af6..328628ee57812 100644 --- a/drivers/bus/acpi/compbatt/compmisc.c +++ b/drivers/bus/acpi/compbatt/compmisc.c @@ -28,7 +28,7 @@ BatteryIoctl( NTSTATUS Status; PIRP Irp; PAGED_CODE(); - if (CompBattDebug & 0x100) DbgPrint("CompBatt: ENTERING BatteryIoctl\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING BatteryIoctl\n"); /* Initialize the event and IRP */ KeInitializeEvent(&Event, SynchronizationEvent, 0); @@ -53,16 +53,16 @@ BatteryIoctl( } /* Print failure */ - if (!(NT_SUCCESS(Status)) && (CompBattDebug & 8)) + if (!(NT_SUCCESS(Status)) && (CompBattDebug & COMPBATT_DEBUG_ERR)) DbgPrint("BatteryIoctl: Irp failed - %x\n", Status); /* Done */ - if (CompBattDebug & 0x100) DbgPrint("CompBatt: EXITING BatteryIoctl\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING BatteryIoctl\n"); } else { /* Out of memory */ - if (CompBattDebug & 8) DbgPrint("BatteryIoctl: couldn't create Irp\n"); + if (CompBattDebug & COMPBATT_DEBUG_ERR) DbgPrint("BatteryIoctl: couldn't create Irp\n"); Status = STATUS_INSUFFICIENT_RESOURCES; } diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index 819badf584338..7fd3725e61ffc 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -21,7 +21,7 @@ CompBattPowerDispatch( _In_ PIRP Irp) { PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; - if (CompBattDebug & 1) DbgPrint("CompBatt: PowerDispatch received power IRP.\n"); + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: PowerDispatch received power IRP.\n"); /* Start the next IRP */ PoStartNextPowerIrp(Irp); @@ -39,7 +39,7 @@ RemoveBatteryFromList( { PLIST_ENTRY ListHead, NextEntry; PCOMPBATT_BATTERY_DATA BatteryData; - if (CompBattDebug & 1) + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING RemoveBatteryFromList\n"); /* Loop the battery list */ @@ -70,7 +70,7 @@ RemoveBatteryFromList( /* Done */ ExReleaseFastMutex(&DeviceExtension->Lock); - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING RemoveBatteryFromList\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING RemoveBatteryFromList\n"); return NULL; } @@ -83,7 +83,7 @@ IsBatteryAlreadyOnList( PLIST_ENTRY ListHead, NextEntry; PCOMPBATT_BATTERY_DATA BatteryData; BOOLEAN Found = FALSE; - if (CompBattDebug & 1) + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING IsBatteryAlreadyOnList\n"); /* Loop the battery list */ @@ -107,7 +107,7 @@ IsBatteryAlreadyOnList( /* Release the lock and return search status */ ExReleaseFastMutex(&DeviceExtension->Lock); - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING IsBatteryAlreadyOnList\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING IsBatteryAlreadyOnList\n"); return Found; } @@ -123,7 +123,7 @@ CompBattAddNewBattery( PIO_STACK_LOCATION IoStackLocation; PFILE_OBJECT FileObject; PAGED_CODE(); - if (CompBattDebug & 1) + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: ENTERING AddNewBattery \"%w\" \n", BatteryName->Buffer); /* Is this a new battery? */ @@ -189,13 +189,13 @@ CompBattAddNewBattery( else { /* Fail, no memory */ - if (CompBattDebug & 8) + if (CompBattDebug & COMPBATT_DEBUG_ERR) DbgPrint("CompBatt: Couldn't allocate new battery Irp\n"); Status = STATUS_INSUFFICIENT_RESOURCES; ObDereferenceObject(BatteryData->DeviceObject); } } - else if (CompBattDebug & 8) + else if (CompBattDebug & COMPBATT_DEBUG_ERR) { /* Fail */ DbgPrint("CompBattAddNewBattery: Failed to get device Object. status = %lx\n", @@ -211,14 +211,14 @@ CompBattAddNewBattery( else { /* Fail, no memory */ - if (CompBattDebug & 8) + if (CompBattDebug & COMPBATT_DEBUG_ERR) DbgPrint("CompBatt: Couldn't allocate new battery node\n"); Status = STATUS_INSUFFICIENT_RESOURCES; } } /* We're done */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING AddNewBattery\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING AddNewBattery\n"); return Status; } @@ -229,7 +229,7 @@ CompBattRemoveBattery( _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { PCOMPBATT_BATTERY_DATA BatteryData; - if (CompBattDebug & 1) DbgPrint("CompBatt: RemoveBattery\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: RemoveBattery\n"); /* Remove the entry */ BatteryData = RemoveBatteryFromList(BatteryName, DeviceExtension); @@ -257,7 +257,7 @@ CompBattGetBatteries( NTSTATUS Status; PWCHAR LinkList; UNICODE_STRING LinkString; - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING GetBatteries\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING GetBatteries\n"); /* Get all battery links */ Status = IoGetDeviceInterfaces(&GUID_DEVICE_BATTERY, NULL, 0, &LinkList); @@ -279,14 +279,14 @@ CompBattGetBatteries( /* Parsing complete, clean up buffer */ ExFreePool(LinkList); } - else if (CompBattDebug & 8) + else if (CompBattDebug & COMPBATT_DEBUG_ERR) { /* Fail */ DbgPrint("CompBatt: Couldn't get list of batteries\n"); } /* Done */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING GetBatteries\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING GetBatteries\n"); return Status; } @@ -296,31 +296,31 @@ CompBattPnpEventHandler( _In_ PDEVICE_INTERFACE_CHANGE_NOTIFICATION Notification, _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING PnpEventHandler\n"); - if (CompBattDebug & 2) DbgPrint("CompBatt: Received device interface change notification\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING PnpEventHandler\n"); + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: Received device interface change notification\n"); /* Check what happened */ if (IsEqualGUIDAligned(&Notification->Event, &GUID_DEVICE_INTERFACE_ARRIVAL)) { /* Add the new battery */ - if (CompBattDebug & 2) + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: Received notification of battery arrival\n"); CompBattAddNewBattery(Notification->SymbolicLinkName, DeviceExtension); } else if (IsEqualGUIDAligned(&Notification->Event, &GUID_DEVICE_INTERFACE_REMOVAL)) { /* Don't do anything */ - if (CompBattDebug & 2) + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: Received notification of battery removal\n"); } else { /* Shouldn't happen */ - if (CompBattDebug & 2) DbgPrint("CompBatt: Received unhandled PnP event\n"); + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: Received unhandled PnP event\n"); } /* Done, return success */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING PnpEventHandler\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING PnpEventHandler\n"); return STATUS_SUCCESS; } @@ -336,7 +336,7 @@ CompBattAddDevice( PDEVICE_OBJECT DeviceObject; UNICODE_STRING SymbolicLinkName; BATTERY_MINIPORT_INFO MiniportInfo; - if (CompBattDebug & 2) DbgPrint("CompBatt: Got an AddDevice - %x\n", PdoDeviceObject); + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: Got an AddDevice - %x\n", PdoDeviceObject); /* Create the device */ RtlInitUnicodeString(&DeviceName, L"\\Device\\CompositeBattery"); @@ -364,7 +364,7 @@ CompBattAddDevice( if (!DeviceExtension->AttachedDevice) { /* Fail */ - if (CompBattDebug & 8) + if (CompBattDebug & COMPBATT_DEBUG_ERR) DbgPrint("CompBattAddDevice: Could not attach to LowerDevice.\n"); IoDeleteDevice(DeviceObject); return STATUS_UNSUCCESSFUL; @@ -417,7 +417,7 @@ CompBattPnpDispatch( PIO_STACK_LOCATION IoStackLocation = IoGetCurrentIrpStackLocation(Irp); NTSTATUS Status; PCOMPBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension; - if (CompBattDebug & 1) DbgPrint("CompBatt: ENTERING PnpDispatch\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: ENTERING PnpDispatch\n"); /* Set default error */ Status = STATUS_NOT_SUPPORTED; @@ -438,14 +438,14 @@ CompBattPnpDispatch( if (NT_SUCCESS(Status)) { /* Now go get the batteries */ - if (CompBattDebug & 2) + if (CompBattDebug & COMPBATT_DEBUG_WARN) DbgPrint("CompBatt: Successfully registered for PnP notification\n"); Status = CompBattGetBatteries(DeviceExtension); } else { /* We failed */ - if (CompBattDebug & 8) + if (CompBattDebug & COMPBATT_DEBUG_ERR) DbgPrint("CompBatt: Couldn't register for PnP notification - %x\n", Status); } @@ -499,7 +499,7 @@ CompBattPnpDispatch( } /* Release the remove lock and return status */ - if (CompBattDebug & 1) DbgPrint("CompBatt: EXITING PnpDispatch\n"); + if (CompBattDebug & COMPBATT_DEBUG_TRACE) DbgPrint("CompBatt: EXITING PnpDispatch\n"); return Status; } From c944116833d2981b489ca4304aa605482b966107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:33:02 +0100 Subject: [PATCH 123/750] [COMPBATT] Use the allocated battery IRPs as tags when acquiring I/O remove lock --- drivers/bus/acpi/compbatt/compbatt.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 6100edf8aff7d..76e339e1ee671 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -261,7 +261,7 @@ CompBattGetBatteryInformation( { /* Try to acquire the remove lock */ BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); - if (NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, 0))) + if (NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) { /* Now release the device lock since the battery can't go away */ ExReleaseFastMutex(&DeviceExtension->Lock); @@ -292,7 +292,7 @@ CompBattGetBatteryInformation( /* Fail if the query had a problem */ if (Status == STATUS_DEVICE_REMOVED) Status = STATUS_NO_SUCH_DEVICE; ExAcquireFastMutex(&DeviceExtension->Lock); - IoReleaseRemoveLock(&BatteryData->RemoveLock, 0); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); break; } @@ -346,7 +346,7 @@ CompBattGetBatteryInformation( /* Re-acquire the device extension lock and release the remove lock */ ExAcquireFastMutex(&DeviceExtension->Lock); - IoReleaseRemoveLock(&BatteryData->RemoveLock, 0); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); } /* Next entry */ @@ -421,7 +421,7 @@ CompBattGetBatteryGranularity( { /* Try to acquire the remove lock */ BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); - if (NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, 0))) + if (NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) { /* Now release the device lock since the battery can't go away */ ExReleaseFastMutex(&DeviceExtension->Lock); @@ -447,7 +447,7 @@ CompBattGetBatteryGranularity( { /* Fail if the query had a problem */ ExAcquireFastMutex(&DeviceExtension->Lock); - IoReleaseRemoveLock(&BatteryData->RemoveLock, 0); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); break; } @@ -467,7 +467,7 @@ CompBattGetBatteryGranularity( /* Re-acquire the device extension lock and release the remove lock */ ExAcquireFastMutex(&DeviceExtension->Lock); - IoReleaseRemoveLock(&BatteryData->RemoveLock, 0); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); } /* Next entry */ From 6a06db09cac016fcc90dd654570add0c6b30f288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:34:22 +0100 Subject: [PATCH 124/750] [COMPBATT] Use FALSE for BOOLEANs on BatteryIoctl, not integers --- drivers/bus/acpi/compbatt/compbatt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 76e339e1ee671..ea1e287ece0ec 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -286,7 +286,7 @@ CompBattGetBatteryInformation( sizeof(InputBuffer), &BatteryData->BatteryInformation, sizeof(BatteryData->BatteryInformation), - 0); + FALSE); if (!NT_SUCCESS(Status)) { /* Fail if the query had a problem */ @@ -442,7 +442,7 @@ CompBattGetBatteryGranularity( sizeof(InputBuffer), &BatteryScale, sizeof(BatteryScale), - 0); + FALSE); if (!NT_SUCCESS(Status)) { /* Fail if the query had a problem */ From ee9914c71211175b1df887baf5eaf0bba14351d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:40:36 +0100 Subject: [PATCH 125/750] [COMPBATT] Implement the battery monitor IRP worker --- drivers/bus/acpi/compbatt/compbatt.c | 275 ++++++++++++++++++++++++++- 1 file changed, 271 insertions(+), 4 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index ea1e287ece0ec..9e0e5d3a78289 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -74,8 +74,19 @@ CompBattMonitorIrpComplete( _In_ PIRP Irp, _In_ PVOID Context) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + PIO_STACK_LOCATION IoStackLocation; + PCOMPBATT_BATTERY_DATA BatteryData; + + /* We do not care about the device object */ + UNREFERENCED_PARAMETER(DeviceObject); + + /* Grab the composite battery data from the I/O stack packet */ + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + BatteryData = IoStackLocation->Parameters.Others.Argument2; + + /* Request the IRP complete worker to do the deed */ + ExQueueWorkItem(&BatteryData->WorkItem, DelayedWorkQueue); + return STATUS_MORE_PROCESSING_REQUIRED; } VOID @@ -83,8 +94,264 @@ NTAPI CompBattMonitorIrpCompleteWorker( _In_ PCOMPBATT_BATTERY_DATA BatteryData) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + NTSTATUS Status; + PIRP Irp; + UCHAR Mode; + ULONG PrevPowerState; + PDEVICE_OBJECT DeviceObject; + BATTERY_STATUS BatteryStatus; + PIO_STACK_LOCATION IoStackLocation; + PCOMPBATT_DEVICE_EXTENSION DeviceExtension; + + /* Cache the necessary battery data */ + Irp = BatteryData->Irp; + DeviceObject = BatteryData->DeviceObject; + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + DeviceExtension = IoStackLocation->Parameters.Others.Argument1; + + /* Switch to the next stack as we have to setup the control function data there */ + IoStackLocation = IoGetNextIrpStackLocation(Irp); + + /* Has the I/O composite battery request succeeded? */ + Status = Irp->IoStatus.Status; + if (!NT_SUCCESS(Status) && Status != STATUS_CANCELLED) + { + /* + * This battery is being removed from the composite, perform + * cleanups and do not inquire I/O requests again on this battery. + */ + if (Status == STATUS_DEVICE_REMOVED) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Battery (0x%p) is being removed from composite battery\n", BatteryData); + + IoFreeIrp(Irp); + CompBattRemoveBattery(&BatteryData->BatteryName, DeviceExtension); + return; + } + + /* + * This is the first time a battery is being added into the composite + * (we understand that if Status was STATUS_DEVICE_NOT_CONNECTED). + * We must invalidate the composite tag and request a recalculation + * of the battery tag. + */ + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Battery arrived for first time or disappeared (Status 0x%08lx)\n", Status); + + BatteryData->Tag = BATTERY_TAG_INVALID; + + /* + * Invalidate the last read status interrupt time as well since the last + * battery status data no longer applies. Same for the composite battery + * as well. + */ + BatteryData->InterruptTime = 0; + DeviceExtension->InterruptTime = 0; + + /* Notify Battery Class the battery status incurs in a change */ + BatteryClassStatusNotify(DeviceExtension->ClassData); + + /* Setup the necessary I/O data to query the battery tag */ + IoStackLocation->Parameters.DeviceIoControl.IoControlCode = IOCTL_BATTERY_QUERY_TAG; + IoStackLocation->Parameters.DeviceIoControl.InputBufferLength = sizeof(ULONG); + IoStackLocation->Parameters.DeviceIoControl.OutputBufferLength = sizeof(ULONG); + BatteryData->Mode = COMPBATT_QUERY_TAG; + BatteryData->WorkerBuffer.WorkerTag = 0xFFFFFFFF; + + /* Dispatch our request now to the battery's driver */ + goto DispatchRequest; + } + + /* Our I/O request has been completed successfully, check what did we get */ + Mode = BatteryData->Mode; + switch (Mode) + { + case COMPBATT_QUERY_TAG: + { + /* + * This battery has just gotten a tag, acknowledge the composite battery + * about that so it can recalculate its own composite tag. + */ + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Battery (Device 0x%p) has a tag of %lu\n", DeviceObject, BatteryData->WorkerBuffer.WorkerTag); + + /* Ensure the battery tag is not bogus, getting a tag of 0 is illegal */ + ASSERT(BatteryData->WorkerBuffer.WorkerTag != 0); + + /* Assign the battery tag */ + BatteryData->Tag = BatteryData->WorkerBuffer.WorkerTag; + BatteryData->Flags |= COMPBATT_TAG_ASSIGNED; + + /* Punt the composite battery flags, as the previous cached data no longer applies */ + DeviceExtension->Flags = 0; + + /* Notify the Battery Class driver this battery has got a tag */ + BatteryClassStatusNotify(DeviceExtension->ClassData); + break; + } + + case COMPBATT_READ_STATUS: + { + /* + * Read the battery status only if the IRP has not been cancelled, + * otherwise the request must be re-issued again. This typically + * happens if the wait values are in conflict which it might + * end up in inconsistent battery status results. + */ + if (Status != STATUS_CANCELLED && !Irp->Cancel) + { + /* + * If we reach here then the battery has entered into a change of + * power state or its charge capacity has changed. + */ + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Battery state (Device 0x%p) has changed\n", DeviceObject); + + /* Copy the battery status of this battery */ + RtlCopyMemory(&BatteryData->BatteryStatus, + &BatteryData->WorkerBuffer.WorkerStatus, + sizeof(BatteryData->BatteryStatus)); + + /* Update the interrupt time as this is the most recent read of the battery status */ + BatteryData->InterruptTime = KeQueryInterruptTime(); + + /* + * Ensure we have not gotten unknown capacities while we waited for new + * battery status. The battery might have malfunctioned or something. + */ + if (BatteryData->WorkerBuffer.WorkerStatus.Capacity == BATTERY_UNKNOWN_CAPACITY) + { + /* We do not know the capacity of this battery, default the low and high capacities */ + BatteryData->WaitStatus.LowCapacity = BATTERY_UNKNOWN_CAPACITY; + BatteryData->WaitStatus.HighCapacity = BATTERY_UNKNOWN_CAPACITY; + } + else + { + /* We know the capacity, adjust the low and high capacities accordingly */ + if (BatteryData->WaitStatus.LowCapacity > + BatteryData->WorkerBuffer.WorkerStatus.Capacity) + { + BatteryData->WaitStatus.LowCapacity = BatteryData->WorkerBuffer.WorkerStatus.Capacity; + } + + if (BatteryData->WaitStatus.HighCapacity < + BatteryData->WorkerBuffer.WorkerStatus.Capacity) + { + BatteryData->WaitStatus.HighCapacity = BatteryData->WorkerBuffer.WorkerStatus.Capacity; + } + } + + /* Copy the current last read power state for the next wait */ + BatteryData->WaitStatus.PowerState = BatteryData->WorkerBuffer.WorkerStatus.PowerState; + + /* + * Cache the previous power state of the composite battery and invalidate + * the last computed battery status interrupt time. This is because, + * logically, this specific battery incurred in a state change therefore + * the previous composite status is no longer consistent. + */ + PrevPowerState = DeviceExtension->BatteryStatus.PowerState; + DeviceExtension->InterruptTime = 0; + + /* Compute a new battery status for the composite battery */ + Status = CompBattQueryStatus(DeviceExtension, + DeviceExtension->Tag, + &BatteryStatus); + + /* Print out the current battery status of the composite to the debugger */ + if ((CompBattDebug & COMPBATT_DEBUG_INFO) && NT_SUCCESS(Status)) + DbgPrint("CompBatt: Latest composite battery status\n" + " PowerState -> 0x%lx\n" + " Capacity -> %u\n" + " Voltage -> %u\n" + " Rate -> %d\n", + BatteryStatus.PowerState, + BatteryStatus.Capacity, + BatteryStatus.Voltage, + BatteryStatus.Rate); + + /* + * Now determine whether should we notify the Battery Class driver due to + * changes in power state settings in the composite battery. This could + * happen in two following conditions: + * + * 1. The status notify flag was set for the respective power notification + * settings, and the composite battery incurred in a change of such + * settings. In this case we have to probe the current settings that + * they have changed. + * + * 2. The status notify flag was not set, therefore we do not know the + * exact configuration of the notification settings. We only care that + * the power state has changed at this point. + * + * Why do we have to do this is because we have to warn the Battery Class + * about the data that has changed. + */ + if (!(DeviceExtension->Flags & COMPBATT_STATUS_NOTIFY_SET)) + { + if (PrevPowerState != DeviceExtension->BatteryStatus.PowerState) + { + /* The previous power state is no longer valid, notify Battery Class */ + BatteryClassStatusNotify(DeviceExtension->ClassData); + } + } + else + { + /* + * Unlike the condition above, we check for power state change against + * the current notify wait set since the notify set flag bit is assigned. + */ + if (DeviceExtension->WaitNotifyStatus.PowerState != DeviceExtension->BatteryStatus.PowerState || + DeviceExtension->WaitNotifyStatus.LowCapacity > DeviceExtension->BatteryStatus.Capacity || + DeviceExtension->WaitNotifyStatus.HighCapacity < DeviceExtension->BatteryStatus.Capacity) + { + /* The following configuration settings have changed, notify Battery Class */ + BatteryClassStatusNotify(DeviceExtension->ClassData); + } + } + } + + break; + } + + default: + { + ASSERTMSG("CompBatt: BAD!!! WE SHOULD NOT BE HERE!\n", FALSE); + UNREACHABLE; + } + } + + /* Setup the necessary data to read battery status */ + BatteryData->WaitStatus.BatteryTag = BatteryData->Tag; + BatteryData->WaitStatus.Timeout = 3000; // FIXME: Hardcoded (wait for 3 seconds) because we do not have ACPI notifications implemented yet... + + RtlCopyMemory(&BatteryData->WorkerBuffer.WorkerWaitStatus, + &BatteryData->WaitStatus, + sizeof(BatteryData->WaitStatus)); + + IoStackLocation->Parameters.DeviceIoControl.IoControlCode = IOCTL_BATTERY_QUERY_STATUS; + IoStackLocation->Parameters.DeviceIoControl.InputBufferLength = sizeof(BatteryData->WorkerBuffer.WorkerWaitStatus); + IoStackLocation->Parameters.DeviceIoControl.OutputBufferLength = sizeof(BatteryData->WorkerBuffer.WorkerStatus); + BatteryData->Mode = COMPBATT_READ_STATUS; + +DispatchRequest: + /* Setup the system buffer to that of the battery data which it will hold the returned data */ + IoStackLocation->MajorFunction = IRP_MJ_DEVICE_CONTROL; + Irp->AssociatedIrp.SystemBuffer = &BatteryData->WorkerBuffer; + Irp->Cancel = FALSE; + Irp->PendingReturned = FALSE; + + /* Setup the worker completion routine which it will invoke the worker later on */ + IoSetCompletionRoutine(Irp, + CompBattMonitorIrpComplete, + NULL, + TRUE, + TRUE, + TRUE); + + /* Dispatch the I/O request now */ + IoCallDriver(DeviceObject, Irp); } VOID From a6d4998c6c89abfb51cb561ce19f1f5aabc1bbe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:48:52 +0100 Subject: [PATCH 126/750] [COMPBATT] Implement CompBattQueryStatus and CompBattSetStatusNotify --- drivers/bus/acpi/compbatt/compbatt.c | 543 ++++++++++++++++++++++++++- 1 file changed, 539 insertions(+), 4 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 9e0e5d3a78289..7e55887be6077 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -481,6 +481,115 @@ CompBattDisableStatusNotify( return STATUS_SUCCESS; } +static +BOOLEAN +CompBattCalculateTotalRateAndLinkedBatteries( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PULONG TotalRate, + _Out_ PULONG BatteriesCount) +{ + PCOMPBATT_BATTERY_DATA BatteryData; + PLIST_ENTRY ListHead, NextEntry; + BOOLEAN BadBattery = FALSE; + ULONG LinkedBatteries = 0; + ULONG BadBatteriesCount = 0; + ULONG ComputedRate = 0; + + /* Loop over the linked batteries and sum up the total capacity rate */ + ExAcquireFastMutex(&DeviceExtension->Lock); + ListHead = &DeviceExtension->BatteryList; + for (NextEntry = ListHead->Flink; + NextEntry != ListHead; + NextEntry = NextEntry->Flink) + { + /* Acquire the remove lock so this battery does not disappear under us */ + BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); + if (!NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) + continue; + + /* + * Ensure this battery has a valid tag and that its rate capacity + * is not unknown. Reject unknown rates when calculating the total rate. + */ + if ((BatteryData->Tag != BATTERY_TAG_INVALID) && + (BatteryData->BatteryStatus.Rate != BATTERY_UNKNOWN_RATE)) + { + /* + * Now the ultimate judgement for this battery is to determine + * if the battery behaves optimally based on its current power + * state it is and the rate flow of the battery. + * + * If the rate flow is positive the battery is receiving power + * which increases the chemical potential energy as electrons + * move around, THIS MEANS the battery is CHARGING. If the rate + * flow is negative the battery cells are producing way less + * electrical energy, thus the battery is DISCHARGING. + * + * A consistent battery is a battery of which power state matches + * the rate flow. If that were the case, then we have found a bad + * battery. The worst case is that a battery is physically damanged. + */ + if ((BatteryData->BatteryStatus.PowerState & BATTERY_DISCHARGING) && + (BatteryData->BatteryStatus.Rate >= 0)) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: The battery is discharging but in reality it is charging... (Rate %d)\n", + BatteryData->BatteryStatus.Rate); + + BadBattery = TRUE; + BadBatteriesCount++; + } + + if ((BatteryData->BatteryStatus.PowerState & BATTERY_CHARGING) && + (BatteryData->BatteryStatus.Rate <= 0)) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: The battery is charging but in reality it is discharging... (Rate %d)\n", + BatteryData->BatteryStatus.Rate); + + BadBattery = TRUE; + BadBatteriesCount++; + } + + if (((BatteryData->BatteryStatus.PowerState & (BATTERY_CHARGING | BATTERY_DISCHARGING)) == 0) && + (BatteryData->BatteryStatus.Rate != 0)) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: The battery is neither charging or discharging but has a contradicting rate... (Rate %d)\n", + BatteryData->BatteryStatus.Rate); + + BadBattery = TRUE; + BadBatteriesCount++; + } + + /* + * Sum up the rate of this battery to make up the total, even if that means + * the battery may have incosistent rate. This is because it is still a linked + * battery to the composite battery and it is used to power up the system nonetheless. + */ + ComputedRate += BatteryData->BatteryStatus.Rate; + } + + /* We are done with this individual battery */ + LinkedBatteries++; + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + } + + /* Release the lock as we are no longer poking through the batteries list */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Print out the total count of bad batteries we have found */ + if (BadBatteriesCount > 0) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: %lu bad batteries have been found!\n", BadBatteriesCount); + } + + *TotalRate = ComputedRate; + *BatteriesCount = LinkedBatteries; + return BadBattery; +} + NTSTATUS NTAPI CompBattSetStatusNotify( @@ -488,8 +597,226 @@ CompBattSetStatusNotify( _In_ ULONG BatteryTag, _In_ PBATTERY_NOTIFY BatteryNotify) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + NTSTATUS Status; + BOOLEAN BadBattery; + ULONG TotalRate; + ULONG BatteriesCount; + ULONG HighestCapacity; + ULONG LowCapDifference, HighCapDifference, LowDelta, HighDelta; + BATTERY_STATUS BatteryStatus; + PCOMPBATT_BATTERY_DATA BatteryData; + PLIST_ENTRY ListHead, NextEntry; + + /* + * The caller wants to set new status notification settings but the composite + * battery does not have a valid tag assigned, or the tag does not actually match. + */ + if (!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED) || + (DeviceExtension->Tag != BatteryTag)) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Composite battery tag not assigned or not matching (Tag -> %lu, Composite Tag -> %lu)\n", + BatteryTag, DeviceExtension->Tag); + + return STATUS_NO_SUCH_DEVICE; + } + + /* + * Before we are setting up new status wait notification points we need to + * refresh the composite status so that we get to know what values should be + * set for the current notification wait status. + */ + Status = CompBattQueryStatus(DeviceExtension, + BatteryTag, + &BatteryStatus); + if (!NT_SUCCESS(Status)) + { + if (CompBattDebug & COMPBATT_DEBUG_ERR) + DbgPrint("CompBatt: Failed to refresh composite battery's status (Status 0x%08lx)\n", Status); + + return Status; + } + + /* Print out battery status data that has been polled */ + if (CompBattDebug & COMPBATT_DEBUG_INFO) + DbgPrint("CompBatt: Latest composite battery status (when setting notify status)\n" + " PowerState -> 0x%lx\n" + " Capacity -> %u\n" + " Voltage -> %u\n" + " Rate -> %d\n", + BatteryStatus.PowerState, + BatteryStatus.Capacity, + BatteryStatus.Voltage, + BatteryStatus.Rate); + + /* Calculate the high and low capacity differences based on the real summed capacity of the composite */ + LowCapDifference = DeviceExtension->BatteryStatus.Capacity - BatteryNotify->LowCapacity; + HighCapDifference = BatteryNotify->HighCapacity - DeviceExtension->BatteryStatus.Capacity; + + /* Cache the notification parameters provided for later usage when polling for battery status */ + DeviceExtension->WaitNotifyStatus.PowerState = BatteryNotify->PowerState; + DeviceExtension->WaitNotifyStatus.LowCapacity = BatteryNotify->LowCapacity; + DeviceExtension->WaitNotifyStatus.HighCapacity = BatteryNotify->HighCapacity; + + /* Toggle the valid notify flag as these are the newer notification settings */ + DeviceExtension->Flags |= COMPBATT_STATUS_NOTIFY_SET; + + /* + * Get the number of currently linked batteries to composite and total rate, + * we will use these counters later to determine the wait values for each + * individual battery. + */ + BadBattery = CompBattCalculateTotalRateAndLinkedBatteries(DeviceExtension, + &TotalRate, + &BatteriesCount); + + /* + * Of course we have to be sure that we have at least one battery linked + * with the composite battery at this time of getting invoked to set new + * notification wait settings. + */ + ASSERT(BatteriesCount != 0); + + /* Walk over the linked batteries list and set up new wait configuration settings */ + ExAcquireFastMutex(&DeviceExtension->Lock); + ListHead = &DeviceExtension->BatteryList; + for (NextEntry = ListHead->Flink; + NextEntry != ListHead; + NextEntry = NextEntry->Flink) + { + /* Acquire the remove lock so this battery does not disappear under us */ + BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); + if (!NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) + continue; + + /* Now release the device lock since the battery can't go away */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Make sure this battery has a tag before setting new wait values */ + if (BatteryData->Tag != BATTERY_TAG_INVALID) + { + /* + * And also make sure this battery does not have an unknown + * capacity, we cannot set up new configuration wait settings + * based on that. Default the low and high wait capacities. + */ + if (BatteryData->BatteryStatus.Capacity != BATTERY_UNKNOWN_CAPACITY) + { + /* + * Calculate the low capacity wait setting. If at least one + * bad battery was found while we computed the total composite + * rate, then divide the difference between the total batteries. + * Otherwise compute the battery deltas of the composite based + * on total summed capacity rate. Otherwise if the total rate + * is 0, then the real wait low and high capacities will be on + * par with the real capacity. + */ + if (BadBattery) + { + LowDelta = LowCapDifference / BatteriesCount; + HighDelta = HighCapDifference / BatteriesCount; + } + else + { + if (TotalRate) + { + LowDelta = COMPUTE_BATT_CAP_DELTA(LowCapDifference, BatteryData, TotalRate); + HighDelta = COMPUTE_BATT_CAP_DELTA(HighCapDifference, BatteryData, TotalRate); + } + else + { + LowDelta = 0; + HighDelta = 0; + } + } + + /* + * Assign the wait low capacity setting ONLY if the battery delta + * is not high. Otherwise it has overflowed and we cannot use that + * for low capacity, of which we have to default it to 0. + */ + if (BatteryData->BatteryStatus.Capacity > LowDelta) + { + BatteryData->WaitStatus.LowCapacity = BatteryData->BatteryStatus.Capacity - LowDelta; + } + else + { + BatteryData->WaitStatus.LowCapacity = COMPBATT_WAIT_MIN_LOW_CAPACITY; + } + + /* + * Assign the wait high capacity setting ONLY if the real capacity + * is not above the maximum highest capacity constant. + */ + HighestCapacity = COMPBATT_WAIT_MAX_HIGH_CAPACITY - HighDelta; + if (HighestCapacity < BatteryData->BatteryStatus.Capacity) + { + BatteryData->WaitStatus.HighCapacity = HighestCapacity; + } + else + { + BatteryData->WaitStatus.HighCapacity = BatteryData->BatteryStatus.Capacity + HighDelta; + } + + /* + * We have set up the wait values but they are in conflict with the + * ones set up by the IRP complete worker. We have to cancel the IRP + * so the worker will copy our wait configuration values. + */ + if ((BatteryData->Mode == COMPBATT_READ_STATUS) && + (BatteryData->WaitStatus.PowerState != BatteryData->WorkerBuffer.WorkerWaitStatus.PowerState || + BatteryData->WaitStatus.LowCapacity != BatteryData->WorkerBuffer.WorkerWaitStatus.LowCapacity || + BatteryData->WaitStatus.HighCapacity != BatteryData->WorkerBuffer.WorkerWaitStatus.HighCapacity)) + { + if (CompBattDebug & COMPBATT_DEBUG_INFO) + DbgPrint("CompBatt: Configuration wait values are in conflict\n" + " BatteryData->WaitStatus.PowerState -> 0x%lx\n" + " BatteryData->WorkerBuffer.WorkerWaitStatus.PowerState -> 0x%lx\n" + " BatteryData->WaitStatus.LowCapacity -> %u\n" + " BatteryData->WorkerBuffer.WorkerWaitStatus.LowCapacity -> %u\n" + " BatteryData->WaitStatus.HighCapacity -> %u\n" + " BatteryData->WorkerBuffer.WorkerWaitStatus.HighCapacity -> %u\n", + BatteryData->WaitStatus.PowerState, + BatteryData->WorkerBuffer.WorkerWaitStatus.PowerState, + BatteryData->WaitStatus.LowCapacity, + BatteryData->WorkerBuffer.WorkerWaitStatus.LowCapacity, + BatteryData->WaitStatus.HighCapacity, + BatteryData->WorkerBuffer.WorkerWaitStatus.HighCapacity); + + IoCancelIrp(BatteryData->Irp); + } + } + else + { + BatteryData->WaitStatus.LowCapacity = BATTERY_UNKNOWN_CAPACITY; + BatteryData->WaitStatus.HighCapacity = BATTERY_UNKNOWN_CAPACITY; + } + } + + /* We are done with this battery */ + ExAcquireFastMutex(&DeviceExtension->Lock); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + } + + /* Release the lock as we are no longer poking through the batteries list */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Ensure the composite battery did not incur in drastic changes of tag */ + if (!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED) || + (DeviceExtension->Tag != BatteryTag)) + { + /* + * Either the last battery was removed (in this case the composite is no + * longer existing) or a battery was removed of which the whole battery + * information must be recomputed and such. + */ + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Last battery or a battery was removed, the whole composite data must be recomputed\n"); + + return STATUS_NO_SUCH_DEVICE; + } + + return STATUS_SUCCESS; } NTSTATUS @@ -499,8 +826,216 @@ CompBattQueryStatus( _In_ ULONG Tag, _Out_ PBATTERY_STATUS BatteryStatus) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + PCOMPBATT_BATTERY_DATA BatteryData; + BATTERY_WAIT_STATUS Wait; + PLIST_ENTRY ListHead, NextEntry; + ULONGLONG LastReadTime, CurrentReadTime; + NTSTATUS Status = STATUS_SUCCESS; + + /* + * The caller wants to update the composite battery status but the composite + * itself does not have a valid tag assigned, or the tag does not actually match. + */ + if (!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED) || + (DeviceExtension->Tag != Tag)) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Composite battery tag not assigned or not matching (Tag -> %lu, Composite Tag -> %lu)\n", + Tag, DeviceExtension->Tag); + + return STATUS_NO_SUCH_DEVICE; + } + + /* Initialize the status and wait fields with zeros */ + RtlZeroMemory(BatteryStatus, sizeof(*BatteryStatus)); + RtlZeroMemory(&Wait, sizeof(Wait)); + + /* + * The battery status was already updated when the caller queried for new + * status. We do not need to update the status again for no reason. + * Just give them the data outright. + */ + CurrentReadTime = KeQueryInterruptTime(); + LastReadTime = CurrentReadTime - DeviceExtension->InterruptTime; + if (LastReadTime < COMPBATT_FRESH_STATUS_TIME) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Composite battery status data is fresh, no need to update it again\n"); + + RtlCopyMemory(BatteryStatus, &DeviceExtension->BatteryStatus, sizeof(BATTERY_STATUS)); + return STATUS_SUCCESS; + } + + /* + * Initialize the battery status context with unknown defaults, until we get + * to retrieve the real data from each battery and compute the exact status. + * Assume the system is powered by AC source for now until we find out it is + * not the case. + */ + BatteryStatus->PowerState = BATTERY_POWER_ON_LINE; + BatteryStatus->Capacity = BATTERY_UNKNOWN_CAPACITY; + BatteryStatus->Voltage = BATTERY_UNKNOWN_VOLTAGE; + BatteryStatus->Rate = BATTERY_UNKNOWN_RATE; + + /* Iterate over all the present linked batteries and retrieve their status */ + ExAcquireFastMutex(&DeviceExtension->Lock); + ListHead = &DeviceExtension->BatteryList; + for (NextEntry = ListHead->Flink; + NextEntry != ListHead; + NextEntry = NextEntry->Flink) + { + /* Acquire the remove lock so this battery does not disappear under us */ + BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); + if (!NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) + continue; + + /* Now release the device lock since the battery can't go away */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Setup the battery tag for the status wait which is needed to send off the IOCTL */ + Wait.BatteryTag = BatteryData->Tag; + + /* Make sure this battery has a tag before we send off the IOCTL */ + if (BatteryData->Tag != BATTERY_TAG_INVALID) + { + /* Only query new battery status data if it is no longer fresh */ + LastReadTime = CurrentReadTime - BatteryData->InterruptTime; + if (LastReadTime > COMPBATT_FRESH_STATUS_TIME) + { + RtlZeroMemory(&BatteryData->BatteryStatus, + sizeof(BatteryData->BatteryStatus)); + Status = BatteryIoctl(IOCTL_BATTERY_QUERY_STATUS, + BatteryData->DeviceObject, + &Wait, + sizeof(Wait), + &BatteryData->BatteryStatus, + sizeof(BatteryData->BatteryStatus), + FALSE); + if (!NT_SUCCESS(Status)) + { + /* + * If the device is being suddenly removed then we must invalidate + * both this battery and composite tags. + */ + if (Status == STATUS_DEVICE_REMOVED) + { + Status = STATUS_NO_SUCH_DEVICE; + } + + ExAcquireFastMutex(&DeviceExtension->Lock); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + break; + } + + /* Update the timestamp of the current read of battery status */ + BatteryData->InterruptTime = CurrentReadTime; + } + + /* + * Now it is time to combine the data into the composite status. + * The battery is either charging or discharging. AC is present + * only if the charger supplies current to all batteries. And + * the composite is deemed as critical if at least one battery + * is discharging and it is in crtitical state. + */ + BatteryStatus->PowerState |= (BatteryData->BatteryStatus.PowerState & (BATTERY_CHARGING | BATTERY_DISCHARGING)); + BatteryStatus->PowerState &= (BatteryData->BatteryStatus.PowerState | ~BATTERY_POWER_ON_LINE); + if ((BatteryData->BatteryStatus.PowerState & BATTERY_CRITICAL) && + (BatteryData->BatteryStatus.PowerState & BATTERY_DISCHARGING)) + { + BatteryStatus->PowerState |= BATTERY_CRITICAL; + } + + /* Add up the battery capacity if it is not unknown */ + if (BatteryData->BatteryStatus.Capacity != BATTERY_UNKNOWN_CAPACITY) + { + if (BatteryStatus->Capacity != BATTERY_UNKNOWN_CAPACITY) + { + BatteryStatus->Capacity += BatteryData->BatteryStatus.Capacity; + } + else + { + BatteryStatus->Capacity = BatteryData->BatteryStatus.Capacity; + } + } + + /* Always pick up the greatest voltage for the composite battery */ + if (BatteryData->BatteryStatus.Voltage != BATTERY_UNKNOWN_VOLTAGE) + { + if (BatteryStatus->Voltage != BATTERY_UNKNOWN_VOLTAGE) + { + BatteryStatus->Voltage = max(BatteryStatus->Voltage, + BatteryData->BatteryStatus.Voltage); + } + else + { + BatteryStatus->Voltage = BatteryData->BatteryStatus.Voltage; + } + } + + /* Add up the battery discharge rate if it is not unknown */ + if (BatteryData->BatteryStatus.Rate != BATTERY_UNKNOWN_RATE) + { + if (BatteryStatus->Rate != BATTERY_UNKNOWN_RATE) + { + BatteryStatus->Rate += BatteryData->BatteryStatus.Rate; + } + else + { + BatteryStatus->Rate = BatteryData->BatteryStatus.Rate; + } + } + } + + /* We are done combining data from this battery */ + ExAcquireFastMutex(&DeviceExtension->Lock); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + } + + /* Release the lock as we are no longer poking through the batteries list */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Ensure the composite battery did not incur in drastic changes of tag */ + if (!(DeviceExtension->Flags & COMPBATT_TAG_ASSIGNED) || + (DeviceExtension->Tag != Tag)) + { + /* + * Either the last battery was removed (in this case the composite is no + * longer existing) or a battery was removed of which the whole battery + * information must be recomputed and such. + */ + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: Last battery or a battery was removed, the whole composite data must be recomputed\n"); + + return STATUS_NO_SUCH_DEVICE; + } + + /* + * If there is a battery that is charging while another one discharging, + * then tell the caller the composite battery is actually discharging. + * This is less likely to happen on a multi-battery system like laptops + * as the charger would provide electricity to all the batteries. + * Perhaps the most likely case scenario would be if the system were + * to be powered by a UPS. + */ + if ((BatteryStatus->PowerState & BATTERY_CHARGING) && + (BatteryStatus->PowerState & BATTERY_DISCHARGING)) + { + BatteryStatus->PowerState &= ~BATTERY_CHARGING; + } + + /* Copy the combined status information to the composite battery */ + if (NT_SUCCESS(Status)) + { + RtlCopyMemory(&DeviceExtension->BatteryStatus, + BatteryStatus, + sizeof(DeviceExtension->BatteryStatus)); + + /* Update the last read battery status timestamp as well */ + DeviceExtension->InterruptTime = CurrentReadTime; + } + + return Status; } NTSTATUS From c439c5849b60920d9aec198e4f5234339ef7c9a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:52:58 +0100 Subject: [PATCH 127/750] [COMPBATT] Implement CompBattGetEstimatedTime --- drivers/bus/acpi/compbatt/compbatt.c | 219 ++++++++++++++++++++++++++- 1 file changed, 217 insertions(+), 2 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 7e55887be6077..740f1f18cb4aa 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -1282,14 +1282,229 @@ CompBattGetBatteryGranularity( return STATUS_SUCCESS; } +static +LONG +CompBattCalculateAtRateTime( + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) +{ + NTSTATUS Status; + PCOMPBATT_BATTERY_DATA BatteryData; + BATTERY_QUERY_INFORMATION QueryInformation; + PLIST_ENTRY ListHead, NextEntry; + ULONG Time; + LONG ComputedAtRate = 0; + + /* Walk over the linked batteries list to poll for "At Rate" value of each battery */ + ExAcquireFastMutex(&DeviceExtension->Lock); + ListHead = &DeviceExtension->BatteryList; + for (NextEntry = ListHead->Flink; + NextEntry != ListHead; + NextEntry = NextEntry->Flink) + { + /* Acquire the remove lock so this battery does not disappear under us */ + BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); + if (!NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) + continue; + + /* Now release the device lock since the battery can't go away */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Build the necessary information in order to query the battery estimated time */ + QueryInformation.BatteryTag = BatteryData->Tag; + QueryInformation.InformationLevel = BatteryEstimatedTime; + QueryInformation.AtRate = 0; + + /* Make sure this battery has a valid tag before issuing the IOCTL */ + if (BatteryData->Tag != BATTERY_TAG_INVALID) + { + /* + * Now it is time to issue the IOCTL to the battery device. + * We are calculating the "At Rate" counter based on each linked + * battery that is discharging, one at a time. This ensures + * that when we will actually retrieve the estimation time of each + * individual battery and sum it all up as one time for the composite + * battery, that the estimated time is accurate enough. + */ + Status = BatteryIoctl(IOCTL_BATTERY_QUERY_INFORMATION, + BatteryData->DeviceObject, + &QueryInformation, + sizeof(QueryInformation), + &Time, + sizeof(Time), + FALSE); + if (NT_SUCCESS(Status)) + { + if ((Time != 0) && (Time != BATTERY_UNKNOWN_TIME)) + { + ComputedAtRate -= COMPUTE_ATRATE_DRAIN(BatteryData, Time); + } + } + } + + /* We are done with this battery */ + ExAcquireFastMutex(&DeviceExtension->Lock); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + } + + /* Release the lock as we are no longer poking through the batteries list */ + ExReleaseFastMutex(&DeviceExtension->Lock); + return ComputedAtRate; +} + NTSTATUS NTAPI CompBattGetEstimatedTime( _Out_ PULONG Time, _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + NTSTATUS Status; + PCOMPBATT_BATTERY_DATA BatteryData; + BATTERY_STATUS BatteryStatus; + BATTERY_QUERY_INFORMATION QueryInformation; + PLIST_ENTRY ListHead, NextEntry; + ULONG ReturnedTime; + LONG ComputedAtRate; + + /* Assume the battery time is not estimated yet */ + *Time = BATTERY_UNKNOWN_TIME; + + /* + * Before we are querying the composite estimated battery time we must + * refresh the battery status cache if we have not done it so. + */ + Status = CompBattQueryStatus(DeviceExtension, + DeviceExtension->Tag, + &BatteryStatus); + if (!NT_SUCCESS(Status)) + { + if (CompBattDebug & COMPBATT_DEBUG_ERR) + DbgPrint("CompBatt: Failed to refresh composite battery's status (Status 0x%08lx)\n", Status); + + return Status; + } + + /* Print out battery status data that has been polled */ + if (CompBattDebug & COMPBATT_DEBUG_INFO) + DbgPrint("CompBatt: Latest composite battery status (when querying for estimated time)\n" + " PowerState -> 0x%lx\n" + " Capacity -> %u\n" + " Voltage -> %u\n" + " Rate -> %d\n", + BatteryStatus.PowerState, + BatteryStatus.Capacity, + BatteryStatus.Voltage, + BatteryStatus.Rate); + + /* + * If the batteries are not being discharged and the system is directly + * being powered by external AC source then it makes no sense to + * compute the battery estimated time because that construct is for + * WHEN the system is powered directly from batteries and it drains power. + */ + if (DeviceExtension->BatteryStatus.PowerState & BATTERY_POWER_ON_LINE) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + { + DbgPrint("CompBatt: The system is powered by AC source, estimated time is not available\n"); + } + + return STATUS_SUCCESS; + } + + /* Determine the draining "At Rate" counter for all batteries */ + ComputedAtRate = CompBattCalculateAtRateTime(DeviceExtension); + + /* + * A rate of 0 indicates none of the batteries that are linked with + * the composite are being drained therefore we cannot estimate the + * run time of the composite as it is not discharging. + */ + if (ComputedAtRate == 0) + { + if (CompBattDebug & COMPBATT_DEBUG_WARN) + DbgPrint("CompBatt: No battery is discharging and no power is being drained, cannot estimate the run time\n"); + + return STATUS_SUCCESS; + } + + /* Walk over the linked batteries list and determine the exact estimated time */ + ExAcquireFastMutex(&DeviceExtension->Lock); + ListHead = &DeviceExtension->BatteryList; + for (NextEntry = ListHead->Flink; + NextEntry != ListHead; + NextEntry = NextEntry->Flink) + { + /* Acquire the remove lock so this battery does not disappear under us */ + BatteryData = CONTAINING_RECORD(NextEntry, COMPBATT_BATTERY_DATA, BatteryLink); + if (!NT_SUCCESS(IoAcquireRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp))) + continue; + + /* Now release the device lock since the battery can't go away */ + ExReleaseFastMutex(&DeviceExtension->Lock); + + /* Build the necessary information in order to query the battery estimated time */ + QueryInformation.BatteryTag = BatteryData->Tag; + QueryInformation.InformationLevel = BatteryEstimatedTime; + QueryInformation.AtRate = ComputedAtRate; + + /* Make sure this battery has a valid tag before issuing the IOCTL */ + if (BatteryData->Tag != BATTERY_TAG_INVALID) + { + Status = BatteryIoctl(IOCTL_BATTERY_QUERY_INFORMATION, + BatteryData->DeviceObject, + &QueryInformation, + sizeof(QueryInformation), + &ReturnedTime, + sizeof(ReturnedTime), + FALSE); + if (!NT_SUCCESS(Status)) + { + /* + * If the device is being suddenly removed then we must invalidate + * both this battery and composite tags. + */ + if (Status == STATUS_DEVICE_REMOVED) + { + Status = STATUS_NO_SUCH_DEVICE; + } + + ExAcquireFastMutex(&DeviceExtension->Lock); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + + /* + * In other places we are ceasing the execution of the loop but + * here we want to continue looking for other linked batteries. + * This is because we are querying for the estimated battery time + * at the time the last battery status was valid. Also bear in + * mind IOCTL_BATTERY_QUERY_INFORMATION with InformationLevel as + * BatteryEstimatedTime might not be a valid request supported + * by this battery. + */ + continue; + } + + /* Now sum up the estimated battery time */ + if (ReturnedTime != BATTERY_UNKNOWN_TIME) + { + if (*Time != BATTERY_UNKNOWN_TIME) + { + *Time += ReturnedTime; + } + else + { + *Time = ReturnedTime; + } + } + } + + /* We are done with this battery */ + ExAcquireFastMutex(&DeviceExtension->Lock); + IoReleaseRemoveLock(&BatteryData->RemoveLock, BatteryData->Irp); + } + + /* Release the lock as we are no longer poking through the batteries list */ + ExReleaseFastMutex(&DeviceExtension->Lock); + return Status; } NTSTATUS From 65b29fe533099ce1f2599755dc9447d90bba6493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Sat, 14 Dec 2024 22:59:38 +0100 Subject: [PATCH 128/750] [COMPBATT] Update the top headers and relicense the driver as MIT --- drivers/bus/acpi/compbatt/compbatt.c | 10 +++++----- drivers/bus/acpi/compbatt/compbatt.h | 4 ++-- drivers/bus/acpi/compbatt/compmisc.c | 9 ++++----- drivers/bus/acpi/compbatt/comppnp.c | 9 ++++----- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 740f1f18cb4aa..533c32e499101 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -1,9 +1,9 @@ /* - * PROJECT: ReactOS Composite Battery Driver - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/drivers/bus/acpi/compbatt/compbatt.c - * PURPOSE: Main Initialization Code and IRP Handling - * PROGRAMMERS: ReactOS Portable Systems Group + * PROJECT: ReactOS Composite Battery Driver + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Main Initialization Code and IRP Handling + * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group + * Copyright 2024 George Bișoc */ /* INCLUDES *******************************************************************/ diff --git a/drivers/bus/acpi/compbatt/compbatt.h b/drivers/bus/acpi/compbatt/compbatt.h index 1b8c1fb49d14d..66307defbc4ee 100644 --- a/drivers/bus/acpi/compbatt/compbatt.h +++ b/drivers/bus/acpi/compbatt/compbatt.h @@ -1,8 +1,8 @@ /* * PROJECT: ReactOS Composite Battery Driver - * LICENSE: BSD - See COPYING.ARM in the top level directory + * LICENSE: MIT (https://spdx.org/licenses/MIT) * PURPOSE: Composite battery main header file - * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group + * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group * Copyright 2024 George Bișoc */ diff --git a/drivers/bus/acpi/compbatt/compmisc.c b/drivers/bus/acpi/compbatt/compmisc.c index 328628ee57812..6a6cec14056c7 100644 --- a/drivers/bus/acpi/compbatt/compmisc.c +++ b/drivers/bus/acpi/compbatt/compmisc.c @@ -1,9 +1,8 @@ /* - * PROJECT: ReactOS Composite Battery Driver - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/drivers/bus/acpi/compbatt/compmisc.c - * PURPOSE: Miscellaneous Support Routines - * PROGRAMMERS: ReactOS Portable Systems Group + * PROJECT: ReactOS Composite Battery Driver + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Miscellaneous Support Routines + * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group */ /* INCLUDES *******************************************************************/ diff --git a/drivers/bus/acpi/compbatt/comppnp.c b/drivers/bus/acpi/compbatt/comppnp.c index 7fd3725e61ffc..4e456d065f874 100644 --- a/drivers/bus/acpi/compbatt/comppnp.c +++ b/drivers/bus/acpi/compbatt/comppnp.c @@ -1,9 +1,8 @@ /* - * PROJECT: ReactOS Composite Battery Driver - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/drivers/bus/acpi/compbatt/comppnp.c - * PURPOSE: Plug-and-Play IOCTL/IRP Handling - * PROGRAMMERS: ReactOS Portable Systems Group + * PROJECT: ReactOS Composite Battery Driver + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Plug-and-Play IOCTL/IRP Handling + * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group */ /* INCLUDES *******************************************************************/ From f58f37e944c54942eaf65db674362ed2275ed9a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Mon, 16 Dec 2024 00:40:54 +0100 Subject: [PATCH 129/750] [COMPBATT] Document the newly added code --- drivers/bus/acpi/compbatt/compbatt.c | 144 +++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/drivers/bus/acpi/compbatt/compbatt.c b/drivers/bus/acpi/compbatt/compbatt.c index 533c32e499101..3edb3fb78a8a2 100644 --- a/drivers/bus/acpi/compbatt/compbatt.c +++ b/drivers/bus/acpi/compbatt/compbatt.c @@ -67,6 +67,26 @@ CompBattSystemControl( return Status; } +/** + * @brief + * Queues a work item thread worker which is bound to the individual + * CM (Control Method) ACPI battery to handle the IRP. + * + * @param[in] DeviceObject + * A pointer to a device object, this parameter is unused. + * + * @param[in] Irp + * A pointer to an I/O request packet. It is used to gather the I/O stack + * location which contains the data of the individual battery. + * + * @param[in] Context + * An aribtrary pointer that points to context data, this paramater + * is unused. + * + * @return + * Returns STATUS_MORE_PROCESSING_REQUIRED to indicate the I/O request + * is still in action, therefore the IRP is not freed. + */ NTSTATUS NTAPI CompBattMonitorIrpComplete( @@ -89,6 +109,17 @@ CompBattMonitorIrpComplete( return STATUS_MORE_PROCESSING_REQUIRED; } +/** + * @brief + * The brains of the battery IRP worker. It monitors the state of the + * IRP as well as sends the IRP down the device stack to gather battery + * related data, such tag and status. It also serves as the I/O + * completion routine of which it elaborates the gathered data. + * + * @param[in] BatteryData + * A pointer to battery data of an individual battery that contains + * the IRP to be send down the device stack. + */ VOID NTAPI CompBattMonitorIrpCompleteWorker( @@ -481,6 +512,29 @@ CompBattDisableStatusNotify( return STATUS_SUCCESS; } +/** + * @brief + * Calculates the total discharging/charging rate flow of each individual + * battery linked with the composite battery and determines whether at + * least one battery is behaving improperly. + * + * @param[in] DeviceExtension + * A pointer to a device extension which describes the composite battery + * itself. It is used to gather each connected battery in the list with + * the composite battery. + * + * @param[out] TotalRate + * A pointer returned to caller that describes the total accumulated + * rate flow of all batteries. + * + * @param[out] BatteriesCount + * A pointer returned to caller that describes the batteries present. + * + * @return + * Returns TRUE if at least one battery is behaving improperly, FALSE + * otherwise. This is determined by the fact if a battery has a negative + * rate but is charging, or if it has a positive rate but is discharging. + */ static BOOLEAN CompBattCalculateTotalRateAndLinkedBatteries( @@ -590,6 +644,33 @@ CompBattCalculateTotalRateAndLinkedBatteries( return BadBattery; } +/** + * @brief + * Sets a new configuration battery wait status settings of each battery. + * The purpose of this is so that the composite battery gets notified + * of new battery status as if it was a single battery. + * + * @param[in] DeviceExtension + * A pointer to a device extension which describes the composite battery + * itself. It is used to gather each connected battery in the list with + * the composite battery. + * + * @param[in] BatteryTag + * A battery tag supplied by the caller. This is typically the tag of + * the composite battery which is used to check against the cached tag + * of the composite battery if it has changed or not. + * + * @param[in] BatteryNotify + * A pointer to a structure filled with battery notification settings, + * supplied by the caller. It is used as the new values for the + * configuration wait settings. + * + * @return + * Returns STATUS_NO_SUCH_DEVICE if the supplied battery tag does not match + * with that of the cached composite battery's tag or if the composite + * battery currently does not have a tag assigned. Otherwise STATUS_SUCCESS + * is returned. + */ NTSTATUS NTAPI CompBattSetStatusNotify( @@ -819,6 +900,33 @@ CompBattSetStatusNotify( return STATUS_SUCCESS; } +/** + * @brief + * Queries the battery status of each individiual connected battery with + * the composite battery and combines all the retrieved data as one + * single battery status for the composite battery. + * + * @param[in] DeviceExtension + * A pointer to a device extension which describes the composite battery + * itself. It is used to gather each connected battery in the list with + * the composite battery. + * + * @param[in] Tag + * A battery tag supplied by the caller. This is typically the tag of + * the composite battery which is used to check against the cached tag + * of the composite battery if it has changed or not. + * + * @param[out] BatteryStatus + * A pointer to a battery status that contains the combined data, returned + * to the caller. It serves as the battery status for the composite battery. + * + * @return + * Returns STATUS_NO_SUCH_DEVICE if the supplied battery tag does not match + * with that of the cached composite battery's tag or if the composite + * battery currently does not have a tag assigned. Otherwise STATUS_SUCCESS + * is returned, which it will also return success if the composite battery's + * cached battery status is fresh which indicates it has already been computed. + */ NTSTATUS NTAPI CompBattQueryStatus( @@ -1282,6 +1390,20 @@ CompBattGetBatteryGranularity( return STATUS_SUCCESS; } +/** + * @brief + * Calculates the "At Rate" flow of the composite battery based on the + * sum of all connected batteries, in order to retrieve the precise + * battery time estimation. + * + * @param[in] DeviceExtension + * A pointer to a device extension which describes the composite battery + * itself. It is used to gather each connected battery in the list with + * the composite battery. + * + * @return + * Returns the computed "At Rate" flow to the caller. + */ static LONG CompBattCalculateAtRateTime( @@ -1351,6 +1473,28 @@ CompBattCalculateAtRateTime( return ComputedAtRate; } +/** + * @brief + * Retrieves the estimated time of the composite battery based on the + * power drain rate of all the batteries present in the system. + * + * @param[out] Time + * A pointer to the computed estimated time of the composite battery, + * returned to caller. Note that if there are not any batteries that + * are draining power, or if the system is powered by external AC source, + * the estimated time is unknown + * + * @param[in] DeviceExtension + * A pointer to a device extension which describes the composite battery + * itself. It is used to gather each connected battery in the list with + * the composite battery. + * + * @return + * Returns STATUS_NO_SUCH_DEVICE if the supplied battery tag does not match + * with that of the cached composite battery's tag or if the composite + * battery currently does not have a tag assigned. Otherwise STATUS_SUCCESS + * is returned. + */ NTSTATUS NTAPI CompBattGetEstimatedTime( From 13b394c1a7e0df384443a7c1caacf95ec13858a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Mon, 16 Dec 2024 17:20:33 +0100 Subject: [PATCH 130/750] [COMPBATT] Document COMPBATT_BATTERY_DATA and COMPBATT_DEVICE_EXTENSION structures CORE-18969 CORE-19452 CORE-19888 --- drivers/bus/acpi/compbatt/compbatt.h | 92 ++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/drivers/bus/acpi/compbatt/compbatt.h b/drivers/bus/acpi/compbatt/compbatt.h index 66307defbc4ee..58f812c5fd7b6 100644 --- a/drivers/bus/acpi/compbatt/compbatt.h +++ b/drivers/bus/acpi/compbatt/compbatt.h @@ -78,24 +78,73 @@ // typedef struct _COMPBATT_BATTERY_DATA { + /* The linked battery with the Composite Battery */ LIST_ENTRY BatteryLink; + + /* I/O remove lock which protects the battery from being removed */ IO_REMOVE_LOCK RemoveLock; + + /* + * The associated device object (usually CMBATT) and the I/O battery packet + * which is used to transport and gather battery data. + */ PDEVICE_OBJECT DeviceObject; PIRP Irp; + + /* + * The Executive work item, which serves as a worker item for the + * IRP battery monitor worker. + */ WORK_QUEUE_ITEM WorkItem; + + /* + * Execution state mode of the individual battery. Only two modes are valid: + * + * COMPBATT_QUERY_TAG - The battery is currently waiting for a tag to get assigned; + * COMPBATT_READ_STATUS - The battery is querying battery status. + */ UCHAR Mode; + + /* + * The battery wait configuration settings, set up by the SetStatusNotify method. + * These values are used to instruct CMBATT when the battery status should be retrieved. + */ BATTERY_WAIT_STATUS WaitStatus; + + /* + * A union that serves as the buffer which holds battery monitor IRP data, specifically + * managed by CompBattMonitorIrpCompleteWorker, to avoid allocating separate memory pools. + */ union { BATTERY_WAIT_STATUS WorkerWaitStatus; BATTERY_STATUS WorkerStatus; ULONG WorkerTag; } WorkerBuffer; + + /* The ID of the battery that associates the identification of this battery */ ULONG Tag; + + /* + * The battery flags that govern the behavior of the battery. The valid flags are: + * + * COMPBATT_BATTERY_INFORMATION_PRESENT - The static battery information ha been + * queried. Re-querying such information is not needed. + * + * COMPBATT_STATUS_NOTIFY_SET - The current notification wait settings are valid. + * + * COMPBATT_TAG_ASSIGNED - The battery has a tag assigned and it can be read. + */ ULONG Flags; + + /* The static battery information and battery status */ BATTERY_INFORMATION BatteryInformation; BATTERY_STATUS BatteryStatus; + + /* The interrupt time of which the battery status was last read */ ULONGLONG InterruptTime; + + /* A uniquely given name of the battery that associates it */ UNICODE_STRING BatteryName; } COMPBATT_BATTERY_DATA, *PCOMPBATT_BATTERY_DATA; @@ -104,18 +153,61 @@ typedef struct _COMPBATT_BATTERY_DATA // typedef struct _COMPBATT_DEVICE_EXTENSION { + /* + * The class data initialized and used by Battery Class. It contains information + * such as miniport data used for registration and communication between the + * Composite Battery and Battery Class, wait and context events, etc. + */ PVOID ClassData; + + /* + * The successor computed tag. This field is used when there are more upcoming + * batteries to be connected with the Composite Battery, of which the tag is + * incremented by 1 by each new battery that is connected. + */ ULONG NextTag; + + /* A list of linked batteries connected with the Composite Battery */ LIST_ENTRY BatteryList; + + /* A mutex lock which ensures proper synchronization of Composite Battery operations */ FAST_MUTEX Lock; + + /* The ID of the Composite Battery */ ULONG Tag; + + /* + * The battery flags that govern the behavior of the battery. The valid flags are: + * + * COMPBATT_BATTERY_INFORMATION_PRESENT - The static battery information has been + * queried. Re-querying such information is not needed. + * + * COMPBATT_STATUS_NOTIFY_SET - The current notification wait settings are valid. + * + * COMPBATT_TAG_ASSIGNED - The battery has a tag assigned and it can be read. + */ ULONG Flags; + + /* + * The Composite Battery static information, status and wait status settings. + * Note that both the battery information and status are combined, based upon + * the individual information and status of each linked battery. + */ BATTERY_INFORMATION BatteryInformation; BATTERY_STATUS BatteryStatus; BATTERY_WAIT_STATUS WaitNotifyStatus; + + /* The interrupt time of which the battery status was last read */ ULONGLONG InterruptTime; + + /* + * The physical device object that associates the Composite Battery and + * the attached device, typically the ACPI driver. + */ PDEVICE_OBJECT AttachedDevice; PDEVICE_OBJECT DeviceObject; + + /* The notification entry that identifies the registered I/O PnP notification */ PVOID NotificationEntry; } COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION; From 02032b71068c9d5808f20dbd7401674b84cb1a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Wed, 8 Jan 2025 23:49:15 +0100 Subject: [PATCH 131/750] [PSDK] Fix BATTERY_UNKNOWN_TIME value constant Windows SDKs define this constant to 0xFFFFFFFF but we define it to 0x80000000. As a result, when our COMPBATT driver is being tested on Windows (namely XP, Vista and 7), BATTERY_UNKNOWN_TIME is not interpreted as UNKNOWN TIME but entirely something else. CORE-18969 CORE-19452 --- sdk/include/psdk/batclass.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/psdk/batclass.h b/sdk/include/psdk/batclass.h index f97140d9b0515..02641a65f8613 100644 --- a/sdk/include/psdk/batclass.h +++ b/sdk/include/psdk/batclass.h @@ -65,7 +65,7 @@ DEFINE_GUID(BATTERY_TAG_CHANGE_WMI_GUID, #define BATTERY_UNKNOWN_CAPACITY 0xFFFFFFFF /* BatteryEstimatedTime constant */ -#define BATTERY_UNKNOWN_TIME 0x80000000 +#define BATTERY_UNKNOWN_TIME 0xFFFFFFFF #define MAX_BATTERY_STRING_SIZE 128 From e5a6b0f8e572ee1872b987ad7d10418eac073cdf Mon Sep 17 00:00:00 2001 From: Oleg Dubinskiy Date: Fri, 10 Jan 2025 20:45:43 +0100 Subject: [PATCH 132/750] [SHELL32] SHELL_ArgifyW(): don't use SearchPathW() for receiving a path to a file (#7605) Get rid from bogus SearchPathW() call, which is marked as most likely not needed in the comment above (by Wine). Simply get a length of the file name and use the file name directly instead, with checking for its validity too. Similarly as it's done for other cases. That call seems actually not needed because it is already done using SearchPathW() in another parts of the code in this file, before calling SHELL_ArgifyW(). Fixes another heap corruption when trying to login via OAuth menthod in SpotifyXP 2.0.3 Beta (nightly build). The previous commit did not fix the bug fully, as I discovered it later. CORE-19953 --- dll/win32/shell32/shlexec.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/dll/win32/shell32/shlexec.cpp b/dll/win32/shell32/shlexec.cpp index 85c7feab0ff07..f03db3de0e730 100644 --- a/dll/win32/shell32/shlexec.cpp +++ b/dll/win32/shell32/shlexec.cpp @@ -197,11 +197,9 @@ static void ParseTildeEffect(PWSTR &res, LPCWSTR &args, DWORD &len, DWORD &used, static BOOL SHELL_ArgifyW(WCHAR* out, DWORD len, const WCHAR* fmt, const WCHAR* lpFile, LPITEMIDLIST pidl, LPCWSTR args, DWORD* out_len, const WCHAR* lpDir) { - WCHAR xlpFile[1024]; BOOL done = FALSE; BOOL found_p1 = FALSE; PWSTR res = out; - PCWSTR cmd; DWORD used = 0; bool tildeEffect = false; @@ -279,20 +277,14 @@ static BOOL SHELL_ArgifyW(WCHAR* out, DWORD len, const WCHAR* fmt, const WCHAR* break; case '1': - if (!done || (*fmt == '1')) + if ((!done || (*fmt == '1')) && lpFile) { - /*FIXME Is the call to SearchPathW() really needed? We already have separated out the parameter string in args. */ - if (SearchPathW(lpDir, lpFile, L".exe", ARRAY_SIZE(xlpFile), xlpFile, NULL)) - cmd = xlpFile; - else - cmd = lpFile; - - SIZE_T cmdlen = wcslen(cmd); - used += cmdlen; + SIZE_T filelen = wcslen(lpFile); + used += filelen; if (used < len) { - wcscpy(res, cmd); - res += cmdlen; + wcscpy(res, lpFile); + res += filelen; } } found_p1 = TRUE; From 3ff8adc5537f5b0555708d6f72b635744adcf3ca Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Sat, 11 Jan 2025 19:52:07 +0100 Subject: [PATCH 133/750] [RAPPS] Protect database update with a mutex (#7006) --- base/applications/rapps/gui.cpp | 4 ++++ base/applications/rapps/include/misc.h | 29 +++++++++++++++++++++++++ base/applications/rapps/include/rapps.h | 9 ++++++++ base/applications/rapps/unattended.cpp | 3 ++- base/applications/rapps/winmain.cpp | 2 +- 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/base/applications/rapps/gui.cpp b/base/applications/rapps/gui.cpp index 70cedb28a219d..5e8dc85a8ba9d 100644 --- a/base/applications/rapps/gui.cpp +++ b/base/applications/rapps/gui.cpp @@ -304,6 +304,7 @@ CMainWindow::CheckAvailable() { if (m_Db->GetAvailableCount() == 0) { + CUpdateDatabaseMutex lock; m_Db->RemoveCached(); m_Db->UpdateAvailable(); } @@ -591,9 +592,12 @@ CMainWindow::OnCommand(WPARAM wParam, LPARAM lParam) break; case ID_RESETDB: + { + CUpdateDatabaseMutex lock; m_Db->RemoveCached(); UpdateApplicationsList(SelectedEnumType, bReload); break; + } case ID_HELP: MessageBoxW(L"Help not implemented yet", NULL, MB_OK); diff --git a/base/applications/rapps/include/misc.h b/base/applications/rapps/include/misc.h index 4617050855ae3..f2f3ea727d923 100644 --- a/base/applications/rapps/include/misc.h +++ b/base/applications/rapps/include/misc.h @@ -117,3 +117,32 @@ GetProgramFilesPath(CStringW &Path, BOOL PerUser, HWND hwnd = NULL); template class CLocalPtr : public CHeapPtr { }; + +struct CScopedMutex +{ + HANDLE m_hMutex; + + CScopedMutex(LPCWSTR Name, UINT Timeout = INFINITE, BOOL InitialOwner = FALSE) + { + m_hMutex = CreateMutexW(NULL, InitialOwner, Name); + if (m_hMutex && !InitialOwner) + { + DWORD wait = WaitForSingleObject(m_hMutex, Timeout); + if (wait != WAIT_OBJECT_0 && wait != WAIT_ABANDONED) + { + CloseHandle(m_hMutex); + m_hMutex = NULL; + } + } + } + ~CScopedMutex() + { + if (m_hMutex) + { + ReleaseMutex(m_hMutex); + CloseHandle(m_hMutex); + } + } + + bool Acquired() const { return m_hMutex != NULL; } +}; diff --git a/base/applications/rapps/include/rapps.h b/base/applications/rapps/include/rapps.h index 49bb4691f092e..c03a06d092d5f 100644 --- a/base/applications/rapps/include/rapps.h +++ b/base/applications/rapps/include/rapps.h @@ -17,4 +17,13 @@ extern LONG g_Busy; #define WM_NOTIFY_OPERATIONCOMPLETED (WM_APP + 0) +#define MAINWINDOWCLASSNAME L"ROSAPPMGR2" +#define MAINWINDOWMUTEX szWindowClass +#define UPDATEDBMUTEX ( MAINWINDOWCLASSNAME L":UpDB" ) + +struct CUpdateDatabaseMutex : public CScopedMutex +{ + CUpdateDatabaseMutex() : CScopedMutex(UPDATEDBMUTEX, 1000 * 60 * 10, FALSE) { }; +}; + #endif /* _RAPPS_H */ diff --git a/base/applications/rapps/unattended.cpp b/base/applications/rapps/unattended.cpp index 12ffe79254a90..4967f259de380 100644 --- a/base/applications/rapps/unattended.cpp +++ b/base/applications/rapps/unattended.cpp @@ -338,6 +338,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow) BOOL bAppwizMode = (argc > 1 && MatchCmdOption(argv[1], CMD_KEY_APPWIZ)); if (!bAppwizMode) { + CUpdateDatabaseMutex lock; if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch) db.RemoveCached(); @@ -350,7 +351,7 @@ ParseCmdAndExecute(LPWSTR lpCmdLine, BOOL bIsFirstLaunch, int nCmdShow) { // Check whether the RAPPS MainWindow is already launched in another process CStringW szWindowText(MAKEINTRESOURCEW(bAppwizMode ? IDS_APPWIZ_TITLE : IDS_APPTITLE)); - LPCWSTR pszMutex = bAppwizMode ? L"RAPPWIZ" : szWindowClass; + LPCWSTR pszMutex = bAppwizMode ? L"RAPPWIZ" : MAINWINDOWMUTEX; HANDLE hMutex = CreateMutexW(NULL, FALSE, pszMutex); if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS)) diff --git a/base/applications/rapps/winmain.cpp b/base/applications/rapps/winmain.cpp index 2c5c06a300f18..70ce317a46804 100644 --- a/base/applications/rapps/winmain.cpp +++ b/base/applications/rapps/winmain.cpp @@ -13,7 +13,7 @@ #include #include -LPCWSTR szWindowClass = L"ROSAPPMGR2"; +LPCWSTR szWindowClass = MAINWINDOWCLASSNAME; LONG g_Busy = 0; HWND hMainWnd; From 37b0646e76b5a78914b904727591909bad206267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 10 Jan 2025 22:12:24 +0100 Subject: [PATCH 134/750] [SDK:WINE] Fix get_temp_buffer() call in wine_dbgstr_wn() Addendum to commit dbc7eeb47e (PR #4303). The argument to get_temp_buffer() should specify the length of the string being buffered + 1 (for the NUL-terminator). The original code wrongly interverted this with specifying the buffer shifted by one character. --- sdk/include/reactos/wine/test.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/reactos/wine/test.h b/sdk/include/reactos/wine/test.h index 872ab75378a3d..4399a6f171431 100644 --- a/sdk/include/reactos/wine/test.h +++ b/sdk/include/reactos/wine/test.h @@ -747,7 +747,7 @@ const char *wine_dbgstr_wn( const WCHAR *str, intptr_t n ) } *dst = 0; - res = get_temp_buffer(strlen(buffer + 1)); + res = get_temp_buffer(strlen(buffer) + 1); strcpy(res, buffer); return res; } From a97fcf19ecd2d73def84fc60d206372883599631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?George=20Bi=C8=99oc?= Date: Fri, 10 Jan 2025 22:23:23 +0100 Subject: [PATCH 135/750] [CMBATT] Minor improvements to estimated battery time code - Declare CMBATT_DISCHARGE_TIME and CMBATT_CAPACITY_BOGUS constructs - Determine if the battery was already discharging and if not, update the time when it's being discharged - Fix the condition where it checks if the battery has been discharging for quite some time - Default the time to BATTERY_UNKNOWN_TIME if querying the estimated battery time request fails or if the battery has just started discharging not over 15 seconds CORE-18969 CORE-19452 --- drivers/bus/acpi/cmbatt/cmbatt.c | 21 ++++++++++++++++----- drivers/bus/acpi/cmbatt/cmbatt.h | 12 ++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/drivers/bus/acpi/cmbatt/cmbatt.c b/drivers/bus/acpi/cmbatt/cmbatt.c index 407fa1495725b..dd01f8b22bec6 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.c +++ b/drivers/bus/acpi/cmbatt/cmbatt.c @@ -1085,6 +1085,7 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, { ULONG PsrData = 0; NTSTATUS Status; + BOOLEAN WasDischarging; ULONG BstState; ULONG PowerUnit; ULONG DesignVoltage, PresentRate, RemainingCapacity; @@ -1113,6 +1114,9 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, return Status; } + /* Remember if the battery was discharging at the time of querying new status */ + WasDischarging = !!(DeviceExtension->State & BATTERY_DISCHARGING); + /* Clear current BST information */ DeviceExtension->State = 0; DeviceExtension->RemainingCapacity = 0; @@ -1135,9 +1139,9 @@ CmBattGetBatteryStatus(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, { /* Set power state and check if it just started discharging now */ DeviceExtension->State |= BATTERY_DISCHARGING; - if (!(DeviceExtension->State & ACPI_BATT_STAT_DISCHARG)) + if (!WasDischarging) { - /* Remember the time when the state changed */ + /* The battery is discharging now and not before, remember the time when the state changed */ DeviceExtension->InterruptTime = KeQueryInterruptTime(); } } @@ -1363,8 +1367,8 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, case BatteryEstimatedTime: - /* Check if it's been more than 2 1/2 minutes since the last change */ - if ((KeQueryInterruptTime() - 150000000) > (FdoExtension->InterruptTime)) + /* Check if it's been more than 15 seconds since the last change */ + if (KeQueryInterruptTime() > (FdoExtension->InterruptTime + CMBATT_DISCHARGE_TIME)) { /* Get new battery status */ CmBattGetBatteryStatus(FdoExtension, FdoExtension->Tag); @@ -1379,6 +1383,9 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, /* Grab the remaining capacity */ RemainingCapacity = FdoExtension->RemainingCapacity; + /* Default time to unknown if we fail the request later */ + RemainingTime = BATTERY_UNKNOWN_TIME; + /* See if we don't know one or the other */ if ((Rate == BATTERY_UNKNOWN_RATE) || (RemainingCapacity == BATTERY_UNKNOWN_CAPACITY)) @@ -1410,7 +1417,7 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, else { /* We have data, but is it valid? */ - if (RemainingCapacity > 0x123456) + if (RemainingCapacity > CMBATT_CAPACITY_BOGUS) { /* The capacity seems bogus, so don't use it */ if (CmBattDebug & CMBATT_ACPI_WARNING) @@ -1423,6 +1430,10 @@ CmBattQueryInformation(IN PCMBATT_DEVICE_EXTENSION FdoExtension, } } } + else + { + RemainingTime = BATTERY_UNKNOWN_TIME; + } /* Return the remaining time */ QueryData = &RemainingTime; diff --git a/drivers/bus/acpi/cmbatt/cmbatt.h b/drivers/bus/acpi/cmbatt/cmbatt.h index e6ab5f029bdac..4a2ec81acd384 100644 --- a/drivers/bus/acpi/cmbatt/cmbatt.h +++ b/drivers/bus/acpi/cmbatt/cmbatt.h @@ -42,6 +42,18 @@ #define CMBATT_PNP_ENTRY_EXIT 0x200 #define CMBATT_ACPI_ASSERT 0x400 +// +// Constant used to determine if the battery was discharging +// for over 15 seconds since last time the AC adapter got unplugged. +// +#define CMBATT_DISCHARGE_TIME 150000000 + +// +// Bogus constant used to determine if the remaining battery capacity +// overflows which is returned by the hardware. +// +#define CMBATT_CAPACITY_BOGUS 0x100000 + typedef enum _CMBATT_EXTENSION_TYPE { CmBattAcAdapter, From 087979eeb9186c8ae6aff76a38ef804eef7e8f50 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Mon, 13 Jan 2025 13:21:12 +0100 Subject: [PATCH 136/750] [REGEDIT] Block tree label edit if the delete accelerator has been pressed (#7610) --- base/applications/regedit/treeview.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/base/applications/regedit/treeview.c b/base/applications/regedit/treeview.c index dcb6ce350dfc8..ca784f12e6c00 100644 --- a/base/applications/regedit/treeview.c +++ b/base/applications/regedit/treeview.c @@ -668,6 +668,8 @@ BOOL TreeWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result) case TVN_BEGINLABELEDIT: { LPNMTVDISPINFO ptvdi = (LPNMTVDISPINFO)lParam; + HWND hWndFocus = GetFocus(); + /* cancel label edit for rootkeys */ if (!TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem) || !TreeView_GetParent(g_pChildWnd->hTreeWnd, TreeView_GetParent(g_pChildWnd->hTreeWnd, ptvdi->item.hItem))) @@ -678,6 +680,12 @@ BOOL TreeWndNotifyProc(HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL *Result) { *Result = FALSE; } + + /* cancel label edit if VK_DELETE accelerator opened a MessageBox */ + if (hWndFocus != g_pChildWnd->hTreeWnd && hWndFocus != TreeView_GetEditControl(g_pChildWnd->hTreeWnd)) + { + *Result = TRUE; + } return TRUE; } case TVN_ENDLABELEDIT: From aa7ab16fd09cb1637562dc66248b6fb40ebc53fc Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 15:05:56 +0200 Subject: [PATCH 137/750] [CMAKE] Disable a number of warnings for clang Also remove the totally useless and stupid -Werror=unknown-warning-option --- sdk/cmake/gcc.cmake | 26 +++++++++++++------------- sdk/cmake/msvc.cmake | 16 ++++++++++++++-- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/sdk/cmake/gcc.cmake b/sdk/cmake/gcc.cmake index 860594ef38de4..1c994e2c51de2 100644 --- a/sdk/cmake/gcc.cmake +++ b/sdk/cmake/gcc.cmake @@ -115,22 +115,22 @@ add_compile_options(-march=${OARCH} -mtune=${TUNE}) # Warnings, errors if((NOT CMAKE_BUILD_TYPE STREQUAL "Release") AND (NOT CMAKE_C_COMPILER_ID STREQUAL Clang)) add_compile_options(-Werror) -else() - if(CMAKE_C_COMPILER_ID STREQUAL "Clang") - add_compile_options($<$:-Werror=unknown-warning-option>) - endif() endif() add_compile_options(-Wall -Wpointer-arith) -add_compile_options(-Wno-char-subscripts -Wno-multichar -Wno-unused-value) -add_compile_options(-Wno-unused-const-variable) -add_compile_options(-Wno-unused-local-typedefs) -add_compile_options(-Wno-deprecated) -add_compile_options(-Wno-unused-result) # FIXME To be removed when CORE-17637 is resolved - -if(NOT CMAKE_C_COMPILER_ID STREQUAL "Clang") - add_compile_options(-Wno-maybe-uninitialized) -endif() + +# Disable some overzealous warnings +add_compile_options( + -Wno-unknown-warning-option + -Wno-char-subscripts + -Wno-multichar + -Wno-unused-value + -Wno-unused-const-variable + -Wno-unused-local-typedefs + -Wno-deprecated + -Wno-unused-result # FIXME To be removed when CORE-17637 is resolved + -Wno-maybe-uninitialized +) if(ARCH STREQUAL "amd64") add_compile_options(-Wno-format) diff --git a/sdk/cmake/msvc.cmake b/sdk/cmake/msvc.cmake index bf804dd3bfd68..eb4973914e017 100644 --- a/sdk/cmake/msvc.cmake +++ b/sdk/cmake/msvc.cmake @@ -147,8 +147,20 @@ endif() add_compile_options(/w14115) if(CMAKE_C_COMPILER_ID STREQUAL "Clang") - add_compile_options($<$:-Werror=unknown-warning-option>) - add_compile_options("$<$:-nostdinc;-Wno-multichar;-Wno-char-subscripts;-Wno-microsoft-enum-forward-reference;-Wno-pragma-pack;-Wno-microsoft-anon-tag;-Wno-parentheses-equality;-Wno-unknown-pragmas>") + add_compile_options("$<$:-nostdinc>") + add_compile_options( + -Wno-unknown-warning-option + -Wno-multichar + -Wno-char-subscripts + -Wno-microsoft-enum-forward-reference + -Wno-pragma-pack + -Wno-microsoft-anon-tag + -Wno-parentheses-equality + -Wno-unknown-pragmas + -Wno-ignored-pragmas + -Wno-ignored-pragma-intrinsic + -Wno-microsoft-exception-spec + ) endif() # Debugging From 45fc95b667d0eaba200958f824ca5fd1ea4774c5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 15:04:36 +0200 Subject: [PATCH 138/750] [UDFS] Remove unused file from compilation --- drivers/filesystems/udfs/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/filesystems/udfs/CMakeLists.txt b/drivers/filesystems/udfs/CMakeLists.txt index b1bfdd9db84c0..6fcfba012efa6 100644 --- a/drivers/filesystems/udfs/CMakeLists.txt +++ b/drivers/filesystems/udfs/CMakeLists.txt @@ -25,7 +25,7 @@ list(APPEND SOURCE mem.cpp misc.cpp namesup.cpp - pnp.cpp + #pnp.cpp read.cpp secursup.cpp shutdown.cpp From a3019731cc7b29fcecfffb4856e1e51ddd3046d6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 15:05:19 +0200 Subject: [PATCH 139/750] [D3DRM] Disable a clang warning --- dll/directx/wine/d3drm/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dll/directx/wine/d3drm/CMakeLists.txt b/dll/directx/wine/d3drm/CMakeLists.txt index cd1eaad88321b..b0234641ac23c 100644 --- a/dll/directx/wine/d3drm/CMakeLists.txt +++ b/dll/directx/wine/d3drm/CMakeLists.txt @@ -28,3 +28,7 @@ target_link_libraries(d3drm dxguid uuid wine) add_importlibs(d3drm ddraw d3dxof msvcrt kernel32 ntdll) add_pch(d3drm precomp.h SOURCE) add_cd_file(TARGET d3drm DESTINATION reactos/system32 FOR all) + +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + target_compile_options(d3drm PRIVATE -Wno-incompatible-function-pointer-types) +endif() From 4eb7ef494db8067e7c8d33da7bcbad0919ebd66c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 14:21:41 +0200 Subject: [PATCH 140/750] [MSXML3] Disable a clang warning --- dll/win32/msxml3/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dll/win32/msxml3/CMakeLists.txt b/dll/win32/msxml3/CMakeLists.txt index be0ebf4105f61..d5efac6545985 100644 --- a/dll/win32/msxml3/CMakeLists.txt +++ b/dll/win32/msxml3/CMakeLists.txt @@ -81,6 +81,10 @@ if(MSVC) target_compile_options(msxml3 PRIVATE /wd4090) endif() +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + target_compile_options(msxml3 PRIVATE -Wno-incompatible-function-pointer-types) +endif() + add_importlibs(msxml3 urlmon ws2_32 shlwapi oleaut32 ole32 user32 msvcrt kernel32 ntdll) add_dependencies(msxml3 xmlparser_idlheader stdole2) # msxml3_v1.tlb needs stdole2.tlb add_pch(msxml3 precomp.h "${PCH_SKIP_SOURCE}") From e7c6eac60748b6e2e73387ffbc040f916e8eda7d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 12:40:03 +0200 Subject: [PATCH 141/750] [NFSD] Disable a clang warning --- base/services/nfsd/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/base/services/nfsd/CMakeLists.txt b/base/services/nfsd/CMakeLists.txt index 77054777c8c31..3aeb58722c067 100644 --- a/base/services/nfsd/CMakeLists.txt +++ b/base/services/nfsd/CMakeLists.txt @@ -55,6 +55,9 @@ else() # FIXME: Tons of warnings. target_compile_options(nfsd PRIVATE "-w") endif() +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + target_compile_options(nfsd PRIVATE -Wno-incompatible-function-pointer-types) +endif() target_link_libraries(nfsd oldnames) From 4ceb46a70062d52eeac0f1364a57ea7abcab8cbd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 12:40:36 +0200 Subject: [PATCH 142/750] [CMIDriver] Disable a clang warning --- drivers/wdm/audio/drivers/CMIDriver/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/wdm/audio/drivers/CMIDriver/CMakeLists.txt b/drivers/wdm/audio/drivers/CMIDriver/CMakeLists.txt index 609babac1f4e4..e3fb6783068a6 100644 --- a/drivers/wdm/audio/drivers/CMIDriver/CMakeLists.txt +++ b/drivers/wdm/audio/drivers/CMIDriver/CMakeLists.txt @@ -30,6 +30,10 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") target_compile_options(cmipci PRIVATE -Wno-write-strings -Wno-switch) endif() +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + target_compile_options(cmipci PRIVATE -Wno-enum-constexpr-conversion) +endif() + add_pch(cmipci precomp.h "${PCH_SKIP_SOURCE}") add_cd_file(TARGET cmipci DESTINATION reactos/system32/drivers FOR all) From 3523e1a9f338a6a724a7dfd56a27e038ac924f2c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 13:01:49 +0200 Subject: [PATCH 143/750] [ZLIB] Disable a clang warning --- sdk/lib/3rdparty/zlib/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/lib/3rdparty/zlib/CMakeLists.txt b/sdk/lib/3rdparty/zlib/CMakeLists.txt index af42ff93b48db..2630baf087056 100644 --- a/sdk/lib/3rdparty/zlib/CMakeLists.txt +++ b/sdk/lib/3rdparty/zlib/CMakeLists.txt @@ -31,6 +31,9 @@ list(APPEND MINIZIP_SOURCE contrib/minizip/zip.c contrib/minizip/zip.h) +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + add_compile_options(-Wno-deprecated-non-prototype) +endif() if(CMAKE_CROSSCOMPILING) add_library(zlib ${SOURCE} ${SOLO_SOURCE}) From 25723b4239aae5e0692d13f6c237c88441b2aeab Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 27 Nov 2024 13:44:54 +0200 Subject: [PATCH 144/750] [VCRUNTIME] Fix a warning with GCC 13 --- sdk/include/vcruntime/vcruntime.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/include/vcruntime/vcruntime.h b/sdk/include/vcruntime/vcruntime.h index cd7d591340740..bc16388bc970e 100644 --- a/sdk/include/vcruntime/vcruntime.h +++ b/sdk/include/vcruntime/vcruntime.h @@ -25,7 +25,7 @@ #define _CRT_UNPARENTHESIZE_(...) __VA_ARGS__ #define _CRT_UNPARENTHESIZE(...) _CRT_UNPARENTHESIZE_ __VA_ARGS__ -#ifndef _MSC_VER +#if !defined(_MSC_VER) && !defined(__pragma) #define __pragma(x) _Pragma(_CRT_STRINGIZE(x)) #endif From 78417c5532f0eb95e54a595457b352d30640777f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 13:33:11 +0200 Subject: [PATCH 145/750] [CRT] Fix build with clang-cl 17 #pragma function(llabs) causes an error: "error: no_builtin attribute has no effect on defaulted or deleted functions" This is probably a bug in clang, see https://github.com/llvm/llvm-project/issues/116256 --- sdk/include/crt/math.h | 8 ++++---- sdk/include/crt/stdlib.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/sdk/include/crt/math.h b/sdk/include/crt/math.h index bd5d70225237b..33f460db5f682 100644 --- a/sdk/include/crt/math.h +++ b/sdk/include/crt/math.h @@ -99,7 +99,7 @@ _Check_return_ _CRT_JIT_INTRINSIC double __cdecl sqrt(_In_ double x); _Check_return_ double __cdecl tan(_In_ double x); _Check_return_ double __cdecl tanh(_In_ double x); -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) /* Prevent the compiler from generating calls to _CIatan2 */ #pragma function(atan2) #ifdef _M_AMD64 @@ -148,7 +148,7 @@ _Check_return_ _CRTIMP int __cdecl _set_SSE2_enable(_In_ int flag); _Check_return_ _CRTIMP float __cdecl _nextafterf(_In_ float x, _In_ float y); _Check_return_ _CRTIMP int __cdecl _isnanf(_In_ float x); _Check_return_ _CRTIMP int __cdecl _fpclassf(_In_ float x); -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) /* Prevent the compiler from generating calls to __vdecl_floor2 */ #pragma function(floor) #endif @@ -202,7 +202,7 @@ _Check_return_ float __cdecl sqrtf(_In_ float x); _Check_return_ float __cdecl tanf(_In_ float x); _Check_return_ float __cdecl tanhf(_In_ float x); -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__clang__) /* Make sure intrinsics don't get in our way */ #if defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64) #pragma function(acosf,asinf,atanf,atan2f,ceilf,cosf,coshf,expf,floorf,fmodf,logf,log10f,powf,sinf,sinhf,sqrtf,tanf,tanhf) @@ -269,7 +269,7 @@ _Check_return_ __CRT_INLINE long double ldexpl(_In_ long double x, _In_ int y) { _Check_return_ __CRT_INLINE long double modfl(_In_ long double x, _Out_ long double *y) { return (long double)modf((double)x, (double *)y); } /* Support for some functions, not exported in MSVCRT */ -#if (_MSC_VER >= 1929) +#if (_MSC_VER >= 1929) && !defined(__clang__) _Check_return_ long lrint(_In_ double x); _Check_return_ long lrintf(_In_ float x); _Check_return_ long lrintl(_In_ long double x); diff --git a/sdk/include/crt/stdlib.h b/sdk/include/crt/stdlib.h index fc66c3a6874dd..b522f0c8648ed 100644 --- a/sdk/include/crt/stdlib.h +++ b/sdk/include/crt/stdlib.h @@ -1428,7 +1428,7 @@ extern "C" { __MINGW_EXTENSION _Check_return_ lldiv_t __cdecl lldiv(_In_ long long, _In_ long long); -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__clang__) _Check_return_ long long __cdecl llabs(_In_ long long _j); #pragma function(llabs) #endif From 12139bcde7825ce1a1b75933a90af543ad348b78 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 27 Nov 2024 16:26:17 +0200 Subject: [PATCH 146/750] [VCRUNTIME] Fix some intrinsics with clang-cl 17 For some unknow reason some intrinsics fail to get inlined. Using extern inline results in a linker error. Change it to static inline, so that there is a static implementation in case it doesn't get inlined --- sdk/include/vcruntime/mingw32/intrin_x86.h | 39 +++++++++++++++++----- sdk/include/vcruntime/xmmintrin.h | 6 ++-- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/sdk/include/vcruntime/mingw32/intrin_x86.h b/sdk/include/vcruntime/mingw32/intrin_x86.h index f6300702b4045..429b4896a0373 100644 --- a/sdk/include/vcruntime/mingw32/intrin_x86.h +++ b/sdk/include/vcruntime/mingw32/intrin_x86.h @@ -95,14 +95,14 @@ __INTRIN_INLINE void _ReadWriteBarrier(void) #define _ReadBarrier _ReadWriteBarrier #define _WriteBarrier _ReadWriteBarrier -#if !HAS_BUILTIN(_mm_mfence) +#if !HAS_BUILTIN(_mm_mfence) && !defined(__clang__) __INTRIN_INLINE void _mm_mfence(void) { __asm__ __volatile__("mfence" : : : "memory"); } #endif -#if !HAS_BUILTIN(_mm_lfence) +#if !HAS_BUILTIN(_mm_lfence)&& !defined(__clang__) __INTRIN_INLINE void _mm_lfence(void) { _ReadBarrier(); @@ -1301,8 +1301,13 @@ __INTRIN_INLINE unsigned long __cdecl _lrotr(unsigned long value, int shift) } #endif -#ifdef __x86_64__ -__INTRIN_INLINE unsigned long long __ll_lshift(unsigned long long Mask, int Bit) +#if defined __x86_64__ +#if defined(__clang__) && defined(_MSC_VER) // stupid hack because clang is broken +static inline __attribute__((__always_inline__)) +#else +__INTRIN_INLINE +#endif +unsigned long long __ll_lshift(unsigned long long Mask, int Bit) { unsigned long long retval; unsigned char shift = Bit & 0x3F; @@ -1348,7 +1353,12 @@ __INTRIN_INLINE unsigned long long __ull_rshift(unsigned long long Mask, int Bit just confuses it. Also we declare Bit as an int and then truncate it to match Visual C++ behavior */ -__INTRIN_INLINE unsigned long long __ll_lshift(unsigned long long Mask, int Bit) +#if defined(__clang__) && defined(_MSC_VER) // stupid hack because clang is broken +static inline __attribute__((__always_inline__)) +#else +__INTRIN_INLINE +#endif +unsigned long long __ll_lshift(unsigned long long Mask, int Bit) { unsigned long long retval = Mask; @@ -1641,15 +1651,19 @@ __INTRIN_INLINE unsigned long __cdecl _outpd(unsigned short Port, unsigned long /*** System information ***/ +#if !HAS_BUILTIN(__cpuid) __INTRIN_INLINE void __cpuid(int CPUInfo[4], int InfoType) { __asm__ __volatile__("cpuid" : "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (InfoType)); } +#endif +#if !HAS_BUILTIN(__cpuidex) __INTRIN_INLINE void __cpuidex(int CPUInfo[4], int InfoType, int ECXValue) { __asm__ __volatile__("cpuid" : "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (InfoType), "c" (ECXValue)); } +#endif #if !HAS_BUILTIN(__rdtsc) __INTRIN_INLINE unsigned long long __rdtsc(void) @@ -1972,8 +1986,12 @@ __INTRIN_INLINE void __invlpg(void *Address) /*** System operations ***/ - -__INTRIN_INLINE unsigned long long __readmsr(unsigned long reg) +#if defined(__clang__) && defined(_MSC_VER) // stupid hack because clang is broken +static inline __attribute__((__always_inline__)) +#else +__INTRIN_INLINE +#endif +unsigned long long __readmsr(unsigned long reg) { #ifdef __x86_64__ unsigned long low, high; @@ -1986,7 +2004,12 @@ __INTRIN_INLINE unsigned long long __readmsr(unsigned long reg) #endif } -__INTRIN_INLINE void __writemsr(unsigned long Register, unsigned long long Value) +#if defined(__clang__) && defined(_MSC_VER) // stupid hack because clang is broken +static inline __attribute__((__always_inline__)) +#else +__INTRIN_INLINE +#endif +void __writemsr(unsigned long Register, unsigned long long Value) { #ifdef __x86_64__ __asm__ __volatile__("wrmsr" : : "a" (Value), "d" (Value >> 32), "c" (Register)); diff --git a/sdk/include/vcruntime/xmmintrin.h b/sdk/include/vcruntime/xmmintrin.h index 224cbc25f1bbb..37c7fefd1050f 100644 --- a/sdk/include/vcruntime/xmmintrin.h +++ b/sdk/include/vcruntime/xmmintrin.h @@ -531,14 +531,14 @@ do { \ /* Use inline functions on GCC/Clang */ -#if !HAS_BUILTIN(_mm_getcsr) +#if !HAS_BUILTIN(_mm_getcsr) && !defined(_MSC_VER) __INTRIN_INLINE_SSE unsigned int _mm_getcsr(void) { return __builtin_ia32_stmxcsr(); } #endif -#if !HAS_BUILTIN(_mm_setcsr) +#if !HAS_BUILTIN(_mm_setcsr) && !defined(_MSC_VER) __INTRIN_INLINE_SSE void _mm_setcsr(unsigned int a) { __builtin_ia32_ldmxcsr(a); @@ -1136,7 +1136,7 @@ __INTRIN_INLINE_SSE void _mm_stream_ps(float *__p, __m128 __a) #endif } -#if !HAS_BUILTIN(_mm_sfence) +#if !HAS_BUILTIN(_mm_sfence) && !defined(_MSC_VER) __INTRIN_INLINE_SSE void _mm_sfence(void) { __builtin_ia32_sfence(); From 478317abcb5dbddc90e2dbb27b7bb1e94c429442 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 28 Nov 2024 12:25:46 +0200 Subject: [PATCH 147/750] [PSEH] Fix SEH compatibility macros for dummy PSEH This is used with Clang, which does have native SEH, but it's broken and can cause the compiler to crash. Previously some code was not handling this and instead used native SEH for clang. Fix this by always using _SEH2_* macros instead of relying on __USE_PSEH2__ to be defined. Try to improve things --- sdk/include/psdk/rpc.h | 4 ---- sdk/include/reactos/wine/exception.h | 7 ++----- sdk/include/vcruntime/excpt.h | 2 +- sdk/lib/pseh/CMakeLists.txt | 1 - sdk/lib/pseh/include/pseh/pseh2.h | 10 ++++++++++ 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/sdk/include/psdk/rpc.h b/sdk/include/psdk/rpc.h index b35c35fcad1cb..257823505d934 100644 --- a/sdk/include/psdk/rpc.h +++ b/sdk/include/psdk/rpc.h @@ -5,10 +5,6 @@ #endif /* _INC_WINDOWS */ #endif -#if defined(__USE_PSEH2__) && !defined(RC_INVOKED) -#include -#endif - #ifndef __RPC_H__ #define __RPC_H__ diff --git a/sdk/include/reactos/wine/exception.h b/sdk/include/reactos/wine/exception.h index f9333e8ff2a29..8d0b3ea46c09b 100644 --- a/sdk/include/reactos/wine/exception.h +++ b/sdk/include/reactos/wine/exception.h @@ -3,10 +3,7 @@ #include #include -#ifdef __USE_PSEH2__ -# include -# include -#endif +#include #ifdef __cplusplus extern "C" { @@ -63,7 +60,7 @@ typedef struct _WINE_EXCEPTION_REGISTRATION_RECORD #define __EXCEPT(func) _SEH2_EXCEPT(func(_SEH2_GetExceptionInformation())) #define __EXCEPT_CTX(func, ctx) _SEH2_EXCEPT((func)(GetExceptionInformation(), ctx)) #define __EXCEPT_PAGE_FAULT _SEH2_EXCEPT(_SEH2_GetExceptionCode() == STATUS_ACCESS_VIOLATION) -#define __EXCEPT_ALL _SEH2_EXCEPT(_SEH_EXECUTE_HANDLER) +#define __EXCEPT_ALL _SEH2_EXCEPT(1) #define __ENDTRY _SEH2_END #define __FINALLY(func) _SEH2_FINALLY { func(!_SEH2_AbnormalTermination()); } #define __FINALLY_CTX(func, ctx) _SEH2_FINALLY { func(!_SEH2_AbnormalTermination(), ctx); }; _SEH2_END diff --git a/sdk/include/vcruntime/excpt.h b/sdk/include/vcruntime/excpt.h index 8bd6e90cc4680..faf5f2fe40530 100644 --- a/sdk/include/vcruntime/excpt.h +++ b/sdk/include/vcruntime/excpt.h @@ -74,7 +74,7 @@ typedef enum _EXCEPTION_DISPOSITION #endif -#if defined(_MSC_VER) || (defined(__clang__) && defined(__SEH__)) +#if (defined(_MSC_VER) || (defined(__clang__) && defined(__SEH__))) && !defined(_exception_code) unsigned long __cdecl _exception_code(void); void *__cdecl _exception_info(void); int __cdecl _abnormal_termination(void); diff --git a/sdk/lib/pseh/CMakeLists.txt b/sdk/lib/pseh/CMakeLists.txt index b2d23bb358836..e36a3f5fd8705 100644 --- a/sdk/lib/pseh/CMakeLists.txt +++ b/sdk/lib/pseh/CMakeLists.txt @@ -57,5 +57,4 @@ target_include_directories(pseh INTERFACE include) # Make it clear that we are using PSEH2 if ((CMAKE_C_COMPILER_ID STREQUAL "GNU") OR ((CMAKE_C_COMPILER_ID STREQUAL "Clang") AND (NOT (ARCH STREQUAL "amd64")))) - target_compile_definitions(pseh INTERFACE __USE_PSEH2__) endif() diff --git a/sdk/lib/pseh/include/pseh/pseh2.h b/sdk/lib/pseh/include/pseh/pseh2.h index 523d9ddd161c6..a6d0ab5a3a245 100644 --- a/sdk/lib/pseh/include/pseh/pseh2.h +++ b/sdk/lib/pseh/include/pseh/pseh2.h @@ -23,6 +23,8 @@ #ifndef KJK_PSEH2_H_ #define KJK_PSEH2_H_ +#define __USE_PSEH2__ + #if defined(_USE_NATIVE_SEH) || (defined(_MSC_VER) && !(defined(__clang__) && defined(_M_AMD64))) #define _SEH2_TRY __try @@ -86,6 +88,14 @@ _Pragma("GCC diagnostic pop") #define _SEH2_LEAVE goto __seh2_scope_end__; #define _SEH2_VOLATILE volatile +#define __try _SEH2_TRY +#define __except _SEH2_EXCEPT +#define __finally _SEH2_FINALLY +#define __endtry _SEH2_END +#define __leave _SEH2_LEAVE +#define _exception_code() 0 +#define _exception_info() ((void*)0) + #elif defined(_USE_PSEH3) #include "pseh3.h" From 96676ca251e053e43742c2eda7de12f9e751ff8b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 29 Nov 2024 09:59:48 +0200 Subject: [PATCH 148/750] [PSEH] Use native SEH on clang-cl x64 --- drivers/filesystems/fastfat/create.c | 19 ++++++++++--------- sdk/lib/pseh/include/pseh/pseh2.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/filesystems/fastfat/create.c b/drivers/filesystems/fastfat/create.c index fa9b651e36403..cf2cf85e4c5d7 100644 --- a/drivers/filesystems/fastfat/create.c +++ b/drivers/filesystems/fastfat/create.c @@ -2356,7 +2356,7 @@ Return Value: if ((CreateDisposition != FILE_OPEN) && (CreateDisposition != FILE_OPEN_IF)) { - try_return( Iosb.Status = STATUS_ACCESS_DENIED ); + try_return( Status = STATUS_ACCESS_DENIED ); } // @@ -2389,7 +2389,7 @@ Return Value: if (!FlagOn(ShareAccess, FILE_SHARE_READ) && !FatIsHandleCountZero( IrpContext, Vcb )) { - try_return( Iosb.Status = STATUS_SHARING_VIOLATION ); + try_return( Status = STATUS_SHARING_VIOLATION ); } // @@ -2412,14 +2412,14 @@ Return Value: if (Vcb->OpenFileCount != 0) { - try_return( Iosb.Status = STATUS_SHARING_VIOLATION ); + try_return( Status = STATUS_SHARING_VIOLATION ); } } else { if (Vcb->ReadOnlyCount != Vcb->OpenFileCount) { - try_return( Iosb.Status = STATUS_SHARING_VIOLATION ); + try_return( Status = STATUS_SHARING_VIOLATION ); } } @@ -2487,13 +2487,13 @@ Return Value: if (Vcb->DirectAccessOpenCount > 0) { - if (!NT_SUCCESS(Iosb.Status = IoCheckShareAccess( *DesiredAccess, + if (!NT_SUCCESS(Status = IoCheckShareAccess( *DesiredAccess, ShareAccess, FileObject, &Vcb->ShareAccess, TRUE ))) { - try_return( Iosb.Status ); + try_return( NOTHING ); } } else { @@ -2546,7 +2546,7 @@ Return Value: // And set our status to success // - Iosb.Status = STATUS_SUCCESS; + Status = STATUS_SUCCESS; Iosb.Information = FILE_OPENED; try_exit: NOTHING; @@ -2558,7 +2558,7 @@ Return Value: // If this is an abnormal termination then undo our work // - if (_SEH2_AbnormalTermination() || !NT_SUCCESS(Iosb.Status)) { + if (_SEH2_AbnormalTermination() || !NT_SUCCESS(Status)) { if (UnwindCounts) { Vcb->DirectAccessOpenCount -= 1; @@ -2570,9 +2570,10 @@ Return Value: if (UnwindVolumeLock) { Vcb->VcbState &= ~VCB_STATE_FLAG_LOCKED; } } - DebugTrace(-1, Dbg, "FatOpenVolume -> Iosb.Status = %08lx\n", Iosb.Status); + DebugTrace(-1, Dbg, "FatOpenVolume -> Iosb.Status = %08lx\n", Status); } _SEH2_END; + Iosb.Status = Status; return Iosb; } diff --git a/sdk/lib/pseh/include/pseh/pseh2.h b/sdk/lib/pseh/include/pseh/pseh2.h index a6d0ab5a3a245..a3aed7aed2b44 100644 --- a/sdk/lib/pseh/include/pseh/pseh2.h +++ b/sdk/lib/pseh/include/pseh/pseh2.h @@ -25,7 +25,7 @@ #define __USE_PSEH2__ -#if defined(_USE_NATIVE_SEH) || (defined(_MSC_VER) && !(defined(__clang__) && defined(_M_AMD64))) +#if defined(_USE_NATIVE_SEH) || defined(_MSC_VER) #define _SEH2_TRY __try #define _SEH2_FINALLY __finally From 91b8923601ff4ef4cf47c4fd0b004de1f1db3aa2 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Tue, 14 Jan 2025 18:09:48 +0100 Subject: [PATCH 149/750] [RAPPS] Allow .zip generated installers to skip writing the DisplayIcon value (#7609) This is useful for wallpaper and theme packs. --- base/applications/rapps/geninst.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/base/applications/rapps/geninst.cpp b/base/applications/rapps/geninst.cpp index 9fff1d2b264b1..ba57b53b50288 100644 --- a/base/applications/rapps/geninst.cpp +++ b/base/applications/rapps/geninst.cpp @@ -28,6 +28,7 @@ extern "C" { #define REGPATH_UNINSTALL L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall" +#define DB_NONE L"!" // Skip/Ignore #define DB_GENINST_FILES L"Files" #define DB_GENINST_DIR L"Dir" #define DB_GENINST_ICON L"Icon" @@ -230,6 +231,8 @@ GetCustomIconPath(InstallInfo &Info, CStringW &Path) { if (*GetGenerateString(DB_GENINST_ICON, Path)) { + if (Path.Compare(DB_NONE) == 0) + return HRESULT_FROM_WIN32(ERROR_CAN_NOT_COMPLETE); Path = BuildPath(Info.InstallDir, Path); int idx = PathParseIconLocation(Path.GetBuffer()); Path.ReleaseBuffer(); @@ -432,7 +435,7 @@ ExtractAndInstallThread(LPVOID Parameter) { const BOOL PerUserModeDefault = TRUE; InstallInfo &Info = *static_cast(g_pInfo); - LPCWSTR AppName = Info.AppName, Archive = Info.ArchivePath, None = L"!"; + LPCWSTR AppName = Info.AppName, Archive = Info.ArchivePath, None = DB_NONE; CStringW installdir, tempdir, files, shortcut, tmp; HRESULT hr; CRegKey arpkey; @@ -534,9 +537,9 @@ ExtractAndInstallThread(LPVOID Parameter) (tmp = tmp.Mid(0, cch)).AppendFormat(unparamsfmt, L" /S", modechar, bitness, arpkeyname); WriteArpEntry(L"QuietUninstallString", tmp); - if (GetCustomIconPath(Info, tmp) != S_OK) - tmp = Info.MainApp; - WriteArpEntry(L"DisplayIcon", tmp); + hr = GetCustomIconPath(Info, tmp); + if (hr != HRESULT_FROM_WIN32(ERROR_CAN_NOT_COMPLETE)) + WriteArpEntry(L"DisplayIcon", hr == S_OK ? tmp : Info.MainApp); if (*GetCommonString(DB_VERSION, tmp)) WriteArpEntry(L"DisplayVersion", tmp); From 1b14ce5db3b34dd6df9c76397c5e7d8ddf78bfc1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Dec 2024 20:55:42 +0200 Subject: [PATCH 150/750] [WIDL] Turn warnings into errors --- sdk/tools/widl/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/tools/widl/CMakeLists.txt b/sdk/tools/widl/CMakeLists.txt index 0a4533f03b0ff..4c0818489d034 100644 --- a/sdk/tools/widl/CMakeLists.txt +++ b/sdk/tools/widl/CMakeLists.txt @@ -48,4 +48,6 @@ if(MSVC) # Disable warning "'=': conversion from 'a' to 'b', possible loss of data" target_compile_options(widl PRIVATE "/wd4244") + + target_compile_options(widl PRIVATE "-WX") endif() From 995e4c829ad16ab58f1fdb116597eec6c9c5c613 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 15 Dec 2024 10:23:50 +0200 Subject: [PATCH 151/750] [WIDL] Properly pass architecture flag instead of modifying the code This reverts commit 73c776c744f26b294a5e6bc7e1fc11b374b05c17 "[WIDL] Fix non-x86 builds". --- CMakeLists.txt | 4 ++++ sdk/cmake/widl-support.cmake | 6 +++--- sdk/tools/widl/widl.c | 11 +++++------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13916a9362a16..38f70b17f6392 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,6 +140,10 @@ if(NOT CMAKE_CROSSCOMPILING) add_definitions(/D_X86_ /D__i386__ /DWIN32 /D_WINDOWS) elseif(ARCH STREQUAL "amd64") add_definitions(-D_AMD64_ -D__x86_64__ /DWIN32 -D_WINDOWS) + elseif(ARCH STREQUAL "arm") + add_definitions(-D__arm__) + elseif(ARCH STREQUAL "arm64") + add_definitions(-D__aarch64__) endif() if(MSVC_VERSION GREATER 1699) add_definitions(/D_ALLOW_KEYWORD_MACROS) diff --git a/sdk/cmake/widl-support.cmake b/sdk/cmake/widl-support.cmake index a8e926614a042..1b291dfa5b380 100644 --- a/sdk/cmake/widl-support.cmake +++ b/sdk/cmake/widl-support.cmake @@ -1,11 +1,11 @@ #idl files support if(ARCH STREQUAL "i386") - set(IDL_FLAGS -m32 --win32) + set(IDL_FLAGS -m32 --win32 -b i386-x-y) elseif(ARCH STREQUAL "amd64") - set(IDL_FLAGS -m64 --win64) + set(IDL_FLAGS -m64 --win64 -b amd64-x-y) else() - set(IDL_FLAGS "") + set(IDL_FLAGS -b ${ARCH}-x-y) endif() function(add_typelib) diff --git a/sdk/tools/widl/widl.c b/sdk/tools/widl/widl.c index ec1e61e22a8ce..77d4b7750a975 100644 --- a/sdk/tools/widl/widl.c +++ b/sdk/tools/widl/widl.c @@ -92,16 +92,15 @@ static const char usage[] = static const char version_string[] = "Wine IDL Compiler version " PACKAGE_VERSION "\n" "Copyright 2002 Ove Kaaven\n"; -// __REACTOS__!! We must use TARGET_ macros here! -#ifdef TARGET_i386 +#ifdef __i386__ enum target_cpu target_cpu = CPU_x86; -#elif defined(TARGET_amd64) +#elif defined(__x86_64__) enum target_cpu target_cpu = CPU_x86_64; -#elif defined(TARGET_ppc) +#elif defined(__powerpc__) enum target_cpu target_cpu = CPU_POWERPC; -#elif defined(TARGET_arm) +#elif defined(__arm__) enum target_cpu target_cpu = CPU_ARM; -#elif defined(TARGET_arm64) +#elif defined(__aarch64__) enum target_cpu target_cpu = CPU_ARM64; #else #error Unsupported CPU From bba03c886c830ffa6d4ebe70e0c9bf34153c7dff Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Dec 2024 17:40:44 +0200 Subject: [PATCH 152/750] [WIDL] Reduce diff to Wine-4.0 --- sdk/tools/widl/CMakeLists.txt | 2 +- sdk/tools/widl/client.c | 2 +- sdk/tools/widl/hash.c | 6 +++--- sdk/tools/widl/parser.y | 2 -- sdk/tools/widl/register.c | 25 ++++--------------------- sdk/tools/widl/widl.h | 2 -- sdk/tools/widl/write_msft.c | 10 +++++----- 7 files changed, 14 insertions(+), 35 deletions(-) diff --git a/sdk/tools/widl/CMakeLists.txt b/sdk/tools/widl/CMakeLists.txt index 4c0818489d034..4346c14a188d1 100644 --- a/sdk/tools/widl/CMakeLists.txt +++ b/sdk/tools/widl/CMakeLists.txt @@ -35,7 +35,7 @@ list(APPEND SOURCE ../port/getopt1.c ../port/mkstemps.c) -add_definitions(-DINT16=SHORT) +add_definitions(-DINT16=SHORT -DLANG_SCOTTISH_GAELIC=0x91) add_host_tool(widl ${SOURCE}) target_link_libraries(widl PRIVATE host_includes wpphost) diff --git a/sdk/tools/widl/client.c b/sdk/tools/widl/client.c index 20ebd51a58131..30b0dce5b8a69 100644 --- a/sdk/tools/widl/client.c +++ b/sdk/tools/widl/client.c @@ -20,7 +20,7 @@ #include "config.h" #include "wine/port.h" - + #include #include #ifdef HAVE_UNISTD_H diff --git a/sdk/tools/widl/hash.c b/sdk/tools/widl/hash.c index 673625ed1e364..249c824e9e0fd 100644 --- a/sdk/tools/widl/hash.c +++ b/sdk/tools/widl/hash.c @@ -543,10 +543,10 @@ unsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr) case LANG_VIETNAMESE: case LANG_MALTESE: case LANG_IRISH: case LANG_SAMI: case LANG_UPPER_SORBIAN: case LANG_TSWANA: case LANG_XHOSA: case LANG_ZULU: case LANG_WELSH: - case LANG_BRETON: case LANG_NEUTRAL: + case LANG_BRETON: case LANG_SCOTTISH_GAELIC: case LANG_NEUTRAL: /* some languages not in all windows versions or ReactOS */ -#ifdef LANG_GAELIC - case LANG_GAELIC: +#ifdef LANG_MANX_GAELIC + case LANG_MANX_GAELIC: #endif #ifdef LANG_TAJIK case LANG_TAJIK: diff --git a/sdk/tools/widl/parser.y b/sdk/tools/widl/parser.y index 63b70e9e47c3e..bbb03e8ef7426 100644 --- a/sdk/tools/widl/parser.y +++ b/sdk/tools/widl/parser.y @@ -136,9 +136,7 @@ static struct namespace global_namespace = { static struct namespace *current_namespace = &global_namespace; -#ifndef __REACTOS__ static typelib_t *current_typelib; -#endif %} %union { diff --git a/sdk/tools/widl/register.c b/sdk/tools/widl/register.c index a6d1ef840f715..718d444cc7a4e 100644 --- a/sdk/tools/widl/register.c +++ b/sdk/tools/widl/register.c @@ -34,9 +34,7 @@ #include "parser.h" #include "header.h" #include "typegen.h" -#ifndef __REACTOS__ #include "typelib.h" -#endif static int indent; @@ -276,7 +274,6 @@ void write_regscript( const statement_list_t *stmts ) } } -#ifndef __REACTOS__ void write_typelib_regscript( const statement_list_t *stmts ) { const statement_t *stmt; @@ -289,17 +286,11 @@ void write_typelib_regscript( const statement_list_t *stmts ) if (count && !strendswith( typelib_name, ".res" )) error( "Cannot store multiple typelibs into %s\n", typelib_name ); else - { - if (do_old_typelib) - create_sltg_typelib( stmt->u.lib ); - else - create_msft_typelib( stmt->u.lib ); - } + create_msft_typelib( stmt->u.lib ); count++; } if (count && strendswith( typelib_name, ".res" )) flush_output_resources( typelib_name ); } -#endif void output_typelib_regscript( const typelib_t *typelib ) { @@ -309,9 +300,7 @@ void output_typelib_regscript( const typelib_t *typelib ) unsigned int version = get_attrv( typelib->attrs, ATTR_VERSION ); unsigned int flags = 0; char id_part[12] = ""; -#ifndef __REACTOS__ char *resname = typelib_name; -#endif expr_t *expr; if (is_attr( typelib->attrs, ATTR_RESTRICTED )) flags |= 1; /* LIBFLAG_FRESTRICTED */ @@ -329,17 +318,14 @@ void output_typelib_regscript( const typelib_t *typelib ) MAJORVERSION(version), MINORVERSION(version), descr ? descr : typelib->name ); put_str( indent++, "{\n" ); expr = get_attrp( typelib->attrs, ATTR_ID ); -#ifdef __REACTOS__ - if (expr) - sprintf(id_part, "\\%d", expr->cval); -#else if (expr) { sprintf(id_part, "\\%d", expr->cval); +#ifndef __REACTOS__ resname = xmalloc( strlen(typelib_name) + 20 ); sprintf(resname, "%s\\%d", typelib_name, expr->cval); - } #endif + } put_str( indent, "'%x' { %s = s '%%MODULE%%%s' }\n", lcid_expr ? lcid_expr->cval : 0, pointer_size == 8 ? "win64" : "win32", id_part ); put_str( indent, "FLAGS = s '%u'\n", flags ); @@ -359,9 +345,6 @@ void output_typelib_regscript( const typelib_t *typelib ) write_progids( typelib->stmts ); put_str( --indent, "}\n" ); -#ifdef __REACTOS__ - add_output_to_resources( "WINE_REGISTRY", typelib_name ); -#else + add_output_to_resources( "WINE_REGISTRY", resname ); -#endif } diff --git a/sdk/tools/widl/widl.h b/sdk/tools/widl/widl.h index c015ec01384df..3e015ca7e134b 100644 --- a/sdk/tools/widl/widl.h +++ b/sdk/tools/widl/widl.h @@ -96,9 +96,7 @@ extern void write_proxies(const statement_list_t *stmts); extern void write_client(const statement_list_t *stmts); extern void write_server(const statement_list_t *stmts); extern void write_regscript(const statement_list_t *stmts); -#ifndef __REACTOS__ extern void write_typelib_regscript(const statement_list_t *stmts); -#endif extern void output_typelib_regscript( const typelib_t *typelib ); extern void write_local_stubs(const statement_list_t *stmts); extern void write_dlldata(const statement_list_t *stmts); diff --git a/sdk/tools/widl/write_msft.c b/sdk/tools/widl/write_msft.c index 88cdbc7824899..2fa7e1936194a 100644 --- a/sdk/tools/widl/write_msft.c +++ b/sdk/tools/widl/write_msft.c @@ -900,7 +900,7 @@ static int encode_type( if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) { int mix_field; - + if (target_type & 0x80000000) { mix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF; } else { @@ -936,7 +936,7 @@ static int encode_type( if (typeoffset == typelib->typelib_segdir[MSFT_SEG_TYPEDESC].length) { int mix_field; - + if (target_type & 0x80000000) { mix_field = ((target_type >> 16) & VT_TYPEMASK) | VT_ARRAY; } else { @@ -1551,7 +1551,7 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index) } /* update the index data */ - typeinfo->func_indices[typeinfo->typeinfo->cElement & 0xffff] = id; + typeinfo->func_indices[typeinfo->typeinfo->cElement & 0xffff] = id; typeinfo->func_offsets[typeinfo->typeinfo->cElement & 0xffff] = offset; typeinfo->func_names[typeinfo->typeinfo->cElement & 0xffff] = name_offset; @@ -1607,7 +1607,7 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var) unsigned int typedata_size; INT *typedata; unsigned int var_datawidth, var_alignment = 0; - int var_type_size, var_kind = 0 /* VAR_PERINSTANCE */; + int var_type_size, var_kind = 0 /* VAR_PERINSTANCE */; int alignment; int varflags = 0; const attr_t *attr; @@ -2705,7 +2705,7 @@ int create_msft_typelib(typelib_t *typelib) set_help_context(msft); set_help_string_dll(msft); set_help_string_context(msft); - + /* midl adds two sets of custom data to the library: the current unix time and midl's version number */ time_override = getenv( "WIDL_TIME_OVERRIDE"); From a8322459abcd634256d1e61b04c4d1f35d6c2c90 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Tue, 24 Dec 2024 15:30:58 +0700 Subject: [PATCH 153/750] [NTOS:MM] balance: Fix PageOutThreadActive value check --- ntoskrnl/mm/balance.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/mm/balance.c b/ntoskrnl/mm/balance.c index 3b11aeab2c8ff..bdb50c787071d 100644 --- a/ntoskrnl/mm/balance.c +++ b/ntoskrnl/mm/balance.c @@ -289,7 +289,7 @@ VOID NTAPI MmRebalanceMemoryConsumers(VOID) { - // if (InterlockedCompareExchange(&PageOutThreadActive, 0, 1) == 0) + if (InterlockedCompareExchange(&PageOutThreadActive, 1, 0) == 0) { KeSetEvent(&MiBalancerEvent, IO_NO_INCREMENT, FALSE); } @@ -404,7 +404,11 @@ MiBalancerThread(PVOID Unused) while (InitialTarget != 0); if (Status == STATUS_WAIT_0) - InterlockedDecrement(&PageOutThreadActive); + { + LONG Active = InterlockedExchange(&PageOutThreadActive, 0); + ASSERT(Active == 1); + DBG_UNREFERENCED_LOCAL_VARIABLE(Active); + } } else { From c69ad5efa2d1962b6931599fb36060edd09a14e5 Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Tue, 24 Dec 2024 20:02:23 +0700 Subject: [PATCH 154/750] [NTOS:MM] MmRequestPageMemoryConsumer: Properly mark CORE-17624 delay hack Addendum to commit 2b14056600bae80532f7ab9320fdc0853a55e30a. --- ntoskrnl/mm/balance.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ntoskrnl/mm/balance.c b/ntoskrnl/mm/balance.c index bdb50c787071d..eb5e6f1d05f2c 100644 --- a/ntoskrnl/mm/balance.c +++ b/ntoskrnl/mm/balance.c @@ -314,10 +314,12 @@ MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN CanWait, PPFN_NUMBER AllocatedPage) { PFN_NUMBER Page; + + /* Delay some requests for the Memory Manager to recover pages (CORE-17624). + * FIXME: This is suboptimal. + */ static INT i = 0; static LARGE_INTEGER TinyTime = {{-1L, -1L}}; - - /* Delay some requests for the Memory Manager to recover pages */ if (i++ >= 100) { KeDelayExecutionThread(KernelMode, FALSE, &TinyTime); From 190f710942b7f6cb45307ca51afcd14b7a0f9ada Mon Sep 17 00:00:00 2001 From: Thamatip Chitpong Date: Thu, 26 Dec 2024 16:34:21 +0700 Subject: [PATCH 155/750] [NTOS:MM] MiBalancerThread: Formatting fixes --- ntoskrnl/mm/balance.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ntoskrnl/mm/balance.c b/ntoskrnl/mm/balance.c index eb5e6f1d05f2c..6e3c51f9dedb1 100644 --- a/ntoskrnl/mm/balance.c +++ b/ntoskrnl/mm/balance.c @@ -349,20 +349,20 @@ CcRosTrimCache( _In_ ULONG Target, _Out_ PULONG NrFreed); -VOID NTAPI +VOID +NTAPI MiBalancerThread(PVOID Unused) { PVOID WaitObjects[2]; NTSTATUS Status; - ULONG i; WaitObjects[0] = &MiBalancerEvent; WaitObjects[1] = &MiBalancerTimer; - while (1) + while (TRUE) { KeSetEvent(&MiBalancerDoneEvent, IO_NO_INCREMENT, FALSE); - Status = KeWaitForMultipleObjects(2, + Status = KeWaitForMultipleObjects(_countof(WaitObjects), WaitObjects, WaitAny, Executive, @@ -382,7 +382,7 @@ MiBalancerThread(PVOID Unused) ULONG OldTarget = InitialTarget; /* Trim each consumer */ - for (i = 0; i < MC_MAXIMUM; i++) + for (ULONG i = 0; i < MC_MAXIMUM; i++) { InitialTarget = MiTrimMemoryConsumer(i, InitialTarget); } @@ -397,7 +397,7 @@ MiBalancerThread(PVOID Unused) /* No pages left to swap! */ if (InitialTarget != 0 && - InitialTarget == OldTarget) + InitialTarget == OldTarget) { /* Game over */ KeBugCheck(NO_PAGES_AVAILABLE); From 6ada5978d023504e591bce2fd91d48ed7c262fd6 Mon Sep 17 00:00:00 2001 From: Vincent Franchomme Date: Thu, 16 Jan 2025 04:30:38 +0100 Subject: [PATCH 156/750] [NTOS:MM] Do not use PAGE_ROUND_DOWN for LONGLONG values (#7603) PAGE_ROUND_DOWN macro seems to not work correctly with LONGLONG values. It creates some random freezes in the 1st-stage setup after commit 69bf14050686f81db153c70df4f874b5dfa4a5ff. It's fixed by creating PAGE_ROUND_UP_64 and PAGE_ROUND_DOWN_64 macros for 64-bit only data types. --------- Co-authored-by: Thamatip Chitpong --- ntoskrnl/include/internal/mm.h | 7 +++++++ ntoskrnl/mm/section.c | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ntoskrnl/include/internal/mm.h b/ntoskrnl/include/internal/mm.h index 91bf7599df236..1c3870d6370a6 100644 --- a/ntoskrnl/include/internal/mm.h +++ b/ntoskrnl/include/internal/mm.h @@ -131,6 +131,13 @@ typedef ULONG_PTR SWAPENTRY; #define MM_ROUND_DOWN(x,s) \ ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1))) +/* PAGE_ROUND_UP and PAGE_ROUND_DOWN equivalent, with support for 64-bit-only data types */ +#define PAGE_ROUND_UP_64(x) \ + (((x) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) + +#define PAGE_ROUND_DOWN_64(x) \ + ((x) & ~(PAGE_SIZE - 1)) + #define PAGE_FLAGS_VALID_FOR_SECTION \ (PAGE_READONLY | \ PAGE_READWRITE | \ diff --git a/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c index 73b414315fe38..d570dbc3cec0f 100644 --- a/ntoskrnl/mm/section.c +++ b/ntoskrnl/mm/section.c @@ -4876,7 +4876,7 @@ MmPurgeSegment( } /* Find byte offset of the page to start */ - PurgeStart.QuadPart = PAGE_ROUND_DOWN(PurgeStart.QuadPart); + PurgeStart.QuadPart = PAGE_ROUND_DOWN_64(PurgeStart.QuadPart); while (PurgeStart.QuadPart < PurgeEnd.QuadPart) { @@ -4947,7 +4947,7 @@ MmIsDataSectionResident( return FALSE; /* Find byte offset of the page to start */ - RangeStart.QuadPart = PAGE_ROUND_DOWN(RangeStart.QuadPart); + RangeStart.QuadPart = PAGE_ROUND_DOWN_64(RangeStart.QuadPart); MmLockSectionSegment(Segment); @@ -5010,7 +5010,7 @@ MmMakeSegmentDirty( return STATUS_NOT_MAPPED_VIEW; /* Find byte offset of the page to start */ - RangeStart.QuadPart = PAGE_ROUND_DOWN(RangeStart.QuadPart); + RangeStart.QuadPart = PAGE_ROUND_DOWN_64(RangeStart.QuadPart); MmLockSectionSegment(Segment); @@ -5098,7 +5098,7 @@ MmFlushSegment( } /* Find byte offset of the page to start */ - FlushStart.QuadPart = PAGE_ROUND_DOWN(FlushStart.QuadPart); + FlushStart.QuadPart = PAGE_ROUND_DOWN_64(FlushStart.QuadPart); while (FlushStart.QuadPart < FlushEnd.QuadPart) { From f482244f45978b66ff35d508ff4439c7ddf3eb1e Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Thu, 16 Jan 2025 20:09:30 +0900 Subject: [PATCH 157/750] [SHELL32] Move SHOpenPropSheetA to propsheet.cpp (#7624) Improve consistency of code management. JIRA issue: CORE-19278 - Move SHOpenPropSheetA from utils.cpp into propsheet.cpp that contains SHOpenPropSheetW. --- dll/win32/shell32/propsheet.cpp | 35 ++++++++++++++++++++++++++++++ dll/win32/shell32/utils.cpp | 38 --------------------------------- 2 files changed, 35 insertions(+), 38 deletions(-) diff --git a/dll/win32/shell32/propsheet.cpp b/dll/win32/shell32/propsheet.cpp index 3fccaa0ac1a01..7768e16c35859 100644 --- a/dll/win32/shell32/propsheet.cpp +++ b/dll/win32/shell32/propsheet.cpp @@ -160,6 +160,41 @@ SHELL32_OpenPropSheet(LPCWSTR pszCaption, HKEY *ahKeys, UINT cKeys, return (Result != -1); } +/************************************************************************* + * SHOpenPropSheetA [SHELL32.707] + * + * @see https://learn.microsoft.com/en-us/windows/win32/api/shlobj/nf-shlobj-shopenpropsheeta + */ +EXTERN_C +BOOL WINAPI +SHOpenPropSheetA( + _In_opt_ LPCSTR pszCaption, + _In_opt_ HKEY *ahKeys, + _In_ UINT cKeys, + _In_ const CLSID *pclsidDefault, + _In_ IDataObject *pDataObject, + _In_opt_ IShellBrowser *pShellBrowser, + _In_opt_ LPCSTR pszStartPage) +{ + CStringW strStartPageW, strCaptionW; + LPCWSTR pszCaptionW = NULL, pszStartPageW = NULL; + + if (pszCaption) + { + strStartPageW = pszCaption; + pszCaptionW = strCaptionW; + } + + if (pszStartPage) + { + strStartPageW = pszStartPage; + pszStartPageW = strStartPageW; + } + + return SHOpenPropSheetW(pszCaptionW, ahKeys, cKeys, pclsidDefault, + pDataObject, pShellBrowser, pszStartPageW); +} + /************************************************************************* * SHOpenPropSheetW [SHELL32.80] * diff --git a/dll/win32/shell32/utils.cpp b/dll/win32/shell32/utils.cpp index a384c6c492526..440d22f64607b 100644 --- a/dll/win32/shell32/utils.cpp +++ b/dll/win32/shell32/utils.cpp @@ -1116,44 +1116,6 @@ CopyStreamUI( return hr; } -/************************************************************************* - * SHOpenPropSheetA [SHELL32.707] - * - * @see https://learn.microsoft.com/en-us/windows/win32/api/shlobj/nf-shlobj-shopenpropsheeta - */ -EXTERN_C -BOOL WINAPI -SHOpenPropSheetA( - _In_opt_ LPCSTR pszCaption, - _In_opt_ HKEY *ahKeys, - _In_ UINT cKeys, - _In_ const CLSID *pclsidDefault, - _In_ IDataObject *pDataObject, - _In_opt_ IShellBrowser *pShellBrowser, - _In_opt_ LPCSTR pszStartPage) -{ - CStringW strStartPageW, strCaptionW; - LPCWSTR pszCaptionW = NULL, pszStartPageW = NULL; - - TRACE("(%s, %p, %u, %p, %p, %p, %s)", debugstr_a(pszCaption), ahKeys, cKeys, pclsidDefault, - pDataObject, pShellBrowser, debugstr_a(pszStartPage)); - - if (pszCaption) - { - strStartPageW = pszCaption; - pszCaptionW = strCaptionW; - } - - if (pszStartPage) - { - strStartPageW = pszStartPage; - pszStartPageW = strStartPageW; - } - - return SHOpenPropSheetW(pszCaptionW, ahKeys, cKeys, pclsidDefault, - pDataObject, pShellBrowser, pszStartPageW); -} - /************************************************************************* * Activate_RunDLL [SHELL32.105] * From ca0fa4af1e1a0d43d99d653e7031c1edfacac019 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 13 Jul 2024 07:59:44 +0300 Subject: [PATCH 158/750] [RTL/x64] Improve RtlWalkFrameChain to handle user mode --- sdk/lib/rtl/amd64/unwind.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/sdk/lib/rtl/amd64/unwind.c b/sdk/lib/rtl/amd64/unwind.c index ee7313bc62f0f..910d9cdeac394 100644 --- a/sdk/lib/rtl/amd64/unwind.c +++ b/sdk/lib/rtl/amd64/unwind.c @@ -943,6 +943,7 @@ RtlWalkFrameChain(OUT PVOID *Callers, PVOID HandlerData; ULONG i, FramesToSkip; PRUNTIME_FUNCTION FunctionEntry; + MODE CurrentMode = RtlpGetMode(); DPRINT("Enter RtlWalkFrameChain\n"); @@ -956,11 +957,6 @@ RtlWalkFrameChain(OUT PVOID *Callers, /* Get the stack limits */ RtlpGetStackLimits(&StackLow, &StackHigh); - /* Check if we want the user-mode stack frame */ - if (Flags & 1) - { - } - _SEH2_TRY { /* Loop the frames */ @@ -990,15 +986,26 @@ RtlWalkFrameChain(OUT PVOID *Callers, } /* Check if we are in kernel mode */ - if (RtlpGetMode() == KernelMode) + if (CurrentMode == KernelMode) { /* Check if we left the kernel range */ - if (!(Flags & 1) && (Context.Rip < 0xFFFF800000000000ULL)) + if (Context.Rip < 0xFFFF800000000000ULL) { - break; + /* Bail out, unless user mode was requested */ + if ((Flags & 1) == 0) + { + break; + } + + /* We are in user mode now, get UM stack bounds */ + CurrentMode = UserMode; + StackLow = (ULONG64)NtCurrentTeb()->NtTib.StackLimit; + StackHigh = (ULONG64)NtCurrentTeb()->NtTib.StackBase; } } - else + + /* Check (again) if we are in user mode now */ + if (CurrentMode == UserMode) { /* Check if we left the user range */ if ((Context.Rip < 0x10000) || From f1b60c66f00ff31fadbea5366a3303cb834bccb4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 28 Nov 2024 12:25:46 +0200 Subject: [PATCH 159/750] [PSEH] Fix SEH compatibility macros for dummy PSEH This is used with Clang, which does have native SEH, but it's broken and can cause the compiler to crash. Previously some code was not handling this and instead used native SEH for clang. Fix this by always using _SEH2_* macros instead of relying on __USE_PSEH2__ to be defined. --- modules/rostests/apitests/include/apitest.h | 19 --------------- sdk/include/psdk/rpc.h | 27 ++++++--------------- sdk/include/reactos/wine/exception.h | 11 --------- 3 files changed, 8 insertions(+), 49 deletions(-) diff --git a/modules/rostests/apitests/include/apitest.h b/modules/rostests/apitests/include/apitest.h index 9a627e49560e5..18cd1ac0da7b9 100644 --- a/modules/rostests/apitests/include/apitest.h +++ b/modules/rostests/apitests/include/apitest.h @@ -12,7 +12,6 @@ #define InvalidPointer ((PVOID)0x5555555555555555ULL) // #define InvalidPointer ((PVOID)0x0123456789ABCDEFULL) -#ifdef __USE_PSEH2__ #include #define StartSeh() \ @@ -32,24 +31,6 @@ "Exception 0x%08lx, expected 0x%08lx\n", \ ExceptionStatus, (ExpectedStatus)); \ } -#else -#define StartSeh() \ -{ \ - NTSTATUS ExceptionStatus = STATUS_SUCCESS; \ - __try \ - { - -#define EndSeh(ExpectedStatus) \ - } \ - __except(EXCEPTION_EXECUTE_HANDLER) \ - { \ - ExceptionStatus = GetExceptionCode(); \ - } \ - ok(ExceptionStatus == (ExpectedStatus), \ - "Exception 0x%08lx, expected 0x%08lx\n", \ - ExceptionStatus, (ExpectedStatus)); \ -} -#endif #define ok_hr(status, expected) ok_hex(status, expected) #define ok_hr_(file, line, status, expected) ok_hex_(file, line, status, expected) diff --git a/sdk/include/psdk/rpc.h b/sdk/include/psdk/rpc.h index 257823505d934..42d76d9a95270 100644 --- a/sdk/include/psdk/rpc.h +++ b/sdk/include/psdk/rpc.h @@ -118,25 +118,14 @@ typedef int RPC_STATUS; #include #include - #ifndef __USE_PSEH2__ - #define RpcTryExcept __try { - #define RpcExcept(expr) } __except (expr) { - #define RpcEndExcept } - #define RpcTryFinally __try { - #define RpcFinally } __finally { - #define RpcEndFinally } - #define RpcExceptionCode() GetExceptionCode() - #define RpcAbnormalTermination() AbnormalTermination() - #else - #define RpcTryExcept _SEH2_TRY - #define RpcExcept(expr) _SEH2_EXCEPT((expr)) - #define RpcEndExcept _SEH2_END; - #define RpcTryFinally _SEH2_TRY - #define RpcFinally _SEH2_FINALLY - #define RpcEndFinally _SEH2_END; - #define RpcExceptionCode() _SEH2_GetExceptionCode() - #define RpcAbnormalTermination() (_SEH2_GetExceptionCode() != 0) - #endif + #define RpcTryExcept _SEH2_TRY + #define RpcExcept(expr) _SEH2_EXCEPT((expr)) + #define RpcEndExcept _SEH2_END; + #define RpcTryFinally _SEH2_TRY + #define RpcFinally _SEH2_FINALLY + #define RpcEndFinally _SEH2_END; + #define RpcExceptionCode() _SEH2_GetExceptionCode() + #define RpcAbnormalTermination() (_SEH2_GetExceptionCode() != 0) #endif #if defined(__RPC_WIN64__) diff --git a/sdk/include/reactos/wine/exception.h b/sdk/include/reactos/wine/exception.h index 8d0b3ea46c09b..409d1e644075b 100644 --- a/sdk/include/reactos/wine/exception.h +++ b/sdk/include/reactos/wine/exception.h @@ -55,7 +55,6 @@ typedef struct _WINE_EXCEPTION_REGISTRATION_RECORD #define PEXCEPTION_REGISTRATION_RECORD PWINE_EXCEPTION_REGISTRATION_RECORD #endif -#ifdef __USE_PSEH2__ #define __TRY _SEH2_TRY #define __EXCEPT(func) _SEH2_EXCEPT(func(_SEH2_GetExceptionInformation())) #define __EXCEPT_CTX(func, ctx) _SEH2_EXCEPT((func)(GetExceptionInformation(), ctx)) @@ -76,16 +75,6 @@ typedef struct _WINE_EXCEPTION_REGISTRATION_RECORD #ifndef AbnormalTermination #define AbnormalTermination() _SEH2_AbnormalTermination() #endif -#else -#define __TRY __try -#define __EXCEPT(func) __except(func(GetExceptionInformation())) -#define __EXCEPT_CTX(func, ctx) __except((func)(GetExceptionInformation(), ctx)) -#define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == STATUS_ACCESS_VIOLATION) -#define __EXCEPT_ALL __except(1) -#define __ENDTRY -#define __FINALLY(func) __finally { func(!AbnormalTermination()); } -#define __FINALLY_CTX(func, ctx) __finally { func(!AbnormalTermination(), ctx); } -#endif #if defined(__MINGW32__) || defined(__CYGWIN__) #define sigjmp_buf jmp_buf From 04e0dc4a7a18bb1ab69f7ae9720259786025c530 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 11 May 2024 07:03:12 +0200 Subject: [PATCH 160/750] [UCRT] Import Microsoft.Windows.SDK.CRTSource version 10.0.22621.3 Imported from https://www.nuget.org/packages/Microsoft.Windows.SDK.CRTSource/10.0.22621.3 License: MIT --- sdk/include/ucrt/assert.h | 50 + sdk/include/ucrt/complex.h | 580 ++++ sdk/include/ucrt/conio.h | 504 +++ sdk/include/ucrt/corecrt.h | 2075 ++++++++++++ sdk/include/ucrt/corecrt_io.h | 572 ++++ sdk/include/ucrt/corecrt_malloc.h | 234 ++ sdk/include/ucrt/corecrt_math.h | 998 ++++++ sdk/include/ucrt/corecrt_math_defines.h | 39 + sdk/include/ucrt/corecrt_memcpy_s.h | 93 + sdk/include/ucrt/corecrt_memory.h | 122 + sdk/include/ucrt/corecrt_search.h | 218 ++ sdk/include/ucrt/corecrt_share.h | 33 + sdk/include/ucrt/corecrt_startup.h | 199 ++ sdk/include/ucrt/corecrt_stdio_config.h | 131 + sdk/include/ucrt/corecrt_terminate.h | 51 + sdk/include/ucrt/corecrt_wconio.h | 424 +++ sdk/include/ucrt/corecrt_wctype.h | 205 ++ sdk/include/ucrt/corecrt_wdirect.h | 63 + sdk/include/ucrt/corecrt_wio.h | 270 ++ sdk/include/ucrt/corecrt_wprocess.h | 127 + sdk/include/ucrt/corecrt_wstdio.h | 2171 ++++++++++++ sdk/include/ucrt/corecrt_wstdlib.h | 481 +++ sdk/include/ucrt/corecrt_wstring.h | 641 ++++ sdk/include/ucrt/corecrt_wtime.h | 207 ++ sdk/include/ucrt/crtdbg.h | 816 +++++ sdk/include/ucrt/ctype.h | 310 ++ sdk/include/ucrt/direct.h | 131 + sdk/include/ucrt/dos.h | 61 + sdk/include/ucrt/errno.h | 137 + sdk/include/ucrt/fcntl.h | 68 + sdk/include/ucrt/fenv.h | 160 + sdk/include/ucrt/float.h | 409 +++ sdk/include/ucrt/fpieee.h | 478 +++ sdk/include/ucrt/inttypes.h | 341 ++ sdk/include/ucrt/io.h | 13 + sdk/include/ucrt/locale.h | 184 ++ sdk/include/ucrt/malloc.h | 184 ++ sdk/include/ucrt/math.h | 15 + sdk/include/ucrt/mbctype.h | 173 + sdk/include/ucrt/mbstring.h | 1235 +++++++ sdk/include/ucrt/memory.h | 13 + sdk/include/ucrt/minmax.h | 28 + sdk/include/ucrt/new.h | 68 + sdk/include/ucrt/process.h | 375 +++ sdk/include/ucrt/safeint.h | 1665 ++++++++++ sdk/include/ucrt/safeint_internal.h | 2898 +++++++++++++++++ sdk/include/ucrt/search.h | 13 + sdk/include/ucrt/share.h | 13 + sdk/include/ucrt/signal.h | 72 + sdk/include/ucrt/stdalign.h | 31 + sdk/include/ucrt/stddef.h | 64 + sdk/include/ucrt/stdio.h | 2448 ++++++++++++++ sdk/include/ucrt/stdlib.h | 1362 ++++++++ sdk/include/ucrt/stdnoreturn.h | 28 + sdk/include/ucrt/string.h | 592 ++++ sdk/include/ucrt/sys/locking.h | 31 + sdk/include/ucrt/sys/stat.h | 249 ++ sdk/include/ucrt/sys/timeb.h | 112 + sdk/include/ucrt/sys/types.h | 51 + sdk/include/ucrt/sys/utime.h | 163 + sdk/include/ucrt/tchar.h | 2330 +++++++++++++ sdk/include/ucrt/tgmath.h | 650 ++++ sdk/include/ucrt/time.h | 648 ++++ sdk/include/ucrt/uchar.h | 50 + sdk/include/ucrt/wchar.h | 286 ++ sdk/include/ucrt/wctype.h | 33 + sdk/lib/ucrt/conio/cgets.cpp | 128 + sdk/lib/ucrt/conio/cgetws.cpp | 156 + sdk/lib/ucrt/conio/cprintf.cpp | 104 + sdk/lib/ucrt/conio/cputs.cpp | 38 + sdk/lib/ucrt/conio/cputws.cpp | 63 + sdk/lib/ucrt/conio/cscanf.cpp | 56 + sdk/lib/ucrt/conio/getch.cpp | 569 ++++ sdk/lib/ucrt/conio/getwch.cpp | 201 ++ sdk/lib/ucrt/conio/initcon.cpp | 83 + sdk/lib/ucrt/conio/initconin.cpp | 162 + sdk/lib/ucrt/conio/pipe.cpp | 113 + sdk/lib/ucrt/conio/popen.cpp | 488 +++ sdk/lib/ucrt/conio/putch.cpp | 82 + sdk/lib/ucrt/conio/putwch.cpp | 39 + sdk/lib/ucrt/convert/_ctype.cpp | 254 ++ sdk/lib/ucrt/convert/_fptostr.cpp | 173 + sdk/lib/ucrt/convert/_mbslen.cpp | 119 + sdk/lib/ucrt/convert/_wctype.cpp | 171 + sdk/lib/ucrt/convert/atof.cpp | 96 + sdk/lib/ucrt/convert/atoldbl.cpp | 833 +++++ sdk/lib/ucrt/convert/atox.cpp | 107 + sdk/lib/ucrt/convert/c16rtomb.cpp | 94 + sdk/lib/ucrt/convert/c32rtomb.cpp | 93 + sdk/lib/ucrt/convert/cfout.cpp | 367 +++ sdk/lib/ucrt/convert/common_utf8.cpp | 27 + sdk/lib/ucrt/convert/cvt.cpp | 849 +++++ sdk/lib/ucrt/convert/fcvt.cpp | 296 ++ sdk/lib/ucrt/convert/fp_flags.cpp | 20 + sdk/lib/ucrt/convert/gcvt.cpp | 159 + sdk/lib/ucrt/convert/isctype.cpp | 116 + sdk/lib/ucrt/convert/ismbstr.cpp | 64 + sdk/lib/ucrt/convert/iswctype.cpp | 55 + sdk/lib/ucrt/convert/mblen.cpp | 124 + sdk/lib/ucrt/convert/mbrtoc16.cpp | 88 + sdk/lib/ucrt/convert/mbrtoc32.cpp | 148 + sdk/lib/ucrt/convert/mbrtowc.cpp | 610 ++++ sdk/lib/ucrt/convert/mbstowcs.cpp | 326 ++ sdk/lib/ucrt/convert/mbtowc.cpp | 153 + sdk/lib/ucrt/convert/strtod.cpp | 164 + sdk/lib/ucrt/convert/strtox.cpp | 400 +++ sdk/lib/ucrt/convert/swab.cpp | 34 + sdk/lib/ucrt/convert/tolower_toupper.cpp | 117 + sdk/lib/ucrt/convert/towlower.cpp | 105 + sdk/lib/ucrt/convert/towupper.cpp | 105 + sdk/lib/ucrt/convert/wcrtomb.cpp | 533 +++ sdk/lib/ucrt/convert/wcstombs.cpp | 417 +++ sdk/lib/ucrt/convert/wctomb.cpp | 217 ++ sdk/lib/ucrt/convert/wctrans.cpp | 52 + sdk/lib/ucrt/convert/wctype.cpp | 57 + sdk/lib/ucrt/convert/xtoa.cpp | 369 +++ sdk/lib/ucrt/dll/appcrt_dllmain.cpp | 121 + sdk/lib/ucrt/dll/empty.cpp | 0 .../ucrt/env/environment_initialization.cpp | 336 ++ sdk/lib/ucrt/env/get_environment_from_os.cpp | 121 + sdk/lib/ucrt/env/getenv.cpp | 329 ++ sdk/lib/ucrt/env/getpath.cpp | 159 + sdk/lib/ucrt/env/putenv.cpp | 243 ++ sdk/lib/ucrt/env/searchenv.cpp | 215 ++ sdk/lib/ucrt/env/setenv.cpp | 373 +++ sdk/lib/ucrt/exec/cenvarg.cpp | 369 +++ sdk/lib/ucrt/exec/getproc.cpp | 67 + sdk/lib/ucrt/exec/loaddll.cpp | 65 + sdk/lib/ucrt/exec/spawnl.cpp | 143 + sdk/lib/ucrt/exec/spawnlp.cpp | 140 + sdk/lib/ucrt/exec/spawnv.cpp | 451 +++ sdk/lib/ucrt/exec/spawnvp.cpp | 212 ++ sdk/lib/ucrt/exec/system.cpp | 86 + sdk/lib/ucrt/exec/wait.cpp | 87 + sdk/lib/ucrt/fenv/mapping.txt | 28 + sdk/lib/ucrt/filesystem/access.cpp | 34 + sdk/lib/ucrt/filesystem/chmod.cpp | 31 + sdk/lib/ucrt/filesystem/findfile.cpp | 395 +++ sdk/lib/ucrt/filesystem/fullpath.cpp | 153 + sdk/lib/ucrt/filesystem/makepath.cpp | 205 ++ sdk/lib/ucrt/filesystem/mkdir.cpp | 29 + sdk/lib/ucrt/filesystem/rename.cpp | 39 + sdk/lib/ucrt/filesystem/rmdir.cpp | 31 + sdk/lib/ucrt/filesystem/splitpath.cpp | 352 ++ sdk/lib/ucrt/filesystem/stat.cpp | 606 ++++ sdk/lib/ucrt/filesystem/unlink.cpp | 35 + sdk/lib/ucrt/filesystem/waccess.cpp | 55 + sdk/lib/ucrt/filesystem/wchmod.cpp | 45 + sdk/lib/ucrt/filesystem/wmkdir.cpp | 24 + sdk/lib/ucrt/filesystem/wrename.cpp | 25 + sdk/lib/ucrt/filesystem/wrmdir.cpp | 26 + sdk/lib/ucrt/filesystem/wunlink.cpp | 31 + sdk/lib/ucrt/heap/align.cpp | 638 ++++ sdk/lib/ucrt/heap/calloc.cpp | 30 + sdk/lib/ucrt/heap/calloc_base.cpp | 53 + sdk/lib/ucrt/heap/debug_heap.cpp | 1979 +++++++++++ sdk/lib/ucrt/heap/debug_heap_hook.cpp | 40 + sdk/lib/ucrt/heap/expand.cpp | 100 + sdk/lib/ucrt/heap/free.cpp | 32 + sdk/lib/ucrt/heap/free_base.cpp | 110 + sdk/lib/ucrt/heap/heap_handle.cpp | 52 + sdk/lib/ucrt/heap/heapchk.cpp | 21 + sdk/lib/ucrt/heap/heapmin.cpp | 19 + sdk/lib/ucrt/heap/heapwalk.cpp | 90 + sdk/lib/ucrt/heap/malloc.cpp | 27 + sdk/lib/ucrt/heap/malloc_base.cpp | 47 + sdk/lib/ucrt/heap/msize.cpp | 42 + sdk/lib/ucrt/heap/new_handler.cpp | 83 + sdk/lib/ucrt/heap/new_mode.cpp | 31 + sdk/lib/ucrt/heap/realloc.cpp | 41 + sdk/lib/ucrt/heap/realloc_base.cpp | 59 + sdk/lib/ucrt/heap/recalloc.cpp | 70 + sdk/lib/ucrt/inc/corecrt_internal.h | 2119 ++++++++++++ .../ucrt/inc/corecrt_internal_big_integer.h | 931 ++++++ sdk/lib/ucrt/inc/corecrt_internal_fltintrn.h | 220 ++ sdk/lib/ucrt/inc/corecrt_internal_lowio.h | 328 ++ sdk/lib/ucrt/inc/corecrt_internal_mbstring.h | 152 + .../inc/corecrt_internal_ptd_propagation.h | 569 ++++ sdk/lib/ucrt/inc/corecrt_internal_securecrt.h | 130 + sdk/lib/ucrt/inc/corecrt_internal_simd.h | 157 + sdk/lib/ucrt/inc/corecrt_internal_stdio.h | 864 +++++ .../ucrt/inc/corecrt_internal_stdio_input.h | 1613 +++++++++ .../ucrt/inc/corecrt_internal_stdio_output.h | 2809 ++++++++++++++++ .../inc/corecrt_internal_string_templates.h | 299 ++ sdk/lib/ucrt/inc/corecrt_internal_strtox.h | 2046 ++++++++++++ sdk/lib/ucrt/inc/corecrt_internal_time.h | 216 ++ sdk/lib/ucrt/inc/corecrt_internal_traits.h | 276 ++ .../ucrt/inc/corecrt_internal_win32_buffer.h | 799 +++++ sdk/lib/ucrt/inc/i386/cruntime.inc | 323 ++ sdk/lib/ucrt/inc/ksamd64.inc | 2043 ++++++++++++ sdk/lib/ucrt/inc/ksamd64_stub.inc | 1 + sdk/lib/ucrt/inc/kxamd64.inc | 1002 ++++++ sdk/lib/ucrt/inc/kxamd64_stub.inc | 1 + sdk/lib/ucrt/inc/macamd64.inc | 685 ++++ .../ucrt/initializers/clock_initializer.cpp | 17 + .../console_input_initializer.cpp | 17 + .../console_output_initializer.cpp | 17 + .../ucrt/initializers/fma3_initializer.cpp | 17 + .../ucrt/initializers/fmode_initializer.cpp | 17 + .../initializers/i386/sse2_initializer.cpp | 27 + .../ucrt/initializers/locale_initializer.cpp | 17 + .../initializers/multibyte_initializer.cpp | 20 + .../ucrt/initializers/stdio_initializer.cpp | 19 + .../ucrt/initializers/timeset_initializer.cpp | 17 + .../ucrt/initializers/tmpfile_initializer.cpp | 17 + sdk/lib/ucrt/internal/CreateProcessA.cpp | 79 + sdk/lib/ucrt/internal/GetModuleFileNameA.cpp | 40 + sdk/lib/ucrt/internal/LoadLibraryExA.cpp | 34 + sdk/lib/ucrt/internal/OutputDebugStringA.cpp | 31 + .../ucrt/internal/SetCurrentDirectoryA.cpp | 28 + .../ucrt/internal/SetEnvironmentVariableA.cpp | 40 + sdk/lib/ucrt/internal/initialization.cpp | 345 ++ sdk/lib/ucrt/internal/locks.cpp | 71 + sdk/lib/ucrt/internal/peb_access.cpp | 22 + sdk/lib/ucrt/internal/per_thread_data.cpp | 345 ++ .../ucrt/internal/report_runtime_error.cpp | 200 ++ .../ucrt/internal/shared_initialization.cpp | 67 + sdk/lib/ucrt/internal/win_policies.cpp | 182 ++ sdk/lib/ucrt/internal/winapi_thunks.cpp | 936 ++++++ sdk/lib/ucrt/locale/CompareStringA.cpp | 232 ++ sdk/lib/ucrt/locale/CompareStringW.cpp | 67 + sdk/lib/ucrt/locale/GetLocaleInfoA.cpp | 165 + sdk/lib/ucrt/locale/GetStringTypeA.cpp | 100 + sdk/lib/ucrt/locale/LCMapStringA.cpp | 235 ++ sdk/lib/ucrt/locale/LCMapStringW.cpp | 74 + sdk/lib/ucrt/locale/ctype.cpp | 745 +++++ sdk/lib/ucrt/locale/get_qualified_locale.cpp | 851 +++++ sdk/lib/ucrt/locale/getqloc_downlevel.cpp | 852 +++++ sdk/lib/ucrt/locale/glstatus.cpp | 13 + sdk/lib/ucrt/locale/initctype.cpp | 339 ++ sdk/lib/ucrt/locale/initmon.cpp | 312 ++ sdk/lib/ucrt/locale/initnum.cpp | 235 ++ sdk/lib/ucrt/locale/inittime.cpp | 177 + sdk/lib/ucrt/locale/lcidtoname_downlevel.cpp | 604 ++++ .../lconv_unsigned_char_initialization.cpp | 52 + sdk/lib/ucrt/locale/locale_refcounting.cpp | 353 ++ sdk/lib/ucrt/locale/locale_update.cpp | 55 + sdk/lib/ucrt/locale/localeconv.cpp | 86 + sdk/lib/ucrt/locale/nlsdata.cpp | 140 + sdk/lib/ucrt/locale/setlocale.cpp | 118 + sdk/lib/ucrt/locale/wsetlocale.cpp | 1430 ++++++++ sdk/lib/ucrt/lowio/chsize.cpp | 148 + sdk/lib/ucrt/lowio/close.cpp | 101 + sdk/lib/ucrt/lowio/commit.cpp | 36 + sdk/lib/ucrt/lowio/creat.cpp | 41 + sdk/lib/ucrt/lowio/dup.cpp | 95 + sdk/lib/ucrt/lowio/dup2.cpp | 120 + sdk/lib/ucrt/lowio/eof.cpp | 50 + sdk/lib/ucrt/lowio/filelength.cpp | 62 + sdk/lib/ucrt/lowio/ioinit.cpp | 265 ++ sdk/lib/ucrt/lowio/isatty.cpp | 20 + sdk/lib/ucrt/lowio/locking.cpp | 120 + sdk/lib/ucrt/lowio/lseek.cpp | 171 + sdk/lib/ucrt/lowio/mktemp.cpp | 168 + sdk/lib/ucrt/lowio/open.cpp | 907 ++++++ sdk/lib/ucrt/lowio/osfinfo.cpp | 348 ++ sdk/lib/ucrt/lowio/read.cpp | 635 ++++ sdk/lib/ucrt/lowio/setmode.cpp | 121 + sdk/lib/ucrt/lowio/tell.cpp | 18 + sdk/lib/ucrt/lowio/telli64.cpp | 18 + sdk/lib/ucrt/lowio/txtmode.cpp | 47 + sdk/lib/ucrt/lowio/umask.cpp | 66 + sdk/lib/ucrt/lowio/write.cpp | 754 +++++ sdk/lib/ucrt/mbstring/ismbalnm.cpp | 54 + sdk/lib/ucrt/mbstring/ismbalph.cpp | 54 + sdk/lib/ucrt/mbstring/ismbbyte.cpp | 233 ++ sdk/lib/ucrt/mbstring/ismbdgt.cpp | 54 + sdk/lib/ucrt/mbstring/ismbgrph.cpp | 54 + sdk/lib/ucrt/mbstring/ismbknj.cpp | 118 + sdk/lib/ucrt/mbstring/ismblgl.cpp | 49 + sdk/lib/ucrt/mbstring/ismblwr.cpp | 54 + sdk/lib/ucrt/mbstring/ismbprn.cpp | 53 + sdk/lib/ucrt/mbstring/ismbpunc.cpp | 92 + sdk/lib/ucrt/mbstring/ismbsle.cpp | 76 + sdk/lib/ucrt/mbstring/ismbspc.cpp | 53 + sdk/lib/ucrt/mbstring/ismbupr.cpp | 52 + sdk/lib/ucrt/mbstring/mbbtype.cpp | 81 + sdk/lib/ucrt/mbstring/mbccpy.cpp | 48 + sdk/lib/ucrt/mbstring/mbccpy_s.cpp | 14 + sdk/lib/ucrt/mbstring/mbccpy_s_l.cpp | 58 + sdk/lib/ucrt/mbstring/mbclen.cpp | 49 + sdk/lib/ucrt/mbstring/mbclevel.cpp | 127 + sdk/lib/ucrt/mbstring/mbctype.cpp | 1105 +++++++ sdk/lib/ucrt/mbstring/mbsbtype.cpp | 82 + sdk/lib/ucrt/mbstring/mbscat_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbscat_s_l.cpp | 122 + sdk/lib/ucrt/mbstring/mbschr.cpp | 84 + sdk/lib/ucrt/mbstring/mbscmp.cpp | 87 + sdk/lib/ucrt/mbstring/mbscoll.cpp | 81 + sdk/lib/ucrt/mbstring/mbscpy_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbscpy_s_l.cpp | 76 + sdk/lib/ucrt/mbstring/mbscspn.cpp | 143 + sdk/lib/ucrt/mbstring/mbsdec.cpp | 109 + sdk/lib/ucrt/mbstring/mbsicmp.cpp | 142 + sdk/lib/ucrt/mbstring/mbsicoll.cpp | 79 + sdk/lib/ucrt/mbstring/mbsinc.cpp | 76 + sdk/lib/ucrt/mbstring/mbslen.cpp | 61 + sdk/lib/ucrt/mbstring/mbslen_s.cpp | 84 + sdk/lib/ucrt/mbstring/mbslwr.cpp | 136 + sdk/lib/ucrt/mbstring/mbsnbcat.cpp | 116 + sdk/lib/ucrt/mbstring/mbsnbcat_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbsnbcat_s_l.cpp | 21 + sdk/lib/ucrt/mbstring/mbsnbcmp.cpp | 107 + sdk/lib/ucrt/mbstring/mbsnbcnt.cpp | 71 + sdk/lib/ucrt/mbstring/mbsnbcol.cpp | 86 + sdk/lib/ucrt/mbstring/mbsnbcpy.cpp | 103 + sdk/lib/ucrt/mbstring/mbsnbcpy_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbsnbcpy_s_l.cpp | 21 + sdk/lib/ucrt/mbstring/mbsnbicm.cpp | 133 + sdk/lib/ucrt/mbstring/mbsnbico.cpp | 82 + sdk/lib/ucrt/mbstring/mbsnbset.cpp | 136 + sdk/lib/ucrt/mbstring/mbsnbset_s.cpp | 17 + sdk/lib/ucrt/mbstring/mbsnbset_s_l.cpp | 21 + sdk/lib/ucrt/mbstring/mbsncat.cpp | 110 + sdk/lib/ucrt/mbstring/mbsncat_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbsncat_s.inl | 203 ++ sdk/lib/ucrt/mbstring/mbsncat_s_l.cpp | 21 + sdk/lib/ucrt/mbstring/mbsnccnt.cpp | 67 + sdk/lib/ucrt/mbstring/mbsncmp.cpp | 92 + sdk/lib/ucrt/mbstring/mbsncoll.cpp | 91 + sdk/lib/ucrt/mbstring/mbsncpy.cpp | 96 + sdk/lib/ucrt/mbstring/mbsncpy_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbsncpy_s.inl | 208 ++ sdk/lib/ucrt/mbstring/mbsncpy_s_l.cpp | 21 + sdk/lib/ucrt/mbstring/mbsnextc.cpp | 64 + sdk/lib/ucrt/mbstring/mbsnicmp.cpp | 115 + sdk/lib/ucrt/mbstring/mbsnicol.cpp | 93 + sdk/lib/ucrt/mbstring/mbsninc.cpp | 56 + sdk/lib/ucrt/mbstring/mbsnset.cpp | 143 + sdk/lib/ucrt/mbstring/mbsnset_s.cpp | 17 + sdk/lib/ucrt/mbstring/mbsnset_s.inl | 132 + sdk/lib/ucrt/mbstring/mbsnset_s_l.cpp | 21 + sdk/lib/ucrt/mbstring/mbspbrk.cpp | 16 + sdk/lib/ucrt/mbstring/mbsrchr.cpp | 83 + sdk/lib/ucrt/mbstring/mbsrev.cpp | 108 + sdk/lib/ucrt/mbstring/mbsset.cpp | 110 + sdk/lib/ucrt/mbstring/mbsset_s.cpp | 16 + sdk/lib/ucrt/mbstring/mbsset_s_l.cpp | 89 + sdk/lib/ucrt/mbstring/mbsspn.cpp | 130 + sdk/lib/ucrt/mbstring/mbsspnp.cpp | 16 + sdk/lib/ucrt/mbstring/mbsstr.cpp | 101 + sdk/lib/ucrt/mbstring/mbstok.cpp | 69 + sdk/lib/ucrt/mbstring/mbstok_s.cpp | 147 + sdk/lib/ucrt/mbstring/mbsupr.cpp | 133 + sdk/lib/ucrt/mbstring/mbtohira.cpp | 51 + sdk/lib/ucrt/mbstring/mbtokata.cpp | 52 + sdk/lib/ucrt/mbstring/mbtolwr.cpp | 85 + sdk/lib/ucrt/mbstring/mbtoupr.cpp | 84 + sdk/lib/ucrt/mbstring/tojisjms.cpp | 138 + sdk/lib/ucrt/mbstring/tombbmbc.cpp | 329 ++ sdk/lib/ucrt/misc/_strerr.cpp | 203 ++ sdk/lib/ucrt/misc/chdir.cpp | 109 + sdk/lib/ucrt/misc/crtmbox.cpp | 94 + sdk/lib/ucrt/misc/dbgrpt.cpp | 467 +++ sdk/lib/ucrt/misc/dbgrptt.cpp | 688 ++++ sdk/lib/ucrt/misc/debug_fill_threshold.cpp | 29 + sdk/lib/ucrt/misc/drive.cpp | 77 + sdk/lib/ucrt/misc/drivemap.cpp | 31 + sdk/lib/ucrt/misc/drivfree.cpp | 55 + sdk/lib/ucrt/misc/errno.cpp | 200 ++ sdk/lib/ucrt/misc/exception_filter.cpp | 222 ++ sdk/lib/ucrt/misc/getcwd.cpp | 265 ++ sdk/lib/ucrt/misc/getpid.cpp | 16 + sdk/lib/ucrt/misc/invalid_parameter.cpp | 309 ++ sdk/lib/ucrt/misc/is_wctype.cpp | 39 + sdk/lib/ucrt/misc/perror.cpp | 71 + sdk/lib/ucrt/misc/resetstk.cpp | 111 + sdk/lib/ucrt/misc/set_error_mode.cpp | 78 + sdk/lib/ucrt/misc/seterrm.cpp | 39 + sdk/lib/ucrt/misc/signal.cpp | 579 ++++ sdk/lib/ucrt/misc/slbeep.cpp | 60 + sdk/lib/ucrt/misc/strerror.cpp | 146 + sdk/lib/ucrt/misc/syserr.cpp | 150 + sdk/lib/ucrt/misc/systime.cpp | 63 + sdk/lib/ucrt/misc/terminate.cpp | 59 + sdk/lib/ucrt/misc/wperror.cpp | 66 + sdk/lib/ucrt/startup/abort.cpp | 114 + sdk/lib/ucrt/startup/argv_data.cpp | 75 + sdk/lib/ucrt/startup/argv_parsing.cpp | 404 +++ sdk/lib/ucrt/startup/argv_wildcards.cpp | 391 +++ sdk/lib/ucrt/startup/argv_winmain.cpp | 111 + sdk/lib/ucrt/startup/assert.cpp | 444 +++ sdk/lib/ucrt/startup/exit.cpp | 313 ++ sdk/lib/ucrt/startup/initterm.cpp | 46 + sdk/lib/ucrt/startup/onexit.cpp | 231 ++ sdk/lib/ucrt/startup/thread.cpp | 278 ++ sdk/lib/ucrt/stdio/_filbuf.cpp | 188 ++ sdk/lib/ucrt/stdio/_file.cpp | 179 + sdk/lib/ucrt/stdio/_flsbuf.cpp | 213 ++ sdk/lib/ucrt/stdio/_freebuf.cpp | 33 + sdk/lib/ucrt/stdio/_getbuf.cpp | 43 + sdk/lib/ucrt/stdio/_sftbuf.cpp | 146 + sdk/lib/ucrt/stdio/clearerr.cpp | 37 + sdk/lib/ucrt/stdio/closeall.cpp | 44 + sdk/lib/ucrt/stdio/fclose.cpp | 86 + sdk/lib/ucrt/stdio/fdopen.cpp | 70 + sdk/lib/ucrt/stdio/feoferr.cpp | 29 + sdk/lib/ucrt/stdio/fflush.cpp | 264 ++ sdk/lib/ucrt/stdio/fgetc.cpp | 81 + sdk/lib/ucrt/stdio/fgetpos.cpp | 26 + sdk/lib/ucrt/stdio/fgets.cpp | 100 + sdk/lib/ucrt/stdio/fgetwc.cpp | 136 + sdk/lib/ucrt/stdio/fileno.cpp | 19 + sdk/lib/ucrt/stdio/fopen.cpp | 139 + sdk/lib/ucrt/stdio/fputc.cpp | 97 + sdk/lib/ucrt/stdio/fputs.cpp | 42 + sdk/lib/ucrt/stdio/fputwc.cpp | 145 + sdk/lib/ucrt/stdio/fputws.cpp | 43 + sdk/lib/ucrt/stdio/fread.cpp | 254 ++ sdk/lib/ucrt/stdio/freopen.cpp | 128 + sdk/lib/ucrt/stdio/fseek.cpp | 247 ++ sdk/lib/ucrt/stdio/fsetpos.cpp | 22 + sdk/lib/ucrt/stdio/ftell.cpp | 399 +++ sdk/lib/ucrt/stdio/fwrite.cpp | 196 ++ sdk/lib/ucrt/stdio/gets.cpp | 148 + sdk/lib/ucrt/stdio/gettemppath.cpp | 39 + sdk/lib/ucrt/stdio/getw.cpp | 48 + sdk/lib/ucrt/stdio/input.cpp | 135 + sdk/lib/ucrt/stdio/ncommode.cpp | 20 + sdk/lib/ucrt/stdio/openfile.cpp | 77 + sdk/lib/ucrt/stdio/output.cpp | 445 +++ sdk/lib/ucrt/stdio/printf_count_output.cpp | 35 + sdk/lib/ucrt/stdio/puts.cpp | 45 + sdk/lib/ucrt/stdio/putw.cpp | 43 + sdk/lib/ucrt/stdio/putws.cpp | 48 + sdk/lib/ucrt/stdio/rewind.cpp | 60 + sdk/lib/ucrt/stdio/rmtmp.cpp | 75 + sdk/lib/ucrt/stdio/setbuf.cpp | 28 + sdk/lib/ucrt/stdio/setmaxf.cpp | 71 + sdk/lib/ucrt/stdio/setvbuf.cpp | 118 + sdk/lib/ucrt/stdio/stream.cpp | 106 + sdk/lib/ucrt/stdio/tempnam.cpp | 294 ++ sdk/lib/ucrt/stdio/tmpfile.cpp | 509 +++ sdk/lib/ucrt/stdio/ungetc.cpp | 92 + sdk/lib/ucrt/stdio/ungetwc.cpp | 181 + sdk/lib/ucrt/stdlib/abs.cpp | 24 + sdk/lib/ucrt/stdlib/bsearch.cpp | 126 + sdk/lib/ucrt/stdlib/bsearch_s.cpp | 13 + sdk/lib/ucrt/stdlib/byteswap.cpp | 62 + sdk/lib/ucrt/stdlib/div.cpp | 23 + sdk/lib/ucrt/stdlib/imaxabs.cpp | 22 + sdk/lib/ucrt/stdlib/imaxdiv.cpp | 40 + sdk/lib/ucrt/stdlib/labs.cpp | 25 + sdk/lib/ucrt/stdlib/ldiv.cpp | 23 + sdk/lib/ucrt/stdlib/lfind.cpp | 80 + sdk/lib/ucrt/stdlib/lfind_s.cpp | 13 + sdk/lib/ucrt/stdlib/llabs.cpp | 19 + sdk/lib/ucrt/stdlib/lldiv.cpp | 23 + sdk/lib/ucrt/stdlib/lsearch.cpp | 91 + sdk/lib/ucrt/stdlib/lsearch_s.cpp | 14 + sdk/lib/ucrt/stdlib/qsort.cpp | 396 +++ sdk/lib/ucrt/stdlib/qsort_s.cpp | 13 + sdk/lib/ucrt/stdlib/rand.cpp | 28 + sdk/lib/ucrt/stdlib/rand_s.cpp | 25 + sdk/lib/ucrt/stdlib/rotl.cpp | 45 + sdk/lib/ucrt/stdlib/rotr.cpp | 45 + sdk/lib/ucrt/string/amd64/strcat.asm | 224 ++ sdk/lib/ucrt/string/amd64/strcmp.asm | 130 + sdk/lib/ucrt/string/amd64/strcspn.c | 13 + sdk/lib/ucrt/string/amd64/strlen.asm | 130 + sdk/lib/ucrt/string/amd64/strncat.asm | 227 ++ sdk/lib/ucrt/string/amd64/strncmp.asm | 125 + sdk/lib/ucrt/string/amd64/strncpy.asm | 169 + sdk/lib/ucrt/string/amd64/strpbrk.c | 13 + sdk/lib/ucrt/string/amd64/strspn.c | 502 +++ sdk/lib/ucrt/string/arm/strlen.c | 42 + sdk/lib/ucrt/string/arm64/strlen.asm | 272 ++ sdk/lib/ucrt/string/arm64/wcslen.asm | 297 ++ sdk/lib/ucrt/string/i386/_memicmp.asm | 130 + sdk/lib/ucrt/string/i386/_strnicm.asm | 143 + sdk/lib/ucrt/string/i386/memccpy.asm | 135 + sdk/lib/ucrt/string/i386/strcat.asm | 231 ++ sdk/lib/ucrt/string/i386/strcmp.asm | 154 + sdk/lib/ucrt/string/i386/strcspn.asm | 16 + sdk/lib/ucrt/string/i386/strlen.asm | 125 + sdk/lib/ucrt/string/i386/strncat.asm | 252 ++ sdk/lib/ucrt/string/i386/strncmp.asm | 173 + sdk/lib/ucrt/string/i386/strncpy.asm | 239 ++ sdk/lib/ucrt/string/i386/strnset.asm | 89 + sdk/lib/ucrt/string/i386/strpbrk.asm | 16 + sdk/lib/ucrt/string/i386/strrev.asm | 105 + sdk/lib/ucrt/string/i386/strset.asm | 78 + sdk/lib/ucrt/string/i386/strspn.asm | 262 ++ sdk/lib/ucrt/string/memccpy.c | 48 + sdk/lib/ucrt/string/memcpy_s.cpp | 10 + sdk/lib/ucrt/string/memicmp.cpp | 120 + sdk/lib/ucrt/string/strcat.c | 80 + sdk/lib/ucrt/string/strcat_s.cpp | 21 + sdk/lib/ucrt/string/strcmp.c | 52 + sdk/lib/ucrt/string/strcoll.cpp | 78 + sdk/lib/ucrt/string/strcpy_s.cpp | 20 + sdk/lib/ucrt/string/strcspn.c | 12 + sdk/lib/ucrt/string/strdup.cpp | 61 + sdk/lib/ucrt/string/stricmp.cpp | 105 + sdk/lib/ucrt/string/stricoll.cpp | 86 + sdk/lib/ucrt/string/strlwr.cpp | 206 ++ sdk/lib/ucrt/string/strncat.c | 56 + sdk/lib/ucrt/string/strncat_s.cpp | 22 + sdk/lib/ucrt/string/strncmp.c | 101 + sdk/lib/ucrt/string/strncnt.cpp | 24 + sdk/lib/ucrt/string/strncoll.cpp | 98 + sdk/lib/ucrt/string/strncpy.c | 56 + sdk/lib/ucrt/string/strncpy_s.cpp | 22 + sdk/lib/ucrt/string/strnicmp.cpp | 129 + sdk/lib/ucrt/string/strnicol.cpp | 93 + sdk/lib/ucrt/string/strnlen.cpp | 223 ++ sdk/lib/ucrt/string/strnset.c | 46 + sdk/lib/ucrt/string/strnset_s.cpp | 23 + sdk/lib/ucrt/string/strpbrk.c | 12 + sdk/lib/ucrt/string/strrev.c | 51 + sdk/lib/ucrt/string/strset.c | 50 + sdk/lib/ucrt/string/strset_s.cpp | 21 + sdk/lib/ucrt/string/strspn.c | 170 + sdk/lib/ucrt/string/strtok.cpp | 33 + sdk/lib/ucrt/string/strtok_s.cpp | 83 + sdk/lib/ucrt/string/strupr.cpp | 206 ++ sdk/lib/ucrt/string/strxfrm.cpp | 147 + sdk/lib/ucrt/string/wcscat.cpp | 38 + sdk/lib/ucrt/string/wcscat_s.cpp | 21 + sdk/lib/ucrt/string/wcscmp.cpp | 40 + sdk/lib/ucrt/string/wcscoll.cpp | 88 + sdk/lib/ucrt/string/wcscpy.cpp | 27 + sdk/lib/ucrt/string/wcscpy_s.cpp | 18 + sdk/lib/ucrt/string/wcscspn.cpp | 36 + sdk/lib/ucrt/string/wcsdup.cpp | 60 + sdk/lib/ucrt/string/wcsicmp.cpp | 112 + sdk/lib/ucrt/string/wcsicoll.cpp | 93 + sdk/lib/ucrt/string/wcslwr.cpp | 192 ++ sdk/lib/ucrt/string/wcsncat.cpp | 39 + sdk/lib/ucrt/string/wcsncat_s.cpp | 20 + sdk/lib/ucrt/string/wcsncmp.cpp | 44 + sdk/lib/ucrt/string/wcsncnt.cpp | 24 + sdk/lib/ucrt/string/wcsncoll.cpp | 104 + sdk/lib/ucrt/string/wcsncpy.cpp | 45 + sdk/lib/ucrt/string/wcsncpy_s.cpp | 20 + sdk/lib/ucrt/string/wcsnicmp.cpp | 132 + sdk/lib/ucrt/string/wcsnicol.cpp | 103 + sdk/lib/ucrt/string/wcsnset.cpp | 26 + sdk/lib/ucrt/string/wcsnset_s.cpp | 21 + sdk/lib/ucrt/string/wcspbrk.cpp | 30 + sdk/lib/ucrt/string/wcsrev.cpp | 30 + sdk/lib/ucrt/string/wcsset.cpp | 29 + sdk/lib/ucrt/string/wcsset_s.cpp | 19 + sdk/lib/ucrt/string/wcsspn.cpp | 36 + sdk/lib/ucrt/string/wcstok.cpp | 34 + sdk/lib/ucrt/string/wcstok_s.cpp | 83 + sdk/lib/ucrt/string/wcsupr.cpp | 189 ++ sdk/lib/ucrt/string/wcsxfrm.cpp | 135 + sdk/lib/ucrt/string/wmemcpy_s.cpp | 45 + sdk/lib/ucrt/string/wmemmove_s.cpp | 35 + sdk/lib/ucrt/time/asctime.cpp | 197 ++ sdk/lib/ucrt/time/clock.cpp | 95 + sdk/lib/ucrt/time/ctime.cpp | 124 + sdk/lib/ucrt/time/days.cpp | 26 + sdk/lib/ucrt/time/difftime.cpp | 32 + sdk/lib/ucrt/time/ftime.cpp | 105 + sdk/lib/ucrt/time/gmtime.cpp | 204 ++ sdk/lib/ucrt/time/localtime.cpp | 211 ++ sdk/lib/ucrt/time/loctotime.cpp | 117 + sdk/lib/ucrt/time/mktime.cpp | 201 ++ sdk/lib/ucrt/time/strdate.cpp | 84 + sdk/lib/ucrt/time/strftime.cpp | 199 ++ sdk/lib/ucrt/time/strtime.cpp | 88 + sdk/lib/ucrt/time/time.cpp | 102 + sdk/lib/ucrt/time/timeset.cpp | 188 ++ sdk/lib/ucrt/time/tzset.cpp | 712 ++++ sdk/lib/ucrt/time/utime.cpp | 157 + sdk/lib/ucrt/time/wcsftime.cpp | 1207 +++++++ 568 files changed, 115483 insertions(+) create mode 100644 sdk/include/ucrt/assert.h create mode 100644 sdk/include/ucrt/complex.h create mode 100644 sdk/include/ucrt/conio.h create mode 100644 sdk/include/ucrt/corecrt.h create mode 100644 sdk/include/ucrt/corecrt_io.h create mode 100644 sdk/include/ucrt/corecrt_malloc.h create mode 100644 sdk/include/ucrt/corecrt_math.h create mode 100644 sdk/include/ucrt/corecrt_math_defines.h create mode 100644 sdk/include/ucrt/corecrt_memcpy_s.h create mode 100644 sdk/include/ucrt/corecrt_memory.h create mode 100644 sdk/include/ucrt/corecrt_search.h create mode 100644 sdk/include/ucrt/corecrt_share.h create mode 100644 sdk/include/ucrt/corecrt_startup.h create mode 100644 sdk/include/ucrt/corecrt_stdio_config.h create mode 100644 sdk/include/ucrt/corecrt_terminate.h create mode 100644 sdk/include/ucrt/corecrt_wconio.h create mode 100644 sdk/include/ucrt/corecrt_wctype.h create mode 100644 sdk/include/ucrt/corecrt_wdirect.h create mode 100644 sdk/include/ucrt/corecrt_wio.h create mode 100644 sdk/include/ucrt/corecrt_wprocess.h create mode 100644 sdk/include/ucrt/corecrt_wstdio.h create mode 100644 sdk/include/ucrt/corecrt_wstdlib.h create mode 100644 sdk/include/ucrt/corecrt_wstring.h create mode 100644 sdk/include/ucrt/corecrt_wtime.h create mode 100644 sdk/include/ucrt/crtdbg.h create mode 100644 sdk/include/ucrt/ctype.h create mode 100644 sdk/include/ucrt/direct.h create mode 100644 sdk/include/ucrt/dos.h create mode 100644 sdk/include/ucrt/errno.h create mode 100644 sdk/include/ucrt/fcntl.h create mode 100644 sdk/include/ucrt/fenv.h create mode 100644 sdk/include/ucrt/float.h create mode 100644 sdk/include/ucrt/fpieee.h create mode 100644 sdk/include/ucrt/inttypes.h create mode 100644 sdk/include/ucrt/io.h create mode 100644 sdk/include/ucrt/locale.h create mode 100644 sdk/include/ucrt/malloc.h create mode 100644 sdk/include/ucrt/math.h create mode 100644 sdk/include/ucrt/mbctype.h create mode 100644 sdk/include/ucrt/mbstring.h create mode 100644 sdk/include/ucrt/memory.h create mode 100644 sdk/include/ucrt/minmax.h create mode 100644 sdk/include/ucrt/new.h create mode 100644 sdk/include/ucrt/process.h create mode 100644 sdk/include/ucrt/safeint.h create mode 100644 sdk/include/ucrt/safeint_internal.h create mode 100644 sdk/include/ucrt/search.h create mode 100644 sdk/include/ucrt/share.h create mode 100644 sdk/include/ucrt/signal.h create mode 100644 sdk/include/ucrt/stdalign.h create mode 100644 sdk/include/ucrt/stddef.h create mode 100644 sdk/include/ucrt/stdio.h create mode 100644 sdk/include/ucrt/stdlib.h create mode 100644 sdk/include/ucrt/stdnoreturn.h create mode 100644 sdk/include/ucrt/string.h create mode 100644 sdk/include/ucrt/sys/locking.h create mode 100644 sdk/include/ucrt/sys/stat.h create mode 100644 sdk/include/ucrt/sys/timeb.h create mode 100644 sdk/include/ucrt/sys/types.h create mode 100644 sdk/include/ucrt/sys/utime.h create mode 100644 sdk/include/ucrt/tchar.h create mode 100644 sdk/include/ucrt/tgmath.h create mode 100644 sdk/include/ucrt/time.h create mode 100644 sdk/include/ucrt/uchar.h create mode 100644 sdk/include/ucrt/wchar.h create mode 100644 sdk/include/ucrt/wctype.h create mode 100644 sdk/lib/ucrt/conio/cgets.cpp create mode 100644 sdk/lib/ucrt/conio/cgetws.cpp create mode 100644 sdk/lib/ucrt/conio/cprintf.cpp create mode 100644 sdk/lib/ucrt/conio/cputs.cpp create mode 100644 sdk/lib/ucrt/conio/cputws.cpp create mode 100644 sdk/lib/ucrt/conio/cscanf.cpp create mode 100644 sdk/lib/ucrt/conio/getch.cpp create mode 100644 sdk/lib/ucrt/conio/getwch.cpp create mode 100644 sdk/lib/ucrt/conio/initcon.cpp create mode 100644 sdk/lib/ucrt/conio/initconin.cpp create mode 100644 sdk/lib/ucrt/conio/pipe.cpp create mode 100644 sdk/lib/ucrt/conio/popen.cpp create mode 100644 sdk/lib/ucrt/conio/putch.cpp create mode 100644 sdk/lib/ucrt/conio/putwch.cpp create mode 100644 sdk/lib/ucrt/convert/_ctype.cpp create mode 100644 sdk/lib/ucrt/convert/_fptostr.cpp create mode 100644 sdk/lib/ucrt/convert/_mbslen.cpp create mode 100644 sdk/lib/ucrt/convert/_wctype.cpp create mode 100644 sdk/lib/ucrt/convert/atof.cpp create mode 100644 sdk/lib/ucrt/convert/atoldbl.cpp create mode 100644 sdk/lib/ucrt/convert/atox.cpp create mode 100644 sdk/lib/ucrt/convert/c16rtomb.cpp create mode 100644 sdk/lib/ucrt/convert/c32rtomb.cpp create mode 100644 sdk/lib/ucrt/convert/cfout.cpp create mode 100644 sdk/lib/ucrt/convert/common_utf8.cpp create mode 100644 sdk/lib/ucrt/convert/cvt.cpp create mode 100644 sdk/lib/ucrt/convert/fcvt.cpp create mode 100644 sdk/lib/ucrt/convert/fp_flags.cpp create mode 100644 sdk/lib/ucrt/convert/gcvt.cpp create mode 100644 sdk/lib/ucrt/convert/isctype.cpp create mode 100644 sdk/lib/ucrt/convert/ismbstr.cpp create mode 100644 sdk/lib/ucrt/convert/iswctype.cpp create mode 100644 sdk/lib/ucrt/convert/mblen.cpp create mode 100644 sdk/lib/ucrt/convert/mbrtoc16.cpp create mode 100644 sdk/lib/ucrt/convert/mbrtoc32.cpp create mode 100644 sdk/lib/ucrt/convert/mbrtowc.cpp create mode 100644 sdk/lib/ucrt/convert/mbstowcs.cpp create mode 100644 sdk/lib/ucrt/convert/mbtowc.cpp create mode 100644 sdk/lib/ucrt/convert/strtod.cpp create mode 100644 sdk/lib/ucrt/convert/strtox.cpp create mode 100644 sdk/lib/ucrt/convert/swab.cpp create mode 100644 sdk/lib/ucrt/convert/tolower_toupper.cpp create mode 100644 sdk/lib/ucrt/convert/towlower.cpp create mode 100644 sdk/lib/ucrt/convert/towupper.cpp create mode 100644 sdk/lib/ucrt/convert/wcrtomb.cpp create mode 100644 sdk/lib/ucrt/convert/wcstombs.cpp create mode 100644 sdk/lib/ucrt/convert/wctomb.cpp create mode 100644 sdk/lib/ucrt/convert/wctrans.cpp create mode 100644 sdk/lib/ucrt/convert/wctype.cpp create mode 100644 sdk/lib/ucrt/convert/xtoa.cpp create mode 100644 sdk/lib/ucrt/dll/appcrt_dllmain.cpp create mode 100644 sdk/lib/ucrt/dll/empty.cpp create mode 100644 sdk/lib/ucrt/env/environment_initialization.cpp create mode 100644 sdk/lib/ucrt/env/get_environment_from_os.cpp create mode 100644 sdk/lib/ucrt/env/getenv.cpp create mode 100644 sdk/lib/ucrt/env/getpath.cpp create mode 100644 sdk/lib/ucrt/env/putenv.cpp create mode 100644 sdk/lib/ucrt/env/searchenv.cpp create mode 100644 sdk/lib/ucrt/env/setenv.cpp create mode 100644 sdk/lib/ucrt/exec/cenvarg.cpp create mode 100644 sdk/lib/ucrt/exec/getproc.cpp create mode 100644 sdk/lib/ucrt/exec/loaddll.cpp create mode 100644 sdk/lib/ucrt/exec/spawnl.cpp create mode 100644 sdk/lib/ucrt/exec/spawnlp.cpp create mode 100644 sdk/lib/ucrt/exec/spawnv.cpp create mode 100644 sdk/lib/ucrt/exec/spawnvp.cpp create mode 100644 sdk/lib/ucrt/exec/system.cpp create mode 100644 sdk/lib/ucrt/exec/wait.cpp create mode 100644 sdk/lib/ucrt/fenv/mapping.txt create mode 100644 sdk/lib/ucrt/filesystem/access.cpp create mode 100644 sdk/lib/ucrt/filesystem/chmod.cpp create mode 100644 sdk/lib/ucrt/filesystem/findfile.cpp create mode 100644 sdk/lib/ucrt/filesystem/fullpath.cpp create mode 100644 sdk/lib/ucrt/filesystem/makepath.cpp create mode 100644 sdk/lib/ucrt/filesystem/mkdir.cpp create mode 100644 sdk/lib/ucrt/filesystem/rename.cpp create mode 100644 sdk/lib/ucrt/filesystem/rmdir.cpp create mode 100644 sdk/lib/ucrt/filesystem/splitpath.cpp create mode 100644 sdk/lib/ucrt/filesystem/stat.cpp create mode 100644 sdk/lib/ucrt/filesystem/unlink.cpp create mode 100644 sdk/lib/ucrt/filesystem/waccess.cpp create mode 100644 sdk/lib/ucrt/filesystem/wchmod.cpp create mode 100644 sdk/lib/ucrt/filesystem/wmkdir.cpp create mode 100644 sdk/lib/ucrt/filesystem/wrename.cpp create mode 100644 sdk/lib/ucrt/filesystem/wrmdir.cpp create mode 100644 sdk/lib/ucrt/filesystem/wunlink.cpp create mode 100644 sdk/lib/ucrt/heap/align.cpp create mode 100644 sdk/lib/ucrt/heap/calloc.cpp create mode 100644 sdk/lib/ucrt/heap/calloc_base.cpp create mode 100644 sdk/lib/ucrt/heap/debug_heap.cpp create mode 100644 sdk/lib/ucrt/heap/debug_heap_hook.cpp create mode 100644 sdk/lib/ucrt/heap/expand.cpp create mode 100644 sdk/lib/ucrt/heap/free.cpp create mode 100644 sdk/lib/ucrt/heap/free_base.cpp create mode 100644 sdk/lib/ucrt/heap/heap_handle.cpp create mode 100644 sdk/lib/ucrt/heap/heapchk.cpp create mode 100644 sdk/lib/ucrt/heap/heapmin.cpp create mode 100644 sdk/lib/ucrt/heap/heapwalk.cpp create mode 100644 sdk/lib/ucrt/heap/malloc.cpp create mode 100644 sdk/lib/ucrt/heap/malloc_base.cpp create mode 100644 sdk/lib/ucrt/heap/msize.cpp create mode 100644 sdk/lib/ucrt/heap/new_handler.cpp create mode 100644 sdk/lib/ucrt/heap/new_mode.cpp create mode 100644 sdk/lib/ucrt/heap/realloc.cpp create mode 100644 sdk/lib/ucrt/heap/realloc_base.cpp create mode 100644 sdk/lib/ucrt/heap/recalloc.cpp create mode 100644 sdk/lib/ucrt/inc/corecrt_internal.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_big_integer.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_fltintrn.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_lowio.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_mbstring.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_ptd_propagation.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_securecrt.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_simd.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_stdio.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_stdio_input.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_stdio_output.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_string_templates.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_strtox.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_time.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_traits.h create mode 100644 sdk/lib/ucrt/inc/corecrt_internal_win32_buffer.h create mode 100644 sdk/lib/ucrt/inc/i386/cruntime.inc create mode 100644 sdk/lib/ucrt/inc/ksamd64.inc create mode 100644 sdk/lib/ucrt/inc/ksamd64_stub.inc create mode 100644 sdk/lib/ucrt/inc/kxamd64.inc create mode 100644 sdk/lib/ucrt/inc/kxamd64_stub.inc create mode 100644 sdk/lib/ucrt/inc/macamd64.inc create mode 100644 sdk/lib/ucrt/initializers/clock_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/console_input_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/console_output_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/fma3_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/fmode_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/i386/sse2_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/locale_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/multibyte_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/stdio_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/timeset_initializer.cpp create mode 100644 sdk/lib/ucrt/initializers/tmpfile_initializer.cpp create mode 100644 sdk/lib/ucrt/internal/CreateProcessA.cpp create mode 100644 sdk/lib/ucrt/internal/GetModuleFileNameA.cpp create mode 100644 sdk/lib/ucrt/internal/LoadLibraryExA.cpp create mode 100644 sdk/lib/ucrt/internal/OutputDebugStringA.cpp create mode 100644 sdk/lib/ucrt/internal/SetCurrentDirectoryA.cpp create mode 100644 sdk/lib/ucrt/internal/SetEnvironmentVariableA.cpp create mode 100644 sdk/lib/ucrt/internal/initialization.cpp create mode 100644 sdk/lib/ucrt/internal/locks.cpp create mode 100644 sdk/lib/ucrt/internal/peb_access.cpp create mode 100644 sdk/lib/ucrt/internal/per_thread_data.cpp create mode 100644 sdk/lib/ucrt/internal/report_runtime_error.cpp create mode 100644 sdk/lib/ucrt/internal/shared_initialization.cpp create mode 100644 sdk/lib/ucrt/internal/win_policies.cpp create mode 100644 sdk/lib/ucrt/internal/winapi_thunks.cpp create mode 100644 sdk/lib/ucrt/locale/CompareStringA.cpp create mode 100644 sdk/lib/ucrt/locale/CompareStringW.cpp create mode 100644 sdk/lib/ucrt/locale/GetLocaleInfoA.cpp create mode 100644 sdk/lib/ucrt/locale/GetStringTypeA.cpp create mode 100644 sdk/lib/ucrt/locale/LCMapStringA.cpp create mode 100644 sdk/lib/ucrt/locale/LCMapStringW.cpp create mode 100644 sdk/lib/ucrt/locale/ctype.cpp create mode 100644 sdk/lib/ucrt/locale/get_qualified_locale.cpp create mode 100644 sdk/lib/ucrt/locale/getqloc_downlevel.cpp create mode 100644 sdk/lib/ucrt/locale/glstatus.cpp create mode 100644 sdk/lib/ucrt/locale/initctype.cpp create mode 100644 sdk/lib/ucrt/locale/initmon.cpp create mode 100644 sdk/lib/ucrt/locale/initnum.cpp create mode 100644 sdk/lib/ucrt/locale/inittime.cpp create mode 100644 sdk/lib/ucrt/locale/lcidtoname_downlevel.cpp create mode 100644 sdk/lib/ucrt/locale/lconv_unsigned_char_initialization.cpp create mode 100644 sdk/lib/ucrt/locale/locale_refcounting.cpp create mode 100644 sdk/lib/ucrt/locale/locale_update.cpp create mode 100644 sdk/lib/ucrt/locale/localeconv.cpp create mode 100644 sdk/lib/ucrt/locale/nlsdata.cpp create mode 100644 sdk/lib/ucrt/locale/setlocale.cpp create mode 100644 sdk/lib/ucrt/locale/wsetlocale.cpp create mode 100644 sdk/lib/ucrt/lowio/chsize.cpp create mode 100644 sdk/lib/ucrt/lowio/close.cpp create mode 100644 sdk/lib/ucrt/lowio/commit.cpp create mode 100644 sdk/lib/ucrt/lowio/creat.cpp create mode 100644 sdk/lib/ucrt/lowio/dup.cpp create mode 100644 sdk/lib/ucrt/lowio/dup2.cpp create mode 100644 sdk/lib/ucrt/lowio/eof.cpp create mode 100644 sdk/lib/ucrt/lowio/filelength.cpp create mode 100644 sdk/lib/ucrt/lowio/ioinit.cpp create mode 100644 sdk/lib/ucrt/lowio/isatty.cpp create mode 100644 sdk/lib/ucrt/lowio/locking.cpp create mode 100644 sdk/lib/ucrt/lowio/lseek.cpp create mode 100644 sdk/lib/ucrt/lowio/mktemp.cpp create mode 100644 sdk/lib/ucrt/lowio/open.cpp create mode 100644 sdk/lib/ucrt/lowio/osfinfo.cpp create mode 100644 sdk/lib/ucrt/lowio/read.cpp create mode 100644 sdk/lib/ucrt/lowio/setmode.cpp create mode 100644 sdk/lib/ucrt/lowio/tell.cpp create mode 100644 sdk/lib/ucrt/lowio/telli64.cpp create mode 100644 sdk/lib/ucrt/lowio/txtmode.cpp create mode 100644 sdk/lib/ucrt/lowio/umask.cpp create mode 100644 sdk/lib/ucrt/lowio/write.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbalnm.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbalph.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbbyte.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbdgt.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbgrph.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbknj.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismblgl.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismblwr.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbprn.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbpunc.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbsle.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbspc.cpp create mode 100644 sdk/lib/ucrt/mbstring/ismbupr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbbtype.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbccpy.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbccpy_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbccpy_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbclen.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbclevel.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbctype.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsbtype.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscat_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscat_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbschr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscmp.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscoll.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscpy_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscpy_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbscspn.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsdec.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsicmp.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsicoll.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsinc.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbslen.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbslen_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbslwr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcat.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcat_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcat_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcmp.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcnt.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcol.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcpy.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcpy_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbcpy_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbicm.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbico.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbset.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbset_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnbset_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncat.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncat_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncat_s.inl create mode 100644 sdk/lib/ucrt/mbstring/mbsncat_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnccnt.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncmp.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncoll.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncpy.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncpy_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsncpy_s.inl create mode 100644 sdk/lib/ucrt/mbstring/mbsncpy_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnextc.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnicmp.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnicol.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsninc.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnset.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnset_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsnset_s.inl create mode 100644 sdk/lib/ucrt/mbstring/mbsnset_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbspbrk.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsrchr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsrev.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsset.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsset_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsset_s_l.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsspn.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsspnp.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsstr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbstok.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbstok_s.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbsupr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbtohira.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbtokata.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbtolwr.cpp create mode 100644 sdk/lib/ucrt/mbstring/mbtoupr.cpp create mode 100644 sdk/lib/ucrt/mbstring/tojisjms.cpp create mode 100644 sdk/lib/ucrt/mbstring/tombbmbc.cpp create mode 100644 sdk/lib/ucrt/misc/_strerr.cpp create mode 100644 sdk/lib/ucrt/misc/chdir.cpp create mode 100644 sdk/lib/ucrt/misc/crtmbox.cpp create mode 100644 sdk/lib/ucrt/misc/dbgrpt.cpp create mode 100644 sdk/lib/ucrt/misc/dbgrptt.cpp create mode 100644 sdk/lib/ucrt/misc/debug_fill_threshold.cpp create mode 100644 sdk/lib/ucrt/misc/drive.cpp create mode 100644 sdk/lib/ucrt/misc/drivemap.cpp create mode 100644 sdk/lib/ucrt/misc/drivfree.cpp create mode 100644 sdk/lib/ucrt/misc/errno.cpp create mode 100644 sdk/lib/ucrt/misc/exception_filter.cpp create mode 100644 sdk/lib/ucrt/misc/getcwd.cpp create mode 100644 sdk/lib/ucrt/misc/getpid.cpp create mode 100644 sdk/lib/ucrt/misc/invalid_parameter.cpp create mode 100644 sdk/lib/ucrt/misc/is_wctype.cpp create mode 100644 sdk/lib/ucrt/misc/perror.cpp create mode 100644 sdk/lib/ucrt/misc/resetstk.cpp create mode 100644 sdk/lib/ucrt/misc/set_error_mode.cpp create mode 100644 sdk/lib/ucrt/misc/seterrm.cpp create mode 100644 sdk/lib/ucrt/misc/signal.cpp create mode 100644 sdk/lib/ucrt/misc/slbeep.cpp create mode 100644 sdk/lib/ucrt/misc/strerror.cpp create mode 100644 sdk/lib/ucrt/misc/syserr.cpp create mode 100644 sdk/lib/ucrt/misc/systime.cpp create mode 100644 sdk/lib/ucrt/misc/terminate.cpp create mode 100644 sdk/lib/ucrt/misc/wperror.cpp create mode 100644 sdk/lib/ucrt/startup/abort.cpp create mode 100644 sdk/lib/ucrt/startup/argv_data.cpp create mode 100644 sdk/lib/ucrt/startup/argv_parsing.cpp create mode 100644 sdk/lib/ucrt/startup/argv_wildcards.cpp create mode 100644 sdk/lib/ucrt/startup/argv_winmain.cpp create mode 100644 sdk/lib/ucrt/startup/assert.cpp create mode 100644 sdk/lib/ucrt/startup/exit.cpp create mode 100644 sdk/lib/ucrt/startup/initterm.cpp create mode 100644 sdk/lib/ucrt/startup/onexit.cpp create mode 100644 sdk/lib/ucrt/startup/thread.cpp create mode 100644 sdk/lib/ucrt/stdio/_filbuf.cpp create mode 100644 sdk/lib/ucrt/stdio/_file.cpp create mode 100644 sdk/lib/ucrt/stdio/_flsbuf.cpp create mode 100644 sdk/lib/ucrt/stdio/_freebuf.cpp create mode 100644 sdk/lib/ucrt/stdio/_getbuf.cpp create mode 100644 sdk/lib/ucrt/stdio/_sftbuf.cpp create mode 100644 sdk/lib/ucrt/stdio/clearerr.cpp create mode 100644 sdk/lib/ucrt/stdio/closeall.cpp create mode 100644 sdk/lib/ucrt/stdio/fclose.cpp create mode 100644 sdk/lib/ucrt/stdio/fdopen.cpp create mode 100644 sdk/lib/ucrt/stdio/feoferr.cpp create mode 100644 sdk/lib/ucrt/stdio/fflush.cpp create mode 100644 sdk/lib/ucrt/stdio/fgetc.cpp create mode 100644 sdk/lib/ucrt/stdio/fgetpos.cpp create mode 100644 sdk/lib/ucrt/stdio/fgets.cpp create mode 100644 sdk/lib/ucrt/stdio/fgetwc.cpp create mode 100644 sdk/lib/ucrt/stdio/fileno.cpp create mode 100644 sdk/lib/ucrt/stdio/fopen.cpp create mode 100644 sdk/lib/ucrt/stdio/fputc.cpp create mode 100644 sdk/lib/ucrt/stdio/fputs.cpp create mode 100644 sdk/lib/ucrt/stdio/fputwc.cpp create mode 100644 sdk/lib/ucrt/stdio/fputws.cpp create mode 100644 sdk/lib/ucrt/stdio/fread.cpp create mode 100644 sdk/lib/ucrt/stdio/freopen.cpp create mode 100644 sdk/lib/ucrt/stdio/fseek.cpp create mode 100644 sdk/lib/ucrt/stdio/fsetpos.cpp create mode 100644 sdk/lib/ucrt/stdio/ftell.cpp create mode 100644 sdk/lib/ucrt/stdio/fwrite.cpp create mode 100644 sdk/lib/ucrt/stdio/gets.cpp create mode 100644 sdk/lib/ucrt/stdio/gettemppath.cpp create mode 100644 sdk/lib/ucrt/stdio/getw.cpp create mode 100644 sdk/lib/ucrt/stdio/input.cpp create mode 100644 sdk/lib/ucrt/stdio/ncommode.cpp create mode 100644 sdk/lib/ucrt/stdio/openfile.cpp create mode 100644 sdk/lib/ucrt/stdio/output.cpp create mode 100644 sdk/lib/ucrt/stdio/printf_count_output.cpp create mode 100644 sdk/lib/ucrt/stdio/puts.cpp create mode 100644 sdk/lib/ucrt/stdio/putw.cpp create mode 100644 sdk/lib/ucrt/stdio/putws.cpp create mode 100644 sdk/lib/ucrt/stdio/rewind.cpp create mode 100644 sdk/lib/ucrt/stdio/rmtmp.cpp create mode 100644 sdk/lib/ucrt/stdio/setbuf.cpp create mode 100644 sdk/lib/ucrt/stdio/setmaxf.cpp create mode 100644 sdk/lib/ucrt/stdio/setvbuf.cpp create mode 100644 sdk/lib/ucrt/stdio/stream.cpp create mode 100644 sdk/lib/ucrt/stdio/tempnam.cpp create mode 100644 sdk/lib/ucrt/stdio/tmpfile.cpp create mode 100644 sdk/lib/ucrt/stdio/ungetc.cpp create mode 100644 sdk/lib/ucrt/stdio/ungetwc.cpp create mode 100644 sdk/lib/ucrt/stdlib/abs.cpp create mode 100644 sdk/lib/ucrt/stdlib/bsearch.cpp create mode 100644 sdk/lib/ucrt/stdlib/bsearch_s.cpp create mode 100644 sdk/lib/ucrt/stdlib/byteswap.cpp create mode 100644 sdk/lib/ucrt/stdlib/div.cpp create mode 100644 sdk/lib/ucrt/stdlib/imaxabs.cpp create mode 100644 sdk/lib/ucrt/stdlib/imaxdiv.cpp create mode 100644 sdk/lib/ucrt/stdlib/labs.cpp create mode 100644 sdk/lib/ucrt/stdlib/ldiv.cpp create mode 100644 sdk/lib/ucrt/stdlib/lfind.cpp create mode 100644 sdk/lib/ucrt/stdlib/lfind_s.cpp create mode 100644 sdk/lib/ucrt/stdlib/llabs.cpp create mode 100644 sdk/lib/ucrt/stdlib/lldiv.cpp create mode 100644 sdk/lib/ucrt/stdlib/lsearch.cpp create mode 100644 sdk/lib/ucrt/stdlib/lsearch_s.cpp create mode 100644 sdk/lib/ucrt/stdlib/qsort.cpp create mode 100644 sdk/lib/ucrt/stdlib/qsort_s.cpp create mode 100644 sdk/lib/ucrt/stdlib/rand.cpp create mode 100644 sdk/lib/ucrt/stdlib/rand_s.cpp create mode 100644 sdk/lib/ucrt/stdlib/rotl.cpp create mode 100644 sdk/lib/ucrt/stdlib/rotr.cpp create mode 100644 sdk/lib/ucrt/string/amd64/strcat.asm create mode 100644 sdk/lib/ucrt/string/amd64/strcmp.asm create mode 100644 sdk/lib/ucrt/string/amd64/strcspn.c create mode 100644 sdk/lib/ucrt/string/amd64/strlen.asm create mode 100644 sdk/lib/ucrt/string/amd64/strncat.asm create mode 100644 sdk/lib/ucrt/string/amd64/strncmp.asm create mode 100644 sdk/lib/ucrt/string/amd64/strncpy.asm create mode 100644 sdk/lib/ucrt/string/amd64/strpbrk.c create mode 100644 sdk/lib/ucrt/string/amd64/strspn.c create mode 100644 sdk/lib/ucrt/string/arm/strlen.c create mode 100644 sdk/lib/ucrt/string/arm64/strlen.asm create mode 100644 sdk/lib/ucrt/string/arm64/wcslen.asm create mode 100644 sdk/lib/ucrt/string/i386/_memicmp.asm create mode 100644 sdk/lib/ucrt/string/i386/_strnicm.asm create mode 100644 sdk/lib/ucrt/string/i386/memccpy.asm create mode 100644 sdk/lib/ucrt/string/i386/strcat.asm create mode 100644 sdk/lib/ucrt/string/i386/strcmp.asm create mode 100644 sdk/lib/ucrt/string/i386/strcspn.asm create mode 100644 sdk/lib/ucrt/string/i386/strlen.asm create mode 100644 sdk/lib/ucrt/string/i386/strncat.asm create mode 100644 sdk/lib/ucrt/string/i386/strncmp.asm create mode 100644 sdk/lib/ucrt/string/i386/strncpy.asm create mode 100644 sdk/lib/ucrt/string/i386/strnset.asm create mode 100644 sdk/lib/ucrt/string/i386/strpbrk.asm create mode 100644 sdk/lib/ucrt/string/i386/strrev.asm create mode 100644 sdk/lib/ucrt/string/i386/strset.asm create mode 100644 sdk/lib/ucrt/string/i386/strspn.asm create mode 100644 sdk/lib/ucrt/string/memccpy.c create mode 100644 sdk/lib/ucrt/string/memcpy_s.cpp create mode 100644 sdk/lib/ucrt/string/memicmp.cpp create mode 100644 sdk/lib/ucrt/string/strcat.c create mode 100644 sdk/lib/ucrt/string/strcat_s.cpp create mode 100644 sdk/lib/ucrt/string/strcmp.c create mode 100644 sdk/lib/ucrt/string/strcoll.cpp create mode 100644 sdk/lib/ucrt/string/strcpy_s.cpp create mode 100644 sdk/lib/ucrt/string/strcspn.c create mode 100644 sdk/lib/ucrt/string/strdup.cpp create mode 100644 sdk/lib/ucrt/string/stricmp.cpp create mode 100644 sdk/lib/ucrt/string/stricoll.cpp create mode 100644 sdk/lib/ucrt/string/strlwr.cpp create mode 100644 sdk/lib/ucrt/string/strncat.c create mode 100644 sdk/lib/ucrt/string/strncat_s.cpp create mode 100644 sdk/lib/ucrt/string/strncmp.c create mode 100644 sdk/lib/ucrt/string/strncnt.cpp create mode 100644 sdk/lib/ucrt/string/strncoll.cpp create mode 100644 sdk/lib/ucrt/string/strncpy.c create mode 100644 sdk/lib/ucrt/string/strncpy_s.cpp create mode 100644 sdk/lib/ucrt/string/strnicmp.cpp create mode 100644 sdk/lib/ucrt/string/strnicol.cpp create mode 100644 sdk/lib/ucrt/string/strnlen.cpp create mode 100644 sdk/lib/ucrt/string/strnset.c create mode 100644 sdk/lib/ucrt/string/strnset_s.cpp create mode 100644 sdk/lib/ucrt/string/strpbrk.c create mode 100644 sdk/lib/ucrt/string/strrev.c create mode 100644 sdk/lib/ucrt/string/strset.c create mode 100644 sdk/lib/ucrt/string/strset_s.cpp create mode 100644 sdk/lib/ucrt/string/strspn.c create mode 100644 sdk/lib/ucrt/string/strtok.cpp create mode 100644 sdk/lib/ucrt/string/strtok_s.cpp create mode 100644 sdk/lib/ucrt/string/strupr.cpp create mode 100644 sdk/lib/ucrt/string/strxfrm.cpp create mode 100644 sdk/lib/ucrt/string/wcscat.cpp create mode 100644 sdk/lib/ucrt/string/wcscat_s.cpp create mode 100644 sdk/lib/ucrt/string/wcscmp.cpp create mode 100644 sdk/lib/ucrt/string/wcscoll.cpp create mode 100644 sdk/lib/ucrt/string/wcscpy.cpp create mode 100644 sdk/lib/ucrt/string/wcscpy_s.cpp create mode 100644 sdk/lib/ucrt/string/wcscspn.cpp create mode 100644 sdk/lib/ucrt/string/wcsdup.cpp create mode 100644 sdk/lib/ucrt/string/wcsicmp.cpp create mode 100644 sdk/lib/ucrt/string/wcsicoll.cpp create mode 100644 sdk/lib/ucrt/string/wcslwr.cpp create mode 100644 sdk/lib/ucrt/string/wcsncat.cpp create mode 100644 sdk/lib/ucrt/string/wcsncat_s.cpp create mode 100644 sdk/lib/ucrt/string/wcsncmp.cpp create mode 100644 sdk/lib/ucrt/string/wcsncnt.cpp create mode 100644 sdk/lib/ucrt/string/wcsncoll.cpp create mode 100644 sdk/lib/ucrt/string/wcsncpy.cpp create mode 100644 sdk/lib/ucrt/string/wcsncpy_s.cpp create mode 100644 sdk/lib/ucrt/string/wcsnicmp.cpp create mode 100644 sdk/lib/ucrt/string/wcsnicol.cpp create mode 100644 sdk/lib/ucrt/string/wcsnset.cpp create mode 100644 sdk/lib/ucrt/string/wcsnset_s.cpp create mode 100644 sdk/lib/ucrt/string/wcspbrk.cpp create mode 100644 sdk/lib/ucrt/string/wcsrev.cpp create mode 100644 sdk/lib/ucrt/string/wcsset.cpp create mode 100644 sdk/lib/ucrt/string/wcsset_s.cpp create mode 100644 sdk/lib/ucrt/string/wcsspn.cpp create mode 100644 sdk/lib/ucrt/string/wcstok.cpp create mode 100644 sdk/lib/ucrt/string/wcstok_s.cpp create mode 100644 sdk/lib/ucrt/string/wcsupr.cpp create mode 100644 sdk/lib/ucrt/string/wcsxfrm.cpp create mode 100644 sdk/lib/ucrt/string/wmemcpy_s.cpp create mode 100644 sdk/lib/ucrt/string/wmemmove_s.cpp create mode 100644 sdk/lib/ucrt/time/asctime.cpp create mode 100644 sdk/lib/ucrt/time/clock.cpp create mode 100644 sdk/lib/ucrt/time/ctime.cpp create mode 100644 sdk/lib/ucrt/time/days.cpp create mode 100644 sdk/lib/ucrt/time/difftime.cpp create mode 100644 sdk/lib/ucrt/time/ftime.cpp create mode 100644 sdk/lib/ucrt/time/gmtime.cpp create mode 100644 sdk/lib/ucrt/time/localtime.cpp create mode 100644 sdk/lib/ucrt/time/loctotime.cpp create mode 100644 sdk/lib/ucrt/time/mktime.cpp create mode 100644 sdk/lib/ucrt/time/strdate.cpp create mode 100644 sdk/lib/ucrt/time/strftime.cpp create mode 100644 sdk/lib/ucrt/time/strtime.cpp create mode 100644 sdk/lib/ucrt/time/time.cpp create mode 100644 sdk/lib/ucrt/time/timeset.cpp create mode 100644 sdk/lib/ucrt/time/tzset.cpp create mode 100644 sdk/lib/ucrt/time/utime.cpp create mode 100644 sdk/lib/ucrt/time/wcsftime.cpp diff --git a/sdk/include/ucrt/assert.h b/sdk/include/ucrt/assert.h new file mode 100644 index 0000000000000..be5dbfca7f8fb --- /dev/null +++ b/sdk/include/ucrt/assert.h @@ -0,0 +1,50 @@ +// +// assert.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Defines the assert macro and related functionality. +// +#if defined _VCRT_BUILD && !defined _ASSERT_OK + #error assert.h not for CRT internal use +#endif + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS +_CRT_BEGIN_C_HEADER + +#if _CRT_HAS_C11 + +#define static_assert _Static_assert + +#endif // _CRT_HAS_C11 + +#undef assert + +#ifdef NDEBUG + + #define assert(expression) ((void)0) + +#else + + _ACRTIMP void __cdecl _wassert( + _In_z_ wchar_t const* _Message, + _In_z_ wchar_t const* _File, + _In_ unsigned _Line + ); + + #define assert(expression) (void)( \ + (!!(expression)) || \ + (_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \ + ) + +#endif + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/complex.h b/sdk/include/ucrt/complex.h new file mode 100644 index 0000000000000..72ee07b1c42db --- /dev/null +++ b/sdk/include/ucrt/complex.h @@ -0,0 +1,580 @@ +// +// complex.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The complex math library. +// +#pragma once +#ifndef _COMPLEX +#define _COMPLEX + +#include + +#if (_CRT_HAS_CXX17 == 1) && !defined(_CRT_USE_C_COMPLEX_H) +#include +#else // ^^^^ /std:c++17 ^^^^ // vvvv _CRT_USE_C_COMPLEX_H vvvv + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _C_COMPLEX_T + #define _C_COMPLEX_T + typedef struct _C_double_complex + { + double _Val[2]; + } _C_double_complex; + + typedef struct _C_float_complex + { + float _Val[2]; + } _C_float_complex; + + typedef struct _C_ldouble_complex + { + long double _Val[2]; + } _C_ldouble_complex; +#endif + +typedef _C_double_complex _Dcomplex; +typedef _C_float_complex _Fcomplex; +typedef _C_ldouble_complex _Lcomplex; + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define _DCOMPLEX_(re, im) _Cbuild(re, im) +#define _FCOMPLEX_(re, im) _FCbuild(re, im) +#define _LCOMPLEX_(re, im) _LCbuild(re, im) + +#define _Complex_I _FCbuild(0.0F, 1.0F) +#define I _Complex_I + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_ACRTIMP double __cdecl cabs(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl cacos(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl cacosh(_In_ _Dcomplex _Z); +_ACRTIMP double __cdecl carg(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl casin(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl casinh(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl catan(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl catanh(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl ccos(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl ccosh(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl cexp(_In_ _Dcomplex _Z); +_ACRTIMP double __cdecl cimag(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl clog(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl clog10(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl conj(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl cpow(_In_ _Dcomplex _X, _In_ _Dcomplex _Y); +_ACRTIMP _Dcomplex __cdecl cproj(_In_ _Dcomplex _Z); +_ACRTIMP double __cdecl creal(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl csin(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl csinh(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl csqrt(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl ctan(_In_ _Dcomplex _Z); +_ACRTIMP _Dcomplex __cdecl ctanh(_In_ _Dcomplex _Z); +_ACRTIMP double __cdecl norm(_In_ _Dcomplex _Z); + +_ACRTIMP float __cdecl cabsf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl cacosf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl cacoshf(_In_ _Fcomplex _Z); +_ACRTIMP float __cdecl cargf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl casinf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl casinhf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl catanf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl catanhf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl ccosf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl ccoshf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl cexpf(_In_ _Fcomplex _Z); +_ACRTIMP float __cdecl cimagf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl clogf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl clog10f(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl conjf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl cpowf(_In_ _Fcomplex _X, _In_ _Fcomplex _Y); +_ACRTIMP _Fcomplex __cdecl cprojf(_In_ _Fcomplex _Z); +_ACRTIMP float __cdecl crealf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl csinf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl csinhf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl csqrtf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl ctanf(_In_ _Fcomplex _Z); +_ACRTIMP _Fcomplex __cdecl ctanhf(_In_ _Fcomplex _Z); +_ACRTIMP float __cdecl normf(_In_ _Fcomplex _Z); + +_ACRTIMP long double __cdecl cabsl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl cacosl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl cacoshl(_In_ _Lcomplex _Z); +_ACRTIMP long double __cdecl cargl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl casinl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl casinhl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl catanl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl catanhl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl ccosl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl ccoshl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl cexpl(_In_ _Lcomplex _Z); +_ACRTIMP long double __cdecl cimagl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl clogl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl clog10l(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl conjl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl cpowl(_In_ _Lcomplex _X, _In_ _Lcomplex _Y); +_ACRTIMP _Lcomplex __cdecl cprojl(_In_ _Lcomplex _Z); +_ACRTIMP long double __cdecl creall(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl csinl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl csinhl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl csqrtl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl ctanl(_In_ _Lcomplex _Z); +_ACRTIMP _Lcomplex __cdecl ctanhl(_In_ _Lcomplex _Z); +_ACRTIMP long double __cdecl norml(_In_ _Lcomplex _Z); + +_ACRTIMP _Dcomplex __cdecl _Cbuild(_In_ double _Re, _In_ double _Im); +_ACRTIMP _Dcomplex __cdecl _Cmulcc(_In_ _Dcomplex _X, _In_ _Dcomplex _Y); +_ACRTIMP _Dcomplex __cdecl _Cmulcr(_In_ _Dcomplex _X, _In_ double _Y); + +_ACRTIMP _Fcomplex __cdecl _FCbuild(_In_ float _Re, _In_ float _Im); +_ACRTIMP _Fcomplex __cdecl _FCmulcc(_In_ _Fcomplex _X, _In_ _Fcomplex _Y); +_ACRTIMP _Fcomplex __cdecl _FCmulcr(_In_ _Fcomplex _X, _In_ float _Y); + +_ACRTIMP _Lcomplex __cdecl _LCbuild(_In_ long double _Re, _In_ long double _Im); +_ACRTIMP _Lcomplex __cdecl _LCmulcc(_In_ _Lcomplex _X, _In_ _Lcomplex _Y); +_ACRTIMP _Lcomplex __cdecl _LCmulcr(_In_ _Lcomplex _X, _In_ long double _Y); + + + +#ifdef __cplusplus +extern "C++" +{ + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // double complex overloads + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + inline _Dcomplex __CRTDECL acos(_In_ _Dcomplex _X) throw() + { + return cacos(_X); + } + + inline _Dcomplex __CRTDECL acosh(_In_ _Dcomplex _X) throw() + { + return cacosh(_X); + } + + inline _Dcomplex __CRTDECL asin(_In_ _Dcomplex _X) throw() + { + return casin(_X); + } + + inline _Dcomplex __CRTDECL asinh(_In_ _Dcomplex _X) throw() + { + return casinh(_X); + } + + inline _Dcomplex __CRTDECL atan(_In_ _Dcomplex _X) throw() + { + return catan(_X); + } + + inline _Dcomplex __CRTDECL atanh(_In_ _Dcomplex _X) throw() + { + return catanh(_X); + } + + inline _Dcomplex __CRTDECL cos(_In_ _Dcomplex _X) throw() + { + return ccos(_X); + } + + inline _Dcomplex __CRTDECL cosh(_In_ _Dcomplex _X) throw() + { + return ccosh(_X); + } + + inline _Dcomplex __CRTDECL proj(_In_ _Dcomplex _X) throw() + { + return cproj(_X); + } + + inline _Dcomplex __CRTDECL exp(_In_ _Dcomplex _X) throw() + { + return cexp(_X); + } + + inline _Dcomplex __CRTDECL log(_In_ _Dcomplex _X) throw() + { + return clog(_X); + } + + inline _Dcomplex __CRTDECL log10(_In_ _Dcomplex _X) throw() + { + return clog10(_X); + } + + inline _Dcomplex __CRTDECL pow(_In_ _Dcomplex _X, _In_ _Dcomplex _Y) throw() + { + return cpow(_X, _Y); + } + + inline _Dcomplex __CRTDECL sin(_In_ _Dcomplex _X) throw() + { + return csin(_X); + } + + inline _Dcomplex __CRTDECL sinh(_In_ _Dcomplex _X) throw() + { + return csinh(_X); + } + + inline _Dcomplex __CRTDECL sqrt(_In_ _Dcomplex _X) throw() + { + return csqrt(_X); + } + + inline _Dcomplex __CRTDECL tan(_In_ _Dcomplex _X) throw() + { + return ctan(_X); + } + + inline _Dcomplex __CRTDECL tanh(_In_ _Dcomplex _X) throw() + { + return ctanh(_X); + } + + inline double __CRTDECL abs(_In_ _Dcomplex _X) throw() + { + return cabs(_X); + } + + inline double __CRTDECL arg(_In_ _Dcomplex _X) throw() + { + return carg(_X); + } + + inline double __CRTDECL imag(_In_ _Dcomplex _X) throw() + { + return cimag(_X); + } + + inline double __CRTDECL real(_In_ _Dcomplex _X) throw() + { + return creal(_X); + } + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // float complex overloads + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + inline _Fcomplex __CRTDECL acos(_In_ _Fcomplex _X) throw() + { + return cacosf(_X); + } + + inline _Fcomplex __CRTDECL acosh(_In_ _Fcomplex _X) throw() + { + return cacoshf(_X); + } + + inline _Fcomplex __CRTDECL asin(_In_ _Fcomplex _X) throw() + { + return casinf(_X); + } + + inline _Fcomplex __CRTDECL asinh(_In_ _Fcomplex _X) throw() + { + return casinhf(_X); + } + + inline _Fcomplex __CRTDECL atan(_In_ _Fcomplex _X) throw() + { + return catanf(_X); + } + + inline _Fcomplex __CRTDECL atanh(_In_ _Fcomplex _X) throw() + { + return catanhf(_X); + } + + inline _Fcomplex __CRTDECL conj(_In_ _Fcomplex _X) throw() + { + return conjf(_X); + } + + inline _Fcomplex __CRTDECL cos(_In_ _Fcomplex _X) throw() + { + return ccosf(_X); + } + + inline _Fcomplex __CRTDECL cosh(_In_ _Fcomplex _X) throw() + { + return ccoshf(_X); + } + + inline _Fcomplex __CRTDECL cproj(_In_ _Fcomplex _X) throw() + { + return cprojf(_X); + } + + inline _Fcomplex __CRTDECL proj(_In_ _Fcomplex _X) throw() + { + return cprojf(_X); + } + + inline _Fcomplex __CRTDECL exp(_In_ _Fcomplex _X) throw() + { + return cexpf(_X); + } + + inline _Fcomplex __CRTDECL log(_In_ _Fcomplex _X) throw() + { + return clogf(_X); + } + + inline _Fcomplex __CRTDECL log10(_In_ _Fcomplex _X) throw() + { + return clog10f(_X); + } + + inline float __CRTDECL norm(_In_ _Fcomplex _X) throw() + { + return normf(_X); + } + + inline _Fcomplex __CRTDECL pow(_In_ _Fcomplex _X, _In_ _Fcomplex _Y) throw() + { + return cpowf(_X, _Y); + } + + inline _Fcomplex __CRTDECL sin(_In_ _Fcomplex _X) throw() + { + return csinf(_X); + } + + inline _Fcomplex __CRTDECL sinh(_In_ _Fcomplex _X) throw() + { + return csinhf(_X); + } + + inline _Fcomplex __CRTDECL sqrt(_In_ _Fcomplex _X) throw() + { + return csqrtf(_X); + } + + inline _Fcomplex __CRTDECL tan(_In_ _Fcomplex _X) throw() + { + return ctanf(_X); + } + + inline _Fcomplex __CRTDECL tanh(_In_ _Fcomplex _X) throw() + { + return ctanhf(_X); + } + + inline float __CRTDECL abs(_In_ _Fcomplex _X) throw() + { + return cabsf(_X); + } + + inline float __CRTDECL arg(_In_ _Fcomplex _X) throw() + { + return cargf(_X); + } + + inline float __CRTDECL carg(_In_ _Fcomplex _X) throw() + { + return cargf(_X); + } + + inline float __CRTDECL cimag(_In_ _Fcomplex _X) throw() + { + return cimagf(_X); + } + + inline float __CRTDECL creal(_In_ _Fcomplex _X) throw() + { + return crealf(_X); + } + + inline float __CRTDECL imag(_In_ _Fcomplex _X) throw() + { + return cimagf(_X); + } + + inline float __CRTDECL real(_In_ _Fcomplex _X) throw() + { + return crealf(_X); + } + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // long double complex overloads + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + inline _Lcomplex __CRTDECL acos(_In_ _Lcomplex _X) throw() + { + return cacosl(_X); + } + + inline _Lcomplex __CRTDECL acosh(_In_ _Lcomplex _X) throw() + { + return cacoshl(_X); + } + + inline _Lcomplex __CRTDECL asin(_In_ _Lcomplex _X) throw() + { + return casinl(_X); + } + + inline _Lcomplex __CRTDECL asinh(_In_ _Lcomplex _X) throw() + { + return casinhl(_X); + } + + inline _Lcomplex __CRTDECL atan(_In_ _Lcomplex _X) throw() + { + return catanl(_X); + } + + inline _Lcomplex __CRTDECL atanh(_In_ _Lcomplex _X) throw() + { + return catanhl(_X); + } + + inline _Lcomplex __CRTDECL conj(_In_ _Lcomplex _X) throw() + { + return conjl(_X); + } + + inline _Lcomplex __CRTDECL cos(_In_ _Lcomplex _X) throw() + { + return ccosl(_X); + } + + inline _Lcomplex __CRTDECL cosh(_In_ _Lcomplex _X) throw() + { + return ccoshl(_X); + } + + inline _Lcomplex __CRTDECL cproj(_In_ _Lcomplex _X) throw() + { + return cprojl(_X); + } + + inline _Lcomplex __CRTDECL proj(_In_ _Lcomplex _X) throw() + { + return cprojl(_X); + } + + inline _Lcomplex __CRTDECL exp(_In_ _Lcomplex _X) throw() + { + return cexpl(_X); + } + + inline _Lcomplex __CRTDECL log(_In_ _Lcomplex _X) throw() + { + return clogl(_X); + } + + inline _Lcomplex __CRTDECL log10(_In_ _Lcomplex _X) throw() + { + return clog10l(_X); + } + + inline long double __CRTDECL norm(_In_ _Lcomplex _X) throw() + { + return norml(_X); + } + + inline _Lcomplex __CRTDECL pow(_In_ _Lcomplex _X, _In_ _Lcomplex _Y) throw() + { + return cpowl(_X, _Y); + } + + inline _Lcomplex __CRTDECL sin(_In_ _Lcomplex _X) throw() + { + return csinl(_X); + } + + inline _Lcomplex __CRTDECL sinh(_In_ _Lcomplex _X) throw() + { + return csinhl(_X); + } + + inline _Lcomplex __CRTDECL sqrt(_In_ _Lcomplex _X) throw() + { + return csqrtl(_X); + } + + inline _Lcomplex __CRTDECL tan(_In_ _Lcomplex _X) throw() + { + return ctanl(_X); + } + + inline _Lcomplex __CRTDECL tanh(_In_ _Lcomplex _X) throw() + { + return ctanhl(_X); + } + + inline long double __CRTDECL abs(_In_ _Lcomplex _X) throw() + { + return cabsl(_X); + } + + inline long double __CRTDECL arg(_In_ _Lcomplex _X) throw() + { + return cargl(_X); + } + + inline long double __CRTDECL carg(_In_ _Lcomplex _X) throw() + { + return cargl(_X); + } + + inline long double __CRTDECL cimag(_In_ _Lcomplex _X) throw() + { + return cimagl(_X); + } + + inline long double __CRTDECL creal(_In_ _Lcomplex _X) throw() + { + return creall(_X); + } + + inline long double __CRTDECL imag(_In_ _Lcomplex _X) throw() + { + return cimagl(_X); + } + + inline long double __CRTDECL real(_In_ _Lcomplex _X) throw() + { + return creall(_X); + } + +} // extern "C++" +#endif // __cplusplus + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // (_CRT_HAS_CXX17 == 1) && !defined(_CRT_USE_C_COMPLEX_H) +#endif // _COMPLEX diff --git a/sdk/include/ucrt/conio.h b/sdk/include/ucrt/conio.h new file mode 100644 index 0000000000000..a0f5e9c192cc8 --- /dev/null +++ b/sdk/include/ucrt/conio.h @@ -0,0 +1,504 @@ +// +// conio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the direct console I/O functions. +// +#pragma once +#ifndef _INC_CONIO // include guard for 3rd party interop +#define _INC_CONIO + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + _Check_return_wat_ + _Success_(_BufferCount > 0) + _DCRTIMP errno_t __cdecl _cgets_s( + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _Out_ size_t* _SizeRead + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + _Success_(return == 0) + errno_t, _cgets_s, + _Out_writes_z_(*_Buffer) char, _Buffer, + _Out_ size_t*, _SizeRead + ) + + _Check_return_opt_ + _DCRTIMP int __cdecl _cputs( + _In_z_ char const* _Buffer + ); + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Formatted Output Functions (Console) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcprintf( + _In_ unsigned __int64 _Options, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcprintf_s( + _In_ unsigned __int64 _Options, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcprintf_p( + _In_ unsigned __int64 _Options, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcprintf_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcprintf( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcprintf_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcprintf_s_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcprintf_s( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcprintf_s( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcprintf_s_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcprintf_p_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcprintf_p( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcprintf_p( + _In_z_ char const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcprintf_p_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cprintf_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcprintf_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cprintf( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcprintf_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cprintf_s_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcprintf_s_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cprintf_s( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcprintf_s_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cprintf_p_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcprintf_p_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cprintf_p( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcprintf_p_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Formatted Input Functions (Console) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcscanf( + _In_ unsigned __int64 _Options, + _In_z_ _Scanf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vcscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _vcscanf_l( + _In_z_ _Scanf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vcscanf_s) + _CRT_STDIO_INLINE int __CRTDECL _vcscanf( + _In_z_ _Scanf_format_string_params_(1) char const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcscanf_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcscanf_s_l( + _In_z_ _Scanf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcscanf_s( + _In_z_ _Scanf_format_string_params_(1) char const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcscanf_s_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_cscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _cscanf_l( + _In_z_ _Scanf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = _vcscanf_l(_Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_cscanf_s) + _CRT_STDIO_INLINE int __CRTDECL _cscanf( + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = _vcscanf_l(_Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cscanf_s_l( + _In_z_ _Scanf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcscanf_s_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cscanf_s( + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcscanf_s_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + + _DCRTIMP int __cdecl _kbhit(void); + + _Check_return_ _DCRTIMP int __cdecl _getch(void); + _Check_return_ _DCRTIMP int __cdecl _getche(void); + _Check_return_opt_ _DCRTIMP int __cdecl _putch (_In_ int _Ch); + _Check_return_opt_ _DCRTIMP int __cdecl _ungetch(_In_ int _Ch); + + _Check_return_ _DCRTIMP int __cdecl _getch_nolock (void); + _Check_return_ _DCRTIMP int __cdecl _getche_nolock (void); + _Check_return_opt_ _DCRTIMP int __cdecl _putch_nolock (_In_ int _Ch); + _Check_return_opt_ _DCRTIMP int __cdecl _ungetch_nolock(_In_ int _Ch); + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + // Suppress double-deprecation warnings: + #pragma warning(push) + #pragma warning(disable: 4141) + + _Success_(return != 0) + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_cgets) _CRT_INSECURE_DEPRECATE(_cgets_s) + _DCRTIMP char* __cdecl cgets( + _At_(&_Buffer[0], _In_reads_(1)) + _At_(&_Buffer[1], _Out_writes_(1)) + _At_(&_Buffer[2], _Post_z_ _Out_writes_to_(_Buffer[0], _Buffer[1])) + char* _Buffer + ); + + #pragma warning(pop) + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_cputs) + _DCRTIMP int __cdecl cputs( + _In_z_ char const* _String + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_getch) + _DCRTIMP int __cdecl getch(void); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_getche) + _DCRTIMP int __cdecl getche(void); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_kbhit) + _DCRTIMP int __cdecl kbhit(void); + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_putch) + _DCRTIMP int __cdecl putch( + _In_ int _Ch + ); + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_ungetch) + _DCRTIMP int __cdecl ungetch( + _In_ int _Ch + ); + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_cprintf) + _CRT_STDIO_INLINE int __CRTDECL cprintf( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcprintf_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_cscanf) + _CRT_STDIO_INLINE int __CRTDECL cscanf( + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = _vcscanf_l(_Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } +#endif + + #endif // _CRT_INTERNAL_NONSTDC_NAMES + +_CRT_END_C_HEADER + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_CONIO diff --git a/sdk/include/ucrt/corecrt.h b/sdk/include/ucrt/corecrt.h new file mode 100644 index 0000000000000..b89f0a94c22a7 --- /dev/null +++ b/sdk/include/ucrt/corecrt.h @@ -0,0 +1,2075 @@ +// +// corecrt.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Declarations used throughout the CoreCRT library. +// +#pragma once + +#include + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Windows API Partitioning and ARM Desktop Support +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + #ifdef WINAPI_FAMILY + #include + #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) + #define _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + #else + #ifdef WINAPI_FAMILY_PHONE_APP + #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP + #define _CRT_USE_WINAPI_FAMILY_PHONE_APP + #endif + #endif + + #ifdef WINAPI_FAMILY_GAMES + #if WINAPI_FAMILY == WINAPI_FAMILY_GAMES + #define _CRT_USE_WINAPI_FAMILY_GAMES + #endif + #endif + #endif + #else + #define _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + #endif +#endif + +#ifndef _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE + #define _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 1 +#endif + +#ifndef _CRT_BUILD_DESKTOP_APP + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + #define _CRT_BUILD_DESKTOP_APP 1 + #else + #define _CRT_BUILD_DESKTOP_APP 0 + #endif +#endif + +// Verify that the ARM Desktop SDK is available when building an ARM Desktop app +#ifdef _M_ARM + #if _CRT_BUILD_DESKTOP_APP && !_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE + #error Compiling Desktop applications for the ARM platform is not supported. + #endif +#endif + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Warning Suppression +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +// C4412: function signature contains type '_locale_t'; +// C++ objects are unsafe to pass between pure code and mixed or native. (/Wall) +#ifndef _UCRT_DISABLED_WARNING_4412 + #ifdef _M_CEE_PURE + #define _UCRT_DISABLED_WARNING_4412 4412 + #else + #define _UCRT_DISABLED_WARNING_4412 + #endif +#endif + +// Use _UCRT_EXTRA_DISABLED_WARNINGS to add additional warning suppressions to UCRT headers. +#ifndef _UCRT_EXTRA_DISABLED_WARNINGS + #define _UCRT_EXTRA_DISABLED_WARNINGS +#endif + +// C4324: structure was padded due to __declspec(align()) (/W4) +// C4514: unreferenced inline function has been removed (/Wall) +// C4574: 'MACRO' is defined to be '0': did you mean to use '#if MACRO'? (/Wall) +// C4668: '__cplusplus' is not defined as a preprocessor macro (/Wall) +// C4710: function not inlined (/Wall) +// C4793: 'function' is compiled as native code (/Wall and /W1 under /clr:pure) +// C4820: padding after data member (/Wall) +// C4995: name was marked #pragma deprecated +// C4996: __declspec(deprecated) +// C28719: Banned API, use a more robust and secure replacement. +// C28726: Banned or deprecated API, use a more robust and secure replacement. +// C28727: Banned API. +#ifndef _UCRT_DISABLED_WARNINGS + #define _UCRT_DISABLED_WARNINGS 4324 _UCRT_DISABLED_WARNING_4412 4514 4574 4710 4793 4820 4995 4996 28719 28726 28727 _UCRT_EXTRA_DISABLED_WARNINGS +#endif + +#ifndef _UCRT_DISABLE_CLANG_WARNINGS + #ifdef __clang__ + // warning: declspec(deprecated) [-Wdeprecated-declarations] + // warning: __declspec attribute 'allocator' is not supported [-Wignored-attributes] + // warning: '#pragma optimize' is not supported [-Wignored-pragma-optimize] + // warning: unknown pragma ignored [-Wunknown-pragmas] + #define _UCRT_DISABLE_CLANG_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ + _Pragma("clang diagnostic ignored \"-Wignored-attributes\"") \ + _Pragma("clang diagnostic ignored \"-Wignored-pragma-optimize\"") \ + _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") + #else // __clang__ + #define _UCRT_DISABLE_CLANG_WARNINGS + #endif // __clang__ +#endif // _UCRT_DISABLE_CLANG_WARNINGS + +#ifndef _UCRT_RESTORE_CLANG_WARNINGS + #ifdef __clang__ + #define _UCRT_RESTORE_CLANG_WARNINGS _Pragma("clang diagnostic pop") + #else // __clang__ + #define _UCRT_RESTORE_CLANG_WARNINGS + #endif // __clang__ +#endif // _UCRT_RESTORE_CLANG_WARNINGS + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Annotation Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _ACRTIMP + #if defined _CRTIMP && !defined _VCRT_DEFINED_CRTIMP + #define _ACRTIMP _CRTIMP + #elif !defined _CORECRT_BUILD && defined _DLL + #define _ACRTIMP __declspec(dllimport) + #else + #define _ACRTIMP + #endif +#endif + +// If you need the ability to remove __declspec(import) from an API, to support static replacement, +// declare the API using _ACRTIMP_ALT instead of _ACRTIMP. +#ifndef _ACRTIMP_ALT + #define _ACRTIMP_ALT _ACRTIMP +#endif + +#ifndef _DCRTIMP + #if defined _CRTIMP && !defined _VCRT_DEFINED_CRTIMP + #define _DCRTIMP _CRTIMP + #elif !defined _CORECRT_BUILD && defined _DLL + #define _DCRTIMP __declspec(dllimport) + #else + #define _DCRTIMP + #endif +#endif + +#if defined _CRT_SUPPRESS_RESTRICT || defined _CORECRT_BUILD + #define _CRTRESTRICT +#else + #define _CRTRESTRICT __declspec(restrict) +#endif + +#if defined _MSC_VER && _MSC_VER >= 1900 && !defined _CORECRT_BUILD + #define _CRTALLOCATOR __declspec(allocator) +#else + #define _CRTALLOCATOR +#endif + +#if defined _M_CEE && defined _M_X64 + // This is only needed when managed code is calling the native APIs, + // targeting the 64-bit runtime. + #define _CRT_JIT_INTRINSIC __declspec(jitintrinsic) +#else + #define _CRT_JIT_INTRINSIC +#endif + +// __declspec(guard(overflow)) enabled by /sdl compiler switch for CRT allocators +#ifdef _GUARDOVERFLOW_CRT_ALLOCATORS + #define _CRT_GUARDOVERFLOW __declspec(guard(overflow)) +#else + #define _CRT_GUARDOVERFLOW +#endif + +#if defined _DLL && (defined _M_HYBRID || defined _M_ARM64EC) && (defined _CORECRT_BUILD || defined _VCRT_BUILD) + #define _CRT_HYBRIDPATCHABLE __declspec(hybrid_patchable) +#else + #define _CRT_HYBRIDPATCHABLE +#endif + +// The CLR requires code calling other SecurityCritical code or using SecurityCritical types +// to be marked as SecurityCritical. +// _CRT_SECURITYCRITICAL_ATTRIBUTE covers this for internal function definitions. +// _CRT_INLINE_PURE_SECURITYCRITICAL_ATTRIBUTE is for inline pure functions defined in the header. +// This is clr:pure-only because for mixed mode we compile inline functions as native. +#ifdef _M_CEE_PURE + #define _CRT_INLINE_PURE_SECURITYCRITICAL_ATTRIBUTE [System::Security::SecurityCritical] +#else + #define _CRT_INLINE_PURE_SECURITYCRITICAL_ATTRIBUTE +#endif + +#ifndef _CONST_RETURN + #ifdef __cplusplus + #define _CONST_RETURN const + #define _CRT_CONST_CORRECT_OVERLOADS + #else + #define _CONST_RETURN + #endif +#endif + +#define _WConst_return _CONST_RETURN // For backwards compatibility + +#ifndef _CRT_ALIGN + #ifdef __midl + #define _CRT_ALIGN(x) + #else + #define _CRT_ALIGN(x) __declspec(align(x)) + #endif +#endif + +#if defined _PREFAST_ && defined _CA_SHOULD_CHECK_RETURN + #define _Check_return_opt_ _Check_return_ +#else + #define _Check_return_opt_ +#endif + +#if defined _PREFAST_ && defined _CA_SHOULD_CHECK_RETURN_WER + #define _Check_return_wat_ _Check_return_ +#else + #define _Check_return_wat_ +#endif + +#if !defined __midl && !defined MIDL_PASS && defined _PREFAST_ + #define __crt_typefix(ctype) __declspec("SAL_typefix(" _CRT_STRINGIZE(ctype) ")") +#else + #define __crt_typefix(ctype) +#endif + +#ifndef _CRT_NOEXCEPT + #ifdef __cplusplus + #define _CRT_NOEXCEPT noexcept + #else + #define _CRT_NOEXCEPT + #endif +#endif + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Miscellaneous Stuff +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef __cplusplus +extern "C++" +{ + template + struct _CrtEnableIf; + + template + struct _CrtEnableIf + { + typedef _Ty _Type; + }; +} +#endif + +#if defined __cplusplus + typedef bool __crt_bool; +#elif defined __midl + // MIDL understands neither bool nor _Bool. Use char as a best-fit + // replacement (the differences won't matter in practice). + typedef char __crt_bool; +#else + typedef _Bool __crt_bool; +#endif + +#define _ARGMAX 100 +#define _TRUNCATE ((size_t)-1) +#define _CRT_INT_MAX 2147483647 +#define _CRT_SIZE_MAX ((size_t)-1) + +#define __FILEW__ _CRT_WIDE(__FILE__) +#define __FUNCTIONW__ _CRT_WIDE(__FUNCTION__) + +#ifdef __cplusplus + #ifndef _STATIC_ASSERT + #define _STATIC_ASSERT(expr) static_assert((expr), #expr) + #endif +#else + #ifndef _STATIC_ASSERT + #ifdef __clang__ + #define _STATIC_ASSERT(expr) _Static_assert((expr), #expr) + #else + #define _STATIC_ASSERT(expr) typedef char __static_assert_t[(expr) != 0] + #endif + #endif +#endif + +#ifndef NULL + #ifdef __cplusplus + #define NULL 0 + #else + #define NULL ((void *)0) + #endif +#endif + +// CRT headers are included into some kinds of source files where only data type +// definitions and macro definitions are required but function declarations and +// inline function definitions are not. These files include assembly files, IDL +// files, and resource files. The tools that process these files often have a +// limited ability to process C and C++ code. The _CRT_FUNCTIONS_REQUIRED macro +// is defined to 1 when we are compiling a file that actually needs functions to +// be declared (and defined, where applicable), and to 0 when we are compiling a +// file that does not. This allows us to suppress declarations and definitions +// that are not compilable with the aforementioned tools. +#if !defined _CRT_FUNCTIONS_REQUIRED + #if defined __assembler || defined __midl || defined RC_INVOKED + #define _CRT_FUNCTIONS_REQUIRED 0 + #else + #define _CRT_FUNCTIONS_REQUIRED 1 + #endif +#endif + +#if !defined _NO_INLINING && !_CRT_FUNCTIONS_REQUIRED + #define _NO_INLINING // Suppress inlines +#endif + +#ifndef _CRT_UNUSED + #define _CRT_UNUSED(x) (void)x +#endif + +#ifndef _CRT_HAS_CXX17 + #ifdef _MSVC_LANG + #if _MSVC_LANG > 201402 + #define _CRT_HAS_CXX17 1 + #else /* _MSVC_LANG > 201402 */ + #define _CRT_HAS_CXX17 0 + #endif /* _MSVC_LANG > 201402 */ + #else /* _MSVC_LANG */ + #if defined __cplusplus && __cplusplus > 201402 + #define _CRT_HAS_CXX17 1 + #else /* __cplusplus > 201402 */ + #define _CRT_HAS_CXX17 0 + #endif /* __cplusplus > 201402 */ + #endif /* _MSVC_LANG */ +#endif /* _CRT_HAS_CXX17 */ + +#ifndef _CRT_HAS_C11 + #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L + #define _CRT_HAS_C11 1 + #else /* defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L */ + #define _CRT_HAS_C11 0 + #endif /* defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L */ +#endif /* _CRT_HAS_C11 */ + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Invalid Parameter Handler +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _DEBUG + _ACRTIMP void __cdecl _invalid_parameter( + _In_opt_z_ wchar_t const*, + _In_opt_z_ wchar_t const*, + _In_opt_z_ wchar_t const*, + _In_ unsigned int, + _In_ uintptr_t + ); +#endif + +_ACRTIMP_ALT void __cdecl _invalid_parameter_noinfo(void); +_ACRTIMP __declspec(noreturn) void __cdecl _invalid_parameter_noinfo_noreturn(void); + +__declspec(noreturn) +_ACRTIMP void __cdecl _invoke_watson( + _In_opt_z_ wchar_t const* _Expression, + _In_opt_z_ wchar_t const* _FunctionName, + _In_opt_z_ wchar_t const* _FileName, + _In_ unsigned int _LineNo, + _In_ uintptr_t _Reserved); + +#ifndef _CRT_SECURE_INVALID_PARAMETER + #ifdef _DEBUG + #define _CRT_SECURE_INVALID_PARAMETER(expr) \ + ::_invalid_parameter(_CRT_WIDE(#expr), __FUNCTIONW__, __FILEW__, __LINE__, 0) + #else + // By default, _CRT_SECURE_INVALID_PARAMETER in retail invokes + // _invalid_parameter_noinfo_noreturn(), which is marked + // __declspec(noreturn) and does not return control to the application. + // Even if _set_invalid_parameter_handler() is used to set a new invalid + // parameter handler which does return control to the application, + // _invalid_parameter_noinfo_noreturn() will terminate the application + // and invoke Watson. You can overwrite the definition of + // _CRT_SECURE_INVALID_PARAMETER if you need. + // + // _CRT_SECURE_INVALID_PARAMETER is used in the Standard C++ Libraries + // and the SafeInt library. + #define _CRT_SECURE_INVALID_PARAMETER(expr) \ + ::_invalid_parameter_noinfo_noreturn() + #endif +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Deprecation and Warnings +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define _CRT_WARNING_MESSAGE(NUMBER, MESSAGE) \ + __FILE__ "(" _CRT_STRINGIZE(__LINE__) "): warning " NUMBER ": " MESSAGE + +#if ( defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || \ + (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__ ) + #define _CRT_INTERNAL_NONSTDC_NAMES 1 +#else + #define _CRT_INTERNAL_NONSTDC_NAMES 0 +#endif + +#if defined _CRT_NONSTDC_NO_DEPRECATE && !defined _CRT_NONSTDC_NO_WARNINGS + #define _CRT_NONSTDC_NO_WARNINGS +#endif + +#ifndef _CRT_NONSTDC_DEPRECATE + #ifdef _CRT_NONSTDC_NO_WARNINGS + #define _CRT_NONSTDC_DEPRECATE(_NewName) + #else + #define _CRT_NONSTDC_DEPRECATE(_NewName) _CRT_DEPRECATE_TEXT( \ + "The POSIX name for this item is deprecated. Instead, use the ISO C " \ + "and C++ conformant name: " #_NewName ". See online help for details.") + #endif +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Managed CRT Support +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _PGLOBAL + #ifdef _M_CEE + #ifdef __cplusplus_cli + #define _PGLOBAL __declspec(process) + #else + #define _PGLOBAL + #endif + #else + #define _PGLOBAL + #endif +#endif + +#ifndef _AGLOBAL + #ifdef _M_CEE + #define _AGLOBAL __declspec(appdomain) + #else + #define _AGLOBAL + #endif +#endif + +#if defined _M_CEE && !defined _M_CEE_PURE + #define _M_CEE_MIXED +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// SecureCRT Configuration +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined _CRTBLD || defined _CORECRT_BUILD || defined _VCRT_BUILD + // Disable C++ overloads internally: + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 0 + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 0 + #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 0 +#endif + +#if !_CRT_FUNCTIONS_REQUIRED + // If we don't require function declarations at all, we need not define the + // overloads (MIDL and RC do not need the C++ overloads). + #undef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES + #undef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT + #undef _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES + #undef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY + #undef _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY + + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 0 + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 0 + #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 0 + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY 0 + #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY 0 +#endif + +#define __STDC_SECURE_LIB__ 200411L +#define __GOT_SECURE_LIB__ __STDC_SECURE_LIB__ // For backwards compatibility + +#ifndef __STDC_WANT_SECURE_LIB__ + #define __STDC_WANT_SECURE_LIB__ 1 +#endif + +#if !__STDC_WANT_SECURE_LIB__ && !defined _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS +#endif + +#ifndef RC_INVOKED + #if defined _CRT_SECURE_NO_DEPRECATE_GLOBALS && !defined _CRT_SECURE_NO_WARNINGS_GLOBALS + #define _CRT_SECURE_NO_WARNINGS_GLOBALS + #endif +#endif + +#ifndef _CRT_INSECURE_DEPRECATE_GLOBALS + #ifdef RC_INVOKED + #define _CRT_INSECURE_DEPRECATE_GLOBALS(replacement) + #else + #ifdef _CRT_SECURE_NO_WARNINGS_GLOBALS + #define _CRT_INSECURE_DEPRECATE_GLOBALS(replacement) + #else + #define _CRT_INSECURE_DEPRECATE_GLOBALS(replacement) _CRT_INSECURE_DEPRECATE(replacement) + #endif + #endif +#endif + +#if defined _CRT_MANAGED_HEAP_NO_DEPRECATE && !defined _CRT_MANAGED_HEAP_NO_WARNINGS + #define _CRT_MANAGED_HEAP_NO_WARNINGS +#endif + +#define _SECURECRT_FILL_BUFFER_PATTERN 0xFE + +#if defined _CRT_OBSOLETE_NO_DEPRECATE && !defined _CRT_OBSOLETE_NO_WARNINGS + #define _CRT_OBSOLETE_NO_WARNINGS +#endif + +#ifndef _CRT_OBSOLETE + #ifdef _CRT_OBSOLETE_NO_WARNINGS + #define _CRT_OBSOLETE(_NewItem) + #else + #define _CRT_OBSOLETE(_NewItem) _CRT_DEPRECATE_TEXT( \ + "This function or variable has been superceded by newer library " \ + "or operating system functionality. Consider using " #_NewItem " " \ + "instead. See online help for details.") + #endif +#endif + +#ifndef RC_INVOKED + #ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 0 + #else + #if !__STDC_WANT_SECURE_LIB__ && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES + #error Cannot use Secure CRT C++ overloads when __STDC_WANT_SECURE_LIB__ is 0 + #endif + #endif + + #ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT + // _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT is ignored if + // _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES is set to 0 + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 0 + #else + #if !__STDC_WANT_SECURE_LIB__ && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT + #error Cannot use Secure CRT C++ overloads when __STDC_WANT_SECURE_LIB__ is 0 + #endif + #endif + + #ifndef _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES + #if __STDC_WANT_SECURE_LIB__ + #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1 + #else + #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 0 + #endif + #else + #if !__STDC_WANT_SECURE_LIB__ && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES + #error Cannot use Secure CRT C++ overloads when __STDC_WANT_SECURE_LIB__ is 0 + #endif + #endif + + #ifndef _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY + #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY 0 + #else + #if !__STDC_WANT_SECURE_LIB__ && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY + #error Cannot use Secure CRT C++ overloads when __STDC_WANT_SECURE_LIB__ is 0 + #endif + #endif + + #ifndef _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY + #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY 0 + #else + #if !__STDC_WANT_SECURE_LIB__ && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY + #error Cannot use Secure CRT C++ overloads when __STDC_WANT_SECURE_LIB__ is 0 + #endif + #endif +#endif + +#ifndef _CRT_SECURE_CPP_NOTHROW + #define _CRT_SECURE_CPP_NOTHROW throw() +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Basic Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +typedef int errno_t; +typedef unsigned short wint_t; +typedef unsigned short wctype_t; +typedef long __time32_t; +typedef __int64 __time64_t; + +typedef struct __crt_locale_data_public +{ + unsigned short const* _locale_pctype; + _Field_range_(1, 2) int _locale_mb_cur_max; + unsigned int _locale_lc_codepage; +} __crt_locale_data_public; + +typedef struct __crt_locale_pointers +{ + struct __crt_locale_data* locinfo; + struct __crt_multibyte_data* mbcinfo; +} __crt_locale_pointers; + +typedef __crt_locale_pointers* _locale_t; + +typedef struct _Mbstatet +{ // state of a multibyte translation + unsigned long _Wchar; + unsigned short _Byte, _State; +} _Mbstatet; + +typedef _Mbstatet mbstate_t; + +#if defined _USE_32BIT_TIME_T && defined _WIN64 + #error You cannot use 32-bit time_t (_USE_32BIT_TIME_T) with _WIN64 +#endif + +#if defined _VCRT_BUILD || defined _CORECRT_BUILD + #define _CRT_NO_TIME_T +#endif + +#ifndef _CRT_NO_TIME_T + #ifdef _USE_32BIT_TIME_T + typedef __time32_t time_t; + #else + typedef __time64_t time_t; + #endif +#endif + +// Indicate that these common types are defined +#ifndef _TIME_T_DEFINED + #define _TIME_T_DEFINED +#endif + +#if __STDC_WANT_SECURE_LIB__ + typedef size_t rsize_t; +#endif + + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// C++ Secure Overload Generation Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef RC_INVOKED + #if defined __cplusplus && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(_ReturnType, _FuncName, _DstType, _Dst) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_Dst, _Size); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_Dst, _Size, _TArg1); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_Dst, _Size, _TArg1, _TArg2); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3, _TArg4); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_HArg1, _Dst, _Size, _TArg1); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_HArg1, _Dst, _Size, _TArg1, _TArg2); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_HArg1, _Dst, _Size, _TArg1, _TArg2, _TArg3); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0(_ReturnType, _FuncName, _HType1, _HArg1, _HType2, _HArg2, _DstType, _Dst) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _HType2 _HArg2, _DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_HArg1, _HArg2, _Dst, _Size); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg1); \ + return _VFuncName(_Dst, _Size, _TArg1, _ArgList); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg2); \ + return _VFuncName(_Dst, _Size, _TArg1, _TArg2, _ArgList); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(_ReturnType, _FuncName, _DstType, _Src) \ + extern "C++" \ + { \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName( \ + _In_z_ _DstType const* _Src, \ + _Post_z_ _DstType (&_Drive)[_DriveSize], \ + _Post_z_ _DstType (&_Dir)[_DirSize], \ + _Post_z_ _DstType (&_Name)[_NameSize], \ + _Post_z_ _DstType (&_Ext)[_ExtSize] \ + ) _CRT_SECURE_CPP_NOTHROW \ + { \ + return _FuncName(_Src, _Drive, _DriveSize, _Dir, _DirSize, _Name, _NameSize, _Ext, _ExtSize); \ + } \ + } + + #else // ^^^ _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES ^^^ // vvv !_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES vvv // + + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(_ReturnType, _FuncName, _DstType, _Dst) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(_ReturnType, _FuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3(_ReturnType, _FuncName, _HType1, _HArg1, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0(_ReturnType, _FuncName, _HType1, _HArg1, _HType2, _HArg2, _DstType, _Dst) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST(_ReturnType, _FuncName, _VFuncName, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + #define __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(_ReturnType, _FuncName, _DstType, _Src) + + #endif // !_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES +#endif + + + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _SalAttributeDst, _DstType, _Dst) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _FuncName##_s, _VFuncName, _VFuncName##_s, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _VFuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE(_DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE(_DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _SalAttributeDst, _DstType, _Dst) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _SalAttributeDst, _DstType, _DstType, _Dst, _TType1, _TArg1) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _FuncName##_s, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, __cdecl, _FuncName, _FuncName##_s, _VFuncName, _VFuncName##_s, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE(_DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + +#define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE(_DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _FuncName##_s, _DstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// C++ Standard Overload Generation Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef RC_INVOKED + #if defined __cplusplus && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES + + #define __RETURN_POLICY_SAME(_FunctionCall, _Dst) return (_FunctionCall) + #define __RETURN_POLICY_DST(_FunctionCall, _Dst) return ((_FunctionCall) == 0 ? _Dst : 0) + #define __RETURN_POLICY_VOID(_FunctionCall, _Dst) (_FunctionCall); return + #define __EMPTY_DECLSPEC + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst) \ + { \ + _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst); \ + return _FuncName(_Dst); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst)); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst)); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1]) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_CGETS(_ReturnType, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst) \ + { \ + _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst); \ + return _FuncName(_Dst); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst)); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst)); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \ + { \ + size_t _SizeRead = 0; \ + errno_t _Err = _FuncName##_s(_Dst + 2, (_Size - 2) < ((size_t)_Dst[0]) ? (_Size - 2) : ((size_t)_Dst[0]), &_SizeRead); \ + _Dst[1] = (_DstType)(_SizeRead); \ + return (_Err == 0 ? _Dst + 2 : 0); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1]) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName((_DstType *)_Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName<2>(_DstType (&_Dst)[2]) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName((_DstType *)_Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1) \ + { \ + _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1); \ + return _FuncName(_Dst, _TArg1); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); \ + return _FuncName(_Dst, _TArg1, _TArg2); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1, _TArg2), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1, _TArg2), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) \ + { \ + _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); \ + return _FuncName(_Dst, _TArg1, _TArg2, _TArg3); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2, _TArg3); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1, _TArg2, _TArg3), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) \ + { \ + _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4); \ + return _FuncName(_Dst, _TArg1, _TArg2, _TArg3, _TArg4); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3, _TArg4); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3, _TArg4); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2, _TArg3, _TArg4); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3, _TArg4), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1, _TArg2, _TArg3, _TArg4), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_HType1 _HArg1, _SalAttributeDst _DstType *_Dst, _TType1 _TArg1) \ + { \ + _ReturnType __cdecl _FuncName(_HType1 _HArg1, _SalAttributeDst _DstType *_Dst, _TType1 _TArg1); \ + return _FuncName(_HArg1, _Dst, _TArg1); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _T &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_HArg1, static_cast<_DstType *>(_Dst), _TArg1); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, const _T &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_HArg1, static_cast<_DstType *>(_Dst), _TArg1); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _SalAttributeDst _DstType * &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_HArg1, _Dst, _TArg1); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _DstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_HArg1, _Dst, _Size, _TArg1), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_HType1 _HArg1, _DstType (&_Dst)[1], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_HArg1, _Dst, 1, _TArg1), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_HType1 _HArg1, _HType2 _HArg2, _SalAttributeDst _DstType *_Dst) \ + { \ + _ReturnType __cdecl _FuncName(_HType1 _HArg1, _HType2 _HArg2, _SalAttributeDst _DstType *_Dst); \ + return _FuncName(_HArg1, _HArg2, _Dst); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _HType2 _HArg2, _T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_HArg1, _HArg2, static_cast<_DstType *>(_Dst)); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _HType2 _HArg2, const _T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_HArg1, _HArg2, static_cast<_DstType *>(_Dst)); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _HType2 _HArg2, _SalAttributeDst _DstType * &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_HArg1, _HArg2, _Dst); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_HType1 _HArg1, _HType2 _HArg2, _DstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_HArg1, _HArg2, _Dst, _Size), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_HType1 _HArg1, _HType2 _HArg2, _DstType (&_Dst)[1]) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_HArg1, _HArg2, _Dst, 1), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _SecureFuncName, _VFuncName, _SecureVFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, va_list _ArgList) \ + { \ + _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, va_list _ArgList); \ + return _VFuncName(_Dst, _TArg1, _ArgList); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg1); \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _ArgList); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg1); \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _ArgList); \ + } \ + \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg1); \ + return __insecure_##_VFuncName(_Dst, _TArg1, _ArgList); \ + } \ + \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg1); \ + _ReturnPolicy(_SecureVFuncName(_Dst, _Size, _TArg1, _ArgList), _Dst); \ + } \ + \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg1); \ + _ReturnPolicy(_SecureVFuncName(_Dst, 1, _TArg1, _ArgList), _Dst); \ + } \ + \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName(_T &_Dst, _TType1 _TArg1, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _ArgList); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName(const _T &_Dst, _TType1 _TArg1, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _ArgList); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName(_SalAttributeDst _DstType *&_Dst, _TType1 _TArg1, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_VFuncName(_Dst, _TArg1, _ArgList); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _VFuncName(_DstType (&_Dst)[_Size], _TType1 _TArg1, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureVFuncName(_Dst, _Size, _TArg1, _ArgList), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureVFuncName(_Dst, 1, _TArg1, _ArgList), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SecureVFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList) \ + { \ + _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList); \ + return _VFuncName(_Dst, _TArg1, _TArg2, _ArgList); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg2); \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _ArgList); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg2); \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _ArgList); \ + } \ + \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg2); \ + return __insecure_##_VFuncName(_Dst, _TArg1, _TArg2, _ArgList); \ + } \ + \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg2); \ + _ReturnPolicy(_SecureVFuncName(_Dst, _Size, _TArg1, _TArg2, _ArgList), _Dst); \ + } \ + \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2, ...) _CRT_SECURE_CPP_NOTHROW \ + { \ + va_list _ArgList; \ + __crt_va_start(_ArgList, _TArg2); \ + _ReturnPolicy(_SecureVFuncName(_Dst, 1, _TArg1, _TArg2, _ArgList), _Dst); \ + } \ + \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _ArgList); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_VFuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _ArgList); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName(_SalAttributeDst _DstType *&_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_VFuncName(_Dst, _TArg1, _TArg2, _ArgList); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _VFuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureVFuncName(_Dst, _Size, _TArg1, _TArg2, _ArgList), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) \ + _ReturnType __CRTDECL _VFuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2, va_list _ArgList) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureVFuncName(_Dst, 1, _TArg1, _TArg2, _ArgList), _Dst); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __inline \ + size_t __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2) \ + { \ + _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); \ + return _FuncName(_Dst, _TArg1, _TArg2); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2); \ + } \ + template \ + inline \ + size_t __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + size_t _Ret = 0; \ + _SecureFuncName(&_Ret, _Dst, _Size, _TArg1, _TArg2); \ + return (_Ret > 0 ? (_Ret - 1) : _Ret); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + size_t _Ret = 0; \ + _SecureFuncName(&_Ret, _Dst, 1, _TArg1, _TArg2); \ + return (_Ret > 0 ? (_Ret - 1) : _Ret); \ + } \ + } + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __inline \ + size_t __CRTDECL __insecure_##_FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) \ + { \ + _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); \ + return _FuncName(_Dst, _TArg1, _TArg2, _TArg3); \ + } \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2, _TArg3); \ + } \ + template \ + inline \ + size_t __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + size_t _Ret = 0; \ + _SecureFuncName(&_Ret, _Dst, _Size, _TArg1, _TArg2, _TArg3); \ + return (_Ret > 0 ? (_Ret - 1) : _Ret); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + size_t __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + size_t _Ret = 0; \ + _SecureFuncName(&_Ret, _Dst, 1, _TArg1, _TArg2, _TArg3); \ + return (_Ret > 0 ? (_Ret - 1) : _Ret); \ + } \ + } + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_DstType *_Dst) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst)); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst)); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_DstType * &_Dst) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size]) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1]) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1), _Dst); \ + } \ + } + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_DstType *_Dst, _TType1 _TArg1) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_DstType * &_Dst, _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1), _Dst); \ + } \ + } + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1, _TArg2), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1, _TArg2), _Dst); \ + } \ + } + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __inline \ + _ReturnType __CRTDECL __insecure_##_FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + extern "C++" \ + { \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3); \ + } \ + template \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(const _T &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(static_cast<_DstType *>(_Dst), _TArg1, _TArg2, _TArg3); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName(_SalAttributeDst _DstType * &_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + return __insecure_##_FuncName(_Dst, _TArg1, _TArg2, _TArg3); \ + } \ + template \ + inline \ + _ReturnType __CRTDECL _FuncName(_SecureDstType (&_Dst)[_Size], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, _Size, _TArg1, _TArg2, _TArg3), _Dst); \ + } \ + template <> \ + inline \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + _ReturnType __CRTDECL _FuncName<1>(_DstType (&_Dst)[1], _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) _CRT_SECURE_CPP_NOTHROW \ + { \ + _ReturnPolicy(_SecureFuncName(_Dst, 1, _TArg1, _TArg2, _TArg3), _Dst); \ + } \ + } + + #if _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_CGETS(_ReturnType, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_CGETS(_ReturnType, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _SecureFuncName, _VFuncName, _SecureVFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _SecureFuncName, _VFuncName, _SecureVFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, __cdecl, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _VFuncName##_s, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType _DstType, _Dst) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType _DstType, _Dst, _TType1, _TArg1) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + #else // ^^^ _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT ^^^ // vvv _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT vvv // + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_GETS(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType __cdecl _FuncName(_DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_HType1 _HArg1, _SalAttributeDst _DstType *_Dst, _TType1 _TArg1); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_HType1 _HArg1, _HType2 _HArg2, _SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _SecureFuncName,_VFuncName, _SecureVFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType _CC _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, ...); \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) _DeclSpec _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, ...); \ + _CRT_INSECURE_DEPRECATE(_VFuncName##_s) _DeclSpec _ReturnType __cdecl _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType _CC _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, ...); \ + _CRT_INSECURE_DEPRECATE(_VFuncName##_s) _DeclSpec _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); + + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + #endif // !_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT + + #else // ^^^ _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES ^^^ // vvv !_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES vvv // + + #define __RETURN_POLICY_SAME(_FunctionCall) + #define __RETURN_POLICY_DST(_FunctionCall) + #define __RETURN_POLICY_VOID(_FunctionCall) + #define __EMPTY_DECLSPEC + + #if _CRT_FUNCTIONS_REQUIRED + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_CGETS(_ReturnType, _DeclSpec, _FuncName, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_HType1 _HArg1, _SalAttributeDst _DstType *_Dst, _TType1 _TArg1); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_HType1 _HArg1, _HType2 _HArg2, _SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _SecureFuncName, _VFuncName, _SecureVFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType _CC _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, ...); \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) _DeclSpec _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SecureVFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType _CC _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, ...); \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) _DeclSpec _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_GETS(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType __cdecl _FuncName(_DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3, _TType4, _TArg4) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3, _TType4 _TArg4); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_HType1 _HArg1, _SalAttributeDst _DstType *_Dst, _TType1 _TArg1); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _SecureFuncName, _HType1, _HArg1, _HType2, _HArg2, _SalAttributeDst, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType __cdecl _FuncName(_HType1 _HArg1, _HType2 _HArg2, _SalAttributeDst _DstType *_Dst); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _SecureFuncName, _VFuncName, _SecureVFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec _ReturnType _CC _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, ...); \ + _CRT_INSECURE_DEPRECATE(_SecureVFuncName) _DeclSpec _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST(_ReturnType, _ReturnPolicy, _DeclSpec, _FuncName, _VFuncName, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, ...); \ + _CRT_INSECURE_DEPRECATE(_VFuncName##_s) _DeclSpec _ReturnType __cdecl _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX(_ReturnType, _ReturnPolicy, _DeclSpec, _CC, _FuncName, _VFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_FuncName##_s) _DeclSpec _ReturnType _CC _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, ...); \ + _CRT_INSECURE_DEPRECATE(_VFuncName##_s) _DeclSpec _ReturnType _CC _VFuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, va_list _Args); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2); + + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(_DeclSpec, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) _DeclSpec size_t __cdecl _FuncName(_SalAttributeDst _DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3); + + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) + + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2) + + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) \ + _CRT_INSECURE_DEPRECATE(_SecureFuncName) \ + __inline \ + _ReturnType __CRTDECL _FuncName(_DstType *_Dst, _TType1 _TArg1, _TType2 _TArg2, _TType3 _TArg3) + + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(_ReturnType, _ReturnPolicy, _FuncName, _SecureFuncName, _SecureDstType, _SalAttributeDst, _DstType, _Dst, _TType1, _TArg1, _TType2, _TArg2, _TType3, _TArg3) + + #else // ^^^ _CRT_FUNCTIONS_REQUIRED ^^^ // vvv !_CRT_FUNCTIONS_REQUIRED vvv // + + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_CGETS(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_3_SIZE_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_0_GETS(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_4_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_1_1_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_2_0_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_1_ARGLIST_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE_EX(...) + #define __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_3_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_0_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_1_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(...) + #define __DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(...) + #define __DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(...) + + #endif // !_CRT_FUNCTIONS_REQUIRED + #endif // !_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES +#endif + +_CRT_END_C_HEADER + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_io.h b/sdk/include/ucrt/corecrt_io.h new file mode 100644 index 0000000000000..5beefbc881225 --- /dev/null +++ b/sdk/include/ucrt/corecrt_io.h @@ -0,0 +1,572 @@ +// +// corecrt_io.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the low-level I/O and file handling functionality. These +// declarations are split out to support the Windows build. +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _USE_32BIT_TIME_T + #define _finddata_t _finddata32_t + #define _finddatai64_t _finddata32i64_t +#else + #define _finddata_t _finddata64i32_t + #define _finddatai64_t __finddata64_t +#endif + +struct _finddata32_t +{ + unsigned attrib; + __time32_t time_create; // -1 for FAT file systems + __time32_t time_access; // -1 for FAT file systems + __time32_t time_write; + _fsize_t size; + char name[260]; +}; + +struct _finddata32i64_t +{ + unsigned attrib; + __time32_t time_create; // -1 for FAT file systems + __time32_t time_access; // -1 for FAT file systems + __time32_t time_write; + __int64 size; + char name[260]; +}; + +struct _finddata64i32_t +{ + unsigned attrib; + __time64_t time_create; // -1 for FAT file systems + __time64_t time_access; // -1 for FAT file systems + __time64_t time_write; + _fsize_t size; + char name[260]; +}; + +struct __finddata64_t +{ + unsigned attrib; + __time64_t time_create; // -1 for FAT file systems + __time64_t time_access; // -1 for FAT file systems + __time64_t time_write; + __int64 size; + char name[260]; +}; + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// File attribute constants for the _findfirst() family of functions +#define _A_NORMAL 0x00 // Normal file - No read/write restrictions +#define _A_RDONLY 0x01 // Read only file +#define _A_HIDDEN 0x02 // Hidden file +#define _A_SYSTEM 0x04 // System file +#define _A_SUBDIR 0x10 // Subdirectory +#define _A_ARCH 0x20 // Archive file + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _USE_32BIT_TIME_T + #define _findfirst _findfirst32 + #define _findnext _findnext32 + #define _findfirsti64 _findfirst32i64 + #define _findnexti64 _findnext32i64 +#else + #define _findfirst _findfirst64i32 + #define _findnext _findnext64i32 + #define _findfirsti64 _findfirst64 + #define _findnexti64 _findnext64 +#endif + +#if _CRT_FUNCTIONS_REQUIRED + + _Check_return_ + _ACRTIMP int __cdecl _access( + _In_z_ char const* _FileName, + _In_ int _AccessMode + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _access_s( + _In_z_ char const* _FileName, + _In_ int _AccessMode + ); + + _Check_return_ + _ACRTIMP int __cdecl _chmod( + _In_z_ char const* _FileName, + _In_ int _Mode + ); + + _Check_return_ + _ACRTIMP int __cdecl _chsize( + _In_ int _FileHandle, + _In_ long _Size + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _chsize_s( + _In_ int _FileHandle, + _In_ __int64 _Size + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _close( + _In_ int _FileHandle + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _commit( + _In_ int _FileHandle + ); + + _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) + _ACRTIMP int __cdecl _creat( + _In_z_ char const* _FileName, + _In_ int _PermissionMode + ); + + _Check_return_ + _ACRTIMP int __cdecl _dup( + _In_ int _FileHandle + ); + + _Check_return_ + _ACRTIMP int __cdecl _dup2( + _In_ int _FileHandleSrc, + _In_ int _FileHandleDst + ); + + _Check_return_ + _ACRTIMP int __cdecl _eof( + _In_ int _FileHandle + ); + + _Check_return_ + _ACRTIMP long __cdecl _filelength( + _In_ int _FileHandle + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP intptr_t __cdecl _findfirst32( + _In_z_ char const* _FileName, + _Out_ struct _finddata32_t* _FindData + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP int __cdecl _findnext32( + _In_ intptr_t _FindHandle, + _Out_ struct _finddata32_t* _FindData + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _findclose( + _In_ intptr_t _FindHandle + ); + + _ACRTIMP intptr_t __cdecl _get_osfhandle( + _In_ int _FileHandle + ); + + _Check_return_ + _ACRTIMP int __cdecl _isatty( + _In_ int _FileHandle + ); + + _ACRTIMP int __cdecl _locking( + _In_ int _FileHandle, + _In_ int _LockMode, + _In_ long _NumOfBytes + ); + + _Check_return_opt_ + _ACRTIMP long __cdecl _lseek( + _In_ int _FileHandle, + _In_ long _Offset, + _In_ int _Origin + ); + + _Success_(return == 0) + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _mktemp_s( + _Inout_updates_z_(_Size) char* _TemplateName, + _In_ size_t _Size + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _mktemp_s, + _Prepost_z_ char, _TemplateName + ) + + _Success_(return != 0) + _Check_return_ __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + char *, __RETURN_POLICY_DST, _ACRTIMP, _mktemp, + _Inout_z_, char, _TemplateName + ) + + _ACRTIMP int __cdecl _open_osfhandle( + _In_ intptr_t _OSFileHandle, + _In_ int _Flags + ); + + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + _Success_(return != -1) + _Check_return_ + _DCRTIMP int __cdecl _pipe( + _Out_writes_(2) int* _PtHandles, + _In_ unsigned int _PipeSize, + _In_ int _TextMode + ); + #endif + + _Success_(return != -1) + _Check_return_ + _ACRTIMP int __cdecl _read( + _In_ int _FileHandle, + _Out_writes_bytes_(_MaxCharCount) void* _DstBuf, + _In_ unsigned int _MaxCharCount + ); + + _ACRTIMP int __cdecl remove( + _In_z_ char const* _FileName + ); + + _Check_return_ + _ACRTIMP int __cdecl rename( + _In_z_ char const* _OldFilename, + _In_z_ char const* _NewFilename + ); + + _ACRTIMP int __cdecl _unlink( + _In_z_ char const* _FileName + ); + + _Check_return_ + _ACRTIMP int __cdecl _setmode( + _In_ int _FileHandle, + _In_ int _Mode + ); + + _Check_return_ + _ACRTIMP long __cdecl _tell( + _In_ int _FileHandle + ); + + _CRT_INSECURE_DEPRECATE(_umask_s) + _ACRTIMP int __cdecl _umask( + _In_ int _Mode + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _umask_s( + _In_ int _NewMode, + _Out_ int* _OldMode + ); + + _ACRTIMP int __cdecl _write( + _In_ int _FileHandle, + _In_reads_bytes_(_MaxCharCount) void const* _Buf, + _In_ unsigned int _MaxCharCount + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _filelengthi64( + _In_ int _FileHandle + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP intptr_t __cdecl _findfirst32i64( + _In_z_ char const* _FileName, + _Out_ struct _finddata32i64_t* _FindData + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP intptr_t __cdecl _findfirst64i32( + _In_z_ char const* _FileName, + _Out_ struct _finddata64i32_t* _FindData + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP intptr_t __cdecl _findfirst64( + _In_z_ char const* _FileName, + _Out_ struct __finddata64_t* _FindData + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP int __cdecl _findnext32i64( + _In_ intptr_t _FindHandle, + _Out_ struct _finddata32i64_t* _FindData + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP int __cdecl _findnext64i32( + _In_ intptr_t _FindHandle, + _Out_ struct _finddata64i32_t* _FindData + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP int __cdecl _findnext64( + _In_ intptr_t _FindHandle, + _Out_ struct __finddata64_t* _FindData + ); + + _Check_return_opt_ + _ACRTIMP __int64 __cdecl _lseeki64( + _In_ int _FileHandle, + _In_ __int64 _Offset, + _In_ int _Origin + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _telli64( + _In_ int _FileHandle + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _sopen_s( + _Out_ int* _FileHandle, + _In_z_ char const* _FileName, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + _In_ int _PermissionMode + ); + + _Check_return_ + _ACRTIMP errno_t __cdecl _sopen_s_nolock( + _Out_ int* _FileHandle, + _In_z_ char const* _FileName, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + _In_ int _PermissionMode + ); + + _ACRTIMP errno_t __cdecl _sopen_dispatch( + _In_z_ char const* _FileName, + _In_ int _OFlag, + _In_ int _ShFlag, + _In_ int _PMode, + _Out_ int* _PFileHandle, + _In_ int _BSecure + ); + + + + #ifdef __cplusplus + + // These function do not validate pmode; use _sopen_s instead. + extern "C++" _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) + inline int __CRTDECL _open( + _In_z_ char const* const _FileName, + _In_ int const _OFlag, + _In_ int const _PMode = 0 + ) + { + int _FileHandle; + // Last parameter passed as 0 because we don't want to validate pmode from _open + errno_t const _Result = _sopen_dispatch(_FileName, _OFlag, _SH_DENYNO, _PMode, &_FileHandle, 0); + return _Result ? -1 : _FileHandle; + } + + extern "C++" _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) + inline int __CRTDECL _sopen( + _In_z_ char const* const _FileName, + _In_ int const _OFlag, + _In_ int const _ShFlag, + _In_ int const _PMode = 0 + ) + { + int _FileHandle; + // Last parameter passed as 0 because we don't want to validate pmode from _sopen + errno_t const _Result = _sopen_dispatch(_FileName, _OFlag, _ShFlag, _PMode, &_FileHandle, 0); + return _Result ? -1 : _FileHandle; + } + + #else + + _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) + _ACRTIMP int __cdecl _open( + _In_z_ char const* _FileName, + _In_ int _OpenFlag, + ...); + + _Check_return_ _CRT_INSECURE_DEPRECATE(_sopen_s) + _ACRTIMP int __cdecl _sopen( + _In_z_ char const* _FileName, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + ...); + + #endif + + + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + // Suppress warnings about double deprecation + #pragma warning(push) + #pragma warning(disable: 4141) + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_access) + _ACRTIMP int __cdecl access( + _In_z_ char const* _FileName, + _In_ int _AccessMode + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_chmod) + _ACRTIMP int __cdecl chmod( + _In_z_ char const* _FileName, + _In_ int _AccessMode + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_chsize) + _ACRTIMP int __cdecl chsize( + _In_ int _FileHandle, + _In_ long _Size + ); + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_close) + _ACRTIMP int __cdecl close( + _In_ int _FileHandle + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_creat) _CRT_INSECURE_DEPRECATE(_sopen_s) + _ACRTIMP int __cdecl creat( + _In_z_ char const* _FileName, + _In_ int _PermissionMode + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_dup) + _ACRTIMP int __cdecl dup( + _In_ int _FileHandle + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_dup2) + _ACRTIMP int __cdecl dup2( + _In_ int _FileHandleSrc, + _In_ int _FileHandleDst + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_eof) + _ACRTIMP int __cdecl eof( + _In_ int _FileHandle + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_filelength) + _ACRTIMP long __cdecl filelength( + _In_ int _FileHandle + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_isatty) + _ACRTIMP int __cdecl isatty( + _In_ int _FileHandle + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_locking) + _ACRTIMP int __cdecl locking( + _In_ int _FileHandle, + _In_ int _LockMode, + _In_ long _NumOfBytes + ); + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_lseek) + _ACRTIMP long __cdecl lseek( + _In_ int _FileHandle, + _In_ long _Offset, + _In_ int _Origin + ); + + _Success_(return != 0) + _CRT_NONSTDC_DEPRECATE(_mktemp) _CRT_INSECURE_DEPRECATE(_mktemp_s) + _ACRTIMP char * __cdecl mktemp( + _Inout_z_ char* _TemplateName + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_open) _CRT_INSECURE_DEPRECATE(_sopen_s) + _ACRTIMP int __cdecl open( + _In_z_ char const* _FileName, + _In_ int _OpenFlag, + ...); + + _Success_(return != -1) + _CRT_NONSTDC_DEPRECATE(_read) + _ACRTIMP int __cdecl read( + _In_ int _FileHandle, + _Out_writes_bytes_(_MaxCharCount) void* _DstBuf, + _In_ unsigned int _MaxCharCount + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_setmode) + _ACRTIMP int __cdecl setmode( + _In_ int _FileHandle, + _In_ int _Mode + ); + + _CRT_NONSTDC_DEPRECATE(_sopen) _CRT_INSECURE_DEPRECATE(_sopen_s) + _ACRTIMP int __cdecl sopen( + _In_ char const* _FileName, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + ...); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_tell) + _ACRTIMP long __cdecl tell( + _In_ int _FileHandle + ); + + _CRT_NONSTDC_DEPRECATE(_umask) _CRT_INSECURE_DEPRECATE(_umask_s) + _ACRTIMP int __cdecl umask( + _In_ int _Mode + ); + + _CRT_NONSTDC_DEPRECATE(_unlink) + _ACRTIMP int __cdecl unlink( + _In_z_ char const* _FileName + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_write) + _ACRTIMP int __cdecl write( + _In_ int _FileHandle, + _In_reads_bytes_(_MaxCharCount) void const* _Buf, + _In_ unsigned int _MaxCharCount + ); + + #pragma warning(pop) + #endif // _CRT_INTERNAL_NONSTDC_NAMES +#endif // _CRT_FUNCTIONS_REQUIRED + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_malloc.h b/sdk/include/ucrt/corecrt_malloc.h new file mode 100644 index 0000000000000..b6d90bdf9759b --- /dev/null +++ b/sdk/include/ucrt/corecrt_malloc.h @@ -0,0 +1,234 @@ +// +// corecrt_malloc.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The memory allocation library. These pieces of the allocation library are +// shared by both and . +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma push_macro("_aligned_free") + #pragma push_macro("_aligned_malloc") + #pragma push_macro("_aligned_msize") + #pragma push_macro("_aligned_offset_malloc") + #pragma push_macro("_aligned_offset_realloc") + #pragma push_macro("_aligned_offset_recalloc") + #pragma push_macro("_aligned_realloc") + #pragma push_macro("_aligned_recalloc") + #pragma push_macro("_expand") + #pragma push_macro("_freea") + #pragma push_macro("_msize") + #pragma push_macro("_recalloc") + #pragma push_macro("calloc") + #pragma push_macro("free") + #pragma push_macro("malloc") + #pragma push_macro("realloc") + + #undef _aligned_free + #undef _aligned_malloc + #undef _aligned_msize + #undef _aligned_offset_malloc + #undef _aligned_offset_realloc + #undef _aligned_offset_recalloc + #undef _aligned_realloc + #undef _aligned_recalloc + #undef _expand + #undef _freea + #undef _msize + #undef _recalloc + #undef calloc + #undef free + #undef malloc + #undef realloc +#endif + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _calloc_base( + _In_ size_t _Count, + _In_ size_t _Size + ); + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) +_ACRTIMP _CRT_JIT_INTRINSIC _CRTALLOCATOR _CRTRESTRICT _CRT_HYBRIDPATCHABLE +void* __cdecl calloc( + _In_ _CRT_GUARDOVERFLOW size_t _Count, + _In_ _CRT_GUARDOVERFLOW size_t _Size + ); + +_Check_return_ +_ACRTIMP int __cdecl _callnewh( + _In_ size_t _Size + ); + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRT_HYBRIDPATCHABLE +void* __cdecl _expand( + _Pre_notnull_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Size + ); + +_ACRTIMP +void __cdecl _free_base( + _Pre_maybenull_ _Post_invalid_ void* _Block + ); + +_ACRTIMP _CRT_HYBRIDPATCHABLE +void __cdecl free( + _Pre_maybenull_ _Post_invalid_ void* _Block + ); + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _malloc_base( + _In_ size_t _Size + ); + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRT_JIT_INTRINSIC _CRTRESTRICT _CRT_HYBRIDPATCHABLE +void* __cdecl malloc( + _In_ _CRT_GUARDOVERFLOW size_t _Size + ); + +_Check_return_ +_ACRTIMP +size_t __cdecl _msize_base( + _Pre_notnull_ void* _Block + ) _CRT_NOEXCEPT; + +_Check_return_ +_ACRTIMP _CRT_HYBRIDPATCHABLE +size_t __cdecl _msize( + _Pre_notnull_ void* _Block + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _realloc_base( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Size + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT _CRT_HYBRIDPATCHABLE +void* __cdecl realloc( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Size + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _recalloc_base( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Count, + _In_ size_t _Size + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _recalloc( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Count, + _In_ _CRT_GUARDOVERFLOW size_t _Size + ); + +_ACRTIMP +void __cdecl _aligned_free( + _Pre_maybenull_ _Post_invalid_ void* _Block + ); + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _aligned_malloc( + _In_ _CRT_GUARDOVERFLOW size_t _Size, + _In_ size_t _Alignment + ); + +_Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _aligned_offset_malloc( + _In_ _CRT_GUARDOVERFLOW size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset + ); + +_Check_return_ +_ACRTIMP +size_t __cdecl _aligned_msize( + _Pre_notnull_ void* _Block, + _In_ size_t _Alignment, + _In_ size_t _Offset + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _aligned_offset_realloc( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _aligned_offset_recalloc( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Count, + _In_ _CRT_GUARDOVERFLOW size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _aligned_realloc( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Size, + _In_ size_t _Alignment + ); + +_Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) +_ACRTIMP _CRTALLOCATOR _CRTRESTRICT +void* __cdecl _aligned_recalloc( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ _CRT_GUARDOVERFLOW size_t _Count, + _In_ _CRT_GUARDOVERFLOW size_t _Size, + _In_ size_t _Alignment + ); + +#if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma pop_macro("realloc") + #pragma pop_macro("malloc") + #pragma pop_macro("free") + #pragma pop_macro("calloc") + #pragma pop_macro("_recalloc") + #pragma pop_macro("_msize") + #pragma pop_macro("_freea") + #pragma pop_macro("_expand") + #pragma pop_macro("_aligned_recalloc") + #pragma pop_macro("_aligned_realloc") + #pragma pop_macro("_aligned_offset_recalloc") + #pragma pop_macro("_aligned_offset_realloc") + #pragma pop_macro("_aligned_offset_malloc") + #pragma pop_macro("_aligned_msize") + #pragma pop_macro("_aligned_malloc") + #pragma pop_macro("_aligned_free") +#endif + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_math.h b/sdk/include/ucrt/corecrt_math.h new file mode 100644 index 0000000000000..fdfe1f02e6607 --- /dev/null +++ b/sdk/include/ucrt/corecrt_math.h @@ -0,0 +1,998 @@ +// +// corecrt_math.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The majority of the C Standard Library functionality. +// +#pragma once +#ifndef _INC_MATH // include guard for 3rd party interop +#define _INC_MATH + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#ifndef __assembler + // Definition of the _exception struct, which is passed to the matherr function + // when a floating point exception is detected: + struct _exception + { + int type; // exception type - see below + char* name; // name of function where error occurred + double arg1; // first argument to function + double arg2; // second argument (if any) to function + double retval; // value to be returned by function + }; + + // Definition of the _complex struct to be used by those who use the complex + // functions and want type checking. + #ifndef _COMPLEX_DEFINED + #define _COMPLEX_DEFINED + + struct _complex + { + double x, y; // real and imaginary parts + }; + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined __cplusplus + // Non-ANSI name for compatibility + #define complex _complex + #endif + #endif +#endif // __assembler + + + +// On x86, when not using /arch:SSE2 or greater, floating point operations +// are performed using the x87 instruction set and FLT_EVAL_METHOD is 2. +// (When /fp:fast is used, floating point operations may be consistent, so +// we use the default types.) +#if defined _M_IX86 && _M_IX86_FP < 2 && !defined _M_FP_FAST + typedef long double float_t; + typedef long double double_t; +#else + typedef float float_t; + typedef double double_t; +#endif + + + +// Constant definitions for the exception type passed in the _exception struct +#define _DOMAIN 1 // argument domain error +#define _SING 2 // argument singularity +#define _OVERFLOW 3 // overflow range error +#define _UNDERFLOW 4 // underflow range error +#define _TLOSS 5 // total loss of precision +#define _PLOSS 6 // partial loss of precision + +// Definitions of _HUGE and HUGE_VAL - respectively the XENIX and ANSI names +// for a value returned in case of error by a number of the floating point +// math routines. +#ifndef __assembler + #ifndef _M_CEE_PURE + extern double const _HUGE; + #else + double const _HUGE = System::Double::PositiveInfinity; + #endif +#endif + +#ifndef _HUGE_ENUF + #define _HUGE_ENUF 1e+300 // _HUGE_ENUF*_HUGE_ENUF must overflow +#endif + +#define INFINITY ((float)(_HUGE_ENUF * _HUGE_ENUF)) +#define HUGE_VAL ((double)INFINITY) +#define HUGE_VALF ((float)INFINITY) +#define HUGE_VALL ((long double)INFINITY) +#ifndef _UCRT_NEGATIVE_NAN +// This operation creates a negative NAN adding a - to make it positive +#define NAN (-(float)(INFINITY * 0.0F)) +#else +// Keep this for backwards compatibility +#define NAN ((float)(INFINITY * 0.0F)) +#endif + +#define _DENORM (-2) +#define _FINITE (-1) +#define _INFCODE 1 +#define _NANCODE 2 + +#define FP_INFINITE _INFCODE +#define FP_NAN _NANCODE +#define FP_NORMAL _FINITE +#define FP_SUBNORMAL _DENORM +#define FP_ZERO 0 + +#define _C2 1 // 0 if not 2's complement +#define FP_ILOGB0 (-0x7fffffff - _C2) +#define FP_ILOGBNAN 0x7fffffff + +#define MATH_ERRNO 1 +#define MATH_ERREXCEPT 2 +#define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT) + +// Values for use as arguments to the _fperrraise function +#define _FE_DIVBYZERO 0x04 +#define _FE_INEXACT 0x20 +#define _FE_INVALID 0x01 +#define _FE_OVERFLOW 0x08 +#define _FE_UNDERFLOW 0x10 + +#define _D0_C 3 // little-endian, small long doubles +#define _D1_C 2 +#define _D2_C 1 +#define _D3_C 0 + +#define _DBIAS 0x3fe +#define _DOFF 4 + +#define _F0_C 1 // little-endian +#define _F1_C 0 + +#define _FBIAS 0x7e +#define _FOFF 7 +#define _FRND 1 + +#define _L0_C 3 // little-endian, 64-bit long doubles +#define _L1_C 2 +#define _L2_C 1 +#define _L3_C 0 + +#define _LBIAS 0x3fe +#define _LOFF 4 + +// IEEE 754 double properties +#define _DFRAC ((unsigned short)((1 << _DOFF) - 1)) +#define _DMASK ((unsigned short)(0x7fff & ~_DFRAC)) +#define _DMAX ((unsigned short)((1 << (15 - _DOFF)) - 1)) +#define _DSIGN ((unsigned short)0x8000) + +// IEEE 754 float properties +#define _FFRAC ((unsigned short)((1 << _FOFF) - 1)) +#define _FMASK ((unsigned short)(0x7fff & ~_FFRAC)) +#define _FMAX ((unsigned short)((1 << (15 - _FOFF)) - 1)) +#define _FSIGN ((unsigned short)0x8000) + +// IEEE 754 long double properties +#define _LFRAC ((unsigned short)(-1)) +#define _LMASK ((unsigned short)0x7fff) +#define _LMAX ((unsigned short)0x7fff) +#define _LSIGN ((unsigned short)0x8000) + +#define _DHUGE_EXP (int)(_DMAX * 900L / 1000) +#define _FHUGE_EXP (int)(_FMAX * 900L / 1000) +#define _LHUGE_EXP (int)(_LMAX * 900L / 1000) + +#define _DSIGN_C(_Val) (((_double_val *)(char*)&(_Val))->_Sh[_D0_C] & _DSIGN) +#define _FSIGN_C(_Val) (((_float_val *)(char*)&(_Val))->_Sh[_F0_C] & _FSIGN) +#define _LSIGN_C(_Val) (((_ldouble_val*)(char*)&(_Val))->_Sh[_L0_C] & _LSIGN) + +void __cdecl _fperrraise(_In_ int _Except); + +_Check_return_ _ACRTIMP short __cdecl _dclass(_In_ double _X); +_Check_return_ _ACRTIMP short __cdecl _ldclass(_In_ long double _X); +_Check_return_ _ACRTIMP short __cdecl _fdclass(_In_ float _X); + +_Check_return_ _ACRTIMP int __cdecl _dsign(_In_ double _X); +_Check_return_ _ACRTIMP int __cdecl _ldsign(_In_ long double _X); +_Check_return_ _ACRTIMP int __cdecl _fdsign(_In_ float _X); + +_Check_return_ _ACRTIMP int __cdecl _dpcomp(_In_ double _X, _In_ double _Y); +_Check_return_ _ACRTIMP int __cdecl _ldpcomp(_In_ long double _X, _In_ long double _Y); +_Check_return_ _ACRTIMP int __cdecl _fdpcomp(_In_ float _X, _In_ float _Y); + +_Check_return_ _ACRTIMP short __cdecl _dtest(_In_ double* _Px); +_Check_return_ _ACRTIMP short __cdecl _ldtest(_In_ long double* _Px); +_Check_return_ _ACRTIMP short __cdecl _fdtest(_In_ float* _Px); + +_ACRTIMP short __cdecl _d_int(_Inout_ double* _Px, _In_ short _Xexp); +_ACRTIMP short __cdecl _ld_int(_Inout_ long double* _Px, _In_ short _Xexp); +_ACRTIMP short __cdecl _fd_int(_Inout_ float* _Px, _In_ short _Xexp); + +_ACRTIMP short __cdecl _dscale(_Inout_ double* _Px, _In_ long _Lexp); +_ACRTIMP short __cdecl _ldscale(_Inout_ long double* _Px, _In_ long _Lexp); +_ACRTIMP short __cdecl _fdscale(_Inout_ float* _Px, _In_ long _Lexp); + +_ACRTIMP short __cdecl _dunscale(_Out_ short* _Pex, _Inout_ double* _Px); +_ACRTIMP short __cdecl _ldunscale(_Out_ short* _Pex, _Inout_ long double* _Px); +_ACRTIMP short __cdecl _fdunscale(_Out_ short* _Pex, _Inout_ float* _Px); + +_Check_return_ _ACRTIMP short __cdecl _dexp(_Inout_ double* _Px, _In_ double _Y, _In_ long _Eoff); +_Check_return_ _ACRTIMP short __cdecl _ldexp(_Inout_ long double* _Px, _In_ long double _Y, _In_ long _Eoff); +_Check_return_ _ACRTIMP short __cdecl _fdexp(_Inout_ float* _Px, _In_ float _Y, _In_ long _Eoff); + +_Check_return_ _ACRTIMP short __cdecl _dnorm(_Inout_updates_(4) unsigned short* _Ps); +_Check_return_ _ACRTIMP short __cdecl _fdnorm(_Inout_updates_(2) unsigned short* _Ps); + +_Check_return_ _ACRTIMP double __cdecl _dpoly(_In_ double _X, _In_reads_(_N) double const* _Tab, _In_ int _N); +_Check_return_ _ACRTIMP long double __cdecl _ldpoly(_In_ long double _X, _In_reads_(_N) long double const* _Tab, _In_ int _N); +_Check_return_ _ACRTIMP float __cdecl _fdpoly(_In_ float _X, _In_reads_(_N) float const* _Tab, _In_ int _N); + +_Check_return_ _ACRTIMP double __cdecl _dlog(_In_ double _X, _In_ int _Baseflag); +_Check_return_ _ACRTIMP long double __cdecl _ldlog(_In_ long double _X, _In_ int _Baseflag); +_Check_return_ _ACRTIMP float __cdecl _fdlog(_In_ float _X, _In_ int _Baseflag); + +_Check_return_ _ACRTIMP double __cdecl _dsin(_In_ double _X, _In_ unsigned int _Qoff); +_Check_return_ _ACRTIMP long double __cdecl _ldsin(_In_ long double _X, _In_ unsigned int _Qoff); +_Check_return_ _ACRTIMP float __cdecl _fdsin(_In_ float _X, _In_ unsigned int _Qoff); + +// double declarations +typedef union +{ // pun floating type as integer array + unsigned short _Sh[4]; + double _Val; +} _double_val; + +// float declarations +typedef union +{ // pun floating type as integer array + unsigned short _Sh[2]; + float _Val; +} _float_val; + +// long double declarations +typedef union +{ // pun floating type as integer array + unsigned short _Sh[4]; + long double _Val; +} _ldouble_val; + +typedef union +{ // pun float types as integer array + unsigned short _Word[4]; + float _Float; + double _Double; + long double _Long_double; +} _float_const; + +extern const _float_const _Denorm_C, _Inf_C, _Nan_C, _Snan_C, _Hugeval_C; +extern const _float_const _FDenorm_C, _FInf_C, _FNan_C, _FSnan_C; +extern const _float_const _LDenorm_C, _LInf_C, _LNan_C, _LSnan_C; + +extern const _float_const _Eps_C, _Rteps_C; +extern const _float_const _FEps_C, _FRteps_C; +extern const _float_const _LEps_C, _LRteps_C; + +extern const double _Zero_C, _Xbig_C; +extern const float _FZero_C, _FXbig_C; +extern const long double _LZero_C, _LXbig_C; + +#define _FP_LT 1 +#define _FP_EQ 2 +#define _FP_GT 4 + +#ifndef __cplusplus + + #define _CLASS_ARG(_Val) __pragma(warning(suppress:6334))(sizeof ((_Val) + (float)0) == sizeof (float) ? 'f' : sizeof ((_Val) + (double)0) == sizeof (double) ? 'd' : 'l') + #define _CLASSIFY(_Val, _FFunc, _DFunc, _LDFunc) (_CLASS_ARG(_Val) == 'f' ? _FFunc((float)(_Val)) : _CLASS_ARG(_Val) == 'd' ? _DFunc((double)(_Val)) : _LDFunc((long double)(_Val))) + #define _CLASSIFY2(_Val1, _Val2, _FFunc, _DFunc, _LDFunc) (_CLASS_ARG((_Val1) + (_Val2)) == 'f' ? _FFunc((float)(_Val1), (float)(_Val2)) : _CLASS_ARG((_Val1) + (_Val2)) == 'd' ? _DFunc((double)(_Val1), (double)(_Val2)) : _LDFunc((long double)(_Val1), (long double)(_Val2))) + + #define fpclassify(_Val) (_CLASSIFY(_Val, _fdclass, _dclass, _ldclass)) + #define _FPCOMPARE(_Val1, _Val2) (_CLASSIFY2(_Val1, _Val2, _fdpcomp, _dpcomp, _ldpcomp)) + + #define isfinite(_Val) (fpclassify(_Val) <= 0) + #define isinf(_Val) (fpclassify(_Val) == FP_INFINITE) + #define isnan(_Val) (fpclassify(_Val) == FP_NAN) + #define isnormal(_Val) (fpclassify(_Val) == FP_NORMAL) + #define signbit(_Val) (_CLASSIFY(_Val, _fdsign, _dsign, _ldsign)) + + #define isgreater(x, y) ((_FPCOMPARE(x, y) & _FP_GT) != 0) + #define isgreaterequal(x, y) ((_FPCOMPARE(x, y) & (_FP_EQ | _FP_GT)) != 0) + #define isless(x, y) ((_FPCOMPARE(x, y) & _FP_LT) != 0) + #define islessequal(x, y) ((_FPCOMPARE(x, y) & (_FP_LT | _FP_EQ)) != 0) + #define islessgreater(x, y) ((_FPCOMPARE(x, y) & (_FP_LT | _FP_GT)) != 0) + #define isunordered(x, y) (_FPCOMPARE(x, y) == 0) + +#else // __cplusplus +extern "C++" +{ + _Check_return_ inline int fpclassify(_In_ float _X) throw() + { + return _fdtest(&_X); + } + + _Check_return_ inline int fpclassify(_In_ double _X) throw() + { + return _dtest(&_X); + } + + _Check_return_ inline int fpclassify(_In_ long double _X) throw() + { + return _ldtest(&_X); + } + + _Check_return_ inline bool signbit(_In_ float _X) throw() + { + return _fdsign(_X) != 0; + } + + _Check_return_ inline bool signbit(_In_ double _X) throw() + { + return _dsign(_X) != 0; + } + + _Check_return_ inline bool signbit(_In_ long double _X) throw() + { + return _ldsign(_X) != 0; + } + + _Check_return_ inline int _fpcomp(_In_ float _X, _In_ float _Y) throw() + { + return _fdpcomp(_X, _Y); + } + + _Check_return_ inline int _fpcomp(_In_ double _X, _In_ double _Y) throw() + { + return _dpcomp(_X, _Y); + } + + _Check_return_ inline int _fpcomp(_In_ long double _X, _In_ long double _Y) throw() + { + return _ldpcomp(_X, _Y); + } + + template struct _Combined_type + { // determine combined type + typedef float _Type; + }; + + template <> struct _Combined_type + { // determine combined type + typedef double _Type; + }; + + template <> struct _Combined_type + { // determine combined type + typedef long double _Type; + }; + + template struct _Real_widened + { // determine widened real type + typedef long double _Type; + }; + + template <> struct _Real_widened + { // determine widened real type + typedef float _Type; + }; + + template <> struct _Real_widened + { // determine widened real type + typedef double _Type; + }; + + template <> struct _Real_widened + { // determine widened real type + typedef double _Type; + }; + + template <> struct _Real_widened + { // determine widened real type + typedef double _Type; + }; + + template struct _Real_type + { // determine equivalent real type + typedef double _Type; // default is double + }; + + template <> struct _Real_type + { // determine equivalent real type + typedef float _Type; + }; + + template <> struct _Real_type + { // determine equivalent real type + typedef long double _Type; + }; + + template + _Check_return_ inline int _fpcomp(_In_ _T1 _X, _In_ _T2 _Y) throw() + { // compare _Left and _Right + typedef typename _Combined_type::_Type, + typename _Real_type<_T2>::_Type>::_Type>::_Type _Tw; + return _fpcomp((_Tw)_X, (_Tw)_Y); + } + + template + _Check_return_ inline bool isfinite(_In_ _Ty _X) throw() + { + return fpclassify(_X) <= 0; + } + + template + _Check_return_ inline bool isinf(_In_ _Ty _X) throw() + { + return fpclassify(_X) == FP_INFINITE; + } + + template + _Check_return_ inline bool isnan(_In_ _Ty _X) throw() + { + return fpclassify(_X) == FP_NAN; + } + + template + _Check_return_ inline bool isnormal(_In_ _Ty _X) throw() + { + return fpclassify(_X) == FP_NORMAL; + } + + template + _Check_return_ inline bool isgreater(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw() + { + return (_fpcomp(_X, _Y) & _FP_GT) != 0; + } + + template + _Check_return_ inline bool isgreaterequal(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw() + { + return (_fpcomp(_X, _Y) & (_FP_EQ | _FP_GT)) != 0; + } + + template + _Check_return_ inline bool isless(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw() + { + return (_fpcomp(_X, _Y) & _FP_LT) != 0; + } + + template + _Check_return_ inline bool islessequal(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw() + { + return (_fpcomp(_X, _Y) & (_FP_LT | _FP_EQ)) != 0; + } + + template + _Check_return_ inline bool islessgreater(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw() + { + return (_fpcomp(_X, _Y) & (_FP_LT | _FP_GT)) != 0; + } + + template + _Check_return_ inline bool isunordered(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw() + { + return _fpcomp(_X, _Y) == 0; + } +} // extern "C++" +#endif // __cplusplus + + + +#if _CRT_FUNCTIONS_REQUIRED + + _Check_return_ int __cdecl abs(_In_ int _X); + _Check_return_ long __cdecl labs(_In_ long _X); + _Check_return_ long long __cdecl llabs(_In_ long long _X); + + _Check_return_ double __cdecl acos(_In_ double _X); + _Check_return_ double __cdecl asin(_In_ double _X); + _Check_return_ double __cdecl atan(_In_ double _X); + _Check_return_ double __cdecl atan2(_In_ double _Y, _In_ double _X); + + _Check_return_ double __cdecl cos(_In_ double _X); + _Check_return_ double __cdecl cosh(_In_ double _X); + _Check_return_ double __cdecl exp(_In_ double _X); + _Check_return_ _CRT_JIT_INTRINSIC double __cdecl fabs(_In_ double _X); + _Check_return_ double __cdecl fmod(_In_ double _X, _In_ double _Y); + _Check_return_ double __cdecl log(_In_ double _X); + _Check_return_ double __cdecl log10(_In_ double _X); + _Check_return_ double __cdecl pow(_In_ double _X, _In_ double _Y); + _Check_return_ double __cdecl sin(_In_ double _X); + _Check_return_ double __cdecl sinh(_In_ double _X); + _Check_return_ _CRT_JIT_INTRINSIC double __cdecl sqrt(_In_ double _X); + _Check_return_ double __cdecl tan(_In_ double _X); + _Check_return_ double __cdecl tanh(_In_ double _X); + + _Check_return_ _ACRTIMP double __cdecl acosh(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl asinh(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl atanh(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl atof(_In_z_ char const* _String); + _Check_return_ _ACRTIMP double __cdecl _atof_l(_In_z_ char const* _String, _In_opt_ _locale_t _Locale); + _Check_return_ _ACRTIMP double __cdecl _cabs(_In_ struct _complex _Complex_value); + _Check_return_ _ACRTIMP double __cdecl cbrt(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl ceil(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl _chgsign(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl copysign(_In_ double _Number, _In_ double _Sign); + _Check_return_ _ACRTIMP double __cdecl _copysign(_In_ double _Number, _In_ double _Sign); + _Check_return_ _ACRTIMP double __cdecl erf(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl erfc(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl exp2(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl expm1(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl fdim(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl floor(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl fma(_In_ double _X, _In_ double _Y, _In_ double _Z); + _Check_return_ _ACRTIMP double __cdecl fmax(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl fmin(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl frexp(_In_ double _X, _Out_ int* _Y); + _Check_return_ _ACRTIMP double __cdecl hypot(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl _hypot(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP int __cdecl ilogb(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl ldexp(_In_ double _X, _In_ int _Y); + _Check_return_ _ACRTIMP double __cdecl lgamma(_In_ double _X); + _Check_return_ _ACRTIMP long long __cdecl llrint(_In_ double _X); + _Check_return_ _ACRTIMP long long __cdecl llround(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl log1p(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl log2(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl logb(_In_ double _X); + _Check_return_ _ACRTIMP long __cdecl lrint(_In_ double _X); + _Check_return_ _ACRTIMP long __cdecl lround(_In_ double _X); + + int __CRTDECL _matherr(_Inout_ struct _exception* _Except); + + _Check_return_ _ACRTIMP double __cdecl modf(_In_ double _X, _Out_ double* _Y); + _Check_return_ _ACRTIMP double __cdecl nan(_In_ char const* _X); + _Check_return_ _ACRTIMP double __cdecl nearbyint(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl nextafter(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl nexttoward(_In_ double _X, _In_ long double _Y); + _Check_return_ _ACRTIMP double __cdecl remainder(_In_ double _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl remquo(_In_ double _X, _In_ double _Y, _Out_ int* _Z); + _Check_return_ _ACRTIMP double __cdecl rint(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl round(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl scalbln(_In_ double _X, _In_ long _Y); + _Check_return_ _ACRTIMP double __cdecl scalbn(_In_ double _X, _In_ int _Y); + _Check_return_ _ACRTIMP double __cdecl tgamma(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl trunc(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl _j0(_In_ double _X ); + _Check_return_ _ACRTIMP double __cdecl _j1(_In_ double _X ); + _Check_return_ _ACRTIMP double __cdecl _jn(int _X, _In_ double _Y); + _Check_return_ _ACRTIMP double __cdecl _y0(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl _y1(_In_ double _X); + _Check_return_ _ACRTIMP double __cdecl _yn(_In_ int _X, _In_ double _Y); + + _Check_return_ _ACRTIMP float __cdecl acoshf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl asinhf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl atanhf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl cbrtf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl _chgsignf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl copysignf(_In_ float _Number, _In_ float _Sign); + _Check_return_ _ACRTIMP float __cdecl _copysignf(_In_ float _Number, _In_ float _Sign); + _Check_return_ _ACRTIMP float __cdecl erff(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl erfcf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl expm1f(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl exp2f(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl fdimf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP float __cdecl fmaf(_In_ float _X, _In_ float _Y, _In_ float _Z); + _Check_return_ _ACRTIMP float __cdecl fmaxf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP float __cdecl fminf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP float __cdecl _hypotf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP int __cdecl ilogbf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl lgammaf(_In_ float _X); + _Check_return_ _ACRTIMP long long __cdecl llrintf(_In_ float _X); + _Check_return_ _ACRTIMP long long __cdecl llroundf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl log1pf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl log2f(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl logbf(_In_ float _X); + _Check_return_ _ACRTIMP long __cdecl lrintf(_In_ float _X); + _Check_return_ _ACRTIMP long __cdecl lroundf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl nanf(_In_ char const* _X); + _Check_return_ _ACRTIMP float __cdecl nearbyintf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl nextafterf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP float __cdecl nexttowardf(_In_ float _X, _In_ long double _Y); + _Check_return_ _ACRTIMP float __cdecl remainderf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP float __cdecl remquof(_In_ float _X, _In_ float _Y, _Out_ int* _Z); + _Check_return_ _ACRTIMP float __cdecl rintf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl roundf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl scalblnf(_In_ float _X, _In_ long _Y); + _Check_return_ _ACRTIMP float __cdecl scalbnf(_In_ float _X, _In_ int _Y); + _Check_return_ _ACRTIMP float __cdecl tgammaf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl truncf(_In_ float _X); + + #if defined _M_IX86 + + _Check_return_ _ACRTIMP int __cdecl _set_SSE2_enable(_In_ int _Flag); + + #endif + + #if defined _M_X64 + + _Check_return_ _ACRTIMP float __cdecl _logbf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl _nextafterf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP int __cdecl _finitef(_In_ float _X); + _Check_return_ _ACRTIMP int __cdecl _isnanf(_In_ float _X); + _Check_return_ _ACRTIMP int __cdecl _fpclassf(_In_ float _X); + + _Check_return_ _ACRTIMP int __cdecl _set_FMA3_enable(_In_ int _Flag); + _Check_return_ _ACRTIMP int __cdecl _get_FMA3_enable(void); + + #elif defined _M_ARM || defined _M_ARM64 || defined _M_HYBRID_X86_ARM64 + + _Check_return_ _ACRTIMP int __cdecl _finitef(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl _logbf(_In_ float _X); + + #endif + + + + #if defined _M_X64 || defined _M_ARM || defined _M_ARM64 || defined _M_HYBRID_X86_ARM64 || defined _CORECRT_BUILD_APISET || defined _M_ARM64EC + + _Check_return_ _ACRTIMP float __cdecl acosf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl asinf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl atan2f(_In_ float _Y, _In_ float _X); + _Check_return_ _ACRTIMP float __cdecl atanf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl ceilf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl cosf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl coshf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl expf(_In_ float _X); + + #else + + _Check_return_ __inline float __CRTDECL acosf(_In_ float _X) + { + return (float)acos(_X); + } + + _Check_return_ __inline float __CRTDECL asinf(_In_ float _X) + { + return (float)asin(_X); + } + + _Check_return_ __inline float __CRTDECL atan2f(_In_ float _Y, _In_ float _X) + { + return (float)atan2(_Y, _X); + } + + _Check_return_ __inline float __CRTDECL atanf(_In_ float _X) + { + return (float)atan(_X); + } + + _Check_return_ __inline float __CRTDECL ceilf(_In_ float _X) + { + return (float)ceil(_X); + } + + _Check_return_ __inline float __CRTDECL cosf(_In_ float _X) + { + return (float)cos(_X); + } + + _Check_return_ __inline float __CRTDECL coshf(_In_ float _X) + { + return (float)cosh(_X); + } + + _Check_return_ __inline float __CRTDECL expf(_In_ float _X) + { + return (float)exp(_X); + } + + #endif + + #if defined _M_ARM || defined _M_ARM64 || defined _M_HYBRID_X86_ARM64 || defined _M_ARM64EC + + _Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP float __cdecl fabsf(_In_ float _X); + + #else + + _Check_return_ __inline float __CRTDECL fabsf(_In_ float _X) + { + return (float)fabs(_X); + } + + #endif + + #if defined _M_X64 || defined _M_ARM || defined _M_ARM64 || defined _M_HYBRID_X86_ARM64 || defined _M_ARM64EC + + _Check_return_ _ACRTIMP float __cdecl floorf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl fmodf(_In_ float _X, _In_ float _Y); + + #else + + _Check_return_ __inline float __CRTDECL floorf(_In_ float _X) + { + return (float)floor(_X); + } + + _Check_return_ __inline float __CRTDECL fmodf(_In_ float _X, _In_ float _Y) + { + return (float)fmod(_X, _Y); + } + + #endif + + _Check_return_ __inline float __CRTDECL frexpf(_In_ float _X, _Out_ int *_Y) + { + return (float)frexp(_X, _Y); + } + + _Check_return_ __inline float __CRTDECL hypotf(_In_ float _X, _In_ float _Y) + { + return _hypotf(_X, _Y); + } + + _Check_return_ __inline float __CRTDECL ldexpf(_In_ float _X, _In_ int _Y) + { + return (float)ldexp(_X, _Y); + } + + #if defined _M_X64 || defined _M_ARM || defined _M_ARM64 || defined _M_HYBRID_X86_ARM64 || defined _CORECRT_BUILD_APISET || defined _M_ARM64EC + + _Check_return_ _ACRTIMP float __cdecl log10f(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl logf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl modff(_In_ float _X, _Out_ float *_Y); + _Check_return_ _ACRTIMP float __cdecl powf(_In_ float _X, _In_ float _Y); + _Check_return_ _ACRTIMP float __cdecl sinf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl sinhf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl sqrtf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl tanf(_In_ float _X); + _Check_return_ _ACRTIMP float __cdecl tanhf(_In_ float _X); + + #else + + _Check_return_ __inline float __CRTDECL log10f(_In_ float _X) + { + return (float)log10(_X); + } + + _Check_return_ __inline float __CRTDECL logf(_In_ float _X) + { + return (float)log(_X); + } + + _Check_return_ __inline float __CRTDECL modff(_In_ float _X, _Out_ float* _Y) + { + double _F, _I; + _F = modf(_X, &_I); + *_Y = (float)_I; + return (float)_F; + } + + _Check_return_ __inline float __CRTDECL powf(_In_ float _X, _In_ float _Y) + { + return (float)pow(_X, _Y); + } + + _Check_return_ __inline float __CRTDECL sinf(_In_ float _X) + { + return (float)sin(_X); + } + + _Check_return_ __inline float __CRTDECL sinhf(_In_ float _X) + { + return (float)sinh(_X); + } + + _Check_return_ __inline float __CRTDECL sqrtf(_In_ float _X) + { + return (float)sqrt(_X); + } + + _Check_return_ __inline float __CRTDECL tanf(_In_ float _X) + { + return (float)tan(_X); + } + + _Check_return_ __inline float __CRTDECL tanhf(_In_ float _X) + { + return (float)tanh(_X); + } + + #endif + + _Check_return_ _ACRTIMP long double __cdecl acoshl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL acosl(_In_ long double _X) + { + return acos((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl asinhl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL asinl(_In_ long double _X) + { + return asin((double)_X); + } + + _Check_return_ __inline long double __CRTDECL atan2l(_In_ long double _Y, _In_ long double _X) + { + return atan2((double)_Y, (double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl atanhl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL atanl(_In_ long double _X) + { + return atan((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl cbrtl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL ceill(_In_ long double _X) + { + return ceil((double)_X); + } + + _Check_return_ __inline long double __CRTDECL _chgsignl(_In_ long double _X) + { + return _chgsign((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl copysignl(_In_ long double _Number, _In_ long double _Sign); + + _Check_return_ __inline long double __CRTDECL _copysignl(_In_ long double _Number, _In_ long double _Sign) + { + return _copysign((double)_Number, (double)_Sign); + } + + _Check_return_ __inline long double __CRTDECL coshl(_In_ long double _X) + { + return cosh((double)_X); + } + + _Check_return_ __inline long double __CRTDECL cosl(_In_ long double _X) + { + return cos((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl erfl(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl erfcl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL expl(_In_ long double _X) + { + return exp((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl exp2l(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl expm1l(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL fabsl(_In_ long double _X) + { + return fabs((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl fdiml(_In_ long double _X, _In_ long double _Y); + + _Check_return_ __inline long double __CRTDECL floorl(_In_ long double _X) + { + return floor((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl fmal(_In_ long double _X, _In_ long double _Y, _In_ long double _Z); + _Check_return_ _ACRTIMP long double __cdecl fmaxl(_In_ long double _X, _In_ long double _Y); + _Check_return_ _ACRTIMP long double __cdecl fminl(_In_ long double _X, _In_ long double _Y); + + _Check_return_ __inline long double __CRTDECL fmodl(_In_ long double _X, _In_ long double _Y) + { + return fmod((double)_X, (double)_Y); + } + + _Check_return_ __inline long double __CRTDECL frexpl(_In_ long double _X, _Out_ int *_Y) + { + return frexp((double)_X, _Y); + } + + _Check_return_ _ACRTIMP int __cdecl ilogbl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL _hypotl(_In_ long double _X, _In_ long double _Y) + { + return _hypot((double)_X, (double)_Y); + } + + _Check_return_ __inline long double __CRTDECL hypotl(_In_ long double _X, _In_ long double _Y) + { + return _hypot((double)_X, (double)_Y); + } + + _Check_return_ __inline long double __CRTDECL ldexpl(_In_ long double _X, _In_ int _Y) + { + return ldexp((double)_X, _Y); + } + + _Check_return_ _ACRTIMP long double __cdecl lgammal(_In_ long double _X); + _Check_return_ _ACRTIMP long long __cdecl llrintl(_In_ long double _X); + _Check_return_ _ACRTIMP long long __cdecl llroundl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL logl(_In_ long double _X) + { + return log((double)_X); + } + + _Check_return_ __inline long double __CRTDECL log10l(_In_ long double _X) + { + return log10((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl log1pl(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl log2l(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl logbl(_In_ long double _X); + _Check_return_ _ACRTIMP long __cdecl lrintl(_In_ long double _X); + _Check_return_ _ACRTIMP long __cdecl lroundl(_In_ long double _X); + + _Check_return_ __inline long double __CRTDECL modfl(_In_ long double _X, _Out_ long double* _Y) + { + double _F, _I; + _F = modf((double)_X, &_I); + *_Y = _I; + return _F; + } + + _Check_return_ _ACRTIMP long double __cdecl nanl(_In_ char const* _X); + _Check_return_ _ACRTIMP long double __cdecl nearbyintl(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl nextafterl(_In_ long double _X, _In_ long double _Y); + _Check_return_ _ACRTIMP long double __cdecl nexttowardl(_In_ long double _X, _In_ long double _Y); + + _Check_return_ __inline long double __CRTDECL powl(_In_ long double _X, _In_ long double _Y) + { + return pow((double)_X, (double)_Y); + } + + _Check_return_ _ACRTIMP long double __cdecl remainderl(_In_ long double _X, _In_ long double _Y); + _Check_return_ _ACRTIMP long double __cdecl remquol(_In_ long double _X, _In_ long double _Y, _Out_ int* _Z); + _Check_return_ _ACRTIMP long double __cdecl rintl(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl roundl(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl scalblnl(_In_ long double _X, _In_ long _Y); + _Check_return_ _ACRTIMP long double __cdecl scalbnl(_In_ long double _X, _In_ int _Y); + + _Check_return_ __inline long double __CRTDECL sinhl(_In_ long double _X) + { + return sinh((double)_X); + } + + _Check_return_ __inline long double __CRTDECL sinl(_In_ long double _X) + { + return sin((double)_X); + } + + _Check_return_ __inline long double __CRTDECL sqrtl(_In_ long double _X) + { + return sqrt((double)_X); + } + + _Check_return_ __inline long double __CRTDECL tanhl(_In_ long double _X) + { + return tanh((double)_X); + } + + _Check_return_ __inline long double __CRTDECL tanl(_In_ long double _X) + { + return tan((double)_X); + } + + _Check_return_ _ACRTIMP long double __cdecl tgammal(_In_ long double _X); + _Check_return_ _ACRTIMP long double __cdecl truncl(_In_ long double _X); + + #ifndef __cplusplus + #define _matherrl _matherr + #endif + +#endif // _CRT_FUNCTIONS_REQUIRED + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #define DOMAIN _DOMAIN + #define SING _SING + #define OVERFLOW _OVERFLOW + #define UNDERFLOW _UNDERFLOW + #define TLOSS _TLOSS + #define PLOSS _PLOSS + + #define matherr _matherr + + #ifndef __assembler + #ifndef _M_CEE_PURE + extern double HUGE; + #else + double const HUGE = _HUGE; + #endif + + _CRT_NONSTDC_DEPRECATE(_j0) _Check_return_ _ACRTIMP double __cdecl j0(_In_ double _X); + _CRT_NONSTDC_DEPRECATE(_j1) _Check_return_ _ACRTIMP double __cdecl j1(_In_ double _X); + _CRT_NONSTDC_DEPRECATE(_jn) _Check_return_ _ACRTIMP double __cdecl jn(_In_ int _X, _In_ double _Y); + _CRT_NONSTDC_DEPRECATE(_y0) _Check_return_ _ACRTIMP double __cdecl y0(_In_ double _X); + _CRT_NONSTDC_DEPRECATE(_y1) _Check_return_ _ACRTIMP double __cdecl y1(_In_ double _X); + _CRT_NONSTDC_DEPRECATE(_yn) _Check_return_ _ACRTIMP double __cdecl yn(_In_ int _X, _In_ double _Y); + #endif // !__assembler + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif /* _INC_MATH */ diff --git a/sdk/include/ucrt/corecrt_math_defines.h b/sdk/include/ucrt/corecrt_math_defines.h new file mode 100644 index 0000000000000..5b048161a2bb0 --- /dev/null +++ b/sdk/include/ucrt/corecrt_math_defines.h @@ -0,0 +1,39 @@ +// +// corecrt_math_defines.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Definitions of useful mathematical constants +// +#pragma once +#ifndef _MATH_DEFINES_DEFINED +#define _MATH_DEFINES_DEFINED + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +// Definitions of useful mathematical constants +// +// Define _USE_MATH_DEFINES before including to expose these macro +// definitions for common math constants. These are placed under an #ifdef +// since these commonly-defined names are not part of the C or C++ standards +#define M_E 2.71828182845904523536 // e +#define M_LOG2E 1.44269504088896340736 // log2(e) +#define M_LOG10E 0.434294481903251827651 // log10(e) +#define M_LN2 0.693147180559945309417 // ln(2) +#define M_LN10 2.30258509299404568402 // ln(10) +#define M_PI 3.14159265358979323846 // pi +#define M_PI_2 1.57079632679489661923 // pi/2 +#define M_PI_4 0.785398163397448309616 // pi/4 +#define M_1_PI 0.318309886183790671538 // 1/pi +#define M_2_PI 0.636619772367581343076 // 2/pi +#define M_2_SQRTPI 1.12837916709551257390 // 2/sqrt(pi) +#define M_SQRT2 1.41421356237309504880 // sqrt(2) +#define M_SQRT1_2 0.707106781186547524401 // 1/sqrt(2) + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _MATH_DEFINES_DEFINED diff --git a/sdk/include/ucrt/corecrt_memcpy_s.h b/sdk/include/ucrt/corecrt_memcpy_s.h new file mode 100644 index 0000000000000..002eed111c9e8 --- /dev/null +++ b/sdk/include/ucrt/corecrt_memcpy_s.h @@ -0,0 +1,93 @@ +// +// corecrt_memcpy_s.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Inline definitions of memcpy_s and memmove_s +// +#pragma once + +#include +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#ifndef _CRT_MEMCPY_S_INLINE + #define _CRT_MEMCPY_S_INLINE static __inline +#endif + +#define _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(expr, errorcode) \ + { \ + int _Expr_val=!!(expr); \ + if (!(_Expr_val)) \ + { \ + errno = errorcode; \ + _invalid_parameter_noinfo(); \ + return errorcode; \ + } \ + } + +#if !defined RC_INVOKED && !defined __midl && __STDC_WANT_SECURE_LIB__ + + _Success_(return == 0) + _Check_return_opt_ + _CRT_MEMCPY_S_INLINE errno_t __CRTDECL memcpy_s( + _Out_writes_bytes_to_opt_(_DestinationSize, _SourceSize) void* const _Destination, + _In_ rsize_t const _DestinationSize, + _In_reads_bytes_opt_(_SourceSize) void const* const _Source, + _In_ rsize_t const _SourceSize + ) + { + if (_SourceSize == 0) + { + return 0; + } + + _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Destination != NULL, EINVAL); + if (_Source == NULL || _DestinationSize < _SourceSize) + { + memset(_Destination, 0, _DestinationSize); + + _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Source != NULL, EINVAL); + _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_DestinationSize >= _SourceSize, ERANGE); + + // Unreachable, but required to suppress /analyze warnings: + return EINVAL; + } + memcpy(_Destination, _Source, _SourceSize); + return 0; + } + + _Check_return_wat_ + _CRT_MEMCPY_S_INLINE errno_t __CRTDECL memmove_s( + _Out_writes_bytes_to_opt_(_DestinationSize, _SourceSize) void* const _Destination, + _In_ rsize_t const _DestinationSize, + _In_reads_bytes_opt_(_SourceSize) void const* const _Source, + _In_ rsize_t const _SourceSize + ) + { + if (_SourceSize == 0) + { + return 0; + } + + _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Destination != NULL, EINVAL); + _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_Source != NULL, EINVAL); + _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE(_DestinationSize >= _SourceSize, ERANGE); + + memmove(_Destination, _Source, _SourceSize); + return 0; + } + +#endif + +#undef _CRT_MEMCPY_S_VALIDATE_RETURN_ERRCODE + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +_CRT_END_C_HEADER diff --git a/sdk/include/ucrt/corecrt_memory.h b/sdk/include/ucrt/corecrt_memory.h new file mode 100644 index 0000000000000..a9909f85a7bbe --- /dev/null +++ b/sdk/include/ucrt/corecrt_memory.h @@ -0,0 +1,122 @@ +// +// corecrt_memory.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The buffer (memory) manipulation library. These declarations are split out +// so that they may be included by both and . +// does not include to avoid introducing conflicts with other user +// headers named . +// +#pragma once + +#include +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#ifndef __midl + +_CRT_BEGIN_C_HEADER + + + +_Check_return_ +_ACRTIMP int __cdecl _memicmp( + _In_reads_bytes_opt_(_Size) void const* _Buf1, + _In_reads_bytes_opt_(_Size) void const* _Buf2, + _In_ size_t _Size + ); + +_Check_return_ +_ACRTIMP int __cdecl _memicmp_l( + _In_reads_bytes_opt_(_Size) void const* _Buf1, + _In_reads_bytes_opt_(_Size) void const* _Buf2, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale + ); + + + +#if !defined RC_INVOKED && __STDC_WANT_SECURE_LIB__ + + #if defined __cplusplus && _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY + extern "C++" + { + template + inline typename _CrtEnableIf<(_Size > 1), void *>::_Type __cdecl memcpy( + _DstType (&_Dst)[_Size], + _In_reads_bytes_opt_(_SrcSize) void const* _Src, + _In_ size_t _SrcSize + ) _CRT_SECURE_CPP_NOTHROW + { + return memcpy_s(_Dst, _Size * sizeof(_DstType), _Src, _SrcSize) == 0 ? _Dst : 0; + } + } + #endif + + #if defined __cplusplus && _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY + extern "C++" + { + template + inline errno_t __CRTDECL memcpy_s( + _DstType (&_Dst)[_Size], + _In_reads_bytes_opt_(_SrcSize) void const* _Src, + _In_ rsize_t _SrcSize + ) _CRT_SECURE_CPP_NOTHROW + { + return memcpy_s(_Dst, _Size * sizeof(_DstType), _Src, _SrcSize); + } + } + #endif + +#endif // !defined RC_INVOKED && __STDC_WANT_SECURE_LIB__ + + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + _CRT_NONSTDC_DEPRECATE(_memccpy) + _ACRTIMP void* __cdecl memccpy( + _Out_writes_bytes_opt_(_Size) void* _Dst, + _In_reads_bytes_opt_(_Size) void const* _Src, + _In_ int _Val, + _In_ size_t _Size + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_memicmp) + _ACRTIMP int __cdecl memicmp( + _In_reads_bytes_opt_(_Size) void const* _Buf1, + _In_reads_bytes_opt_(_Size) void const* _Buf2, + _In_ size_t _Size + ); + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +#if defined __cplusplus + + extern "C++" _Check_return_ + inline void* __CRTDECL memchr( + _In_reads_bytes_opt_(_N) void* _Pv, + _In_ int _C, + _In_ size_t _N + ) + { + void const* const _Pvc = _Pv; + return const_cast(memchr(_Pvc, _C, _N)); + } + +#endif + + + +_CRT_END_C_HEADER + +#endif // !__midl +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_search.h b/sdk/include/ucrt/corecrt_search.h new file mode 100644 index 0000000000000..499258586f9a4 --- /dev/null +++ b/sdk/include/ucrt/corecrt_search.h @@ -0,0 +1,218 @@ +// +// corecrt_search.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Declarations of functions for sorting and searching. These declarations are +// split out so that they may be included by both and . +// does not include to avoid introducing conflicts with +// other user headers named . +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + typedef int (__cdecl* _CoreCrtSecureSearchSortCompareFunction)(void*, void const*, void const*); + typedef int (__cdecl* _CoreCrtNonSecureSearchSortCompareFunction)(void const*, void const*); + + +#if __STDC_WANT_SECURE_LIB__ + + _Check_return_ + _ACRTIMP void* __cdecl bsearch_s( + _In_ void const* _Key, + _In_reads_bytes_(_NumOfElements * _SizeOfElements) void const* _Base, + _In_ rsize_t _NumOfElements, + _In_ rsize_t _SizeOfElements, + _In_ _CoreCrtSecureSearchSortCompareFunction _CompareFunction, + _In_opt_ void* _Context + ); + + _ACRTIMP void __cdecl qsort_s( + _Inout_updates_bytes_(_NumOfElements * _SizeOfElements) void* _Base, + _In_ rsize_t _NumOfElements, + _In_ rsize_t _SizeOfElements, + _In_ _CoreCrtSecureSearchSortCompareFunction _CompareFunction, + _In_opt_ void* _Context + ); + +#endif // __STDC_WANT_SECURE_LIB__ + + + +_Check_return_ +_ACRTIMP void* __cdecl bsearch( + _In_ void const* _Key, + _In_reads_bytes_(_NumOfElements * _SizeOfElements) void const* _Base, + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction + ); + +_ACRTIMP void __cdecl qsort( + _Inout_updates_bytes_(_NumOfElements * _SizeOfElements) void* _Base, + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction + ); + +_Check_return_ +_ACRTIMP void* __cdecl _lfind_s( + _In_ void const* _Key, + _In_reads_bytes_((*_NumOfElements) * _SizeOfElements) void const* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtSecureSearchSortCompareFunction _CompareFunction, + _In_ void* _Context + ); + +_Check_return_ +_ACRTIMP void* __cdecl _lfind( + _In_ void const* _Key, + _In_reads_bytes_((*_NumOfElements) * _SizeOfElements) void const* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ unsigned int _SizeOfElements, + _In_ _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction + ); + +_Check_return_ +_ACRTIMP void* __cdecl _lsearch_s( + _In_ void const* _Key, + _Inout_updates_bytes_((*_NumOfElements ) * _SizeOfElements) void* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtSecureSearchSortCompareFunction _CompareFunction, + _In_ void* _Context + ); + +_Check_return_ +_ACRTIMP void* __cdecl _lsearch( + _In_ void const* _Key, + _Inout_updates_bytes_((*_NumOfElements ) * _SizeOfElements) void* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ unsigned int _SizeOfElements, + _In_ _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction + ); + + + +// Managed search routines +#if defined __cplusplus && defined _M_CEE +extern "C++" +{ + typedef int (__clrcall* _CoreCrtMgdSecureSearchSortCompareFunction)(void*, void const*, void const*); + typedef int (__clrcall* _CoreCrtMgdNonSecureSearchSortCompareFunction)(void const*, void const*); + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_ + void* __clrcall bsearch_s( + _In_ void const* _Key, + _In_reads_bytes_(_NumOfElements * _SizeOfElements) void const* _Base, + _In_ rsize_t _NumOfElements, + _In_ rsize_t _SizeOfElements, + _In_ _CoreCrtMgdSecureSearchSortCompareFunction _CompareFunction, + _In_ void* _Context); + + void __clrcall qsort_s( + _Inout_updates_bytes_(_NumOfElements * _SizeOfElements) void* _Base, + _In_ rsize_t _NumOfElements, + _In_ rsize_t _SizeOfElements, + _In_ _CoreCrtMgdSecureSearchSortCompareFunction _CompareFunction, + _In_ void* _Context); + + #endif // __STDC_WANT_SECURE_LIB__ + + _Check_return_ + void* __clrcall bsearch( + _In_ void const* _Key, + _In_reads_bytes_(_NumOfElements * _SizeOfElements) void const* _Base, + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtMgdNonSecureSearchSortCompareFunction _CompareFunction + ); + + _Check_return_ + void* __clrcall _lfind_s( + _In_ void const* _Key, + _In_reads_bytes_(_NumOfElements * _SizeOfElements) void const* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtMgdSecureSearchSortCompareFunction _CompareFunction, + _In_ void* _Context + ); + + _Check_return_ + void* __clrcall _lfind( + _In_ void const* _Key, + _In_reads_bytes_((*_NumOfElements) * _SizeOfElements) void const* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ unsigned int _SizeOfElements, + _In_ _CoreCrtMgdNonSecureSearchSortCompareFunction _CompareFunction + ); + + _Check_return_ + void* __clrcall _lsearch_s( + _In_ void const* _Key, + _In_reads_bytes_((*_NumOfElements) * _SizeOfElements) void* _Base, + _In_ unsigned int* _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtMgdSecureSearchSortCompareFunction _CompareFunction, + _In_ void* _Context + ); + + _Check_return_ + void* __clrcall _lsearch( + _In_ void const* _Key, + _Inout_updates_bytes_((*_NumOfElements) * _SizeOfElements) void* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ unsigned int _SizeOfElements, + _In_ _CoreCrtMgdNonSecureSearchSortCompareFunction _CompareFunction + ); + + void __clrcall qsort( + _Inout_updates_bytes_(_NumOfElements * _SizeOfElements) void* _Base, + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ _CoreCrtMgdNonSecureSearchSortCompareFunction _CompareFunction + ); +} +#endif // defined __cplusplus && defined _M_CEE + + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_lfind) + _ACRTIMP void* __cdecl lfind( + _In_ void const* _Key, + _In_reads_bytes_((*_NumOfElements) * _SizeOfElements) void const* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ unsigned int _SizeOfElements, + _In_ _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_lsearch) + _ACRTIMP void* __cdecl lsearch( + _In_ void const* _Key, + _Inout_updates_bytes_((*_NumOfElements) * _SizeOfElements) void* _Base, + _Inout_ unsigned int* _NumOfElements, + _In_ unsigned int _SizeOfElements, + _In_ _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction + ); + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_share.h b/sdk/include/ucrt/corecrt_share.h new file mode 100644 index 0000000000000..64925bcfff52b --- /dev/null +++ b/sdk/include/ucrt/corecrt_share.h @@ -0,0 +1,33 @@ +// +// corecrt_share.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Defines the file sharing modes for the sopen() family of functions. These +// declarations are split out to support the Windows build. +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#define _SH_DENYRW 0x10 // deny read/write mode +#define _SH_DENYWR 0x20 // deny write mode +#define _SH_DENYRD 0x30 // deny read mode +#define _SH_DENYNO 0x40 // deny none mode +#define _SH_SECURE 0x80 // secure mode + + + +#if (defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__) + #define SH_DENYRW _SH_DENYRW + #define SH_DENYWR _SH_DENYWR + #define SH_DENYRD _SH_DENYRD + #define SH_DENYNO _SH_DENYNO +#endif + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_startup.h b/sdk/include/ucrt/corecrt_startup.h new file mode 100644 index 0000000000000..19e6dc27866e0 --- /dev/null +++ b/sdk/include/ucrt/corecrt_startup.h @@ -0,0 +1,199 @@ +// +// corecrt_startup.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Declarations for the CoreCRT startup functionality, used while initializing +// the CRT and during app startup and termination. +// +#pragma once + +#include +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Exception Filters for main() and DllMain() +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +struct _EXCEPTION_POINTERS; + +_ACRTIMP int __cdecl _seh_filter_dll( + _In_ unsigned long _ExceptionNum, + _In_ struct _EXCEPTION_POINTERS* _ExceptionPtr + ); + +_ACRTIMP int __cdecl _seh_filter_exe( + _In_ unsigned long _ExceptionNum, + _In_ struct _EXCEPTION_POINTERS* _ExceptionPtr + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Miscellaneous Runtime Support +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +typedef enum _crt_app_type +{ + _crt_unknown_app, + _crt_console_app, + _crt_gui_app +} _crt_app_type; + +_ACRTIMP _crt_app_type __cdecl _query_app_type(void); + +_ACRTIMP void __cdecl _set_app_type( + _In_ _crt_app_type _Type + ); + +typedef int (__cdecl *_UserMathErrorFunctionPointer)(struct _exception *); + +_ACRTIMP void __cdecl __setusermatherr( + _UserMathErrorFunctionPointer _UserMathErrorFunction + ); + +int __cdecl _is_c_termination_complete(void); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Arguments API for main() et al. +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_ACRTIMP errno_t __cdecl _configure_narrow_argv( + _In_ _crt_argv_mode mode + ); + +_ACRTIMP errno_t __cdecl _configure_wide_argv( + _In_ _crt_argv_mode mode + ); + +// There is a linkopt for these to disable environment initialization when using +// the static CRT, so they are not declared _ACRTIMP. +int __CRTDECL _initialize_narrow_environment(void); +int __CRTDECL _initialize_wide_environment(void); + +_ACRTIMP char** __cdecl _get_initial_narrow_environment(void); +_ACRTIMP wchar_t** __cdecl _get_initial_wide_environment(void); + +char* __CRTDECL _get_narrow_winmain_command_line(void); +wchar_t* __CRTDECL _get_wide_winmain_command_line(void); + +_ACRTIMP char** __cdecl __p__acmdln(void); +_ACRTIMP wchar_t** __cdecl __p__wcmdln(void); + +#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + extern char* _acmdln; + extern wchar_t* _wcmdln; +#else + #define _acmdln (*__p__acmdln()) + #define _wcmdln (*__p__wcmdln()) +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Initializer and Terminator Support +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +typedef void (__cdecl* _PVFV)(void); +typedef int (__cdecl* _PIFV)(void); +typedef void (__cdecl* _PVFI)(int); + +#ifndef _M_CEE + _ACRTIMP void __cdecl _initterm( + _In_reads_(_Last - _First) _In_ _PVFV* _First, + _In_ _PVFV* _Last + ); + + _ACRTIMP int __cdecl _initterm_e( + _In_reads_(_Last - _First) _PIFV* _First, + _In_ _PIFV* _Last + ); +#endif + +#ifndef _CRT_ONEXIT_T_DEFINED + #define _CRT_ONEXIT_T_DEFINED + + typedef int (__CRTDECL* _onexit_t)(void); + #ifdef _M_CEE + typedef int (__clrcall* _onexit_m_t)(void); + #endif +#endif + +typedef struct _onexit_table_t +{ + _PVFV* _first; + _PVFV* _last; + _PVFV* _end; +} _onexit_table_t; + +_ACRTIMP int __cdecl _initialize_onexit_table( + _In_opt_ _onexit_table_t* _Table + ); + +_ACRTIMP int __cdecl _register_onexit_function( + _In_opt_ _onexit_table_t* _Table, + _In_opt_ _onexit_t _Function + ); + +_ACRTIMP int __cdecl _execute_onexit_table( + _In_opt_ _onexit_table_t* _Table + ); + +_ACRTIMP int __cdecl _crt_atexit( + _In_opt_ _PVFV _Function + ); + +_ACRTIMP int __cdecl _crt_at_quick_exit( + _In_opt_ _PVFV _Function + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Static CRT Initialization Support +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if _CRT_FUNCTIONS_REQUIRED + + _Success_(return != 0) + __crt_bool __cdecl __acrt_initialize(void); + + _Success_(return != 0) + __crt_bool __cdecl __acrt_uninitialize( + _In_ __crt_bool _Terminating + ); + + _Success_(return != 0) + __crt_bool __cdecl __acrt_uninitialize_critical( + _In_ __crt_bool _Terminating + ); + + _Success_(return != 0) + __crt_bool __cdecl __acrt_thread_attach(void); + + _Success_(return != 0) + __crt_bool __cdecl __acrt_thread_detach(void); + +#endif // _CRT_FUNCTIONS_REQUIRED + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_stdio_config.h b/sdk/include/ucrt/corecrt_stdio_config.h new file mode 100644 index 0000000000000..88e041260d5da --- /dev/null +++ b/sdk/include/ucrt/corecrt_stdio_config.h @@ -0,0 +1,131 @@ +// +// corecrt_stdio_config.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Per-module configuration. +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#if !defined _NO_CRT_STDIO_INLINE && !_CRT_FUNCTIONS_REQUIRED + #define _NO_CRT_STDIO_INLINE +#endif + +#if defined _NO_CRT_STDIO_INLINE + #undef _CRT_STDIO_INLINE + #define _CRT_STDIO_INLINE +#elif !defined _CRT_STDIO_INLINE + #define _CRT_STDIO_INLINE __inline +#endif + +#if !defined RC_INVOKED // RC has no target architecture + #if defined _M_IX86 + #define _CRT_INTERNAL_STDIO_SYMBOL_PREFIX "_" + #elif defined _M_X64 || defined _M_ARM || defined _M_ARM64 + #define _CRT_INTERNAL_STDIO_SYMBOL_PREFIX "" + #else + #error Unsupported architecture + #endif +#endif + + + +// Predefine _CRT_STDIO_ISO_WIDE_SPECIFIERS to use ISO-conforming behavior for +// the wide string printf and scanf functions (%s, %c, and %[] specifiers). +// +// Predefine _CRT_STDIO_LEGACY_WIDE_SPECIFIERS to use VC++ 2013 and earlier behavior for +// the wide string printf and scanf functions (%s, %c, and %[] specifiers). +// +// Predefine _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS when building code that does +// not use these format specifiers without a length modifier and thus can be +// used with either the legacy (default) or the conforming mode. (This option +// is intended for use by static libraries). +#if !defined RC_INVOKED // _CRT_STDIO_LEGACY_WIDE_SPECIFIERS et al. are too long for rc + #if defined _CRT_STDIO_ISO_WIDE_SPECIFIERS + #if defined _CRT_STDIO_LEGACY_WIDE_SPECIFIERS + #error _CRT_STDIO_ISO_WIDE_SPECIFIERS and _CRT_STDIO_LEGACY_WIDE_SPECIFIERS cannot be defined together. + #endif + + #if !defined _M_CEE_PURE + #pragma comment(lib, "iso_stdio_wide_specifiers") + #pragma comment(linker, "/include:" _CRT_INTERNAL_STDIO_SYMBOL_PREFIX "__PLEASE_LINK_WITH_iso_stdio_wide_specifiers.lib") + #endif + #elif defined _CRT_STDIO_LEGACY_WIDE_SPECIFIERS + #if !defined _M_CEE_PURE + #pragma comment(lib, "legacy_stdio_wide_specifiers") + #pragma comment(linker, "/include:" _CRT_INTERNAL_STDIO_SYMBOL_PREFIX "__PLEASE_LINK_WITH_legacy_stdio_wide_specifiers.lib") + #endif + #endif + + #if defined __cplusplus && !defined _CRT_STDIO_ARBITRARY_WIDE_SPECIFIERS + #ifdef _CRT_STDIO_ISO_WIDE_SPECIFIERS + #pragma detect_mismatch("_CRT_STDIO_ISO_WIDE_SPECIFIERS", "1") + #else + #pragma detect_mismatch("_CRT_STDIO_ISO_WIDE_SPECIFIERS", "0") + #endif + #endif +#endif + +// If we're compiling mixed managed code, make sure these inline functions are +// compiled as native to ensure that there is only one instance of each of the +// function-local static variables. +#if defined _M_CEE && !defined _M_CEE_PURE + #pragma managed(push, off) +#endif + +#if _CRT_FUNCTIONS_REQUIRED + // This function must not be inlined into callers to avoid ODR violations. The + // static local variable has different names in C and in C++ translation units. + _Check_return_ _Ret_notnull_ + _CRT_INLINE_PURE_SECURITYCRITICAL_ATTRIBUTE + __declspec(noinline) __inline unsigned __int64* __CRTDECL __local_stdio_printf_options(void) + { + static unsigned __int64 _OptionsStorage; + return &_OptionsStorage; + } + + // This function must not be inlined into callers to avoid ODR violations. The + // static local variable has different names in C and in C++ translation units. + _Check_return_ _Ret_notnull_ + _CRT_INLINE_PURE_SECURITYCRITICAL_ATTRIBUTE + __declspec(noinline) __inline unsigned __int64* __CRTDECL __local_stdio_scanf_options(void) + { + static unsigned __int64 _OptionsStorage; + return &_OptionsStorage; + } +#endif + +#if defined _M_CEE && !defined _M_CEE_PURE + #pragma managed(pop) +#endif + +#define _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS (*__local_stdio_printf_options()) +#define _CRT_INTERNAL_LOCAL_SCANF_OPTIONS (*__local_stdio_scanf_options ()) + + + +#define _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION (1ULL << 0) +#define _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR (1ULL << 1) +#define _CRT_INTERNAL_PRINTF_LEGACY_WIDE_SPECIFIERS (1ULL << 2) +#define _CRT_INTERNAL_PRINTF_LEGACY_MSVCRT_COMPATIBILITY (1ULL << 3) +#define _CRT_INTERNAL_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS (1ULL << 4) +#define _CRT_INTERNAL_PRINTF_STANDARD_ROUNDING (1ULL << 5) + + +#define _CRT_INTERNAL_SCANF_SECURECRT (1ULL << 0) +#define _CRT_INTERNAL_SCANF_LEGACY_WIDE_SPECIFIERS (1ULL << 1) +#define _CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY (1ULL << 2) + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_terminate.h b/sdk/include/ucrt/corecrt_terminate.h new file mode 100644 index 0000000000000..ac374bc29b40d --- /dev/null +++ b/sdk/include/ucrt/corecrt_terminate.h @@ -0,0 +1,51 @@ +// +// corecrt_terminate.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The terminate handler +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#ifndef RC_INVOKED + +_CRT_BEGIN_C_HEADER + +// terminate_handler is the standard name; terminate_function is defined for +// source compatibility. +typedef void (__CRTDECL* terminate_handler )(void); +typedef void (__CRTDECL* terminate_function)(void); + +#ifdef _M_CEE + typedef void (__clrcall* __terminate_function_m)(); + typedef void (__clrcall* __terminate_handler_m )(); +#endif + +#ifdef __cplusplus + + _ACRTIMP __declspec(noreturn) void __cdecl abort(); + _ACRTIMP __declspec(noreturn) void __cdecl terminate() throw(); + + #ifndef _M_CEE_PURE + + _ACRTIMP terminate_handler __cdecl set_terminate( + _In_opt_ terminate_handler _NewTerminateHandler + ) throw(); + + _ACRTIMP terminate_handler __cdecl _get_terminate(); + + #endif + +#endif // __cplusplus + +_CRT_END_C_HEADER + +#endif // RC_INVOKED +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wconio.h b/sdk/include/ucrt/corecrt_wconio.h new file mode 100644 index 0000000000000..d987fb630bc48 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wconio.h @@ -0,0 +1,424 @@ +// +// corecrt_wconio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) console I/O functionality, +// shared by both and +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#define WEOF ((wint_t)(0xFFFF)) + + + +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _Check_return_wat_ + _Success_(_BufferCount > 0) + _DCRTIMP errno_t __cdecl _cgetws_s( + _Out_writes_to_(_BufferCount, *_SizeRead) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _Out_ size_t* _SizeRead + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + _Success_(return == 0) + errno_t, _cgetws_s, + _Out_writes_z_(*_Buffer) wchar_t, _Buffer, + _In_ size_t*, _SizeRead + ) + + _Check_return_opt_ + _DCRTIMP int __cdecl _cputws( + _In_z_ wchar_t const* _Buffer + ); + + _Check_return_ _DCRTIMP wint_t __cdecl _getwch (void); + _Check_return_ _DCRTIMP wint_t __cdecl _getwche (void); + _Check_return_opt_ _DCRTIMP wint_t __cdecl _putwch (_In_ wchar_t _Character); + _Check_return_opt_ _DCRTIMP wint_t __cdecl _ungetwch(_In_ wint_t _Character); + + _Check_return_ _DCRTIMP wint_t __cdecl _getwch_nolock (void); + _Check_return_ _DCRTIMP wint_t __cdecl _getwche_nolock (void); + _Check_return_opt_ _DCRTIMP wint_t __cdecl _putwch_nolock (_In_ wchar_t _Character); + _Check_return_opt_ _DCRTIMP wint_t __cdecl _ungetwch_nolock(_In_ wint_t _Character); + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Formatted Output Functions (Console) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcwprintf( + _In_ unsigned __int64 _Options, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcwprintf_s( + _In_ unsigned __int64 _Options, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcwprintf_p( + _In_ unsigned __int64 _Options, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwprintf_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcwprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwprintf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcwprintf_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwprintf_s_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcwprintf_s(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwprintf_s( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcwprintf_s_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwprintf_p_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcwprintf_p(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwprintf_p( + _In_z_ _Printf_format_string_ const wchar_t* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcwprintf_p_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwprintf_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcwprintf_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwprintf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcwprintf_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwprintf_s_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcwprintf_s_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwprintf_s( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcwprintf_s_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwprintf_p_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcwprintf_p_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwprintf_p( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcwprintf_p_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Formatted Input Functions (Console) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _DCRTIMP int __cdecl __conio_common_vcwscanf( + _In_ unsigned __int64 _Options, + _In_z_ _Scanf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vcwscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _vcwscanf_l( + _In_z_ _Scanf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcwscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vcwscanf_s) + _CRT_STDIO_INLINE int __CRTDECL _vcwscanf( + _In_z_ _Scanf_format_string_params_(1) wchar_t const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcwscanf_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwscanf_s_l( + _In_z_ _Scanf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return __conio_common_vcwscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Format, _Locale, _ArgList); + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vcwscanf_s( + _In_z_ _Scanf_format_string_params_(1) wchar_t const* const _Format, + va_list _ArgList + ) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + return _vcwscanf_s_l(_Format, NULL, _ArgList); + } +#endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_cwscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _cwscanf_l( + _In_z_ _Scanf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = _vcwscanf_l(_Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_cwscanf_s) + _CRT_STDIO_INLINE int __CRTDECL _cwscanf( + _In_z_ _Scanf_format_string_ wchar_t const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = _vcwscanf_l(_Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwscanf_s_l( + _In_z_ _Scanf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vcwscanf_s_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _cwscanf_s( + _In_z_ _Scanf_format_string_ wchar_t const* const _Format, + ...) +#if defined _NO_CRT_STDIO_INLINE +; +#else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vcwscanf_s_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } +#endif + +#endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wctype.h b/sdk/include/ucrt/corecrt_wctype.h new file mode 100644 index 0000000000000..26f1854006885 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wctype.h @@ -0,0 +1,205 @@ +// +// corecrt_wctype.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) classification functionality, +// shared by , , and . +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#define WEOF ((wint_t)(0xFFFF)) + + + +// This declaration allows the user access to the ctype look-up +// array _ctype defined in ctype.obj by simply including ctype.h +#ifndef _CTYPE_DISABLE_MACROS + + #if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL + #define __PCTYPE_FUNC _pctype + #else + #define __PCTYPE_FUNC __pctype_func() + #endif + + _ACRTIMP const unsigned short* __cdecl __pctype_func(void); + _ACRTIMP const wctype_t* __cdecl __pwctype_func(void); + + #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + extern const unsigned short* _pctype; + extern const wctype_t* _pwctype; + #else + #define _pctype (__pctype_func()) + #define _pwctype (__pwctype_func()) + #endif +#endif + +// Bit masks for the possible character types +#define _UPPER 0x01 // uppercase letter +#define _LOWER 0x02 // lowercase letter +#define _DIGIT 0x04 // digit[0-9] +#define _SPACE 0x08 // tab, carriage return, newline, vertical tab, or form feed +#define _PUNCT 0x10 // punctuation character +#define _CONTROL 0x20 // control character +#define _BLANK 0x40 // space char (tab is handled separately) +#define _HEX 0x80 // hexadecimal digit + +#define _LEADBYTE 0x8000 // multibyte leadbyte +#define _ALPHA (0x0100 | _UPPER | _LOWER) // alphabetic character + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Wide Character Classification and Conversion Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Check_return_ _ACRTIMP int __cdecl iswalnum (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswalpha (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswascii (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswblank (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswcntrl (_In_ wint_t _C); + +_When_(_Param_(1) == 0, _Post_equal_to_(0)) +_Check_return_ _ACRTIMP int __cdecl iswdigit (_In_ wint_t _C); + +_Check_return_ _ACRTIMP int __cdecl iswgraph (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswlower (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswprint (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswpunct (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswspace (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswupper (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswxdigit (_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl __iswcsymf(_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl __iswcsym (_In_ wint_t _C); + +_Check_return_ _ACRTIMP int __cdecl _iswalnum_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswalpha_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswblank_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswcntrl_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswdigit_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswgraph_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswlower_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswprint_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswpunct_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswspace_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswupper_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswxdigit_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswcsymf_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswcsym_l (_In_ wint_t _C, _In_opt_ _locale_t _Locale); + + +_Check_return_ _ACRTIMP wint_t __cdecl towupper(_In_ wint_t _C); +_Check_return_ _ACRTIMP wint_t __cdecl towlower(_In_ wint_t _C); +_Check_return_ _ACRTIMP int __cdecl iswctype(_In_ wint_t _C, _In_ wctype_t _Type); + +_Check_return_ _ACRTIMP wint_t __cdecl _towupper_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP wint_t __cdecl _towlower_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _iswctype_l(_In_ wint_t _C, _In_ wctype_t _Type, _In_opt_ _locale_t _Locale); + + +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + _Check_return_ _ACRTIMP int __cdecl isleadbyte(_In_ int _C); + _Check_return_ _ACRTIMP int __cdecl _isleadbyte_l(_In_ int _C, _In_opt_ _locale_t _Locale); + + _CRT_OBSOLETE(iswctype) _DCRTIMP int __cdecl is_wctype(_In_ wint_t _C, _In_ wctype_t _Type); +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Macro and Inline Definitions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if !defined __cplusplus || defined _M_CEE_PURE || defined MRTDLL || defined _CORECRT_BUILD + #ifndef _CTYPE_DISABLE_MACROS + + #define iswalpha(_c) (iswctype(_c, _ALPHA)) + #define iswupper(_c) (iswctype(_c, _UPPER)) + #define iswlower(_c) (iswctype(_c, _LOWER)) + #define iswdigit(_c) (iswctype(_c, _DIGIT)) + #define iswxdigit(_c) (iswctype(_c, _HEX)) + #define iswspace(_c) (iswctype(_c, _SPACE)) + #define iswpunct(_c) (iswctype(_c, _PUNCT)) + #define iswblank(_c) (((_c) == '\t') ? _BLANK : iswctype(_c,_BLANK) ) + #define iswalnum(_c) (iswctype(_c, _ALPHA | _DIGIT)) + #define iswprint(_c) (iswctype(_c, _BLANK | _PUNCT | _ALPHA | _DIGIT)) + #define iswgraph(_c) (iswctype(_c, _PUNCT | _ALPHA | _DIGIT)) + #define iswcntrl(_c) (iswctype(_c, _CONTROL)) + #define iswascii(_c) ((unsigned)(_c) < 0x80) + + #define _iswalpha_l(_c,_p) (iswctype(_c, _ALPHA)) + #define _iswupper_l(_c,_p) (iswctype(_c, _UPPER)) + #define _iswlower_l(_c,_p) (iswctype(_c, _LOWER)) + #define _iswdigit_l(_c,_p) (iswctype(_c, _DIGIT)) + #define _iswxdigit_l(_c,_p) (iswctype(_c, _HEX)) + #define _iswspace_l(_c,_p) (iswctype(_c, _SPACE)) + #define _iswpunct_l(_c,_p) (iswctype(_c, _PUNCT)) + #define _iswblank_l(_c,_p) (iswctype(_c, _BLANK)) + #define _iswalnum_l(_c,_p) (iswctype(_c, _ALPHA | _DIGIT)) + #define _iswprint_l(_c,_p) (iswctype(_c, _BLANK | _PUNCT | _ALPHA | _DIGIT)) + #define _iswgraph_l(_c,_p) (iswctype(_c, _PUNCT | _ALPHA | _DIGIT)) + #define _iswcntrl_l(_c,_p) (iswctype(_c, _CONTROL)) + + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + #define isleadbyte(_c) (__PCTYPE_FUNC[(unsigned char)(_c)] & _LEADBYTE) + #endif + + #endif // _CTYPE_DISABLE_MACROS +// CRT_REFACTOR TODO I've had to remove the inline function definitions because +// they break the debugger build. These were moved here from in +// C968560. We need to figure out what is wrong. +//#else +// #ifndef _CTYPE_DISABLE_MACROS +// inline int __cdecl iswalpha (_In_ wint_t _C) { return iswctype(_C, _ALPHA); } +// inline int __cdecl iswupper (_In_ wint_t _C) { return iswctype(_C, _UPPER); } +// inline int __cdecl iswlower (_In_ wint_t _C) { return iswctype(_C, _LOWER); } +// inline int __cdecl iswdigit (_In_ wint_t _C) { return iswctype(_C, _DIGIT); } +// inline int __cdecl iswxdigit(_In_ wint_t _C) { return iswctype(_C, _HEX); } +// inline int __cdecl iswspace (_In_ wint_t _C) { return iswctype(_C, _SPACE); } +// inline int __cdecl iswpunct (_In_ wint_t _C) { return iswctype(_C, _PUNCT); } +// inline int __cdecl iswblank (_In_ wint_t _C) { return (((_C) == '\t') ? _BLANK : iswctype(_C,_BLANK)); } +// inline int __cdecl iswalnum (_In_ wint_t _C) { return iswctype(_C, _ALPHA | _DIGIT); } +// inline int __cdecl iswprint (_In_ wint_t _C) { return iswctype(_C, _BLANK | _PUNCT | _ALPHA | _DIGIT); } +// inline int __cdecl iswgraph (_In_ wint_t _C) { return iswctype(_C, _PUNCT | _ALPHA | _DIGIT); } +// inline int __cdecl iswcntrl (_In_ wint_t _C) { return iswctype(_C, _CONTROL); } +// inline int __cdecl iswascii (_In_ wint_t _C) { return (unsigned)(_C) < 0x80; } +// +// inline int __cdecl _iswalpha_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _ALPHA); } +// inline int __cdecl _iswupper_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _UPPER); } +// inline int __cdecl _iswlower_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _LOWER); } +// inline int __cdecl _iswdigit_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _DIGIT); } +// inline int __cdecl _iswxdigit_l(_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _HEX); } +// inline int __cdecl _iswspace_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _SPACE); } +// inline int __cdecl _iswpunct_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _PUNCT); } +// inline int __cdecl _iswblank_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _BLANK); } +// inline int __cdecl _iswalnum_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _ALPHA | _DIGIT); } +// inline int __cdecl _iswprint_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _BLANK | _PUNCT | _ALPHA | _DIGIT); } +// inline int __cdecl _iswgraph_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _PUNCT | _ALPHA | _DIGIT); } +// inline int __cdecl _iswcntrl_l (_In_ wint_t _C, _In_opt_ _locale_t) { return iswctype(_C, _CONTROL); } +// +// #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP +// inline int __cdecl isleadbyte(_In_ int _C) +// { +// return __pctype_func()[(unsigned char)(_C)] & _LEADBYTE; +// } +// #endif +// #endif +#endif + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wdirect.h b/sdk/include/ucrt/corecrt_wdirect.h new file mode 100644 index 0000000000000..e8b1969ab128d --- /dev/null +++ b/sdk/include/ucrt/corecrt_wdirect.h @@ -0,0 +1,63 @@ +// +// corecrt_wdirect.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) directory functionality, shared +// by and . +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#pragma push_macro("_wgetcwd") +#pragma push_macro("_wgetdcwd") +#undef _wgetcwd +#undef _wgetdcwd + +_Success_(return != 0) +_Check_return_ _Ret_maybenull_z_ +_ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wgetcwd( + _Out_writes_opt_z_(_SizeInWords) wchar_t* _DstBuf, + _In_ int _SizeInWords + ); + +_Success_(return != 0) +_Check_return_ _Ret_maybenull_z_ +_ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wgetdcwd( + _In_ int _Drive, + _Out_writes_opt_z_(_SizeInWords) wchar_t* _DstBuf, + _In_ int _SizeInWords + ); + +#define _wgetdcwd_nolock _wgetdcwd + +#pragma pop_macro("_wgetcwd") +#pragma pop_macro("_wgetdcwd") + +_Check_return_ +_ACRTIMP int __cdecl _wchdir( + _In_z_ wchar_t const* _Path + ); + +_Check_return_ +_ACRTIMP int __cdecl _wmkdir( + _In_z_ wchar_t const* _Path + ); + +_Check_return_ +_ACRTIMP int __cdecl _wrmdir( + _In_z_ wchar_t const* _Path + ); + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wio.h b/sdk/include/ucrt/corecrt_wio.h new file mode 100644 index 0000000000000..0196bf663dff0 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wio.h @@ -0,0 +1,270 @@ +// +// corecrt_wio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) I/O functionality, shared by +// and . +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _USE_32BIT_TIME_T + #define _wfinddata_t _wfinddata32_t + #define _wfinddatai64_t _wfinddata32i64_t +#else + #define _wfinddata_t _wfinddata64i32_t + #define _wfinddatai64_t _wfinddata64_t +#endif + +typedef unsigned long _fsize_t; + +struct _wfinddata32_t +{ + unsigned attrib; + __time32_t time_create; // -1 for FAT file systems + __time32_t time_access; // -1 for FAT file systems + __time32_t time_write; + _fsize_t size; + wchar_t name[260]; +}; + +struct _wfinddata32i64_t +{ + unsigned attrib; + __time32_t time_create; // -1 for FAT file systems + __time32_t time_access; // -1 for FAT file systems + __time32_t time_write; + __int64 size; + wchar_t name[260]; +}; + +struct _wfinddata64i32_t +{ + unsigned attrib; + __time64_t time_create; // -1 for FAT file systems + __time64_t time_access; // -1 for FAT file systems + __time64_t time_write; + _fsize_t size; + wchar_t name[260]; +}; + +struct _wfinddata64_t +{ + unsigned attrib; + __time64_t time_create; // -1 for FAT file systems + __time64_t time_access; // -1 for FAT file systems + __time64_t time_write; + __int64 size; + wchar_t name[260]; +}; + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _USE_32BIT_TIME_T + #define _wfindfirst _wfindfirst32 + #define _wfindnext _wfindnext32 + #define _wfindfirsti64 _wfindfirst32i64 + #define _wfindnexti64 _wfindnext32i64 +#else + #define _wfindfirst _wfindfirst64i32 + #define _wfindnext _wfindnext64i32 + #define _wfindfirsti64 _wfindfirst64 + #define _wfindnexti64 _wfindnext64 +#endif + +_Check_return_ +_ACRTIMP int __cdecl _waccess( + _In_z_ wchar_t const* _FileName, + _In_ int _AccessMode + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _waccess_s( + _In_z_ wchar_t const* _FileName, + _In_ int _AccessMode + ); + +_Check_return_ +_ACRTIMP int __cdecl _wchmod( + _In_z_ wchar_t const* _FileName, + _In_ int _Mode + ); + +_Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) +_ACRTIMP int __cdecl _wcreat( + _In_z_ wchar_t const* _FileName, + _In_ int _PermissionMode + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP intptr_t __cdecl _wfindfirst32( + _In_z_ wchar_t const* _FileName, + _Out_ struct _wfinddata32_t* _FindData + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP int __cdecl _wfindnext32( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata32_t* _FindData + ); + +_ACRTIMP int __cdecl _wunlink( + _In_z_ wchar_t const* _FileName + ); + +_Check_return_ +_ACRTIMP int __cdecl _wrename( + _In_z_ wchar_t const* _OldFileName, + _In_z_ wchar_t const* _NewFileName + ); + +_ACRTIMP errno_t __cdecl _wmktemp_s( + _Inout_updates_z_(_SizeInWords) wchar_t* _TemplateName, + _In_ size_t _SizeInWords + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _wmktemp_s, + wchar_t, _TemplateName + ) + +_Success_(return != 0) +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wmktemp, + _Inout_z_, wchar_t, _TemplateName + ) + +_Success_(return != -1) +_Check_return_ +_ACRTIMP intptr_t __cdecl _wfindfirst32i64( + _In_z_ wchar_t const* _FileName, + _Out_ struct _wfinddata32i64_t* _FindData + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP intptr_t __cdecl _wfindfirst64i32( + _In_z_ wchar_t const* _FileName, + _Out_ struct _wfinddata64i32_t* _FindData + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP intptr_t __cdecl _wfindfirst64( + _In_z_ wchar_t const* _FileName, + _Out_ struct _wfinddata64_t* _FindData + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP int __cdecl _wfindnext32i64( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata32i64_t* _FindData + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP int __cdecl _wfindnext64i32( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata64i32_t* _FindData + ); + +_Success_(return != -1) +_Check_return_ +_ACRTIMP int __cdecl _wfindnext64( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata64_t* _FindData + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wsopen_s( + _Out_ int* _FileHandle, + _In_z_ wchar_t const* _FileName, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + _In_ int _PermissionFlag + ); + +_ACRTIMP errno_t __cdecl _wsopen_dispatch( + _In_z_ wchar_t const* _FileName, + _In_ int _OFlag, + _In_ int _ShFlag, + _In_ int _PMode, + _Out_ int* _PFileHandle, + _In_ int _BSecure + ); + + + +#if defined __cplusplus + + // These functions do not validate pmode; use _wsopen_s instead. + extern "C++" _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) + inline int __CRTDECL _wopen( + _In_z_ wchar_t const* _FileName, + _In_ int _OFlag, + _In_ int _PMode = 0 + ) + { + int _FileHandle; + // Last parameter passed as 0 because we don't want to validate pmode from _open + errno_t const _Result = _wsopen_dispatch(_FileName, _OFlag, _SH_DENYNO, _PMode, &_FileHandle, 0); + return _Result ? -1 : _FileHandle; + } + + extern "C++" _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) + inline int __CRTDECL _wsopen( + _In_z_ wchar_t const* _FileName, + _In_ int _OFlag, + _In_ int _ShFlag, + _In_ int _PMode = 0 + ) + { + int _FileHandle; + // Last parameter passed as 0 because we don't want to validate pmode from _sopen + errno_t const _Result = _wsopen_dispatch(_FileName, _OFlag, _ShFlag, _PMode, &_FileHandle, 0); + return _Result ? -1 : _FileHandle; + } + + +#else + + _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) + _ACRTIMP int __cdecl _wopen( + _In_z_ wchar_t const* _FileName, + _In_ int _OpenFlag, + ...); + + _Check_return_ _CRT_INSECURE_DEPRECATE(_wsopen_s) + _ACRTIMP int __cdecl _wsopen( + _In_z_ wchar_t const* _FileName, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + ...); + +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wprocess.h b/sdk/include/ucrt/corecrt_wprocess.h new file mode 100644 index 0000000000000..c686da602cd16 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wprocess.h @@ -0,0 +1,127 @@ +// +// corecrt_wprocess.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) process functionality, shared +// by and . +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#if _CRT_FUNCTIONS_REQUIRED + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _DCRTIMP intptr_t __cdecl _wexecl( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wexecle( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wexeclp( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wexeclpe( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wexecv( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList + ); + + _DCRTIMP intptr_t __cdecl _wexecve( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList, + _In_opt_z_ wchar_t const* const* _Env + ); + + _DCRTIMP intptr_t __cdecl _wexecvp( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList + ); + + _DCRTIMP intptr_t __cdecl _wexecvpe( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList, + _In_opt_z_ wchar_t const* const* _Env + ); + + _DCRTIMP intptr_t __cdecl _wspawnl( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wspawnle( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wspawnlp( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wspawnlpe( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _ArgList, + ...); + + _DCRTIMP intptr_t __cdecl _wspawnv( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList + ); + + _DCRTIMP intptr_t __cdecl _wspawnve( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList, + _In_opt_z_ wchar_t const* const* _Env + ); + + _DCRTIMP intptr_t __cdecl _wspawnvp( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList + ); + + _DCRTIMP intptr_t __cdecl _wspawnvpe( + _In_ int _Mode, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* const* _ArgList, + _In_opt_z_ wchar_t const* const* _Env + ); + + _DCRTIMP int __cdecl _wsystem( + _In_opt_z_ wchar_t const* _Command + ); + + #endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP +#endif // _CRT_FUNCTIONS_REQUIRED + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wstdio.h b/sdk/include/ucrt/corecrt_wstdio.h new file mode 100644 index 0000000000000..bec2554cecc37 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wstdio.h @@ -0,0 +1,2171 @@ +// +// corecrt_wstdio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) I/O functionality, shared by +// and . It also defines several core I/O types, which are +// also shared by those two headers. +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Stream I/O Declarations Required by this Header +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _FILE_DEFINED + #define _FILE_DEFINED + typedef struct _iobuf + { + void* _Placeholder; + } FILE; +#endif + +_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned _Ix); + +#define stdin (__acrt_iob_func(0)) +#define stdout (__acrt_iob_func(1)) +#define stderr (__acrt_iob_func(2)) + +#define WEOF ((wint_t)(0xFFFF)) + + + +#if _CRT_FUNCTIONS_REQUIRED + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Stream I/O Functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _ACRTIMP wint_t __cdecl fgetwc( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _fgetwchar(void); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl fputwc( + _In_ wchar_t _Character, + _Inout_ FILE* _Stream); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _fputwchar( + _In_ wchar_t _Character + ); + + _Check_return_ + _ACRTIMP wint_t __cdecl getwc( + _Inout_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP wint_t __cdecl getwchar(void); + + + _Check_return_opt_ + _Success_(return == _Buffer) + _ACRTIMP wchar_t* __cdecl fgetws( + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ int _BufferCount, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl fputws( + _In_z_ wchar_t const* _Buffer, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _Success_(return != 0) + _ACRTIMP wchar_t* __cdecl _getws_s( + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + _Success_(return != 0) + wchar_t*, _getws_s, + _Always_(_Post_z_) wchar_t, _Buffer + ) + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl putwc( + _In_ wchar_t _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl putwchar( + _In_ wchar_t _Character + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _putws( + _In_z_ wchar_t const* _Buffer + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl ungetwc( + _In_ wint_t _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP FILE * __cdecl _wfdopen( + _In_ int _FileHandle, + _In_z_ wchar_t const* _Mode + ); + + _Check_return_ _CRT_INSECURE_DEPRECATE(_wfopen_s) + _ACRTIMP FILE* __cdecl _wfopen( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _Mode + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _wfopen_s( + _Outptr_result_maybenull_ FILE** _Stream, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _Mode + ); + + _Check_return_ + _CRT_INSECURE_DEPRECATE(_wfreopen_s) + _ACRTIMP FILE* __cdecl _wfreopen( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _Mode, + _Inout_ FILE* _OldStream + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _wfreopen_s( + _Outptr_result_maybenull_ FILE** _Stream, + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _Mode, + _Inout_ FILE* _OldStream + ); + + _Check_return_ + _ACRTIMP FILE* __cdecl _wfsopen( + _In_z_ wchar_t const* _FileName, + _In_z_ wchar_t const* _Mode, + _In_ int _ShFlag + ); + + _ACRTIMP void __cdecl _wperror( + _In_opt_z_ wchar_t const* _ErrorMessage + ); + + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _Check_return_ + _DCRTIMP FILE* __cdecl _wpopen( + _In_z_ wchar_t const* _Command, + _In_z_ wchar_t const* _Mode + ); + + #endif + + _ACRTIMP int __cdecl _wremove( + _In_z_ wchar_t const* _FileName + ); + + #pragma push_macro("_wtempnam") + #undef _wtempnam + + _Check_return_ + _ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wtempnam( + _In_opt_z_ wchar_t const* _Directory, + _In_opt_z_ wchar_t const* _FilePrefix + ); + + #pragma pop_macro("_wtempnam") + + _Success_(return == 0) + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _wtmpnam_s( + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + _Success_(return == 0) + errno_t, _wtmpnam_s, + _Always_(_Post_z_) wchar_t, _Buffer + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + _Success_(return != 0) + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wtmpnam, + _Pre_maybenull_ _Always_(_Post_z_), wchar_t, _Buffer + ) + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // I/O Synchronization and _nolock family of I/O functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _fgetwc_nolock( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _fputwc_nolock( + _In_ wchar_t _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _getwc_nolock( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _putwc_nolock( + _In_ wchar_t _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP wint_t __cdecl _ungetwc_nolock( + _In_ wint_t _Character, + _Inout_ FILE* _Stream + ); + + #if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL + #define fgetwc(stream) _getwc_nolock(stream) + #define fputwc(c, stream) _putwc_nolock(c, stream) + #define ungetwc(c, stream) _ungetwc_nolock(c, stream) + #endif + + + + // Variadic functions are not supported in managed code under /clr + #ifdef _M_CEE_MIXED + #pragma managed(push, off) + #endif + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Formatted Output Functions (Stream) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vfwprintf( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vfwprintf_s( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vfwprintf_p( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfwprintf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfwprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfwprintf( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfwprintf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfwprintf_s(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfwprintf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_s_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfwprintf_p_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfwprintf_p(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfwprintf_p( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_p_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vwprintf_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_l(stdout, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vwprintf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_l(stdout, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vwprintf_s_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_s_l(stdout, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vwprintf_s( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_s_l(stdout, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vwprintf_p_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_p_l(stdout, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vwprintf_p( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwprintf_p_l(stdout, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fwprintf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwprintf_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL fwprintf( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwprintf_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fwprintf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwprintf_s_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL fwprintf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwprintf_s_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fwprintf_p_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwprintf_p_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fwprintf_p( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwprintf_p_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _wprintf_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwprintf_l(stdout, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL wprintf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwprintf_l(stdout, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _wprintf_s_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwprintf_s_l(stdout, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL wprintf_s( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwprintf_s_l(stdout, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _wprintf_p_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwprintf_p_l(stdout, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _wprintf_p( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwprintf_p_l(stdout, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Formatted Input Functions (Stream) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vfwscanf( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Scanf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfwscanf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfwscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Stream, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfwscanf( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwscanf_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfwscanf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfwscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Stream, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfwscanf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwscanf_s_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + #endif + + _CRT_STDIO_INLINE int __CRTDECL _vwscanf_l( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwscanf_l(stdin, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vwscanf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwscanf_l(stdin, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vwscanf_s_l( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwscanf_s_l(stdin, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vwscanf_s( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfwscanf_s_l(stdin, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_fwscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _fwscanf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwscanf_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(fwscanf_s) + _CRT_STDIO_INLINE int __CRTDECL fwscanf( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwscanf_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fwscanf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_s_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwscanf_s_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL fwscanf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_s_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwscanf_s_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_wscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _wscanf_l( + _In_z_ _Scanf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwscanf_l(stdin, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(wscanf_s) + _CRT_STDIO_INLINE int __CRTDECL wscanf( + _In_z_ _Scanf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwscanf_l(stdin, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _wscanf_s_l( + _In_z_ _Scanf_s_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfwscanf_s_l(stdin, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL wscanf_s( + _In_z_ _Scanf_s_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfwscanf_s_l(stdin, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Formatted Output Functions (String) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + #ifndef _CRT_NON_CONFORMING_SWPRINTFS + #define _SWPRINTFS_DEPRECATED _CRT_DEPRECATE_TEXT( \ + "function has been changed to conform with the ISO C standard, " \ + "adding an extra character count parameter. To use the traditional " \ + "Microsoft version, set _CRT_NON_CONFORMING_SWPRINTFS.") + #else + #define _SWPRINTFS_DEPRECATED + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vswprintf( + _In_ unsigned __int64 _Options, + _Out_writes_opt_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vswprintf_s( + _In_ unsigned __int64 _Options, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vsnwprintf_s( + _In_ unsigned __int64 _Options, + _Out_writes_opt_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _Check_return_opt_ + _ACRTIMP int __cdecl __stdio_common_vswprintf_p( + _In_ unsigned __int64 _Options, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vsnwprintf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _vsnwprintf_l( + _Out_writes_opt_(_BufferCount) _Post_maybez_ wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vswprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnwprintf_s_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsnwprintf_s( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnwprintf_s( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, NULL, _ArgList); + } + #endif + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX( + _Success_(return >= 0) + int, __RETURN_POLICY_SAME, _CRT_STDIO_INLINE, __CRTDECL, _snwprintf, _vsnwprintf, + _Pre_notnull_ _Post_maybez_ wchar_t, + _Out_writes_opt_(_BufferCount) _Post_maybez_, wchar_t, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const*, _Format + ) + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vsnwprintf_s) + _CRT_STDIO_INLINE int __CRTDECL _vsnwprintf( + _Out_writes_opt_(_BufferCount) _Post_maybez_ wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnwprintf_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + _Success_(return >= 0) + int, _vsnwprintf_s, + _Always_(_Post_z_) wchar_t, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const*, _Format, + va_list, _ArgList + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf_c_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vswprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf_c( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_c_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL __vswprintf_l( + _Pre_notnull_ _Always_(_Post_z_) wchar_t* const _Buffer, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_l(_Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf( + _Pre_notnull_ _Always_(_Post_z_) wchar_t* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_l(_Buffer, (size_t)-1, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vswprintf( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(1) wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_c_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf_s_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vswprintf_s( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _CRT_STDIO_INLINE int __CRTDECL vswprintf_s( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_s_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + _Success_(return >= 0) + int, vswprintf_s, + _Always_(_Post_z_) wchar_t, _Buffer, + _In_z_ _Printf_format_string_ wchar_t const*, _Format, + va_list, _ArgList + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf_p_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vswprintf_p( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswprintf_p( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswprintf_p_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _vscwprintf_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vswprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, + NULL, 0, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _vscwprintf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vscwprintf_l(_Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _vscwprintf_p_l( + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vswprintf_p( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, + NULL, 0, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _vscwprintf_p( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vscwprintf_p_l(_Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL __swprintf_l( + _Pre_notnull_ _Always_(_Post_z_) wchar_t* const _Buffer, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = __vswprintf_l(_Buffer, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf( + _Pre_notnull_ _Always_(_Post_z_) wchar_t* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = __vswprintf_l(_Buffer, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL swprintf( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vswprintf_c_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_ARGLIST_EX( + _Success_(return >= 0) + int, __RETURN_POLICY_SAME, _CRT_STDIO_INLINE, __CRTDECL, __swprintf_l, __vswprintf_l, _vswprintf_s_l, + _Pre_notnull_ _Always_(_Post_z_) wchar_t, + _Pre_notnull_ _Always_(_Post_z_), wchar_t, _Buffer, + _In_z_ _Printf_format_string_params_(2) wchar_t const*, _Format, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST_EX( + _Success_(return >= 0) + int, __RETURN_POLICY_SAME, _CRT_STDIO_INLINE, __CRTDECL, _swprintf, swprintf_s, _vswprintf, vswprintf_s, + _Pre_notnull_ _Always_(_Post_z_), wchar_t, _Buffer, + _In_z_ _Printf_format_string_ wchar_t const*, _Format + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf_s_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _CRT_STDIO_INLINE int __CRTDECL swprintf_s( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vswprintf_s_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST( + _Success_(return >= 0) + int, swprintf_s, vswprintf_s, + _Always_(_Post_z_) wchar_t, _Buffer, + _In_z_ _Printf_format_string_ wchar_t const*, _Format + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf_p_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf_p( + _Out_writes_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vswprintf_p_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf_c_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swprintf_c( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vswprintf_c_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_snwprintf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _snwprintf_l( + _Out_writes_opt_(_BufferCount) _Post_maybez_ wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = _vsnwprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snwprintf( + _Out_writes_opt_(_BufferCount) _Post_maybez_ wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const* _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = _vsnwprintf_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snwprintf_s_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snwprintf_s( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) wchar_t* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsnwprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST( + _Success_(return >= 0) + int, _snwprintf_s, _vsnwprintf_s, + _Always_(_Post_z_) wchar_t, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ wchar_t const*, _Format + ) + + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _scwprintf_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vscwprintf_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _scwprintf( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vscwprintf_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _scwprintf_p_l( + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vscwprintf_p_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _scwprintf_p( + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vscwprintf_p_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + + #if !defined RC_INVOKED && !defined __midl && !defined _INC_SWPRINTF_INL_ + // C4141: double deprecation + // C6054: string may not be zero-terminated + #pragma warning(push) + #pragma warning(disable: 4141 6054) + + #ifdef __cplusplus + + extern "C++" _SWPRINTFS_DEPRECATED _CRT_INSECURE_DEPRECATE(swprintf_s) + inline int swprintf( + _Pre_notnull_ _Post_z_ wchar_t* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + ...) throw() + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = vswprintf(_Buffer, _CRT_INT_MAX, _Format, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + + extern "C++" _SWPRINTFS_DEPRECATED _CRT_INSECURE_DEPRECATE(vswprintf_s) + inline int __CRTDECL vswprintf( + _Pre_notnull_ _Post_z_ wchar_t* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) throw() + { + return vswprintf(_Buffer, _CRT_INT_MAX, _Format, _ArgList); + } + + extern "C++" _SWPRINTFS_DEPRECATED _CRT_INSECURE_DEPRECATE(_swprintf_s_l) + inline int _swprintf_l( + _Pre_notnull_ _Post_z_ wchar_t* const _Buffer, + _In_z_ _Printf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) throw() + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswprintf_l(_Buffer, (size_t)-1, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + + extern "C++" _SWPRINTFS_DEPRECATED _CRT_INSECURE_DEPRECATE(_vswprintf_s_l) + inline int __CRTDECL _vswprintf_l( + _Pre_notnull_ _Post_z_ wchar_t* const _Buffer, + _In_z_ _Printf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) throw() + { + return _vswprintf_l(_Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + + #endif // __cplusplus + + #pragma warning(pop) + #endif // !_INC_SWPRINTF_INL_ + + #if defined _CRT_NON_CONFORMING_SWPRINTFS && !defined __cplusplus + #define swprintf _swprintf + #define vswprintf _vswprintf + #define _swprintf_l __swprintf_l + #define _vswprintf_l __vswprintf_l + #endif + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Wide Character Formatted Input Functions (String) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Success_(return >= 0) + _ACRTIMP int __cdecl __stdio_common_vswscanf( + _In_ unsigned __int64 _Options, + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Scanf_format_string_params_(2) wchar_t const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswscanf_l( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vswscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vswscanf( + _In_z_ wchar_t const* _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswscanf_l(_Buffer, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vswscanf_s_l( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vswscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vswscanf_s( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Printf_format_string_ wchar_t const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vswscanf_s_l(_Buffer, _Format, NULL, _ArgList); + } + #endif + + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + _Success_(return >= 0) + int, vswscanf_s, + _In_z_ wchar_t, _Buffer, + _In_z_ _Printf_format_string_ wchar_t const*, _Format, + va_list, _ArgList + ) + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vsnwscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _vsnwscanf_l( + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vswscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnwscanf_s_l( + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_s_format_string_params_(2) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vswscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_swscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _swscanf_l( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Scanf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswscanf_l(_Buffer, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_ _CRT_INSECURE_DEPRECATE(swscanf_s) + _CRT_STDIO_INLINE int __CRTDECL swscanf( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Scanf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vswscanf_l(_Buffer, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _swscanf_s_l( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Scanf_s_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vswscanf_s_l(_Buffer, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL swscanf_s( + _In_z_ wchar_t const* const _Buffer, + _In_z_ _Scanf_s_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vswscanf_s_l(_Buffer, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_snwscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _snwscanf_l( + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = _vsnwscanf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_snwscanf_s) + _CRT_STDIO_INLINE int __CRTDECL _snwscanf( + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = _vsnwscanf_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snwscanf_s_l( + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_s_format_string_params_(0) wchar_t const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsnwscanf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snwscanf_s( + _In_reads_(_BufferCount) _Pre_z_ wchar_t const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_s_format_string_ wchar_t const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsnwscanf_s_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #ifdef _M_CEE_MIXED + #pragma managed(pop) + #endif +#endif // _CRT_FUNCTIONS_REQUIRED + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wstdlib.h b/sdk/include/ucrt/corecrt_wstdlib.h new file mode 100644 index 0000000000000..755db3639067b --- /dev/null +++ b/sdk/include/ucrt/corecrt_wstdlib.h @@ -0,0 +1,481 @@ +// +// corecrt_wstdlib.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) C Standard Library functions +// that are declared by both and . +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +// Maximum number of elements, including null terminator (and negative sign +// where appropriate), needed for integer-to-string conversions for several +// bases and integer types. +#define _MAX_ITOSTR_BASE16_COUNT (8 + 1) +#define _MAX_ITOSTR_BASE10_COUNT (1 + 10 + 1) +#define _MAX_ITOSTR_BASE8_COUNT (11 + 1) +#define _MAX_ITOSTR_BASE2_COUNT (32 + 1) + +#define _MAX_LTOSTR_BASE16_COUNT (8 + 1) +#define _MAX_LTOSTR_BASE10_COUNT (1 + 10 + 1) +#define _MAX_LTOSTR_BASE8_COUNT (11 + 1) +#define _MAX_LTOSTR_BASE2_COUNT (32 + 1) + +#define _MAX_ULTOSTR_BASE16_COUNT (8 + 1) +#define _MAX_ULTOSTR_BASE10_COUNT (10 + 1) +#define _MAX_ULTOSTR_BASE8_COUNT (11 + 1) +#define _MAX_ULTOSTR_BASE2_COUNT (32 + 1) + +#define _MAX_I64TOSTR_BASE16_COUNT (16 + 1) +#define _MAX_I64TOSTR_BASE10_COUNT (1 + 19 + 1) +#define _MAX_I64TOSTR_BASE8_COUNT (22 + 1) +#define _MAX_I64TOSTR_BASE2_COUNT (64 + 1) + +#define _MAX_U64TOSTR_BASE16_COUNT (16 + 1) +#define _MAX_U64TOSTR_BASE10_COUNT (20 + 1) +#define _MAX_U64TOSTR_BASE8_COUNT (22 + 1) +#define _MAX_U64TOSTR_BASE2_COUNT (64 + 1) + + +#if _CRT_FUNCTIONS_REQUIRED + + _Success_(return == 0) + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _itow_s( + _In_ int _Value, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + errno_t, _itow_s, + _In_ int, _Value, + wchar_t, _Buffer, + _In_ int, _Radix + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _itow, + _In_ int, _Value, + _Pre_notnull_ _Post_z_, wchar_t, _Buffer, + _In_ int, _Radix + ) + + _Success_(return == 0) + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _ltow_s( + _In_ long _Value, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + errno_t, _ltow_s, + _In_ long, _Value, + wchar_t, _Buffer, + _In_ int, _Radix + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _ltow, + _In_ long, _Value, + _Pre_notnull_ _Post_z_, wchar_t, _Buffer, + _In_ int, _Radix + ) + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _ultow_s( + _In_ unsigned long _Value, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + errno_t, _ultow_s, + _In_ unsigned long, _Value, + wchar_t, _Buffer, + _In_ int, _Radix + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _ultow, + _In_ unsigned long, _Value, + _Pre_notnull_ _Post_z_, wchar_t, _Buffer, + _In_ int, _Radix + ) + + _Check_return_ + _ACRTIMP double __cdecl wcstod( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr + ); + + _Check_return_ + _ACRTIMP double __cdecl _wcstod_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP long __cdecl wcstol( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP long __cdecl _wcstol_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP long long __cdecl wcstoll( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP long long __cdecl _wcstoll_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP unsigned long __cdecl wcstoul( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP unsigned long __cdecl _wcstoul_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP unsigned long long __cdecl wcstoull( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP unsigned long long __cdecl _wcstoull_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP long double __cdecl wcstold( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr + ); + + _Check_return_ + _ACRTIMP long double __cdecl _wcstold_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP float __cdecl wcstof( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr + ); + + _Check_return_ + _ACRTIMP float __cdecl _wcstof_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP double __cdecl _wtof( + _In_z_ wchar_t const* _String + ); + + _Check_return_ + _ACRTIMP double __cdecl _wtof_l( + _In_z_ wchar_t const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP int __cdecl _wtoi( + _In_z_ wchar_t const* _String + ); + + _Check_return_ + _ACRTIMP int __cdecl _wtoi_l( + _In_z_ wchar_t const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP long __cdecl _wtol( + _In_z_ wchar_t const* _String + ); + + _Check_return_ + _ACRTIMP long __cdecl _wtol_l( + _In_z_ wchar_t const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP long long __cdecl _wtoll( + _In_z_ wchar_t const* _String + ); + + _Check_return_ + _ACRTIMP long long __cdecl _wtoll_l( + _In_z_ wchar_t const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _i64tow_s( + _In_ __int64 _Value, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + + _CRT_INSECURE_DEPRECATE(_i64tow_s) + _ACRTIMP wchar_t* __cdecl _i64tow( + _In_ __int64 _Value, + _Pre_notnull_ _Post_z_ wchar_t* _Buffer, + _In_ int _Radix + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _ui64tow_s( + _In_ unsigned __int64 _Value, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + + _CRT_INSECURE_DEPRECATE(_ui64tow_s) + _ACRTIMP wchar_t* __cdecl _ui64tow( + _In_ unsigned __int64 _Value, + _Pre_notnull_ _Post_z_ wchar_t* _Buffer, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _wtoi64( + _In_z_ wchar_t const* _String + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _wtoi64_l( + _In_z_ wchar_t const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _wcstoi64( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _wcstoi64_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP unsigned __int64 __cdecl _wcstoui64( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + + _Check_return_ + _ACRTIMP unsigned __int64 __cdecl _wcstoui64_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + #pragma push_macro("_wfullpath") + #undef _wfullpath + + _Success_(return != 0) + _Check_return_ + _ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wfullpath( + _Out_writes_opt_z_(_BufferCount) wchar_t* _Buffer, + _In_z_ wchar_t const* _Path, + _In_ size_t _BufferCount + ); + + #pragma pop_macro("_wfullpath") + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl _wmakepath_s( + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_opt_z_ wchar_t const* _Drive, + _In_opt_z_ wchar_t const* _Dir, + _In_opt_z_ wchar_t const* _Filename, + _In_opt_z_ wchar_t const* _Ext + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4( + errno_t, _wmakepath_s, + wchar_t, _Buffer, + _In_opt_z_ wchar_t const*, _Drive, + _In_opt_z_ wchar_t const*, _Dir, + _In_opt_z_ wchar_t const*, _Filename, + _In_opt_z_ wchar_t const*, _Ext + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4( + void, __RETURN_POLICY_VOID, _ACRTIMP, _wmakepath, + _Pre_notnull_ _Post_z_, wchar_t, _Buffer, + _In_opt_z_ wchar_t const*, _Drive, + _In_opt_z_ wchar_t const*, _Dir, + _In_opt_z_ wchar_t const*, _Filename, + _In_opt_z_ wchar_t const*, _Ext + ) + + _ACRTIMP void __cdecl _wperror( + _In_opt_z_ wchar_t const* _ErrorMessage + ); + + _CRT_INSECURE_DEPRECATE(_wsplitpath_s) + _ACRTIMP void __cdecl _wsplitpath( + _In_z_ wchar_t const* _FullPath, + _Pre_maybenull_ _Post_z_ wchar_t* _Drive, + _Pre_maybenull_ _Post_z_ wchar_t* _Dir, + _Pre_maybenull_ _Post_z_ wchar_t* _Filename, + _Pre_maybenull_ _Post_z_ wchar_t* _Ext + ); + + _ACRTIMP errno_t __cdecl _wsplitpath_s( + _In_z_ wchar_t const* _FullPath, + _Out_writes_opt_z_(_DriveCount) wchar_t* _Drive, + _In_ size_t _DriveCount, + _Out_writes_opt_z_(_DirCount) wchar_t* _Dir, + _In_ size_t _DirCount, + _Out_writes_opt_z_(_FilenameCount) wchar_t* _Filename, + _In_ size_t _FilenameCount, + _Out_writes_opt_z_(_ExtCount) wchar_t* _Ext, + _In_ size_t _ExtCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH( + errno_t, _wsplitpath_s, + wchar_t, _Path + ) + + #pragma push_macro("_wdupenv_s") + #undef _wdupenv_s + + _Check_return_wat_ + _DCRTIMP errno_t __cdecl _wdupenv_s( + _Outptr_result_buffer_maybenull_(*_BufferCount) _Outptr_result_maybenull_z_ wchar_t** _Buffer, + _Out_opt_ size_t* _BufferCount, + _In_z_ wchar_t const* _VarName + ); + + #pragma pop_macro("_wdupenv_s") + + _Check_return_ _CRT_INSECURE_DEPRECATE(_wdupenv_s) + _DCRTIMP wchar_t* __cdecl _wgetenv( + _In_z_ wchar_t const* _VarName + ); + + _Success_(return == 0) + _Check_return_wat_ + _DCRTIMP errno_t __cdecl _wgetenv_s( + _Out_ size_t* _RequiredCount, + _Out_writes_opt_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount, + _In_z_ wchar_t const* _VarName + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + _Success_(return == 0) + errno_t, _wgetenv_s, + _Out_ size_t*, _RequiredCount, + wchar_t, _Buffer, + _In_z_ wchar_t const*, _VarName + ) + + _Check_return_ + _DCRTIMP int __cdecl _wputenv( + _In_z_ wchar_t const* _EnvString + ); + + _Check_return_wat_ + _DCRTIMP errno_t __cdecl _wputenv_s( + _In_z_ wchar_t const* _Name, + _In_z_ wchar_t const* _Value + ); + + _DCRTIMP errno_t __cdecl _wsearchenv_s( + _In_z_ wchar_t const* _Filename, + _In_z_ wchar_t const* _VarName, + _Out_writes_z_(_BufferCount) wchar_t* _Buffer, + _In_ size_t _BufferCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0( + errno_t, _wsearchenv_s, + _In_z_ wchar_t const*, _Filename, + _In_z_ wchar_t const*, _VarName, + wchar_t, _ResultPath + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0( + void, __RETURN_POLICY_VOID, _DCRTIMP, _wsearchenv, + _In_z_ wchar_t const*, _Filename, + _In_z_ wchar_t const*, _VarName, + _Pre_notnull_ _Post_z_, wchar_t, _ResultPath + ) + + _DCRTIMP int __cdecl _wsystem( + _In_opt_z_ wchar_t const* _Command + ); + +#endif // _CRT_FUNCTIONS_REQUIRED + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wstring.h b/sdk/include/ucrt/corecrt_wstring.h new file mode 100644 index 0000000000000..4865eacb8a344 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wstring.h @@ -0,0 +1,641 @@ +// +// corecrt_wstring.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) string functionality, shared +// by and . +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#ifndef __midl + +_CRT_BEGIN_C_HEADER + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Secure Alternatives +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if __STDC_WANT_SECURE_LIB__ + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl wcscat_s( + _Inout_updates_z_(_SizeInWords) wchar_t* _Destination, + _In_ rsize_t _SizeInWords, + _In_z_ wchar_t const* _Source + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl wcscpy_s( + _Out_writes_z_(_SizeInWords) wchar_t* _Destination, + _In_ rsize_t _SizeInWords, + _In_z_ wchar_t const* _Source + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl wcsncat_s( + _Inout_updates_z_(_SizeInWords) wchar_t* _Destination, + _In_ rsize_t _SizeInWords, + _In_reads_or_z_(_MaxCount) wchar_t const* _Source, + _In_ rsize_t _MaxCount + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl wcsncpy_s( + _Out_writes_z_(_SizeInWords) wchar_t* _Destination, + _In_ rsize_t _SizeInWords, + _In_reads_or_z_(_MaxCount) wchar_t const* _Source, + _In_ rsize_t _MaxCount + ); + + _Check_return_ + _ACRTIMP wchar_t* __cdecl wcstok_s( + _Inout_opt_z_ wchar_t* _String, + _In_z_ wchar_t const* _Delimiter, + _Inout_ _Deref_prepost_opt_z_ wchar_t** _Context + ); + +#endif // __STDC_WANT_SECURE_LIB__ + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Wide-Character Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma push_macro("_wcsdup") + #undef _wcsdup +#endif + +_Check_return_ +_ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wcsdup( + _In_z_ wchar_t const* _String + ); + +#if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma pop_macro("_wcsdup") +#endif + + + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, wcscat_s, + wchar_t, _Destination, + _In_z_ wchar_t const*, _Source + ) + +#ifndef RC_INVOKED + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, wcscat, + _Inout_updates_z_(_String_length_(_Destination) + _String_length_(_Source) + 1), wchar_t, _Destination, + _In_z_ wchar_t const*, _Source + ) +#endif + +_Check_return_ +_ACRTIMP int __cdecl wcscmp( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2 + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, wcscpy_s, + wchar_t, _Destination, + _In_z_ wchar_t const*, _Source + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, wcscpy, + _Out_writes_z_(_String_length_(_Source) + 1), wchar_t, _Destination, + _In_z_ wchar_t const*, _Source + ) + +_Check_return_ +_ACRTIMP size_t __cdecl wcscspn( + _In_z_ wchar_t const* _String, + _In_z_ wchar_t const* _Control + ); + +_Check_return_ +_ACRTIMP size_t __cdecl wcslen( + _In_z_ wchar_t const* _String + ); + +_Check_return_ +_When_( + _MaxCount > _String_length_(_Source), + _Post_satisfies_(return == _String_length_(_Source)) +) +_When_( + _MaxCount <= _String_length_(_Source), + _Post_satisfies_(return == _MaxCount) +) +_ACRTIMP size_t __cdecl wcsnlen( + _In_reads_or_z_(_MaxCount) wchar_t const* _Source, + _In_ size_t _MaxCount + ); + +#if __STDC_WANT_SECURE_LIB__ && !defined(__midl) + + _Check_return_ + _When_( + _MaxCount > _String_length_(_Source), + _Post_satisfies_(return == _String_length_(_Source)) + ) + _When_( + _MaxCount <= _String_length_(_Source), + _Post_satisfies_(return == _MaxCount) + ) + static __inline size_t __CRTDECL wcsnlen_s( + _In_reads_or_z_(_MaxCount) wchar_t const* _Source, + _In_ size_t _MaxCount + ) + { + return (_Source == 0) ? 0 : wcsnlen(_Source, _MaxCount); + } + +#endif // __STDC_WANT_SECURE_LIB__ && !defined(__midl) + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, wcsncat_s, + _Prepost_z_ wchar_t, _Destination, + _In_reads_or_z_(_Count) wchar_t const*, _Source, + _In_ size_t, _Count + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, wcsncat, wcsncat_s, + _Inout_updates_z_(_Size) wchar_t, + _Inout_updates_z_(_Count), wchar_t, _Destination, + _In_reads_or_z_(_Count) wchar_t const*, _Source, + _In_ size_t, _Count + ) + +_Check_return_ +_ACRTIMP int __cdecl wcsncmp( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, wcsncpy_s, + wchar_t, _Destination, + _In_reads_or_z_(_Count) wchar_t const*, _Source, + _In_ size_t, _Count + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, wcsncpy, wcsncpy_s, + _Pre_notnull_ _Post_maybez_ wchar_t, + _Out_writes_(_Count) _Post_maybez_, wchar_t, _Destination, + _In_reads_or_z_(_Count) wchar_t const*, _Source, + _In_ size_t, _Count + ) + +_Check_return_ +_ACRTIMP wchar_t _CONST_RETURN* __cdecl wcspbrk( + _In_z_ wchar_t const* _String, + _In_z_ wchar_t const* _Control + ); + +_Check_return_ +_ACRTIMP size_t __cdecl wcsspn( + _In_z_ wchar_t const* _String, + _In_z_ wchar_t const* _Control + ); + +_Check_return_ _CRT_INSECURE_DEPRECATE(wcstok_s) +_ACRTIMP wchar_t* __cdecl wcstok( + _Inout_opt_z_ wchar_t* _String, + _In_z_ wchar_t const* _Delimiter, + _Inout_opt_ _Deref_prepost_opt_z_ wchar_t** _Context + ); + +#if !defined RC_INVOKED && !defined __midl + + #if defined _CRT_NON_CONFORMING_WCSTOK + #define _WCSTOK_DEPRECATED _CRT_INSECURE_DEPRECATE(wcstok_s) + #else + #define _WCSTOK_DEPRECATED _CRT_DEPRECATE_TEXT( \ + "wcstok has been changed to conform with the ISO C standard, " \ + "adding an extra context parameter. To use the legacy Microsoft " \ + "wcstok, define _CRT_NON_CONFORMING_WCSTOK.") + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(wcstok_s) + static __inline wchar_t* __CRTDECL _wcstok( + _Inout_opt_z_ wchar_t* const _String, + _In_z_ wchar_t const* const _Delimiter + ) + { + return wcstok(_String, _Delimiter, 0); + } + + #if defined _CRT_NON_CONFORMING_WCSTOK && !defined __cplusplus + #define wcstok _wcstok + #endif + + #if defined __cplusplus && !defined _CRT_NO_INLINE_DEPRECATED_WCSTOK + extern "C++" _Check_return_ _WCSTOK_DEPRECATED + inline wchar_t* __CRTDECL wcstok( + _Inout_opt_z_ wchar_t* _String, + _In_z_ wchar_t const* _Delimiter + ) throw() + { + return wcstok(_String, _Delimiter, 0); + } + #endif + +#endif // !defined RC_INVOKED && !defined __midl + + + +_Ret_z_ +_Check_return_ _CRT_INSECURE_DEPRECATE(_wcserror_s) +_ACRTIMP wchar_t* __cdecl _wcserror( + _In_ int _ErrorNumber + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wcserror_s( + _Out_writes_opt_z_(_SizeInWords) wchar_t* _Buffer, + _In_ size_t _SizeInWords, + _In_ int _ErrorNumber + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _wcserror_s, + wchar_t, _Buffer, + _In_ int, _Error + ) + +_Ret_z_ +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(__wcserror_s) +_ACRTIMP wchar_t* __cdecl __wcserror( + _In_opt_z_ wchar_t const* _String + ); + +_Check_return_wat_ _ACRTIMP_ALT errno_t __cdecl __wcserror_s( + _Out_writes_opt_z_(_SizeInWords) wchar_t* _Buffer, + _In_ size_t _SizeInWords, + _In_z_ wchar_t const* _ErrorMessage + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, __wcserror_s, + wchar_t, _Buffer, + _In_z_ wchar_t const*, _ErrorMessage + ) + +_Check_return_ _ACRTIMP int __cdecl _wcsicmp( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2 + ); + +_Check_return_ _ACRTIMP int __cdecl _wcsicmp_l( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ _ACRTIMP int __cdecl _wcsnicmp( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount + ); + +_Check_return_ _ACRTIMP int __cdecl _wcsnicmp_l( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Check_return_wat_ _ACRTIMP errno_t __cdecl _wcsnset_s( + _Inout_updates_z_(_SizeInWords) wchar_t* _Destination, + _In_ size_t _SizeInWords, + _In_ wchar_t _Value, + _In_ size_t _MaxCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _wcsnset_s, + _Prepost_z_ wchar_t, _Destination, + _In_ wchar_t, _Value, + _In_ size_t, _MaxCount + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wcsnset, _wcsnset_s, + _Inout_updates_z_(_Size) wchar_t, + _Inout_updates_z_(_MaxCount), wchar_t, _String, + _In_ wchar_t, _Value, + _In_ size_t, _MaxCount + ) + +_ACRTIMP wchar_t* __cdecl _wcsrev( + _Inout_z_ wchar_t* _String + ); + +_Check_return_wat_ _ACRTIMP errno_t __cdecl _wcsset_s( + _Inout_updates_z_(_SizeInWords) wchar_t* _Destination, + _In_ size_t _SizeInWords, + _In_ wchar_t _Value + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _wcsset_s, + _Prepost_z_ wchar_t, _String, + _In_ wchar_t, _Value + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wcsset, _wcsset_s, + _Inout_updates_z_(_Size) wchar_t, + _Inout_z_, wchar_t, _String, + _In_ wchar_t, _Value + ) + +_Check_return_wat_ _ACRTIMP errno_t __cdecl _wcslwr_s( + _Inout_updates_z_(_SizeInWords) wchar_t* _String, + _In_ size_t _SizeInWords + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _wcslwr_s, + _Prepost_z_ wchar_t, _String + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wcslwr, + _Inout_z_, wchar_t, _String + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wcslwr_s_l( + _Inout_updates_z_(_SizeInWords) wchar_t* _String, + _In_ size_t _SizeInWords, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _wcslwr_s_l, + _Prepost_z_ wchar_t, _String, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wcslwr_l, _wcslwr_s_l, + _Inout_updates_z_(_Size) wchar_t, + _Inout_z_, wchar_t, _String, + _In_opt_ _locale_t, _Locale + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wcsupr_s( + _Inout_updates_z_(_Size) wchar_t* _String, + _In_ size_t _Size + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _wcsupr_s, + _Prepost_z_ wchar_t, _String + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wcsupr, + _Inout_z_, wchar_t, _String + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wcsupr_s_l( + _Inout_updates_z_(_Size) wchar_t* _String, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _wcsupr_s_l, + _Prepost_z_ wchar_t, _String, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wcsupr_l, _wcsupr_s_l, + _Inout_updates_z_(_Size) wchar_t, + _Inout_z_, wchar_t, _String, + _In_opt_ _locale_t, _Locale + ) + +_Success_(return < _MaxCount) +_Check_return_opt_ +_ACRTIMP size_t __cdecl wcsxfrm( + _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t* _Destination, + _In_z_ wchar_t const* _Source, + _In_ _In_range_(<= ,_CRT_INT_MAX) size_t _MaxCount + ); + +_Success_(return < _MaxCount) +_Check_return_opt_ +_ACRTIMP size_t __cdecl _wcsxfrm_l( + _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t* _Destination, + _In_z_ wchar_t const* _Source, + _In_ _In_range_(<= ,_CRT_INT_MAX) size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl wcscoll( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2 + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcscoll_l( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcsicoll( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2 + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcsicoll_l( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcsncoll( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcsncoll_l( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcsnicoll( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _wcsnicoll_l( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Inline C++ Overloads +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef __cplusplus +extern "C++" { + + _Check_return_ + _When_(return != NULL, _Ret_range_(_String, _String+_String_length_(_String)-1)) + inline wchar_t* __CRTDECL wcschr(_In_z_ wchar_t* _String, wchar_t _C) + { + return const_cast(wcschr(static_cast(_String), _C)); + } + + _Check_return_ + inline wchar_t* __CRTDECL wcspbrk(_In_z_ wchar_t* _String, _In_z_ wchar_t const* _Control) + { + return const_cast(wcspbrk(static_cast(_String), _Control)); + } + + _Check_return_ + inline wchar_t* __CRTDECL wcsrchr(_In_z_ wchar_t* _String, _In_ wchar_t _C) + { + return const_cast(wcsrchr(static_cast(_String), _C)); + } + + _Check_return_ _Ret_maybenull_ + _When_(return != NULL, _Ret_range_(_String, _String+_String_length_(_String)-1)) + inline wchar_t* __CRTDECL wcsstr(_In_z_ wchar_t* _String, _In_z_ wchar_t const*_SubStr) + { + return const_cast(wcsstr(static_cast(_String), _SubStr)); + } + +} +#endif // __cplusplus + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Non-Standard Names +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma push_macro("wcsdup") + #undef wcsdup + #endif + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsdup) + _ACRTIMP wchar_t* __cdecl wcsdup( + _In_z_ wchar_t const* _String + ); + + #if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma pop_macro("wcsdup") + #endif + + // Declarations of functions defined in oldnames.lib: + #define wcswcs wcsstr + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsicmp) + _ACRTIMP int __cdecl wcsicmp( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2 + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsnicmp) + _ACRTIMP int __cdecl wcsnicmp( + _In_reads_or_z_(_MaxCount) wchar_t const* _String1, + _In_reads_or_z_(_MaxCount) wchar_t const* _String2, + _In_ size_t _MaxCount + ); + + _CRT_NONSTDC_DEPRECATE(_wcsnset) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl wcsnset( + _Inout_updates_z_(_MaxCount) wchar_t* _String, + _In_ wchar_t _Value, + _In_ size_t _MaxCount + ); + + _CRT_NONSTDC_DEPRECATE(_wcsrev) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl wcsrev( + _Inout_z_ wchar_t* _String + ); + + _CRT_NONSTDC_DEPRECATE(_wcsset) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl wcsset( + _Inout_z_ wchar_t* _String, + _In_ wchar_t _Value + ); + + _CRT_NONSTDC_DEPRECATE(_wcslwr) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl wcslwr( + _Inout_z_ wchar_t* _String + ); + + _CRT_NONSTDC_DEPRECATE(_wcsupr) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl wcsupr( + _Inout_z_ wchar_t* _String + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_wcsicoll) + _ACRTIMP int __cdecl wcsicoll( + _In_z_ wchar_t const* _String1, + _In_z_ wchar_t const* _String2 + ); + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER + +#endif // !__midl +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/corecrt_wtime.h b/sdk/include/ucrt/corecrt_wtime.h new file mode 100644 index 0000000000000..3366f75031dd6 --- /dev/null +++ b/sdk/include/ucrt/corecrt_wtime.h @@ -0,0 +1,207 @@ +// +// corecrt_wtime.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the wide character (wchar_t) time functionality, shared +// by and . +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +struct tm +{ + int tm_sec; // seconds after the minute - [0, 60] including leap second + int tm_min; // minutes after the hour - [0, 59] + int tm_hour; // hours since midnight - [0, 23] + int tm_mday; // day of the month - [1, 31] + int tm_mon; // months since January - [0, 11] + int tm_year; // years since 1900 + int tm_wday; // days since Sunday - [0, 6] + int tm_yday; // days since January 1 - [0, 365] + int tm_isdst; // daylight savings time flag +}; + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Wide String Time Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Check_return_ _CRT_INSECURE_DEPRECATE(_wasctime_s) +_Success_(return != 0) +_Ret_writes_z_(26) +_ACRTIMP wchar_t* __cdecl _wasctime( + _In_ struct tm const* _Tm + ); + +_Success_(return == 0) +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wasctime_s( + _Out_writes_z_(_SizeInWords) _Post_readable_size_(26) wchar_t* _Buffer, + _In_range_(>=,26) size_t _SizeInWords, + _In_ struct tm const* _Tm + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + _Success_(return == 0) + errno_t, _wasctime_s, + _Post_readable_size_(26) wchar_t, _Buffer, + _In_ struct tm const*, _Time + ) + +_Success_(return > 0) +_Check_return_wat_ +_ACRTIMP size_t __cdecl wcsftime( + _Out_writes_z_(_SizeInWords) wchar_t* _Buffer, + _In_ size_t _SizeInWords, + _In_z_ wchar_t const* _Format, + _In_ struct tm const* _Tm + ); + +_Success_(return > 0) +_Check_return_wat_ +_ACRTIMP size_t __cdecl _wcsftime_l( + _Out_writes_z_(_SizeInWords) wchar_t* _Buffer, + _In_ size_t _SizeInWords, + _In_z_ wchar_t const* _Format, + _In_ struct tm const* _Tm, + _In_opt_ _locale_t _Locale + ); + +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_wctime32_s) +_ACRTIMP wchar_t* __cdecl _wctime32( + _In_ __time32_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wctime32_s( + _Out_writes_z_(_SizeInWords) _Post_readable_size_(26) wchar_t* _Buffer, + _In_ _In_range_(>=, 26) size_t _SizeInWords, + _In_ __time32_t const* _Time + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _wctime32_s, + _Post_readable_size_(26) wchar_t, _Buffer, + _In_ __time32_t const*, _Time + ) + +_Success_(return != 0) +_Ret_writes_z_(26) +_Check_return_ _CRT_INSECURE_DEPRECATE(_wctime64_s) +_ACRTIMP wchar_t* __cdecl _wctime64( + _In_ __time64_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wctime64_s( + _Out_writes_z_(_SizeInWords) _Post_readable_size_(26) wchar_t* _Buffer, + _In_ _In_range_(>=, 26) size_t _SizeInWords, + _In_ __time64_t const* _Time); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _wctime64_s, + _Post_readable_size_(26) wchar_t, _Buffer, + _In_ __time64_t const*, _Time + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wstrdate_s( + _Out_writes_z_(_SizeInWords) _When_(_SizeInWords >=9, _Post_readable_size_(9)) wchar_t* _Buffer, + _In_ size_t _SizeInWords + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _wstrdate_s, + _Post_readable_size_(9) wchar_t, _Buffer + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + _Success_(return != 0) _Ret_writes_z_(9) wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wstrdate, + _Out_writes_z_(9), wchar_t, _Buffer + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wstrtime_s( + _Out_writes_z_(_SizeInWords) _When_(_SizeInWords >=9, _Post_readable_size_(9)) wchar_t* _Buffer, + _In_ size_t _SizeInWords + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _wstrtime_s, + _Post_readable_size_(9) wchar_t, _Buffer + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + _Success_(return != 0) _Ret_writes_z_(9) wchar_t*, __RETURN_POLICY_DST, _ACRTIMP, _wstrtime, + _Out_writes_z_(9), wchar_t, _Buffer + ) + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Inline Definitions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if !defined RC_INVOKED && !defined __midl && !defined _INC_WTIME_INL && !defined _CRT_NO_TIME_T + #ifdef _USE_32BIT_TIME_T + + _Check_return_ + static __inline wchar_t* __CRTDECL _wctime( + _In_ time_t const* const _Time + ) + { + return _wctime32(_Time); + } + + _Check_return_wat_ + static __inline errno_t __CRTDECL _wctime_s( + _Pre_notnull_ _Post_z_ _Out_writes_z_(_SizeInWords) wchar_t* const _Buffer, + _In_ size_t const _SizeInWords, + _In_ time_t const* const _Time) + { + return _wctime32_s(_Buffer, _SizeInWords, _Time); + } + + #else // ^^^ _USE_32BIT_TIME_T ^^^ // vvv !_USE_32BIT_TIME_T vvv // + + _Check_return_ + static __inline wchar_t * __CRTDECL _wctime( + _In_ time_t const* const _Time) + { + return _wctime64(_Time); + } + + _Check_return_wat_ + static __inline errno_t __CRTDECL _wctime_s( + _Pre_notnull_ _Post_z_ _Out_writes_z_(_SizeInWords) wchar_t* const _Buffer, + _In_ size_t const _SizeInWords, + _In_ time_t const* const _Time + ) + { + return _wctime64_s(_Buffer, _SizeInWords, _Time); + } + + #endif // !_USE_32BIT_TIME_T +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/crtdbg.h b/sdk/include/ucrt/crtdbg.h new file mode 100644 index 0000000000000..90925ff42660d --- /dev/null +++ b/sdk/include/ucrt/crtdbg.h @@ -0,0 +1,816 @@ +// +// crtdbg.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Public debugging facilities for the CRT +// +#pragma once +#ifndef _INC_CRTDBG // include guard for 3rd party interop +#define _INC_CRTDBG + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +typedef void* _HFILE; // file handle pointer + +#define _CRT_WARN 0 +#define _CRT_ERROR 1 +#define _CRT_ASSERT 2 +#define _CRT_ERRCNT 3 + +#define _CRTDBG_MODE_FILE 0x1 +#define _CRTDBG_MODE_DEBUG 0x2 +#define _CRTDBG_MODE_WNDW 0x4 +#define _CRTDBG_REPORT_MODE -1 + +#define _CRTDBG_INVALID_HFILE ((_HFILE)(intptr_t)-1) +#define _CRTDBG_HFILE_ERROR ((_HFILE)(intptr_t)-2) +#define _CRTDBG_FILE_STDOUT ((_HFILE)(intptr_t)-4) +#define _CRTDBG_FILE_STDERR ((_HFILE)(intptr_t)-5) +#define _CRTDBG_REPORT_FILE ((_HFILE)(intptr_t)-6) + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Client-defined reporting and allocation hooks +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +typedef int (__CRTDECL* _CRT_REPORT_HOOK )(int, char*, int*); +typedef int (__CRTDECL* _CRT_REPORT_HOOKW)(int, wchar_t*, int*); + +#define _CRT_RPTHOOK_INSTALL 0 +#define _CRT_RPTHOOK_REMOVE 1 + + +typedef int (__CRTDECL* _CRT_ALLOC_HOOK)(int, void*, size_t, int, long, unsigned char const*, int); + +#ifdef _M_CEE + typedef int (__clrcall* _CRT_ALLOC_HOOK_M)(int, void*, size_t, int, long, unsigned char const*, int); +#endif + +#define _HOOK_ALLOC 1 +#define _HOOK_REALLOC 2 +#define _HOOK_FREE 3 + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Memory Management and State Tracking +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +// Bit values for _crtDbgFlag flag. These bitflags control debug heap behavior. +#define _CRTDBG_ALLOC_MEM_DF 0x01 // Turn on debug allocation +#define _CRTDBG_DELAY_FREE_MEM_DF 0x02 // Don't actually free memory +#define _CRTDBG_CHECK_ALWAYS_DF 0x04 // Check heap every alloc/dealloc +#define _CRTDBG_RESERVED_DF 0x08 // Reserved - do not use +#define _CRTDBG_CHECK_CRT_DF 0x10 // Leak check/diff CRT blocks +#define _CRTDBG_LEAK_CHECK_DF 0x20 // Leak check at program exit + +// Some bit values for _crtDbgFlag which correspond to frequencies for checking +// the heap. +#define _CRTDBG_CHECK_EVERY_16_DF 0x00100000 // Check heap every 16 heap ops +#define _CRTDBG_CHECK_EVERY_128_DF 0x00800000 // Check heap every 128 heap ops +#define _CRTDBG_CHECK_EVERY_1024_DF 0x04000000 // Check heap every 1024 heap ops + +// We do not check the heap by default at this point because the cost was too +// high for some applications. You can still turn this feature on manually. +#define _CRTDBG_CHECK_DEFAULT_DF 0 + +#define _CRTDBG_REPORT_FLAG -1 // Query bitflag status + +#define _BLOCK_TYPE(block) (block & 0xFFFF) +#define _BLOCK_SUBTYPE(block) (block >> 16 & 0xFFFF) + +// Memory block identification +#define _FREE_BLOCK 0 +#define _NORMAL_BLOCK 1 +#define _CRT_BLOCK 2 +#define _IGNORE_BLOCK 3 +#define _CLIENT_BLOCK 4 +#define _MAX_BLOCKS 5 + +// _UNKNOWN_BLOCK is a sentinel value that may be passed to some functions that +// expect a block type as an argument. If this value is passed, those functions +// will use the block type specified in the block header instead. This is used +// in cases where the heap lock cannot be acquired to compute the block type +// before calling the function (e.g. when the caller is outside of the CoreCRT). +#define _UNKNOWN_BLOCK (-1) + +typedef void (__CRTDECL* _CRT_DUMP_CLIENT)(void*, size_t); + +#ifdef _M_CEE + typedef void (__clrcall* _CRT_DUMP_CLIENT_M)(void*, size_t); +#endif + +struct _CrtMemBlockHeader; + +typedef struct _CrtMemState +{ + struct _CrtMemBlockHeader* pBlockHeader; + size_t lCounts[_MAX_BLOCKS]; + size_t lSizes[_MAX_BLOCKS]; + size_t lHighWaterCount; + size_t lTotalCount; +} _CrtMemState; + +#ifndef _DEBUG + + #define _CrtGetAllocHook() ((_CRT_ALLOC_HOOK)0) + #define _CrtSetAllocHook(f) ((_CRT_ALLOC_HOOK)0) + + #define _CrtGetDumpClient() ((_CRT_DUMP_CLIENT)0) + #define _CrtSetDumpClient(f) ((_CRT_DUMP_CLIENT)0) + + #define _CrtCheckMemory() ((int)1) + #define _CrtDoForAllClientObjects(f, c) ((void)0) + #define _CrtDumpMemoryLeaks() ((int)0) + #define _CrtIsMemoryBlock(p, t, r, f, l) ((int)1) + #define _CrtIsValidHeapPointer(p) ((int)1) + #define _CrtIsValidPointer(p, n, r) ((int)1) + #define _CrtMemCheckpoint(s) ((void)0) + #define _CrtMemDifference(s1, s2, s3) ((int)0) + #define _CrtMemDumpAllObjectsSince(s) ((void)0) + #define _CrtMemDumpStatistics(s) ((void)0) + #define _CrtReportBlockType(p) ((int)-1) + #define _CrtSetBreakAlloc(a) ((long)0) + #define _CrtSetDbgFlag(f) ((int)0) + + +#else // ^^^ !_DEBUG ^^^ // vvv _DEBUG vvv // + + #ifndef _M_CEE_PURE + + _ACRTIMP int* __cdecl __p__crtDbgFlag(void); + _ACRTIMP long* __cdecl __p__crtBreakAlloc(void); + + #define _crtDbgFlag (*__p__crtDbgFlag()) + #define _crtBreakAlloc (*__p__crtBreakAlloc()) + + _ACRTIMP _CRT_ALLOC_HOOK __cdecl _CrtGetAllocHook(void); + + _ACRTIMP _CRT_ALLOC_HOOK __cdecl _CrtSetAllocHook( + _In_opt_ _CRT_ALLOC_HOOK _PfnNewHook + ); + + _ACRTIMP _CRT_DUMP_CLIENT __cdecl _CrtGetDumpClient(void); + + _ACRTIMP _CRT_DUMP_CLIENT __cdecl _CrtSetDumpClient( + _In_opt_ _CRT_DUMP_CLIENT _PFnNewDump + ); + + #endif // _M_CEE_PURE + + _ACRTIMP int __cdecl _CrtCheckMemory(void); + + typedef void (__cdecl* _CrtDoForAllClientObjectsCallback)(void*, void*); + + _ACRTIMP void __cdecl _CrtDoForAllClientObjects( + _In_ _CrtDoForAllClientObjectsCallback _Callback, + _In_ void* _Context + ); + + _ACRTIMP int __cdecl _CrtDumpMemoryLeaks(void); + + _ACRTIMP int __cdecl _CrtIsMemoryBlock( + _In_opt_ void const* _Block, + _In_ unsigned int _Size, + _Out_opt_ long* _RequestNumber, + _Out_opt_ char** _FileName, + _Out_opt_ int* _LineNumber + ); + + _Check_return_ + _ACRTIMP int __cdecl _CrtIsValidHeapPointer( + _In_opt_ void const* _Pointer + ); + + _Check_return_ + _ACRTIMP int __cdecl _CrtIsValidPointer( + _In_opt_ void const* _Pointer, + _In_ unsigned int _Size, + _In_ int _ReadWrite + ); + + _ACRTIMP void __cdecl _CrtMemCheckpoint( + _Out_ _CrtMemState* _State + ); + + _ACRTIMP int __cdecl _CrtMemDifference( + _Out_ _CrtMemState* _State, + _In_ _CrtMemState const* _OldState, + _In_ _CrtMemState const* _NewState + ); + + _ACRTIMP void __cdecl _CrtMemDumpAllObjectsSince( + _In_opt_ _CrtMemState const* _State + ); + + _ACRTIMP void __cdecl _CrtMemDumpStatistics( + _In_ _CrtMemState const* _State + ); + + _Check_return_ + _ACRTIMP int __cdecl _CrtReportBlockType( + _In_opt_ void const* _Block + ); + + _ACRTIMP long __cdecl _CrtSetBreakAlloc( + _In_ long _NewValue + ); + + _ACRTIMP int __cdecl _CrtSetDbgFlag( + _In_ int _NewFlag + ); + +#endif // _DEBUG + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Debug Heap Routines +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _DEBUG + + #define _calloc_dbg(c, s, t, f, l) calloc(c, s) + #define _expand_dbg(p, s, t, f, l) _expand(p, s) + #define _free_dbg(p, t) free(p) + #define _malloc_dbg(s, t, f, l) malloc(s) + #define _msize_dbg(p, t) _msize(p) + #define _realloc_dbg(p, s, t, f, l) realloc(p, s) + #define _recalloc_dbg(p, c, s, t, f, l) _recalloc(p, c, s) + + #define _aligned_free_dbg(p) _aligned_free(p) + #define _aligned_malloc_dbg(s, a, f, l) _aligned_malloc(s, a) + #define _aligned_msize_dbg(p, a, o) _aligned_msize(p, a, o) + #define _aligned_offset_malloc_dbg(s, a, o, f, l) _aligned_offset_malloc(s, a, o) + #define _aligned_offset_realloc_dbg(p, s, a, o, f, l) _aligned_offset_realloc(p, s, a, o) + #define _aligned_offset_recalloc_dbg(p, c, s, a, o, f, l) _aligned_offset_recalloc(p, c, s, a, o) + #define _aligned_realloc_dbg(p, s, a, f, l) _aligned_realloc(p, s, a) + #define _aligned_recalloc_dbg(p, c, s, a, f, l) _aligned_recalloc(p, c, s, a) + + #define _freea_dbg(p, t) _freea(p) + #define _malloca_dbg(s, t, f, l) _malloca(s) + + #define _dupenv_s_dbg(ps1, size, s2, t, f, l) _dupenv_s(ps1, size, s2) + #define _fullpath_dbg(s1, s2, le, t, f, l) _fullpath(s1, s2, le) + #define _getcwd_dbg(s, le, t, f, l) _getcwd(s, le) + #define _getdcwd_dbg(d, s, le, t, f, l) _getdcwd(d, s, le) + #define _getdcwd_lk_dbg(d, s, le, t, f, l) _getdcwd(d, s, le) + #define _mbsdup_dbg(s, t, f, l) _mbsdup(s) + #define _strdup_dbg(s, t, f, l) _strdup(s) + #define _tempnam_dbg(s1, s2, t, f, l) _tempnam(s1, s2) + #define _wcsdup_dbg(s, t, f, l) _wcsdup(s) + #define _wdupenv_s_dbg(ps1, size, s2, t, f, l) _wdupenv_s(ps1, size, s2) + #define _wfullpath_dbg(s1, s2, le, t, f, l) _wfullpath(s1, s2, le) + #define _wgetcwd_dbg(s, le, t, f, l) _wgetcwd(s, le) + #define _wgetdcwd_dbg(d, s, le, t, f, l) _wgetdcwd(d, s, le) + #define _wgetdcwd_lk_dbg(d, s, le, t, f, l) _wgetdcwd(d, s, le) + #define _wtempnam_dbg(s1, s2, t, f, l) _wtempnam(s1, s2) + +#else // ^^^ !_DEBUG ^^^ // vvv _DEBUG vvv // + + #ifdef _CRTDBG_MAP_ALLOC + + #define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _expand(p, s) _expand_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define free(p) _free_dbg(p, _NORMAL_BLOCK) + #define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _msize(p) _msize_dbg(p, _NORMAL_BLOCK) + #define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _recalloc(p, c, s) _recalloc_dbg(p, c, s, _NORMAL_BLOCK, __FILE__, __LINE__) + + #define _aligned_free(p) _aligned_free_dbg(p) + #define _aligned_malloc(s, a) _aligned_malloc_dbg(s, a, __FILE__, __LINE__) + #define _aligned_msize(p, a, o) _aligned_msize_dbg(p, a, o) + #define _aligned_offset_malloc(s, a, o) _aligned_offset_malloc_dbg(s, a, o, __FILE__, __LINE__) + #define _aligned_offset_realloc(p, s, a, o) _aligned_offset_realloc_dbg(p, s, a, o, __FILE__, __LINE__) + #define _aligned_offset_recalloc(p, c, s, a, o) _aligned_offset_recalloc_dbg(p, c, s, a, o, __FILE__, __LINE__) + #define _aligned_realloc(p, s, a) _aligned_realloc_dbg(p, s, a, __FILE__, __LINE__) + #define _aligned_recalloc(p, c, s, a) _aligned_recalloc_dbg(p, c, s, a, __FILE__, __LINE__) + + #define _freea(p) _freea_dbg(p, _NORMAL_BLOCK) + #define _malloca(s) _malloca_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + + #define _dupenv_s(ps1, size, s2) _dupenv_s_dbg(ps1, size, s2, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _fullpath(s1, s2, le) _fullpath_dbg(s1, s2, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _getcwd(s, le) _getcwd_dbg(s, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _getdcwd(d, s, le) _getdcwd_dbg(d, s, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _mbsdup(s) _strdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _strdup(s) _strdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _tempnam(s1, s2) _tempnam_dbg(s1, s2, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _wcsdup(s) _wcsdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _wdupenv_s(ps1, size, s2) _wdupenv_s_dbg(ps1, size, s2, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _wfullpath(s1, s2, le) _wfullpath_dbg(s1, s2, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _wgetcwd(s, le) _wgetcwd_dbg(s, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _wgetdcwd(d, s, le) _wgetdcwd_dbg(d, s, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #define _wtempnam(s1, s2) _wtempnam_dbg(s1, s2, _NORMAL_BLOCK, __FILE__, __LINE__) + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #define strdup(s) _strdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define wcsdup(s) _wcsdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) + #define tempnam(s1, s2) _tempnam_dbg(s1, s2, _NORMAL_BLOCK, __FILE__, __LINE__) + #define getcwd(s, le) _getcwd_dbg(s, le, _NORMAL_BLOCK, __FILE__, __LINE__) + #endif + + #endif // _CRTDBG_MAP_ALLOC + + _ACRTIMP void __cdecl _aligned_free_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block + ); + + _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _aligned_malloc_dbg( + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _ACRTIMP size_t __cdecl _aligned_msize_dbg( + _Pre_notnull_ void* _Block, + _In_ size_t _Alignment, + _In_ size_t _Offset + ); + + _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _aligned_offset_malloc_dbg( + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _aligned_offset_realloc_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _aligned_offset_recalloc_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Count, + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _aligned_realloc_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _aligned_recalloc_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Count, + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _calloc_dbg( + _In_ size_t _Count, + _In_ size_t _Size, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _expand_dbg( + _Pre_notnull_ void* _Block, + _In_ size_t _Size, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _ACRTIMP void __cdecl _free_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ int _BlockUse + ); + + _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _malloc_dbg( + _In_ size_t _Size, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _ACRTIMP size_t __cdecl _msize_dbg( + _Pre_notnull_ void* _Block, + _In_ int _BlockUse + ); + + _Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _realloc_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Size, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) _Check_return_ _Ret_maybenull_ _Post_writable_byte_size_(_Count * _Size) + _ACRTIMP _CRTALLOCATOR void* __cdecl _recalloc_dbg( + _Pre_maybenull_ _Post_invalid_ void* _Block, + _In_ size_t _Count, + _In_ size_t _Size, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return == 0) + _Check_return_wat_ + _DCRTIMP errno_t __cdecl _dupenv_s_dbg( + _Outptr_result_buffer_maybenull_(*_PBufferSizeInBytes) char** _PBuffer, + _Out_opt_ size_t* _PBufferSizeInBytes, + _In_z_ char const* _VarName, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _ACRTIMP _CRTALLOCATOR char* __cdecl _fullpath_dbg( + _Out_writes_opt_z_(_SizeInBytes) char* _FullPath, + _In_z_ char const* _Path, + _In_ size_t _SizeInBytes, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _DCRTIMP _CRTALLOCATOR char* __cdecl _getcwd_dbg( + _Out_writes_opt_z_(_SizeInBytes) char* _DstBuf, + _In_ int _SizeInBytes, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _DCRTIMP _CRTALLOCATOR char* __cdecl _getdcwd_dbg( + _In_ int _Drive, + _Out_writes_opt_z_(_SizeInBytes) char* _DstBuf, + _In_ int _SizeInBytes, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Check_return_ _Ret_maybenull_z_ + _ACRTIMP _CRTALLOCATOR char* __cdecl _strdup_dbg( + _In_opt_z_ char const* _String, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Check_return_ _Ret_maybenull_z_ + _ACRTIMP _CRTALLOCATOR char* __cdecl _tempnam_dbg( + _In_opt_z_ char const* _DirName, + _In_opt_z_ char const* _FilePrefix, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wcsdup_dbg( + _In_opt_z_ wchar_t const* _String, + _In_ int _BlockUse, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return == 0) + _Check_return_wat_ + _DCRTIMP errno_t __cdecl _wdupenv_s_dbg( + _Outptr_result_buffer_maybenull_(*_PBufferSizeInWords) wchar_t** _PBuffer, + _Out_opt_ size_t* _PBufferSizeInWords, + _In_z_ wchar_t const* _VarName, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wfullpath_dbg( + _Out_writes_opt_z_(_SizeInWords) wchar_t* _FullPath, + _In_z_ wchar_t const* _Path, + _In_ size_t _SizeInWords, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _DCRTIMP _CRTALLOCATOR wchar_t* __cdecl _wgetcwd_dbg( + _Out_writes_opt_z_(_SizeInWords) wchar_t* _DstBuf, + _In_ int _SizeInWords, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ + _DCRTIMP _CRTALLOCATOR wchar_t* __cdecl _wgetdcwd_dbg( + _In_ int _Drive, + _Out_writes_opt_z_(_SizeInWords) wchar_t* _DstBuf, + _In_ int _SizeInWords, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + _Check_return_ _Ret_maybenull_z_ + _ACRTIMP _CRTALLOCATOR wchar_t* __cdecl _wtempnam_dbg( + _In_opt_z_ wchar_t const* _DirName, + _In_opt_z_ wchar_t const* _FilePrefix, + _In_ int _BlockType, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber + ); + + #define _malloca_dbg(s, t, f, l) _malloc_dbg(s, t, f, l) + #define _freea_dbg(p, t) _free_dbg(p, t) + + #if defined __cplusplus && defined _CRTDBG_MAP_ALLOC + namespace std + { + using ::_calloc_dbg; + using ::_free_dbg; + using ::_malloc_dbg; + using ::_realloc_dbg; + } + #endif + +#endif // _DEBUG + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Debug Reporting +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +#ifndef _DEBUG + + #define _CrtSetDebugFillThreshold(t) ((size_t)0) + #define _CrtSetReportFile(t, f) ((_HFILE)0) + #define _CrtSetReportMode(t, f) ((int)0) + #define _CrtGetReportHook() ((_CRT_REPORT_HOOK)0) + #define _CrtSetReportHook(f) ((_CRT_REPORT_HOOK)0) + #define _CrtSetReportHook2(t, f) ((int)0) + #define _CrtSetReportHookW2(t, f) ((int)0) + +#else // ^^^ !_DEBUG ^^^ // vvv _DEBUG vvv // + + _ACRTIMP int __cdecl _CrtDbgReport( + _In_ int _ReportType, + _In_opt_z_ char const* _FileName, + _In_ int _Linenumber, + _In_opt_z_ char const* _ModuleName, + _In_opt_z_ char const* _Format, + ...); + + _ACRTIMP int __cdecl _CrtDbgReportW( + _In_ int _ReportType, + _In_opt_z_ wchar_t const* _FileName, + _In_ int _LineNumber, + _In_opt_z_ wchar_t const* _ModuleName, + _In_opt_z_ wchar_t const* _Format, + ...); + + + _ACRTIMP int __cdecl _VCrtDbgReportA( + _In_ int _ReportType, + _In_opt_ void* _ReturnAddress, + _In_opt_z_ char const* _FileName, + _In_ int _LineNumber, + _In_opt_z_ char const* _ModuleName, + _In_opt_z_ char const* _Format, + va_list _ArgList + ); + + _ACRTIMP int __cdecl _VCrtDbgReportW( + _In_ int _ReportType, + _In_opt_ void* _ReturnAddress, + _In_opt_z_ wchar_t const* _FileName, + _In_ int _LineNumber, + _In_opt_z_ wchar_t const* _ModuleName, + _In_opt_z_ wchar_t const* _Format, + va_list _ArgList + ); + + _ACRTIMP size_t __cdecl _CrtSetDebugFillThreshold( + _In_ size_t _NewDebugFillThreshold + ); + + _ACRTIMP size_t __cdecl _CrtGetDebugFillThreshold(void); + + _ACRTIMP _HFILE __cdecl _CrtSetReportFile( + _In_ int _ReportType, + _In_opt_ _HFILE _ReportFile + ); + + _ACRTIMP int __cdecl _CrtSetReportMode( + _In_ int _ReportType, + _In_ int _ReportMode + ); + + #ifndef _M_CEE_PURE + + extern long _crtAssertBusy; + + _ACRTIMP _CRT_REPORT_HOOK __cdecl _CrtGetReportHook(void); + + // _CrtSetReportHook[[W]2]: + // For IJW, we need two versions: one for clrcall and one for cdecl. + // For pure and native, we just need clrcall and cdecl, respectively. + _ACRTIMP _CRT_REPORT_HOOK __cdecl _CrtSetReportHook( + _In_opt_ _CRT_REPORT_HOOK _PFnNewHook + ); + + _ACRTIMP int __cdecl _CrtSetReportHook2( + _In_ int _Mode, + _In_opt_ _CRT_REPORT_HOOK _PFnNewHook + ); + + _ACRTIMP int __cdecl _CrtSetReportHookW2( + _In_ int _Mode, + _In_opt_ _CRT_REPORT_HOOKW _PFnNewHook + ); + + #endif // !_M_CEE_PURE + +#endif // _DEBUG + + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Assertions and Error Reporting Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _DEBUG + + #define _CrtDbgBreak() ((void)0) + + #ifndef _ASSERT_EXPR + #define _ASSERT_EXPR(expr, msg) ((void)0) + #endif + + #ifndef _ASSERT + #define _ASSERT(expr) ((void)0) + #endif + + #ifndef _ASSERTE + #define _ASSERTE(expr) ((void)0) + #endif + + #define _RPT0(rptno, msg) + #define _RPTN(rptno, msg, ...) + + #define _RPTW0(rptno, msg) + #define _RPTWN(rptno, msg, ...) + + #define _RPTF0(rptno, msg) + #define _RPTFN(rptno, msg, ...) + + #define _RPTFW0(rptno, msg) + #define _RPTFWN(rptno, msg, ...) + +#else // ^^^ !_DEBUG ^^^ // vvv _DEBUG vvv // + + #define _CrtDbgBreak() __debugbreak() + + // !! is used to ensure that any overloaded operators used to evaluate expr + // do not end up at &&. + #ifndef _ASSERT_EXPR + #define _ASSERT_EXPR(expr, msg) \ + (void)( \ + (!!(expr)) || \ + (1 != _CrtDbgReportW(_CRT_ASSERT, _CRT_WIDE(__FILE__), __LINE__, NULL, L"%ls", msg)) || \ + (_CrtDbgBreak(), 0) \ + ) + #endif + + #ifndef _ASSERT + #define _ASSERT(expr) _ASSERT_EXPR((expr), NULL) + #endif + + #ifndef _ASSERTE + #define _ASSERTE(expr) _ASSERT_EXPR((expr), _CRT_WIDE(#expr)) + #endif + + #define _RPT_BASE(...) \ + (void) ((1 != _CrtDbgReport(__VA_ARGS__)) || \ + (_CrtDbgBreak(), 0)) + + #define _RPT_BASE_W(...) \ + (void) ((1 != _CrtDbgReportW(__VA_ARGS__)) || \ + (_CrtDbgBreak(), 0)) + + #define _RPT0(rptno, msg) _RPT_BASE(rptno, NULL, 0, NULL, "%s", msg) + #define _RPTN(rptno, msg, ...) _RPT_BASE(rptno, NULL, 0, NULL, msg, __VA_ARGS__) + + #define _RPTW0(rptno, msg) _RPT_BASE_W(rptno, NULL, 0, NULL, L"%ls", msg) + #define _RPTWN(rptno, msg, ...) _RPT_BASE_W(rptno, NULL, 0, NULL, msg, __VA_ARGS__) + + #define _RPTF0(rptno, msg) _RPT_BASE(rptno, __FILE__, __LINE__, NULL, "%s", msg) + #define _RPTFN(rptno, msg, ...) _RPT_BASE(rptno, __FILE__, __LINE__, NULL, msg, __VA_ARGS__) + + #define _RPTFW0(rptno, msg) _RPT_BASE_W(rptno, _CRT_WIDE(__FILE__), __LINE__, NULL, L"%ls", msg) + #define _RPTFWN(rptno, msg, ...) _RPT_BASE_W(rptno, _CRT_WIDE(__FILE__), __LINE__, NULL, msg, __VA_ARGS__) + +#endif // _DEBUG + +// Asserts in debug. Invokes Watson in both debug and release +#define _ASSERT_AND_INVOKE_WATSON(expr) \ + { \ + _ASSERTE((expr)); \ + if (!(expr)) \ + { \ + _invoke_watson(_CRT_WIDE(#expr), __FUNCTIONW__, __FILEW__, __LINE__, 0); \ + } \ + } + +// _ASSERT_BASE is provided only for backwards compatibility. +#ifndef _ASSERT_BASE + #define _ASSERT_BASE _ASSERT_EXPR +#endif + +#define _RPT1 _RPTN +#define _RPT2 _RPTN +#define _RPT3 _RPTN +#define _RPT4 _RPTN +#define _RPT5 _RPTN + +#define _RPTW1 _RPTWN +#define _RPTW2 _RPTWN +#define _RPTW3 _RPTWN +#define _RPTW4 _RPTWN +#define _RPTW5 _RPTWN + +#define _RPTF1 _RPTFN +#define _RPTF2 _RPTFN +#define _RPTF3 _RPTFN +#define _RPTF4 _RPTFN +#define _RPTF5 _RPTFN + +#define _RPTFW1 _RPTFWN +#define _RPTFW2 _RPTFWN +#define _RPTFW3 _RPTFWN +#define _RPTFW4 _RPTFWN +#define _RPTFW5 _RPTFWN + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_CRTDBG diff --git a/sdk/include/ucrt/ctype.h b/sdk/include/ucrt/ctype.h new file mode 100644 index 0000000000000..6b8d479113452 --- /dev/null +++ b/sdk/include/ucrt/ctype.h @@ -0,0 +1,310 @@ +// +// ctype.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the narrow character (char) classification functionality. +// +#pragma once +#ifndef _INC_CTYPE // include guard for 3rd party interop +#define _INC_CTYPE + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER +#if !defined __midl && !defined RC_INVOKED + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Character Classification Function Declarations +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Check_return_ _ACRTIMP int __cdecl _isctype(_In_ int _C, _In_ int _Type); +_Check_return_ _ACRTIMP int __cdecl _isctype_l(_In_ int _C, _In_ int _Type, _In_opt_ _locale_t _Locale); +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl isalpha(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isalpha_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl isupper(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isupper_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl islower(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _islower_l(_In_ int _C, _In_opt_ _locale_t _Locale); + +_When_(_Param_(1) == 0, _Post_equal_to_(0)) +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl isdigit(_In_ int _C); + +_Check_return_ _ACRTIMP int __cdecl _isdigit_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl isxdigit(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isxdigit_l(_In_ int _C, _In_opt_ _locale_t _Locale); + +_When_(_Param_(1) == 0, _Post_equal_to_(0)) +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl isspace(_In_ int _C); + +_Check_return_ _ACRTIMP int __cdecl _isspace_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl ispunct(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _ispunct_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl isblank(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isblank_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl isalnum(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isalnum_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl isprint(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isprint_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl isgraph(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _isgraph_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl iscntrl(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _iscntrl_l(_In_ int _C, _In_opt_ _locale_t _Locale); + +_When_(_Param_(1) == 0, _Post_equal_to_(0)) +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl toupper(_In_ int _C); + +_When_(_Param_(1) == 0, _Post_equal_to_(0)) +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl tolower(_In_ int _C); + +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl _tolower(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _tolower_l(_In_ int _C, _In_opt_ _locale_t _Locale); +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl _toupper(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl _toupper_l(_In_ int _C, _In_opt_ _locale_t _Locale); + +_Check_return_ _ACRTIMP int __cdecl __isascii(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl __toascii(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl __iscsymf(_In_ int _C); +_Check_return_ _ACRTIMP int __cdecl __iscsym(_In_ int _C); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Character Classification Macro Definitions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +__inline int __CRTDECL __acrt_locale_get_ctype_array_value( + _In_reads_(_Char_value + 1) unsigned short const * const _Locale_pctype_array, + _In_range_(-1, 255) int const _Char_value, + _In_ int const _Mask + ) +{ + // The C Standard specifies valid input to a ctype function ranges from -1 to 255. + // To avoid undefined behavior, we should check this range for all accesses. + // Note _locale_pctype array does extend to -127 to support accessing + // _pctype directly with signed chars. + + if (_Char_value >= -1 && _Char_value <= 255) + { + return _Locale_pctype_array[_Char_value] & _Mask; + } + + return 0; +} + +#ifndef _CTYPE_DISABLE_MACROS + + // Maximum number of bytes in multi-byte character in the current locale + // (also defined in stdlib.h). + #ifndef MB_CUR_MAX + #if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL + #define MB_CUR_MAX __mb_cur_max + #else + #define MB_CUR_MAX ___mb_cur_max_func() + #endif + + #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + extern int __mb_cur_max; + #else + #define __mb_cur_max (___mb_cur_max_func()) + #endif + + // MB_LEN_MAX = 5 in limits.h but we do not include that header here so use 5 + // directly. + _Post_satisfies_(return > 0 && return < 5) + _ACRTIMP int __cdecl ___mb_cur_max_func(void); + _Post_satisfies_(return > 0 && return < 5) + _ACRTIMP int __cdecl ___mb_cur_max_l_func(_locale_t _Locale); + #endif + + // In the debug CRT, we make all calls through the validation function to catch + // invalid integer inputs that yield undefined behavior. + #ifdef _DEBUG + _ACRTIMP int __cdecl _chvalidator(_In_ int _Ch, _In_ int _Mask); + #define __chvalidchk(a, b) _chvalidator(a, b) + #else + + #define __chvalidchk(a, b) (__acrt_locale_get_ctype_array_value(__PCTYPE_FUNC, (a), (b))) + #endif + + + + #define __ascii_isalpha(c) ( __chvalidchk(c, _ALPHA)) + #define __ascii_isdigit(c) ( __chvalidchk(c, _DIGIT)) + + #ifdef _CRT_DEFINE_ASCII_CTYPE_MACROS + #define __ascii_tolower(c) ( (((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c) ) + #define __ascii_toupper(c) ( (((c) >= 'a') && ((c) <= 'z')) ? ((c) - 'a' + 'A') : (c) ) + #define __ascii_iswalpha(c) ( ('A' <= (c) && (c) <= 'Z') || ( 'a' <= (c) && (c) <= 'z')) + #define __ascii_iswdigit(c) ( '0' <= (c) && (c) <= '9') + #define __ascii_towlower(c) ( (((c) >= L'A') && ((c) <= L'Z')) ? ((c) - L'A' + L'a') : (c) ) + #define __ascii_towupper(c) ( (((c) >= L'a') && ((c) <= L'z')) ? ((c) - L'a' + L'A') : (c) ) + #else + __forceinline int __CRTDECL __ascii_tolower(int const _C) + { + if (_C >= 'A' && _C <= 'Z') + { + return _C - ('A' - 'a'); + } + return _C; + } + + __forceinline int __CRTDECL __ascii_toupper(int const _C) + { + if (_C >= 'a' && _C <= 'z') + { + return _C - ('a' - 'A'); + } + return _C; + } + + __forceinline int __CRTDECL __ascii_iswalpha(int const _C) + { + return (_C >= 'A' && _C <= 'Z') || (_C >= 'a' && _C <= 'z'); + } + + __forceinline int __CRTDECL __ascii_iswdigit(int const _C) + { + return _C >= '0' && _C <= '9'; + } + + __forceinline int __CRTDECL __ascii_towlower(int const _C) + { + return __ascii_tolower(_C); + } + + __forceinline int __CRTDECL __ascii_towupper(int const _C) + { + return __ascii_toupper(_C); + } + #endif + + + + #if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL && !defined __cplusplus + #define isalpha(c) (MB_CUR_MAX > 1 ? _isctype(c, _ALPHA) : __chvalidchk(c, _ALPHA)) + #define isupper(c) (MB_CUR_MAX > 1 ? _isctype(c, _UPPER) : __chvalidchk(c, _UPPER)) + #define islower(c) (MB_CUR_MAX > 1 ? _isctype(c, _LOWER) : __chvalidchk(c, _LOWER)) + #define isdigit(c) (MB_CUR_MAX > 1 ? _isctype(c, _DIGIT) : __chvalidchk(c, _DIGIT)) + #define isxdigit(c) (MB_CUR_MAX > 1 ? _isctype(c, _HEX) : __chvalidchk(c, _HEX)) + #define isspace(c) (MB_CUR_MAX > 1 ? _isctype(c, _SPACE) : __chvalidchk(c, _SPACE)) + #define ispunct(c) (MB_CUR_MAX > 1 ? _isctype(c, _PUNCT) : __chvalidchk(c, _PUNCT)) + #define isblank(c) (MB_CUR_MAX > 1 ? (((c) == '\t') ? _BLANK : _isctype(c, _BLANK)) : (((c) == '\t') ? _BLANK : __chvalidchk(c, _BLANK))) + #define isalnum(c) (MB_CUR_MAX > 1 ? _isctype(c, _ALPHA | _DIGIT) : __chvalidchk(c, (_ALPHA | _DIGIT))) + #define isprint(c) (MB_CUR_MAX > 1 ? _isctype(c, _BLANK | _PUNCT | _ALPHA | _DIGIT) : __chvalidchk(c, (_BLANK | _PUNCT | _ALPHA | _DIGIT))) + #define isgraph(c) (MB_CUR_MAX > 1 ? _isctype(c, _PUNCT | _ALPHA | _DIGIT) : __chvalidchk(c, (_PUNCT | _ALPHA | _DIGIT))) + #define iscntrl(c) (MB_CUR_MAX > 1 ? _isctype(c, _CONTROL) : __chvalidchk(c, _CONTROL)) + #endif + + __inline __crt_locale_data_public* __CRTDECL __acrt_get_locale_data_prefix(void const volatile* const _LocalePointers) + { + _locale_t const _TypedLocalePointers = (_locale_t)_LocalePointers; + return (__crt_locale_data_public*)_TypedLocalePointers->locinfo; + } + + #ifdef _DEBUG + _ACRTIMP int __cdecl _chvalidator_l(_In_opt_ _locale_t, _In_ int _Ch, _In_ int _Mask); + #endif + + __inline int __CRTDECL _chvalidchk_l( + _In_ int const _C, + _In_ int const _Mask, + _In_opt_ _locale_t const _Locale + ) + { + #ifdef _DEBUG + return _chvalidator_l(_Locale, _C, _Mask); + #else + if (!_Locale) + { + return __chvalidchk(_C, _Mask); + } + + return __acrt_locale_get_ctype_array_value(__acrt_get_locale_data_prefix(_Locale)->_locale_pctype, _C, _Mask); + #endif + } + + #define __ascii_isalpha_l(c, locale) (_chvalidchk_l(c, _ALPHA, locale)) + #define __ascii_isdigit_l(c, locale) (_chvalidchk_l(c, _DIGIT, locale)) + + __inline int __CRTDECL _ischartype_l( + _In_ int const _C, + _In_ int const _Mask, + _In_opt_ _locale_t const _Locale + ) + { + if (!_Locale) + { + return _chvalidchk_l(_C, _Mask, 0); + } + + if (_C >= -1 && _C <= 255) + { + return __acrt_get_locale_data_prefix(_Locale)->_locale_pctype[_C] & _Mask; + } + + if (__acrt_get_locale_data_prefix(_Locale)->_locale_mb_cur_max > 1) + { + return _isctype_l(_C, _Mask, _Locale); + } + + return 0; // >0xFF and SBCS locale + } + + #define _isalpha_l(c, locale) _ischartype_l(c, _ALPHA, locale) + #define _isupper_l(c, locale) _ischartype_l(c, _UPPER, locale) + #define _islower_l(c, locale) _ischartype_l(c, _LOWER, locale) + #define _isdigit_l(c, locale) _ischartype_l(c, _DIGIT, locale) + #define _isxdigit_l(c, locale) _ischartype_l(c, _HEX, locale) + #define _isspace_l(c, locale) _ischartype_l(c, _SPACE, locale) + #define _ispunct_l(c, locale) _ischartype_l(c, _PUNCT, locale) + #define _isblank_l(c, locale) (((c) == '\t') ? _BLANK : _ischartype_l(c, _BLANK, locale)) + #define _isalnum_l(c, locale) _ischartype_l(c, _ALPHA | _DIGIT, locale) + #define _isprint_l(c, locale) _ischartype_l(c, _BLANK | _PUNCT | _ALPHA | _DIGIT, locale) + #define _isgraph_l(c, locale) _ischartype_l(c, _PUNCT | _ALPHA | _DIGIT, locale) + #define _iscntrl_l(c, locale) _ischartype_l(c, _CONTROL, locale) + + #define _tolower(c) ((c) - 'A' + 'a') + #define _toupper(c) ((c) - 'a' + 'A') + + #define __isascii(c) ((unsigned)(c) < 0x80) + #define __toascii(c) ((c) & 0x7f) + + + // Microsoft C version 2.0 extended ctype macros + #define __iscsymf(c) (isalpha(c) || ((c) == '_')) + #define __iscsym(c) (isalnum(c) || ((c) == '_')) + #define __iswcsymf(c) (iswalpha(c) || ((c) == '_')) + #define __iswcsym(c) (iswalnum(c) || ((c) == '_')) + + #define _iscsymf_l(c, p) (_isalpha_l(c, p) || ((c) == '_')) + #define _iscsym_l(c, p) (_isalnum_l(c, p) || ((c) == '_')) + #define _iswcsymf_l(c, p) (iswalpha(c) || ((c) == '_')) + #define _iswcsym_l(c, p) (iswalnum(c) || ((c) == '_')) + +#endif // _CTYPE_DISABLE_MACROS + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #define isascii __isascii + #define toascii __toascii + #define iscsymf __iscsymf + #define iscsym __iscsym +#endif + + + +#endif // !defined __midl && !defined RC_INVOKED +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_CTYPE diff --git a/sdk/include/ucrt/direct.h b/sdk/include/ucrt/direct.h new file mode 100644 index 0000000000000..45d6fbc3cf5c3 --- /dev/null +++ b/sdk/include/ucrt/direct.h @@ -0,0 +1,131 @@ +// +// direct.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Functions for directory handling and creation. +// +#pragma once +#ifndef _INC_DIRECT // include guard for 3rd party interop +#define _INC_DIRECT + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + #ifndef _DISKFREE_T_DEFINED + #define _DISKFREE_T_DEFINED + struct _diskfree_t + { + unsigned total_clusters; + unsigned avail_clusters; + unsigned sectors_per_cluster; + unsigned bytes_per_sector; + }; + #endif + + #if _CRT_FUNCTIONS_REQUIRED + + _Success_(return == 0) + _Check_return_ + _DCRTIMP unsigned __cdecl _getdiskfree( + _In_ unsigned _Drive, + _Out_ struct _diskfree_t* _DiskFree + ); + + _Check_return_ _DCRTIMP int __cdecl _chdrive(_In_ int _Drive); + + _Check_return_ _DCRTIMP int __cdecl _getdrive(void); + + _Check_return_ _DCRTIMP unsigned long __cdecl _getdrives(void); + + #endif // _CRT_FUNCTIONS_REQUIRED +#endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + + +#pragma push_macro("_getcwd") +#pragma push_macro("_getdcwd") +#undef _getcwd +#undef _getdcwd + +_Success_(return != 0) +_Check_return_ _Ret_maybenull_z_ +_ACRTIMP _CRTALLOCATOR char* __cdecl _getcwd( + _Out_writes_opt_z_(_SizeInBytes) char* _DstBuf, + _In_ int _SizeInBytes + ); + +_Success_(return != 0) +_Check_return_ _Ret_maybenull_z_ +_ACRTIMP _CRTALLOCATOR char* __cdecl _getdcwd( + _In_ int _Drive, + _Out_writes_opt_z_(_SizeInBytes) char* _DstBuf, + _In_ int _SizeInBytes + ); + +#define _getdcwd_nolock _getdcwd + +#pragma pop_macro("_getcwd") +#pragma pop_macro("_getdcwd") + +_Check_return_ _ACRTIMP int __cdecl _chdir(_In_z_ char const* _Path); + +_Check_return_ _ACRTIMP int __cdecl _mkdir(_In_z_ char const* _Path); + +_Check_return_ _ACRTIMP int __cdecl _rmdir(_In_z_ char const* _Path); + + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + #pragma push_macro("getcwd") + #undef getcwd + + _Success_(return != 0) + _Check_return_ _Ret_maybenull_z_ _CRT_NONSTDC_DEPRECATE(_getcwd) + _DCRTIMP char* __cdecl getcwd( + _Out_writes_opt_z_(_SizeInBytes) char* _DstBuf, + _In_ int _SizeInBytes + ); + + #pragma pop_macro("getcwd") + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_chdir) + _DCRTIMP int __cdecl chdir( + _In_z_ char const* _Path + ); + + #define diskfree_t _diskfree_t + + #endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_mkdir) + _ACRTIMP int __cdecl mkdir( + _In_z_ char const* _Path + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_rmdir) + _ACRTIMP int __cdecl rmdir( + _In_z_ char const* _Path + ); + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_DIRECT diff --git a/sdk/include/ucrt/dos.h b/sdk/include/ucrt/dos.h new file mode 100644 index 0000000000000..7dbe7943c02a8 --- /dev/null +++ b/sdk/include/ucrt/dos.h @@ -0,0 +1,61 @@ +// +// dos.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the structures, constants, and functions used for the +// legacy DOS interface. +// +#pragma once +#ifndef _INC_DOS // include guard for 3rd party interop +#define _INC_DOS + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +// File attribute constants +#define _A_NORMAL 0x00 // Normal file - No read/write restrictions +#define _A_RDONLY 0x01 // Read only file +#define _A_HIDDEN 0x02 // Hidden file +#define _A_SYSTEM 0x04 // System file +#define _A_SUBDIR 0x10 // Subdirectory +#define _A_ARCH 0x20 // Archive file + +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + #ifndef _DISKFREE_T_DEFINED + #define _DISKFREE_T_DEFINED + + struct _diskfree_t + { + unsigned total_clusters; + unsigned avail_clusters; + unsigned sectors_per_cluster; + unsigned bytes_per_sector; + }; + #endif + + #if _CRT_FUNCTIONS_REQUIRED + _Success_(return == 0) + _Check_return_ + _DCRTIMP unsigned __cdecl _getdiskfree( + _In_ unsigned _Drive, + _Out_ struct _diskfree_t* _DiskFree + ); + #endif + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #define diskfree_t _diskfree_t + #endif + +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_DOS diff --git a/sdk/include/ucrt/errno.h b/sdk/include/ucrt/errno.h new file mode 100644 index 0000000000000..7110e905acaaa --- /dev/null +++ b/sdk/include/ucrt/errno.h @@ -0,0 +1,137 @@ +// +// errno.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// System error numbers for use with errno and errno_t. +// +#pragma once +#ifndef _INC_ERRNO // include guard for 3rd party interop +#define _INC_ERRNO + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#if _CRT_FUNCTIONS_REQUIRED + _ACRTIMP int* __cdecl _errno(void); + #define errno (*_errno()) + + _ACRTIMP errno_t __cdecl _set_errno(_In_ int _Value); + _ACRTIMP errno_t __cdecl _get_errno(_Out_ int* _Value); + + _ACRTIMP unsigned long* __cdecl __doserrno(void); + #define _doserrno (*__doserrno()) + + _ACRTIMP errno_t __cdecl _set_doserrno(_In_ unsigned long _Value); + _ACRTIMP errno_t __cdecl _get_doserrno(_Out_ unsigned long * _Value); +#endif // _CRT_FUNCTIONS_REQUIRED + + + +// Error codes +#define EPERM 1 +#define ENOENT 2 +#define ESRCH 3 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EFAULT 14 +#define EBUSY 16 +#define EEXIST 17 +#define EXDEV 18 +#define ENODEV 19 +#define ENOTDIR 20 +#define EISDIR 21 +#define ENFILE 23 +#define EMFILE 24 +#define ENOTTY 25 +#define EFBIG 27 +#define ENOSPC 28 +#define ESPIPE 29 +#define EROFS 30 +#define EMLINK 31 +#define EPIPE 32 +#define EDOM 33 +#define EDEADLK 36 +#define ENAMETOOLONG 38 +#define ENOLCK 39 +#define ENOSYS 40 +#define ENOTEMPTY 41 + +// Error codes used in the Secure CRT functions +#ifndef RC_INVOKED + #define _SECURECRT_ERRCODE_VALUES_DEFINED + #define EINVAL 22 + #define ERANGE 34 + #define EILSEQ 42 + #define STRUNCATE 80 +#endif + +// Support EDEADLOCK for compatibility with older Microsoft C versions +#define EDEADLOCK EDEADLK + +// POSIX Supplement +#ifndef _CRT_NO_POSIX_ERROR_CODES + #define EADDRINUSE 100 + #define EADDRNOTAVAIL 101 + #define EAFNOSUPPORT 102 + #define EALREADY 103 + #define EBADMSG 104 + #define ECANCELED 105 + #define ECONNABORTED 106 + #define ECONNREFUSED 107 + #define ECONNRESET 108 + #define EDESTADDRREQ 109 + #define EHOSTUNREACH 110 + #define EIDRM 111 + #define EINPROGRESS 112 + #define EISCONN 113 + #define ELOOP 114 + #define EMSGSIZE 115 + #define ENETDOWN 116 + #define ENETRESET 117 + #define ENETUNREACH 118 + #define ENOBUFS 119 + #define ENODATA 120 + #define ENOLINK 121 + #define ENOMSG 122 + #define ENOPROTOOPT 123 + #define ENOSR 124 + #define ENOSTR 125 + #define ENOTCONN 126 + #define ENOTRECOVERABLE 127 + #define ENOTSOCK 128 + #define ENOTSUP 129 + #define EOPNOTSUPP 130 + #define EOTHER 131 + #define EOVERFLOW 132 + #define EOWNERDEAD 133 + #define EPROTO 134 + #define EPROTONOSUPPORT 135 + #define EPROTOTYPE 136 + #define ETIME 137 + #define ETIMEDOUT 138 + #define ETXTBSY 139 + #define EWOULDBLOCK 140 +#endif // _CRT_NO_POSIX_ERROR_CODES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_ERRNO diff --git a/sdk/include/ucrt/fcntl.h b/sdk/include/ucrt/fcntl.h new file mode 100644 index 0000000000000..0c72b7f2df1fb --- /dev/null +++ b/sdk/include/ucrt/fcntl.h @@ -0,0 +1,68 @@ +// +// fcntl.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// File control options used by _open(). +// +#pragma once +#ifndef _INC_FCNTL // include guard for 3rd party interop +#define _INC_FCNTL + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#define _O_RDONLY 0x0000 // open for reading only +#define _O_WRONLY 0x0001 // open for writing only +#define _O_RDWR 0x0002 // open for reading and writing +#define _O_APPEND 0x0008 // writes done at eof + +#define _O_CREAT 0x0100 // create and open file +#define _O_TRUNC 0x0200 // open and truncate +#define _O_EXCL 0x0400 // open only if file doesn't already exist + +// O_TEXT files have sequences translated to on read()'s and +// sequences translated to on write()'s + +#define _O_TEXT 0x4000 // file mode is text (translated) +#define _O_BINARY 0x8000 // file mode is binary (untranslated) +#define _O_WTEXT 0x10000 // file mode is UTF16 (translated) +#define _O_U16TEXT 0x20000 // file mode is UTF16 no BOM (translated) +#define _O_U8TEXT 0x40000 // file mode is UTF8 no BOM (translated) + +// macro to translate the C 2.0 name used to force binary mode for files +#define _O_RAW _O_BINARY + +#define _O_NOINHERIT 0x0080 // child process doesn't inherit file +#define _O_TEMPORARY 0x0040 // temporary file bit (file is deleted when last handle is closed) +#define _O_SHORT_LIVED 0x1000 // temporary storage file, try not to flush +#define _O_OBTAIN_DIR 0x2000 // get information about a directory +#define _O_SEQUENTIAL 0x0020 // file access is primarily sequential +#define _O_RANDOM 0x0010 // file access is primarily random + + + +#if (defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__) + #define O_RDONLY _O_RDONLY + #define O_WRONLY _O_WRONLY + #define O_RDWR _O_RDWR + #define O_APPEND _O_APPEND + #define O_CREAT _O_CREAT + #define O_TRUNC _O_TRUNC + #define O_EXCL _O_EXCL + #define O_TEXT _O_TEXT + #define O_BINARY _O_BINARY + #define O_RAW _O_BINARY + #define O_TEMPORARY _O_TEMPORARY + #define O_NOINHERIT _O_NOINHERIT + #define O_SEQUENTIAL _O_SEQUENTIAL + #define O_RANDOM _O_RANDOM +#endif + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS + +#endif // _INC_FCNTL diff --git a/sdk/include/ucrt/fenv.h b/sdk/include/ucrt/fenv.h new file mode 100644 index 0000000000000..d5ac594ebd9ee --- /dev/null +++ b/sdk/include/ucrt/fenv.h @@ -0,0 +1,160 @@ +// +// fenv.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Floating point environment library. +// +#pragma once +#ifndef _FENV // include guard for 3rd party interop +#define _FENV + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#define FE_TONEAREST _RC_NEAR +#define FE_UPWARD _RC_UP +#define FE_DOWNWARD _RC_DOWN +#define FE_TOWARDZERO _RC_CHOP + +#define FE_ROUND_MASK _MCW_RC + +_ACRTIMP int __cdecl fegetround(void); +_ACRTIMP int __cdecl fesetround(_In_ int _Round); + + + +#if !defined _M_CEE + + typedef unsigned long fexcept_t; + + typedef struct fenv_t + { + unsigned long _Fe_ctl, _Fe_stat; + } fenv_t; + + + + #define FE_INEXACT _SW_INEXACT // _EM_INEXACT 0x00000001 inexact (precision) + #define FE_UNDERFLOW _SW_UNDERFLOW // _EM_UNDERFLOW 0x00000002 underflow + #define FE_OVERFLOW _SW_OVERFLOW // _EM_OVERFLOW 0x00000004 overflow + #define FE_DIVBYZERO _SW_ZERODIVIDE // _EM_ZERODIVIDE 0x00000008 zero divide + #define FE_INVALID _SW_INVALID // _EM_INVALID 0x00000010 invalid + + #define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) + + _ACRTIMP int __cdecl fegetenv(_Out_ fenv_t* _Env); + _ACRTIMP int __cdecl fesetenv(_In_ fenv_t const* _Env); + _ACRTIMP int __cdecl feclearexcept(_In_ int _Flags); + _ACRTIMP _Success_(return == 0) int __cdecl feholdexcept(_Out_ fenv_t* _Env); + _ACRTIMP int __cdecl fetestexcept(_In_ int _Flags); + _ACRTIMP int __cdecl fegetexceptflag(_Out_ fexcept_t* _Except, _In_ int _TestFlags); + _ACRTIMP int __cdecl fesetexceptflag(_In_ fexcept_t const* _Except, _In_ int _SetFlags); + + #if !defined __midl // MIDL does not support compound initializers + // In the original implementation (_Fenv0), the global variable was zero + // initialized, indicating no exceptions are masked. In the current + // implementation (_Fenv1), the global variable is initialized with all + // exceptions masked, which is the actual initial environment. + #if defined _M_IX86 + __declspec(selectany) extern const fenv_t _Fenv1 = { 0x3f3f103f, 0 }; + #elif defined _M_X64 + __declspec(selectany) extern const fenv_t _Fenv1 = { 0x3f00003f, 0 }; + #else + __declspec(selectany) extern const fenv_t _Fenv1 = { 0x0000003f, 0 }; + #endif + #endif + + #define FE_DFL_ENV (&_Fenv1) + + + + // feraiseexcept is defined inline in this header so that it is compiled + // with the same /arch setting as is specified in the consuming application, + // rather than the /arch:IA32 setting with which the CRT sources are built. + // optimizer has to be turned off to avoid optimizing out since the function + // doesn't have side effects. + // + // feupdateenv is inline because it calls feraiseexcept. + #if _CRT_FUNCTIONS_REQUIRED + #if !defined(_BEGIN_PRAGMA_OPTIMIZE_DISABLE) + #define _BEGIN_PRAGMA_OPTIMIZE_DISABLE(flags, bug, reason) \ + __pragma(optimize(flags, off)) + #define _BEGIN_PRAGMA_OPTIMIZE_ENABLE(flags, bug, reason) \ + __pragma(optimize(flags, on)) + #define _END_PRAGMA_OPTIMIZE() \ + __pragma(optimize("", on)) + #endif + _BEGIN_PRAGMA_OPTIMIZE_DISABLE("", MSFT:4499495, "If optimizations are on, the floating-point exception might not get triggered (because the compiler optimizes it out), breaking the function.") + __inline int __CRTDECL feraiseexcept(_In_ int _Except) + { + static struct + { + int _Except_Val; + double _Num; + double _Denom; + } const _Table[] = + { // Raise exception by evaluating num / denom: + {FE_INVALID, 0.0, 0.0 }, + {FE_DIVBYZERO, 1.0, 0.0 }, + {FE_OVERFLOW, 1e+300, 1e-300 }, + {FE_UNDERFLOW, 1e-300, 1e+300 }, + {FE_INEXACT, 2.0, 3.0 } + }; + + double _Ans = 0.0; + (void) _Ans; // Suppress set-but-not-used warnings. _Ans is not "used" in the traditional static-analysis sense, but it is needed to trigger a floating point exception below. + size_t _Index; + + if ((_Except &= FE_ALL_EXCEPT) == 0) + { + return 0; + } + + // Raise the exceptions not masked: + for (_Index = 0; _Index < sizeof(_Table) / sizeof(_Table[0]); ++_Index) + { + if ((_Except & _Table[_Index]._Except_Val) != 0) + { + _Ans = _Table[_Index]._Num / _Table[_Index]._Denom; + + // x87 exceptions are raised immediately before execution of the + // next floating point instruction. If we're using /arch:IA32, + // force the exception to be raised immediately: + #if defined _M_IX86 && _M_IX86_FP == 0 && !defined _M_HYBRID_X86_ARM64 + __asm fwait; + #endif + } + } + + return 0; + } + _END_PRAGMA_OPTIMIZE() + + __inline int __CRTDECL feupdateenv(_In_ const fenv_t *_Penv) + { + int _Except = fetestexcept(FE_ALL_EXCEPT); + + if (fesetenv(_Penv) != 0 || feraiseexcept(_Except) != 0) + { + return 1; + } + + return 0; + } + #endif // _CRT_FUNCTIONS_REQUIRED + +#endif // !defined _M_CEE && !defined _CORECRT_BUILD + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _FENV diff --git a/sdk/include/ucrt/float.h b/sdk/include/ucrt/float.h new file mode 100644 index 0000000000000..5c126634e5a90 --- /dev/null +++ b/sdk/include/ucrt/float.h @@ -0,0 +1,409 @@ +// +// float.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Implementation-defined values commonly used by sophisticated numerical +// (floating point) programs. +// +#pragma once +#ifndef _INC_FLOAT // include guard for 3rd party interop +#define _INC_FLOAT + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#ifndef _CRT_MANAGED_FP_DEPRECATE + #ifdef _CRT_MANAGED_FP_NO_DEPRECATE + #define _CRT_MANAGED_FP_DEPRECATE + #else + #ifdef _M_CEE + #define _CRT_MANAGED_FP_DEPRECATE _CRT_DEPRECATE_TEXT("Direct floating point control is not supported or reliable from within managed code. ") + #else + #define _CRT_MANAGED_FP_DEPRECATE + #endif + #endif +#endif + + +// Define the floating point precision used. +// +// For x86, results are in double precision (unless /arch:sse2 is used, in which +// case results are in source precision. +// +// For x64 and ARM, results are in source precision. +// +// If the compiler is invoked with /fp:fast, the compiler is allowed to use the +// fastest precision and even mix within a single function, so precision is +// indeterminable. +// +// Note that manipulating the floating point behavior using the float_control/ +// fenv_access/fp_contract #pragmas may alter the actual floating point evaluation +// method, which may in turn invalidate the value of FLT_EVAL_METHOD. +#ifdef _M_FP_FAST + #define FLT_EVAL_METHOD -1 +#else + #ifdef _M_IX86 + #if _M_IX86_FP >= 2 + #define FLT_EVAL_METHOD 0 + #else + #define FLT_EVAL_METHOD 2 + #endif + #else + #define FLT_EVAL_METHOD 0 + #endif +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Constants +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define DBL_DECIMAL_DIG 17 // # of decimal digits of rounding precision +#define DBL_DIG 15 // # of decimal digits of precision +#define DBL_EPSILON 2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0 +#define DBL_HAS_SUBNORM 1 // type does support subnormal numbers +#define DBL_MANT_DIG 53 // # of bits in mantissa +#define DBL_MAX 1.7976931348623158e+308 // max value +#define DBL_MAX_10_EXP 308 // max decimal exponent +#define DBL_MAX_EXP 1024 // max binary exponent +#define DBL_MIN 2.2250738585072014e-308 // min positive value +#define DBL_MIN_10_EXP (-307) // min decimal exponent +#define DBL_MIN_EXP (-1021) // min binary exponent +#define _DBL_RADIX 2 // exponent radix +#define DBL_TRUE_MIN 4.9406564584124654e-324 // min positive value + +#define FLT_DECIMAL_DIG 9 // # of decimal digits of rounding precision +#define FLT_DIG 6 // # of decimal digits of precision +#define FLT_EPSILON 1.192092896e-07F // smallest such that 1.0+FLT_EPSILON != 1.0 +#define FLT_HAS_SUBNORM 1 // type does support subnormal numbers +#define FLT_GUARD 0 +#define FLT_MANT_DIG 24 // # of bits in mantissa +#define FLT_MAX 3.402823466e+38F // max value +#define FLT_MAX_10_EXP 38 // max decimal exponent +#define FLT_MAX_EXP 128 // max binary exponent +#define FLT_MIN 1.175494351e-38F // min normalized positive value +#define FLT_MIN_10_EXP (-37) // min decimal exponent +#define FLT_MIN_EXP (-125) // min binary exponent +#define FLT_NORMALIZE 0 +#define FLT_RADIX 2 // exponent radix +#define FLT_TRUE_MIN 1.401298464e-45F // min positive value + +#define LDBL_DIG DBL_DIG // # of decimal digits of precision +#define LDBL_EPSILON DBL_EPSILON // smallest such that 1.0+LDBL_EPSILON != 1.0 +#define LDBL_HAS_SUBNORM DBL_HAS_SUBNORM // type does support subnormal numbers +#define LDBL_MANT_DIG DBL_MANT_DIG // # of bits in mantissa +#define LDBL_MAX DBL_MAX // max value +#define LDBL_MAX_10_EXP DBL_MAX_10_EXP // max decimal exponent +#define LDBL_MAX_EXP DBL_MAX_EXP // max binary exponent +#define LDBL_MIN DBL_MIN // min normalized positive value +#define LDBL_MIN_10_EXP DBL_MIN_10_EXP // min decimal exponent +#define LDBL_MIN_EXP DBL_MIN_EXP // min binary exponent +#define _LDBL_RADIX _DBL_RADIX // exponent radix +#define LDBL_TRUE_MIN DBL_TRUE_MIN // min positive value + +#define DECIMAL_DIG DBL_DECIMAL_DIG + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Flags +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define _SW_INEXACT 0x00000001 // Inexact (precision) +#define _SW_UNDERFLOW 0x00000002 // Underflow +#define _SW_OVERFLOW 0x00000004 // Overflow +#define _SW_ZERODIVIDE 0x00000008 // Divide by zero +#define _SW_INVALID 0x00000010 // Invalid +#define _SW_DENORMAL 0x00080000 // Denormal status bit + +// New Control Bit that specifies the ambiguity in control word. +#define _EM_AMBIGUIOUS 0x80000000 // For backwards compatibility +#define _EM_AMBIGUOUS 0x80000000 + +// Abstract User Control Word Mask and bit definitions +#define _MCW_EM 0x0008001f // Interrupt Exception Masks +#define _EM_INEXACT 0x00000001 // inexact (precision) +#define _EM_UNDERFLOW 0x00000002 // underflow +#define _EM_OVERFLOW 0x00000004 // overflow +#define _EM_ZERODIVIDE 0x00000008 // zero divide +#define _EM_INVALID 0x00000010 // invalid +#define _EM_DENORMAL 0x00080000 // Denormal exception mask (_control87 only) + +#define _MCW_RC 0x00000300 // Rounding Control +#define _RC_NEAR 0x00000000 // near +#define _RC_DOWN 0x00000100 // down +#define _RC_UP 0x00000200 // up +#define _RC_CHOP 0x00000300 // chop + +// i386 specific definitions +#define _MCW_PC 0x00030000 // Precision Control +#define _PC_64 0x00000000 // 64 bits +#define _PC_53 0x00010000 // 53 bits +#define _PC_24 0x00020000 // 24 bits + +#define _MCW_IC 0x00040000 // Infinity Control +#define _IC_AFFINE 0x00040000 // affine +#define _IC_PROJECTIVE 0x00000000 // projective + +// RISC specific definitions +#define _MCW_DN 0x03000000 // Denormal Control +#define _DN_SAVE 0x00000000 // save denormal results and operands +#define _DN_FLUSH 0x01000000 // flush denormal results and operands to zero +#define _DN_FLUSH_OPERANDS_SAVE_RESULTS 0x02000000 // flush operands to zero and save results +#define _DN_SAVE_OPERANDS_FLUSH_RESULTS 0x03000000 // save operands and flush results to zero + + + +// Invalid subconditions (_SW_INVALID also set) +#define _SW_UNEMULATED 0x0040 // Unemulated instruction +#define _SW_SQRTNEG 0x0080 // Square root of a negative number +#define _SW_STACKOVERFLOW 0x0200 // FP stack overflow +#define _SW_STACKUNDERFLOW 0x0400 // FP stack underflow + + + +// Floating point error signals and return codes +#define _FPE_INVALID 0x81 +#define _FPE_DENORMAL 0x82 +#define _FPE_ZERODIVIDE 0x83 +#define _FPE_OVERFLOW 0x84 +#define _FPE_UNDERFLOW 0x85 +#define _FPE_INEXACT 0x86 + +#define _FPE_UNEMULATED 0x87 +#define _FPE_SQRTNEG 0x88 +#define _FPE_STACKOVERFLOW 0x8a +#define _FPE_STACKUNDERFLOW 0x8b + +#define _FPE_EXPLICITGEN 0x8c // raise(SIGFPE); + +// On x86 with arch:SSE2, the OS returns these exceptions +#define _FPE_MULTIPLE_TRAPS 0x8d +#define _FPE_MULTIPLE_FAULTS 0x8e + + + +#define _FPCLASS_SNAN 0x0001 // signaling NaN +#define _FPCLASS_QNAN 0x0002 // quiet NaN +#define _FPCLASS_NINF 0x0004 // negative infinity +#define _FPCLASS_NN 0x0008 // negative normal +#define _FPCLASS_ND 0x0010 // negative denormal +#define _FPCLASS_NZ 0x0020 // -0 +#define _FPCLASS_PZ 0x0040 // +0 +#define _FPCLASS_PD 0x0080 // positive denormal +#define _FPCLASS_PN 0x0100 // positive normal +#define _FPCLASS_PINF 0x0200 // positive infinity + + + +// Initial Control Word value +#if defined _M_IX86 + + #define _CW_DEFAULT (_RC_NEAR + _PC_53 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL) + +#elif defined _M_X64 || defined _M_ARM || defined _M_ARM64 + + #define _CW_DEFAULT (_RC_NEAR + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL) + +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// State Manipulation +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// Note that reading or writing the floating point control or status words is +// not supported in managed code. +_CRT_MANAGED_FP_DEPRECATE +_ACRTIMP unsigned int __cdecl _clearfp(void); + +#pragma warning(push) +#pragma warning(disable: 4141) // Double deprecation + +_CRT_MANAGED_FP_DEPRECATE _CRT_INSECURE_DEPRECATE(_controlfp_s) +_ACRTIMP unsigned int __cdecl _controlfp( + _In_ unsigned int _NewValue, + _In_ unsigned int _Mask + ); + +#pragma warning(pop) + +_CRT_MANAGED_FP_DEPRECATE +_ACRTIMP void __cdecl _set_controlfp( + _In_ unsigned int _NewValue, + _In_ unsigned int _Mask + ); + +_CRT_MANAGED_FP_DEPRECATE +_ACRTIMP errno_t __cdecl _controlfp_s( + _Out_opt_ unsigned int* _CurrentState, + _In_ unsigned int _NewValue, + _In_ unsigned int _Mask + ); + +_CRT_MANAGED_FP_DEPRECATE +_ACRTIMP unsigned int __cdecl _statusfp(void); + +_CRT_MANAGED_FP_DEPRECATE +_ACRTIMP void __cdecl _fpreset(void); + +#ifdef _M_IX86 + + _CRT_MANAGED_FP_DEPRECATE + _ACRTIMP void __cdecl _statusfp2( + _Out_opt_ unsigned int* _X86Status, + _Out_opt_ unsigned int* _SSE2Status + ); + +#endif + +#define _clear87 _clearfp +#define _status87 _statusfp + +_CRT_MANAGED_FP_DEPRECATE +_ACRTIMP unsigned int __cdecl _control87( + _In_ unsigned int _NewValue, + _In_ unsigned int _Mask + ); + +#ifdef _M_IX86 + _CRT_MANAGED_FP_DEPRECATE + _ACRTIMP int __cdecl __control87_2( + _In_ unsigned int _NewValue, + _In_ unsigned int _Mask, + _Out_opt_ unsigned int* _X86ControlWord, + _Out_opt_ unsigned int* _Sse2ControlWord + ); +#endif + +// Global variable holding floating point error code +_Check_return_ +_ACRTIMP int* __cdecl __fpecode(void); + +#define _fpecode (*__fpecode()) + +_Check_return_ +_ACRTIMP int __cdecl __fpe_flt_rounds(void); + +#define FLT_ROUNDS (__fpe_flt_rounds()) +#define _DBL_ROUNDS FLT_ROUNDS +#define _LDBL_ROUNDS _DBL_ROUNDS + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// IEEE Recommended Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Check_return_ _ACRTIMP double __cdecl _copysign(_In_ double _Number, _In_ double _Sign); +_Check_return_ _ACRTIMP double __cdecl _chgsign(_In_ double _X); +_Check_return_ _ACRTIMP double __cdecl _scalb(_In_ double _X, _In_ long _Y); +_Check_return_ _ACRTIMP double __cdecl _logb(_In_ double _X); +_Check_return_ _ACRTIMP double __cdecl _nextafter(_In_ double _X, _In_ double _Y); +_Check_return_ _ACRTIMP int __cdecl _finite(_In_ double _X); +_Check_return_ _ACRTIMP int __cdecl _isnan(_In_ double _X); +_Check_return_ _ACRTIMP int __cdecl _fpclass(_In_ double _X); + +#ifdef _M_X64 + _Check_return_ _ACRTIMP float __cdecl _scalbf(_In_ float _X, _In_ long _Y); +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Nonstandard Names for Compatibility +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #define clear87 _clear87 + #define status87 _status87 + #define control87 _control87 + + _CRT_MANAGED_FP_DEPRECATE + _ACRTIMP void __cdecl fpreset(void); + + #define DBL_RADIX _DBL_RADIX + #define DBL_ROUNDS _DBL_ROUNDS + + #define LDBL_RADIX _LDBL_RADIX + #define LDBL_ROUNDS _LDBL_ROUNDS + + // For backwards compatibility with the old spelling + #define EM_AMBIGUIOUS _EM_AMBIGUOUS + #define EM_AMBIGUOUS _EM_AMBIGUOUS + + #define MCW_EM _MCW_EM + #define EM_INVALID _EM_INVALID + #define EM_DENORMAL _EM_DENORMAL + #define EM_ZERODIVIDE _EM_ZERODIVIDE + #define EM_OVERFLOW _EM_OVERFLOW + #define EM_UNDERFLOW _EM_UNDERFLOW + #define EM_INEXACT _EM_INEXACT + + #define MCW_IC _MCW_IC + #define IC_AFFINE _IC_AFFINE + #define IC_PROJECTIVE _IC_PROJECTIVE + + #define MCW_RC _MCW_RC + #define RC_CHOP _RC_CHOP + #define RC_UP _RC_UP + #define RC_DOWN _RC_DOWN + #define RC_NEAR _RC_NEAR + + #define MCW_PC _MCW_PC + #define PC_24 _PC_24 + #define PC_53 _PC_53 + #define PC_64 _PC_64 + + #define CW_DEFAULT _CW_DEFAULT + + #define SW_INVALID _SW_INVALID + #define SW_DENORMAL _SW_DENORMAL + #define SW_ZERODIVIDE _SW_ZERODIVIDE + #define SW_OVERFLOW _SW_OVERFLOW + #define SW_UNDERFLOW _SW_UNDERFLOW + #define SW_INEXACT _SW_INEXACT + + #define SW_UNEMULATED _SW_UNEMULATED + #define SW_SQRTNEG _SW_SQRTNEG + #define SW_STACKOVERFLOW _SW_STACKOVERFLOW + #define SW_STACKUNDERFLOW _SW_STACKUNDERFLOW + + #define FPE_INVALID _FPE_INVALID + #define FPE_DENORMAL _FPE_DENORMAL + #define FPE_ZERODIVIDE _FPE_ZERODIVIDE + #define FPE_OVERFLOW _FPE_OVERFLOW + #define FPE_UNDERFLOW _FPE_UNDERFLOW + #define FPE_INEXACT _FPE_INEXACT + + #define FPE_UNEMULATED _FPE_UNEMULATED + #define FPE_SQRTNEG _FPE_SQRTNEG + #define FPE_STACKOVERFLOW _FPE_STACKOVERFLOW + #define FPE_STACKUNDERFLOW _FPE_STACKUNDERFLOW + + #define FPE_EXPLICITGEN _FPE_EXPLICITGEN + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_FLOAT diff --git a/sdk/include/ucrt/fpieee.h b/sdk/include/ucrt/fpieee.h new file mode 100644 index 0000000000000..ea3c3cb520056 --- /dev/null +++ b/sdk/include/ucrt/fpieee.h @@ -0,0 +1,478 @@ +// +// fpieee.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file contains constant and type definitions for handling floating point +// exceptions (IEEE 754). +// +#pragma once +#ifndef _INC_FPIEEE // include guard for 3rd party interop +#define _INC_FPIEEE + +#ifndef __midl + +#ifdef _M_CEE_PURE + #error ERROR: This file is not supported in the pure mode! +#endif + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#ifndef __assembler + + // Define floating point IEEE compare result values. + typedef enum + { + _FpCompareEqual, + _FpCompareGreater, + _FpCompareLess, + _FpCompareUnordered + } _FPIEEE_COMPARE_RESULT; + + // Define floating point format and result precision values. + typedef enum + { + _FpFormatFp32, + _FpFormatFp64, + _FpFormatFp80, + _FpFormatFp128, + _FpFormatI16, + _FpFormatI32, + _FpFormatI64, + _FpFormatU16, + _FpFormatU32, + _FpFormatU64, + _FpFormatBcd80, + _FpFormatCompare, + _FpFormatString, + } _FPIEEE_FORMAT; + + // Define operation code values. + typedef enum + { + _FpCodeUnspecified, + _FpCodeAdd, + _FpCodeSubtract, + _FpCodeMultiply, + _FpCodeDivide, + _FpCodeSquareRoot, + _FpCodeRemainder, + _FpCodeCompare, + _FpCodeConvert, + _FpCodeRound, + _FpCodeTruncate, + _FpCodeFloor, + _FpCodeCeil, + _FpCodeAcos, + _FpCodeAsin, + _FpCodeAtan, + _FpCodeAtan2, + _FpCodeCabs, + _FpCodeCos, + _FpCodeCosh, + _FpCodeExp, + _FpCodeFabs, + _FpCodeFmod, + _FpCodeFrexp, + _FpCodeHypot, + _FpCodeLdexp, + _FpCodeLog, + _FpCodeLog10, + _FpCodeModf, + _FpCodePow, + _FpCodeSin, + _FpCodeSinh, + _FpCodeTan, + _FpCodeTanh, + _FpCodeY0, + _FpCodeY1, + _FpCodeYn, + _FpCodeLogb, + _FpCodeNextafter, + _FpCodeNegate, + _FpCodeFmin, // XMMI + _FpCodeFmax, // XMMI + _FpCodeConvertTrunc, // XMMI + _XMMIAddps, // XMMI + _XMMIAddss, + _XMMISubps, + _XMMISubss, + _XMMIMulps, + _XMMIMulss, + _XMMIDivps, + _XMMIDivss, + _XMMISqrtps, + _XMMISqrtss, + _XMMIMaxps, + _XMMIMaxss, + _XMMIMinps, + _XMMIMinss, + _XMMICmpps, + _XMMICmpss, + _XMMIComiss, + _XMMIUComiss, + _XMMICvtpi2ps, + _XMMICvtsi2ss, + _XMMICvtps2pi, + _XMMICvtss2si, + _XMMICvttps2pi, + _XMMICvttss2si, + _XMMIAddsubps, // XMMI for PNI + _XMMIHaddps, // XMMI for PNI + _XMMIHsubps, // XMMI for PNI + _XMMIRoundps, // 66 0F 3A 08 + _XMMIRoundss, // 66 0F 3A 0A + _XMMIDpps, // 66 0F 3A 40 + _XMMI2Addpd, // XMMI2 + _XMMI2Addsd, + _XMMI2Subpd, + _XMMI2Subsd, + _XMMI2Mulpd, + _XMMI2Mulsd, + _XMMI2Divpd, + _XMMI2Divsd, + _XMMI2Sqrtpd, + _XMMI2Sqrtsd, + _XMMI2Maxpd, + _XMMI2Maxsd, + _XMMI2Minpd, + _XMMI2Minsd, + _XMMI2Cmppd, + _XMMI2Cmpsd, + _XMMI2Comisd, + _XMMI2UComisd, + _XMMI2Cvtpd2pi, // 66 2D + _XMMI2Cvtsd2si, // F2 + _XMMI2Cvttpd2pi, // 66 2C + _XMMI2Cvttsd2si, // F2 + _XMMI2Cvtps2pd, // 0F 5A + _XMMI2Cvtss2sd, // F3 + _XMMI2Cvtpd2ps, // 66 + _XMMI2Cvtsd2ss, // F2 + _XMMI2Cvtdq2ps, // 0F 5B + _XMMI2Cvttps2dq, // F3 + _XMMI2Cvtps2dq, // 66 + _XMMI2Cvttpd2dq, // 66 0F E6 + _XMMI2Cvtpd2dq, // F2 + _XMMI2Addsubpd, // 66 0F D0 + _XMMI2Haddpd, // 66 0F 7C + _XMMI2Hsubpd, // 66 0F 7D + _XMMI2Roundpd, // 66 0F 3A 09 + _XMMI2Roundsd, // 66 0F 3A 0B + _XMMI2Dppd, // 66 0F 3A 41 + } _FP_OPERATION_CODE; + +#endif // __assembler + +#ifdef _CORECRT_BUILD + #ifndef __assembler + + #define OP_UNSPEC _FpCodeUnspecified + #define OP_ADD _FpCodeAdd + #define OP_SUB _FpCodeSubtract + #define OP_MUL _FpCodeMultiply + #define OP_DIV _FpCodeDivide + #define OP_REM _FpCodeRemainder + #define OP_COMP _FpCodeCompare + #define OP_CVT _FpCodeConvert + #define OP_RND _FpCodeRound + #define OP_TRUNC _FpCodeTruncate + + #define OP_EXP _FpCodeExp + + #define OP_POW _FpCodePow + #define OP_LOG _FpCodeLog + #define OP_LOG10 _FpCodeLog10 + #define OP_SINH _FpCodeSinh + #define OP_COSH _FpCodeCosh + #define OP_TANH _FpCodeTanh + #define OP_ASIN _FpCodeAsin + #define OP_ACOS _FpCodeAcos + #define OP_ATAN _FpCodeAtan + #define OP_ATAN2 _FpCodeAtan2 + #define OP_SQRT _FpCodeSquareRoot + #define OP_SIN _FpCodeSin + #define OP_COS _FpCodeCos + #define OP_TAN _FpCodeTan + #define OP_CEIL _FpCodeCeil + #define OP_FLOOR _FpCodeFloor + #define OP_ABS _FpCodeFabs + #define OP_MODF _FpCodeModf + #define OP_LDEXP _FpCodeLdexp + #define OP_CABS _FpCodeCabs + #define OP_HYPOT _FpCodeHypot + #define OP_FMOD _FpCodeFmod + #define OP_FREXP _FpCodeFrexp + #define OP_Y0 _FpCodeY0 + #define OP_Y1 _FpCodeY1 + #define OP_YN _FpCodeYn + + #define OP_LOGB _FpCodeLogb + #define OP_NEXTAFTER _FpCodeNextafter + + // XMMI + #define OP_ADDPS _XMMIAddps + #define OP_ADDSS _XMMIAddss + #define OP_SUBPS _XMMISubps + #define OP_SUBSS _XMMISubss + #define OP_MULPS _XMMIMulps + #define OP_MULSS _XMMIMulss + #define OP_DIVPS _XMMIDivps + #define OP_DIVSS _XMMIDivss + #define OP_SQRTPS _XMMISqrtps + #define OP_SQRTSS _XMMISqrtss + #define OP_MAXPS _XMMIMaxps + #define OP_MAXSS _XMMIMaxss + #define OP_MINPS _XMMIMinps + #define OP_MINSS _XMMIMinss + #define OP_CMPPS _XMMICmpps + #define OP_CMPSS _XMMICmpss + #define OP_COMISS _XMMIComiss + #define OP_UCOMISS _XMMIUComiss + #define OP_CVTPI2PS _XMMICvtpi2ps + #define OP_CVTSI2SS _XMMICvtsi2ss + #define OP_CVTPS2PI _XMMICvtps2pi + #define OP_CVTSS2SI _XMMICvtss2si + #define OP_CVTTPS2PI _XMMICvttps2pi + #define OP_CVTTSS2SI _XMMICvttss2si + #define OP_ADDSUBPS _XMMIAddsubps + #define OP_HADDPS _XMMIHaddps + #define OP_HSUBPS _XMMIHsubps + #define OP_ROUNDPS _XMMIRoundps + #define OP_ROUNDSS _XMMIRoundss + #define OP_DPPS _XMMIDpps + // XMMI + + // XMMI2 + #define OP_ADDPD _XMMI2Addpd // XMMI2 + #define OP_ADDSD _XMMI2Addsd + #define OP_SUBPD _XMMI2Subpd + #define OP_SUBSD _XMMI2Subsd + #define OP_MULPD _XMMI2Mulpd + #define OP_MULSD _XMMI2Mulsd + #define OP_DIVPD _XMMI2Divpd + #define OP_DIVSD _XMMI2Divsd + #define OP_SQRTPD _XMMI2Sqrtpd + #define OP_SQRTSD _XMMI2Sqrtsd + #define OP_MAXPD _XMMI2Maxpd + #define OP_MAXSD _XMMI2Maxsd + #define OP_MINPD _XMMI2Minpd + #define OP_MINSD _XMMI2Minsd + #define OP_CMPPD _XMMI2Cmppd + #define OP_CMPSD _XMMI2Cmpsd + #define OP_COMISD _XMMI2Comisd + #define OP_UCOMISD _XMMI2UComisd + #define OP_CVTPD2PI _XMMI2Cvtpd2pi // 66 2D + #define OP_CVTSD2SI _XMMI2Cvtsd2si // F2 + #define OP_CVTTPD2PI _XMMI2Cvttpd2pi // 66 2C + #define OP_CVTTSD2SI _XMMI2Cvttsd2si // F2 + #define OP_CVTPS2PD _XMMI2Cvtps2pd // 0F 5A + #define OP_CVTSS2SD _XMMI2Cvtss2sd // F3 + #define OP_CVTPD2PS _XMMI2Cvtpd2ps // 66 + #define OP_CVTSD2SS _XMMI2Cvtsd2ss // F2 + #define OP_CVTDQ2PS _XMMI2Cvtdq2ps // 0F 5B + #define OP_CVTTPS2DQ _XMMI2Cvttps2dq // F3 + #define OP_CVTPS2DQ _XMMI2Cvtps2dq // 66 + #define OP_CVTTPD2DQ _XMMI2Cvttpd2dq // 66 0F E6 + #define OP_CVTPD2DQ _XMMI2Cvtpd2dq // F2 + #define OP_ADDSUBPD _XMMI2Addsubpd // 66 0F D0 + #define OP_HADDPD _XMMI2Haddpd // 66 0F 7C + #define OP_HSUBPD _XMMI2Hsubpd // 66 0F 7D + #define OP_ROUNDPD _XMMI2Roundpd // 66 0F 3A 09 + #define OP_ROUNDSD _XMMI2Roundsd // 66 0F 3A 0B + #define OP_DPPD _XMMI2Dppd // 66 0F 3A 41 + // XMMI2 + + #else // __assembler + + // This must be the same as the enumerator _FP_OPERATION_CODE + #define OP_UNSPEC 0 + #define OP_ADD 1 + #define OP_SUB 2 + #define OP_MUL 3 + #define OP_DIV 4 + #define OP_SQRT 5 + #define OP_REM 6 + #define OP_COMP 7 + #define OP_CVT 8 + #define OP_RND 9 + #define OP_TRUNC 10 + #define OP_FLOOR 11 + #define OP_CEIL 12 + #define OP_ACOS 13 + #define OP_ASIN 14 + #define OP_ATAN 15 + #define OP_ATAN2 16 + #define OP_CABS 17 + #define OP_COS 18 + #define OP_COSH 19 + #define OP_EXP 20 + #define OP_ABS 21 // same as OP_FABS + #define OP_FABS 21 // same as OP_ABS + #define OP_FMOD 22 + #define OP_FREXP 23 + #define OP_HYPOT 24 + #define OP_LDEXP 25 + #define OP_LOG 26 + #define OP_LOG10 27 + #define OP_MODF 28 + #define OP_POW 29 + #define OP_SIN 30 + #define OP_SINH 31 + #define OP_TAN 32 + #define OP_TANH 33 + #define OP_Y0 34 + #define OP_Y1 35 + #define OP_YN 36 + #define OP_LOGB 37 + #define OP_NEXTAFTER 38 + #define OP_NEG 39 + + #endif // __assembler +#endif // _CORECRT_BUILD + +// Define rounding modes. +#ifndef __assembler + + typedef enum + { + _FpRoundNearest, + _FpRoundMinusInfinity, + _FpRoundPlusInfinity, + _FpRoundChopped + } _FPIEEE_ROUNDING_MODE; + + typedef enum + { + _FpPrecisionFull, + _FpPrecision53, + _FpPrecision24, + } _FPIEEE_PRECISION; + + + // Define floating point context record + typedef float _FP32; + typedef double _FP64; + typedef short _I16; + typedef int _I32; + typedef unsigned short _U16; + typedef unsigned int _U32; + typedef __int64 _Q64; + + #ifdef _CORECRT_BUILD + typedef struct + { + unsigned long W[4]; + } _U32ARRAY; + #endif + + typedef struct + { + unsigned short W[5]; + } _FP80; + + typedef struct _CRT_ALIGN(16) + { + unsigned long W[4]; + } _FP128; + + typedef struct _CRT_ALIGN(8) + { + unsigned long W[2]; + } _I64; + + typedef struct _CRT_ALIGN(8) + { + unsigned long W[2]; + } _U64; + + typedef struct + { + unsigned short W[5]; + } _BCD80; + + typedef struct _CRT_ALIGN(16) + { + _Q64 W[2]; + } _FPQ64; + + typedef struct + { + union + { + _FP32 Fp32Value; + _FP64 Fp64Value; + _FP80 Fp80Value; + _FP128 Fp128Value; + _I16 I16Value; + _I32 I32Value; + _I64 I64Value; + _U16 U16Value; + _U32 U32Value; + _U64 U64Value; + _BCD80 Bcd80Value; + char *StringValue; + int CompareValue; + #ifdef _CORECRT_BUILD + _U32ARRAY U32ArrayValue; + #endif + _Q64 Q64Value; + _FPQ64 Fpq64Value; + } Value; + + unsigned int OperandValid : 1; + unsigned int Format : 4; + + } _FPIEEE_VALUE; + + typedef struct + { + unsigned int Inexact : 1; + unsigned int Underflow : 1; + unsigned int Overflow : 1; + unsigned int ZeroDivide : 1; + unsigned int InvalidOperation : 1; + } _FPIEEE_EXCEPTION_FLAGS; + + + typedef struct + { + unsigned int RoundingMode : 2; + unsigned int Precision : 3; + unsigned int Operation : 12; + _FPIEEE_EXCEPTION_FLAGS Cause; + _FPIEEE_EXCEPTION_FLAGS Enable; + _FPIEEE_EXCEPTION_FLAGS Status; + _FPIEEE_VALUE Operand1; + _FPIEEE_VALUE Operand2; + _FPIEEE_VALUE Result; + } _FPIEEE_RECORD, *_PFPIEEE_RECORD; + + + struct _EXCEPTION_POINTERS; + + typedef int (__cdecl* _FpieeFltHandlerType)(_FPIEEE_RECORD*); + + // Floating point IEEE exception filter routine + _ACRTIMP int __cdecl _fpieee_flt( + _In_ unsigned long _ExceptionCode, + _In_ struct _EXCEPTION_POINTERS* _PtExceptionPtr, + _In_ _FpieeFltHandlerType _Handler + ); + +#endif // __assembler + +_CRT_END_C_HEADER + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // __midl +#endif // _INC_FPIEEE diff --git a/sdk/include/ucrt/inttypes.h b/sdk/include/ucrt/inttypes.h new file mode 100644 index 0000000000000..7e2f2f33bb27a --- /dev/null +++ b/sdk/include/ucrt/inttypes.h @@ -0,0 +1,341 @@ +// +// inttypes.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Various integer format specifier macros for use with the stdio library, and +// various integer conversion and manipulation functions. +// +#pragma once +#ifndef _INTTYPES // include guard for 3rd party interop +#define _INTTYPES + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +typedef struct +{ + intmax_t quot; + intmax_t rem; +} _Lldiv_t; + +typedef _Lldiv_t imaxdiv_t; + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Check_return_ +_ACRTIMP intmax_t __cdecl imaxabs( + _In_ intmax_t _Number + ); + +_Check_return_ +_ACRTIMP imaxdiv_t __cdecl imaxdiv( + _In_ intmax_t _Numerator, + _In_ intmax_t _Denominator + ); + +_ACRTIMP intmax_t __cdecl strtoimax( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_ACRTIMP intmax_t __cdecl _strtoimax_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_ACRTIMP uintmax_t __cdecl strtoumax( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_ACRTIMP uintmax_t __cdecl _strtoumax_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_ACRTIMP intmax_t __cdecl wcstoimax( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + +_ACRTIMP intmax_t __cdecl _wcstoimax_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_ACRTIMP uintmax_t __cdecl wcstoumax( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix + ); + +_ACRTIMP uintmax_t __cdecl _wcstoumax_l( + _In_z_ wchar_t const* _String, + _Out_opt_ _Deref_post_z_ wchar_t** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Output Format Specifier Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define PRId8 "hhd" +#define PRId16 "hd" +#define PRId32 "d" +#define PRId64 "lld" +#define PRIdLEAST8 PRId8 +#define PRIdLEAST16 PRId16 +#define PRIdLEAST32 PRId32 +#define PRIdLEAST64 PRId64 +#define PRIdFAST8 PRId8 +#define PRIdFAST16 PRId32 +#define PRIdFAST32 PRId32 +#define PRIdFAST64 PRId64 +#define PRIdMAX PRId64 +#ifdef _WIN64 + #define PRIdPTR PRId64 +#else + #define PRIdPTR PRId32 +#endif + +#define PRIi8 "hhi" +#define PRIi16 "hi" +#define PRIi32 "i" +#define PRIi64 "lli" +#define PRIiLEAST8 PRIi8 +#define PRIiLEAST16 PRIi16 +#define PRIiLEAST32 PRIi32 +#define PRIiLEAST64 PRIi64 +#define PRIiFAST8 PRIi8 +#define PRIiFAST16 PRIi32 +#define PRIiFAST32 PRIi32 +#define PRIiFAST64 PRIi64 +#define PRIiMAX PRIi64 +#ifdef _WIN64 + #define PRIiPTR PRIi64 +#else + #define PRIiPTR PRIi32 +#endif + +#define PRIo8 "hho" +#define PRIo16 "ho" +#define PRIo32 "o" +#define PRIo64 "llo" +#define PRIoLEAST8 PRIo8 +#define PRIoLEAST16 PRIo16 +#define PRIoLEAST32 PRIo32 +#define PRIoLEAST64 PRIo64 +#define PRIoFAST8 PRIo8 +#define PRIoFAST16 PRIo32 +#define PRIoFAST32 PRIo32 +#define PRIoFAST64 PRIo64 +#define PRIoMAX PRIo64 +#ifdef _WIN64 + #define PRIoPTR PRIo64 +#else + #define PRIoPTR PRIo32 +#endif + +#define PRIu8 "hhu" +#define PRIu16 "hu" +#define PRIu32 "u" +#define PRIu64 "llu" +#define PRIuLEAST8 PRIu8 +#define PRIuLEAST16 PRIu16 +#define PRIuLEAST32 PRIu32 +#define PRIuLEAST64 PRIu64 +#define PRIuFAST8 PRIu8 +#define PRIuFAST16 PRIu32 +#define PRIuFAST32 PRIu32 +#define PRIuFAST64 PRIu64 +#define PRIuMAX PRIu64 +#ifdef _WIN64 + #define PRIuPTR PRIu64 +#else + #define PRIuPTR PRIu32 +#endif + +#define PRIx8 "hhx" +#define PRIx16 "hx" +#define PRIx32 "x" +#define PRIx64 "llx" +#define PRIxLEAST8 PRIx8 +#define PRIxLEAST16 PRIx16 +#define PRIxLEAST32 PRIx32 +#define PRIxLEAST64 PRIx64 +#define PRIxFAST8 PRIx8 +#define PRIxFAST16 PRIx32 +#define PRIxFAST32 PRIx32 +#define PRIxFAST64 PRIx64 +#define PRIxMAX PRIx64 +#ifdef _WIN64 + #define PRIxPTR PRIx64 +#else + #define PRIxPTR PRIx32 +#endif + +#define PRIX8 "hhX" +#define PRIX16 "hX" +#define PRIX32 "X" +#define PRIX64 "llX" +#define PRIXLEAST8 PRIX8 +#define PRIXLEAST16 PRIX16 +#define PRIXLEAST32 PRIX32 +#define PRIXLEAST64 PRIX64 +#define PRIXFAST8 PRIX8 +#define PRIXFAST16 PRIX32 +#define PRIXFAST32 PRIX32 +#define PRIXFAST64 PRIX64 +#define PRIXMAX PRIX64 +#ifdef _WIN64 + #define PRIXPTR PRIX64 +#else + #define PRIXPTR PRIX32 +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Input Format Specifier Macros +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define SCNd8 "hhd" +#define SCNd16 "hd" +#define SCNd32 "d" +#define SCNd64 "lld" +#define SCNdLEAST8 SCNd8 +#define SCNdLEAST16 SCNd16 +#define SCNdLEAST32 SCNd32 +#define SCNdLEAST64 SCNd64 +#define SCNdFAST8 SCNd8 +#define SCNdFAST16 SCNd32 +#define SCNdFAST32 SCNd32 +#define SCNdFAST64 SCNd64 +#define SCNdMAX SCNd64 +#ifdef _WIN64 + #define SCNdPTR SCNd64 +#else + #define SCNdPTR SCNd32 +#endif + +#define SCNi8 "hhi" +#define SCNi16 "hi" +#define SCNi32 "i" +#define SCNi64 "lli" +#define SCNiLEAST8 SCNi8 +#define SCNiLEAST16 SCNi16 +#define SCNiLEAST32 SCNi32 +#define SCNiLEAST64 SCNi64 +#define SCNiFAST8 SCNi8 +#define SCNiFAST16 SCNi32 +#define SCNiFAST32 SCNi32 +#define SCNiFAST64 SCNi64 +#define SCNiMAX SCNi64 +#ifdef _WIN64 + #define SCNiPTR SCNi64 +#else + #define SCNiPTR SCNi32 +#endif + +#define SCNo8 "hho" +#define SCNo16 "ho" +#define SCNo32 "o" +#define SCNo64 "llo" +#define SCNoLEAST8 SCNo8 +#define SCNoLEAST16 SCNo16 +#define SCNoLEAST32 SCNo32 +#define SCNoLEAST64 SCNo64 +#define SCNoFAST8 SCNo8 +#define SCNoFAST16 SCNo32 +#define SCNoFAST32 SCNo32 +#define SCNoFAST64 SCNo64 +#define SCNoMAX SCNo64 +#ifdef _WIN64 + #define SCNoPTR SCNo64 +#else + #define SCNoPTR SCNo32 +#endif + +#define SCNu8 "hhu" +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 "llu" +#define SCNuLEAST8 SCNu8 +#define SCNuLEAST16 SCNu16 +#define SCNuLEAST32 SCNu32 +#define SCNuLEAST64 SCNu64 +#define SCNuFAST8 SCNu8 +#define SCNuFAST16 SCNu32 +#define SCNuFAST32 SCNu32 +#define SCNuFAST64 SCNu64 +#define SCNuMAX SCNu64 +#ifdef _WIN64 + #define SCNuPTR SCNu64 +#else + #define SCNuPTR SCNu32 +#endif + +#define SCNx8 "hhx" +#define SCNx16 "hx" +#define SCNx32 "x" +#define SCNx64 "llx" +#define SCNxLEAST8 SCNx8 +#define SCNxLEAST16 SCNx16 +#define SCNxLEAST32 SCNx32 +#define SCNxLEAST64 SCNx64 +#define SCNxFAST8 SCNx8 +#define SCNxFAST16 SCNx32 +#define SCNxFAST32 SCNx32 +#define SCNxFAST64 SCNx64 +#define SCNxMAX SCNx64 +#ifdef _WIN64 + #define SCNxPTR SCNx64 +#else + #define SCNxPTR SCNx32 +#endif + + + +_CRT_END_C_HEADER + +/* + * Copyright (c) 1992-2010 by P.J. Plauger. ALL RIGHTS RESERVED. + * Consult your license regarding permissions and restrictions. +V5.30:0009 */ + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INTTYPES diff --git a/sdk/include/ucrt/io.h b/sdk/include/ucrt/io.h new file mode 100644 index 0000000000000..94cde082b2bcf --- /dev/null +++ b/sdk/include/ucrt/io.h @@ -0,0 +1,13 @@ +// +// io.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the low-level I/O and file handling functionality. +// +#pragma once +#ifndef _INC_IO // include guard for 3rd party interop +#define _INC_IO + +#include +#endif // _INC_IO diff --git a/sdk/include/ucrt/locale.h b/sdk/include/ucrt/locale.h new file mode 100644 index 0000000000000..a60971cd0549c --- /dev/null +++ b/sdk/include/ucrt/locale.h @@ -0,0 +1,184 @@ +// +// locale.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C locale library. +// +#pragma once +#ifndef _INC_LOCALE // include guard for 3rd party interop +#define _INC_LOCALE + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +// Locale categories +#define LC_ALL 0 +#define LC_COLLATE 1 +#define LC_CTYPE 2 +#define LC_MONETARY 3 +#define LC_NUMERIC 4 +#define LC_TIME 5 + +#define LC_MIN LC_ALL +#define LC_MAX LC_TIME + +// Locale convention structure +struct lconv +{ + char* decimal_point; + char* thousands_sep; + char* grouping; + char* int_curr_symbol; + char* currency_symbol; + char* mon_decimal_point; + char* mon_thousands_sep; + char* mon_grouping; + char* positive_sign; + char* negative_sign; + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; + wchar_t* _W_decimal_point; + wchar_t* _W_thousands_sep; + wchar_t* _W_int_curr_symbol; + wchar_t* _W_currency_symbol; + wchar_t* _W_mon_decimal_point; + wchar_t* _W_mon_thousands_sep; + wchar_t* _W_positive_sign; + wchar_t* _W_negative_sign; +}; + +struct tm; + +// ANSI: char lconv members default is CHAR_MAX which is compile time dependent. +// Defining and using __do_unsigned_char_lconv_initialization here causes CRT +// startup code to initialize lconv members properly +#ifdef _CHAR_UNSIGNED + extern int __do_unsigned_char_lconv_initialization; + extern __inline int __use_char_max(void) + { + return __do_unsigned_char_lconv_initialization; + } +#endif + + + +#define _ENABLE_PER_THREAD_LOCALE 0x0001 +#define _DISABLE_PER_THREAD_LOCALE 0x0002 +#define _ENABLE_PER_THREAD_LOCALE_GLOBAL 0x0010 +#define _DISABLE_PER_THREAD_LOCALE_GLOBAL 0x0020 +#define _ENABLE_PER_THREAD_LOCALE_NEW 0x0100 +#define _DISABLE_PER_THREAD_LOCALE_NEW 0x0200 + +#if _CRT_FUNCTIONS_REQUIRED + + _ACRTIMP void __cdecl _lock_locales(void); + _ACRTIMP void __cdecl _unlock_locales(void); + + _Check_return_opt_ + _ACRTIMP int __cdecl _configthreadlocale( + _In_ int _Flag + ); + + _Check_return_opt_ _Success_(return != 0) _Ret_z_ + _ACRTIMP char* __cdecl setlocale( + _In_ int _Category, + _In_opt_z_ char const* _Locale + ); + + _Check_return_opt_ + _ACRTIMP struct lconv* __cdecl localeconv(void); + + _Check_return_opt_ + _ACRTIMP _locale_t __cdecl _get_current_locale(void); + + _Check_return_opt_ + _ACRTIMP _locale_t __cdecl _create_locale( + _In_ int _Category, + _In_z_ char const* _Locale + ); + + _ACRTIMP void __cdecl _free_locale( + _In_opt_ _locale_t _Locale + ); + + // Also declared in + _Check_return_opt_ _Success_(return != 0) _Ret_z_ + _ACRTIMP wchar_t* __cdecl _wsetlocale( + _In_ int _Category, + _In_opt_z_ wchar_t const* _Locale + ); + + _Check_return_opt_ + _ACRTIMP _locale_t __cdecl _wcreate_locale( + _In_ int _Category, + _In_z_ wchar_t const* _Locale + ); + + + + _ACRTIMP wchar_t** __cdecl ___lc_locale_name_func(void); + _ACRTIMP unsigned int __cdecl ___lc_codepage_func (void); + _ACRTIMP unsigned int __cdecl ___lc_collate_cp_func (void); + + + + + // Time-related functions + _Success_(return != 0) + _Ret_z_ + _ACRTIMP char* __cdecl _Getdays(void); + + _Success_(return != 0) + _Ret_z_ + _ACRTIMP char* __cdecl _Getmonths(void); + + _ACRTIMP void* __cdecl _Gettnames(void); + + _Success_(return != 0) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl _W_Getdays(void); + + _Success_(return != 0) + _Ret_z_ + _ACRTIMP wchar_t* __cdecl _W_Getmonths(void); + + _ACRTIMP void* __cdecl _W_Gettnames(void); + + _Success_(return > 0) + _ACRTIMP size_t __cdecl _Strftime( + _Out_writes_z_(_Max_size) char* _Buffer, + _In_ size_t _Max_size, + _In_z_ char const* _Format, + _In_ struct tm const* _Timeptr, + _In_opt_ void* _Lc_time_arg); + + _Success_(return > 0) + _ACRTIMP size_t __cdecl _Wcsftime( + _Out_writes_z_(_Max_size) wchar_t* _Buffer, + _In_ size_t _Max_size, + _In_z_ wchar_t const* _Format, + _In_ struct tm const* _Timeptr, + _In_opt_ void* _Lc_time_arg + ); + +#endif // _CRT_FUNCTIONS_REQUIRED + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_LOCALE diff --git a/sdk/include/ucrt/malloc.h b/sdk/include/ucrt/malloc.h new file mode 100644 index 0000000000000..c9e0c24cf19ec --- /dev/null +++ b/sdk/include/ucrt/malloc.h @@ -0,0 +1,184 @@ +// +// malloc.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The memory allocation library. +// +#pragma once +#ifndef _INC_MALLOC // include guard for 3rd party interop +#define _INC_MALLOC + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +// Maximum heap request the heap manager will attempt +#ifdef _WIN64 + #define _HEAP_MAXREQ 0xFFFFFFFFFFFFFFE0 +#else + #define _HEAP_MAXREQ 0xFFFFFFE0 +#endif + + + +// Constants for _heapchk and _heapwalk routines +#define _HEAPEMPTY (-1) +#define _HEAPOK (-2) +#define _HEAPBADBEGIN (-3) +#define _HEAPBADNODE (-4) +#define _HEAPEND (-5) +#define _HEAPBADPTR (-6) +#define _FREEENTRY 0 +#define _USEDENTRY 1 + +typedef struct _heapinfo +{ + int* _pentry; + size_t _size; + int _useflag; +} _HEAPINFO; + +#define _mm_free(a) _aligned_free(a) +#define _mm_malloc(a, b) _aligned_malloc(a, b) + + + +_Ret_notnull_ _Post_writable_byte_size_(_Size) +void* __cdecl _alloca(_In_ size_t _Size); + + + +#if !defined __midl && !defined RC_INVOKED + + _ACRTIMP intptr_t __cdecl _get_heap_handle(void); + + _Check_return_ + _DCRTIMP int __cdecl _heapmin(void); + + #if defined _DEBUG || defined _CRT_USE_WINAPI_FAMILY_DESKTOP_APP || defined _CORECRT_BUILD + _ACRTIMP int __cdecl _heapwalk(_Inout_ _HEAPINFO* _EntryInfo); + #endif + + #if defined _CRT_USE_WINAPI_FAMILY_DESKTOP_APP || defined _CRT_USE_WINAPI_FAMILY_GAMES + _Check_return_ _DCRTIMP int __cdecl _heapchk(void); + #endif + + _DCRTIMP int __cdecl _resetstkoflw(void); + + #define _ALLOCA_S_THRESHOLD 1024 + #define _ALLOCA_S_STACK_MARKER 0xCCCC + #define _ALLOCA_S_HEAP_MARKER 0xDDDD + + #ifdef _WIN64 + #define _ALLOCA_S_MARKER_SIZE 16 + #else + #define _ALLOCA_S_MARKER_SIZE 8 + #endif + + _STATIC_ASSERT(sizeof(unsigned int) <= _ALLOCA_S_MARKER_SIZE); + + + #pragma warning(push) + #pragma warning(disable: 6540) // C6540: attribute annotations on this function will invalidate all + // of its existing __declspec annotations + + __inline void* _MarkAllocaS(_Out_opt_ __crt_typefix(unsigned int*) void* _Ptr, unsigned int _Marker) + { + if (_Ptr) + { + *((unsigned int*)_Ptr) = _Marker; + _Ptr = (char*)_Ptr + _ALLOCA_S_MARKER_SIZE; + } + return _Ptr; + } + + __inline size_t _MallocaComputeSize(size_t _Size) + { + size_t _MarkedSize = _Size + _ALLOCA_S_MARKER_SIZE; + return _MarkedSize > _Size ? _MarkedSize : 0; + } + + #pragma warning(pop) + +#endif + + + +#ifdef _DEBUG +// C6255: _alloca indicates failure by raising a stack overflow exception +// C6386: buffer overrun + #ifndef _CRTDBG_MAP_ALLOC + #undef _malloca + #define _malloca(size) \ + __pragma(warning(suppress: 6255 6386)) \ + (_MallocaComputeSize(size) != 0 \ + ? _MarkAllocaS(malloc(_MallocaComputeSize(size)), _ALLOCA_S_HEAP_MARKER) \ + : NULL) + #endif + +#else + + #undef _malloca + #define _malloca(size) \ + __pragma(warning(suppress: 6255 6386)) \ + (_MallocaComputeSize(size) != 0 \ + ? (((_MallocaComputeSize(size) <= _ALLOCA_S_THRESHOLD) \ + ? _MarkAllocaS(_alloca(_MallocaComputeSize(size)), _ALLOCA_S_STACK_MARKER) \ + : _MarkAllocaS(malloc(_MallocaComputeSize(size)), _ALLOCA_S_HEAP_MARKER))) \ + : NULL) + +#endif + + + +#if defined __midl && !defined RC_INVOKED +#elif defined _DEBUG && defined _CRTDBG_MAP_ALLOC +#else + + #undef _freea + + #pragma warning(push) + #pragma warning(disable: 6014) // leaking memory + __inline void __CRTDECL _freea(_Pre_maybenull_ _Post_invalid_ void* _Memory) + { + unsigned int _Marker; + if (_Memory) + { + _Memory = (char*)_Memory - _ALLOCA_S_MARKER_SIZE; + _Marker = *(unsigned int*)_Memory; + if (_Marker == _ALLOCA_S_HEAP_MARKER) + { + free(_Memory); + } + #ifdef _ASSERTE + else if (_Marker != _ALLOCA_S_STACK_MARKER) + { + _ASSERTE(("Corrupted pointer passed to _freea" && 0)); + } + #endif + } + } + #pragma warning(pop) + +#endif + + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #define alloca _alloca +#endif + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_MALLOC diff --git a/sdk/include/ucrt/math.h b/sdk/include/ucrt/math.h new file mode 100644 index 0000000000000..61995ee6076d8 --- /dev/null +++ b/sdk/include/ucrt/math.h @@ -0,0 +1,15 @@ +// +// math.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. This header consists of two parts: +// contains the math library; contains +// the nonstandard but useful constant definitions. The headers are divided in +// this way for modularity (to support the C++ modules feature). +// +#include + +#ifdef _USE_MATH_DEFINES + #include +#endif diff --git a/sdk/include/ucrt/mbctype.h b/sdk/include/ucrt/mbctype.h new file mode 100644 index 0000000000000..b62ac4bc3f168 --- /dev/null +++ b/sdk/include/ucrt/mbctype.h @@ -0,0 +1,173 @@ +// +// mbctype.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Functions and macros for MBCS character classification and conversion. +// +#pragma once +#ifndef _INC_MBCTYPE // include guard for 3rd party interop +#define _INC_MBCTYPE + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +// This declaration allows the user access the _mbctype[] look-up array. +_Check_return_ _ACRTIMP unsigned char* __cdecl __p__mbctype(void); +_Check_return_ _ACRTIMP unsigned char* __cdecl __p__mbcasemap(void); + +#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + #ifndef _CORECRT_BUILD + extern unsigned char _mbctype[]; + extern unsigned char _mbcasemap[]; + #endif +#else + #define _mbctype (__p__mbctype()) + #define _mbcasemap (__p__mbcasemap()) +#endif + + + +// Bit masks for MBCS character types: +// Different encodings may have different behaviors, applications are discouraged +// from attempting to reverse engineer the mechanics of the various encodings. +#define _MS 0x01 // MBCS single-byte symbol +#define _MP 0x02 // MBCS punctuation +#define _M1 0x04 // MBCS (not UTF-8!) 1st (lead) byte +#define _M2 0x08 // MBCS (not UTF-8!) 2nd byte + +// The CRT does not do proper linguistic casing, it is preferred that applications +// use appropriate NLS or Globalization functions. +#define _SBUP 0x10 // SBCS uppercase char +#define _SBLOW 0x20 // SBCS lowercase char + +// Byte types +// Different encodings may have different behaviors, use of these is discouraged +#define _MBC_SINGLE 0 // Valid single byte char +#define _MBC_LEAD 1 // Lead byte +#define _MBC_TRAIL 2 // Trailing byte +#define _MBC_ILLEGAL (-1) // Illegal byte + +#define _KANJI_CP 932 + +// _setmbcp parameter defines: +// Use of UTF-8 is encouraged +#define _MB_CP_SBCS 0 +#define _MB_CP_OEM -2 +#define _MB_CP_ANSI -3 +#define _MB_CP_LOCALE -4 +// CP_UTF8 - UTF-8 was not permitted in earlier CRT versions +#define _MB_CP_UTF8 65001 + +// Multibyte control routines: +_ACRTIMP int __cdecl _setmbcp(_In_ int _CodePage); +_ACRTIMP int __cdecl _getmbcp(void); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Multibyte Character Classification and Conversion Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if _CRT_FUNCTIONS_REQUIRED + _Check_return_ _DCRTIMP int __cdecl _ismbbkalnum(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbkana (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbkpunct(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbkprint(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbalpha (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbpunct (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbblank (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbalnum (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbprint (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbbgraph (_In_ unsigned int _C); + + _Check_return_ _DCRTIMP int __cdecl _ismbbkalnum_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbkana_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbkpunct_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbkprint_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbalpha_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbpunct_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbblank_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbalnum_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbprint_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbgraph_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + + // BEGIN _MBLEADTRAIL_DEFINED + // Lead and trail bytes do not apply correctly to all encodings, including UTF-8. Applications + // are recommended to use the system codepage conversion APIs and not attempt to reverse + // engineer the behavior of any particular encoding. Lead and trail are always FALSE for UTF-8. + _When_(_Ch == 0, _Post_equal_to_(0)) + _Check_return_ _DCRTIMP int __cdecl _ismbblead (_In_ unsigned int _Ch); + _Check_return_ _DCRTIMP int __cdecl _ismbbtrail(_In_ unsigned int _Ch); + + _When_(_Ch == 0, _Post_equal_to_(0)) + _Check_return_ _DCRTIMP int __cdecl _ismbblead_l (_In_ unsigned int _Ch, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbtrail_l(_In_ unsigned int _Ch, _In_opt_ _locale_t _Locale); + + _Check_return_ + _DCRTIMP int __cdecl _ismbslead( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos + ); + + _Check_return_ + _DCRTIMP int __cdecl _ismbslead_l( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP int __cdecl _ismbstrail( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos + ); + + _Check_return_ + _ACRTIMP int __cdecl _ismbstrail_l( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos, + _In_opt_ _locale_t _Locale + ); +#endif // _CRT_FUNCTIONS_REQUIRED + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Unsynchronized Macro Forms of Some Classification Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL + #define _ismbbkalnum(_c) ((_mbctype+1)[(unsigned char)(_c)] & (_MS )) + #define _ismbbkprint(_c) ((_mbctype+1)[(unsigned char)(_c)] & (_MS | _MP)) + #define _ismbbkpunct(_c) ((_mbctype+1)[(unsigned char)(_c)] & (_MP )) + + #define _ismbbalnum(_c) (((_pctype)[(unsigned char)(_c)] & (_ALPHA | _DIGIT )) || _ismbbkalnum(_c)) + #define _ismbbalpha(_c) (((_pctype)[(unsigned char)(_c)] & (_ALPHA )) || _ismbbkalnum(_c)) + #define _ismbbgraph(_c) (((_pctype)[(unsigned char)(_c)] & (_PUNCT | _ALPHA | _DIGIT )) || _ismbbkprint(_c)) + #define _ismbbprint(_c) (((_pctype)[(unsigned char)(_c)] & (_BLANK | _PUNCT | _ALPHA | _DIGIT)) || _ismbbkprint(_c)) + #define _ismbbpunct(_c) (((_pctype)[(unsigned char)(_c)] & (_PUNCT )) || _ismbbkpunct(_c)) + #define _ismbbblank(_c) (((_c) == '\t') ? _BLANK : (_pctype)[(unsigned char)(_c)] & _BLANK) + + // Note that these are intended for double byte character sets (DBCS) and so UTF-8 doesn't consider either to be true for any bytes + // (for UTF-8 we never set _M1 or _M2 in this array) + #define _ismbblead(_c) ((_mbctype+1)[(unsigned char)(_c)] & _M1) + #define _ismbbtrail(_c) ((_mbctype+1)[(unsigned char)(_c)] & _M2) + + #define _ismbbkana(_c) ((_mbctype+1)[(unsigned char)(_c)] & (_MS | _MP)) +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_MBCTYPE diff --git a/sdk/include/ucrt/mbstring.h b/sdk/include/ucrt/mbstring.h new file mode 100644 index 0000000000000..a22c17bd4c07c --- /dev/null +++ b/sdk/include/ucrt/mbstring.h @@ -0,0 +1,1235 @@ +// +// mbstring.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Functions and macros for MBCS string manipulation +// +#pragma once +#ifndef _INC_MBSTRING // include guard for 3rd party interop +#define _INC_MBSTRING + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#ifndef _FILE_DEFINED + #define _FILE_DEFINED + typedef struct _iobuf + { + void* _Placeholder; + } FILE; +#endif + +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + #pragma push_macro("_mbsdup") + #undef _mbsdup + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsdup( + _In_z_ unsigned char const* _Str + ); + + #pragma pop_macro("_mbsdup") + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // The Multibyte Character String Library Functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_ + _DCRTIMP unsigned int __cdecl _mbbtombc( + _In_ unsigned int _C + ); + + _Check_return_ + _DCRTIMP unsigned int __cdecl _mbbtombc_l( + _In_ unsigned int _C, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbbtype( + _In_ unsigned char _C, + _In_ int _CType + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbbtype_l( + _In_ unsigned char _C, + _In_ int _CType, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP unsigned int __cdecl _mbctombb( + _In_ unsigned int _C + ); + + _Check_return_ + _DCRTIMP unsigned int __cdecl _mbctombb_l( + _In_ unsigned int _C, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP int __cdecl _mbsbtype( + _In_reads_z_(_Pos) unsigned char const* _Str, + _In_ size_t _Pos + ); + + _DCRTIMP int __cdecl _mbsbtype_l( + _In_reads_z_(_Pos) unsigned char const* _Str, + _In_ size_t _Pos, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbscat_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_z_ unsigned char const* _Src + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _mbscat_s, + unsigned char, _Dst, + _In_z_ unsigned char const*, _DstSizeInBytes + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbscat, + _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1), unsigned char, _Dest, + _In_z_ unsigned char const*, _Source + ) + + _DCRTIMP errno_t __cdecl _mbscat_s_l( + _Inout_updates_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ unsigned char const* _Src, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbscat_s_l, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX( + unsigned char* , __RETURN_POLICY_DST, _DCRTIMP, _mbscat_l, _mbscat_s_l, + _Inout_z_ unsigned char, + _Inout_z_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbschr( + _In_z_ unsigned char const* _Str, + _In_ unsigned int _C + ); + + _Check_return_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbschr_l( + _In_z_ unsigned char const* _Str, + _In_ unsigned int _C, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbscmp( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2 + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbscmp_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbscoll( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2 + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbscoll_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbscpy_s( + _Out_writes_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_z_ unsigned char const* _Src + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _mbscpy_s, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbscpy, + _Out_writes_z_(_String_length_(_Source) + 1), unsigned char, _Dest, + _In_z_ unsigned char const*, _Source + ) + + _DCRTIMP errno_t __cdecl _mbscpy_s_l( + _Out_writes_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ unsigned char const* _Src, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbscpy_s, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbscpy_l, _mbscpy_s_l, + _Pre_notnull_ _Post_z_ unsigned char, + _Pre_notnull_ _Post_z_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP size_t __cdecl _mbscspn( + _In_z_ unsigned char const* _String, + _In_z_ unsigned char const* _Control + ); + + _Check_return_ + _DCRTIMP size_t __cdecl _mbscspn_l( + _In_z_ unsigned char const* _String, + _In_z_ unsigned char const* _Control, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsdec( + _In_reads_z_(_Pos - _Start + 1) unsigned char const* _Start, + _In_z_ unsigned char const* _Pos + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsdec_l( + _In_reads_z_(_Pos-_Start+1) unsigned char const* _Start, + _In_z_ unsigned char const* _Pos, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsicmp( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2 + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsicmp_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsicoll( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2 + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsicoll_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsinc( + _In_z_ unsigned char const* _Ptr + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsinc_l( + _In_z_ unsigned char const* _Ptr, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _Post_satisfies_(return <= _String_length_(_String)) + _DCRTIMP size_t __cdecl _mbslen( + _In_z_ unsigned char const* _String + ); + + _Check_return_ + _Post_satisfies_(return <= _String_length_(_String)) + _DCRTIMP size_t __cdecl _mbslen_l( + _In_z_ unsigned char const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _Post_satisfies_(return <= _String_length_(_String) && return <= _MaxCount) + _DCRTIMP size_t __cdecl _mbsnlen( + _In_z_ unsigned char const* _String, + _In_ size_t _MaxCount + ); + + _Check_return_ + _Post_satisfies_(return <= _String_length_(_String) && return <= _MaxCount) + _DCRTIMP size_t __cdecl _mbsnlen_l( + _In_z_ unsigned char const* _String, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbslwr_s( + _Inout_updates_opt_z_(_SizeInBytes) unsigned char* _String, + _In_ size_t _SizeInBytes + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _mbslwr_s, + _Inout_updates_z_(_Size) unsigned char, _String + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbslwr, + _Inout_z_, unsigned char, _String + ) + + _DCRTIMP errno_t __cdecl _mbslwr_s_l( + _Inout_updates_opt_z_(_SizeInBytes) unsigned char* _String, + _In_ size_t _SizeInBytes, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _mbslwr_s_l, + unsigned char, _String, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbslwr_l, _mbslwr_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_z_, unsigned char, _String, + _In_opt_ _locale_t, _Locale + ) + + _DCRTIMP errno_t __cdecl _mbsnbcat_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsnbcat_s, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnbcat, + _Inout_z_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + _DCRTIMP errno_t __cdecl _mbsnbcat_s_l( + _Inout_updates_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbsnbcat_s_l, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnbcat_l, _mbsnbcat_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_z_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbcmp( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbcmp_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbcoll( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbcoll_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP size_t __cdecl _mbsnbcnt( + _In_reads_or_z_(_MaxCount) unsigned char const* _String, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP size_t __cdecl _mbsnbcnt_l( + _In_reads_or_z_(_MaxCount) unsigned char const* _String, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbsnbcpy_s( + _Out_writes_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsnbcpy_s, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2( + _Success_(return != 0) unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnbcpy, + _Out_writes_(_Count) _Post_maybez_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + _DCRTIMP errno_t __cdecl _mbsnbcpy_s_l( + _Out_writes_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbsnbcpy_s_l, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX( + _Success_(return != 0) unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnbcpy_l, _mbsnbcpy_s_l, + _Out_writes_z_(_Size) unsigned char, + _Out_writes_(_Count) _Post_maybez_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbicmp( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbicmp_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbicoll( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnbicoll_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbsnbset_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_ unsigned int _C, + _In_ size_t _MaxCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsnbset_s, + _Prepost_z_ unsigned char, _Dest, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnbset, _mbsnbset_s, + _Inout_updates_z_(_Size) unsigned char, + _Inout_updates_z_(_MaxCount), unsigned char, _String, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount + ) + + _DCRTIMP errno_t __cdecl _mbsnbset_s_l( + _Inout_updates_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_ unsigned int _Ch, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbsnbset_s_l, + _Prepost_z_ unsigned char, _Dest, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnbset_l, _mbsnbset_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_updates_z_(_MaxCount), unsigned char, _String, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + + _DCRTIMP errno_t __cdecl _mbsncat_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsncat_s, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsncat, + _Inout_z_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + _DCRTIMP errno_t __cdecl _mbsncat_s_l( + _Inout_updates_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbsncat_s_l, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsncat_l, _mbsncat_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_z_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP size_t __cdecl _mbsnccnt( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP size_t __cdecl _mbsnccnt_l( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsncmp( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsncmp_l( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsncoll( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsncoll_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbsncpy_s( + _Out_writes_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsncpy_s, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsncpy, + _Pre_notnull_ _Out_writes_(2 * _Count) _Post_maybez_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count + ) + + _DCRTIMP errno_t __cdecl _mbsncpy_s_l( + _Out_writes_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ unsigned char const* _Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbsncpy_s_l, + unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsncpy_l, _mbsncpy_s_l, + _Out_writes_z_(_Size) unsigned char, + _Out_writes_(_Count) _Post_maybez_, unsigned char, _Dest, + _In_z_ unsigned char const*, _Source, + _In_ size_t, _Count, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP unsigned int __cdecl _mbsnextc( + _In_z_ unsigned char const* _String + ); + + _Check_return_ + _DCRTIMP unsigned int __cdecl _mbsnextc_l( + _In_z_ unsigned char const* _String, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnicmp( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str1, + _In_reads_or_z_(_MaxCount) unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnicmp_l( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str1, + _In_reads_or_z_(_MaxCount) unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnicoll( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str1, + _In_reads_or_z_(_MaxCount) unsigned char const* _Str2, + _In_ size_t _MaxCount + ); + + _Check_return_ + _DCRTIMP int __cdecl _mbsnicoll_l( + _In_reads_or_z_(_MaxCount) unsigned char const* _Str1, + _In_reads_or_z_(_MaxCount) unsigned char const* _Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsninc( + _In_reads_or_z_(_Count) unsigned char const* _String, + _In_ size_t _Count + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsninc_l( + _In_reads_or_z_(_Count) unsigned char const* _String, + _In_ size_t _Count, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbsnset_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_ unsigned int _Val, + _In_ size_t _MaxCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsnset_s, + _Prepost_z_ unsigned char, _Dest, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsnset, _mbsnset_s, + _Inout_updates_z_(_Size) unsigned char, + _Inout_updates_z_(_MaxCount), unsigned char, _String, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount + ) + + _DCRTIMP errno_t __cdecl _mbsnset_s_l( + _Inout_updates_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_ unsigned int _Val, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbsnset_s_l, + _Prepost_z_ unsigned char, _Dest, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_EX( + unsigned char* , __RETURN_POLICY_DST, _DCRTIMP, _mbsnset_l, _mbsnset_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_updates_z_(_MaxCount), unsigned char, _String, + _In_ unsigned int, _Val, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbspbrk( + _In_z_ unsigned char const* _String, + _In_z_ unsigned char const* _Control + ); + + _Check_return_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbspbrk_l( + _In_z_ unsigned char const* _String, + _In_z_ unsigned char const* _Control, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbsrchr( + _In_z_ unsigned char const* _String, + _In_ unsigned int _C + ); + + _Check_return_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbsrchr_l( + _In_z_ unsigned char const* _String, + _In_ unsigned int _C, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP unsigned char* __cdecl _mbsrev( + _Inout_z_ unsigned char* _String + ); + + _DCRTIMP unsigned char* __cdecl _mbsrev_l( + _Inout_z_ unsigned char* _String, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbsset_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _In_ unsigned int _Val + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _mbsset_s, + _Prepost_z_ unsigned char, _Dest, + _In_ unsigned int, _Val + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsset, _mbsset_s, + _Inout_updates_z_(_Size) unsigned char, + _Inout_z_, unsigned char, _String, + _In_ unsigned int, _Val + ) + + _DCRTIMP errno_t __cdecl _mbsset_s_l( + _Inout_updates_z_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_ unsigned int _Val, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbsset_s_l, + _Prepost_z_ unsigned char, _Dest, + _In_ unsigned int, _Val, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsset_l, _mbsset_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_z_, unsigned char, _String, + _In_ unsigned int, _Val, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP size_t __cdecl _mbsspn( + _In_z_ unsigned char const* _Str, + _In_z_ unsigned char const* _Control + ); + + _Check_return_ + _DCRTIMP size_t __cdecl _mbsspn_l( + _In_z_ unsigned char const* _Str, + _In_z_ unsigned char const* _Control, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsspnp( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2 + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbsspnp_l( + _In_z_ unsigned char const* _Str1, + _In_z_ unsigned char const* _Str2, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ _Ret_maybenull_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbsstr( + _In_z_ unsigned char const* _Str, + _In_z_ unsigned char const* _Substr + ); + + _Check_return_ _Ret_maybenull_ + _DCRTIMP _CONST_RETURN unsigned char* __cdecl _mbsstr_l( + _In_z_ unsigned char const* _Str, + _In_z_ unsigned char const* _Substr, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ _CRT_INSECURE_DEPRECATE(_mbstok_s) + _DCRTIMP unsigned char* __cdecl _mbstok( + _Inout_opt_z_ unsigned char* _Str, + _In_z_ unsigned char const* _Delim + ); + + _Check_return_ _CRT_INSECURE_DEPRECATE(_mbstok_s_l) + _DCRTIMP unsigned char* __cdecl _mbstok_l( + _Inout_opt_z_ unsigned char* _Str, + _In_z_ unsigned char const* _Delim, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbstok_s( + _Inout_opt_z_ unsigned char* _Str, + _In_z_ unsigned char const* _Delim, + _Inout_ _Deref_prepost_opt_z_ unsigned char** _Context + ); + + _Check_return_ + _DCRTIMP unsigned char* __cdecl _mbstok_s_l( + _Inout_opt_z_ unsigned char* _Str, + _In_z_ unsigned char const* _Delim, + _Inout_ _Deref_prepost_opt_z_ unsigned char** _Context, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbsupr_s( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Str, + _In_ size_t _SizeInBytes + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _mbsupr_s, + _Inout_updates_z_(_Size) unsigned char, _String + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsupr, + _Inout_z_, unsigned char, _String + ) + + _DCRTIMP errno_t __cdecl _mbsupr_s_l( + _Inout_updates_z_(_SizeInBytes) unsigned char* _Str, + _In_ size_t _SizeInBytes, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _mbsupr_s_l, + unsigned char, _String, + _In_opt_ _locale_t, _Locale + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + unsigned char*, __RETURN_POLICY_DST, _DCRTIMP, _mbsupr_l, _mbsupr_s_l, + _Inout_updates_z_(_Size) unsigned char, + _Inout_z_, unsigned char, _String, + _In_opt_ _locale_t, _Locale + ) + + _Check_return_ + _DCRTIMP size_t __cdecl _mbclen( + _In_z_ unsigned char const* _String + ); + + _Check_return_ + _DCRTIMP size_t __cdecl _mbclen_l( + _In_z_ unsigned char const* _String, + _In_opt_ _locale_t _Locale + ); + + _CRT_INSECURE_DEPRECATE(_mbccpy_s) + _DCRTIMP void __cdecl _mbccpy( + _Out_writes_bytes_(2) unsigned char* _Dst, + _In_z_ unsigned char const* _Src + ); + + _CRT_INSECURE_DEPRECATE(_mbccpy_s_l) + _DCRTIMP void __cdecl _mbccpy_l( + _Out_writes_bytes_(2) unsigned char* _Dst, + _In_z_ unsigned char const* _Src, + _In_opt_ _locale_t _Locale + ); + + _DCRTIMP errno_t __cdecl _mbccpy_s( + _Out_writes_z_(_SizeInBytes) unsigned char* _Dst, + _In_ size_t _SizeInBytes, + _Out_opt_ int* _PCopied, + _In_z_ unsigned char const* _Src + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _mbccpy_s, + unsigned char, _Dest, + _Out_opt_ int*, _PCopied, + _In_z_ unsigned char const*, _Source + ) + + _DCRTIMP errno_t __cdecl _mbccpy_s_l( + _Out_writes_bytes_(_DstSizeInBytes) unsigned char* _Dst, + _In_ size_t _DstSizeInBytes, + _Out_opt_ int* _PCopied, + _In_z_ unsigned char const* _Src, + _In_opt_ _locale_t _Locale + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + errno_t, _mbccpy_s_l, + unsigned char, _Dest, + _Out_opt_ int*, _PCopied, + _In_z_ unsigned char const*, _Source, + _In_opt_ _locale_t, _Locale + ) + + #define _mbccmp(_cpc1, _cpc2) _mbsncmp((_cpc1), (_cpc2), 1) + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Const-Correct C++ Overloads + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + #ifndef _EXCLUDE_MBSTRING_CONST_CORRECT_OVERLOADS + #ifdef __cplusplus + extern "C++" { + + _Check_return_ + inline unsigned char* __CRTDECL _mbschr( + _In_z_ unsigned char* const _String, + _In_ unsigned int const _Char + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbschr(_ConstString, _Char)); + } + + _Check_return_ + inline unsigned char* __CRTDECL _mbschr_l( + _In_z_ unsigned char* const _String, + _In_ unsigned int const _Char, + _In_opt_ _locale_t const _Locale + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbschr_l(_ConstString, _Char, _Locale)); + } + + _Check_return_ + inline unsigned char* __CRTDECL _mbspbrk( + _In_z_ unsigned char* const _String, + _In_z_ unsigned char const* const _CharSet + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbspbrk(_ConstString, _CharSet)); + } + + _Check_return_ + inline unsigned char* __CRTDECL _mbspbrk_l( + _In_z_ unsigned char* const _String, + _In_z_ unsigned char const* const _CharSet, + _In_opt_ _locale_t const _Locale + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbspbrk_l(_ConstString, _CharSet, _Locale)); + } + + _Check_return_ + inline unsigned char* __CRTDECL _mbsrchr( + _In_z_ unsigned char* const _String, + _In_ unsigned int const _Char + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbsrchr(_ConstString, _Char)); + } + + _Check_return_ + inline unsigned char* __CRTDECL _mbsrchr_l( + _In_z_ unsigned char* const _String, + _In_ unsigned int const _Char, + _In_opt_ _locale_t const _Locale + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbsrchr_l(_ConstString, _Char, _Locale)); + } + + _Check_return_ _Ret_maybenull_ + inline unsigned char* __CRTDECL _mbsstr( + _In_z_ unsigned char* const _String, + _In_z_ unsigned char const* const _Match + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbsstr(_ConstString, _Match)); + } + + _Check_return_ _Ret_maybenull_ + inline unsigned char* __CRTDECL _mbsstr_l( + _In_z_ unsigned char* const _String, + _In_z_ unsigned char const* const _Match, + _In_opt_ _locale_t const _Locale + ) + { + unsigned char const* const _ConstString = _String; + return const_cast(_mbsstr_l(_ConstString, _Match, _Locale)); + } + + } // extern "C++" + #endif // __cplusplus + #endif // _EXCLUDE_MBSTRING_CONST_CORRECT_OVERLOADS + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Multibyte Character Classification and Conversion Functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_ _DCRTIMP int __cdecl _ismbcalnum(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcalpha(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcdigit(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcgraph(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbclegal(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbclower(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcprint(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcpunct(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcblank(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcspace(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcupper(_In_ unsigned int _C); + + _Check_return_ _DCRTIMP int __cdecl _ismbcalnum_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcalpha_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcdigit_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcgraph_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbclegal_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbclower_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcprint_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcpunct_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcblank_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcspace_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcupper_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctolower(_In_ unsigned int _Ch); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctoupper(_In_ unsigned int _Ch); + + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctolower_l(_In_ unsigned int _Ch, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctoupper_l(_In_ unsigned int _Ch, _In_opt_ _locale_t _Locale); + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Multibyte Character Kanji Classification and Conversion Functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Check_return_ _DCRTIMP int __cdecl _ismbchira (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbckata (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcsymbol(_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcl0 (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcl1 (_In_ unsigned int _C); + _Check_return_ _DCRTIMP int __cdecl _ismbcl2 (_In_ unsigned int _C); + + _Check_return_ _DCRTIMP int __cdecl _ismbchira_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbckata_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcsymbol_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcl0_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcl1_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbcl2_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + + _Check_return_ _DCRTIMP unsigned int __cdecl _mbcjistojms(_In_ unsigned int _C); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbcjmstojis(_In_ unsigned int _C); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctohira (_In_ unsigned int _C); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctokata (_In_ unsigned int _C); + + _Check_return_ _DCRTIMP unsigned int __cdecl _mbcjistojms_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbcjmstojis_l(_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctohira_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP unsigned int __cdecl _mbctokata_l (_In_ unsigned int _C, _In_opt_ _locale_t _Locale); + +#endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + + +#if _CRT_FUNCTIONS_REQUIRED + // Lead and trail bytes do not apply correctly to all encodings, including UTF-8. Applications + // are recommended to use the system codepage conversion APIs and not attempt to reverse + // engineer the behavior of any particular encoding. Lead and trail are always FALSE for UTF-8. + _When_(_Ch == 0, _Post_equal_to_(0)) + _Check_return_ _DCRTIMP int __cdecl _ismbblead (_In_ unsigned int _Ch); + _Check_return_ _DCRTIMP int __cdecl _ismbbtrail(_In_ unsigned int _Ch); + + _When_(_Ch == 0, _Post_equal_to_(0)) + _Check_return_ _DCRTIMP int __cdecl _ismbblead_l (_In_ unsigned int _Ch, _In_opt_ _locale_t _Locale); + _Check_return_ _DCRTIMP int __cdecl _ismbbtrail_l(_In_ unsigned int _Ch, _In_opt_ _locale_t _Locale); + + _Check_return_ + _DCRTIMP int __cdecl _ismbslead( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos + ); + + _Check_return_ + _DCRTIMP int __cdecl _ismbslead_l( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos, + _In_opt_ _locale_t _Locale + ); + + _Check_return_ + _ACRTIMP int __cdecl _ismbstrail( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos + ); + + _Check_return_ + _ACRTIMP int __cdecl _ismbstrail_l( + _In_reads_z_(_Pos - _String + 1) unsigned char const* _String, + _In_z_ unsigned char const* _Pos, + _In_opt_ _locale_t _Locale + ); +#endif // _CRT_FUNCTIONS_REQUIRED + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_MBSTRING diff --git a/sdk/include/ucrt/memory.h b/sdk/include/ucrt/memory.h new file mode 100644 index 0000000000000..8d4f2a5fb5c75 --- /dev/null +++ b/sdk/include/ucrt/memory.h @@ -0,0 +1,13 @@ +// +// memory.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The buffer (memory) manipulation library. +// +#pragma once +#ifndef _INC_MEMORY // include guard for 3rd party interop +#define _INC_MEMORY + +#include +#endif // _INC_MEMORY diff --git a/sdk/include/ucrt/minmax.h b/sdk/include/ucrt/minmax.h new file mode 100644 index 0000000000000..859ffcc4e8f36 --- /dev/null +++ b/sdk/include/ucrt/minmax.h @@ -0,0 +1,28 @@ +// +// minmax.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Familiar min() and max() macros +// +#pragma once +#ifndef _INC_MINMAX +#define _INC_MINMAX + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#ifndef max + #define max(a ,b) (((a) > (b)) ? (a) : (b)) +#endif + +#ifndef min + #define min(a, b) (((a) < (b)) ? (a) : (b)) +#endif + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_MINMAX diff --git a/sdk/include/ucrt/new.h b/sdk/include/ucrt/new.h new file mode 100644 index 0000000000000..3c3123c4a8206 --- /dev/null +++ b/sdk/include/ucrt/new.h @@ -0,0 +1,68 @@ +// +// new.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C++ memory allocation library functionality +// +#pragma once +#ifndef _INC_NEW // include guard for 3rd party interop +#define _INC_NEW + +#include +#include + +#ifdef __cplusplus + + #if !defined _MSC_EXTENSIONS && !defined _CRTBLD && !defined _CORECRT_BUILD + #include + #endif + + #if defined _MSC_EXTENSIONS && !defined _CORECRT_BUILD + #include + + namespace std + { + typedef void (__CRTDECL* new_handler)(); + + #ifdef _M_CEE + typedef void (__clrcall* _new_handler_m) (); + #endif + + _CRTIMP2 new_handler __cdecl set_new_handler(_In_opt_ new_handler _NewHandler) throw(); + } + + #ifdef _M_CEE + using ::std::_new_handler_m; + #endif + + using ::std::new_handler; + using ::std::set_new_handler; + #endif + +#endif // __cplusplus + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +typedef int (__CRTDECL* _PNH)(size_t); + +_PNH __cdecl _query_new_handler(void); +_PNH __cdecl _set_new_handler(_In_opt_ _PNH _NewHandler); + +// new mode flag -- when set, makes malloc() behave like new() +_ACRTIMP int __cdecl _query_new_mode(void); +_ACRTIMP int __cdecl _set_new_mode(_In_ int _NewMode); + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS + +#endif // _INC_NEW diff --git a/sdk/include/ucrt/process.h b/sdk/include/ucrt/process.h new file mode 100644 index 0000000000000..78dfcb5ceb122 --- /dev/null +++ b/sdk/include/ucrt/process.h @@ -0,0 +1,375 @@ +// +// process.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file declares the process control functionality (e.g., the exec and +// spawn families of functions). +// +#pragma once +#ifndef _INC_PROCESS // include guard for 3rd party interop +#define _INC_PROCESS + +#include +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +// Flag values for the _spawn family of functions +#define _P_WAIT 0 +#define _P_NOWAIT 1 +#define _OLD_P_OVERLAY 2 +#define _P_NOWAITO 3 +#define _P_DETACH 4 +#define _P_OVERLAY 2 + +// Action codes for _cwait(). The action code argument to _cwait() is ignored on +// Win32. The parameter only exists so that we do not break existing code. +#define _WAIT_CHILD 0 +#define _WAIT_GRANDCHILD 1 + + + +#if _CRT_FUNCTIONS_REQUIRED + + _ACRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl _Exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl quick_exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl abort(void); + + _DCRTIMP int __cdecl system(_In_opt_z_ char const* _Command); + + _ACRTIMP void __cdecl _cexit(void); + _ACRTIMP void __cdecl _c_exit(void); + + typedef void (__stdcall *_tls_callback_type)(void *, unsigned long, void *); + _ACRTIMP void __cdecl _register_thread_local_exe_atexit_callback(_In_ _tls_callback_type _Callback); + +#endif // _CRT_FUNCTIONS_REQUIRED + +// Declare DLL notification (initialization/termination) routines. The preferred +// method is for the CRT client to define DllMain(), which will automatically be +// called by the DLL entry point defined by the CRT. If the CRT client wants to +// define the DLL entry point, the client entry point must call _CRT_INIT on all +// types of notifications, as the very first thing on attach notifications and as +// the very last thing on detach notifications. +#ifdef _DECL_DLLMAIN + + int __stdcall DllMain( + _In_ void* _DllHandle, + _In_ unsigned long _Reason, + _In_opt_ void* _Reserved + ); + + int __stdcall _CRT_INIT( + _In_ void* _DllHandle, + _In_ unsigned long _Reason, + _In_opt_ void* _Reserved + ); + + extern int (__stdcall* const _pRawDllMain)(void*, unsigned long, void*); + +#endif + + + +typedef void (__cdecl* _beginthread_proc_type )(void*); +typedef unsigned (__stdcall* _beginthreadex_proc_type)(void*); + +_ACRTIMP uintptr_t __cdecl _beginthread( + _In_ _beginthread_proc_type _StartAddress, + _In_ unsigned _StackSize, + _In_opt_ void* _ArgList + ); + +_ACRTIMP void __cdecl _endthread(void); + +_Success_(return != 0) +_ACRTIMP uintptr_t __cdecl _beginthreadex( + _In_opt_ void* _Security, + _In_ unsigned _StackSize, + _In_ _beginthreadex_proc_type _StartAddress, + _In_opt_ void* _ArgList, + _In_ unsigned _InitFlag, + _Out_opt_ unsigned* _ThrdAddr + ); + +_ACRTIMP void __cdecl _endthreadex( + _In_ unsigned _ReturnCode + ); + + + +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _ACRTIMP int __cdecl _getpid(void); + + _DCRTIMP intptr_t __cdecl _cwait( + _Out_opt_ int* _TermStat, + _In_ intptr_t _ProcHandle, + _In_ int _Action + ); + + _DCRTIMP intptr_t __cdecl _execl( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _execle( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _execlp( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _execlpe( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _execv( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _DCRTIMP intptr_t __cdecl _execve( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _DCRTIMP intptr_t __cdecl _execvp( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _DCRTIMP intptr_t __cdecl _execvpe( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _DCRTIMP intptr_t __cdecl _spawnl( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _spawnle( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _spawnlp( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _spawnlpe( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _DCRTIMP intptr_t __cdecl _spawnv( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _DCRTIMP intptr_t __cdecl _spawnve( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _DCRTIMP intptr_t __cdecl _spawnvp( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _DCRTIMP intptr_t __cdecl _spawnvpe( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _CRT_OBSOLETE(LoadLibrary) + _DCRTIMP intptr_t __cdecl _loaddll( + _In_z_ char* _FileName + ); + + _CRT_OBSOLETE(FreeLibrary) + _DCRTIMP int __cdecl _unloaddll( + _In_ intptr_t _Handle + ); + + typedef int (__cdecl* _GetDllProcAddrProcType)(void); + + _CRT_OBSOLETE(GetProcAddress) + _DCRTIMP _GetDllProcAddrProcType __cdecl _getdllprocaddr( + _In_ intptr_t _Handle, + _In_opt_z_ char* _ProcedureName, + _In_ intptr_t _Ordinal + ); + +#endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #define P_WAIT _P_WAIT + #define P_NOWAIT _P_NOWAIT + #define P_OVERLAY _P_OVERLAY + #define OLD_P_OVERLAY _OLD_P_OVERLAY + #define P_NOWAITO _P_NOWAITO + #define P_DETACH _P_DETACH + #define WAIT_CHILD _WAIT_CHILD + #define WAIT_GRANDCHILD _WAIT_GRANDCHILD + + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _CRT_NONSTDC_DEPRECATE(_cwait) + _DCRTIMP intptr_t __cdecl cwait( + _Out_opt_ int* _TermStat, + _In_ intptr_t _ProcHandle, + _In_ int _Action + ); + + _CRT_NONSTDC_DEPRECATE(_execl) + _DCRTIMP intptr_t __cdecl execl( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_execle) + _DCRTIMP intptr_t __cdecl execle( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_execlp) + _DCRTIMP intptr_t __cdecl execlp( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_execlpe) + _DCRTIMP intptr_t __cdecl execlpe( + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_execv) + _DCRTIMP intptr_t __cdecl execv( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _CRT_NONSTDC_DEPRECATE(_execve) + _DCRTIMP intptr_t __cdecl execve( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _CRT_NONSTDC_DEPRECATE(_execvp) + _DCRTIMP intptr_t __cdecl execvp( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _CRT_NONSTDC_DEPRECATE(_execvpe) + _DCRTIMP intptr_t __cdecl execvpe( + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _CRT_NONSTDC_DEPRECATE(_spawnl) + _DCRTIMP intptr_t __cdecl spawnl( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_spawnle) + _DCRTIMP intptr_t __cdecl spawnle( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_spawnlp) + _DCRTIMP intptr_t __cdecl spawnlp( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_spawnlpe) + _DCRTIMP intptr_t __cdecl spawnlpe( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* _Arguments, + ...); + + _CRT_NONSTDC_DEPRECATE(_spawnv) + _DCRTIMP intptr_t __cdecl spawnv( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments); + + _CRT_NONSTDC_DEPRECATE(_spawnve) + _DCRTIMP intptr_t __cdecl spawnve( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _CRT_NONSTDC_DEPRECATE(_spawnvp) + _DCRTIMP intptr_t __cdecl spawnvp( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments + ); + + _CRT_NONSTDC_DEPRECATE(_spawnvpe) + _DCRTIMP intptr_t __cdecl spawnvpe( + _In_ int _Mode, + _In_z_ char const* _FileName, + _In_z_ char const* const* _Arguments, + _In_opt_z_ char const* const* _Environment + ); + + _CRT_NONSTDC_DEPRECATE(_getpid) + _ACRTIMP int __cdecl getpid(void); + + #endif // _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_PROCESS diff --git a/sdk/include/ucrt/safeint.h b/sdk/include/ucrt/safeint.h new file mode 100644 index 0000000000000..ecab94f67dd9a --- /dev/null +++ b/sdk/include/ucrt/safeint.h @@ -0,0 +1,1665 @@ +/*** +*safeint.h - SafeInt class and free-standing functions used to prevent arithmetic overflows +* +* Copyright (c) Microsoft Corporation. All rights reserved. +* +*Purpose: +* +* The SafeInt class is designed to have as low an overhead as possible +* while still ensuring that all integer operations are conducted safely. +* Nearly every operator has been overloaded, with a very few exceptions. +* +* A usability-safety trade-off has been made to help ensure safety. This +* requires that every operation return either a SafeInt or a bool. If we +* allowed an operator to return a base integer type T, then the following +* can happen: +* +* char i = SafeInt(32) * 2 + SafeInt(16) * 4; +* +* The * operators take precedence, get overloaded, return a char, and then +* you have: +* +* char i = (char)64 + (char)64; //overflow! +* +* This situation would mean that safety would depend on usage, which isn't +* acceptable. +* +* One key operator that is missing is an implicit cast to type T. The reason for +* this is that if there is an implicit cast operator, then we end up with +* an ambiguous compile-time precedence. Because of this amiguity, there +* are two methods that are provided: +* +* Casting operators for every native integer type +* +* SafeInt::Ptr() - returns the address of the internal integer +* +* The SafeInt class should be used in any circumstances where ensuring +* integrity of the calculations is more important than performance. See Performance +* Notes below for additional information. +* +* Many of the conditionals will optimize out or be inlined for a release +* build (especially with /Ox), but it does have significantly more overhead, +* especially for signed numbers. If you do not _require_ negative numbers, use +* unsigned integer types - certain types of problems cannot occur, and this class +* performs most efficiently. +* +* Here's an example of when the class should ideally be used - +* +* void* AllocateMemForStructs(int StructSize, int HowMany) +* { +* SafeInt s(StructSize); +* +* s *= HowMany; +* +* return malloc(s); +* +* } +* +* Here's when it should NOT be used: +* +* void foo() +* { +* int i; +* +* for(i = 0; i < 0xffff; i++) +* .... +* } +* +* Error handling - a SafeInt class will throw exceptions if something +* objectionable happens. The exceptions are SafeIntException classes, +* which contain an enum as a code. +* +* Typical usage might be: +* +* bool foo() +* { +* SafeInt s; //note that s == 0 unless set +* +* try{ +* s *= 23; +* .... +* } +* catch(SafeIntException err) +* { +* //handle errors here +* } +* } +* +* SafeInt accepts an error policy as an optional template parameter. +* We provide two error policy along with SafeInt: SafeIntErrorPolicy_SafeIntException, which +* throws SafeIntException in case of error, and SafeIntErrorPolicy_InvalidParameter, which +* calls _invalid_parameter to terminate the program. +* +* You can replace the error policy class with any class you like. This is accomplished by: +* 1) Create a class that has the following interface: +* +* struct YourSafeIntErrorPolicy +* { +* static __declspec(noreturn) void __stdcall SafeIntOnOverflow() +* { +* throw YourException( YourSafeIntArithmeticOverflowError ); +* // or do something else which will terminate the program +* } +* +* static __declspec(noreturn) void __stdcall SafeIntOnDivZero() +* { +* throw YourException( YourSafeIntDivideByZeroError ); +* // or do something else which will terminate the program +* } +* }; +* +* Note that you don't have to throw C++ exceptions, you can throw Win32 exceptions, or do +* anything you like, just don't return from the call back into the code. +* +* 2) Either explicitly declare SafeInts like so: +* SafeInt< int, YourSafeIntErrorPolicy > si; +* or, before including SafeInt: +* #define _SAFEINT_DEFAULT_ERROR_POLICY ::YourSafeIntErrorPolicy +* +* Performance: +* +* Due to the highly nested nature of this class, you can expect relatively poor +* performance in unoptimized code. In tests of optimized code vs. correct inline checks +* in native code, this class has been found to take approximately 8% more CPU time (this varies), +* most of which is due to exception handling. +* +* Binary Operators: +* +* All of the binary operators have certain assumptions built into the class design. +* This is to ensure correctness. Notes on each class of operator follow: +* +* Arithmetic Operators (*,/,+,-,%) +* There are three possible variants: +* SafeInt< T, E > op SafeInt< T, E > +* SafeInt< T, E > op U +* U op SafeInt< T, E > +* +* The SafeInt< T, E > op SafeInt< U, E > variant is explicitly not supported, and if you try to do +* this the compiler with throw the following error: +* +* error C2593: 'operator *' is ambiguous +* +* This is because the arithmetic operators are required to return a SafeInt of some type. +* The compiler cannot know whether you'd prefer to get a type T or a type U returned. If +* you need to do this, you need to extract the value contained within one of the two using +* the casting operator. For example: +* +* SafeInt< T, E > t, result; +* SafeInt< U, E > u; +* +* result = t * (U)u; +* +* Comparison Operators: +* +* Because each of these operators return type bool, mixing SafeInts of differing types is +* allowed. +* +* Shift Operators: +* +* Shift operators always return the type on the left hand side of the operator. Mixed type +* operations are allowed because the return type is always known. +* +* Boolean Operators: +* +* Like comparison operators, these overloads always return type bool, and mixed-type SafeInts +* are allowed. Additionally, specific overloads exist for type bool on both sides of the +* operator. +* +* Binary Operators: +* +* Mixed-type operations are discouraged, however some provision has been made in order to +* enable things like: +* +* SafeInt c = 2; +* +* if(c & 0x02) +* ... +* +* The "0x02" is actually an int, and it needs to work. +* In the case of binary operations on integers smaller than 32-bit, or of mixed type, corner +* cases do exist where you could get unexpected results. In any case where SafeInt returns a different +* result than the underlying operator, it will call _ASSERTE(). You should examine your code and cast things +* properly so that you are not programming with side effects. +* +* Comparison Operators and ANSI Conversions: +* +* The comparison operator behavior in this class varies from the ANSI definition. +* As an example, consider the following: +* +* unsigned int l = 0xffffffff; +* char c = -1; +* +* if(c == l) +* printf("Why is -1 equal to 4 billion???\n"); +* +* The problem here is that c gets cast to an int, now has a value of 0xffffffff, and then gets +* cast again to an unsigned int, losing the true value. This behavior is despite the fact that +* an __int64 exists, and the following code will yield a different (and intuitively correct) +* answer: +* +* if((__int64)c == (__int64)l)) +* printf("Why is -1 equal to 4 billion???\n"); +* else +* printf("Why doesn't the compiler upcast to 64-bits when needed?\n"); +* +* Note that combinations with smaller integers won't display the problem - if you +* changed "unsigned int" above to "unsigned short", you'd get the right answer. +* +* If you prefer to retain the ANSI standard behavior insert, before including safeint.h: +* +* #define _SAFEINT_ANSI_CONVERSIONS 1 +* +* into your source. Behavior differences occur in the following cases: +* 8, 16, and 32-bit signed int, unsigned 32-bit int +* any signed int, unsigned 64-bit int +* Note - the signed int must be negative to show the problem +* +****/ + +#pragma once + +#if !defined(RC_INVOKED) + +#include +#include + +// Disable warnings hit under /Wall: +// C4514: unreferenced inline function has been removed (/Wall) +// C4710: function not inlined (/Wall) +#pragma warning(push) +#pragma warning(disable: 4514) +#pragma warning(disable: 4710) + +#if !defined (_SAFEINT_DEFAULT_ERROR_POLICY) +#define _SAFEINT_DEFAULT_ERROR_POLICY SafeIntErrorPolicy_SafeIntException +#endif /* !defined (_SAFEINT_DEFAULT_ERROR_POLICY) */ + +#if !defined (_SAFEINT_SHIFT_ASSERT) +#define _SAFEINT_SHIFT_ASSERT(x) _ASSERTE(x) +#endif /* !defined (_SAFEINT_SHIFT_ASSERT) */ + +#if !defined (_SAFEINT_BINARY_ASSERT) +#define _SAFEINT_BINARY_ASSERT(x) _ASSERTE(x) +#endif /* !defined (_SAFEINT_BINARY_ASSERT) */ + +#if !defined (_SAFEINT_EXCEPTION_ASSERT) +#define _SAFEINT_EXCEPTION_ASSERT() +#endif /* !defined (_SAFEINT_EXCEPTION_ASSERT) */ + +// by default, SafeInt will accept negation of an unsigned int; +// if you wish to disable it or assert, you can define the following +// macro to be a static assert or a runtime assert +#if !defined (_SAFEINT_UNSIGNED_NEGATION_BEHAVIOR) +#define _SAFEINT_UNSIGNED_NEGATION_BEHAVIOR() +#endif /* !defined (_SAFEINT_UNSIGNED_NEGATION_BEHAVIOR) */ + +// See above "Comparison Operators and ANSI Conversions" for an explanation +// of _SAFEINT_USE_ANSI_CONVERSIONS +#if !defined (_SAFEINT_USE_ANSI_CONVERSIONS) +#define _SAFEINT_USE_ANSI_CONVERSIONS 0 +#endif /* !defined (_SAFEINT_USE_ANSI_CONVERSIONS) */ + +#pragma pack(push, _CRT_PACKING) + +namespace msl +{ + +namespace utilities +{ + +enum SafeIntError +{ + SafeIntNoError = 0, + SafeIntArithmeticOverflow, + SafeIntDivideByZero +}; + +} // namespace utilities + +} // namespace msl + +#include "safeint_internal.h" + +namespace msl +{ + +namespace utilities +{ + +class SafeIntException +{ +public: + SafeIntException() { m_code = SafeIntNoError; } + SafeIntException( SafeIntError code ) + { + m_code = code; + } + SafeIntError m_code; +}; + +struct SafeIntErrorPolicy_SafeIntException +{ + static __declspec(noreturn) void SafeIntOnOverflow() + { + _SAFEINT_EXCEPTION_ASSERT(); + throw SafeIntException( SafeIntArithmeticOverflow ); + } + + static __declspec(noreturn) void SafeIntOnDivZero() + { + _SAFEINT_EXCEPTION_ASSERT(); + throw SafeIntException( SafeIntDivideByZero ); + } +}; + +struct SafeIntErrorPolicy_InvalidParameter +{ + static __declspec(noreturn) void SafeIntOnOverflow() + { + _SAFEINT_EXCEPTION_ASSERT(); + _CRT_SECURE_INVALID_PARAMETER("SafeInt Arithmetic Overflow"); + } + + static __declspec(noreturn) void SafeIntOnDivZero() + { + _SAFEINT_EXCEPTION_ASSERT(); + _CRT_SECURE_INVALID_PARAMETER("SafeInt Divide By Zero"); + } +}; + +// Free-standing functions that can be used where you only need to check one operation +// non-class helper function so that you can check for a cast's validity +// and handle errors how you like + +template < typename T, typename U > +inline bool SafeCast( const T From, U& To ) throw() +{ + return (details::SafeCastHelper< U, T, + details::SafeIntErrorPolicy_NoThrow >::Cast( From, To ) == SafeIntNoError); +} + +template < typename T, typename U > +inline bool SafeEquals( const T t, const U u ) throw() +{ + return details::EqualityTest< T, U >::IsEquals( t, u ); +} + +template < typename T, typename U > +inline bool SafeNotEquals( const T t, const U u ) throw() +{ + return !details::EqualityTest< T, U >::IsEquals( t, u ); +} + +template < typename T, typename U > +inline bool SafeGreaterThan( const T t, const U u ) throw() +{ + return details::GreaterThanTest< T, U >::GreaterThan( t, u ); +} + +template < typename T, typename U > +inline bool SafeGreaterThanEquals( const T t, const U u ) throw() +{ + return !details::GreaterThanTest< U, T >::GreaterThan( u, t ); +} + +template < typename T, typename U > +inline bool SafeLessThan( const T t, const U u ) throw() +{ + return details::GreaterThanTest< U, T >::GreaterThan( u, t ); +} + +template < typename T, typename U > +inline bool SafeLessThanEquals( const T t, const U u ) throw() +{ + return !details::GreaterThanTest< T, U >::GreaterThan( t, u ); +} + +template < typename T, typename U > +inline bool SafeModulus( const T& t, const U& u, T& result ) throw() +{ + return ( details::ModulusHelper< T, U, details::SafeIntErrorPolicy_NoThrow >::Modulus( t, u, result ) == SafeIntNoError ); +} + +template < typename T, typename U > +inline bool SafeMultiply( T t, U u, T& result ) throw() +{ + return ( details::MultiplicationHelper< T, U, + details::SafeIntErrorPolicy_NoThrow >::Multiply( t, u, result ) == SafeIntNoError ); +} + +template < typename T, typename U > +inline bool SafeDivide( T t, U u, T& result ) throw() +{ + return ( details::DivisionHelper< T, U, + details::SafeIntErrorPolicy_NoThrow >::Divide( t, u, result ) == SafeIntNoError ); +} + +template < typename T, typename U > +inline bool SafeAdd( T t, U u, T& result ) throw() +{ + return ( details::AdditionHelper< T, U, + details::SafeIntErrorPolicy_NoThrow >::Addition( t, u, result ) == SafeIntNoError ); +} + +template < typename T, typename U > +inline bool SafeSubtract( T t, U u, T& result ) throw() +{ + return ( details::SubtractionHelper< T, U, + details::SafeIntErrorPolicy_NoThrow >::Subtract( t, u, result ) == SafeIntNoError ); +} + +// SafeInt class +template < typename T, typename E = _SAFEINT_DEFAULT_ERROR_POLICY > +class SafeInt +{ +public: + SafeInt() throw() + { + static_assert( details::NumericType< T >::isInt , "SafeInt: T needs to be an integer type" ); + m_int = 0; + } + + // Having a constructor for every type of int + // avoids having the compiler evade our checks when doing implicit casts - + // e.g., SafeInt s = 0x7fffffff; + SafeInt( const T& i ) throw() + { + static_assert( details::NumericType< T >::isInt , "SafeInt: T needs to be an integer type" ); + //always safe + m_int = i; + } + + // provide explicit boolean converter + SafeInt( bool b ) throw() + { + static_assert( details::NumericType< T >::isInt , "SafeInt: T needs to be an integer type" ); + m_int = b ? 1 : 0; + } + + template < typename U > + SafeInt(const SafeInt< U, E >& u) + { + static_assert( details::NumericType< T >::isInt , "SafeInt: T needs to be an integer type" ); + *this = SafeInt< T, E >( (U)u ); + } + + template < typename U > + SafeInt( const U& i ) + { + static_assert( details::NumericType< T >::isInt , "SafeInt: T needs to be an integer type" ); + // SafeCast will throw exceptions if i won't fit in type T + details::SafeCastHelper< T, U, E >::Cast( i, m_int ); + } + + // now start overloading operators + // assignment operator + // constructors exist for all int types and will ensure safety + + template < typename U > + SafeInt< T, E >& operator =( const U& rhs ) + { + // use constructor to test size + // constructor is optimized to do minimal checking based + // on whether T can contain U + // note - do not change this + *this = SafeInt< T, E >( rhs ); + return *this; + } + + SafeInt< T, E >& operator =( const T& rhs ) throw() + { + m_int = rhs; + return *this; + } + + template < typename U > + SafeInt< T, E >& operator =( const SafeInt< U, E >& rhs ) + { + details::SafeCastHelper< T, U, E >::Cast( rhs.Ref(), m_int ); + return *this; + } + + SafeInt< T, E >& operator =( const SafeInt< T, E >& rhs ) throw() + { + m_int = rhs.m_int; + return *this; + } + + // Casting operators + + operator bool() const throw() + { + return !!m_int; + } + + operator char() const + { + char val; + details::SafeCastHelper< char, T, E >::Cast( m_int, val ); + return val; + } + + operator signed char() const + { + signed char val; + details::SafeCastHelper< signed char, T, E >::Cast( m_int, val ); + return val; + } + + operator unsigned char() const + { + unsigned char val; + details::SafeCastHelper< unsigned char, T, E >::Cast( m_int, val ); + return val; + } + + operator __int16() const + { + __int16 val; + details::SafeCastHelper< __int16, T, E >::Cast( m_int, val ); + return val; + } + + operator unsigned __int16() const + { + unsigned __int16 val; + details::SafeCastHelper< unsigned __int16, T, E >::Cast( m_int, val ); + return val; + } + + operator __int32() const + { + __int32 val; + details::SafeCastHelper< __int32, T, E >::Cast( m_int, val ); + return val; + } + + operator unsigned __int32() const + { + unsigned __int32 val; + details::SafeCastHelper< unsigned __int32, T, E >::Cast( m_int, val ); + return val; + } + + // The compiler knows that int == __int32 + // but not that long == __int32 + operator long() const + { + long val; + details::SafeCastHelper< long, T, E >::Cast( m_int, val ); + return val; + } + + operator unsigned long() const + { + unsigned long val; + details::SafeCastHelper< unsigned long, T, E >::Cast( m_int, val ); + return val; + } + + operator __int64() const + { + __int64 val; + details::SafeCastHelper< __int64, T, E >::Cast( m_int, val ); + return val; + } + + operator unsigned __int64() const + { + unsigned __int64 val; + details::SafeCastHelper< unsigned __int64, T, E >::Cast( m_int, val ); + return val; + } + +#ifdef _NATIVE_WCHAR_T_DEFINED + operator wchar_t() const + { + unsigned __int16 val; + details::SafeCastHelper< unsigned __int16, T, E >::Cast( m_int, val ); + return val; + } +#endif /* _NATIVE_WCHAR_T_DEFINED */ + + // If you need a pointer to the data + // this could be dangerous, but allows you to correctly pass + // instances of this class to APIs that take a pointer to an integer + // also see overloaded address-of operator below + T* Ptr() throw() { return &m_int; } + const T* Ptr() const throw() { return &m_int; } + const T& Ref() const throw() { return m_int; } + + // Unary operators + bool operator !() const throw() { return (!m_int) ? true : false; } + + // operator + (unary) + // note - normally, the '+' and '-' operators will upcast to a signed int + // for T < 32 bits. This class changes behavior to preserve type + const SafeInt< T, E >& operator +() const throw() { return *this; }; + + //unary - + SafeInt< T, E > operator -() const + { + // Note - unsigned still performs the bitwise manipulation + // will warn at level 2 or higher if the value is 32-bit or larger + T tmp; + details::NegationHelper< T, E, details::IntTraits< T >::isSigned >::Negative( m_int, tmp ); + return SafeInt< T, E >( tmp ); + } + + // prefix increment operator + SafeInt< T, E >& operator ++() + { + if( m_int != details::IntTraits< T >::maxInt ) + { + ++m_int; + return *this; + } + E::SafeIntOnOverflow(); + } + + // prefix decrement operator + SafeInt< T, E >& operator --() + { + if( m_int != details::IntTraits< T >::minInt ) + { + --m_int; + return *this; + } + E::SafeIntOnOverflow(); + } + + // note that postfix operators have inherently worse perf + // characteristics + + // postfix increment operator + SafeInt< T, E > operator ++( int ) // dummy arg to comply with spec + { + if( m_int != details::IntTraits< T >::maxInt ) + { + SafeInt< T, E > tmp( m_int ); + + m_int++; + return tmp; + } + E::SafeIntOnOverflow(); + } + + // postfix decrement operator + SafeInt< T, E > operator --( int ) // dummy arg to comply with spec + { + if( m_int != details::IntTraits< T >::minInt ) + { + SafeInt< T, E > tmp( m_int ); + m_int--; + return tmp; + } + E::SafeIntOnOverflow(); + } + + // One's complement + // Note - this operator will normally change size to an int + // cast in return improves perf and maintains type + SafeInt< T, E > operator ~() const throw() { return SafeInt< T, E >( (T)~m_int ); } + + // Binary operators + // + // arithmetic binary operators + // % modulus + // * multiplication + // / division + // + addition + // - subtraction + // + // For each of the arithmetic operators, you will need to + // use them as follows: + // + // SafeInt c = 2; + // SafeInt i = 3; + // + // SafeInt i2 = i op (char)c; + // OR + // SafeInt i2 = (int)i op c; + // + // The base problem is that if the lhs and rhs inputs are different SafeInt types + // it is not possible in this implementation to determine what type of SafeInt + // should be returned. You have to let the class know which of the two inputs + // need to be the return type by forcing the other value to the base integer type. + // + // Note - as per feedback from Scott Meyers, I'm exploring how to get around this. + // 3.0 update - I'm still thinking about this. It can be done with template metaprogramming, + // but it is tricky, and there's a perf vs. correctness tradeoff where the right answer + // is situational. + // + // The case of: + // + // SafeInt< T, E > i, j, k; + // i = j op k; + // + // works just fine and no unboxing is needed because the return type is not ambiguous. + + // Modulus + // Modulus has some convenient properties - + // first, the magnitude of the return can never be + // larger than the lhs operand, and it must be the same sign + // as well. It does, however, suffer from the same promotion + // problems as comparisons, division and other operations + template < typename U > + SafeInt< T, E > operator %( U rhs ) const + { + T result; + details::ModulusHelper< T, U, E >::Modulus( m_int, rhs, result ); + return SafeInt< T, E >( result ); + } + + SafeInt< T, E > operator %( SafeInt< T, E > rhs ) const + { + T result; + details::ModulusHelper< T, T, E >::Modulus( m_int, rhs, result ); + return SafeInt< T, E >( result ); + } + + // Modulus assignment + template < typename U > + SafeInt< T, E >& operator %=( U rhs ) + { + details::ModulusHelper< T, U, E >::Modulus( m_int, rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator %=( SafeInt< U, E > rhs ) + { + details::ModulusHelper< T, U, E >::Modulus( m_int, (U)rhs, m_int ); + return *this; + } + + // Multiplication + template < typename U > + SafeInt< T, E > operator *( U rhs ) const + { + T ret( 0 ); + details::MultiplicationHelper< T, U, E >::Multiply( m_int, rhs, ret ); + return SafeInt< T, E >( ret ); + } + + SafeInt< T, E > operator *( SafeInt< T, E > rhs ) const + { + T ret( 0 ); + details::MultiplicationHelper< T, T, E >::Multiply( m_int, (T)rhs, ret ); + return SafeInt< T, E >( ret ); + } + + // Multiplication assignment + SafeInt< T, E >& operator *=( SafeInt< T, E > rhs ) + { + details::MultiplicationHelper< T, T, E >::Multiply( m_int, (T)rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator *=( U rhs ) + { + details::MultiplicationHelper< T, U, E >::Multiply( m_int, rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator *=( SafeInt< U, E > rhs ) + { + details::MultiplicationHelper< T, U, E >::Multiply( m_int, rhs.Ref(), m_int ); + return *this; + } + + // Division + template < typename U > + SafeInt< T, E > operator /( U rhs ) const + { + T ret( 0 ); + details::DivisionHelper< T, U, E >::Divide( m_int, rhs, ret ); + return SafeInt< T, E >( ret ); + } + + SafeInt< T, E > operator /( SafeInt< T, E > rhs ) const + { + T ret( 0 ); + details::DivisionHelper< T, T, E >::Divide( m_int, (T)rhs, ret ); + return SafeInt< T, E >( ret ); + } + + // Division assignment + SafeInt< T, E >& operator /=( SafeInt< T, E > i ) + { + details::DivisionHelper< T, T, E >::Divide( m_int, (T)i, m_int ); + return *this; + } + + template < typename U > SafeInt< T, E >& operator /=( U i ) + { + details::DivisionHelper< T, U, E >::Divide( m_int, i, m_int ); + return *this; + } + + template < typename U > SafeInt< T, E >& operator /=( SafeInt< U, E > i ) + { + details::DivisionHelper< T, U, E >::Divide( m_int, (U)i, m_int ); + return *this; + } + + // For addition and subtraction + + // Addition + SafeInt< T, E > operator +( SafeInt< T, E > rhs ) const + { + T ret( 0 ); + details::AdditionHelper< T, T, E >::Addition( m_int, (T)rhs, ret ); + return SafeInt< T, E >( ret ); + } + + template < typename U > + SafeInt< T, E > operator +( U rhs ) const + { + T ret( 0 ); + details::AdditionHelper< T, U, E >::Addition( m_int, rhs, ret ); + return SafeInt< T, E >( ret ); + } + + //addition assignment + SafeInt< T, E >& operator +=( SafeInt< T, E > rhs ) + { + details::AdditionHelper< T, T, E >::Addition( m_int, (T)rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator +=( U rhs ) + { + details::AdditionHelper< T, U, E >::Addition( m_int, rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator +=( SafeInt< U, E > rhs ) + { + details::AdditionHelper< T, U, E >::Addition( m_int, (U)rhs, m_int ); + return *this; + } + + // Subtraction + template < typename U > + SafeInt< T, E > operator -( U rhs ) const + { + T ret( 0 ); + details::SubtractionHelper< T, U, E >::Subtract( m_int, rhs, ret ); + return SafeInt< T, E >( ret ); + } + + SafeInt< T, E > operator -(SafeInt< T, E > rhs) const + { + T ret( 0 ); + details::SubtractionHelper< T, T, E >::Subtract( m_int, (T)rhs, ret ); + return SafeInt< T, E >( ret ); + } + + // Subtraction assignment + SafeInt< T, E >& operator -=( SafeInt< T, E > rhs ) + { + details::SubtractionHelper< T, T, E >::Subtract( m_int, (T)rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator -=( U rhs ) + { + details::SubtractionHelper< T, U, E >::Subtract( m_int, rhs, m_int ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator -=( SafeInt< U, E > rhs ) + { + details::SubtractionHelper< T, U, E >::Subtract( m_int, (U)rhs, m_int ); + return *this; + } + + // Comparison operators + // Additional overloads defined outside the class + // to allow for cases where the SafeInt is the rhs value + + // Less than + template < typename U > + bool operator <( U rhs ) const throw() + { + return details::GreaterThanTest< U, T >::GreaterThan( rhs, m_int ); + } + + bool operator <( SafeInt< T, E > rhs ) const throw() + { + return m_int < (T)rhs; + } + + // Greater than or eq. + template < typename U > + bool operator >=( U rhs ) const throw() + { + return !details::GreaterThanTest< U, T >::GreaterThan( rhs, m_int ); + } + + bool operator >=( SafeInt< T, E > rhs ) const throw() + { + return m_int >= (T)rhs; + } + + // Greater than + template < typename U > + bool operator >( U rhs ) const throw() + { + return details::GreaterThanTest< T, U >::GreaterThan( m_int, rhs ); + } + + bool operator >( SafeInt< T, E > rhs ) const throw() + { + return m_int > (T)rhs; + } + + // Less than or eq. + template < typename U > + bool operator <=( U rhs ) const throw() + { + return !details::GreaterThanTest< T, U >::GreaterThan( m_int, rhs ); + } + + bool operator <=( SafeInt< T, E > rhs ) const throw() + { + return m_int <= (T)rhs; + } + + // Equality + template < typename U > + bool operator ==( U rhs ) const throw() + { + return details::EqualityTest< T, U >::IsEquals( m_int, rhs ); + } + + // Need an explicit override for type bool + bool operator ==( bool rhs ) const throw() + { + return ( m_int == 0 ? false : true ) == rhs; + } + + bool operator ==( SafeInt< T, E > rhs ) const throw() { return m_int == (T)rhs; } + + // != operators + template < typename U > + bool operator !=( U rhs ) const throw() + { + return !details::EqualityTest< T, U >::IsEquals( m_int, rhs ); + } + + bool operator !=( bool b ) const throw() + { + return ( m_int == 0 ? false : true ) != b; + } + + bool operator !=( SafeInt< T, E > rhs ) const throw() { return m_int != (T)rhs; } + + // Shift operators + // Note - shift operators ALWAYS return the same type as the lhs + // specific version for SafeInt< T, E > not needed - + // code path is exactly the same as for SafeInt< U, E > as rhs + + // Left shift + // Also, shifting > bitcount is undefined - trap in debug (check _SAFEINT_SHIFT_ASSERT) + + template < typename U > + SafeInt< T, E > operator <<( U bits ) const throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( bits < (int)details::IntTraits< T >::bitCount ); + + return SafeInt< T, E >( (T)( m_int << bits ) ); + } + + template < typename U > + SafeInt< T, E > operator <<( SafeInt< U, E > bits ) const throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || (U)bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( (U)bits < (int)details::IntTraits< T >::bitCount ); + + return SafeInt< T, E >( (T)( m_int << (U)bits ) ); + } + + // Left shift assignment + + template < typename U > + SafeInt< T, E >& operator <<=( U bits ) throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( bits < (int)details::IntTraits< T >::bitCount ); + + m_int <<= bits; + return *this; + } + + template < typename U > + SafeInt< T, E >& operator <<=( SafeInt< U, E > bits ) throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || (U)bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( (U)bits < (int)details::IntTraits< T >::bitCount ); + + m_int <<= (U)bits; + return *this; + } + + // Right shift + template < typename U > + SafeInt< T, E > operator >>( U bits ) const throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( bits < (int)details::IntTraits< T >::bitCount ); + + return SafeInt< T, E >( (T)( m_int >> bits ) ); + } + + template < typename U > + SafeInt< T, E > operator >>( SafeInt< U, E > bits ) const throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || (U)bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( bits < (int)details::IntTraits< T >::bitCount ); + + return SafeInt< T, E >( (T)(m_int >> (U)bits) ); + } + + // Right shift assignment + template < typename U > + SafeInt< T, E >& operator >>=( U bits ) throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( bits < (int)details::IntTraits< T >::bitCount ); + + m_int >>= bits; + return *this; + } + + template < typename U > + SafeInt< T, E >& operator >>=( SafeInt< U, E > bits ) throw() + { + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< U >::isSigned || (U)bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( (U)bits < (int)details::IntTraits< T >::bitCount ); + + m_int >>= (U)bits; + return *this; + } + + // Bitwise operators + // This only makes sense if we're dealing with the same type and size + // demand a type T, or something that fits into a type T + + // Bitwise & + SafeInt< T, E > operator &( SafeInt< T, E > rhs ) const throw() + { + return SafeInt< T, E >( m_int & (T)rhs ); + } + + template < typename U > + SafeInt< T, E > operator &( U rhs ) const throw() + { + // we want to avoid setting bits by surprise + // consider the case of lhs = int, value = 0xffffffff + // rhs = char, value = 0xff + // + // programmer intent is to get only the lower 8 bits + // normal behavior is to upcast both sides to an int + // which then sign extends rhs, setting all the bits + + // If you land in the assert, this is because the bitwise operator + // was causing unexpected behavior. Fix is to properly cast your inputs + // so that it works like you meant, not unexpectedly + + return SafeInt< T, E >( details::BinaryAndHelper< T, U >::And( m_int, rhs ) ); + } + + // Bitwise & assignment + SafeInt< T, E >& operator &=( SafeInt< T, E > rhs ) throw() + { + m_int &= (T)rhs; + return *this; + } + + template < typename U > + SafeInt< T, E >& operator &=( U rhs ) throw() + { + m_int = details::BinaryAndHelper< T, U >::And( m_int, rhs ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator &=( SafeInt< U, E > rhs ) throw() + { + m_int = details::BinaryAndHelper< T, U >::And( m_int, (U)rhs ); + return *this; + } + + // XOR + SafeInt< T, E > operator ^( SafeInt< T, E > rhs ) const throw() + { + return SafeInt< T, E >( (T)( m_int ^ (T)rhs ) ); + } + + template < typename U > + SafeInt< T, E > operator ^( U rhs ) const throw() + { + // If you land in the assert, this is because the bitwise operator + // was causing unexpected behavior. Fix is to properly cast your inputs + // so that it works like you meant, not unexpectedly + + return SafeInt< T, E >( details::BinaryXorHelper< T, U >::Xor( m_int, rhs ) ); + } + + // XOR assignment + SafeInt< T, E >& operator ^=( SafeInt< T, E > rhs ) throw() + { + m_int ^= (T)rhs; + return *this; + } + + template < typename U > + SafeInt< T, E >& operator ^=( U rhs ) throw() + { + m_int = details::BinaryXorHelper< T, U >::Xor( m_int, rhs ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator ^=( SafeInt< U, E > rhs ) throw() + { + m_int = details::BinaryXorHelper< T, U >::Xor( m_int, (U)rhs ); + return *this; + } + + // bitwise OR + SafeInt< T, E > operator |( SafeInt< T, E > rhs ) const throw() + { + return SafeInt< T, E >( (T)( m_int | (T)rhs ) ); + } + + template < typename U > + SafeInt< T, E > operator |( U rhs ) const throw() + { + return SafeInt< T, E >( details::BinaryOrHelper< T, U >::Or( m_int, rhs ) ); + } + + // bitwise OR assignment + SafeInt< T, E >& operator |=( SafeInt< T, E > rhs ) throw() + { + m_int |= (T)rhs; + return *this; + } + + template < typename U > + SafeInt< T, E >& operator |=( U rhs ) throw() + { + m_int = details::BinaryOrHelper< T, U >::Or( m_int, rhs ); + return *this; + } + + template < typename U > + SafeInt< T, E >& operator |=( SafeInt< U, E > rhs ) throw() + { + m_int = details::BinaryOrHelper< T, U >::Or( m_int, (U)rhs ); + return *this; + } + + // Miscellaneous helper functions + SafeInt< T, E > Min( SafeInt< T, E > test, SafeInt< T, E > floor = SafeInt< T, E >( details::IntTraits< T >::minInt ) ) const throw() + { + T tmp = test < m_int ? test : m_int; + return tmp < floor ? floor : tmp; + } + + SafeInt< T, E > Max( SafeInt< T, E > test, SafeInt< T, E > upper = SafeInt< T, E >( details::IntTraits< T >::maxInt ) ) const throw() + { + T tmp = test > m_int ? test : m_int; + return tmp > upper ? upper : tmp; + } + + void Swap( SafeInt< T, E >& with ) throw() + { + T temp( m_int ); + m_int = with.m_int; + with.m_int = temp; + } + + template < int bits > + const SafeInt< T, E >& Align() + { + // Zero is always aligned + if( m_int == 0 ) + return *this; + + // We don't support aligning negative numbers at this time + // Can't align unsigned numbers on bitCount (e.g., 8 bits = 256, unsigned char max = 255) + // or signed numbers on bitCount-1 (e.g., 7 bits = 128, signed char max = 127). + // Also makes no sense to try to align on negative or no bits. + + _SAFEINT_SHIFT_ASSERT( ( ( details::IntTraits::isSigned && bits < (int)details::IntTraits< T >::bitCount - 1 ) + || ( !details::IntTraits::isSigned && bits < (int)details::IntTraits< T >::bitCount ) ) && + bits >= 0 && ( !details::IntTraits::isSigned || m_int > 0 ) ); + + const T AlignValue = ( (T)1 << bits ) - 1; + + m_int = ( m_int + AlignValue ) & ~AlignValue; + + if( m_int <= 0 ) + E::SafeIntOnOverflow(); + + return *this; + } + + // Commonly needed alignments: + const SafeInt< T, E >& Align2() { return Align< 1 >(); } + const SafeInt< T, E >& Align4() { return Align< 2 >(); } + const SafeInt< T, E >& Align8() { return Align< 3 >(); } + const SafeInt< T, E >& Align16() { return Align< 4 >(); } + const SafeInt< T, E >& Align32() { return Align< 5 >(); } + const SafeInt< T, E >& Align64() { return Align< 6 >(); } + +private: + T m_int; +}; + +// Externally defined functions for the case of U op SafeInt< T, E > +template < typename T, typename U, typename E > +bool operator <( U lhs, SafeInt< T, E > rhs ) throw() +{ + return details::GreaterThanTest< T, U >::GreaterThan( (T)rhs, lhs ); +} + +template < typename T, typename U, typename E > +bool operator <( SafeInt< U, E > lhs, SafeInt< T, E > rhs ) throw() +{ + return details::GreaterThanTest< T, U >::GreaterThan( (T)rhs, (U)lhs ); +} + +// Greater than +template < typename T, typename U, typename E > +bool operator >( U lhs, SafeInt< T, E > rhs ) throw() +{ + return details::GreaterThanTest< U, T >::GreaterThan( lhs, (T)rhs ); +} + +template < typename T, typename U, typename E > +bool operator >( SafeInt< T, E > lhs, SafeInt< U, E > rhs ) throw() +{ + return details::GreaterThanTest< T, U >::GreaterThan( (T)lhs, (U)rhs ); +} + +// Greater than or equal +template < typename T, typename U, typename E > +bool operator >=( U lhs, SafeInt< T, E > rhs ) throw() +{ + return !details::GreaterThanTest< T, U >::GreaterThan( (T)rhs, lhs ); +} + +template < typename T, typename U, typename E > +bool operator >=( SafeInt< T, E > lhs, SafeInt< U, E > rhs ) throw() +{ + return !details::GreaterThanTest< U, T >::GreaterThan( (U)rhs, (T)lhs ); +} + +// Less than or equal +template < typename T, typename U, typename E > +bool operator <=( U lhs, SafeInt< T, E > rhs ) throw() +{ + return !details::GreaterThanTest< U, T >::GreaterThan( lhs, (T)rhs ); +} + +template < typename T, typename U, typename E > +bool operator <=( SafeInt< T, E > lhs, SafeInt< U, E > rhs ) throw() +{ + return !details::GreaterThanTest< T, U >::GreaterThan( (T)lhs, (U)rhs ); +} + +// equality +// explicit overload for bool +template < typename T, typename E > +bool operator ==( bool lhs, SafeInt< T, E > rhs ) throw() +{ + return lhs == ( (T)rhs == 0 ? false : true ); +} + +template < typename T, typename U, typename E > +bool operator ==( U lhs, SafeInt< T, E > rhs ) throw() +{ + return details::EqualityTest< T, U >::IsEquals((T)rhs, lhs); +} + +template < typename T, typename U, typename E > +bool operator ==( SafeInt< T, E > lhs, SafeInt< U, E > rhs ) throw() +{ + return details::EqualityTest< T, U >::IsEquals( (T)lhs, (U)rhs ); +} + +//not equals +template < typename T, typename U, typename E > +bool operator !=( U lhs, SafeInt< T, E > rhs ) throw() +{ + return !details::EqualityTest< T, U >::IsEquals( rhs, lhs ); +} + +template < typename T, typename E > +bool operator !=( bool lhs, SafeInt< T, E > rhs ) throw() +{ + return ( (T)rhs == 0 ? false : true ) != lhs; +} + +template < typename T, typename U, typename E > +bool operator !=( SafeInt< T, E > lhs, SafeInt< U, E > rhs ) throw() +{ + return !details::EqualityTest< T, U >::IsEquals( lhs, rhs ); +} + +// Modulus +template < typename T, typename U, typename E > +SafeInt< T, E > operator %( U lhs, SafeInt< T, E > rhs ) +{ + // Value of return depends on sign of lhs + // This one may not be safe - bounds check in constructor + // if lhs is negative and rhs is unsigned, this will throw an exception. + + // Fast-track the simple case + // same size and same sign +#pragma warning(suppress:4127 6326) + if( sizeof(T) == sizeof(U) && details::IntTraits< T >::isSigned == details::IntTraits< U >::isSigned ) + { + if( rhs != 0 ) + { + if( details::IntTraits< T >::isSigned && (T)rhs == -1 ) + return 0; + + return SafeInt< T, E >( (T)( lhs % (T)rhs ) ); + } + + E::SafeIntOnDivZero(); + } + + return SafeInt< T, E >( ( SafeInt< U, E >( lhs ) % (T)rhs ) ); +} + +// Multiplication +template < typename T, typename U, typename E > +SafeInt< T, E > operator *( U lhs, SafeInt< T, E > rhs ) +{ + T ret( 0 ); + details::MultiplicationHelper< T, U, E >::Multiply( (T)rhs, lhs, ret ); + return SafeInt< T, E >(ret); +} + +// Division +template < typename T, typename U, typename E > SafeInt< T, E > operator /( U lhs, SafeInt< T, E > rhs ) +{ +#pragma warning(push) +#pragma warning(disable: 4127 4146 4307 4310 6326) + // Corner case - has to be handled separately + if( details::DivisionMethod< U, T >::method == details::DivisionState_UnsignedSigned ) + { + if( (T)rhs > 0 ) + return SafeInt< T, E >( lhs/(T)rhs ); + + // Now rhs is either negative, or zero + if( (T)rhs != 0 ) + { + if( sizeof( U ) >= 4 && sizeof( T ) <= sizeof( U ) ) + { + // Problem case - normal casting behavior changes meaning + // flip rhs to positive + // any operator casts now do the right thing + U tmp; + if( sizeof(T) == 4 ) + tmp = lhs/(U)(unsigned __int32)( -(T)rhs ); + else + tmp = lhs/(U)( -(T)rhs ); + + if( tmp <= details::IntTraits< T >::maxInt ) + return SafeInt< T, E >( -( (T)tmp ) ); + + // Corner case + // Note - this warning happens because we're not using partial + // template specialization in this case. For any real cases where + // this block isn't optimized out, the warning won't be present. + if( tmp == (U)details::IntTraits< T >::maxInt + 1 ) + return SafeInt< T, E >( details::IntTraits< T >::minInt ); + + E::SafeIntOnOverflow(); + } + + return SafeInt< T, E >(lhs/(T)rhs); + } + + E::SafeIntOnDivZero(); + } // method == DivisionState_UnsignedSigned + + if( details::SafeIntCompare< T, U >::isBothSigned ) + { + if( lhs == details::IntTraits< U >::minInt && (T)rhs == -1 ) + { + // corner case of a corner case - lhs = min int, rhs = -1, + // but rhs is the return type, so in essence, we can return -lhs + // if rhs is a larger type than lhs + if( sizeof( U ) < sizeof( T ) ) + { + return SafeInt< T, E >( (T)( -(T)details::IntTraits< U >::minInt ) ); + } + + // If rhs is smaller or the same size int, then -minInt won't work + E::SafeIntOnOverflow(); + } + } + + // Otherwise normal logic works with addition of bounds check when casting from U->T + U ret; + details::DivisionHelper< U, T, E >::Divide( lhs, (T)rhs, ret ); + return SafeInt< T, E >( ret ); +#pragma warning(pop) +} + +// Addition +template < typename T, typename U, typename E > +SafeInt< T, E > operator +( U lhs, SafeInt< T, E > rhs ) +{ + T ret( 0 ); + details::AdditionHelper< T, U, E >::Addition( (T)rhs, lhs, ret ); + return SafeInt< T, E >( ret ); +} + +// Subtraction +template < typename T, typename U, typename E > +SafeInt< T, E > operator -( U lhs, SafeInt< T, E > rhs ) +{ + T ret( 0 ); + details::SubtractionHelper< U, T, E, details::SubtractionMethod2< U, T >::method >::Subtract( lhs, rhs.Ref(), ret ); + + return SafeInt< T, E >( ret ); +} + +// Overrides designed to deal with cases where a SafeInt is assigned out +// to a normal int - this at least makes the last operation safe +// += +template < typename T, typename U, typename E > +T& operator +=( T& lhs, SafeInt< U, E > rhs ) +{ + T ret( 0 ); + details::AdditionHelper< T, U, E >::Addition( lhs, (U)rhs, ret ); + lhs = ret; + return lhs; +} + +template < typename T, typename U, typename E > +T& operator -=( T& lhs, SafeInt< U, E > rhs ) +{ + T ret( 0 ); + details::SubtractionHelper< T, U, E >::Subtract( lhs, (U)rhs, ret ); + lhs = ret; + return lhs; +} + +template < typename T, typename U, typename E > +T& operator *=( T& lhs, SafeInt< U, E > rhs ) +{ + T ret( 0 ); + details::MultiplicationHelper< T, U, E >::Multiply( lhs, (U)rhs, ret ); + lhs = ret; + return lhs; +} + +template < typename T, typename U, typename E > +T& operator /=( T& lhs, SafeInt< U, E > rhs ) +{ + T ret( 0 ); + details::DivisionHelper< T, U, E >::Divide( lhs, (U)rhs, ret ); + lhs = ret; + return lhs; +} + +template < typename T, typename U, typename E > +T& operator %=( T& lhs, SafeInt< U, E > rhs ) +{ + T ret( 0 ); + details::ModulusHelper< T, U, E >::Modulus( lhs, (U)rhs, ret ); + lhs = ret; + return lhs; +} + +template < typename T, typename U, typename E > +T& operator &=( T& lhs, SafeInt< U, E > rhs ) throw() +{ + lhs = details::BinaryAndHelper< T, U >::And( lhs, (U)rhs ); + return lhs; +} + +template < typename T, typename U, typename E > +T& operator ^=( T& lhs, SafeInt< U, E > rhs ) throw() +{ + lhs = details::BinaryXorHelper< T, U >::Xor( lhs, (U)rhs ); + return lhs; +} + +template < typename T, typename U, typename E > +T& operator |=( T& lhs, SafeInt< U, E > rhs ) throw() +{ + lhs = details::BinaryOrHelper< T, U >::Or( lhs, (U)rhs ); + return lhs; +} + +template < typename T, typename U, typename E > +T& operator <<=( T& lhs, SafeInt< U, E > rhs ) throw() +{ + lhs = (T)( SafeInt< T, E >( lhs ) << (U)rhs ); + return lhs; +} + +template < typename T, typename U, typename E > +T& operator >>=( T& lhs, SafeInt< U, E > rhs ) throw() +{ + lhs = (T)( SafeInt< T, E >( lhs ) >> (U)rhs ); + return lhs; +} + +// Specific pointer overrides +// Note - this function makes no attempt to ensure +// that the resulting pointer is still in the buffer, only +// that no int overflows happened on the way to getting the new pointer +template < typename T, typename U, typename E > +T*& operator +=( T*& lhs, SafeInt< U, E > rhs ) +{ + // Cast the pointer to a number so we can do arithmetic + SafeInt< uintptr_t, E > ptr_val = reinterpret_cast< uintptr_t >( lhs ); + // Check first that rhs is valid for the type of ptrdiff_t + // and that multiplying by sizeof( T ) doesn't overflow a ptrdiff_t + // Next, we need to add 2 SafeInts of different types, so unbox the ptr_diff + // Finally, cast the number back to a pointer of the correct type + lhs = reinterpret_cast< T* >( (uintptr_t)( ptr_val + (ptrdiff_t)( SafeInt< ptrdiff_t, E >( rhs ) * sizeof( T ) ) ) ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator -=( T*& lhs, SafeInt< U, E > rhs ) +{ + // Cast the pointer to a number so we can do arithmetic + SafeInt< size_t, E > ptr_val = reinterpret_cast< uintptr_t >( lhs ); + // See above for comments + lhs = reinterpret_cast< T* >( (uintptr_t)( ptr_val - (ptrdiff_t)( SafeInt< ptrdiff_t, E >( rhs ) * sizeof( T ) ) ) ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator *=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator /=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator %=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator &=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator ^=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator |=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator <<=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +template < typename T, typename U, typename E > +T*& operator >>=( T* lhs, SafeInt< U, E >) +{ + static_assert( details::DependentFalse< T >::value, "SafeInt: This operator explicitly not supported" ); + return lhs; +} + +// Shift operators +// NOTE - shift operators always return the type of the lhs argument + +// Left shift +template < typename T, typename U, typename E > +SafeInt< U, E > operator <<( U lhs, SafeInt< T, E > bits ) throw() +{ + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< T >::isSigned || (T)bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( (T)bits < (int)details::IntTraits< U >::bitCount ); + + return SafeInt< U, E >( (U)( lhs << (T)bits ) ); +} + +// Right shift +template < typename T, typename U, typename E > +SafeInt< U, E > operator >>( U lhs, SafeInt< T, E > bits ) throw() +{ + _SAFEINT_SHIFT_ASSERT( !details::IntTraits< T >::isSigned || (T)bits >= 0 ); + _SAFEINT_SHIFT_ASSERT( (T)bits < (int)details::IntTraits< U >::bitCount ); + + return SafeInt< U, E >( (U)( lhs >> (T)bits ) ); +} + +// Bitwise operators +// This only makes sense if we're dealing with the same type and size +// demand a type T, or something that fits into a type T. + +// Bitwise & +template < typename T, typename U, typename E > +SafeInt< T, E > operator &( U lhs, SafeInt< T, E > rhs ) throw() +{ + return SafeInt< T, E >( details::BinaryAndHelper< T, U >::And( (T)rhs, lhs ) ); +} + +// Bitwise XOR +template < typename T, typename U, typename E > +SafeInt< T, E > operator ^( U lhs, SafeInt< T, E > rhs ) throw() +{ + return SafeInt< T, E >(details::BinaryXorHelper< T, U >::Xor( (T)rhs, lhs ) ); +} + +// Bitwise OR +template < typename T, typename U, typename E > +SafeInt< T, E > operator |( U lhs, SafeInt< T, E > rhs ) throw() +{ + return SafeInt< T, E >( details::BinaryOrHelper< T, U >::Or( (T)rhs, lhs ) ); +} + +} // namespace utilities + +} // namespace msl + +#pragma pack(pop) + +#pragma warning(pop) // Disable /Wall warnings +#endif // RC_INVOKED diff --git a/sdk/include/ucrt/safeint_internal.h b/sdk/include/ucrt/safeint_internal.h new file mode 100644 index 0000000000000..89a6852bf7fa1 --- /dev/null +++ b/sdk/include/ucrt/safeint_internal.h @@ -0,0 +1,2898 @@ +/*** +*safeint_internal.h - Internal details for SafeInt (see safeint.h) +* +* Copyright (c) Microsoft Corporation. All rights reserved. +* +*Purpose: +* Private internal details for SafeInt. +* The constructs and functions in Microsoft::Utilities::details are not +* meant to be used by external code and can change at any time. +* +****/ + +#pragma once + +#include + +#pragma pack(push, _CRT_PACKING) + +namespace msl +{ + +namespace utilities +{ + +namespace details +{ +#pragma warning(push) +#pragma warning(disable:4702) + +template < typename T > +class DependentFalse { public: enum{ value = false }; }; + +template < typename T > class NumericType; + +template <> class NumericType { public: enum{ isBool = true, isFloat = false, isInt = false }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +#ifdef _NATIVE_WCHAR_T_DEFINED +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +#endif /* _NATIVE_WCHAR_T_DEFINED */ +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType<__int64> { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = false, isInt = true }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = true, isInt = false }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = true, isInt = false }; }; +template <> class NumericType { public: enum{ isBool = false, isFloat = true, isInt = false }; }; +// Catch-all for anything not supported +template < typename T > class NumericType { public: enum{ isBool = false, isFloat = false, isInt = false }; }; + + +template < typename T > class IntTraits +{ +public: + static_assert( NumericType::isInt || NumericType::isBool, "non-integral type T" ); + enum + { +#pragma warning(suppress:4804) + isSigned = ( (T)(-1) < 0 ), + is64Bit = ( sizeof(T) == 8 ), + is32Bit = ( sizeof(T) == 4 ), + is16Bit = ( sizeof(T) == 2 ), + is8Bit = ( sizeof(T) == 1 ), + isLT32Bit = ( sizeof(T) < 4 ), + isLT64Bit = ( sizeof(T) < 8 ), + isInt8 = ( sizeof(T) == 1 && isSigned ), + isUint8 = ( sizeof(T) == 1 && !isSigned ), + isInt16 = ( sizeof(T) == 2 && isSigned ), + isUint16 = ( sizeof(T) == 2 && !isSigned ), + isInt32 = ( sizeof(T) == 4 && isSigned ), + isUint32 = ( sizeof(T) == 4 && !isSigned ), + isInt64 = ( sizeof(T) == 8 && isSigned ), + isUint64 = ( sizeof(T) == 8 && !isSigned ), + bitCount = ( sizeof(T)*8 ), +#pragma warning(suppress:4804) + isBool = NumericType::isBool + }; + +#pragma warning(push) +#pragma warning(disable:4310) +#pragma warning(disable:4804) // suppress warning about '<<' being an unsafe operation when T is bool + const static T maxInt = isSigned ? ((T)~((T)1 << (T)(bitCount-1))) : ((T)(~(T)0)); + const static T minInt = isSigned ? ((T)((T)1 << (T)(bitCount-1))) : ((T)0); +#pragma warning(pop) +}; + +// this is strictly internal and not to be used as a policy in SafeInt<> +struct SafeIntErrorPolicy_NoThrow +{ + static void SafeIntOnOverflow() + { + } + + static void SafeIntOnDivZero() + { + } +}; + +template < typename T, typename U > class SafeIntCompare +{ +public: + enum + { + isBothSigned = (IntTraits< T >::isSigned && IntTraits< U >::isSigned), + isBothUnsigned = (!IntTraits< T >::isSigned && !IntTraits< U >::isSigned), + isLikeSigned = (static_cast(IntTraits< T >::isSigned) == static_cast(IntTraits< U >::isSigned)), + isCastOK = ((isLikeSigned && sizeof(T) >= sizeof(U)) || + (IntTraits< T >::isSigned && sizeof(T) > sizeof(U))), + isBothLT32Bit = (IntTraits< T >::isLT32Bit && IntTraits< U >::isLT32Bit), + isBothLT64Bit = (IntTraits< T >::isLT64Bit && IntTraits< U >::isLT64Bit) + }; +}; + +template < typename U > class SafeIntCompare< float, U > +{ +public: + enum + { + isBothSigned = IntTraits< U >::isSigned, + isBothUnsigned = false, + isLikeSigned = IntTraits< U >::isSigned, + isCastOK = true + }; +}; + +template < typename U > class SafeIntCompare< double, U > +{ +public: + enum + { + isBothSigned = IntTraits< U >::isSigned, + isBothUnsigned = false, + isLikeSigned = IntTraits< U >::isSigned, + isCastOK = true + }; +}; + +template < typename U > class SafeIntCompare< long double, U > +{ +public: + enum + { + isBothSigned = IntTraits< U >::isSigned, + isBothUnsigned = false, + isLikeSigned = IntTraits< U >::isSigned, + isCastOK = true + }; +}; + +//all of the arithmetic operators can be solved by the same code within +//each of these regions without resorting to compile-time constant conditionals +//most operators collapse the problem into less than the 22 zones, but this is used +//as the first cut +//using this also helps ensure that we handle all of the possible cases correctly + +template < typename T, typename U > class IntRegion +{ +public: + enum + { + //unsigned-unsigned zone + IntZone_UintLT32_UintLT32 = SafeIntCompare< T,U >::isBothUnsigned && SafeIntCompare< T,U >::isBothLT32Bit, + IntZone_Uint32_UintLT64 = SafeIntCompare< T,U >::isBothUnsigned && IntTraits< T >::is32Bit && IntTraits< U >::isLT64Bit, + IntZone_UintLT32_Uint32 = SafeIntCompare< T,U >::isBothUnsigned && IntTraits< T >::isLT32Bit && IntTraits< U >::is32Bit, + IntZone_Uint64_Uint = SafeIntCompare< T,U >::isBothUnsigned && IntTraits< T >::is64Bit, + IntZone_UintLT64_Uint64 = SafeIntCompare< T,U >::isBothUnsigned && IntTraits< T >::isLT64Bit && IntTraits< U >::is64Bit, + //unsigned-signed + IntZone_UintLT32_IntLT32 = !IntTraits< T >::isSigned && IntTraits< U >::isSigned && SafeIntCompare< T,U >::isBothLT32Bit, + IntZone_Uint32_IntLT64 = IntTraits< T >::isUint32 && IntTraits< U >::isSigned && IntTraits< U >::isLT64Bit, + IntZone_UintLT32_Int32 = !IntTraits< T >::isSigned && IntTraits< T >::isLT32Bit && IntTraits< U >::isInt32, + IntZone_Uint64_Int = IntTraits< T >::isUint64 && IntTraits< U >::isSigned && IntTraits< U >::isLT64Bit, + IntZone_UintLT64_Int64 = !IntTraits< T >::isSigned && IntTraits< T >::isLT64Bit && IntTraits< U >::isInt64, + IntZone_Uint64_Int64 = IntTraits< T >::isUint64 && IntTraits< U >::isInt64, + //signed-signed + IntZone_IntLT32_IntLT32 = SafeIntCompare< T,U >::isBothSigned && SafeIntCompare< T, U >::isBothLT32Bit, + IntZone_Int32_IntLT64 = SafeIntCompare< T,U >::isBothSigned && IntTraits< T >::is32Bit && IntTraits< U >::isLT64Bit, + IntZone_IntLT32_Int32 = SafeIntCompare< T,U >::isBothSigned && IntTraits< T >::isLT32Bit && IntTraits< U >::is32Bit, + IntZone_Int64_Int64 = SafeIntCompare< T,U >::isBothSigned && IntTraits< T >::isInt64 && IntTraits< U >::isInt64, + IntZone_Int64_Int = SafeIntCompare< T,U >::isBothSigned && IntTraits< T >::is64Bit && IntTraits< U >::isLT64Bit, + IntZone_IntLT64_Int64 = SafeIntCompare< T,U >::isBothSigned && IntTraits< T >::isLT64Bit && IntTraits< U >::is64Bit, + //signed-unsigned + IntZone_IntLT32_UintLT32 = IntTraits< T >::isSigned && !IntTraits< U >::isSigned && SafeIntCompare< T,U >::isBothLT32Bit, + IntZone_Int32_UintLT32 = IntTraits< T >::isInt32 && !IntTraits< U >::isSigned && IntTraits< U >::isLT32Bit, + IntZone_IntLT64_Uint32 = IntTraits< T >::isSigned && IntTraits< T >::isLT64Bit && IntTraits< U >::isUint32, + IntZone_Int64_UintLT64 = IntTraits< T >::isInt64 && !IntTraits< U >::isSigned && IntTraits< U >::isLT64Bit, + IntZone_Int_Uint64 = IntTraits< T >::isSigned && IntTraits< U >::isUint64 && IntTraits< T >::isLT64Bit, + IntZone_Int64_Uint64 = IntTraits< T >::isInt64 && IntTraits< U >::isUint64 + }; +}; + +// useful function to help with getting the magnitude of a negative number +enum AbsMethod +{ + AbsMethodInt, + AbsMethodInt64, + AbsMethodNoop +}; + +template < typename T > +class GetAbsMethod +{ +public: + enum + { + method = IntTraits< T >::isLT64Bit && IntTraits< T >::isSigned ? AbsMethodInt : + IntTraits< T >::isInt64 ? AbsMethodInt64 : AbsMethodNoop + }; +}; + +template < typename T, int Method = GetAbsMethod< T >::method > class AbsValueHelper; + +template < typename T > class AbsValueHelper < T, AbsMethodInt > +{ +public: + static unsigned __int32 Abs( T t ) throw() + { + _ASSERTE( t < 0 ); + return (unsigned __int32)-t; + } +}; + +template < typename T > class AbsValueHelper < T, AbsMethodInt64 > +{ +public: + static unsigned __int64 Abs( T t ) throw() + { + _ASSERTE( t < 0 ); + return (unsigned __int64)-t; + } +}; + +template < typename T > class AbsValueHelper < T, AbsMethodNoop > +{ +public: + static T Abs( T t ) throw() + { + // Why are you calling Abs on an unsigned number ??? + _ASSERTE( ("AbsValueHelper::Abs should not be called with an unsigned integer type", 0) ); + return t; + } +}; + +template < typename T, typename E, bool fSigned > class NegationHelper; + +template < typename T, typename E > class NegationHelper < T, E, true > // Signed +{ +public: + static SafeIntError Negative( T t, T& ret ) + { + // corner case + if( t != IntTraits< T >::minInt ) + { + // cast prevents unneeded checks in the case of small ints + ret = -t; + return SafeIntNoError; + } + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + + +template < typename T, typename E > class NegationHelper < T, E, false > // unsigned +{ +public: + static SafeIntError Negative( T t, T& ret ) throw() + { + _SAFEINT_UNSIGNED_NEGATION_BEHAVIOR(); + +#pragma warning(suppress:4127) + _ASSERTE( !IntTraits::isLT32Bit ); + +#pragma warning(suppress:4146) + ret = -t; + return SafeIntNoError; + } +}; + +//core logic to determine casting behavior +enum CastMethod +{ + CastOK = 0, + CastCheckLTZero, + CastCheckGTMax, + CastCheckMinMaxUnsigned, + CastCheckMinMaxSigned, + CastFromFloat, + CastToBool, + CastFromBool +}; + +template < typename ToType, typename FromType > +class GetCastMethod +{ +public: + enum + { + method = ( IntTraits< FromType >::isBool && + !IntTraits< ToType >::isBool ) ? CastFromBool : + + ( !IntTraits< FromType >::isBool && + IntTraits< ToType >::isBool ) ? CastToBool : + ( NumericType< FromType >::isFloat && + !NumericType< ToType >::isFloat ) ? CastFromFloat : + + ( SafeIntCompare< ToType, FromType >::isCastOK || + ( NumericType< ToType >::isFloat && + !NumericType< FromType >::isFloat ) ) ? CastOK : + + ( ( IntTraits< ToType >::isSigned && + !IntTraits< FromType >::isSigned && + sizeof( FromType ) >= sizeof( ToType ) ) || + ( SafeIntCompare< ToType, FromType >::isBothUnsigned && + sizeof( FromType ) > sizeof( ToType ) ) ) ? CastCheckGTMax : + + ( !IntTraits< ToType >::isSigned && + IntTraits< FromType >::isSigned && + sizeof( ToType ) >= sizeof( FromType ) ) ? CastCheckLTZero : + + ( !IntTraits< ToType >::isSigned ) ? CastCheckMinMaxUnsigned + : CastCheckMinMaxSigned + }; +}; + +template < typename T, typename U, typename E, + int Method = GetCastMethod< T, U >::method > class SafeCastHelper; + +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastOK > +{ +public: + static SafeIntError Cast( U u, T& t ) throw() + { + t = (T)u; + return SafeIntNoError; + } +}; + +// special case floats and doubles +// tolerate loss of precision +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastFromFloat > +{ +public: + static SafeIntError Cast( U u, T& t ) + { + if( u <= (U)IntTraits< T >::maxInt && + u >= (U)IntTraits< T >::minInt ) + { + t = (T)u; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +// Match on any method where a bool is cast to type T +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastFromBool > +{ +public: + static SafeIntError Cast( bool b, T& t ) throw() + { + t = (T)( b ? 1 : 0 ); + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastToBool > +{ +public: + static SafeIntError Cast( T t, bool& b ) throw() + { + b = !!t; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastCheckLTZero > +{ +public: + static SafeIntError Cast( U u, T& t ) + { + if( u < 0 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + t = (T)u; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastCheckGTMax > +{ +public: + static SafeIntError Cast( U u, T& t ) + { + if( u > IntTraits< T >::maxInt ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + t = (T)u; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastCheckMinMaxUnsigned > +{ +public: + static SafeIntError Cast( U u, T& t ) + { + // U is signed - T could be either signed or unsigned + if( u > IntTraits< T >::maxInt || u < 0 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + t = (T)u; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SafeCastHelper < T, U, E, CastCheckMinMaxSigned > +{ +public: + static SafeIntError Cast( U u, T& t ) + { + // T, U are signed + if( u > IntTraits< T >::maxInt || u < IntTraits< T >::minInt ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + t = (T)u; + return SafeIntNoError; + } +}; + +//core logic to determine whether a comparison is valid, or needs special treatment +enum ComparisonMethod +{ + ComparisonMethod_Ok = 0, + ComparisonMethod_CastInt, + ComparisonMethod_CastInt64, + ComparisonMethod_UnsignedT, + ComparisonMethod_UnsignedU +}; + +template < typename T, typename U > +class ValidComparison +{ +public: + enum + { +#if _SAFEINT_USE_ANSI_CONVERSIONS + method = ComparisonMethod_Ok +#else /* _SAFEINT_USE_ANSI_CONVERSIONS */ + method = ( ( SafeIntCompare< T, U >::isLikeSigned ) ? ComparisonMethod_Ok : + ( ( IntTraits< T >::isSigned && sizeof(T) < 8 && sizeof(U) < 4 ) || + ( IntTraits< U >::isSigned && sizeof(T) < 4 && sizeof(U) < 8 ) ) ? ComparisonMethod_CastInt : + ( ( IntTraits< T >::isSigned && sizeof(U) < 8 ) || + ( IntTraits< U >::isSigned && sizeof(T) < 8 ) ) ? ComparisonMethod_CastInt64 : + ( !IntTraits< T >::isSigned ) ? ComparisonMethod_UnsignedT : + ComparisonMethod_UnsignedU ) +#endif /* _SAFEINT_USE_ANSI_CONVERSIONS */ + }; +}; + +template ::method > class EqualityTest; + +template < typename T, typename U > class EqualityTest< T, U, ComparisonMethod_Ok > +{ +public: + static bool IsEquals( const T t, const U u ) throw() { return ( t == u ); } +}; + +template < typename T, typename U > class EqualityTest< T, U, ComparisonMethod_CastInt > +{ +public: + static bool IsEquals( const T t, const U u ) throw() { return ( (int)t == (int)u ); } +}; + +template < typename T, typename U > class EqualityTest< T, U, ComparisonMethod_CastInt64 > +{ +public: + static bool IsEquals( const T t, const U u ) throw() { return ( (__int64)t == (__int64)u ); } +}; + +template < typename T, typename U > class EqualityTest< T, U, ComparisonMethod_UnsignedT > +{ +public: + static bool IsEquals( const T t, const U u ) throw() + { + //one operand is 32 or 64-bit unsigned, and the other is signed and the same size or smaller + if( u < 0 ) + { + return false; + } + + //else safe to cast to type T + return ( t == (T)u ); + } +}; + +template < typename T, typename U > class EqualityTest< T, U, ComparisonMethod_UnsignedU> +{ +public: + static bool IsEquals( const T t, const U u ) throw() + { + //one operand is 32 or 64-bit unsigned, and the other is signed and the same size or smaller + if( t < 0 ) + { + return false; + } + + //else safe to cast to type U + return ( (U)t == u ); + } +}; + +template ::method > class GreaterThanTest; + +template < typename T, typename U > class GreaterThanTest< T, U, ComparisonMethod_Ok > +{ +public: + static bool GreaterThan( const T t, const U u ) throw() { return ( t > u ); } +}; + +template < typename T, typename U > class GreaterThanTest< T, U, ComparisonMethod_CastInt > +{ +public: + static bool GreaterThan( const T t, const U u ) throw() { return ( (int)t > (int)u ); } +}; + +template < typename T, typename U > class GreaterThanTest< T, U, ComparisonMethod_CastInt64 > +{ +public: + static bool GreaterThan( const T t, const U u ) throw() { return ( (__int64)t > (__int64)u ); } +}; + +template < typename T, typename U > class GreaterThanTest< T, U, ComparisonMethod_UnsignedT > +{ +public: + static bool GreaterThan( const T t, const U u ) throw() + { + // one operand is 32 or 64-bit unsigned, and the other is signed and the same size or smaller + if( u < 0 ) + { + return SafeIntNoError; + } + + // else safe to cast to type T + return ( t > (T)u ); + } +}; + +template < typename T, typename U > class GreaterThanTest< T, U, ComparisonMethod_UnsignedU > +{ +public: + static bool GreaterThan( const T t, const U u ) throw() + { + // one operand is 32 or 64-bit unsigned, and the other is signed and the same size or smaller + if( t < 0 ) + { + return false; + } + + // else safe to cast to type U + return ( (U)t > u ); + } +}; + +// Modulus is simpler than comparison, but follows much the same logic +// using this set of functions, it can't fail except in a div 0 situation +template ::method > class ModulusHelper; + +template class ModulusHelper +{ +public: + static SafeIntError Modulus( const T& t, const U& u, T& result ) + { + if(u == 0) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + // trap corner case +#pragma warning(suppress:4127) + if( IntTraits< U >::isSigned ) + { + if(u == -1) + { + result = 0; + return SafeIntNoError; + } + } + + result = (T)(t % u); + return SafeIntNoError; + } +}; + +template class ModulusHelper +{ +public: + static SafeIntError Modulus( const T& t, const U& u, T& result ) + { + if(u == 0) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + // trap corner case +#pragma warning(suppress:4127) + if( IntTraits< U >::isSigned ) + { + if(u == -1) + { + result = 0; + return SafeIntNoError; + } + } + + result = (T)(t % u); + return SafeIntNoError; + } +}; + +template class ModulusHelper +{ +public: + static SafeIntError Modulus( const T& t, const U& u, T& result ) + { + if(u == 0) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + +#pragma warning(suppress:4127) + if(IntTraits< U >::isSigned && u == -1) + { + result = 0; + } + else + { + result = (T)((__int64)t % (__int64)u); + } + + return SafeIntNoError; + } +}; + +// T is unsigned __int64, U is any signed int +template class ModulusHelper +{ +public: + static SafeIntError Modulus( const T& t, const U& u, T& result ) + { + if(u == 0) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + // u could be negative - if so, need to convert to positive + // casts below are always safe due to the way modulus works + if(u < 0) + { + result = (T)(t % AbsValueHelper< U >::Abs(u)); + } + else + { + result = (T)(t % u); + } + + return SafeIntNoError; + } +}; + +// U is unsigned __int64, T any signed int +template class ModulusHelper +{ +public: + static SafeIntError Modulus( const T& t, const U& u, T& result ) + { + if(u == 0) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + //t could be negative - if so, need to convert to positive + if(t < 0) + { + result = -(T)( AbsValueHelper< T >::Abs( t ) % u ); + } + else + { + result = (T)((T)t % u); + } + + return SafeIntNoError; + } +}; + +//core logic to determine method to check multiplication +enum MultiplicationState +{ + MultiplicationState_CastInt = 0, // One or both signed, smaller than 32-bit + MultiplicationState_CastInt64, // One or both signed, smaller than 64-bit + MultiplicationState_CastUint, // Both are unsigned, smaller than 32-bit + MultiplicationState_CastUint64, // Both are unsigned, both 32-bit or smaller + MultiplicationState_Uint64Uint, // Both are unsigned, lhs 64-bit, rhs 32-bit or smaller + MultiplicationState_Uint64Uint64, // Both are unsigned int64 + MultiplicationState_Uint64Int, // lhs is unsigned int64, rhs int32 + MultiplicationState_Uint64Int64, // lhs is unsigned int64, rhs signed int64 + MultiplicationState_UintUint64, // Both are unsigned, lhs 32-bit or smaller, rhs 64-bit + MultiplicationState_UintInt64, // lhs unsigned 32-bit or less, rhs int64 + MultiplicationState_Int64Uint, // lhs int64, rhs unsigned int32 + MultiplicationState_Int64Int64, // lhs int64, rhs int64 + MultiplicationState_Int64Int, // lhs int64, rhs int32 + MultiplicationState_IntUint64, // lhs int, rhs unsigned int64 + MultiplicationState_IntInt64, // lhs int, rhs int64 + MultiplicationState_Int64Uint64, // lhs int64, rhs uint64 + MultiplicationState_Error +}; + +template < typename T, typename U > +class MultiplicationMethod +{ +public: + enum + { + // unsigned-unsigned + method = (IntRegion< T,U >::IntZone_UintLT32_UintLT32 ? MultiplicationState_CastUint : + (IntRegion< T,U >::IntZone_Uint32_UintLT64 || + IntRegion< T,U >::IntZone_UintLT32_Uint32) ? MultiplicationState_CastUint64 : + SafeIntCompare< T,U >::isBothUnsigned && + IntTraits< T >::isUint64 && IntTraits< U >::isUint64 ? MultiplicationState_Uint64Uint64 : + (IntRegion< T,U >::IntZone_Uint64_Uint) ? MultiplicationState_Uint64Uint : + (IntRegion< T,U >::IntZone_UintLT64_Uint64) ? MultiplicationState_UintUint64 : + // unsigned-signed + (IntRegion< T,U >::IntZone_UintLT32_IntLT32) ? MultiplicationState_CastInt : + (IntRegion< T,U >::IntZone_Uint32_IntLT64 || + IntRegion< T,U >::IntZone_UintLT32_Int32) ? MultiplicationState_CastInt64 : + (IntRegion< T,U >::IntZone_Uint64_Int) ? MultiplicationState_Uint64Int : + (IntRegion< T,U >::IntZone_UintLT64_Int64) ? MultiplicationState_UintInt64 : + (IntRegion< T,U >::IntZone_Uint64_Int64) ? MultiplicationState_Uint64Int64 : + // signed-signed + (IntRegion< T,U >::IntZone_IntLT32_IntLT32) ? MultiplicationState_CastInt : + (IntRegion< T,U >::IntZone_Int32_IntLT64 || + IntRegion< T,U >::IntZone_IntLT32_Int32) ? MultiplicationState_CastInt64 : + (IntRegion< T,U >::IntZone_Int64_Int64) ? MultiplicationState_Int64Int64 : + (IntRegion< T,U >::IntZone_Int64_Int) ? MultiplicationState_Int64Int : + (IntRegion< T,U >::IntZone_IntLT64_Int64) ? MultiplicationState_IntInt64 : + // signed-unsigned + (IntRegion< T,U >::IntZone_IntLT32_UintLT32) ? MultiplicationState_CastInt : + (IntRegion< T,U >::IntZone_Int32_UintLT32 || + IntRegion< T,U >::IntZone_IntLT64_Uint32) ? MultiplicationState_CastInt64 : + (IntRegion< T,U >::IntZone_Int64_UintLT64) ? MultiplicationState_Int64Uint : + (IntRegion< T,U >::IntZone_Int_Uint64) ? MultiplicationState_IntUint64 : + (IntRegion< T,U >::IntZone_Int64_Uint64 ? MultiplicationState_Int64Uint64 : + MultiplicationState_Error ) ) + }; +}; + +template ::method > class MultiplicationHelper; + +template < typename T, typename U, typename E > class MultiplicationHelper< T, U, E, MultiplicationState_CastInt> +{ +public: + //accepts signed, both less than 32-bit + static SafeIntError Multiply( const T& t, const U& u, T& ret ) + { + int tmp = t * u; + + if( tmp > IntTraits< T >::maxInt || tmp < IntTraits< T >::minInt ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class MultiplicationHelper< T, U, E, MultiplicationState_CastUint > +{ +public: + //accepts unsigned, both less than 32-bit + static SafeIntError Multiply( const T& t, const U& u, T& ret ) + { + unsigned int tmp = t * u; + + if( tmp > IntTraits< T >::maxInt ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class MultiplicationHelper< T, U, E, MultiplicationState_CastInt64> +{ +public: + //mixed signed or both signed where at least one argument is 32-bit, and both a 32-bit or less + static SafeIntError Multiply( const T& t, const U& u, T& ret ) + { + __int64 tmp = (__int64)t * (__int64)u; + + if(tmp > (__int64)IntTraits< T >::maxInt || tmp < (__int64)IntTraits< T >::minInt) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class MultiplicationHelper< T, U, E, MultiplicationState_CastUint64> +{ +public: + //both unsigned where at least one argument is 32-bit, and both are 32-bit or less + static SafeIntError Multiply( const T& t, const U& u, T& ret ) + { + unsigned __int64 tmp = (unsigned __int64)t * (unsigned __int64)u; + + if(tmp > (unsigned __int64)IntTraits< T >::maxInt) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret = (T)tmp; + return SafeIntNoError; + } +}; + +// T = left arg and return type +// U = right arg +template < typename T, typename U, typename E > class LargeIntRegMultiply; + +template< typename E > class LargeIntRegMultiply< unsigned __int64, unsigned __int64, E > +{ +public: + static SafeIntError RegMultiply( const unsigned __int64& a, const unsigned __int64& b, unsigned __int64& ret ) + { + unsigned __int32 aHigh, aLow, bHigh, bLow; + + // Consider that a*b can be broken up into: + // (aHigh * 2^32 + aLow) * (bHigh * 2^32 + bLow) + // => (aHigh * bHigh * 2^64) + (aLow * bHigh * 2^32) + (aHigh * bLow * 2^32) + (aLow * bLow) + // Note - same approach applies for 128 bit math on a 64-bit system + + aHigh = (unsigned __int32)(a >> 32); + aLow = (unsigned __int32)a; + bHigh = (unsigned __int32)(b >> 32); + bLow = (unsigned __int32)b; + + ret = 0; + + if(aHigh == 0) + { + if(bHigh != 0) + { + ret = (unsigned __int64)aLow * (unsigned __int64)bHigh; + } + } + else if(bHigh == 0) + { + if(aHigh != 0) + { + ret = (unsigned __int64)aHigh * (unsigned __int64)bLow; + } + } + else + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + if(ret != 0) + { + unsigned __int64 tmp; + + if((unsigned __int32)(ret >> 32) != 0) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret <<= 32; + tmp = (unsigned __int64)aLow * (unsigned __int64)bLow; + ret += tmp; + + if(ret < tmp) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + return SafeIntNoError; + } + + ret = (unsigned __int64)aLow * (unsigned __int64)bLow; + return SafeIntNoError; + } +}; + +template< typename E > class LargeIntRegMultiply< unsigned __int64, unsigned __int32, E > +{ +public: + static SafeIntError RegMultiply( const unsigned __int64& a, unsigned __int32 b, unsigned __int64& ret ) + { + unsigned __int32 aHigh, aLow; + + // Consider that a*b can be broken up into: + // (aHigh * 2^32 + aLow) * b + // => (aHigh * b * 2^32) + (aLow * b) + + aHigh = (unsigned __int32)(a >> 32); + aLow = (unsigned __int32)a; + + ret = 0; + + if(aHigh != 0) + { + ret = (unsigned __int64)aHigh * (unsigned __int64)b; + + unsigned __int64 tmp; + + if((unsigned __int32)(ret >> 32) != 0) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret <<= 32; + tmp = (unsigned __int64)aLow * (unsigned __int64)b; + ret += tmp; + + if(ret < tmp) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + return SafeIntNoError; + } + + ret = (unsigned __int64)aLow * (unsigned __int64)b; + return SafeIntNoError; + } +}; + +template< typename E > class LargeIntRegMultiply< unsigned __int64, signed __int32, E > +{ +public: + static SafeIntError RegMultiply( const unsigned __int64& a, signed __int32 b, unsigned __int64& ret ) + { + if( b < 0 && a != 0 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + return LargeIntRegMultiply< unsigned __int64, unsigned __int32, E >::RegMultiply(a, (unsigned __int32)b, ret); + } +}; + +template< typename E > class LargeIntRegMultiply< unsigned __int64, signed __int64, E > +{ +public: + static SafeIntError RegMultiply( const unsigned __int64& a, signed __int64 b, unsigned __int64& ret ) + { + if( b < 0 && a != 0 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + return LargeIntRegMultiply< unsigned __int64, unsigned __int64, E >::RegMultiply(a, (unsigned __int64)b, ret); + } +}; + +template< typename E > class LargeIntRegMultiply< signed __int32, unsigned __int64, E > +{ +public: + static SafeIntError RegMultiply( signed __int32 a, const unsigned __int64& b, signed __int32& ret ) + { + unsigned __int32 bHigh, bLow; + bool fIsNegative = false; + + // Consider that a*b can be broken up into: + // (aHigh * 2^32 + aLow) * (bHigh * 2^32 + bLow) + // => (aHigh * bHigh * 2^64) + (aLow * bHigh * 2^32) + (aHigh * bLow * 2^32) + (aLow * bLow) + + bHigh = (unsigned __int32)(b >> 32); + bLow = (unsigned __int32)b; + + ret = 0; + + if(bHigh != 0 && a != 0) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + if( a < 0 ) + { + a = -a; + fIsNegative = true; + } + + unsigned __int64 tmp = (unsigned __int32)a * (unsigned __int64)bLow; + + + if( !fIsNegative ) + { + if( tmp <= (unsigned __int64)IntTraits< signed __int32 >::maxInt ) + { + ret = (signed __int32)tmp; + return SafeIntNoError; + } + } + else + { + if( tmp <= (unsigned __int64)IntTraits< signed __int32 >::maxInt+1 ) + { + ret = -( (signed __int32)tmp ); + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class LargeIntRegMultiply< unsigned __int32, unsigned __int64, E > +{ +public: + static SafeIntError RegMultiply( unsigned __int32 a, const unsigned __int64& b, unsigned __int32& ret ) + { + // Consider that a*b can be broken up into: + // (bHigh * 2^32 + bLow) * a + // => (bHigh * a * 2^32) + (bLow * a) + // In this case, the result must fit into 32-bits + // If bHigh != 0 && a != 0, immediate error. + + if( (unsigned __int32)(b >> 32) != 0 && a != 0 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + unsigned __int64 tmp = b * (unsigned __int64)a; + + if( (unsigned __int32)(tmp >> 32) != 0 ) // overflow + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + ret = (unsigned __int32)tmp; + return SafeIntNoError; + } +}; + +template < typename E > class LargeIntRegMultiply< unsigned __int32, signed __int64, E > +{ +public: + static SafeIntError RegMultiply( unsigned __int32 a, const signed __int64& b, unsigned __int32& ret ) + { + if( b < 0 && a != 0 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + return LargeIntRegMultiply< unsigned __int32, unsigned __int64, E >::RegMultiply( a, (unsigned __int64)b, ret ); + } +}; + +template < typename E > class LargeIntRegMultiply< signed __int64, signed __int64, E > +{ +public: + static SafeIntError RegMultiply( const signed __int64& a, const signed __int64& b, signed __int64& ret ) + { + bool aNegative = false; + bool bNegative = false; + + unsigned __int64 tmp; + __int64 a1 = a; + __int64 b1 = b; + + if( a1 < 0 ) + { + aNegative = true; + a1 = -a1; + } + + if( b1 < 0 ) + { + bNegative = true; + b1 = -b1; + } + + if( LargeIntRegMultiply< unsigned __int64, unsigned __int64, E >:: + RegMultiply( (unsigned __int64)a1, (unsigned __int64)b1, tmp ) == SafeIntNoError ) + { + // The unsigned multiplication didn't overflow + if( aNegative ^ bNegative ) + { + // Result must be negative + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::minInt ) + { + ret = -(signed __int64)tmp; + return SafeIntNoError; + } + } + else + { + // Result must be positive + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::maxInt ) + { + ret = (signed __int64)tmp; + return SafeIntNoError; + } + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class LargeIntRegMultiply< signed __int64, unsigned __int32, E > +{ +public: + static SafeIntError RegMultiply( const signed __int64& a, unsigned __int32 b, signed __int64& ret ) + { + bool aNegative = false; + unsigned __int64 tmp; + __int64 a1 = a; + + if( a1 < 0 ) + { + aNegative = true; + a1 = -a1; + } + + if( LargeIntRegMultiply< unsigned __int64, unsigned __int32, E >::RegMultiply( (unsigned __int64)a1, b, tmp ) == SafeIntNoError ) + { + // The unsigned multiplication didn't overflow + if( aNegative ) + { + // Result must be negative + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::minInt ) + { + ret = -(signed __int64)tmp; + return SafeIntNoError; + } + } + else + { + // Result must be positive + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::maxInt ) + { + ret = (signed __int64)tmp; + return SafeIntNoError; + } + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class LargeIntRegMultiply< signed __int64, signed __int32, E > +{ +public: + static SafeIntError RegMultiply( const signed __int64& a, signed __int32 b, signed __int64& ret ) + { + bool aNegative = false; + bool bNegative = false; + + unsigned __int64 tmp; + __int64 a1 = a; + __int64 b1 = b; + + if( a1 < 0 ) + { + aNegative = true; + a1 = -a1; + } + + if( b1 < 0 ) + { + bNegative = true; + b1 = -b1; + } + + if( LargeIntRegMultiply< unsigned __int64, unsigned __int32, E >:: + RegMultiply( (unsigned __int64)a1, (unsigned __int32)b1, tmp ) == SafeIntNoError ) + { + // The unsigned multiplication didn't overflow + if( aNegative ^ bNegative ) + { + // Result must be negative + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::minInt ) + { + ret = -(signed __int64)tmp; + return SafeIntNoError; + } + } + else + { + // Result must be positive + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::maxInt ) + { + ret = (signed __int64)tmp; + return SafeIntNoError; + } + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class LargeIntRegMultiply< signed __int32, signed __int64, E > +{ +public: + static SafeIntError RegMultiply( signed __int32 a, const signed __int64& b, signed __int32& ret ) + { + bool aNegative = false; + bool bNegative = false; + + unsigned __int32 tmp; + __int64 b1 = b; + + if( a < 0 ) + { + aNegative = true; + a = -a; + } + + if( b1 < 0 ) + { + bNegative = true; + b1 = -b1; + } + + if( LargeIntRegMultiply< unsigned __int32, unsigned __int64, E >:: + RegMultiply( (unsigned __int32)a, (unsigned __int64)b1, tmp ) == SafeIntNoError ) + { + // The unsigned multiplication didn't overflow + if( aNegative ^ bNegative ) + { + // Result must be negative + if( tmp <= (unsigned __int32)IntTraits< signed __int32 >::minInt ) + { +#pragma warning(suppress:4146) + ret = -tmp; + return SafeIntNoError; + } + } + else + { + // Result must be positive + if( tmp <= (unsigned __int32)IntTraits< signed __int32 >::maxInt ) + { + ret = (signed __int32)tmp; + return SafeIntNoError; + } + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class LargeIntRegMultiply< signed __int64, unsigned __int64, E > +{ +public: + static SafeIntError RegMultiply( const signed __int64& a, const unsigned __int64& b, signed __int64& ret ) + { + bool aNegative = false; + + unsigned __int64 tmp; + __int64 a1 = a; + + if( a1 < 0 ) + { + aNegative = true; + a1 = -a1; + } + + if( LargeIntRegMultiply< unsigned __int64, unsigned __int64, E >:: + RegMultiply( (unsigned __int64)a1, (unsigned __int64)b, tmp ) == SafeIntNoError ) + { + // The unsigned multiplication didn't overflow + if( aNegative ) + { + // Result must be negative + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::minInt ) + { + ret = -((signed __int64)tmp); + return SafeIntNoError; + } + } + else + { + // Result must be positive + if( tmp <= (unsigned __int64)IntTraits< signed __int64 >::maxInt ) + { + ret = (signed __int64)tmp; + return SafeIntNoError; + } + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class MultiplicationHelper< unsigned __int64, unsigned __int64, E, MultiplicationState_Uint64Uint64 > +{ +public: + static SafeIntError Multiply( const unsigned __int64& t, const unsigned __int64& u, unsigned __int64& ret ) + { + return LargeIntRegMultiply< unsigned __int64, unsigned __int64, E >::RegMultiply( t, u, ret ); + } +}; + +template < typename U, typename E > class MultiplicationHelper +{ +public: + //U is any unsigned int 32-bit or less + static SafeIntError Multiply( const unsigned __int64& t, const U& u, unsigned __int64& ret ) + { + return LargeIntRegMultiply< unsigned __int64, unsigned __int32, E >::RegMultiply( t, (unsigned __int32)u, ret ); + } +}; + +// converse of the previous function +template < typename T, typename E > class MultiplicationHelper< T, unsigned __int64, E, MultiplicationState_UintUint64 > +{ +public: + // T is any unsigned int up to 32-bit + static SafeIntError Multiply( const T& t, const unsigned __int64& u, T& ret ) + { + unsigned __int32 tmp; + + if( LargeIntRegMultiply< unsigned __int32, unsigned __int64, E >::RegMultiply( t, u, tmp ) == SafeIntNoError && + SafeCastHelper< T, unsigned __int32, E >::Cast(tmp, ret) == SafeIntNoError ) + { + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename E > class MultiplicationHelper< unsigned __int64, U, E, MultiplicationState_Uint64Int > +{ +public: + //U is any signed int, up to 64-bit + static SafeIntError Multiply(const unsigned __int64& t, const U& u, unsigned __int64& ret) + { + return LargeIntRegMultiply< unsigned __int64, signed __int32, E >::RegMultiply(t, (signed __int32)u, ret); + } +}; + +template < typename E > class MultiplicationHelper +{ +public: + static SafeIntError Multiply(const unsigned __int64& t, const __int64& u, unsigned __int64& ret) + { + return LargeIntRegMultiply< unsigned __int64, __int64, E >::RegMultiply(t, u, ret); + } +}; + +template < typename T, typename E > class MultiplicationHelper< T, __int64, E, MultiplicationState_UintInt64 > +{ +public: + //T is unsigned up to 32-bit + static SafeIntError Multiply( const T& t, const __int64& u, T& ret ) + { + unsigned __int32 tmp; + + if( LargeIntRegMultiply< unsigned __int32, __int64, E >::RegMultiply( (unsigned __int32)t, u, tmp ) == SafeIntNoError && + SafeCastHelper< T, unsigned __int32, E >::Cast( tmp, ret ) == SafeIntNoError ) + { + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename E > class MultiplicationHelper<__int64, U, E, MultiplicationState_Int64Uint > +{ +public: + //U is unsigned up to 32-bit + static SafeIntError Multiply( const __int64& t, const U& u, __int64& ret ) + { + return LargeIntRegMultiply< __int64, unsigned __int32, E >::RegMultiply( t, (unsigned __int32)u, ret ); + } +}; + +template < typename E > class MultiplicationHelper<__int64, __int64, E, MultiplicationState_Int64Int64 > +{ +public: + static SafeIntError Multiply( const __int64& t, const __int64& u, __int64& ret ) + { + return LargeIntRegMultiply< __int64, __int64, E >::RegMultiply( t, u, ret ); + } +}; + +template < typename U, typename E > class MultiplicationHelper<__int64, U, E, MultiplicationState_Int64Int> +{ +public: + //U is signed up to 32-bit + static SafeIntError Multiply( const __int64& t, U u, __int64& ret ) + { + return LargeIntRegMultiply< __int64, __int32, E >::RegMultiply( t, (__int32)u, ret ); + } +}; + +template < typename T, typename E > class MultiplicationHelper< T, unsigned __int64, E, MultiplicationState_IntUint64 > +{ +public: + //T is signed up to 32-bit + static SafeIntError Multiply(T t, const unsigned __int64& u, T& ret) + { + __int32 tmp; + + if( LargeIntRegMultiply< __int32, unsigned __int64, E >::RegMultiply( (__int32)t, u, tmp ) == SafeIntNoError && + SafeCastHelper< T, __int32, E >::Cast( tmp, ret ) == SafeIntNoError ) + { + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class MultiplicationHelper<__int64, unsigned __int64, E, MultiplicationState_Int64Uint64> +{ +public: + //U is signed up to 32-bit + static SafeIntError Multiply( const __int64& t, const unsigned __int64& u, __int64& ret ) + { + return LargeIntRegMultiply< __int64, unsigned __int64, E >::RegMultiply( t, u, ret ); + } +}; + +template < typename T, typename E > class MultiplicationHelper< T, __int64, E, MultiplicationState_IntInt64> +{ +public: + //T is signed, up to 32-bit + static SafeIntError Multiply( T t, const __int64& u, T& ret ) + { + __int32 tmp; + + if( LargeIntRegMultiply< __int32, __int64, E >::RegMultiply( (__int32)t, u, tmp ) == SafeIntNoError && + SafeCastHelper< T, __int32, E >::Cast( tmp, ret ) == SafeIntNoError ) + { + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +enum DivisionState +{ + DivisionState_OK, + DivisionState_UnsignedSigned, + DivisionState_SignedUnsigned32, + DivisionState_SignedUnsigned64, + DivisionState_SignedUnsigned, + DivisionState_SignedSigned +}; + +template < typename T, typename U > class DivisionMethod +{ +public: + enum + { + method = (SafeIntCompare< T, U >::isBothUnsigned ? DivisionState_OK : + (!IntTraits< T >::isSigned && IntTraits< U >::isSigned) ? DivisionState_UnsignedSigned : + (IntTraits< T >::isSigned && + IntTraits< U >::isUint32 && + IntTraits< T >::isLT64Bit) ? DivisionState_SignedUnsigned32 : + (IntTraits< T >::isSigned && IntTraits< U >::isUint64) ? DivisionState_SignedUnsigned64 : + (IntTraits< T >::isSigned && !IntTraits< U >::isSigned) ? DivisionState_SignedUnsigned : + DivisionState_SignedSigned) + }; +}; + +template < typename T, typename U, typename E, int Method = DivisionMethod< T, U >::method > class DivisionHelper; + +template < typename T, typename U, typename E > class DivisionHelper< T, U, E, DivisionState_OK > +{ +public: + static SafeIntError Divide( const T& t, const U& u, T& result ) + { + if( u == 0 ) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + result = (T)( t/u ); + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class DivisionHelper< T, U, E, DivisionState_UnsignedSigned> +{ +public: + static SafeIntError Divide( const T& t, const U& u, T& result ) + { + if( u > 0 ) + { + result = (T)( t/u ); + return SafeIntNoError; + } + + if( u == 0 ) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + // it is always an error to try and divide an unsigned number by a negative signed number + // unless u is bigger than t + if( AbsValueHelper< U >::Abs( u ) > t ) + { + result = 0; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class DivisionHelper< T, U, E, DivisionState_SignedUnsigned32 > +{ +public: + static SafeIntError Divide( const T& t, const U& u, T& result ) + { + if( u == 0 ) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + // Test for t > 0 + // If t < 0, must explicitly upcast, or implicit upcast to ulong will cause errors + // As it turns out, 32-bit division is about twice as fast, which justifies the extra conditional + if( t > 0 ) + result = (T)( t/u ); + else + result = (T)( (__int64)t/(__int64)u ); + + return SafeIntNoError; + } +}; + +template < typename T, typename E > class DivisionHelper< T, unsigned __int64, E, DivisionState_SignedUnsigned64 > +{ +public: + static SafeIntError Divide( const T& t, const unsigned __int64& u, T& result ) + { + if( u == 0 ) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + if( u <= (unsigned __int64)IntTraits< T >::maxInt ) + { + // Else u can safely be cast to T +#pragma warning(suppress:4127) + if( sizeof( T ) < sizeof( __int64 ) ) + result = (T)( (int)t/(int)u ); + else + result = (T)((__int64)t/(__int64)u); + } + else // Corner case + if( t == IntTraits< T >::minInt && u == (unsigned __int64)IntTraits< T >::minInt ) + { + // Min int divided by its own magnitude is -1 + result = -1; + } + else + { + result = 0; + } + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class DivisionHelper< T, U, E, DivisionState_SignedUnsigned> +{ +public: + // T is any signed, U is unsigned and smaller than 32-bit + // In this case, standard operator casting is correct + static SafeIntError Divide( const T& t, const U& u, T& result ) + { + if( u == 0 ) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + result = (T)( t/u ); + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class DivisionHelper< T, U, E, DivisionState_SignedSigned> +{ +public: + static SafeIntError Divide( const T& t, const U& u, T& result ) + { + if( u == 0 ) + { + E::SafeIntOnDivZero(); + return SafeIntDivideByZero; + } + + // Must test for corner case + if( t == IntTraits< T >::minInt && u == -1 ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + result = (T)( t/u ); + return SafeIntNoError; + } +}; + +enum AdditionState +{ + AdditionState_CastIntCheckMax, + AdditionState_CastUintCheckOverflow, + AdditionState_CastUintCheckOverflowMax, + AdditionState_CastUint64CheckOverflow, + AdditionState_CastUint64CheckOverflowMax, + AdditionState_CastIntCheckMinMax, + AdditionState_CastInt64CheckMinMax, + AdditionState_CastInt64CheckMax, + AdditionState_CastUint64CheckMinMax, + AdditionState_CastUint64CheckMinMax2, + AdditionState_CastInt64CheckOverflow, + AdditionState_CastInt64CheckOverflowMinMax, + AdditionState_CastInt64CheckOverflowMax, + AdditionState_ManualCheckInt64Uint64, + AdditionState_ManualCheck, + AdditionState_Error +}; + +template< typename T, typename U > +class AdditionMethod +{ +public: + enum + { + //unsigned-unsigned + method = (IntRegion< T,U >::IntZone_UintLT32_UintLT32 ? AdditionState_CastIntCheckMax : + (IntRegion< T,U >::IntZone_Uint32_UintLT64) ? AdditionState_CastUintCheckOverflow : + (IntRegion< T,U >::IntZone_UintLT32_Uint32) ? AdditionState_CastUintCheckOverflowMax : + (IntRegion< T,U >::IntZone_Uint64_Uint) ? AdditionState_CastUint64CheckOverflow : + (IntRegion< T,U >::IntZone_UintLT64_Uint64) ? AdditionState_CastUint64CheckOverflowMax : + //unsigned-signed + (IntRegion< T,U >::IntZone_UintLT32_IntLT32) ? AdditionState_CastIntCheckMinMax : + (IntRegion< T,U >::IntZone_Uint32_IntLT64 || + IntRegion< T,U >::IntZone_UintLT32_Int32) ? AdditionState_CastInt64CheckMinMax : + (IntRegion< T,U >::IntZone_Uint64_Int || + IntRegion< T,U >::IntZone_Uint64_Int64) ? AdditionState_CastUint64CheckMinMax : + (IntRegion< T,U >::IntZone_UintLT64_Int64) ? AdditionState_CastUint64CheckMinMax2 : + //signed-signed + (IntRegion< T,U >::IntZone_IntLT32_IntLT32) ? AdditionState_CastIntCheckMinMax : + (IntRegion< T,U >::IntZone_Int32_IntLT64 || + IntRegion< T,U >::IntZone_IntLT32_Int32) ? AdditionState_CastInt64CheckMinMax : + (IntRegion< T,U >::IntZone_Int64_Int || + IntRegion< T,U >::IntZone_Int64_Int64) ? AdditionState_CastInt64CheckOverflow : + (IntRegion< T,U >::IntZone_IntLT64_Int64) ? AdditionState_CastInt64CheckOverflowMinMax : + //signed-unsigned + (IntRegion< T,U >::IntZone_IntLT32_UintLT32) ? AdditionState_CastIntCheckMax : + (IntRegion< T,U >::IntZone_Int32_UintLT32 || + IntRegion< T,U >::IntZone_IntLT64_Uint32) ? AdditionState_CastInt64CheckMax : + (IntRegion< T,U >::IntZone_Int64_UintLT64) ? AdditionState_CastInt64CheckOverflowMax : + (IntRegion< T,U >::IntZone_Int64_Uint64) ? AdditionState_ManualCheckInt64Uint64 : + (IntRegion< T,U >::IntZone_Int_Uint64) ? AdditionState_ManualCheck : + AdditionState_Error) + }; +}; + +template < typename T, typename U, typename E, int Method = AdditionMethod< T, U >::method > class AdditionHelper; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastIntCheckMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + //16-bit or less unsigned addition + __int32 tmp = lhs + rhs; + + if( tmp <= (__int32)IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastUintCheckOverflow > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // 32-bit or less - both are unsigned + unsigned __int32 tmp = (unsigned __int32)lhs + (unsigned __int32)rhs; + + //we added didn't get smaller + if( tmp >= lhs ) + { + result = (T)tmp; + return SafeIntNoError; + } + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastUintCheckOverflowMax> +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // 32-bit or less - both are unsigned + unsigned __int32 tmp = (unsigned __int32)lhs + (unsigned __int32)rhs; + + // We added and it didn't get smaller or exceed maxInt + if( tmp >= lhs && tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastUint64CheckOverflow> +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // lhs unsigned __int64, rhs unsigned + unsigned __int64 tmp = (unsigned __int64)lhs + (unsigned __int64)rhs; + + // We added and it didn't get smaller + if(tmp >= lhs) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastUint64CheckOverflowMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + //lhs unsigned __int64, rhs unsigned + unsigned __int64 tmp = (unsigned __int64)lhs + (unsigned __int64)rhs; + + // We added and it didn't get smaller + if( tmp >= lhs && tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastIntCheckMinMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // 16-bit or less - one or both are signed + __int32 tmp = lhs + rhs; + + if( tmp <= (__int32)IntTraits< T >::maxInt && tmp >= (__int32)IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +#pragma warning(push) +#pragma warning(disable:4702) +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastInt64CheckMinMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // 32-bit or less - one or both are signed + __int64 tmp = (__int64)lhs + (__int64)rhs; + + if( tmp <= (__int64)IntTraits< T >::maxInt && tmp >= (__int64)IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + // return E::SafeIntOnOverflow2(); + } +}; +#pragma warning(pop) + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastInt64CheckMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // 32-bit or less - lhs signed, rhs unsigned + __int64 tmp = (__int64)lhs + (__int64)rhs; + + if( tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastUint64CheckMinMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // lhs is unsigned __int64, rhs signed + unsigned __int64 tmp; + + if( rhs < 0 ) + { + // So we're effectively subtracting + tmp = AbsValueHelper< U >::Abs( rhs ); + + if( tmp <= lhs ) + { + result = lhs - tmp; + return SafeIntNoError; + } + } + else + { + // now we know that rhs can be safely cast into an unsigned __int64 + tmp = (unsigned __int64)lhs + (unsigned __int64)rhs; + + // We added and it did not become smaller + if( tmp >= lhs ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastUint64CheckMinMax2> +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // lhs is unsigned and < 64-bit, rhs signed __int64 + if( rhs < 0 ) + { + if( lhs >= (unsigned __int64)( -rhs ) )//negation is safe, since rhs is 64-bit + { + result = (T)( lhs + rhs ); + return SafeIntNoError; + } + } + else + { + // now we know that rhs can be safely cast into an unsigned __int64 + unsigned __int64 tmp = (unsigned __int64)lhs + (unsigned __int64)rhs; + + // special case - rhs cannot be larger than 0x7fffffffffffffff, lhs cannot be larger than 0xffffffff + // it is not possible for the operation above to overflow, so just check max + if( tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastInt64CheckOverflow> +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // lhs is signed __int64, rhs signed + __int64 tmp = (__int64)lhs + (__int64)rhs; + + if( lhs >= 0 ) + { + // mixed sign cannot overflow + if( rhs >= 0 && tmp < lhs ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + } + else + { + // lhs negative + if( rhs < 0 && tmp > lhs ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + } + + result = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastInt64CheckOverflowMinMax> +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + //rhs is signed __int64, lhs signed + __int64 tmp; + + if( AdditionHelper< __int64, __int64, E, AdditionState_CastInt64CheckOverflow >:: + Addition( (__int64)lhs, (__int64)rhs, tmp ) == SafeIntNoError && + tmp <= IntTraits< T >::maxInt && + tmp >= IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_CastInt64CheckOverflowMax > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + //lhs is signed __int64, rhs unsigned < 64-bit + __int64 tmp = lhs + (__int64)rhs; + + if( tmp >= lhs ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class AdditionHelper < __int64, unsigned __int64, E, AdditionState_ManualCheckInt64Uint64 > +{ +public: + static SafeIntError Addition( const __int64& lhs, const unsigned __int64& rhs, __int64& result ) + { + // rhs is unsigned __int64, lhs __int64 + __int64 tmp = lhs + (__int64)rhs; + + if( tmp >= lhs ) + { + result = tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class AdditionHelper < T, U, E, AdditionState_ManualCheck > +{ +public: + static SafeIntError Addition( const T& lhs, const U& rhs, T& result ) + { + // rhs is unsigned __int64, lhs signed, 32-bit or less + + if( (unsigned __int32)( rhs >> 32 ) == 0 ) + { + // Now it just happens to work out that the standard behavior does what we want + // Adding explicit casts to show exactly what's happening here + __int32 tmp = (__int32)( (unsigned __int32)rhs + (unsigned __int32)lhs ); + + if( tmp >= lhs && + SafeCastHelper< T, __int32, E >::Cast( tmp, result ) == SafeIntNoError ) + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +enum SubtractionState +{ + SubtractionState_BothUnsigned, + SubtractionState_CastIntCheckMinMax, + SubtractionState_CastIntCheckMin, + SubtractionState_CastInt64CheckMinMax, + SubtractionState_CastInt64CheckMin, + SubtractionState_Uint64Int, + SubtractionState_UintInt64, + SubtractionState_Int64Int, + SubtractionState_IntInt64, + SubtractionState_Int64Uint, + SubtractionState_IntUint64, + SubtractionState_Int64Uint64, + // states for SubtractionMethod2 + SubtractionState_BothUnsigned2, + SubtractionState_CastIntCheckMinMax2, + SubtractionState_CastInt64CheckMinMax2, + SubtractionState_Uint64Int2, + SubtractionState_UintInt642, + SubtractionState_Int64Int2, + SubtractionState_IntInt642, + SubtractionState_Int64Uint2, + SubtractionState_IntUint642, + SubtractionState_Int64Uint642, + SubtractionState_Error +}; + +template < typename T, typename U > class SubtractionMethod +{ +public: + enum + { + // unsigned-unsigned + method = ((IntRegion< T,U >::IntZone_UintLT32_UintLT32 || + (IntRegion< T,U >::IntZone_Uint32_UintLT64) || + (IntRegion< T,U >::IntZone_UintLT32_Uint32) || + (IntRegion< T,U >::IntZone_Uint64_Uint) || + (IntRegion< T,U >::IntZone_UintLT64_Uint64)) ? SubtractionState_BothUnsigned : + // unsigned-signed + (IntRegion< T,U >::IntZone_UintLT32_IntLT32) ? SubtractionState_CastIntCheckMinMax : + (IntRegion< T,U >::IntZone_Uint32_IntLT64 || + IntRegion< T,U >::IntZone_UintLT32_Int32) ? SubtractionState_CastInt64CheckMinMax : + (IntRegion< T,U >::IntZone_Uint64_Int || + IntRegion< T,U >::IntZone_Uint64_Int64) ? SubtractionState_Uint64Int : + (IntRegion< T,U >::IntZone_UintLT64_Int64) ? SubtractionState_UintInt64 : + // signed-signed + (IntRegion< T,U >::IntZone_IntLT32_IntLT32) ? SubtractionState_CastIntCheckMinMax : + (IntRegion< T,U >::IntZone_Int32_IntLT64 || + IntRegion< T,U >::IntZone_IntLT32_Int32) ? SubtractionState_CastInt64CheckMinMax : + (IntRegion< T,U >::IntZone_Int64_Int || + IntRegion< T,U >::IntZone_Int64_Int64) ? SubtractionState_Int64Int : + (IntRegion< T,U >::IntZone_IntLT64_Int64) ? SubtractionState_IntInt64 : + // signed-unsigned + (IntRegion< T,U >::IntZone_IntLT32_UintLT32) ? SubtractionState_CastIntCheckMin : + (IntRegion< T,U >::IntZone_Int32_UintLT32 || + IntRegion< T,U >::IntZone_IntLT64_Uint32) ? SubtractionState_CastInt64CheckMin : + (IntRegion< T,U >::IntZone_Int64_UintLT64) ? SubtractionState_Int64Uint : + (IntRegion< T,U >::IntZone_Int_Uint64) ? SubtractionState_IntUint64 : + (IntRegion< T,U >::IntZone_Int64_Uint64) ? SubtractionState_Int64Uint64 : + SubtractionState_Error) + }; +}; + +// this is for the case of U - SafeInt< T, E > +template < typename T, typename U > class SubtractionMethod2 +{ +public: + enum + { + // unsigned-unsigned + method = ((IntRegion< T,U >::IntZone_UintLT32_UintLT32 || + (IntRegion< T,U >::IntZone_Uint32_UintLT64) || + (IntRegion< T,U >::IntZone_UintLT32_Uint32) || + (IntRegion< T,U >::IntZone_Uint64_Uint) || + (IntRegion< T,U >::IntZone_UintLT64_Uint64)) ? SubtractionState_BothUnsigned2 : + // unsigned-signed + (IntRegion< T,U >::IntZone_UintLT32_IntLT32) ? SubtractionState_CastIntCheckMinMax2 : + (IntRegion< T,U >::IntZone_Uint32_IntLT64 || + IntRegion< T,U >::IntZone_UintLT32_Int32) ? SubtractionState_CastInt64CheckMinMax2 : + (IntRegion< T,U >::IntZone_Uint64_Int || + IntRegion< T,U >::IntZone_Uint64_Int64) ? SubtractionState_Uint64Int2 : + (IntRegion< T,U >::IntZone_UintLT64_Int64) ? SubtractionState_UintInt642 : + // signed-signed + (IntRegion< T,U >::IntZone_IntLT32_IntLT32) ? SubtractionState_CastIntCheckMinMax2 : + (IntRegion< T,U >::IntZone_Int32_IntLT64 || + IntRegion< T,U >::IntZone_IntLT32_Int32) ? SubtractionState_CastInt64CheckMinMax2 : + (IntRegion< T,U >::IntZone_Int64_Int || + IntRegion< T,U >::IntZone_Int64_Int64) ? SubtractionState_Int64Int2 : + (IntRegion< T,U >::IntZone_IntLT64_Int64) ? SubtractionState_IntInt642 : + // signed-unsigned + (IntRegion< T,U >::IntZone_IntLT32_UintLT32) ? SubtractionState_CastIntCheckMinMax2 : + (IntRegion< T,U >::IntZone_Int32_UintLT32 || + IntRegion< T,U >::IntZone_IntLT64_Uint32) ? SubtractionState_CastInt64CheckMinMax2 : + (IntRegion< T,U >::IntZone_Int64_UintLT64) ? SubtractionState_Int64Uint2 : + (IntRegion< T,U >::IntZone_Int_Uint64) ? SubtractionState_IntUint642 : + (IntRegion< T,U >::IntZone_Int64_Uint64) ? SubtractionState_Int64Uint642 : + SubtractionState_Error) + }; +}; + +template < typename T, typename U, typename E, int Method = SubtractionMethod< T, U >::method > class SubtractionHelper; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_BothUnsigned > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // both are unsigned - easy case + if( rhs <= lhs ) + { + result = (T)( lhs - rhs ); + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_BothUnsigned2 > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, U& result ) + { + // both are unsigned - easy case + // Except we do have to check for overflow - lhs could be larger than result can hold + if( rhs <= lhs ) + { + T tmp = (T)(lhs - rhs); + return SafeCastHelper< U, T, E>::Cast( tmp, result); + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_CastIntCheckMinMax > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // both values are 16-bit or less + // rhs is signed, so could end up increasing or decreasing + __int32 tmp = lhs - rhs; + + if( SafeCastHelper< T, __int32, E >::Cast( tmp, result ) == SafeIntNoError ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_CastIntCheckMinMax2 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // both values are 16-bit or less + // rhs is signed, so could end up increasing or decreasing + __int32 tmp = lhs - rhs; + + return SafeCastHelper< T, __int32, E >::Cast( tmp, result ); + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_CastIntCheckMin > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // both values are 16-bit or less + // rhs is unsigned - check only minimum + __int32 tmp = lhs - rhs; + + if( tmp >= (__int32)IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_CastInt64CheckMinMax > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // both values are 32-bit or less + // rhs is signed, so could end up increasing or decreasing + __int64 tmp = (__int64)lhs - (__int64)rhs; + + return SafeCastHelper< T, __int64, E >::Cast( tmp, result ); + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_CastInt64CheckMinMax2 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // both values are 32-bit or less + // rhs is signed, so could end up increasing or decreasing + __int64 tmp = (__int64)lhs - (__int64)rhs; + + return SafeCastHelper< T, __int64, E >::Cast( tmp, result ); + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_CastInt64CheckMin > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // both values are 32-bit or less + // rhs is unsigned - check only minimum + __int64 tmp = (__int64)lhs - (__int64)rhs; + + if( tmp >= (__int64)IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_Uint64Int > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // lhs is an unsigned __int64, rhs signed + // must first see if rhs is positive or negative + if( rhs >= 0 ) + { + if( (unsigned __int64)rhs <= lhs ) + { + result = (T)( lhs - (unsigned __int64)rhs ); + return SafeIntNoError; + } + } + else + { + // we're now effectively adding + T tmp = lhs + AbsValueHelper< U >::Abs( rhs ); + + if(tmp >= lhs) + { + result = tmp; + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_Uint64Int2 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // U is unsigned __int64, T is signed + if( rhs < 0 ) + { + // treat this as addition + unsigned __int64 tmp; + + tmp = lhs + (unsigned __int64)AbsValueHelper< T >::Abs( rhs ); + + // must check for addition overflow and max + if( tmp >= lhs && tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + else if( (unsigned __int64)rhs > lhs ) // now both are positive, so comparison always works + { + // result is negative + // implies that lhs must fit into T, and result cannot overflow + // Also allows us to drop to 32-bit math, which is faster on a 32-bit system + result = (T)lhs - (T)rhs; + return SafeIntNoError; + } + else + { + // result is positive + unsigned __int64 tmp = (unsigned __int64)lhs - (unsigned __int64)rhs; + + if( tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_UintInt64 > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // lhs is an unsigned int32 or smaller, rhs signed __int64 + // must first see if rhs is positive or negative + if( rhs >= 0 ) + { + if( (unsigned __int64)rhs <= lhs ) + { + result = (T)( lhs - (T)rhs ); + return SafeIntNoError; + } + } + else + { + // we're now effectively adding + // since lhs is 32-bit, and rhs cannot exceed 2^63 + // this addition cannot overflow + unsigned __int64 tmp = lhs + (unsigned __int64)( -rhs ); // negation safe + + // but we could exceed MaxInt + if(tmp <= IntTraits< T >::maxInt) + { + result = (T)tmp; + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_UintInt642 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // U unsigned 32-bit or less, T __int64 + if( rhs >= 0 ) + { + // overflow not possible + result = (T)( (__int64)lhs - rhs ); + return SafeIntNoError; + } + else + { + // we effectively have an addition + // which cannot overflow internally + unsigned __int64 tmp = (unsigned __int64)lhs + (unsigned __int64)( -rhs ); + + if( tmp <= (unsigned __int64)IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_Int64Int > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // lhs is an __int64, rhs signed (up to 64-bit) + // we have essentially 4 cases: + // + // 1) lhs positive, rhs positive - overflow not possible + // 2) lhs positive, rhs negative - equivalent to addition - result >= lhs or error + // 3) lhs negative, rhs positive - check result <= lhs + // 4) lhs negative, rhs negative - overflow not possible + + __int64 tmp = lhs - rhs; + + // Note - ideally, we can order these so that true conditionals + // lead to success, which enables better pipelining + // It isn't practical here + if( ( lhs >= 0 && rhs < 0 && tmp < lhs ) || // condition 2 + ( rhs >= 0 && tmp > lhs ) ) // condition 3 + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + + result = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_Int64Int2 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // lhs __int64, rhs any signed int (including __int64) + __int64 tmp = lhs - rhs; + + // we have essentially 4 cases: + // + // 1) lhs positive, rhs positive - overflow not possible in tmp + // 2) lhs positive, rhs negative - equivalent to addition - result >= lhs or error + // 3) lhs negative, rhs positive - check result <= lhs + // 4) lhs negative, rhs negative - overflow not possible in tmp + + if( lhs >= 0 ) + { + // if both positive, overflow to negative not possible + // which is why we'll explicitly check maxInt, and not call SafeCast +#pragma warning(suppress:4127) + if( ( IntTraits< T >::isLT64Bit && tmp > IntTraits< T >::maxInt ) || + ( rhs < 0 && tmp < lhs ) ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + } + else + { + // lhs negative +#pragma warning(suppress:4127) + if( ( IntTraits< T >::isLT64Bit && tmp < IntTraits< T >::minInt) || + ( rhs >=0 && tmp > lhs ) ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } + } + + result = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_IntInt64 > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // lhs is a 32-bit int or less, rhs __int64 + // we have essentially 4 cases: + // + // lhs positive, rhs positive - rhs could be larger than lhs can represent + // lhs positive, rhs negative - additive case - check tmp >= lhs and tmp > max int + // lhs negative, rhs positive - check tmp <= lhs and tmp < min int + // lhs negative, rhs negative - addition cannot internally overflow, check against max + + __int64 tmp = (__int64)lhs - rhs; + + if( lhs >= 0 ) + { + // first case + if( rhs >= 0 ) + { + if( tmp >= IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + else + { + // second case + if( tmp >= lhs && tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + } + else + { + // lhs < 0 + // third case + if( rhs >= 0 ) + { + if( tmp <= lhs && tmp >= IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + else + { + // fourth case + if( tmp <= IntTraits< T >::maxInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_IntInt642 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // lhs is any signed int32 or smaller, rhs is int64 + __int64 tmp = (__int64)lhs - rhs; + + if( ( lhs >= 0 && rhs < 0 && tmp < lhs ) || + ( rhs > 0 && tmp > lhs ) ) + { + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + //else OK + } + + result = (T)tmp; + return SafeIntNoError; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_Int64Uint > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // lhs is a 64-bit int, rhs unsigned int32 or smaller + + __int64 tmp = lhs - (__int64)rhs; + + if( tmp <= lhs ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_Int64Uint2 > +{ +public: + // lhs is __int64, rhs is unsigned 32-bit or smaller + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + __int64 tmp = lhs - (__int64)rhs; + + if( tmp <= IntTraits< T >::maxInt && tmp >= IntTraits< T >::minInt ) + { + result = (T)tmp; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename T, typename U, typename E > class SubtractionHelper< T, U, E, SubtractionState_IntUint64 > +{ +public: + static SafeIntError Subtract( const T& lhs, const U& rhs, T& result ) + { + // lhs is any signed int, rhs unsigned int64 + // check against available range + + // We need the absolute value of IntTraits< T >::minInt + // This will give it to us without extraneous compiler warnings + const unsigned __int64 AbsMinIntT = (unsigned __int64)IntTraits< T >::maxInt + 1; + + if( lhs < 0 ) + { + if( rhs <= AbsMinIntT - AbsValueHelper< T >::Abs( lhs ) ) + { + result = (T)( lhs - rhs ); + return SafeIntNoError; + } + } + else + { + if( rhs <= AbsMinIntT + (unsigned __int64)lhs ) + { + result = (T)( lhs - rhs ); + return SafeIntNoError; + } + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename U, typename T, typename E > class SubtractionHelper< U, T, E, SubtractionState_IntUint642 > +{ +public: + static SafeIntError Subtract( const U& lhs, const T& rhs, T& result ) + { + // We run into upcasting problems on comparison - needs 2 checks + if( lhs >= 0 && (T)lhs >= rhs ) + { + result = (T)((U)lhs - (U)rhs); + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class SubtractionHelper< __int64, unsigned __int64, E, SubtractionState_Int64Uint64 > +{ +public: + static SafeIntError Subtract( const __int64& lhs, const unsigned __int64& rhs, __int64& result ) + { + // if we subtract, and it gets larger, there's a problem + __int64 tmp = lhs - (__int64)rhs; + + if( tmp <= lhs ) + { + result = tmp; + return SafeIntNoError; + } + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +template < typename E > class SubtractionHelper< __int64, unsigned __int64, E, SubtractionState_Int64Uint642 > +{ +public: + // If lhs is negative, immediate problem - return must be positive, and subtracting only makes it + // get smaller. If rhs > lhs, then it would also go negative, which is the other case + static SafeIntError Subtract( const __int64& lhs, const unsigned __int64& rhs, unsigned __int64& result ) + { + if( lhs >= 0 && (unsigned __int64)lhs >= rhs ) + { + result = (unsigned __int64)lhs - rhs; + return SafeIntNoError; + } + + E::SafeIntOnOverflow(); + return SafeIntArithmeticOverflow; + } +}; + +enum BinaryState +{ + BinaryState_OK, + BinaryState_Int8, + BinaryState_Int16, + BinaryState_Int32 +}; + +template < typename T, typename U > class BinaryMethod +{ +public: + enum + { + // If both operands are unsigned OR + // return type is smaller than rhs OR + // return type is larger and rhs is unsigned + // Then binary operations won't produce unexpected results + method = ( sizeof( T ) <= sizeof( U ) || + SafeIntCompare< T, U >::isBothUnsigned || + !IntTraits< U >::isSigned ) ? BinaryState_OK : + IntTraits< U >::isInt8 ? BinaryState_Int8 : + IntTraits< U >::isInt16 ? BinaryState_Int16 + : BinaryState_Int32 + }; +}; + +template < typename T, typename U, int Method = BinaryMethod< T, U >::method > class BinaryAndHelper; + +template < typename T, typename U > class BinaryAndHelper< T, U, BinaryState_OK > +{ +public: + static T And( T lhs, U rhs ){ return (T)( lhs & rhs ); } +}; + +template < typename T, typename U > class BinaryAndHelper< T, U, BinaryState_Int8 > +{ +public: + static T And( T lhs, U rhs ) + { + // cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs & rhs ) == ( lhs & (unsigned __int8)rhs ) ); + return (T)( lhs & (unsigned __int8)rhs ); + } +}; + +template < typename T, typename U > class BinaryAndHelper< T, U, BinaryState_Int16 > +{ +public: + static T And( T lhs, U rhs ) + { + //cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs & rhs ) == ( lhs & (unsigned __int16)rhs ) ); + return (T)( lhs & (unsigned __int16)rhs ); + } +}; + +template < typename T, typename U > class BinaryAndHelper< T, U, BinaryState_Int32 > +{ +public: + static T And( T lhs, U rhs ) + { + //cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs & rhs ) == ( lhs & (unsigned __int32)rhs ) ); + return (T)( lhs & (unsigned __int32)rhs ); + } +}; + +template < typename T, typename U, int Method = BinaryMethod< T, U >::method > class BinaryOrHelper; + +template < typename T, typename U > class BinaryOrHelper< T, U, BinaryState_OK > +{ +public: + static T Or( T lhs, U rhs ){ return (T)( lhs | rhs ); } +}; + +template < typename T, typename U > class BinaryOrHelper< T, U, BinaryState_Int8 > +{ +public: + static T Or( T lhs, U rhs ) + { + //cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs | rhs ) == ( lhs | (unsigned __int8)rhs ) ); + return (T)( lhs | (unsigned __int8)rhs ); + } +}; + +template < typename T, typename U > class BinaryOrHelper< T, U, BinaryState_Int16 > +{ +public: + static T Or( T lhs, U rhs ) + { + //cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs | rhs ) == ( lhs | (unsigned __int16)rhs ) ); + return (T)( lhs | (unsigned __int16)rhs ); + } +}; + +template < typename T, typename U > class BinaryOrHelper< T, U, BinaryState_Int32 > +{ +public: + static T Or( T lhs, U rhs ) + { + //cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs | rhs ) == ( lhs | (unsigned __int32)rhs ) ); + return (T)( lhs | (unsigned __int32)rhs ); + } +}; + +template ::method > class BinaryXorHelper; + +template < typename T, typename U > class BinaryXorHelper< T, U, BinaryState_OK > +{ +public: + static T Xor( T lhs, U rhs ){ return (T)( lhs ^ rhs ); } +}; + +template < typename T, typename U > class BinaryXorHelper< T, U, BinaryState_Int8 > +{ +public: + static T Xor( T lhs, U rhs ) + { + // cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs ^ rhs ) == ( lhs ^ (unsigned __int8)rhs ) ); + return (T)( lhs ^ (unsigned __int8)rhs ); + } +}; + +template < typename T, typename U > class BinaryXorHelper< T, U, BinaryState_Int16 > +{ +public: + static T Xor( T lhs, U rhs ) + { + // cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs ^ rhs ) == ( lhs ^ (unsigned __int16)rhs ) ); + return (T)( lhs ^ (unsigned __int16)rhs ); + } +}; + +template < typename T, typename U > class BinaryXorHelper< T, U, BinaryState_Int32 > +{ +public: + static T Xor( T lhs, U rhs ) + { + // cast forces sign extension to be zeros + _SAFEINT_BINARY_ASSERT( ( lhs ^ rhs ) == ( lhs ^ (unsigned __int32)rhs ) ); + return (T)( lhs ^ (unsigned __int32)rhs ); + } +}; + +#pragma warning(pop) +} // namespace details + +} // namespace utilities + +} // namespace msl + +#pragma pack(pop) diff --git a/sdk/include/ucrt/search.h b/sdk/include/ucrt/search.h new file mode 100644 index 0000000000000..c05389865bcd6 --- /dev/null +++ b/sdk/include/ucrt/search.h @@ -0,0 +1,13 @@ +// +// search.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Declarations of functions for sorting and searching. +// +#pragma once +#ifndef _INC_SEARCH // include guard for 3rd party interop +#define _INC_SEARCH + +#include +#endif // _INC_SEARCH diff --git a/sdk/include/ucrt/share.h b/sdk/include/ucrt/share.h new file mode 100644 index 0000000000000..0d1524741f9d1 --- /dev/null +++ b/sdk/include/ucrt/share.h @@ -0,0 +1,13 @@ +// +// share.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Defines the file sharing modes for the sopen() family of functions. +// +#pragma once +#ifndef _INC_SHARE // include guard for 3rd party interop +#define _INC_SHARE + +#include +#endif // _INC_SHARE diff --git a/sdk/include/ucrt/signal.h b/sdk/include/ucrt/signal.h new file mode 100644 index 0000000000000..aadc00e85db3e --- /dev/null +++ b/sdk/include/ucrt/signal.h @@ -0,0 +1,72 @@ +// +// stdio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_SIGNAL // include guard for 3rd party interop +#define _INC_SIGNAL + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +typedef int sig_atomic_t; + +typedef void (__CRTDECL* _crt_signal_t)(int); + +#define NSIG 23 // maximum signal number + 1 + +// Signal types +#define SIGINT 2 // interrupt +#define SIGILL 4 // illegal instruction - invalid function image +#define SIGFPE 8 // floating point exception +#define SIGSEGV 11 // segment violation +#define SIGTERM 15 // Software termination signal from kill +#define SIGBREAK 21 // Ctrl-Break sequence +#define SIGABRT 22 // abnormal termination triggered by abort call + +#define SIGABRT_COMPAT 6 // SIGABRT compatible with other platforms, same as SIGABRT + +// Signal action codes +#define SIG_DFL ((_crt_signal_t)0) // default signal action +#define SIG_IGN ((_crt_signal_t)1) // ignore signal +#define SIG_GET ((_crt_signal_t)2) // return current value +#define SIG_SGE ((_crt_signal_t)3) // signal gets error +#define SIG_ACK ((_crt_signal_t)4) // acknowledge + +#ifdef _CORECRT_BUILD + // Internal use only! Not valid as an argument to signal(). + #define SIG_DIE ((_crt_signal_t)5) // terminate process +#endif + +// Signal error value (returned by signal call on error) +#define SIG_ERR ((_crt_signal_t)-1) // signal error value + + + +// Pointer to exception information pointers structure +_ACRTIMP void** __cdecl __pxcptinfoptrs(void); +#define _pxcptinfoptrs (*__pxcptinfoptrs()) + +// Function prototypes +#ifndef _M_CEE_PURE + _ACRTIMP _crt_signal_t __cdecl signal(_In_ int _Signal, _In_opt_ _crt_signal_t _Function); +#endif + +_ACRTIMP int __cdecl raise(_In_ int _Signal); + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_SIGNAL diff --git a/sdk/include/ucrt/stdalign.h b/sdk/include/ucrt/stdalign.h new file mode 100644 index 0000000000000..a00a724f74144 --- /dev/null +++ b/sdk/include/ucrt/stdalign.h @@ -0,0 +1,31 @@ +// +// stdalign.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_STDALIGN // include guard for 3rd party interop +#define _INC_STDALIGN + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS +_CRT_BEGIN_C_HEADER + +#if _CRT_HAS_C11 + +#define alignas _Alignas +#define alignof _Alignof +#define __alignas_is_defined 1 +#define __alignof_is_defined 1 + +#endif // _CRT_HAS_C11 + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_STDALIGN diff --git a/sdk/include/ucrt/stddef.h b/sdk/include/ucrt/stddef.h new file mode 100644 index 0000000000000..53fa61c8f52e3 --- /dev/null +++ b/sdk/include/ucrt/stddef.h @@ -0,0 +1,64 @@ +// +// stddef.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_STDDEF // include guard for 3rd party interop +#define _INC_STDDEF + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#ifdef __cplusplus + namespace std + { + typedef decltype(__nullptr) nullptr_t; + } + + using ::std::nullptr_t; +#endif + + + +#if _CRT_FUNCTIONS_REQUIRED + + _ACRTIMP int* __cdecl _errno(void); + #define errno (*_errno()) + + _ACRTIMP errno_t __cdecl _set_errno(_In_ int _Value); + _ACRTIMP errno_t __cdecl _get_errno(_Out_ int* _Value); + +#endif // _CRT_FUNCTIONS_REQUIRED + + + +#if defined _MSC_VER && !defined _CRT_USE_BUILTIN_OFFSETOF + #ifdef __cplusplus + #define offsetof(s,m) ((::size_t)&reinterpret_cast((((s*)0)->m))) + #else + #define offsetof(s,m) ((size_t)&(((s*)0)->m)) + #endif +#else + #define offsetof(s,m) __builtin_offsetof(s,m) +#endif + +_ACRTIMP extern unsigned long __cdecl __threadid(void); +#define _threadid (__threadid()) +_ACRTIMP extern uintptr_t __cdecl __threadhandle(void); + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_STDDEF diff --git a/sdk/include/ucrt/stdio.h b/sdk/include/ucrt/stdio.h new file mode 100644 index 0000000000000..0fffddf1526fc --- /dev/null +++ b/sdk/include/ucrt/stdio.h @@ -0,0 +1,2448 @@ +// +// stdio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_STDIO // include guard for 3rd party interop +#define _INC_STDIO + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +/* Buffered I/O macros */ + +#define BUFSIZ 512 + + + +/* + * Default number of supported streams. _NFILE is confusing and obsolete, but + * supported anyway for backwards compatibility. + */ +#define _NFILE _NSTREAM_ + +#define _NSTREAM_ 512 + +/* + * Number of entries in _iob[] (declared below). Note that _NSTREAM_ must be + * greater than or equal to _IOB_ENTRIES. + */ +#define _IOB_ENTRIES 3 + +#define EOF (-1) + +#define _IOFBF 0x0000 +#define _IOLBF 0x0040 +#define _IONBF 0x0004 + + + +#define L_tmpnam 260 // _MAX_PATH +#if __STDC_WANT_SECURE_LIB__ + #define L_tmpnam_s L_tmpnam +#endif + + + +/* Seek method constants */ + +#define SEEK_CUR 1 +#define SEEK_END 2 +#define SEEK_SET 0 + + +#define FILENAME_MAX 260 +#define FOPEN_MAX 20 +#define _SYS_OPEN 20 +#define TMP_MAX _CRT_INT_MAX +#if __STDC_WANT_SECURE_LIB__ + #define TMP_MAX_S TMP_MAX + #define _TMP_MAX_S TMP_MAX +#endif + + +typedef __int64 fpos_t; + + + +#if _CRT_FUNCTIONS_REQUIRED + + _Check_return_opt_ + _ACRTIMP errno_t __cdecl _get_stream_buffer_pointers( + _In_ FILE* _Stream, + _Out_opt_ char*** _Base, + _Out_opt_ char*** _Pointer, + _Out_opt_ int** _Count + ); + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Stream I/O Functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl clearerr_s( + _Inout_ FILE* _Stream + ); + + _Check_return_wat_ + _Success_(return == 0) + _ACRTIMP errno_t __cdecl fopen_s( + _Outptr_result_nullonfailure_ FILE** _Stream, + _In_z_ char const* _FileName, + _In_z_ char const* _Mode + ); + + _Check_return_opt_ + _Success_(return != 0) + _ACRTIMP size_t __cdecl fread_s( + _Out_writes_bytes_to_(_BufferSize, _ElementSize * _ElementCount) void* _Buffer, + _In_range_(>=, _ElementSize * _ElementCount) size_t _BufferSize, + _In_ size_t _ElementSize, + _In_ size_t _ElementCount, + _Inout_ FILE* _Stream + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl freopen_s( + _Outptr_result_maybenull_ FILE** _Stream, + _In_z_ char const* _FileName, + _In_z_ char const* _Mode, + _Inout_ FILE* _OldStream + ); + + _Success_(return != 0) + _ACRTIMP char* __cdecl gets_s( + _Out_writes_z_(_Size) char* _Buffer, + _In_ rsize_t _Size + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl tmpfile_s( + _Out_opt_ _Deref_post_valid_ FILE** _Stream + ); + + _Success_(return == 0) + _Check_return_wat_ + _ACRTIMP errno_t __cdecl tmpnam_s( + _Out_writes_z_(_Size) char* _Buffer, + _In_ rsize_t _Size + ); + + #endif + + _ACRTIMP void __cdecl clearerr( + _Inout_ FILE* _Stream + ); + + _Success_(return != -1) + _Check_return_opt_ + _ACRTIMP int __cdecl fclose( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _fcloseall(void); + + _Check_return_ + _ACRTIMP FILE* __cdecl _fdopen( + _In_ int _FileHandle, + _In_z_ char const* _Mode + ); + + _Check_return_ + _ACRTIMP int __cdecl feof( + _In_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP int __cdecl ferror( + _In_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl fflush( + _Inout_opt_ FILE* _Stream + ); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl fgetc( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _fgetchar(void); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl fgetpos( + _Inout_ FILE* _Stream, + _Out_ fpos_t* _Position + ); + + _Success_(return == _Buffer) + _Check_return_opt_ + _ACRTIMP char* __cdecl fgets( + _Out_writes_z_(_MaxCount) char* _Buffer, + _In_ int _MaxCount, + _Inout_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP int __cdecl _fileno( + _In_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _flushall(void); + + _Check_return_ _CRT_INSECURE_DEPRECATE(fopen_s) + _ACRTIMP FILE* __cdecl fopen( + _In_z_ char const* _FileName, + _In_z_ char const* _Mode + ); + + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl fputc( + _In_ int _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _fputchar( + _In_ int _Character + ); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl fputs( + _In_z_ char const* _Buffer, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP size_t __cdecl fread( + _Out_writes_bytes_(_ElementSize * _ElementCount) void* _Buffer, + _In_ size_t _ElementSize, + _In_ size_t _ElementCount, + _Inout_ FILE* _Stream + ); + + _Success_(return != 0) + _Check_return_ _CRT_INSECURE_DEPRECATE(freopen_s) + _ACRTIMP FILE* __cdecl freopen( + _In_z_ char const* _FileName, + _In_z_ char const* _Mode, + _Inout_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP FILE* __cdecl _fsopen( + _In_z_ char const* _FileName, + _In_z_ char const* _Mode, + _In_ int _ShFlag + ); + + _Success_(return == 0) + _Check_return_opt_ + _ACRTIMP int __cdecl fsetpos( + _Inout_ FILE* _Stream, + _In_ fpos_t const* _Position + ); + + _Success_(return == 0) + _Check_return_opt_ + _ACRTIMP int __cdecl fseek( + _Inout_ FILE* _Stream, + _In_ long _Offset, + _In_ int _Origin + ); + + _Success_(return == 0) + _Check_return_opt_ + _ACRTIMP int __cdecl _fseeki64( + _Inout_ FILE* _Stream, + _In_ __int64 _Offset, + _In_ int _Origin + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP long __cdecl ftell( + _Inout_ FILE* _Stream + ); + + _Success_(return != -1) + _Check_return_ + _ACRTIMP __int64 __cdecl _ftelli64( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP size_t __cdecl fwrite( + _In_reads_bytes_(_ElementSize * _ElementCount) void const* _Buffer, + _In_ size_t _ElementSize, + _In_ size_t _ElementCount, + _Inout_ FILE* _Stream + ); + + _Success_(return != EOF) + _Check_return_ + _ACRTIMP int __cdecl getc( + _Inout_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP int __cdecl getchar(void); + + _Check_return_ + _ACRTIMP int __cdecl _getmaxstdio(void); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + char*, gets_s, + char, _Buffer) + + _Check_return_ + _ACRTIMP int __cdecl _getw( + _Inout_ FILE* _Stream + ); + + _ACRTIMP void __cdecl perror( + _In_opt_z_ char const* _ErrorMessage + ); + + #if defined _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _Success_(return != -1) + _Check_return_opt_ + _DCRTIMP int __cdecl _pclose( + _Inout_ FILE* _Stream + ); + + _Check_return_ + _DCRTIMP FILE* __cdecl _popen( + _In_z_ char const* _Command, + _In_z_ char const* _Mode + ); + + #endif + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl putc( + _In_ int _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl putchar( + _In_ int _Character + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl puts( + _In_z_ char const* _Buffer + ); + + _Success_(return != -1) + _Check_return_opt_ + _ACRTIMP int __cdecl _putw( + _In_ int _Word, + _Inout_ FILE* _Stream + ); + + _ACRTIMP int __cdecl remove( + _In_z_ char const* _FileName + ); + + _Check_return_ + _ACRTIMP int __cdecl rename( + _In_z_ char const* _OldFileName, + _In_z_ char const* _NewFileName + ); + + _ACRTIMP int __cdecl _unlink( + _In_z_ char const* _FileName + ); + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + _CRT_NONSTDC_DEPRECATE(_unlink) + _ACRTIMP int __cdecl unlink( + _In_z_ char const* _FileName + ); + + #endif + + _ACRTIMP void __cdecl rewind( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _rmtmp(void); + + _CRT_INSECURE_DEPRECATE(setvbuf) + _ACRTIMP void __cdecl setbuf( + _Inout_ FILE* _Stream, + _Inout_updates_opt_(BUFSIZ) _Post_readable_size_(0) char* _Buffer + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _setmaxstdio( + _In_ int _Maximum + ); + + _Success_(return == 0) + _Check_return_opt_ + _ACRTIMP int __cdecl setvbuf( + _Inout_ FILE* _Stream, + _Inout_updates_opt_(_Size) char* _Buffer, + _In_ int _Mode, + _In_ size_t _Size + ); + + #if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma push_macro("_tempnam") + #undef _tempnam + #endif + + _Check_return_ + _ACRTIMP _CRTALLOCATOR char* __cdecl _tempnam( + _In_opt_z_ char const* _DirectoryName, + _In_opt_z_ char const* _FilePrefix + ); + + #if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma pop_macro("_tempnam") + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(tmpfile_s) + _ACRTIMP FILE* __cdecl tmpfile(void); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + _Success_(return == 0) + errno_t, tmpnam_s, + _Always_(_Post_z_) char, _Buffer + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + _Success_(return != 0) + char*, __RETURN_POLICY_DST, _ACRTIMP, tmpnam, + _Pre_maybenull_ _Always_(_Post_z_), char, _Buffer + ) + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl ungetc( + _In_ int _Character, + _Inout_ FILE* _Stream + ); + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // I/O Synchronization and _nolock family of I/O functions + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _ACRTIMP void __cdecl _lock_file( + _Inout_ FILE* _Stream + ); + + _ACRTIMP void __cdecl _unlock_file( + _Inout_ FILE* _Stream + ); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl _fclose_nolock( + _Inout_ FILE* _Stream + ); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl _fflush_nolock( + _Inout_opt_ FILE* _Stream + ); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl _fgetc_nolock( + _Inout_ FILE* _Stream + ); + + _Success_(return != EOF) + _Check_return_opt_ + _ACRTIMP int __cdecl _fputc_nolock( + _In_ int _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP size_t __cdecl _fread_nolock( + _Out_writes_bytes_(_ElementSize * _ElementCount) void* _Buffer, + _In_ size_t _ElementSize, + _In_ size_t _ElementCount, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _Success_(return != 0) + _ACRTIMP size_t __cdecl _fread_nolock_s( + _Out_writes_bytes_to_(_BufferSize, _ElementSize * _ElementCount) void* _Buffer, + _In_range_(>=, _ElementSize * _ElementCount) size_t _BufferSize, + _In_ size_t _ElementSize, + _In_ size_t _ElementCount, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _fseek_nolock( + _Inout_ FILE* _Stream, + _In_ long _Offset, + _In_ int _Origin + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _fseeki64_nolock( + _Inout_ FILE* _Stream, + _In_ __int64 _Offset, + _In_ int _Origin + ); + + _Check_return_ + _ACRTIMP long __cdecl _ftell_nolock( + _Inout_ FILE* _Stream + ); + + _Check_return_ + _ACRTIMP __int64 __cdecl _ftelli64_nolock( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP size_t __cdecl _fwrite_nolock( + _In_reads_bytes_(_ElementSize * _ElementCount) void const* _Buffer, + _In_ size_t _ElementSize, + _In_ size_t _ElementCount, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _getc_nolock( + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _putc_nolock( + _In_ int _Character, + _Inout_ FILE* _Stream + ); + + _Check_return_opt_ + _ACRTIMP int __cdecl _ungetc_nolock( + _In_ int _Character, + _Inout_ FILE* _Stream + ); + + #define _getchar_nolock() _getc_nolock(stdin) + #define _putchar_nolock(_Ch) _putc_nolock(_Ch, stdout) + #define _getwchar_nolock() _getwc_nolock(stdin) + #define _putwchar_nolock(_Ch) _putwc_nolock(_Ch, stdout) + + + + #if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL + #define fclose(_Stream) _fclose_nolock(_Stream) + #define fflush(_Stream) _fflush_nolock(_Stream) + #define fgetc(_Stream) _fgetc_nolock(_Stream) + #define fputc(_Ch, _Stream) _fputc_nolock(_Ch, _Stream) + #define fread(_DstBuf, _ElementSize, _Count, _Stream) _fread_nolock(_DstBuf, _ElementSize, _Count, _Stream) + #define fread_s(_DstBuf, _DstSize, _ElementSize, _Count, _Stream) _fread_nolock_s(_DstBuf, _DstSize, _ElementSize, _Count, _Stream) + #define fseek(_Stream, _Offset, _Origin) _fseek_nolock(_Stream, _Offset, _Origin) + #define _fseeki64(_Stream, _Offset, _Origin) _fseeki64_nolock(_Stream, _Offset, _Origin) + #define ftell(_Stream) _ftell_nolock(_Stream) + #define _ftelli64(_Stream) _ftelli64_nolock(_Stream) + #define fwrite(_SrcBuf, _ElementSize, _Count, _Stream) _fwrite_nolock(_SrcBuf, _ElementSize, _Count, _Stream) + #define getc(_Stream) _getc_nolock(_Stream) + #define putc(_Ch, _Stream) _putc_nolock(_Ch, _Stream) + #define ungetc(_Ch, _Stream) _ungetc_nolock(_Ch, _Stream) + #endif + + + + _ACRTIMP int* __cdecl __p__commode(void); + + #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + extern int _commode; + #else + #define _commode (*__p__commode()) + #endif + + + + // Variadic functions are not supported in managed code under /clr + #if defined _M_CEE_MIXED + #pragma managed(push, off) + #endif + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Formatted Output Functions (Stream) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _ACRTIMP int __cdecl __stdio_common_vfprintf( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _ACRTIMP int __cdecl __stdio_common_vfprintf_s( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _ACRTIMP int __cdecl __stdio_common_vfprintf_p( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfprintf_l( + _Inout_ FILE* const _Stream, + _In_z_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfprintf( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfprintf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfprintf_s(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfprintf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_s_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfprintf_p_l( + _Inout_ FILE* const _Stream, + _In_z_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfprintf_p(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, _Stream, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfprintf_p( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_p_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vprintf_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_l(stdout, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vprintf( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_l(stdout, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vprintf_s_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_s_l(stdout, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vprintf_s( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_s_l(stdout, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vprintf_p_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_p_l(stdout, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vprintf_p( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfprintf_p_l(stdout, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fprintf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfprintf_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL fprintf( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfprintf_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _ACRTIMP int __cdecl _set_printf_count_output( + _In_ int _Value + ); + + _ACRTIMP int __cdecl _get_printf_count_output(void); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fprintf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfprintf_s_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL fprintf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfprintf_s_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fprintf_p_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfprintf_p_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fprintf_p( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfprintf_p_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _printf_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfprintf_l(stdout, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL printf( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfprintf_l(stdout, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _printf_s_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfprintf_s_l(stdout, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL printf_s( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfprintf_s_l(stdout, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _printf_p_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfprintf_p_l(stdout, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _printf_p( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfprintf_p_l(stdout, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Formatted Input Functions (Stream) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _ACRTIMP int __cdecl __stdio_common_vfscanf( + _In_ unsigned __int64 _Options, + _Inout_ FILE* _Stream, + _In_z_ _Scanf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _Arglist + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfscanf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Stream, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfscanf( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfscanf_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vfscanf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vfscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Stream, _Format, _Locale, _ArgList); + } + #endif + + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vfscanf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfscanf_s_l(_Stream, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vscanf_l( + _In_z_ _Printf_format_string_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfscanf_l(stdin, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vscanf( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfscanf_l(stdin, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vscanf_s_l( + _In_z_ _Printf_format_string_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfscanf_s_l(stdin, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vscanf_s( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vfscanf_s_l(stdin, _Format, NULL, _ArgList); + } + #endif + + #endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_fscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _fscanf_l( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfscanf_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(fscanf_s) + _CRT_STDIO_INLINE int __CRTDECL fscanf( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfscanf_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _fscanf_s_l( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_s_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfscanf_s_l(_Stream, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL fscanf_s( + _Inout_ FILE* const _Stream, + _In_z_ _Scanf_s_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfscanf_s_l(_Stream, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_scanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _scanf_l( + _In_z_ _Scanf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfscanf_l(stdin, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(scanf_s) + _CRT_STDIO_INLINE int __CRTDECL scanf( + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfscanf_l(stdin, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _scanf_s_l( + _In_z_ _Scanf_s_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vfscanf_s_l(stdin, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL scanf_s( + _In_z_ _Scanf_s_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vfscanf_s_l(stdin, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Formatted Output Functions (String) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _Success_(return >= 0) + _ACRTIMP int __cdecl __stdio_common_vsprintf( + _In_ unsigned __int64 _Options, + _Out_writes_opt_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _ACRTIMP int __cdecl __stdio_common_vsprintf_s( + _In_ unsigned __int64 _Options, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _ACRTIMP int __cdecl __stdio_common_vsnprintf_s( + _In_ unsigned __int64 _Options, + _Out_writes_opt_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _ACRTIMP int __cdecl __stdio_common_vsprintf_p( + _In_ unsigned __int64 _Options, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vsnprintf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _vsnprintf_l( + _Out_writes_opt_(_BufferCount) _Post_maybez_ char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnprintf( + _Out_writes_opt_(_BufferCount) _Post_maybez_ char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnprintf_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + #if defined vsnprintf + // This definition of vsnprintf will generate "warning C4005: 'vsnprintf': macro + // redefinition" with a subsequent line indicating where the previous definition + // of vsnprintf was. This makes it easier to find where vsnprintf was defined. + #pragma warning(push, 1) + #pragma warning(1: 4005) // macro redefinition + #define vsnprintf Do not define vsnprintf as a macro + #pragma warning(pop) + #error Macro definition of vsnprintf conflicts with Standard Library function declaration + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vsnprintf( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, + _Buffer, _BufferCount, _Format, NULL, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_vsprintf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _vsprintf_l( + _Pre_notnull_ _Always_(_Post_z_) char* const _Buffer, + _In_z_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnprintf_l(_Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(vsprintf_s) + _CRT_STDIO_INLINE int __CRTDECL vsprintf( + _Pre_notnull_ _Always_(_Post_z_) char* const _Buffer, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnprintf_l(_Buffer, (size_t)-1, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsprintf_s_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf_s( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vsprintf_s( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsprintf_s_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + _Success_(return >= 0) + int, vsprintf_s, + _Always_(_Post_z_) char, _Buffer, + _In_z_ _Printf_format_string_ char const*, _Format, + va_list, _ArgList + ) + + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsprintf_p_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf_p( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsprintf_p( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsprintf_p_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnprintf_s_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsnprintf_s( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnprintf_s( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, NULL, _ArgList); + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + _Success_(return >= 0) + int, _vsnprintf_s, + _Always_(_Post_z_) char, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ char const*, _Format, + va_list, _ArgList + ) + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vsnprintf_s( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, NULL, _ArgList); + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3( + _Success_(return >= 0) + int, vsnprintf_s, + _Always_(_Post_z_) char, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ char const*, _Format, + va_list, _ArgList + ) + + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vscprintf_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, + NULL, 0, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _vscprintf( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vscprintf_l(_Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vscprintf_p_l( + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf_p( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, + NULL, 0, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _vscprintf_p( + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vscprintf_p_l(_Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnprintf_c_l( + _Out_writes_opt_(_BufferCount) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(2) char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int const _Result = __stdio_common_vsprintf( + _CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + return _Result < 0 ? -1 : _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsnprintf_c( + _Out_writes_opt_(_BufferCount) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsnprintf_c_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_sprintf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _sprintf_l( + _Pre_notnull_ _Always_(_Post_z_) char* const _Buffer, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = _vsprintf_l(_Buffer, _Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL sprintf( + _Pre_notnull_ _Always_(_Post_z_) char* const _Buffer, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = _vsprintf_l(_Buffer, _Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_ARGLIST( + _Success_(return >= 0) + int, __RETURN_POLICY_SAME, __EMPTY_DECLSPEC, __CRTDECL, sprintf, vsprintf, + _Pre_notnull_ _Always_(_Post_z_), char, _Buffer, + _In_z_ _Printf_format_string_ char const*, _Format + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _sprintf_s_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsprintf_s_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL sprintf_s( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsprintf_s_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1_ARGLIST( + _Success_(return >= 0) + int, sprintf_s, vsprintf_s, + _Always_(_Post_z_) char, _Buffer, + _In_z_ _Printf_format_string_ char const*, _Format + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _sprintf_p_l( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsprintf_p_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _sprintf_p( + _Out_writes_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsprintf_p_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_snprintf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _snprintf_l( + _Out_writes_opt_(_BufferCount) _Post_maybez_ char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = _vsnprintf_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if defined snprintf + // This definition of snprintf will generate "warning C4005: 'snprintf': macro + // redefinition" with a subsequent line indicating where the previous definition + // of snprintf was. This makes it easier to find where snprintf was defined. + #pragma warning(push, 1) + #pragma warning(1: 4005) // macro redefinition + #define snprintf Do not define snprintf as a macro + #pragma warning(pop) + #error Macro definition of snprintf conflicts with Standard Library function declaration + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL snprintf( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = vsnprintf(_Buffer, _BufferCount, _Format, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snprintf( + _Out_writes_opt_(_BufferCount) _Post_maybez_ char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsnprintf(_Buffer, _BufferCount, _Format, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_ARGLIST_EX( + _Success_(return >= 0) + int, __RETURN_POLICY_SAME, __EMPTY_DECLSPEC, __CRTDECL, _snprintf, _vsnprintf, + _Pre_notnull_ _Post_maybez_ char, + _Out_writes_opt_(_BufferCount) _Post_maybez_, char, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ char const*, _Format + ) + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snprintf_c_l( + _Out_writes_opt_(_BufferCount) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsnprintf_c_l(_Buffer, _BufferCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snprintf_c( + _Out_writes_opt_(_BufferCount) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsnprintf_c_l(_Buffer, _BufferCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snprintf_s_l( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Success_(return >= 0) + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snprintf_s( + _Out_writes_opt_(_BufferCount) _Always_(_Post_z_) char* const _Buffer, + _In_ size_t const _BufferCount, + _In_ size_t const _MaxCount, + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsnprintf_s_l(_Buffer, _BufferCount, _MaxCount, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2_ARGLIST( + _Success_(return >= 0) + int, _snprintf_s, _vsnprintf_s, + _Always_(_Post_z_) char, _Buffer, + _In_ size_t, _BufferCount, + _In_z_ _Printf_format_string_ char const*, _Format + ) + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _scprintf_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vscprintf_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _scprintf( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vscprintf_l(_Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _scprintf_p_l( + _In_z_ _Printf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vscprintf_p_l(_Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ + _CRT_STDIO_INLINE int __CRTDECL _scprintf_p( + _In_z_ _Printf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vscprintf_p(_Format, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Narrow Character Formatted Input Functions (String) + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + _ACRTIMP int __cdecl __stdio_common_vsscanf( + _In_ unsigned __int64 _Options, + _In_reads_(_BufferCount) _Pre_z_ char const* _Buffer, + _In_ size_t _BufferCount, + _In_z_ _Scanf_format_string_params_(2) char const* _Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList + ); + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsscanf_l( + _In_z_ char const* const _Buffer, + _In_z_ _Printf_format_string_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vsscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vsscanf( + _In_z_ char const* const _Buffer, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsscanf_l(_Buffer, _Format, NULL, _ArgList); + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _vsscanf_s_l( + _In_z_ char const* const _Buffer, + _In_z_ _Printf_format_string_ char const* const _Format, + _In_opt_ _locale_t const _Locale, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return __stdio_common_vsscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Buffer, (size_t)-1, _Format, _Locale, _ArgList); + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + #pragma warning(push) + #pragma warning(disable: 6530) // Unrecognized SAL format string + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL vsscanf_s( + _In_z_ char const* const _Buffer, + _In_z_ _Printf_format_string_ char const* const _Format, + va_list _ArgList + ) + #if defined _NO_CRT_STDIO_INLINE + ; + #else + { + return _vsscanf_s_l(_Buffer, _Format, NULL, _ArgList); + } + #endif + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + int, vsscanf_s, + _In_z_ char const, _Buffer, + _In_z_ _Printf_format_string_ char const*, _Format, + va_list, _ArgList + ) + + #pragma warning(pop) + + #endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_sscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _sscanf_l( + _In_z_ char const* const _Buffer, + _In_z_ _Scanf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsscanf_l(_Buffer, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_ _CRT_INSECURE_DEPRECATE(sscanf_s) + _CRT_STDIO_INLINE int __CRTDECL sscanf( + _In_z_ char const* const _Buffer, + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + _Result = _vsscanf_l(_Buffer, _Format, NULL, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _sscanf_s_l( + _In_z_ char const* const _Buffer, + _In_z_ _Scanf_s_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + _Result = _vsscanf_s_l(_Buffer, _Format, _Locale, _ArgList); + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #if __STDC_WANT_SECURE_LIB__ + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL sscanf_s( + _In_z_ char const* const _Buffer, + _In_z_ _Scanf_s_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = vsscanf_s(_Buffer, _Format, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #endif + + #pragma warning(push) + #pragma warning(disable: 6530) // Unrecognized SAL format string + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_snscanf_s_l) + _CRT_STDIO_INLINE int __CRTDECL _snscanf_l( + _In_reads_bytes_(_BufferCount) _Pre_z_ char const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = __stdio_common_vsscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ _CRT_INSECURE_DEPRECATE(_snscanf_s) + _CRT_STDIO_INLINE int __CRTDECL _snscanf( + _In_reads_bytes_(_BufferCount) _Pre_z_ char const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = __stdio_common_vsscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, + _Buffer, _BufferCount, _Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snscanf_s_l( + _In_reads_bytes_(_BufferCount) _Pre_z_ char const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_s_format_string_params_(0) char const* const _Format, + _In_opt_ _locale_t const _Locale, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Locale); + + _Result = __stdio_common_vsscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Buffer, _BufferCount, _Format, _Locale, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + _Check_return_opt_ + _CRT_STDIO_INLINE int __CRTDECL _snscanf_s( + _In_reads_bytes_(_BufferCount) _Pre_z_ char const* const _Buffer, + _In_ size_t const _BufferCount, + _In_z_ _Scanf_s_format_string_ char const* const _Format, + ...) + #if defined _NO_CRT_STDIO_INLINE // SCANF + ; + #else + { + int _Result; + va_list _ArgList; + __crt_va_start(_ArgList, _Format); + + _Result = __stdio_common_vsscanf( + _CRT_INTERNAL_LOCAL_SCANF_OPTIONS | _CRT_INTERNAL_SCANF_SECURECRT, + _Buffer, _BufferCount, _Format, NULL, _ArgList); + + __crt_va_end(_ArgList); + return _Result; + } + #endif + + #pragma warning(pop) + + #if defined _M_CEE_MIXED + #pragma managed(pop) + #endif + + + + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + // + // Non-ANSI Names for Compatibility + // + //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #define SYS_OPEN _SYS_OPEN + + #if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma push_macro("tempnam") + #undef tempnam + #endif + + _CRT_NONSTDC_DEPRECATE(_tempnam) + _ACRTIMP char* __cdecl tempnam( + _In_opt_z_ char const* _Directory, + _In_opt_z_ char const* _FilePrefix + ); + + #if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma pop_macro("tempnam") + #endif + + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_fcloseall) _ACRTIMP int __cdecl fcloseall(void); + _Check_return_ _CRT_NONSTDC_DEPRECATE(_fdopen) _ACRTIMP FILE* __cdecl fdopen(_In_ int _FileHandle, _In_z_ char const* _Format); + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_fgetchar) _ACRTIMP int __cdecl fgetchar(void); + _Check_return_ _CRT_NONSTDC_DEPRECATE(_fileno) _ACRTIMP int __cdecl fileno(_In_ FILE* _Stream); + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_flushall) _ACRTIMP int __cdecl flushall(void); + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_fputchar) _ACRTIMP int __cdecl fputchar(_In_ int _Ch); + _Check_return_ _CRT_NONSTDC_DEPRECATE(_getw) _ACRTIMP int __cdecl getw(_Inout_ FILE* _Stream); + _Check_return_opt_ _CRT_NONSTDC_DEPRECATE(_putw) _ACRTIMP int __cdecl putw(_In_ int _Ch, _Inout_ FILE* _Stream); + _Check_return_ _CRT_NONSTDC_DEPRECATE(_rmtmp) _ACRTIMP int __cdecl rmtmp(void); + + #endif // _CRT_INTERNAL_NONSTDC_NAMES +#endif // _CRT_FUNCTIONS_REQUIRED + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_STDIO diff --git a/sdk/include/ucrt/stdlib.h b/sdk/include/ucrt/stdlib.h new file mode 100644 index 0000000000000..53b6e081d016b --- /dev/null +++ b/sdk/include/ucrt/stdlib.h @@ -0,0 +1,1362 @@ +// +// stdlib.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_STDLIB // include guard for 3rd party interop +#define _INC_STDLIB + +#include +#include +#include +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#ifndef _countof + #define _countof __crt_countof +#endif + + + +// Minimum and maximum macros +#define __max(a,b) (((a) > (b)) ? (a) : (b)) +#define __min(a,b) (((a) < (b)) ? (a) : (b)) + + + +_ACRTIMP void __cdecl _swab( + _Inout_updates_(_SizeInBytes) _Post_readable_size_(_SizeInBytes) char* _Buf1, + _Inout_updates_(_SizeInBytes) _Post_readable_size_(_SizeInBytes) char* _Buf2, + _In_ int _SizeInBytes + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Exit and Abort +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// Argument values for exit() +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 + +#if _CRT_FUNCTIONS_REQUIRED + _ACRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl _Exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl quick_exit(_In_ int _Code); + _ACRTIMP __declspec(noreturn) void __cdecl abort(void); +#endif // _CRT_FUNCTIONS_REQUIRED + +// Argument values for _set_abort_behavior(). +#define _WRITE_ABORT_MSG 0x1 // debug only, has no effect in release +#define _CALL_REPORTFAULT 0x2 + +_ACRTIMP unsigned int __cdecl _set_abort_behavior( + _In_ unsigned int _Flags, + _In_ unsigned int _Mask + ); + + + +#ifndef _CRT_ONEXIT_T_DEFINED + #define _CRT_ONEXIT_T_DEFINED + + typedef int (__CRTDECL* _onexit_t)(void); + #ifdef _M_CEE + typedef int (__clrcall* _onexit_m_t)(void); + #endif +#endif + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + // Non-ANSI name for compatibility + #define onexit_t _onexit_t +#endif + + + +#ifdef _M_CEE + #pragma warning (push) + #pragma warning (disable: 4985) // Attributes not present on previous declaration + + _Check_return_ int __clrcall _atexit_m_appdomain(_In_opt_ void (__clrcall* _Function)(void)); + + _onexit_m_t __clrcall _onexit_m_appdomain(_onexit_m_t _Function); + + #ifdef _M_CEE_MIXED + #ifdef __cplusplus + [System::Security::SecurityCritical] + #endif + _Check_return_ int __clrcall _atexit_m(_In_opt_ void (__clrcall* _Function)(void)); + + _onexit_m_t __clrcall _onexit_m(_onexit_m_t _Function); + #else + #ifdef __cplusplus + [System::Security::SecurityCritical] + #endif + _Check_return_ inline int __clrcall _atexit_m(_In_opt_ void (__clrcall* _Function)(void)) + { + return _atexit_m_appdomain(_Function); + } + + inline _onexit_m_t __clrcall _onexit_m(_onexit_t _Function) + { + return _onexit_m_appdomain(_Function); + } + #endif + #pragma warning (pop) +#endif + + + +#ifdef _M_CEE_PURE + // In pure mode, atexit is the same as atexit_m_appdomain + extern "C++" + { + + #ifdef __cplusplus + [System::Security::SecurityCritical] + #endif + inline int __clrcall atexit(void (__clrcall* _Function)(void)) + { + return _atexit_m_appdomain(_Function); + } + + inline _onexit_t __clrcall _onexit(_onexit_t _Function) + { + return _onexit_m_appdomain(_Function); + } + + } // extern "C++" +#else + int __cdecl atexit(void (__cdecl*)(void)); + _onexit_t __cdecl _onexit(_In_opt_ _onexit_t _Func); +#endif + +int __cdecl at_quick_exit(void (__cdecl*)(void)); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Global State (errno, global handlers, etc.) +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _M_CEE_PURE + // a purecall handler procedure. Never returns normally + typedef void (__cdecl* _purecall_handler)(void); + + // Invalid parameter handler function pointer type + typedef void (__cdecl* _invalid_parameter_handler)( + wchar_t const*, + wchar_t const*, + wchar_t const*, + unsigned int, + uintptr_t + ); + + // Establishes a purecall handler + _VCRTIMP _purecall_handler __cdecl _set_purecall_handler( + _In_opt_ _purecall_handler _Handler + ); + + _VCRTIMP _purecall_handler __cdecl _get_purecall_handler(void); + + // Establishes an invalid parameter handler + _ACRTIMP _invalid_parameter_handler __cdecl _set_invalid_parameter_handler( + _In_opt_ _invalid_parameter_handler _Handler + ); + + _ACRTIMP _invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void); + + _ACRTIMP _invalid_parameter_handler __cdecl _set_thread_local_invalid_parameter_handler( + _In_opt_ _invalid_parameter_handler _Handler + ); + + _ACRTIMP _invalid_parameter_handler __cdecl _get_thread_local_invalid_parameter_handler(void); +#endif + + +#if defined __cplusplus && defined _M_CEE_PURE +extern "C++" +{ + typedef void (__clrcall* _purecall_handler)(void); + typedef _purecall_handler _purecall_handler_m; + + _MRTIMP _purecall_handler __cdecl _set_purecall_handler( + _In_opt_ _purecall_handler _Handler + ); +} // extern "C++" +#endif + + + +// Argument values for _set_error_mode(). +#define _OUT_TO_DEFAULT 0 +#define _OUT_TO_STDERR 1 +#define _OUT_TO_MSGBOX 2 +#define _REPORT_ERRMODE 3 + +_Check_return_opt_ _ACRTIMP int __cdecl _set_error_mode(_In_ int _Mode); + + + +#if _CRT_FUNCTIONS_REQUIRED + _ACRTIMP int* __cdecl _errno(void); + #define errno (*_errno()) + + _ACRTIMP errno_t __cdecl _set_errno(_In_ int _Value); + _ACRTIMP errno_t __cdecl _get_errno(_Out_ int* _Value); + + _ACRTIMP unsigned long* __cdecl __doserrno(void); + #define _doserrno (*__doserrno()) + + _ACRTIMP errno_t __cdecl _set_doserrno(_In_ unsigned long _Value); + _ACRTIMP errno_t __cdecl _get_doserrno(_Out_ unsigned long * _Value); + + // This is non-const for backwards compatibility; do not modify it. + _ACRTIMP _CRT_INSECURE_DEPRECATE(strerror) char** __cdecl __sys_errlist(void); + #define _sys_errlist (__sys_errlist()) + + _ACRTIMP _CRT_INSECURE_DEPRECATE(strerror) int * __cdecl __sys_nerr(void); + #define _sys_nerr (*__sys_nerr()) + + _ACRTIMP void __cdecl perror(_In_opt_z_ char const* _ErrMsg); +#endif // _CRT_FUNCTIONS_REQUIRED + + + +// These point to the executable module name. +_CRT_INSECURE_DEPRECATE_GLOBALS(_get_pgmptr ) _ACRTIMP char** __cdecl __p__pgmptr (void); +_CRT_INSECURE_DEPRECATE_GLOBALS(_get_wpgmptr) _ACRTIMP wchar_t** __cdecl __p__wpgmptr(void); +_CRT_INSECURE_DEPRECATE_GLOBALS(_get_fmode ) _ACRTIMP int* __cdecl __p__fmode (void); + +#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + _CRT_INSECURE_DEPRECATE_GLOBALS(_get_pgmptr ) extern char* _pgmptr; + _CRT_INSECURE_DEPRECATE_GLOBALS(_get_wpgmptr) extern wchar_t* _wpgmptr; + #ifndef _CORECRT_BUILD + _CRT_INSECURE_DEPRECATE_GLOBALS(_get_fmode ) extern int _fmode; + #endif +#else + #define _pgmptr (*__p__pgmptr ()) + #define _wpgmptr (*__p__wpgmptr()) + #define _fmode (*__p__fmode ()) +#endif + +_Success_(return == 0) +_ACRTIMP errno_t __cdecl _get_pgmptr (_Outptr_result_z_ char** _Value); + +_Success_(return == 0) +_ACRTIMP errno_t __cdecl _get_wpgmptr(_Outptr_result_z_ wchar_t** _Value); + +_ACRTIMP errno_t __cdecl _set_fmode (_In_ int _Mode ); + +_ACRTIMP errno_t __cdecl _get_fmode (_Out_ int* _PMode); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Math +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +typedef struct _div_t +{ + int quot; + int rem; +} div_t; + +typedef struct _ldiv_t +{ + long quot; + long rem; +} ldiv_t; + +typedef struct _lldiv_t +{ + long long quot; + long long rem; +} lldiv_t; + +_Check_return_ int __cdecl abs (_In_ int _Number); +_Check_return_ long __cdecl labs (_In_ long _Number); +_Check_return_ long long __cdecl llabs (_In_ long long _Number); +_Check_return_ __int64 __cdecl _abs64(_In_ __int64 _Number); + +_Check_return_ unsigned short __cdecl _byteswap_ushort(_In_ unsigned short _Number); +_Check_return_ unsigned long __cdecl _byteswap_ulong (_In_ unsigned long _Number); +_Check_return_ unsigned __int64 __cdecl _byteswap_uint64(_In_ unsigned __int64 _Number); + +_Check_return_ _ACRTIMP div_t __cdecl div (_In_ int _Numerator, _In_ int _Denominator); +_Check_return_ _ACRTIMP ldiv_t __cdecl ldiv (_In_ long _Numerator, _In_ long _Denominator); +_Check_return_ _ACRTIMP lldiv_t __cdecl lldiv(_In_ long long _Numerator, _In_ long long _Denominator); + +// These functions have declspecs in their declarations in the Windows headers, +// which cause PREfast to fire 6540. +#pragma warning(push) +#pragma warning(disable: 6540) + +unsigned int __cdecl _rotl( + _In_ unsigned int _Value, + _In_ int _Shift + ); + +_Check_return_ +unsigned long __cdecl _lrotl( + _In_ unsigned long _Value, + _In_ int _Shift + ); + +unsigned __int64 __cdecl _rotl64( + _In_ unsigned __int64 _Value, + _In_ int _Shift + ); + +unsigned int __cdecl _rotr( + _In_ unsigned int _Value, + _In_ int _Shift + ); + +_Check_return_ +unsigned long __cdecl _lrotr( + _In_ unsigned long _Value, + _In_ int _Shift + ); + +unsigned __int64 __cdecl _rotr64( + _In_ unsigned __int64 _Value, + _In_ int _Shift + ); + +#pragma warning(pop) + + + +// Maximum value that can be returned by the rand function: +#define RAND_MAX 0x7fff + +_ACRTIMP void __cdecl srand(_In_ unsigned int _Seed); + +_Check_return_ _ACRTIMP int __cdecl rand(void); + +#if defined _CRT_RAND_S || defined _CRTBLD + _ACRTIMP errno_t __cdecl rand_s(_Out_ unsigned int* _RandomValue); +#endif + + + +#ifdef __cplusplus +extern "C++" +{ + inline long abs(long const _X) throw() + { + return labs(_X); + } + + inline long long abs(long long const _X) throw() + { + return llabs(_X); + } + + inline ldiv_t div(long const _A1, long const _A2) throw() + { + return ldiv(_A1, _A2); + } + + inline lldiv_t div(long long const _A1, long long const _A2) throw() + { + return lldiv(_A1, _A2); + } +} +#endif // __cplusplus + + + + +// Structs used to fool the compiler into not generating floating point +// instructions when copying and pushing [long] double values +#define _CRT_DOUBLE_DEC + +#ifndef _LDSUPPORT + + #pragma pack(push, 4) + typedef struct + { + unsigned char ld[10]; + } _LDOUBLE; + #pragma pack(pop) + + #define _PTR_LD(x) ((unsigned char*)(&(x)->ld)) + +#else // _LDSUPPORT + + // push and pop long, which is #defined as __int64 by a spec2k test + #pragma push_macro("long") + #undef long + typedef long double _LDOUBLE; + #pragma pop_macro("long") + + #define _PTR_LD(x) ((unsigned char *)(x)) + +#endif // _LDSUPPORT + +typedef struct +{ + double x; +} _CRT_DOUBLE; + +typedef struct +{ + float f; +} _CRT_FLOAT; + +// push and pop long, which is #defined as __int64 by a spec2k test +#pragma push_macro("long") +#undef long + +typedef struct +{ + long double x; +} _LONGDOUBLE; + +#pragma pop_macro("long") + +#pragma pack(push, 4) +typedef struct +{ + unsigned char ld12[12]; +} _LDBL12; +#pragma pack(pop) + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Narrow String to Number Conversions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Check_return_ _ACRTIMP double __cdecl atof (_In_z_ char const* _String); +_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl atoi (_In_z_ char const* _String); +_Check_return_ _ACRTIMP long __cdecl atol (_In_z_ char const* _String); +_Check_return_ _ACRTIMP long long __cdecl atoll (_In_z_ char const* _String); +_Check_return_ _ACRTIMP __int64 __cdecl _atoi64(_In_z_ char const* _String); + +_Check_return_ _ACRTIMP double __cdecl _atof_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _atoi_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP long __cdecl _atol_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP long long __cdecl _atoll_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP __int64 __cdecl _atoi64_l(_In_z_ char const* _String, _In_opt_ _locale_t _Locale); + +_Check_return_ _ACRTIMP int __cdecl _atoflt (_Out_ _CRT_FLOAT* _Result, _In_z_ char const* _String); +_Check_return_ _ACRTIMP int __cdecl _atodbl (_Out_ _CRT_DOUBLE* _Result, _In_z_ char* _String); +_Check_return_ _ACRTIMP int __cdecl _atoldbl(_Out_ _LDOUBLE* _Result, _In_z_ char* _String); + +_Check_return_ +_ACRTIMP int __cdecl _atoflt_l( + _Out_ _CRT_FLOAT* _Result, + _In_z_ char const* _String, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _atodbl_l( + _Out_ _CRT_DOUBLE* _Result, + _In_z_ char* _String, + _In_opt_ _locale_t _Locale + ); + + +_Check_return_ +_ACRTIMP int __cdecl _atoldbl_l( + _Out_ _LDOUBLE* _Result, + _In_z_ char* _String, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP float __cdecl strtof( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr + ); + +_Check_return_ +_ACRTIMP float __cdecl _strtof_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP double __cdecl strtod( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr + ); + +_Check_return_ +_ACRTIMP double __cdecl _strtod_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP long double __cdecl strtold( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr + ); + +_Check_return_ +_ACRTIMP long double __cdecl _strtold_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP long __cdecl strtol( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_Check_return_ +_ACRTIMP long __cdecl _strtol_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP long long __cdecl strtoll( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_Check_return_ +_ACRTIMP long long __cdecl _strtoll_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP unsigned long __cdecl strtoul( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_Check_return_ +_ACRTIMP unsigned long __cdecl _strtoul_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP unsigned long long __cdecl strtoull( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_Check_return_ +_ACRTIMP unsigned long long __cdecl _strtoull_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP __int64 __cdecl _strtoi64( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_Check_return_ +_ACRTIMP __int64 __cdecl _strtoi64_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP unsigned __int64 __cdecl _strtoui64( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix + ); + +_Check_return_ +_ACRTIMP unsigned __int64 __cdecl _strtoui64_l( + _In_z_ char const* _String, + _Out_opt_ _Deref_post_z_ char** _EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Number to Narrow String Conversions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Success_(return == 0) +_Check_return_opt_ +_ACRTIMP errno_t __cdecl _itoa_s( + _In_ int _Value, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + _Success_(return == 0) + errno_t, _itoa_s, + _In_ int, _Value, + char, _Buffer, + _In_ int, _Radix + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1( + char*, __RETURN_POLICY_DST, _ACRTIMP, _itoa, + _In_ int, _Value, + _Pre_notnull_ _Post_z_, char, _Buffer, + _In_ int, _Radix + ) + +_Success_(return == 0) +_Check_return_opt_ +_ACRTIMP errno_t __cdecl _ltoa_s( + _In_ long _Value, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + errno_t, _ltoa_s, + _In_ long, _Value, + char, _Buffer, + _In_ int, _Radix + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1( + char*, __RETURN_POLICY_DST, _ACRTIMP, _ltoa, + _In_ long, _Value, + _Pre_notnull_ _Post_z_, char, _Buffer, + _In_ int, _Radix + ) + +_Success_(return == 0) +_Check_return_opt_ +_ACRTIMP errno_t __cdecl _ultoa_s( + _In_ unsigned long _Value, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + errno_t, _ultoa_s, + _In_ unsigned long, _Value, + char, _Buffer, + _In_ int, _Radix + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1( + char*, __RETURN_POLICY_DST, _ACRTIMP, _ultoa, + _In_ unsigned long, _Value, + _Pre_notnull_ _Post_z_, char, _Buffer, + _In_ int, _Radix + ) + +_Success_(return == 0) +_Check_return_opt_ +_ACRTIMP errno_t __cdecl _i64toa_s( + _In_ __int64 _Value, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + +_Success_(return == 0) +_CRT_INSECURE_DEPRECATE(_i64toa_s) +_ACRTIMP char* __cdecl _i64toa( + _In_ __int64 _Value, + _Pre_notnull_ _Post_z_ char* _Buffer, + _In_ int _Radix + ); + +_Success_(return == 0) +_Check_return_opt_ +_ACRTIMP errno_t __cdecl _ui64toa_s( + _In_ unsigned __int64 _Value, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ int _Radix + ); + +_CRT_INSECURE_DEPRECATE(_ui64toa_s) +_ACRTIMP char* __cdecl _ui64toa( + _In_ unsigned __int64 _Value, + _Pre_notnull_ _Post_z_ char* _Buffer, + _In_ int _Radix + ); + + + +// _CVTBUFSIZE is the maximum size for the per-thread conversion buffer. It +// should be at least as long as the number of digits in the largest double +// precision value (?.?e308 in IEEE arithmetic). We will use the same size +// buffer as is used in the printf support routines. +// +// (This value actually allows 40 additional decimal places; even though there +// are only 16 digits of accuracy in a double precision IEEE number, the user may +// ask for more to effect zero padding.) +#define _CVTBUFSIZE (309 + 40) // # of digits in max. dp value + slop + +_Success_(return == 0) +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _ecvt_s( + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ double _Value, + _In_ int _DigitCount, + _Out_ int* _PtDec, + _Out_ int* _PtSign + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4( + errno_t, _ecvt_s, + char, _Buffer, + _In_ double, _Value, + _In_ int, _DigitCount, + _Out_ int*, _PtDec, + _Out_ int*, _PtSign + ) + +_Check_return_ _CRT_INSECURE_DEPRECATE(_ecvt_s) +_ACRTIMP char* __cdecl _ecvt( + _In_ double _Value, + _In_ int _DigitCount, + _Out_ int* _PtDec, + _Out_ int* _PtSign + ); + +_Success_(return == 0) +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _fcvt_s( + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ double _Value, + _In_ int _FractionalDigitCount, + _Out_ int* _PtDec, + _Out_ int* _PtSign + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4( + _Success_(return == 0) + errno_t, _fcvt_s, + char, _Buffer, + _In_ double, _Value, + _In_ int, _FractionalDigitCount, + _Out_ int*, _PtDec, + _Out_ int*, _PtSign + ) + +_Success_(return == 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_fcvt_s) +_ACRTIMP char* __cdecl _fcvt( + _In_ double _Value, + _In_ int _FractionalDigitCount, + _Out_ int* _PtDec, + _Out_ int* _PtSign + ); + +_Success_(return == 0) +_ACRTIMP errno_t __cdecl _gcvt_s( + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_ double _Value, + _In_ int _DigitCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + _Success_(return == 0) + errno_t, _gcvt_s, + char, _Buffer, + _In_ double, _Value, + _In_ int, _DigitCount + ) + +_CRT_INSECURE_DEPRECATE(_gcvt_s) +_ACRTIMP char* __cdecl _gcvt( + _In_ double _Value, + _In_ int _DigitCount, + _Pre_notnull_ _Post_z_ char* _Buffer + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Multibyte String Operations and Conversions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// Maximum number of bytes in multi-byte character in the current locale +// (also defined in ctype.h). +#ifndef MB_CUR_MAX + #if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL + #define MB_CUR_MAX __mb_cur_max + #else + #define MB_CUR_MAX ___mb_cur_max_func() + #endif + + #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + extern int __mb_cur_max; + #else + #define __mb_cur_max (___mb_cur_max_func()) + #endif + + _Post_satisfies_(return > 0 && return < MB_LEN_MAX) + _ACRTIMP int __cdecl ___mb_cur_max_func(void); + + _Post_satisfies_(return > 0 && return < MB_LEN_MAX) + _ACRTIMP int __cdecl ___mb_cur_max_l_func(_locale_t _Locale); +#endif + + + +_Check_return_ +_ACRTIMP int __cdecl mblen( + _In_reads_bytes_opt_(_MaxCount) _Pre_opt_z_ char const* _Ch, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _mblen_l( + _In_reads_bytes_opt_(_MaxCount) _Pre_opt_z_ char const* _Ch, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_Post_satisfies_(return <= _String_length_(_String)) +_ACRTIMP size_t __cdecl _mbstrlen( + _In_z_ char const* _String + ); + +_Check_return_ +_Post_satisfies_(return <= _String_length_(_String) || return == (size_t)-1) +_ACRTIMP size_t __cdecl _mbstrlen_l( + _In_z_ char const* _String, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_Post_satisfies_((return <= _String_length_(_String) && return <= _MaxCount) || return == (size_t)-1) +_ACRTIMP size_t __cdecl _mbstrnlen( + _In_z_ char const* _String, + _In_ size_t _MaxCount + ); + +_Post_satisfies_((return <= _String_length_(_String) && return <= _MaxCount) || return == (size_t)-1) +_Check_return_ +_ACRTIMP size_t __cdecl _mbstrnlen_l( + _In_z_ char const* _String, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Success_(return != -1) +_ACRTIMP int __cdecl mbtowc( + _Pre_notnull_ _Post_z_ wchar_t* _DstCh, + _In_reads_or_z_opt_(_SrcSizeInBytes) char const* _SrcCh, + _In_ size_t _SrcSizeInBytes + ); + +_Success_(return != -1) +_ACRTIMP int __cdecl _mbtowc_l( + _Pre_notnull_ _Post_z_ wchar_t* _DstCh, + _In_reads_or_z_opt_(_SrcSizeInBytes) char const* _SrcCh, + _In_ size_t _SrcSizeInBytes, + _In_opt_ _locale_t _Locale + ); + +_Check_return_opt_ +_ACRTIMP errno_t __cdecl mbstowcs_s( + _Out_opt_ size_t* _PtNumOfCharConverted, + _Out_writes_to_opt_(_SizeInWords, *_PtNumOfCharConverted) wchar_t* _DstBuf, + _In_ size_t _SizeInWords, + _In_reads_or_z_(_MaxCount) char const* _SrcBuf, + _In_ size_t _MaxCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2( + errno_t, mbstowcs_s, + _Out_opt_ size_t*, _PtNumOfCharConverted, + _Post_z_ wchar_t, _Dest, + _In_z_ char const*, _Source, + _In_ size_t, _MaxCount + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE( + _ACRTIMP, mbstowcs, + _Out_writes_opt_z_(_MaxCount), wchar_t, _Dest, + _In_z_ char const*, _Source, + _In_ size_t, _MaxCount + ) + +_Check_return_opt_ +_ACRTIMP errno_t __cdecl _mbstowcs_s_l( + _Out_opt_ size_t* _PtNumOfCharConverted, + _Out_writes_to_opt_(_SizeInWords, *_PtNumOfCharConverted) wchar_t* _DstBuf, + _In_ size_t _SizeInWords, + _In_reads_or_z_(_MaxCount) char const* _SrcBuf, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3( + errno_t, _mbstowcs_s_l, + _Out_opt_ size_t*, _PtNumOfCharConverted, + _Post_z_ wchar_t, _Dest, + _In_z_ char const*, _Source, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX( + _ACRTIMP, _mbstowcs_l, _mbstowcs_s_l, + _Out_writes_opt_z_(_Size) wchar_t, + _Out_writes_z_(_MaxCount), wchar_t, _Dest, + _In_z_ char const*, _Source, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + + + + +_CRT_INSECURE_DEPRECATE(wctomb_s) +_ACRTIMP int __cdecl wctomb( + _Out_writes_opt_z_(MB_LEN_MAX) char* _MbCh, + _In_ wchar_t _WCh + ); + +_CRT_INSECURE_DEPRECATE(_wctomb_s_l) +_ACRTIMP int __cdecl _wctomb_l( + _Pre_maybenull_ _Post_z_ char* _MbCh, + _In_ wchar_t _WCh, + _In_opt_ _locale_t _Locale + ); + +#if __STDC_WANT_SECURE_LIB__ + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl wctomb_s( + _Out_opt_ int* _SizeConverted, + _Out_writes_bytes_to_opt_(_SizeInBytes, *_SizeConverted) char* _MbCh, + _In_ rsize_t _SizeInBytes, + _In_ wchar_t _WCh + ); + +#endif // __STDC_WANT_SECURE_LIB__ + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wctomb_s_l( + _Out_opt_ int* _SizeConverted, + _Out_writes_opt_z_(_SizeInBytes) char* _MbCh, + _In_ size_t _SizeInBytes, + _In_ wchar_t _WCh, + _In_opt_ _locale_t _Locale); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl wcstombs_s( + _Out_opt_ size_t* _PtNumOfCharConverted, + _Out_writes_bytes_to_opt_(_DstSizeInBytes, *_PtNumOfCharConverted) char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ wchar_t const* _Src, + _In_ size_t _MaxCountInBytes + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2( + errno_t, wcstombs_s, + _Out_opt_ size_t*, _PtNumOfCharConverted, + _Out_writes_bytes_opt_(_Size) char, _Dest, + _In_z_ wchar_t const*, _Source, + _In_ size_t, _MaxCount + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE( + _ACRTIMP, wcstombs, + _Out_writes_opt_(_MaxCount), char, _Dest, + _In_z_ wchar_t const*, _Source, + _In_ size_t, _MaxCount + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _wcstombs_s_l( + _Out_opt_ size_t* _PtNumOfCharConverted, + _Out_writes_bytes_to_opt_(_DstSizeInBytes, *_PtNumOfCharConverted) char* _Dst, + _In_ size_t _DstSizeInBytes, + _In_z_ wchar_t const* _Src, + _In_ size_t _MaxCountInBytes, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3( + errno_t, _wcstombs_s_l, + _Out_opt_ size_t*, _PtNumOfCharConverted, + _Out_writes_opt_(_Size) char, _Dest, + _In_z_ wchar_t const*, _Source, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX( + _ACRTIMP, _wcstombs_l, _wcstombs_s_l, + _Out_writes_opt_z_(_Size) char, + _Out_writes_(_MaxCount), char, _Dest, + _In_z_ wchar_t const*, _Source, + _In_ size_t, _MaxCount, + _In_opt_ _locale_t, _Locale + ) + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Path Manipulation +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// Sizes for buffers used by the _makepath() and _splitpath() functions. +// note that the sizes include space for 0-terminator +#define _MAX_PATH 260 // max. length of full pathname +#define _MAX_DRIVE 3 // max. length of drive component +#define _MAX_DIR 256 // max. length of path component +#define _MAX_FNAME 256 // max. length of file name component +#define _MAX_EXT 256 // max. length of extension component + + +#pragma push_macro("_fullpath") +#undef _fullpath + +_Success_(return != 0) +_Check_return_ +_ACRTIMP _CRTALLOCATOR char* __cdecl _fullpath( + _Out_writes_opt_z_(_BufferCount) char* _Buffer, + _In_z_ char const* _Path, + _In_ size_t _BufferCount + ); + +#pragma pop_macro("_fullpath") + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _makepath_s( + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount, + _In_opt_z_ char const* _Drive, + _In_opt_z_ char const* _Dir, + _In_opt_z_ char const* _Filename, + _In_opt_z_ char const* _Ext + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4( + errno_t, _makepath_s, + char, _Buffer, + _In_opt_z_ char const*, _Drive, + _In_opt_z_ char const*, _Dir, + _In_opt_z_ char const*, _Filename, + _In_opt_z_ char const*, _Ext + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4( + void, __RETURN_POLICY_VOID, _ACRTIMP, _makepath, + _Pre_notnull_ _Post_z_, char, _Buffer, + _In_opt_z_ char const*, _Drive, + _In_opt_z_ char const*, _Dir, + _In_opt_z_ char const*, _Filename, + _In_opt_z_ char const*, _Ext + ) + +_CRT_INSECURE_DEPRECATE(_splitpath_s) +_ACRTIMP void __cdecl _splitpath( + _In_z_ char const* _FullPath, + _Pre_maybenull_ _Post_z_ char* _Drive, + _Pre_maybenull_ _Post_z_ char* _Dir, + _Pre_maybenull_ _Post_z_ char* _Filename, + _Pre_maybenull_ _Post_z_ char* _Ext + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _splitpath_s( + _In_z_ char const* _FullPath, + _Out_writes_opt_z_(_DriveCount) char* _Drive, + _In_ size_t _DriveCount, + _Out_writes_opt_z_(_DirCount) char* _Dir, + _In_ size_t _DirCount, + _Out_writes_opt_z_(_FilenameCount) char* _Filename, + _In_ size_t _FilenameCount, + _Out_writes_opt_z_(_ExtCount) char* _Ext, + _In_ size_t _ExtCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) + +#if __STDC_WANT_SECURE_LIB__ + +_Check_return_opt_ +_Success_(return == 0) +_DCRTIMP errno_t __cdecl getenv_s( + _Out_ size_t* _RequiredCount, + _Out_writes_opt_z_(_BufferCount) char* _Buffer, + _In_ rsize_t _BufferCount, + _In_z_ char const* _VarName + ); + +#endif // __STDC_WANT_SECURE_LIB__ + + + + +_ACRTIMP int* __cdecl __p___argc (void); +_ACRTIMP char*** __cdecl __p___argv (void); +_ACRTIMP wchar_t*** __cdecl __p___wargv(void); + +#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + extern int __argc; + extern char** __argv; + extern wchar_t** __wargv; +#else + #define __argc (*__p___argc()) // Pointer to number of command line arguments + #define __argv (*__p___argv()) // Pointer to table of narrow command line arguments + #define __wargv (*__p___wargv()) // Pointer to table of wide command line arguments +#endif + +_DCRTIMP char*** __cdecl __p__environ (void); +_DCRTIMP wchar_t*** __cdecl __p__wenviron(void); + +#ifndef _CRT_BEST_PRACTICES_USAGE + #define _CRT_V12_LEGACY_FUNCTIONALITY +#endif + +#ifndef _CRT_V12_LEGACY_FUNCTIONALITY + // Deprecated symbol: Do not expose environment global pointers unless + // legacy access is specifically requested + #define _environ crt_usage_error__do_not_reference_global_pointer_directly__environ + #define _wenviron crt_usage_error__do_not_reference_global_pointer_directly__wenviron +#else + #define _environ (*__p__environ()) // Pointer to narrow environment table + #define _wenviron (*__p__wenviron()) // Pointer to wide environment table +#endif + + + +// Sizes for buffers used by the getenv/putenv family of functions. +#define _MAX_ENV 32767 + + +#if _CRT_FUNCTIONS_REQUIRED + + _Check_return_ _CRT_INSECURE_DEPRECATE(_dupenv_s) + _DCRTIMP char* __cdecl getenv( + _In_z_ char const* _VarName + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1( + errno_t, getenv_s, + _Out_ size_t*, _RequiredCount, + char, _Buffer, + _In_z_ char const*, _VarName + ) + + #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) + #pragma push_macro("_dupenv_s") + #undef _dupenv_s + #endif + + _Check_return_opt_ + _DCRTIMP errno_t __cdecl _dupenv_s( + _Outptr_result_buffer_maybenull_(*_BufferCount) _Outptr_result_maybenull_z_ char** _Buffer, + _Out_opt_ size_t* _BufferCount, + _In_z_ char const* _VarName + ); + + #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) + #pragma pop_macro("_dupenv_s") + #endif + + _DCRTIMP int __cdecl system( + _In_opt_z_ char const* _Command + ); + + // The functions below have declspecs in their declarations in the Windows + // headers, causing PREfast to fire 6540 here + #pragma warning(push) + #pragma warning(disable: 6540) + + _Check_return_ + _DCRTIMP int __cdecl _putenv( + _In_z_ char const* _EnvString + ); + + _Check_return_wat_ + _DCRTIMP errno_t __cdecl _putenv_s( + _In_z_ char const* _Name, + _In_z_ char const* _Value + ); + + #pragma warning(pop) + + _DCRTIMP errno_t __cdecl _searchenv_s( + _In_z_ char const* _Filename, + _In_z_ char const* _VarName, + _Out_writes_z_(_BufferCount) char* _Buffer, + _In_ size_t _BufferCount + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0( + errno_t, _searchenv_s, + _In_z_ char const*, _Filename, + _In_z_ char const*, _VarName, + char, _Buffer + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0( + void, __RETURN_POLICY_VOID, _DCRTIMP, _searchenv, + _In_z_ char const*, _Filename, + _In_z_ char const*, _VarName, + _Pre_notnull_ _Post_z_, char, _Buffer + ) + + // The Win32 API SetErrorMode, Beep and Sleep should be used instead. + _CRT_OBSOLETE(SetErrorMode) + _DCRTIMP void __cdecl _seterrormode( + _In_ int _Mode + ); + + _CRT_OBSOLETE(Beep) + _DCRTIMP void __cdecl _beep( + _In_ unsigned _Frequency, + _In_ unsigned _Duration + ); + + _CRT_OBSOLETE(Sleep) + _DCRTIMP void __cdecl _sleep( + _In_ unsigned long _Duration + ); + +#endif // _CRT_FUNCTIONS_REQUIRED + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Non-ANSI Names for Compatibility +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #ifndef __cplusplus + #define max(a,b) (((a) > (b)) ? (a) : (b)) + #define min(a,b) (((a) < (b)) ? (a) : (b)) + #endif + + #define sys_errlist _sys_errlist + #define sys_nerr _sys_nerr + + #pragma warning(push) + #pragma warning(disable: 4141) // Using deprecated twice + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_ecvt) _CRT_INSECURE_DEPRECATE(_ecvt_s) + _ACRTIMP char* __cdecl ecvt( + _In_ double _Value, + _In_ int _DigitCount, + _Out_ int* _PtDec, + _Out_ int* _PtSign + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_fcvt) _CRT_INSECURE_DEPRECATE(_fcvt_s) + _ACRTIMP char* __cdecl fcvt( + _In_ double _Value, + _In_ int _FractionalDigitCount, + _Out_ int* _PtDec, + _Out_ int* _PtSign + ); + + _CRT_NONSTDC_DEPRECATE(_gcvt) _CRT_INSECURE_DEPRECATE(_fcvt_s) + _ACRTIMP char* __cdecl gcvt( + _In_ double _Value, + _In_ int _DigitCount, + _Pre_notnull_ _Post_z_ char* _DstBuf + ); + + _CRT_NONSTDC_DEPRECATE(_itoa) _CRT_INSECURE_DEPRECATE(_itoa_s) + _ACRTIMP char* __cdecl itoa( + _In_ int _Value, + _Pre_notnull_ _Post_z_ char* _Buffer, + _In_ int _Radix + ); + + _CRT_NONSTDC_DEPRECATE(_ltoa) _CRT_INSECURE_DEPRECATE(_ltoa_s) + _ACRTIMP char* __cdecl ltoa( + _In_ long _Value, + _Pre_notnull_ _Post_z_ char* _Buffer, + _In_ int _Radix + ); + + + _CRT_NONSTDC_DEPRECATE(_swab) + _ACRTIMP void __cdecl swab( + _Inout_updates_z_(_SizeInBytes) char* _Buf1, + _Inout_updates_z_(_SizeInBytes) char* _Buf2, + _In_ int _SizeInBytes + ); + + _CRT_NONSTDC_DEPRECATE(_ultoa) _CRT_INSECURE_DEPRECATE(_ultoa_s) + _ACRTIMP char* __cdecl ultoa( + _In_ unsigned long _Value, + _Pre_notnull_ _Post_z_ char* _Buffer, + _In_ int _Radix + ); + + #define environ _environ + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_putenv) + _DCRTIMP int __cdecl putenv( + _In_z_ char const* _EnvString + ); + + #pragma warning(pop) + + onexit_t __cdecl onexit(_In_opt_ onexit_t _Func); + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_STDLIB diff --git a/sdk/include/ucrt/stdnoreturn.h b/sdk/include/ucrt/stdnoreturn.h new file mode 100644 index 0000000000000..c9bd87df4eab4 --- /dev/null +++ b/sdk/include/ucrt/stdnoreturn.h @@ -0,0 +1,28 @@ +// +// stdnoreturn.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_STDNORETURN // include guard for 3rd party interop +#define _INC_STDNORETURN + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS +_CRT_BEGIN_C_HEADER + +#if _CRT_HAS_C11 + +#define noreturn _Noreturn + +#endif // _CRT_HAS_C11 + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_STDNORETURN diff --git a/sdk/include/ucrt/string.h b/sdk/include/ucrt/string.h new file mode 100644 index 0000000000000..37406d48e2e35 --- /dev/null +++ b/sdk/include/ucrt/string.h @@ -0,0 +1,592 @@ +// +// string.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_STRING // include guard for 3rd party interop +#define _INC_STRING + +#include +#include +#include +#include + +#ifndef __midl + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#define _NLSCMPERROR _CRT_INT_MAX // currently == INT_MAX + +#if __STDC_WANT_SECURE_LIB__ + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl strcpy_s( + _Out_writes_z_(_SizeInBytes) char* _Destination, + _In_ rsize_t _SizeInBytes, + _In_z_ char const* _Source + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl strcat_s( + _Inout_updates_z_(_SizeInBytes) char* _Destination, + _In_ rsize_t _SizeInBytes, + _In_z_ char const* _Source + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl strerror_s( + _Out_writes_z_(_SizeInBytes) char* _Buffer, + _In_ size_t _SizeInBytes, + _In_ int _ErrorNumber); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl strncat_s( + _Inout_updates_z_(_SizeInBytes) char* _Destination, + _In_ rsize_t _SizeInBytes, + _In_reads_or_z_(_MaxCount) char const* _Source, + _In_ rsize_t _MaxCount + ); + + _Check_return_wat_ + _ACRTIMP errno_t __cdecl strncpy_s( + _Out_writes_z_(_SizeInBytes) char* _Destination, + _In_ rsize_t _SizeInBytes, + _In_reads_or_z_(_MaxCount) char const* _Source, + _In_ rsize_t _MaxCount + ); + + _Check_return_ + _ACRTIMP char* __cdecl strtok_s( + _Inout_opt_z_ char* _String, + _In_z_ char const* _Delimiter, + _Inout_ _Deref_prepost_opt_z_ char** _Context + ); + +#endif // __STDC_WANT_SECURE_LIB__ + +_ACRTIMP void* __cdecl _memccpy( + _Out_writes_bytes_opt_(_MaxCount) void* _Dst, + _In_ void const* _Src, + _In_ int _Val, + _In_ size_t _MaxCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, strcat_s, + char, _Destination, + _In_z_ char const*, _Source + ) + +#ifndef RC_INVOKED + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + char*, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, strcat, + _Inout_updates_z_(_String_length_(_Destination) + _String_length_(_Source) + 1), char, _Destination, + _In_z_ char const*, _Source + ) + +#endif // RC_INVOKED + +_Check_return_ +int __cdecl strcmp( + _In_z_ char const* _Str1, + _In_z_ char const* _Str2 + ); + +_Check_return_ +_ACRTIMP int __cdecl _strcmpi( + _In_z_ char const* _String1, + _In_z_ char const* _String2 + ); + +_Check_return_ +_ACRTIMP int __cdecl strcoll( + _In_z_ char const* _String1, + _In_z_ char const* _String2 + ); + +_Check_return_ +_ACRTIMP int __cdecl _strcoll_l( + _In_z_ char const* _String1, + _In_z_ char const* _String2, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, strcpy_s, + _Post_z_ char, _Destination, + _In_z_ char const*, _Source + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + char*, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, strcpy, + _Out_writes_z_(_String_length_(_Source) + 1), char, _Destination, + _In_z_ char const*, _Source + ) + +_Check_return_ +_ACRTIMP size_t __cdecl strcspn( + _In_z_ char const* _Str, + _In_z_ char const* _Control + ); + +#if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma push_macro("_strdup") + #undef _strdup +#endif + +_Check_return_ +_ACRTIMP _CRTALLOCATOR char* __cdecl _strdup( + _In_opt_z_ char const* _Source + ); + +#if defined _DEBUG && defined _CRTDBG_MAP_ALLOC + #pragma pop_macro("_strdup") +#endif + +_Ret_z_ +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_strerror_s) +_ACRTIMP char* __cdecl _strerror( + _In_opt_z_ char const* _ErrorMessage + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strerror_s( + _Out_writes_z_(_SizeInBytes) char* _Buffer, + _In_ size_t _SizeInBytes, + _In_opt_z_ char const* _ErrorMessage + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _strerror_s, + char, _Buffer, + _In_opt_z_ char const*, _ErrorMessage + ) + +_Ret_z_ +_Check_return_ _CRT_INSECURE_DEPRECATE(strerror_s) +_ACRTIMP char* __cdecl strerror( + _In_ int _ErrorMessage + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, strerror_s, + char, _Buffer, + _In_ int, _ErrorMessage + ) + +_Check_return_ +_ACRTIMP int __cdecl _stricmp( + _In_z_ char const* _String1, + _In_z_ char const* _String2 + ); + +_Check_return_ +_ACRTIMP int __cdecl _stricoll( + _In_z_ char const* _String1, + _In_z_ char const* _String2 + ); + +_Check_return_ +_ACRTIMP int __cdecl _stricoll_l( + _In_z_ char const* _String1, + _In_z_ char const* _String2, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _stricmp_l( + _In_z_ char const* _String1, + _In_z_ char const* _String2, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +size_t __cdecl strlen( + _In_z_ char const* _Str + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strlwr_s( + _Inout_updates_z_(_Size) char* _String, + _In_ size_t _Size + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _strlwr_s, + _Prepost_z_ char, _String + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + char*, __RETURN_POLICY_DST, _ACRTIMP, _strlwr, + _Inout_z_, char, _String + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strlwr_s_l( + _Inout_updates_z_(_Size) char* _String, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _strlwr_s_l, + _Prepost_z_ char, _String, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + char*, __RETURN_POLICY_DST, _ACRTIMP, _strlwr_l, _strlwr_s_l, + _Inout_updates_z_(_Size) char, + _Inout_z_, char, _String, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, strncat_s, + _Prepost_z_ char, _Destination, + _In_reads_or_z_(_Count) char const*, _Source, + _In_ size_t, _Count + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + char*, __RETURN_POLICY_DST, _ACRTIMP, strncat, strncat_s, + _Inout_updates_z_(_Size) char, + _Inout_updates_z_(_Count), char, _Destination, + _In_reads_or_z_(_Count) char const*, _Source, + _In_ size_t, _Count + ) + +_Check_return_ +_ACRTIMP int __cdecl strncmp( + _In_reads_or_z_(_MaxCount) char const* _Str1, + _In_reads_or_z_(_MaxCount) char const* _Str2, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _strnicmp( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _strnicmp_l( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _strnicoll( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _strnicoll_l( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_Check_return_ +_ACRTIMP int __cdecl _strncoll( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount + ); + +_Check_return_ +_ACRTIMP int __cdecl _strncoll_l( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + +_ACRTIMP size_t __cdecl __strncnt( + _In_reads_or_z_(_Count) char const* _String, + _In_ size_t _Count + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, strncpy_s, + char, _Destination, + _In_reads_or_z_(_Count) char const*, _Source, + _In_ size_t, _Count + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + char*, __RETURN_POLICY_DST, _ACRTIMP, strncpy, strncpy_s, + _Out_writes_z_(_Size) char, + _Out_writes_(_Count) _Post_maybez_, char, _Destination, + _In_reads_or_z_(_Count) char const*, _Source, + _In_ size_t, _Count + ) + +_Check_return_ +_When_( + _MaxCount > _String_length_(_String), + _Post_satisfies_(return == _String_length_(_String)) +) +_When_( + _MaxCount <= _String_length_(_String), + _Post_satisfies_(return == _MaxCount) +) +_ACRTIMP size_t __cdecl strnlen( + _In_reads_or_z_(_MaxCount) char const* _String, + _In_ size_t _MaxCount + ); + +#if __STDC_WANT_SECURE_LIB__ && !defined __midl + + _Check_return_ + _When_( + _MaxCount > _String_length_(_String), + _Post_satisfies_(return == _String_length_(_String)) + ) + _When_( + _MaxCount <= _String_length_(_String), + _Post_satisfies_(return == _MaxCount) + ) + static __inline size_t __CRTDECL strnlen_s( + _In_reads_or_z_(_MaxCount) char const* _String, + _In_ size_t _MaxCount + ) + { + return _String == 0 ? 0 : strnlen(_String, _MaxCount); + } + +#endif + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strnset_s( + _Inout_updates_z_(_SizeInBytes) char* _String, + _In_ size_t _SizeInBytes, + _In_ int _Value, + _In_ size_t _MaxCount + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2( + errno_t, _strnset_s, + _Prepost_z_ char, _Destination, + _In_ int, _Value, + _In_ size_t, _Count + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_EX( + char*, __RETURN_POLICY_DST, _ACRTIMP, _strnset, _strnset_s, + _Inout_updates_z_(_Size) char, + _Inout_updates_z_(_Count), char, _Destination, + _In_ int, _Value, + _In_ size_t, _Count + ) + +_Check_return_ +_ACRTIMP char _CONST_RETURN* __cdecl strpbrk( + _In_z_ char const* _Str, + _In_z_ char const* _Control + ); + +_ACRTIMP char* __cdecl _strrev( + _Inout_z_ char* _Str + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strset_s( + _Inout_updates_z_(_DestinationSize) char* _Destination, + _In_ size_t _DestinationSize, + _In_ int _Value + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _strset_s, + _Prepost_z_ char, _Destination, + _In_ int, _Value + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1( + char*, __RETURN_POLICY_DST, __EMPTY_DECLSPEC, _strset, + _Inout_z_, char, _Destination, + _In_ int, _Value + ) + +_Check_return_ +_ACRTIMP size_t __cdecl strspn( + _In_z_ char const* _Str, + _In_z_ char const* _Control + ); + +_Check_return_ _CRT_INSECURE_DEPRECATE(strtok_s) +_ACRTIMP char* __cdecl strtok( + _Inout_opt_z_ char* _String, + _In_z_ char const* _Delimiter + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strupr_s( + _Inout_updates_z_(_Size) char* _String, + _In_ size_t _Size + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _strupr_s, + _Prepost_z_ char, _String + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + char*, __RETURN_POLICY_DST, _ACRTIMP, _strupr, + _Inout_z_, char, _String + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strupr_s_l( + _Inout_updates_z_(_Size) char* _String, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _strupr_s_l, + _Prepost_z_ char, _String, + _In_opt_ _locale_t, _Locale + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX( + char*, __RETURN_POLICY_DST, _ACRTIMP, _strupr_l, _strupr_s_l, + _Inout_updates_z_(_Size) char, + _Inout_z_, char, _String, + _In_opt_ _locale_t, _Locale + ) + +_Success_(return < _MaxCount) +_Check_return_opt_ +_ACRTIMP size_t __cdecl strxfrm( + _Out_writes_opt_(_MaxCount) _Post_maybez_ char* _Destination, + _In_z_ char const* _Source, + _In_ _In_range_(<=,_CRT_INT_MAX) size_t _MaxCount + ); + +_Success_(return < _MaxCount) +_Check_return_opt_ +_ACRTIMP size_t __cdecl _strxfrm_l( + _Out_writes_opt_(_MaxCount) _Post_maybez_ char* _Destination, + _In_z_ char const* _Source, + _In_ _In_range_(<=,_CRT_INT_MAX) size_t _MaxCount, + _In_opt_ _locale_t _Locale + ); + + + +#ifdef __cplusplus +extern "C++" +{ + _Check_return_ + inline char* __CRTDECL strchr(_In_z_ char* const _String, _In_ int const _Ch) + { + return const_cast(strchr(static_cast(_String), _Ch)); + } + + _Check_return_ + inline char* __CRTDECL strpbrk(_In_z_ char* const _String, _In_z_ char const* const _Control) + { + return const_cast(strpbrk(static_cast(_String), _Control)); + } + + _Check_return_ + inline char* __CRTDECL strrchr(_In_z_ char* const _String, _In_ int const _Ch) + { + return const_cast(strrchr(static_cast(_String), _Ch)); + } + + _Check_return_ _Ret_maybenull_ + inline char* __CRTDECL strstr(_In_z_ char* const _String, _In_z_ char const* const _SubString) + { + return const_cast(strstr(static_cast(_String), _SubString)); + } +} +#endif // __cplusplus + + + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #pragma push_macro("strdup") + #undef strdup + _Check_return_ _CRT_NONSTDC_DEPRECATE(_strdup) + _ACRTIMP char* __cdecl strdup( + _In_opt_z_ char const* _String + ); + #pragma pop_macro("strdup") + + // Declarations of functions defined in oldnames.lib: + _Check_return_ _CRT_NONSTDC_DEPRECATE(_strcmpi) + _ACRTIMP int __cdecl strcmpi( + _In_z_ char const* _String1, + _In_z_ char const* _String2 + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_stricmp) + _ACRTIMP int __cdecl stricmp( + _In_z_ char const* _String1, + _In_z_ char const* _String2 + ); + + _CRT_NONSTDC_DEPRECATE(_strlwr) + _ACRTIMP char* __cdecl strlwr( + _Inout_z_ char* _String + ); + + _Check_return_ _CRT_NONSTDC_DEPRECATE(_strnicmp) + _ACRTIMP int __cdecl strnicmp( + _In_reads_or_z_(_MaxCount) char const* _String1, + _In_reads_or_z_(_MaxCount) char const* _String2, + _In_ size_t _MaxCount + ); + + _CRT_NONSTDC_DEPRECATE(_strnset) + _ACRTIMP char* __cdecl strnset( + _Inout_updates_z_(_MaxCount) char* _String, + _In_ int _Value, + _In_ size_t _MaxCount + ); + + _CRT_NONSTDC_DEPRECATE(_strrev) + _ACRTIMP char* __cdecl strrev( + _Inout_z_ char* _String + ); + + _CRT_NONSTDC_DEPRECATE(_strset) + char* __cdecl strset( + _Inout_z_ char* _String, + _In_ int _Value); + + _CRT_NONSTDC_DEPRECATE(_strupr) + _ACRTIMP char* __cdecl strupr( + _Inout_z_ char* _String + ); + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // !__midl +#endif // _INC_STRING diff --git a/sdk/include/ucrt/sys/locking.h b/sdk/include/ucrt/sys/locking.h new file mode 100644 index 0000000000000..5bb8d34758a8b --- /dev/null +++ b/sdk/include/ucrt/sys/locking.h @@ -0,0 +1,31 @@ +// +// sys/locking.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// This file defines the flags for the locking() function. +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#define _LK_UNLCK 0 // unlock the file region +#define _LK_LOCK 1 // lock the file region +#define _LK_NBLCK 2 // non-blocking lock +#define _LK_RLCK 3 // lock for writing +#define _LK_NBRLCK 4 // non-blocking lock for writing + +#if (defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__) + #define LK_UNLCK _LK_UNLCK + #define LK_LOCK _LK_LOCK + #define LK_NBLCK _LK_NBLCK + #define LK_RLCK _LK_RLCK + #define LK_NBRLCK _LK_NBRLCK +#endif + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/sys/stat.h b/sdk/include/ucrt/sys/stat.h new file mode 100644 index 0000000000000..5bce53a349766 --- /dev/null +++ b/sdk/include/ucrt/sys/stat.h @@ -0,0 +1,249 @@ +// +// sys/stat.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The _stat() and _fstat() families of functions. +// +#pragma once + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +struct _stat32 +{ + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + _off_t st_size; + __time32_t st_atime; + __time32_t st_mtime; + __time32_t st_ctime; +}; + +struct _stat32i64 +{ + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + __time32_t st_atime; + __time32_t st_mtime; + __time32_t st_ctime; +}; + +struct _stat64i32 +{ + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + _off_t st_size; + __time64_t st_atime; + __time64_t st_mtime; + __time64_t st_ctime; +}; + +struct _stat64 +{ + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + __time64_t st_atime; + __time64_t st_mtime; + __time64_t st_ctime; +}; + +#define __stat64 _stat64 // For legacy compatibility + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T + struct stat + { + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + _off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; + }; +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Flags +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#define _S_IFMT 0xF000 // File type mask +#define _S_IFDIR 0x4000 // Directory +#define _S_IFCHR 0x2000 // Character special +#define _S_IFIFO 0x1000 // Pipe +#define _S_IFREG 0x8000 // Regular +#define _S_IREAD 0x0100 // Read permission, owner +#define _S_IWRITE 0x0080 // Write permission, owner +#define _S_IEXEC 0x0040 // Execute/search permission, owner + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #define S_IFMT _S_IFMT + #define S_IFDIR _S_IFDIR + #define S_IFCHR _S_IFCHR + #define S_IFREG _S_IFREG + #define S_IREAD _S_IREAD + #define S_IWRITE _S_IWRITE + #define S_IEXEC _S_IEXEC +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _USE_32BIT_TIME_T + #define _fstat _fstat32 + #define _fstati64 _fstat32i64 + #define _stat _stat32 + #define _stati64 _stat32i64 + #define _wstat _wstat32 + #define _wstati64 _wstat32i64 +#else + #define _fstat _fstat64i32 + #define _fstati64 _fstat64 + #define _stat _stat64i32 + #define _stati64 _stat64 + #define _wstat _wstat64i32 + #define _wstati64 _wstat64 +#endif + + + +_ACRTIMP int __cdecl _fstat32( + _In_ int _FileHandle, + _Out_ struct _stat32* _Stat + ); + +_ACRTIMP int __cdecl _fstat32i64( + _In_ int _FileHandle, + _Out_ struct _stat32i64* _Stat + ); + +_ACRTIMP int __cdecl _fstat64i32( + _In_ int _FileHandle, + _Out_ struct _stat64i32* _Stat + ); + +_ACRTIMP int __cdecl _fstat64( + _In_ int _FileHandle, + _Out_ struct _stat64* _Stat + ); + +_ACRTIMP int __cdecl _stat32( + _In_z_ char const* _FileName, + _Out_ struct _stat32* _Stat + ); + +_ACRTIMP int __cdecl _stat32i64( + _In_z_ char const* _FileName, + _Out_ struct _stat32i64* _Stat + ); + +_ACRTIMP int __cdecl _stat64i32( + _In_z_ char const* _FileName, + _Out_ struct _stat64i32* _Stat + ); + +_ACRTIMP int __cdecl _stat64( + _In_z_ char const* _FileName, + _Out_ struct _stat64* _Stat + ); + +_ACRTIMP int __cdecl _wstat32( + _In_z_ wchar_t const* _FileName, + _Out_ struct _stat32* _Stat + ); + +_ACRTIMP int __cdecl _wstat32i64( + _In_z_ wchar_t const* _FileName, + _Out_ struct _stat32i64* _Stat + ); + +_ACRTIMP int __cdecl _wstat64i32( + _In_z_ wchar_t const* _FileName, + _Out_ struct _stat64i32* _Stat + ); + +_ACRTIMP int __cdecl _wstat64( + _In_z_ wchar_t const* _FileName, + _Out_ struct _stat64* _Stat + ); + + + +#if !defined RC_INVOKED && !defined __midl && defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T + #ifdef _USE_32BIT_TIME_T + + static __inline int __CRTDECL fstat(int const _FileHandle, struct stat* const _Stat) + { + _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat32)); + return _fstat32(_FileHandle, (struct _stat32*)_Stat); + } + + static __inline int __CRTDECL stat(char const* const _FileName, struct stat* const _Stat) + { + _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat32)); + return _stat32(_FileName, (struct _stat32*)_Stat); + } + + #else + + static __inline int __CRTDECL fstat(int const _FileHandle, struct stat* const _Stat) + { + _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat64i32)); + return _fstat64i32(_FileHandle, (struct _stat64i32*)_Stat); + } + static __inline int __CRTDECL stat(char const* const _FileName, struct stat* const _Stat) + { + _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat64i32)); + return _stat64i32(_FileName, (struct _stat64i32*)_Stat); + } + + #endif +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/sys/timeb.h b/sdk/include/ucrt/sys/timeb.h new file mode 100644 index 0000000000000..d1589a0d18e72 --- /dev/null +++ b/sdk/include/ucrt/sys/timeb.h @@ -0,0 +1,112 @@ +// +// sys/timeb.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The _ftime() family of functions +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +struct __timeb32 +{ + __time32_t time; + unsigned short millitm; + short timezone; + short dstflag; +}; + +struct __timeb64 +{ + __time64_t time; + unsigned short millitm; + short timezone; + short dstflag; +}; + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T + struct timeb + { + time_t time; + unsigned short millitm; + short timezone; + short dstflag; + }; +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _USE_32BIT_TIME_T + #define _timeb __timeb32 + #define _ftime _ftime32 + #define _ftime_s _ftime32_s +#else + #define _timeb __timeb64 + #define _ftime _ftime64 + #define _ftime_s _ftime64_s +#endif + + + +_CRT_INSECURE_DEPRECATE(_ftime32_s) +_ACRTIMP void __cdecl _ftime32( + _Out_ struct __timeb32* _Time + ); + +_ACRTIMP errno_t __cdecl _ftime32_s( + _Out_ struct __timeb32* _Time + ); + +_CRT_INSECURE_DEPRECATE(_ftime64_s) +_ACRTIMP void __cdecl _ftime64( + _Out_ struct __timeb64* _Time + ); + +_ACRTIMP errno_t __cdecl _ftime64_s( + _Out_ struct __timeb64* _Time + ); + + + +#if !defined RC_INVOKED && !defined __midl && defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T + + #ifdef _USE_32BIT_TIME_T + + static __inline void __CRTDECL ftime(struct timeb* const _Tmb) + { + _STATIC_ASSERT(sizeof(struct timeb) == sizeof(struct __timeb32)); + _ftime32((struct __timeb32*)_Tmb); + } + + #else + + static __inline void __CRTDECL ftime(struct timeb* const _Tmb) + { + _STATIC_ASSERT(sizeof(struct timeb) == sizeof(struct __timeb64)); + _ftime64((struct __timeb64*)_Tmb); + } + + #endif + +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/sys/types.h b/sdk/include/ucrt/sys/types.h new file mode 100644 index 0000000000000..fac4c372aabcb --- /dev/null +++ b/sdk/include/ucrt/sys/types.h @@ -0,0 +1,51 @@ +// +// sys/types.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Types used for returning file status and time information. +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +#ifndef _INO_T_DEFINED + #define _INO_T_DEFINED + + typedef unsigned short _ino_t; // inode number (unused on Windows) + + #if (defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__) + typedef _ino_t ino_t; + #endif +#endif + + + +#ifndef _DEV_T_DEFINED + #define _DEV_T_DEFINED + + typedef unsigned int _dev_t; // device code + + #if (defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__) + typedef _dev_t dev_t; + #endif +#endif + + + +#ifndef _OFF_T_DEFINED + #define _OFF_T_DEFINED + + typedef long _off_t; // file offset value + + #if (defined _CRT_DECLARE_NONSTDC_NAMES && _CRT_DECLARE_NONSTDC_NAMES) || (!defined _CRT_DECLARE_NONSTDC_NAMES && !__STDC__) + typedef _off_t off_t; + #endif +#endif + +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/sys/utime.h b/sdk/include/ucrt/sys/utime.h new file mode 100644 index 0000000000000..6f41f4cc85991 --- /dev/null +++ b/sdk/include/ucrt/sys/utime.h @@ -0,0 +1,163 @@ +// +// sys/utime.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The _utime() family of functions. +// +#pragma once + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifndef _CRT_NO_TIME_T + struct _utimbuf + { + time_t actime; // access time + time_t modtime; // modification time + }; +#endif + +struct __utimbuf32 +{ + __time32_t actime; // access time + __time32_t modtime; // modification time +}; + +struct __utimbuf64 +{ + __time64_t actime; // access time + __time64_t modtime; // modification time +}; + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES && !defined _CRT_NO_TIME_T + + struct utimbuf + { + time_t actime; // access time + time_t modtime; // modification time + }; + + struct utimbuf32 + { + __time32_t actime; // access time + __time32_t modtime; // modification time + }; + +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_ACRTIMP int __cdecl _utime32( + _In_z_ char const* _FileName, + _In_opt_ struct __utimbuf32* _Time + ); + +_ACRTIMP int __cdecl _futime32( + _In_ int _FileHandle, + _In_opt_ struct __utimbuf32* _Time + ); + +_ACRTIMP int __cdecl _wutime32( + _In_z_ wchar_t const* _FileName, + _In_opt_ struct __utimbuf32* _Time + ); + +_ACRTIMP int __cdecl _utime64( + _In_z_ char const* _FileName, + _In_opt_ struct __utimbuf64* _Time + ); + +_ACRTIMP int __cdecl _futime64( + _In_ int _FileHandle, + _In_opt_ struct __utimbuf64* _Time + ); + +_ACRTIMP int __cdecl _wutime64( + _In_z_ wchar_t const* _FileName, + _In_opt_ struct __utimbuf64* _Time + ); + + + +#if !defined RC_INVOKED && !defined __midl && !defined _CRT_NO_TIME_T + #ifdef _USE_32BIT_TIME_T + + static __inline int __CRTDECL _utime(char const* const _FileName, struct _utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct _utimbuf) == sizeof(struct __utimbuf32)); + return _utime32(_FileName, (struct __utimbuf32*)_Time); + } + + static __inline int __CRTDECL _futime(int const _FileHandle, struct _utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct _utimbuf) == sizeof(struct __utimbuf32)); + return _futime32(_FileHandle, (struct __utimbuf32*)_Time); + } + + static __inline int __CRTDECL _wutime(wchar_t const* const _FileName, struct _utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct _utimbuf) == sizeof(struct __utimbuf32)); + return _wutime32(_FileName, (struct __utimbuf32*)_Time); + } + + #else + static __inline int __CRTDECL _utime(char const* const _FileName, struct _utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct _utimbuf) == sizeof(struct __utimbuf64)); + return _utime64(_FileName, (struct __utimbuf64*)_Time); + } + + static __inline int __CRTDECL _futime(int const _FileHandle, struct _utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct _utimbuf) == sizeof(struct __utimbuf64)); + return _futime64(_FileHandle, (struct __utimbuf64*)_Time); + } + + static __inline int __CRTDECL _wutime(wchar_t const* const _FileName, struct _utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct _utimbuf) == sizeof(struct __utimbuf64)); + return _wutime64(_FileName, (struct __utimbuf64*)_Time); + } + + #endif + + #if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + #ifdef _USE_32BIT_TIME_T + + static __inline int __CRTDECL utime(char const* const _FileName, struct utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct utimbuf) == sizeof(struct __utimbuf32)); + return _utime32(_FileName, (struct __utimbuf32*)_Time); + } + + #else + + static __inline int __CRTDECL utime(char const* const _FileName, struct utimbuf* const _Time) + { + _STATIC_ASSERT(sizeof(struct utimbuf) == sizeof(struct __utimbuf64)); + return _utime64(_FileName, (struct __utimbuf64*)_Time); + } + + #endif + #endif +#endif + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS diff --git a/sdk/include/ucrt/tchar.h b/sdk/include/ucrt/tchar.h new file mode 100644 index 0000000000000..42a98d76ae3f2 --- /dev/null +++ b/sdk/include/ucrt/tchar.h @@ -0,0 +1,2330 @@ +/*** +*tchar.h - definitions for generic international text functions +* +* Copyright (c) Microsoft Corporation. All rights reserved. +* +*Purpose: +* Definitions for generic international functions, mostly defines +* which map string/formatted-io/ctype functions to char, wchar_t, or +* MBCS versions. To be used for compatibility between single-byte, +* multi-byte and Unicode text models. +* +* [Public] +* +****/ + +#pragma once +#ifndef _INC_TCHAR // include guard for 3rd party interop +#define _INC_TCHAR + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +/* Notes */ + +/* There is no: + * _tcscat_l + * _tcscpy_l + * because mbscat and mbscpy just behave like strcat and strcpy, + * so no special locale-specific behavior is needed. + */ + +/* Functions like: + * _strncat_l + * _strncat_s_l + * are only available if ANSI is defined (i.e. no _UNICODE nor _MBCS), + * because these functions are only accessible through the _tcs macros. + */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _CRT_FAR_MAPPINGS_NO_DEPRECATE +/* +Long ago, these f prefix text functions referred to handling of text in segmented architectures. Ever since the move +to Win32 they have been obsolete names, but we kept them around as aliases. Now that we have a deprecation +mechanism we can warn about them. You should switch to the identical function without the f prefix. +*/ +#pragma deprecated("_ftcscat") +#pragma deprecated("_ftcschr") +#pragma deprecated("_ftcscpy") +#pragma deprecated("_ftcscspn") +#pragma deprecated("_ftcslen") +#pragma deprecated("_ftcsncat") +#pragma deprecated("_ftcsncpy") +#pragma deprecated("_ftcspbrk") +#pragma deprecated("_ftcsrchr") +#pragma deprecated("_ftcsspn") +#pragma deprecated("_ftcsstr") +#pragma deprecated("_ftcstok") +#pragma deprecated("_ftcsdup") +#pragma deprecated("_ftcsnset") +#pragma deprecated("_ftcsrev") +#pragma deprecated("_ftcsset") +#pragma deprecated("_ftcscmp") +#pragma deprecated("_ftcsicmp") +#pragma deprecated("_ftcsnccmp") +#pragma deprecated("_ftcsncmp") +#pragma deprecated("_ftcsncicmp") +#pragma deprecated("_ftcsnicmp") +#pragma deprecated("_ftcscoll") +#pragma deprecated("_ftcsicoll") +#pragma deprecated("_ftcsnccoll") +#pragma deprecated("_ftcsncoll") +#pragma deprecated("_ftcsncicoll") +#pragma deprecated("_ftcsnicoll") +#pragma deprecated("_ftcsclen") +#pragma deprecated("_ftcsnccat") +#pragma deprecated("_ftcsnccpy") +#pragma deprecated("_ftcsncset") +#pragma deprecated("_ftcsdec") +#pragma deprecated("_ftcsinc") +#pragma deprecated("_ftcsnbcnt") +#pragma deprecated("_ftcsnccnt") +#pragma deprecated("_ftcsnextc") +#pragma deprecated("_ftcsninc") +#pragma deprecated("_ftcsspnp") +#pragma deprecated("_ftcslwr") +#pragma deprecated("_ftcsupr") +#pragma deprecated("_ftclen") +#pragma deprecated("_ftccpy") +#pragma deprecated("_ftccmp") +#endif /* _CRT_FAR_MAPPINGS_NO_DEPRECATE */ + +#define _ftcscat _tcscat +#define _ftcschr _tcschr +#define _ftcscpy _tcscpy +#define _ftcscspn _tcscspn +#define _ftcslen _tcslen +#define _ftcsncat _tcsncat +#define _ftcsncpy _tcsncpy +#define _ftcspbrk _tcspbrk +#define _ftcsrchr _tcsrchr +#define _ftcsspn _tcsspn +#define _ftcsstr _tcsstr +#define _ftcstok _tcstok + +#define _ftcsdup _tcsdup +#define _ftcsnset _tcsnset +#define _ftcsrev _tcsrev +#define _ftcsset _tcsset + +#define _ftcscmp _tcscmp +#define _ftcsicmp _tcsicmp +#define _ftcsnccmp _tcsnccmp +#define _ftcsncmp _tcsncmp +#define _ftcsncicmp _tcsncicmp +#define _ftcsnicmp _tcsnicmp + +#define _ftcscoll _tcscoll +#define _ftcsicoll _tcsicoll +#define _ftcsnccoll _tcsnccoll +#define _ftcsncoll _tcsncoll +#define _ftcsncicoll _tcsncicoll +#define _ftcsnicoll _tcsnicoll + +/* Redundant "logical-character" mappings */ + +#define _ftcsclen _tcsclen +#define _ftcsnccat _tcsnccat +#define _ftcsnccpy _tcsnccpy +#define _ftcsncset _tcsncset + +#define _ftcsdec _tcsdec +#define _ftcsinc _tcsinc +#define _ftcsnbcnt _tcsnbcnt +#define _ftcsnccnt _tcsnccnt +#define _ftcsnextc _tcsnextc +#define _ftcsninc _tcsninc +#define _ftcsspnp _tcsspnp + +#define _ftcslwr _tcslwr +#define _ftcsupr _tcsupr + +#define _ftclen _tclen +#define _ftccpy _tccpy +#define _ftccmp _tccmp + +#ifdef _UNICODE + +#ifdef __cplusplus +} /* ... extern "C" */ +#endif /* __cplusplus */ + +/* ++++++++++++++++++++ UNICODE ++++++++++++++++++++ */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef __TCHAR_DEFINED +typedef wchar_t _TCHAR; +typedef wchar_t _TSCHAR; +typedef wchar_t _TUCHAR; +typedef wchar_t _TXCHAR; +typedef wint_t _TINT; +#define __TCHAR_DEFINED +#endif /* __TCHAR_DEFINED */ + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES +#ifndef _TCHAR_DEFINED +typedef wchar_t TCHAR; +typedef wchar_t * PTCHAR; +typedef wchar_t TBYTE; +typedef wchar_t * PTBYTE; +#define _TCHAR_DEFINED +#endif /* _TCHAR_DEFINED */ +#endif /* _CRT_INTERNAL_NONSTDC_NAMES */ + +#define _TEOF WEOF + +#define __T(x) L ## x + + +/* Program */ + +#define _tmain wmain +#define _tWinMain wWinMain +#define _tenviron _wenviron +#define __targv __wargv + +/* Formatted i/o */ + +#define _tprintf wprintf +#define _tprintf_l _wprintf_l +#define _tprintf_s wprintf_s +#define _tprintf_s_l _wprintf_s_l +#define _tprintf_p _wprintf_p +#define _tprintf_p_l _wprintf_p_l +#define _tcprintf _cwprintf +#define _tcprintf_l _cwprintf_l +#define _tcprintf_s _cwprintf_s +#define _tcprintf_s_l _cwprintf_s_l +#define _tcprintf_p _cwprintf_p +#define _tcprintf_p_l _cwprintf_p_l +#define _vtcprintf _vcwprintf +#define _vtcprintf_l _vcwprintf_l +#define _vtcprintf_s _vcwprintf_s +#define _vtcprintf_s_l _vcwprintf_s_l +#define _vtcprintf_p _vcwprintf_p +#define _vtcprintf_p_l _vcwprintf_p_l +#define _ftprintf fwprintf +#define _ftprintf_l _fwprintf_l +#define _ftprintf_s fwprintf_s +#define _ftprintf_s_l _fwprintf_s_l +#define _ftprintf_p _fwprintf_p +#define _ftprintf_p_l _fwprintf_p_l +#define _stprintf _swprintf +#define _stprintf_l __swprintf_l +#define _stprintf_s swprintf_s +#define _stprintf_s_l _swprintf_s_l +#define _stprintf_p _swprintf_p +#define _stprintf_p_l _swprintf_p_l +#define _sctprintf _scwprintf +#define _sctprintf_l _scwprintf_l +#define _sctprintf_p _scwprintf_p +#define _sctprintf_p_l _scwprintf_p_l +#define _sntprintf _snwprintf +#define _sntprintf_l _snwprintf_l +#define _sntprintf_s _snwprintf_s +#define _sntprintf_s_l _snwprintf_s_l +#define _vtprintf vwprintf +#define _vtprintf_l _vwprintf_l +#define _vtprintf_s vwprintf_s +#define _vtprintf_s_l _vwprintf_s_l +#define _vtprintf_p _vwprintf_p +#define _vtprintf_p_l _vwprintf_p_l +#define _vftprintf vfwprintf +#define _vftprintf_l _vfwprintf_l +#define _vftprintf_s vfwprintf_s +#define _vftprintf_s_l _vfwprintf_s_l +#define _vftprintf_p _vfwprintf_p +#define _vftprintf_p_l _vfwprintf_p_l +#define _vstprintf vswprintf +#define _vstprintf_l _vswprintf_l +#define _vstprintf_s vswprintf_s +#define _vstprintf_s_l _vswprintf_s_l +#define _vstprintf_p _vswprintf_p +#define _vstprintf_p_l _vswprintf_p_l +#define _vsctprintf _vscwprintf +#define _vsctprintf_l _vscwprintf_l +#define _vsctprintf_p _vscwprintf_p +#define _vsctprintf_p_l _vscwprintf_p_l +#define _vsntprintf _vsnwprintf +#define _vsntprintf_l _vsnwprintf_l +#define _vsntprintf_s _vsnwprintf_s +#define _vsntprintf_s_l _vsnwprintf_s_l + +#define _tscanf wscanf +#define _tscanf_l _wscanf_l +#define _tscanf_s wscanf_s +#define _tscanf_s_l _wscanf_s_l +#define _tcscanf _cwscanf +#define _tcscanf_l _cwscanf_l +#define _tcscanf_s _cwscanf_s +#define _tcscanf_s_l _cwscanf_s_l +#define _ftscanf fwscanf +#define _ftscanf_l _fwscanf_l +#define _ftscanf_s fwscanf_s +#define _ftscanf_s_l _fwscanf_s_l +#define _stscanf swscanf +#define _stscanf_l _swscanf_l +#define _stscanf_s swscanf_s +#define _stscanf_s_l _swscanf_s_l +#define _sntscanf _snwscanf +#define _sntscanf_l _snwscanf_l +#define _sntscanf_s _snwscanf_s +#define _sntscanf_s_l _snwscanf_s_l +#define _vtscanf vwscanf +#define _vtscanf_s vwscanf_s +#define _vftscanf vfwscanf +#define _vftscanf_s vfwscanf_s +#define _vstscanf vswscanf +#define _vstscanf_s vswscanf_s + + +/* Unformatted i/o */ + +#define _fgettc fgetwc +#define _fgettc_nolock _fgetwc_nolock +#define _fgettchar _fgetwchar +#define _fgetts fgetws +#define _fputtc fputwc +#define _fputtc_nolock _fputwc_nolock +#define _fputtchar _fputwchar +#define _fputts fputws +#define _cputts _cputws +#define _cgetts_s _cgetws_s +#define _gettc getwc +#define _gettc_nolock _getwc_nolock +#define _gettch _getwch +#define _gettch_nolock _getwch_nolock +#define _gettche _getwche +#define _gettche_nolock _getwche_nolock +#define _gettchar getwchar +#define _gettchar_nolock _getwchar_nolock +#define _getts_s _getws_s +#define _puttc putwc +#define _puttc_nolock _fputwc_nolock +#define _puttchar putwchar +#define _puttchar_nolock _putwchar_nolock +#define _puttch _putwch +#define _puttch_nolock _putwch_nolock +#define _putts _putws +#define _ungettc ungetwc +#define _ungettc_nolock _ungetwc_nolock +#define _ungettch _ungetwch +#define _ungettch_nolock _ungetwch_nolock + + +/* String conversion functions */ + +#define _tcstod wcstod +#define _tcstof wcstof +#define _tcstol wcstol +#define _tcstold wcstold +#define _tcstoll wcstoll +#define _tcstoul wcstoul +#define _tcstoull wcstoull +#define _tcstoimax wcstoimax +#define _tcstoumax wcstoumax +#define _tcstoi64 _wcstoi64 +#define _tcstoui64 _wcstoui64 +#define _ttof _wtof +#define _tstof _wtof +#define _tstol _wtol +#define _tstoll _wtoll +#define _tstoi _wtoi +#define _tstoi64 _wtoi64 +#define _tcstod_l _wcstod_l +#define _tcstof_l _wcstof_l +#define _tcstol_l _wcstol_l +#define _tcstold_l _wcstold_l +#define _tcstoll_l _wcstoll_l +#define _tcstoul_l _wcstoul_l +#define _tcstoull_l _wcstoull_l +#define _tcstoi64_l _wcstoi64_l +#define _tcstoui64_l _wcstoui64_l +#define _tcstoimax_l _wcstoimax_l +#define _tcstoumax_l _wcstoumax_l +#define _tstof_l _wtof_l +#define _tstol_l _wtol_l +#define _tstoll_l _wtoll_l +#define _tstoi_l _wtoi_l +#define _tstoi64_l _wtoi64_l + +#define _itot_s _itow_s +#define _ltot_s _ltow_s +#define _ultot_s _ultow_s +#define _itot _itow +#define _ltot _ltow +#define _ultot _ultow +#define _ttoi _wtoi +#define _ttol _wtol +#define _ttoll _wtoll + +#define _ttoi64 _wtoi64 +#define _i64tot_s _i64tow_s +#define _ui64tot_s _ui64tow_s +#define _i64tot _i64tow +#define _ui64tot _ui64tow + +/* String functions */ + +#define _tcscat wcscat +#define _tcscat_s wcscat_s +#define _tcschr wcschr +#define _tcscpy wcscpy +#define _tcscpy_s wcscpy_s +#define _tcscspn wcscspn +#define _tcslen wcslen +#define _tcsnlen wcsnlen +#define _tcsncat wcsncat +#define _tcsncat_s wcsncat_s +#define _tcsncat_l _wcsncat_l +#define _tcsncat_s_l _wcsncat_s_l +#define _tcsncpy wcsncpy +#define _tcsncpy_s wcsncpy_s +#define _tcsncpy_l _wcsncpy_l +#define _tcsncpy_s_l _wcsncpy_s_l +#define _tcspbrk wcspbrk +#define _tcsrchr wcsrchr +#define _tcsspn wcsspn +#define _tcsstr wcsstr +#define _tcstok _wcstok +#define _tcstok_s wcstok_s +#define _tcstok_l _wcstok_l +#define _tcstok_s_l _wcstok_s_l +#define _tcserror _wcserror +#define _tcserror_s _wcserror_s +#define __tcserror __wcserror +#define __tcserror_s __wcserror_s + +#define _tcsdup _wcsdup +#define _tcsnset _wcsnset +#define _tcsnset_s _wcsnset_s +#define _tcsnset_l _wcsnset_l +#define _tcsnset_s_l _wcsnset_s_l +#define _tcsrev _wcsrev +#define _tcsset _wcsset +#define _tcsset_s _wcsset_s +#define _tcsset_l _wcsset_l +#define _tcsset_s_l _wcsset_s_l + +#define _tcscmp wcscmp +#define _tcsicmp _wcsicmp +#define _tcsicmp_l _wcsicmp_l +#define _tcsnccmp wcsncmp +#define _tcsncmp wcsncmp +#define _tcsncicmp _wcsnicmp +#define _tcsncicmp_l _wcsnicmp_l +#define _tcsnicmp _wcsnicmp +#define _tcsnicmp_l _wcsnicmp_l + +#define _tcscoll wcscoll +#define _tcscoll_l _wcscoll_l +#define _tcsicoll _wcsicoll +#define _tcsicoll_l _wcsicoll_l +#define _tcsnccoll _wcsncoll +#define _tcsnccoll_l _wcsncoll_l +#define _tcsncoll _wcsncoll +#define _tcsncoll_l _wcsncoll_l +#define _tcsncicoll _wcsnicoll +#define _tcsncicoll_l _wcsnicoll_l +#define _tcsnicoll _wcsnicoll +#define _tcsnicoll_l _wcsnicoll_l + +#ifdef _DEBUG +#define _tcsdup_dbg _wcsdup_dbg +#endif /* _DEBUG */ + +/* Execute functions */ + +#define _texecl _wexecl +#define _texecle _wexecle +#define _texeclp _wexeclp +#define _texeclpe _wexeclpe +#define _texecv _wexecv +#define _texecve _wexecve +#define _texecvp _wexecvp +#define _texecvpe _wexecvpe + +#define _tspawnl _wspawnl +#define _tspawnle _wspawnle +#define _tspawnlp _wspawnlp +#define _tspawnlpe _wspawnlpe +#define _tspawnv _wspawnv +#define _tspawnve _wspawnve +#define _tspawnvp _wspawnvp +#define _tspawnvp _wspawnvp +#define _tspawnvpe _wspawnvpe + +#define _tsystem _wsystem + + +/* Time functions */ + +#define _tasctime _wasctime +#define _tctime _wctime +#define _tctime32 _wctime32 +#define _tctime64 _wctime64 +#define _tstrdate _wstrdate +#define _tstrtime _wstrtime +#define _tutime _wutime +#define _tutime32 _wutime32 +#define _tutime64 _wutime64 +#define _tcsftime wcsftime +#define _tcsftime_l _wcsftime_l + +#define _tasctime_s _wasctime_s +#define _tctime_s _wctime_s +#define _tctime32_s _wctime32_s +#define _tctime64_s _wctime64_s +#define _tstrdate_s _wstrdate_s +#define _tstrtime_s _wstrtime_s + +/* Directory functions */ + +#define _tchdir _wchdir +#define _tgetcwd _wgetcwd +#define _tgetdcwd _wgetdcwd +#define _tgetdcwd_nolock _wgetdcwd_nolock +#define _tmkdir _wmkdir +#define _trmdir _wrmdir + +#ifdef _DEBUG +#define _tgetcwd_dbg _wgetcwd_dbg +#define _tgetdcwd_dbg _wgetdcwd_dbg +#define _tgetdcwd_lk_dbg _wgetdcwd_lk_dbg +#endif /* _DEBUG */ + +/* Environment/Path functions */ + +#define _tfullpath _wfullpath +#define _tgetenv _wgetenv +#define _tgetenv_s _wgetenv_s +#define _tdupenv_s _wdupenv_s +#define _tmakepath _wmakepath +#define _tmakepath_s _wmakepath_s +#define _tpgmptr _wpgmptr +#define _get_tpgmptr _get_wpgmptr +#define _tputenv _wputenv +#define _tputenv_s _wputenv_s +#define _tsearchenv _wsearchenv +#define _tsearchenv_s _wsearchenv_s +#define _tsplitpath _wsplitpath +#define _tsplitpath_s _wsplitpath_s + +#ifdef _DEBUG +#define _tfullpath_dbg _wfullpath_dbg +#define _tdupenv_s_dbg _wdupenv_s_dbg +#endif /* _DEBUG */ + +/* Stdio functions */ + +#define _tfdopen _wfdopen +#define _tfsopen _wfsopen +#define _tfopen _wfopen +#define _tfopen_s _wfopen_s +#define _tfreopen _wfreopen +#define _tfreopen_s _wfreopen_s +#define _tperror _wperror +#define _tpopen _wpopen +#define _ttempnam _wtempnam +#define _ttmpnam _wtmpnam +#define _ttmpnam_s _wtmpnam_s + +#ifdef _DEBUG +#define _ttempnam_dbg _wtempnam_dbg +#endif /* _DEBUG */ + + +/* Io functions */ + +#define _taccess _waccess +#define _taccess_s _waccess_s +#define _tchmod _wchmod +#define _tcreat _wcreat +#define _tfindfirst _wfindfirst +#define _tfindfirst32 _wfindfirst32 +#define _tfindfirst64 _wfindfirst64 +#define _tfindfirsti64 _wfindfirsti64 +#define _tfindfirst32i64 _wfindfirst32i64 +#define _tfindfirst64i32 _wfindfirst64i32 +#define _tfindnext _wfindnext +#define _tfindnext32 _wfindnext32 +#define _tfindnext64 _wfindnext64 +#define _tfindnexti64 _wfindnexti64 +#define _tfindnext32i64 _wfindnext32i64 +#define _tfindnext64i32 _wfindnext64i32 +#define _tmktemp _wmktemp +#define _tmktemp_s _wmktemp_s +#define _topen _wopen +#define _tremove _wremove +#define _trename _wrename +#define _tsopen _wsopen +#define _tsopen_s _wsopen_s +#define _tunlink _wunlink + +#define _tfinddata_t _wfinddata_t +#define _tfinddata32_t _wfinddata32_t +#define _tfinddata64_t _wfinddata64_t +#define _tfinddatai64_t _wfinddatai64_t +#define _tfinddata32i64_t _wfinddata32i64_t +#define _tfinddata64i32_t _wfinddata64i32_t + + +/* Stat functions */ + +#define _tstat _wstat +#define _tstat32 _wstat32 +#define _tstat32i64 _wstat32i64 +#define _tstat64 _wstat64 +#define _tstat64i32 _wstat64i32 +#define _tstati64 _wstati64 + + +/* Setlocale functions */ + +#define _tsetlocale _wsetlocale + + +/* Redundant "logical-character" mappings */ + +#define _tcsclen wcslen +#define _tcscnlen wcsnlen +#define _tcsclen_l(_String, _Locale) wcslen(_String) +#define _tcscnlen_l(_String, _Max_count, _Locale) wcsnlen((_String), (_Max_count)) +#define _tcsnccat wcsncat +#define _tcsnccat_s wcsncat_s +#define _tcsnccat_l _wcsncat_l +#define _tcsnccat_s_l _wcsncat_s_l +#define _tcsnccpy wcsncpy +#define _tcsnccpy_s wcsncpy_s +#define _tcsnccpy_l _wcsncpy_l +#define _tcsnccpy_s_l _wcsncpy_s_l +#define _tcsncset _wcsnset +#define _tcsncset_s _wcsnset_s +#define _tcsncset_l _wcsnset_l +#define _tcsncset_s_l _wcsnset_s_l + +#define _tcsdec _wcsdec +#define _tcsinc _wcsinc +#define _tcsnbcnt _wcsncnt +#define _tcsnccnt _wcsncnt +#define _tcsnextc _wcsnextc +#define _tcsninc _wcsninc +#define _tcsspnp _wcsspnp + +#define _tcslwr _wcslwr +#define _tcslwr_l _wcslwr_l +#define _tcslwr_s _wcslwr_s +#define _tcslwr_s_l _wcslwr_s_l +#define _tcsupr _wcsupr +#define _tcsupr_l _wcsupr_l +#define _tcsupr_s _wcsupr_s +#define _tcsupr_s_l _wcsupr_s_l +#define _tcsxfrm wcsxfrm +#define _tcsxfrm_l _wcsxfrm_l + + +#if __STDC__ || defined (_NO_INLINING) +#define _tclen(_pc) (1) +#define _tccpy(_pc1,_cpc2) ((*(_pc1) = *(_cpc2))) +#define _tccpy_l(_pc1,_cpc2,_locale) _tccpy((_pc1),(_cpc2)) +#define _tccmp(_cpc1,_cpc2) ((*(_cpc1))-(*(_cpc2))) +#else /* __STDC__ || defined (_NO_INLINING) */ +_Check_return_ __inline size_t __CRTDECL _tclen(_In_z_ const wchar_t *_Cpc) +{ + /* avoid compiler warning */ + (void)_Cpc; + return 1; +} +__inline void __CRTDECL _tccpy(_Out_ wchar_t *_Pc1, _In_z_ const wchar_t *_Cpc2) { *_Pc1 = (wchar_t)*_Cpc2; } +__inline void __CRTDECL _tccpy_l(_Out_ wchar_t *_Pc1, _In_z_ const wchar_t *_Cpc2, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + _tccpy(_Pc1, _Cpc2); +} +_Check_return_ __inline int __CRTDECL _tccmp(_In_z_ const wchar_t *_Cpc1, _In_z_ const wchar_t *_Cpc2) { return (int) ((*_Cpc1)-(*_Cpc2)); } +#endif /* __STDC__ || defined (_NO_INLINING) */ + +/* ctype functions */ + +#define _istalnum iswalnum +#define _istalnum_l _iswalnum_l +#define _istalpha iswalpha +#define _istalpha_l _iswalpha_l +#define _istascii iswascii +#define _istcntrl iswcntrl +#define _istcntrl_l _iswcntrl_l +#define _istdigit iswdigit +#define _istdigit_l _iswdigit_l +#define _istgraph iswgraph +#define _istgraph_l _iswgraph_l +#define _istlower iswlower +#define _istlower_l _iswlower_l +#define _istprint iswprint +#define _istprint_l _iswprint_l +#define _istpunct iswpunct +#define _istpunct_l _iswpunct_l +#define _istblank iswblank +#define _istblank_l _iswblank_l +#define _istspace iswspace +#define _istspace_l _iswspace_l +#define _istupper iswupper +#define _istupper_l _iswupper_l +#define _istxdigit iswxdigit +#define _istxdigit_l _iswxdigit_l + +#define _totupper towupper +#define _totupper_l _towupper_l +#define _totlower towlower +#define _totlower_l _towlower_l + +#define _istlegal(_Char) (1) +#define _istlead(_Char) (0) +#define _istleadbyte(_Char) (0) +#define _istleadbyte_l(_Char, _Locale) (0) + + +#if __STDC__ || defined _NO_INLINING +#define _wcsdec(_cpc1, _cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1) +#define _wcsinc(_pc) ((_pc)+1) +#define _wcsnextc(_cpc) ((unsigned int) *(_cpc)) +#define _wcsninc(_pc, _sz) (((_pc)+(_sz))) +_Check_return_ _ACRTIMP size_t __cdecl __wcsncnt(_In_reads_or_z_(_MaxCount) const wchar_t * _Str, _In_ size_t _MaxCount); +#define _wcsncnt(_cpc, _sz) (__wcsncnt(_cpc,_sz)) +#define _wcsspnp(_cpc1, _cpc2) (_cpc1==NULL ? NULL : ((*((_cpc1)+wcsspn(_cpc1,_cpc2))) ? ((_cpc1)+wcsspn(_cpc1,_cpc2)) : NULL)) +#define _wcsncpy_l(_Destination, _Source, _Count, _Locale) (wcsncpy(_Destination, _Source, _Count)) +#if __STDC_WANT_SECURE_LIB__ +#define _wcsncpy_s_l(_Destination, _Destination_size_chars, _Source, _Count, _Locale) (wcsncpy_s(_Destination, _Destination_size_chars, _Source, _Count)) +#endif /* __STDC_WANT_SECURE_LIB__ */ +#define _wcsncat_l(_Destination, _Source, _Count, _Locale) (wcsncat(_Destination, _Source, _Count)) +#if __STDC_WANT_SECURE_LIB__ +#define _wcsncat_s_l(_Destination, _Destination_size_chars, _Source, _Count, _Locale) (wcsncat_s(_Destination, _Destination_size_chars, _Source, _Count)) +#endif /* __STDC_WANT_SECURE_LIB__ */ +#define _wcstok_l(_String, _Delimiters, _Locale) (_wcstok(_String, _Delimiters)) +#define _wcstok_s_l(_String, _Delimiters, _Current_position, _Locale) (wcstok_s(_String, _Delimiters, _Current_position)) +#define _wcsnset_l(_Destination, _Value, _Count, _Locale) (_wcsnset(_Destination, _Value, _Count)) +#define _wcsnset_s_l(_Destination, _Destination_size_chars, _Value, _Count, _Locale) (_wcsnset_s(_Destination, _Destination_size_chars, _Value, _Count)) +#define _wcsset_l(_Destination, _Value, _Locale) (_wcsset(_Destination, _Value)) +#define _wcsset_s_l(_Destination, _Destination_size_chars, _Value, _Locale) (_wcsset_s(_Destination, _Destination_size_chars, _Value)) +#else /* __STDC__ || defined (_NO_INLINING) */ +_Check_return_ __inline wchar_t * __CRTDECL _wcsdec(_In_z_ const wchar_t * _Cpc1, _In_z_ const wchar_t * _Cpc2) { return (wchar_t *)((_Cpc1)>=(_Cpc2) ? NULL : ((_Cpc2)-1)); } +_Check_return_ __inline wchar_t * __CRTDECL _wcsinc(_In_z_ const wchar_t * _Pc) { return (wchar_t *)(_Pc+1); } +_Check_return_ __inline unsigned int __CRTDECL _wcsnextc(_In_z_ const wchar_t * _Cpc) { return (unsigned int)*_Cpc; } +_Check_return_ __inline wchar_t * __CRTDECL _wcsninc(_In_z_ const wchar_t * _Pc, _In_ size_t _Sz) { return (wchar_t *)(_Pc+_Sz); } +_Check_return_ __inline size_t __CRTDECL _wcsncnt( _In_reads_or_z_(_Cnt) const wchar_t * _String, _In_ size_t _Cnt) +{ + size_t n = _Cnt; + wchar_t *cp = (wchar_t *)_String; + while (n-- && *cp) + cp++; + return _Cnt - n - 1; +} +_Check_return_ __inline wchar_t * __CRTDECL _wcsspnp +( + _In_z_ const wchar_t * _Cpc1, + _In_z_ const wchar_t * _Cpc2 +) +{ + return _Cpc1==NULL ? NULL : ((*(_Cpc1 += wcsspn(_Cpc1,_Cpc2))!='\0') ? (wchar_t*)_Cpc1 : NULL); +} + +#if __STDC_WANT_SECURE_LIB__ +_Check_return_wat_ __inline errno_t __CRTDECL _wcsncpy_s_l(_Out_writes_z_(_Destination_size_chars) wchar_t *_Destination, _In_ size_t _Destination_size_chars, _In_z_ const wchar_t *_Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return wcsncpy_s(_Destination, _Destination_size_chars, _Source, _Count); +} +#endif /* __STDC_WANT_SECURE_LIB__ */ + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _wcsncpy_s_l, wchar_t, _Dest, _In_z_ const wchar_t *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(wchar_t *, __RETURN_POLICY_DST, _wcsncpy_l, _wcsncpy_s_l, _Out_writes_z_(_Size) wchar_t, _Out_writes_(_Count) wchar_t, _Dst, _In_z_ const wchar_t *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); +#pragma warning(suppress: 6054) // String may not be zero-terminated + return wcsncpy(_Dst, _Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(wchar_t *, __RETURN_POLICY_DST, _wcsncpy_l, _wcsncpy_s_l, _Out_writes_z_(_Size) wchar_t, _Out_writes_(_Count), wchar_t, _Dst, _In_z_ const wchar_t *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +#if __STDC_WANT_SECURE_LIB__ +_Check_return_wat_ __inline errno_t __CRTDECL _wcsncat_s_l(_Inout_updates_z_(_Destination_size_chars) wchar_t *_Destination, _In_ size_t _Destination_size_chars, _In_z_ const wchar_t *_Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return wcsncat_s(_Destination, _Destination_size_chars, _Source, _Count); +} +#endif /* __STDC_WANT_SECURE_LIB__ */ + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _wcsncat_s_l, wchar_t, _Dest, _In_z_ const wchar_t *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(wchar_t *, __RETURN_POLICY_DST, _wcsncat_l, _wcsncat_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_z_ wchar_t, _Dst, _In_z_ const wchar_t *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); +// C6054: String may not be zero-terminated +// C6059: Incorrect length parameter in call +#pragma warning(suppress: 6054 6059) + return wcsncat(_Dst, _Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(wchar_t *, __RETURN_POLICY_DST, _wcsncat_l, _wcsncat_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_z_, wchar_t, _Dst, _In_z_ const wchar_t *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +_CRT_INSECURE_DEPRECATE(_wcstok_s_l) __inline wchar_t * _wcstok_l(_Inout_opt_z_ wchar_t * _String, _In_z_ const wchar_t * _Delimiters, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); +#ifdef _CRT_NON_CONFORMING_WCSTOK + return wcstok(_String,_Delimiters); +#else + return wcstok(_String,_Delimiters,0); +#endif +} + +#if __STDC_WANT_SECURE_LIB__ +__inline wchar_t * _wcstok_s_l(_Inout_opt_z_ wchar_t * _String, _In_z_ const wchar_t * _Delimiters, _Inout_ _Deref_prepost_opt_z_ wchar_t **_Current_position, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return wcstok_s(_String, _Delimiters, _Current_position); +} +#endif /* __STDC_WANT_SECURE_LIB__ */ + +_Check_return_wat_ __inline errno_t _wcsnset_s_l(_Inout_updates_z_(_Destination_size_chars) wchar_t * _Destination, _In_ size_t _Destination_size_chars, _In_ wchar_t _Value, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return _wcsnset_s(_Destination, _Destination_size_chars, _Value, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _wcsnset_s_l, _Prepost_z_ wchar_t, _Dest, _In_ wchar_t, _Value, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(wchar_t *, __RETURN_POLICY_DST, _wcsnset_l, _wcsnset_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_updates_z_(_MaxCount) wchar_t, _Dst, _In_ wchar_t, _Value, _In_ size_t, _MaxCount, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); + return _wcsnset(_Dst, _Value, _MaxCount); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(wchar_t *, __RETURN_POLICY_DST, _wcsnset_l, _wcsnset_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_updates_z_(_MaxCount), wchar_t, _Dst, _In_ wchar_t, _Value, _In_ size_t, _MaxCount, _In_opt_ _locale_t, _Locale) + +_Check_return_wat_ __inline errno_t _wcsset_s_l(_Inout_updates_z_(_Destination_size_chars) wchar_t * _Destination, _In_ size_t _Destination_size_chars, _In_ wchar_t _Value, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return _wcsset_s(_Destination, _Destination_size_chars, _Value); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _wcsset_s_l, _Prepost_z_ wchar_t, _Dest, _In_ wchar_t, _Value, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(wchar_t *, __RETURN_POLICY_DST, _wcsset_l, _wcsset_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_z_ wchar_t, _Dst, _In_ wchar_t, _Value, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); + return _wcsset(_Dst, _Value); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(wchar_t *, __RETURN_POLICY_DST, _wcsset_l, _wcsset_s_l, _Inout_updates_z_(_Size) wchar_t, _Inout_z_, wchar_t, _Dst, _In_ wchar_t, _Value, _In_opt_ _locale_t, _Locale) + +#endif /* __STDC__ || defined (_NO_INLINING) */ + +#else /* _UNICODE */ + +/* ++++++++++++++++++++ SBCS and MBCS ++++++++++++++++++++ */ + +#ifdef __cplusplus +} /* ... extern "C" */ +#endif /* __cplusplus */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#define _TEOF EOF + +#define __T(x) x + + +/* Program */ + +#define _tmain main +#define _tWinMain WinMain +#define _tenviron _environ +#define __targv __argv + + +/* Formatted i/o */ + +#define _tprintf printf +#define _tprintf_l _printf_l +#define _tprintf_s printf_s +#define _tprintf_s_l _printf_s_l +#define _tprintf_p _printf_p +#define _tprintf_p_l _printf_p_l +#define _tcprintf _cprintf +#define _tcprintf_l _cprintf_l +#define _tcprintf_s _cprintf_s +#define _tcprintf_s_l _cprintf_s_l +#define _tcprintf_p _cprintf_p +#define _tcprintf_p_l _cprintf_p_l +#define _vtcprintf _vcprintf +#define _vtcprintf_l _vcprintf_l +#define _vtcprintf_s _vcprintf_s +#define _vtcprintf_s_l _vcprintf_s_l +#define _vtcprintf_p _vcprintf_p +#define _vtcprintf_p_l _vcprintf_p_l +#define _ftprintf fprintf +#define _ftprintf_l _fprintf_l +#define _ftprintf_s fprintf_s +#define _ftprintf_s_l _fprintf_s_l +#define _ftprintf_p _fprintf_p +#define _ftprintf_p_l _fprintf_p_l +#define _stprintf sprintf +#define _stprintf_l _sprintf_l +#define _stprintf_s sprintf_s +#define _stprintf_s_l _sprintf_s_l +#define _stprintf_p _sprintf_p +#define _stprintf_p_l _sprintf_p_l +#define _sctprintf _scprintf +#define _sctprintf_l _scprintf_l +#define _sctprintf_p _scprintf_p +#define _sctprintf_p_l _scprintf_p_l +#define _sntprintf _snprintf +#define _sntprintf_l _snprintf_l +#define _sntprintf_s _snprintf_s +#define _sntprintf_s_l _snprintf_s_l +#define _vtprintf vprintf +#define _vtprintf_l _vprintf_l +#define _vtprintf_s vprintf_s +#define _vtprintf_s_l _vprintf_s_l +#define _vtprintf_p _vprintf_p +#define _vtprintf_p_l _vprintf_p_l +#define _vftprintf vfprintf +#define _vftprintf_l _vfprintf_l +#define _vftprintf_s vfprintf_s +#define _vftprintf_s_l _vfprintf_s_l +#define _vftprintf_p _vfprintf_p +#define _vftprintf_p_l _vfprintf_p_l +#define _vstprintf vsprintf +#define _vstprintf_l _vsprintf_l +#define _vstprintf_s vsprintf_s +#define _vstprintf_s_l _vsprintf_s_l +#define _vstprintf_p _vsprintf_p +#define _vstprintf_p_l _vsprintf_p_l +#define _vsctprintf _vscprintf +#define _vsctprintf_l _vscprintf_l +#define _vsctprintf_p _vscprintf_p +#define _vsctprintf_p_l _vscprintf_p_l +#define _vsntprintf _vsnprintf +#define _vsntprintf_l _vsnprintf_l +#define _vsntprintf_s _vsnprintf_s +#define _vsntprintf_s_l _vsnprintf_s_l + +#define _tscanf scanf +#define _tscanf_l _scanf_l +#define _tscanf_s scanf_s +#define _tscanf_s_l _scanf_s_l +#define _tcscanf _cscanf +#define _tcscanf_l _cscanf_l +#define _tcscanf_s _cscanf_s +#define _tcscanf_s_l _cscanf_s_l +#define _ftscanf fscanf +#define _ftscanf_l _fscanf_l +#define _ftscanf_s fscanf_s +#define _ftscanf_s_l _fscanf_s_l +#define _stscanf sscanf +#define _stscanf_l _sscanf_l +#define _stscanf_s sscanf_s +#define _stscanf_s_l _sscanf_s_l +#define _sntscanf _snscanf +#define _sntscanf_l _snscanf_l +#define _sntscanf_s _snscanf_s +#define _sntscanf_s_l _snscanf_s_l +#define _vtscanf vscanf +#define _vtscanf_s vscanf_s +#define _vftscanf vfscanf +#define _vftscanf_s vfscanf_s +#define _vstscanf vsscanf +#define _vstscanf_s vsscanf_s + + +/* Unformatted i/o */ + +#define _fgettc fgetc +#define _fgettc_nolock _fgetc_nolock +#define _fgettchar _fgetchar +#define _fgetts fgets +#define _fputtc fputc +#define _fputtc_nolock _fputc_nolock +#define _fputtchar _fputchar +#define _fputts fputs +#define _cputts _cputs +#define _gettc getc +#define _gettc_nolock _getc_nolock +#define _gettch _getch +#define _gettch_nolock _getch_nolock +#define _gettche _getche +#define _gettche_nolock _getche_nolock +#define _gettchar getchar +#define _gettchar_nolock _getchar_nolock +#define _getts_s gets_s +#define _cgetts_s _cgets_s +#define _puttc putc +#define _puttc_nolock _fputc_nolock +#define _puttchar putchar +#define _puttchar_nolock _putchar_nolock +#define _puttch _putch +#define _puttch_nolock _putch_nolock +#define _putts puts +#define _ungettc ungetc +#define _ungettc_nolock _ungetc_nolock +#define _ungettch _ungetch +#define _ungettch_nolock _ungetch_nolock + +/* String conversion functions */ + +#define _tcstod strtod +#define _tcstof strtof +#define _tcstol strtol +#define _tcstold strtold +#define _tcstoll strtoll +#define _tcstoul strtoul +#define _tcstoull strtoull +#define _tcstoimax strtoimax +#define _tcstoumax strtoumax +#define _ttof atof +#define _tstof atof +#define _tstol atol +#define _tstoll atoll +#define _tstoi atoi +#define _tstoi64 _atoi64 +#define _tcstod_l _strtod_l +#define _tcstof_l _strtof_l +#define _tcstol_l _strtol_l +#define _tcstold_l _strtold_l +#define _tcstoll_l _strtoll_l +#define _tcstoul_l _strtoul_l +#define _tcstoull_l _strtoull_l +#define _tcstoimax_l _strtoimax_l +#define _tcstoumax_l _strtoumax_l +#define _tstof_l _atof_l +#define _tstol_l _atol_l +#define _tstoll_l _atoll_l +#define _tstoi_l _atoi_l +#define _tstoi64_l _atoi64_l + +#define _itot_s _itoa_s +#define _ltot_s _ltoa_s +#define _ultot_s _ultoa_s +#define _itot _itoa +#define _ltot _ltoa +#define _ultot _ultoa +#define _ttoi atoi +#define _ttol atol +#define _ttoll atoll + +#define _ttoi64 _atoi64 +#define _tcstoi64 _strtoi64 +#define _tcstoi64_l _strtoi64_l +#define _tcstoui64 _strtoui64 +#define _tcstoui64_l _strtoui64_l +#define _i64tot_s _i64toa_s +#define _ui64tot_s _ui64toa_s +#define _i64tot _i64toa +#define _ui64tot _ui64toa + +/* String functions */ + +/* Note that _mbscat, _mbscpy and _mbsdup are functionally equivalent to + strcat, strcpy and strdup, respectively. */ + +#define _tcscat strcat +#define _tcscat_s strcat_s +#define _tcscpy strcpy +#define _tcscpy_s strcpy_s +#define _tcsdup _strdup +#define _tcslen strlen +#define _tcsnlen strnlen +#define _tcsxfrm strxfrm +#define _tcsxfrm_l _strxfrm_l +#define _tcserror strerror +#define _tcserror_s strerror_s +#define __tcserror _strerror +#define __tcserror_s _strerror_s + +#ifdef _DEBUG +#define _tcsdup_dbg _strdup_dbg +#endif /* _DEBUG */ + +/* Execute functions */ + +#define _texecl _execl +#define _texecle _execle +#define _texeclp _execlp +#define _texeclpe _execlpe +#define _texecv _execv +#define _texecve _execve +#define _texecvp _execvp +#define _texecvpe _execvpe + +#define _tspawnl _spawnl +#define _tspawnle _spawnle +#define _tspawnlp _spawnlp +#define _tspawnlpe _spawnlpe +#define _tspawnv _spawnv +#define _tspawnve _spawnve +#define _tspawnvp _spawnvp +#define _tspawnvpe _spawnvpe + +#define _tsystem system + + +/* Time functions */ + +#define _tasctime asctime +#define _tctime ctime +#define _tctime32 _ctime32 +#define _tctime64 _ctime64 +#define _tstrdate _strdate +#define _tstrtime _strtime +#define _tutime _utime +#define _tutime32 _utime32 +#define _tutime64 _utime64 +#define _tcsftime strftime +#define _tcsftime_l _strftime_l + +#define _tasctime_s asctime_s +#define _tctime_s ctime_s +#define _tctime32_s _ctime32_s +#define _tctime64_s _ctime64_s +#define _tstrdate_s _strdate_s +#define _tstrtime_s _strtime_s + +/* Directory functions */ + +#define _tchdir _chdir +#define _tgetcwd _getcwd +#define _tgetdcwd _getdcwd +#define _tgetdcwd_nolock _getdcwd_nolock +#define _tmkdir _mkdir +#define _trmdir _rmdir + +#ifdef _DEBUG +#define _tgetcwd_dbg _getcwd_dbg +#define _tgetdcwd_dbg _getdcwd_dbg +#define _tgetdcwd_lk_dbg _getdcwd_lk_dbg +#endif /* _DEBUG */ + +/* Environment/Path functions */ + +#define _tfullpath _fullpath +#define _tgetenv getenv +#define _tgetenv_s getenv_s +#define _tdupenv_s _dupenv_s +#define _tmakepath _makepath +#define _tmakepath_s _makepath_s +#define _tpgmptr _pgmptr +#define _get_tpgmptr _get_pgmptr +#define _tputenv _putenv +#define _tputenv_s _putenv_s +#define _tsearchenv _searchenv +#define _tsearchenv_s _searchenv_s +#define _tsplitpath _splitpath +#define _tsplitpath_s _splitpath_s + +#ifdef _DEBUG +#define _tfullpath_dbg _fullpath_dbg +#define _tdupenv_s_dbg _dupenv_s_dbg +#endif /* _DEBUG */ + +/* Stdio functions */ + +#define _tfdopen _fdopen +#define _tfsopen _fsopen +#define _tfopen fopen +#define _tfopen_s fopen_s +#define _tfreopen freopen +#define _tfreopen_s freopen_s +#define _tperror perror +#define _tpopen _popen +#define _ttempnam _tempnam +#define _ttmpnam tmpnam +#define _ttmpnam_s tmpnam_s + +#ifdef _DEBUG +#define _ttempnam_dbg _tempnam_dbg +#endif /* _DEBUG */ + + +/* Io functions */ + +#define _tchmod _chmod +#define _tcreat _creat +#define _tfindfirst _findfirst +#define _tfindfirst32 _findfirst32 +#define _tfindfirst64 _findfirst64 +#define _tfindfirsti64 _findfirsti64 +#define _tfindfirst32i64 _findfirst32i64 +#define _tfindfirst64i32 _findfirst64i32 +#define _tfindnext _findnext +#define _tfindnext32 _findnext32 +#define _tfindnext64 _findnext64 +#define _tfindnexti64 _findnexti64 +#define _tfindnext32i64 _findnext32i64 +#define _tfindnext64i32 _findnext64i32 +#define _tmktemp _mktemp +#define _tmktemp_s _mktemp_s + +#define _topen _open +#define _taccess _access +#define _taccess_s _access_s + +#define _tremove remove +#define _trename rename +#define _tsopen _sopen +#define _tsopen_s _sopen_s +#define _tunlink _unlink + +#define _tfinddata_t _finddata_t +#define _tfinddata32_t _finddata32_t +#define _tfinddata64_t __finddata64_t +#define _tfinddatai64_t _finddatai64_t +#define _tfinddata32i64_t _finddata32i64_t +#define _tfinddata64i32_t _finddata64i32_t + +/* ctype functions */ +#define _istascii __isascii +#define _istcntrl iscntrl +#define _istcntrl_l _iscntrl_l +#define _istxdigit isxdigit +#define _istxdigit_l _isxdigit_l + +/* Stat functions */ +#define _tstat _stat +#define _tstat32 _stat32 +#define _tstat32i64 _stat32i64 +#define _tstat64 _stat64 +#define _tstat64i32 _stat64i32 +#define _tstati64 _stati64 + + +/* Setlocale functions */ + +#define _tsetlocale setlocale + + +#ifdef _MBCS + +#ifndef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP +#error Multibyte Character Set (MBCS) not supported for the current WINAPI_FAMILY. +#endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */ + +/* ++++++++++++++++++++ MBCS ++++++++++++++++++++ */ + +#ifdef __cplusplus +} /* ... extern "C" */ +#endif /* __cplusplus */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#ifndef __TCHAR_DEFINED +typedef char _TCHAR; +typedef signed char _TSCHAR; +typedef unsigned char _TUCHAR; +typedef unsigned char _TXCHAR; +typedef unsigned int _TINT; +#define __TCHAR_DEFINED +#endif /* __TCHAR_DEFINED */ + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES +#ifndef _TCHAR_DEFINED +typedef char TCHAR; +typedef char * PTCHAR; +typedef unsigned char TBYTE; +typedef unsigned char * PTBYTE; +#define _TCHAR_DEFINED +#endif /* _TCHAR_DEFINED */ +#endif /* _CRT_INTERNAL_NONSTDC_NAMES */ + + +#ifdef _MB_MAP_DIRECT + +/* use mb functions directly - types must match */ + +/* String functions */ + +#define _tcschr _mbschr +#define _tcscspn _mbscspn +#define _tcsncat _mbsnbcat +#define _tcsncat_s _mbsnbcat_s +#define _tcsncat_l _mbsnbcat_l +#define _tcsncat_s_l _mbsnbcat_s_l +#define _tcsncpy _mbsnbcpy +#define _tcsncpy_s _mbsnbcpy_s +#define _tcsncpy_l _mbsnbcpy_l +#define _tcsncpy_s_l _mbsnbcpy_s_l +#define _tcspbrk _mbspbrk +#define _tcsrchr _mbsrchr +#define _tcsspn _mbsspn +#define _tcsstr _mbsstr +#define _tcstok _mbstok +#define _tcstok_s _mbstok_s +#define _tcstok_l _mbstok_l +#define _tcstok_s_l _mbstok_s_l + +#define _tcsnset _mbsnbset +#define _tcsnset_l _mbsnbset_l +#define _tcsnset_s _mbsnbset_s +#define _tcsnset_s_l _mbsnbset_s_l +#define _tcsrev _mbsrev +#define _tcsset _mbsset +#define _tcsset_s _mbsset_s +#define _tcsset_l _mbsset_l +#define _tcsset_s_l _mbsset_s_l + +#define _tcscmp _mbscmp +#define _tcsicmp _mbsicmp +#define _tcsicmp_l _mbsicmp_l +#define _tcsnccmp _mbsncmp +#define _tcsncmp _mbsnbcmp +#define _tcsncicmp _mbsnicmp +#define _tcsncicmp_l _mbsnicmp_l +#define _tcsnicmp _mbsnbicmp +#define _tcsnicmp_l _mbsnbicmp_l + +#define _tcscoll _mbscoll +#define _tcscoll_l _mbscoll_l +#define _tcsicoll _mbsicoll +#define _tcsicoll_l _mbsicoll_l +#define _tcsnccoll _mbsncoll +#define _tcsnccoll_l _mbsncoll_l +#define _tcsncoll _mbsnbcoll +#define _tcsncoll_l _mbsnbcoll_l +#define _tcsncicoll _mbsnicoll +#define _tcsncicoll_l _mbsnicoll_l +#define _tcsnicoll _mbsnbicoll +#define _tcsnicoll_l _mbsnbicoll_l + +/* "logical-character" mappings */ + +#define _tcsclen _mbslen +#define _tcscnlen _mbsnlen +#define _tcsclen_l _mbslen_l +#define _tcscnlen_l _mbsnlen_l +#define _tcsnccat _mbsncat +#define _tcsnccat_s _mbsncat_s +#define _tcsnccat_l _mbsncat_l +#define _tcsnccat_s_l _mbsncat_s_l +#define _tcsnccpy _mbsncpy +#define _tcsnccpy_s _mbsncpy_s +#define _tcsnccpy_l _mbsncpy_l +#define _tcsnccpy_s_l _mbsncpy_s_l +#define _tcsncset _mbsnset +#define _tcsncset_s _mbsnset_s +#define _tcsncset_l _mbsnset_l +#define _tcsncset_s_l _mbsnset_s_l + +/* MBCS-specific mappings */ + +#define _tcsdec _mbsdec +#define _tcsinc _mbsinc +#define _tcsnbcnt _mbsnbcnt +#define _tcsnccnt _mbsnccnt +#define _tcsnextc _mbsnextc +#define _tcsninc _mbsninc +#define _tcsspnp _mbsspnp + +#define _tcslwr _mbslwr +#define _tcslwr_l _mbslwr_l +#define _tcslwr_s _mbslwr_s +#define _tcslwr_s_l _mbslwr_s_l +#define _tcsupr _mbsupr +#define _tcsupr_l _mbsupr_l +#define _tcsupr_s _mbsupr_s +#define _tcsupr_s_l _mbsupr_s_l + +#define _tclen _mbclen +#define _tccpy _mbccpy +#define _tccpy_l _mbccpy_l +#define _tccpy_s _mbccpy_s +#define _tccpy_s_l _mbccpy_s_l + +#else /* _MB_MAP_DIRECT */ + +#if __STDC__ || defined _NO_INLINING + +/* use type-safe linked-in function thunks */ + +/* String functions */ + +_Check_return_ _ACRTIMP _CONST_RETURN char * __cdecl _tcschr(_In_z_ const char * _Str, _In_ unsigned int _Val); +_Check_return_ _ACRTIMP size_t __cdecl _tcscspn(_In_z_ const char * _Str, _In_z_ const char * _Control); +_CRT_INSECURE_DEPRECATE(_tcsncat_s) _ACRTIMP char * __cdecl _tcsncat(_Inout_updates_z_(_MaxCount) char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount); +_ACRTIMP char * __cdecl _tcsncat_s(_Inout_updates_z_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, size_t _MaxCount); +_CRT_INSECURE_DEPRECATE(_tcsncat_s_l) _ACRTIMP char * __cdecl _tcsncat_l(_Inout_updates_z_(_MaxCount) char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsncat_s_l(_Inout_updates_z_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_CRT_INSECURE_DEPRECATE(_tcsncpy_s) _ACRTIMP char * __cdecl _tcsncpy(_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst, _In_z_ const char *_Src, size_t _MaxCount); +_ACRTIMP char * __cdecl _tcsncpy_s(_Out_writes_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, size_t _MaxCount); +_CRT_INSECURE_DEPRECATE(_tcsncpy_s_l) _ACRTIMP char * __cdecl _tcsncpy_l(_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsncpy_s_l(_Out_writes_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP _CONST_RETURN char * __cdecl _tcspbrk(_In_z_ const char * _Str, _In_z_ const char * _Control); +_Check_return_ _ACRTIMP _CONST_RETURN char * __cdecl _tcsrchr(_In_z_ const char * _Str, _In_ unsigned int _Ch); +_Check_return_ _ACRTIMP size_t __cdecl _tcsspn(_In_z_ const char * _Str, _In_z_ const char * _Control); +_Check_return_ _ACRTIMP _CONST_RETURN char * __cdecl _tcsstr(_In_z_ const char * _Str, _In_z_ const char * _Substr); +_Check_return_ _CRT_INSECURE_DEPRECATE(_tcstok_s) _ACRTIMP char * __cdecl _tcstok(_Inout_opt_ char *_Str, _In_z_ const char *_Delim); +_Check_return_ _ACRTIMP char * __cdecl _tcstok_s(_Inout_opt_ char *_Str, _In_z_ const char *_Delim, _Inout_ _Deref_prepost_opt_z_ char **_Context); +_Check_return_ _CRT_INSECURE_DEPRECATE(_tcstok_s_l) _ACRTIMP char * __cdecl _tcstok_l(_Inout_opt_ char *_Str, _In_z_ const char *_Delim, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP char * __cdecl _tcstok_s_l(_Inout_opt_ char *_Str, _In_z_ const char *_Delim, _Inout_ _Deref_prepost_opt_z_ char **_Context, _In_opt_ _locale_t _Locale); + +_CRT_INSECURE_DEPRECATE(_tcsnset_s) _ACRTIMP char * __cdecl _tcsnset(_Inout_z_ char * _Str, _In_ unsigned int _Val, _In_ size_t _MaxCount); +_Check_return_wat_ _ACRTIMP errno_t __cdecl _tcsnset_s(_Inout_updates_z_(_SizeInChars) char * _Str, _In_ size_t _SizeInChars, _In_ unsigned int _Val , _In_ size_t _MaxCount); +_CRT_INSECURE_DEPRECATE(_tcsnset_s_l) _ACRTIMP char * __cdecl _tcsnset_l(_Inout_z_ char * _Str, _In_ unsigned int _Val, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_Check_return_wat_ _ACRTIMP errno_t __cdecl _tcsnset_s_l(_Inout_updates_z_(_SizeInChars) char * _Str, _In_ size_t _SizeInChars, _In_ unsigned int _Val , _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsrev(_Inout_z_ char * _Str); +_CRT_INSECURE_DEPRECATE(_tcsset_s) _ACRTIMP char * __cdecl _tcsset(_Inout_z_ char * _Str, _In_ unsigned int _Val); +_CRT_INSECURE_DEPRECATE(_tcsset_s_l) _ACRTIMP char * __cdecl _tcsset_l(_Inout_z_ char * _Str, _In_ unsigned int _Val, _In_opt_ _locale_t _Locale); +_Check_return_wat_ _ACRTIMP errno_t __cdecl _tcsset_s(_Inout_updates_z_(_SizeInChars) char * _Str, _In_ size_t _SizeInChars, _In_ unsigned int _Val); +_Check_return_wat_ _ACRTIMP errno_t __cdecl _tcsset_s_l(_Inout_updates_z_(_SizeInChars) char * _Str, _In_ size_t _SizeInChars, _In_ unsigned int, _In_opt_ _locale_t _Locale); + +_Check_return_ _ACRTIMP int __cdecl _tcscmp(_In_z_ const char *_Str1, _In_z_ const char * _Str); +_Check_return_ _ACRTIMP int __cdecl _tcsicmp(_In_z_ const char *_Str1, _In_z_ const char *_Str2); +_Check_return_ _ACRTIMP int __cdecl _tcsicmp_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsnccmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsncmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsncicmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsncicmp_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsnicmp(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsnicmp_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, size_t _MaxCount, _In_opt_ _locale_t _Locale); + +_Check_return_ _ACRTIMP int __cdecl _tcscoll(_In_z_ const char * _Str1, _In_z_ const char * _Str2); +_Check_return_ _ACRTIMP int __cdecl _tcscoll_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsicoll(_In_z_ const char * _Str1, _In_z_ const char * _Str2); +_Check_return_ _ACRTIMP int __cdecl _tcsicoll_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsnccoll(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsnccoll_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsncoll(_In_z_ const char *_Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsncoll_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, size_t _MaxCount, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsncicoll(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsncicoll_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_Check_return_ _ACRTIMP int __cdecl _tcsnicoll(_In_z_ const char * _Str1, _In_z_ const char * _Str2, _In_ size_t _MaxCount); +_Check_return_ _ACRTIMP int __cdecl _tcsnicoll_l(_In_z_ const char *_Str1, _In_z_ const char *_Str2, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); + +/* "logical-character" mappings */ + +_Post_satisfies_(return <= _String_length_(_Str)) +_Check_return_ _ACRTIMP size_t __cdecl _tcsclen(_In_z_ const char *_Str); + +_Post_satisfies_(return <= _String_length_(_Str) && return <= _MaxCount) +_Check_return_ _ACRTIMP size_t __cdecl _tcscnlen(_In_z_ const char *_Str, _In_ size_t _MaxCount); + +_Post_satisfies_(return <= _String_length_(_Str)) +_Check_return_ _ACRTIMP size_t __cdecl _tcsclen_l(_In_z_ const char *_Str, _In_opt_ _locale_t _Locale); + +_Post_satisfies_(return <= _String_length_(_Str) && return <= _MaxCount) +_Check_return_ _ACRTIMP size_t __cdecl _tcscnlen_l(_In_z_ const char *_Str, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); + +_CRT_INSECURE_DEPRECATE(_tcsnccat_s) _ACRTIMP char * __cdecl _tcsnccat(_Inout_ char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount); +_ACRTIMP char * __cdecl _tcsnccat_s(_Inout_updates_z_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, _In_ size_t _MaxCount); +_CRT_INSECURE_DEPRECATE(_tcsnccat_s_l) _ACRTIMP char * __cdecl _tcsnccat_l(_Inout_ char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsnccat_s_l(_Inout_updates_z_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_CRT_INSECURE_DEPRECATE(_tcsnccpy_s) _ACRTIMP char * __cdecl _tcsnccpy(_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount); +_ACRTIMP char * __cdecl _tcsnccpy_s(_Out_writes_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, _In_ size_t _MaxCount); +_CRT_INSECURE_DEPRECATE(_tcsnccpy_s_l) _ACRTIMP char * __cdecl _tcsnccpy_l(_Out_writes_(_MaxCount) _Post_maybez_ char *_Dst, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsnccpy_s_l(_Out_writes_(_DstSizeInChars) char *_Dst, _In_ size_t _DstSizeInChars, _In_z_ const char *_Src, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_CRT_INSECURE_DEPRECATE(_tcsncset_s) _ACRTIMP char * __cdecl _tcsncset(_Inout_updates_z_(_MaxCount) char * _Str, _In_ unsigned int _Val, _In_ size_t _MaxCount); +_ACRTIMP char * __cdecl _tcsncset_s(_Inout_updates_z_(_SizeInChars) char * _Str, _In_ size_t _SizeInChars, _In_ unsigned int _Val, _In_ size_t _MaxCount); +_CRT_INSECURE_DEPRECATE(_tcsncset_s_l) _ACRTIMP char * __cdecl _tcsncset_l(_Inout_updates_z_(_MaxCount) char * _Str, _In_ unsigned int _Val, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsncset_s_l(_Inout_updates_z_(_SizeInChars) char * _Str, _In_ size_t _SizeInChars, _In_ unsigned int _Val, _In_ size_t _MaxCount, _In_opt_ _locale_t _Locale); + +/* MBCS-specific mappings */ + +_ACRTIMP char * __cdecl _tcsdec(_In_reads_z_(_Pos-_Start+1) const char * _Start, _In_z_ const char * _Pos); +_ACRTIMP char * __cdecl _tcsinc(_In_z_ const char * _Ptr); +_ACRTIMP size_t __cdecl _tcsnbcnt(_In_reads_or_z_(_MaxCount) const char * _Str, _In_ size_t _MaxCount); +_ACRTIMP size_t __cdecl _tcsnccnt(_In_reads_or_z_(_MaxCount) const char * _Str, _In_ size_t _MaxCount); +_ACRTIMP unsigned int __cdecl _tcsnextc (_In_z_ const char * _Str); +_ACRTIMP char * __cdecl _tcsninc(_In_reads_or_z_(_Count) const char * _Ptr, _In_ size_t _Count); +_ACRTIMP char * __cdecl _tcsspnp(_In_z_ const char * _Str1, _In_z_ const char * _Str2); + +_CRT_INSECURE_DEPRECATE(_tcslwr_s) _ACRTIMP char * __cdecl _tcslwr(_Inout_ char *_Str); +_CRT_INSECURE_DEPRECATE(_tcslwr_s_l) _ACRTIMP char * __cdecl _tcslwr_l(_Inout_ char *_Str, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcslwr_s(_Inout_updates_z_(_SizeInChars) char *_Str, _In_ size_t _SizeInChars); +_ACRTIMP char * __cdecl _tcslwr_s_l(_Inout_updates_z_(_SizeInChars) char *_Str, _In_ size_t _SizeInChars, _In_opt_ _locale_t _Locale); +_CRT_INSECURE_DEPRECATE(_tcsupr_s) _ACRTIMP char * __cdecl _tcsupr(_Inout_ char *_Str); +_CRT_INSECURE_DEPRECATE(_tcsupr_s_l) _ACRTIMP char * __cdecl _tcsupr_l(_Inout_ char *_Str, _In_opt_ _locale_t _Locale); +_ACRTIMP char * __cdecl _tcsupr_s(_Inout_updates_z_(_SizeInChars) char *_Str, _In_ size_t _SizeInChars); +_ACRTIMP char * __cdecl _tcsupr_s_l(_Inout_updates_z_(_SizeInChars) char *_Str, _In_ size_t _SizeInChars, _In_opt_ _locale_t _Locale); + +_Check_return_ _ACRTIMP size_t __cdecl _tclen(_In_z_ const char * _Str); +_CRT_INSECURE_DEPRECATE(_tccpy_s) _ACRTIMP void __cdecl _tccpy(_Pre_notnull_ _Post_z_ char * _DstCh, _In_z_ const char * _SrcCh); +_CRT_INSECURE_DEPRECATE(_tccpy_s_l) _ACRTIMP void __cdecl _tccpy_l(_Pre_notnull_ _Post_z_ char * _DstCh, _In_z_ const char * _SrcCh, _In_opt_ _locale_t _Locale); +_Check_return_wat_ _ACRTIMP errno_t __cdecl _tccpy_s(_Out_writes_z_(_SizeInBytes) char * _DstCh, size_t _SizeInBytes, _Out_opt_ int *_PCopied, _In_z_ const char * _SrcCh); +_Check_return_wat_ _ACRTIMP errno_t __cdecl _tccpy_s_l(_Out_writes_z_(_SizeInBytes) char * _DstCh, size_t _SizeInBytes, _Out_opt_ int *_PCopied, _In_z_ const char * _SrcCh, _In_opt_ _locale_t _Locale); + +#else /* __STDC__ || defined (_NO_INLINING) */ + +/* the default: use type-safe inline function thunks */ + +#define _PUC unsigned char * +#define _CPUC const unsigned char * +#define _PC char * +#define _CRPC _CONST_RETURN char * +#define _CPC const char * +#define _UI unsigned int + + +/* String functions */ + +__inline _CRPC _tcschr(_In_z_ _CPC _s1,_In_ _UI _c) {return (_CRPC)_mbschr((_CPUC)_s1,_c);} +__inline size_t _tcscspn(_In_z_ _CPC _s1,_In_z_ _CPC _s2) {return _mbscspn((_CPUC)_s1,(_CPUC)_s2);} + +_Check_return_wat_ __inline errno_t _tcsncat_s(_Inout_updates_z_(_Destination_size_chars) char *_Destination, _In_ size_t _Destination_size_chars, _In_z_ const char *_Source, _In_ size_t _Count) +{ + return _mbsnbcat_s((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source,_Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsncat_s, _Prepost_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsncat, _tcsncat_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) +{ + return (char *)_mbsnbcat((unsigned char *)_Dst,(const unsigned char *)_Source,_Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsncat, _tcsncat_s, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) + +_Check_return_wat_ __inline errno_t _tcsncat_s_l(_Inout_updates_z_(_Destination_size_chars) char *_Destination, _In_ size_t _Destination_size_chars, _In_z_ const char *_Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnbcat_s_l((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source,_Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tcsncat_s_l, _Prepost_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsncat_l, _tcsncat_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsnbcat_l((unsigned char *)_Dst,(const unsigned char *)_Source,_Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsncat_l, _tcsncat_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +_Check_return_wat_ __inline errno_t _tcsncpy_s(_Out_writes_z_(_Destination_size_chars) char * _Destination, _In_ size_t _Destination_size_chars, _In_z_ const char * _Source,_In_ size_t _Count) +{ + return _mbsnbcpy_s((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source,_Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsncpy_s, _Post_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(_Success_(return != 0) char *, __RETURN_POLICY_DST, _tcsncpy, _tcsncpy_s, _Out_writes_bytes_(_Count) _Post_maybez_ char, _Out_writes_bytes_(_Count) _Post_maybez_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) +{ + return (char *)_mbsnbcpy((unsigned char *)_Dst,(const unsigned char *)_Source,_Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsncpy, _tcsncpy_s, _Out_writes_z_(_Size) char, _Inout_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) + +_Check_return_wat_ __inline errno_t _tcsncpy_s_l(_Out_writes_z_(_Destination_size_chars) char * _Destination, _In_ size_t _Destination_size_chars, _In_z_ const char * _Source,_In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnbcpy_s_l((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source,_Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tcsncpy_s_l, _Post_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsncpy_l, _tcsncpy_s_l, _Out_writes_z_(_Size) char, _Out_writes_bytes_(_Count) _Post_maybez_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsnbcpy_l((unsigned char *)_Dst,(const unsigned char *)_Source,_Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsncpy_l, _tcsncpy_s_l, _Out_writes_z_(_Size) char, _Out_writes_z_(_Count), char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +_Check_return_ __inline _CRPC _tcspbrk(_In_z_ _CPC _s1,_In_z_ _CPC _s2) {return (_CRPC)_mbspbrk((_CPUC)_s1,(_CPUC)_s2);} +_Check_return_ __inline _CRPC _tcsrchr(_In_z_ _CPC _s1,_In_ _UI _c) {return (_CRPC)_mbsrchr((_CPUC)_s1,_c);} +_Check_return_ __inline size_t _tcsspn(_In_z_ _CPC _s1,_In_z_ _CPC _s2) {return _mbsspn((_CPUC)_s1,(_CPUC)_s2);} +_Check_return_ __inline _CRPC _tcsstr(_In_z_ _CPC _s1,_In_z_ _CPC _s2) {return (_CRPC)_mbsstr((_CPUC)_s1,(_CPUC)_s2);} + +_Check_return_ _CRT_INSECURE_DEPRECATE(_tcstok_s) __inline char * _tcstok(_Inout_opt_z_ char * _String,_In_z_ const char * _Delimiters) +{ + return (char * )_mbstok((unsigned char *)_String,(const unsigned char *)_Delimiters); +} + +_Check_return_ __inline char * _tcstok_s(_Inout_opt_z_ char * _String,_In_z_ const char * _Delimiters, _Inout_ _Deref_prepost_opt_z_ char **_Current_position) +{ + return (char * )_mbstok_s((unsigned char *)_String,(const unsigned char *)_Delimiters, (unsigned char **)_Current_position); +} + +_Check_return_ _CRT_INSECURE_DEPRECATE(_tcstok_s_l) __inline char * _tcstok_l(_Inout_opt_z_ char * _String,_In_z_ const char * _Delimiters, _In_opt_ _locale_t _Locale) +{ + return (char * )_mbstok_l((unsigned char *)_String,(const unsigned char *)_Delimiters, _Locale); +} + +_Check_return_ __inline char * _tcstok_s_l(_Inout_opt_z_ char * _String,_In_z_ const char * _Delimiters, _Inout_ _Deref_prepost_opt_z_ char **_Current_position, _In_opt_ _locale_t _Locale) +{ + return (char * )_mbstok_s_l((unsigned char *)_String,(const unsigned char *)_Delimiters, (unsigned char **)_Current_position, _Locale); +} + +_Check_return_wat_ __inline errno_t _tcsnset_s(_Inout_updates_z_(_SizeInBytes) char * _Dst, _In_ size_t _SizeInBytes, _In_ unsigned int _Value , _In_ size_t _Count) +{ + return _mbsnbset_s((unsigned char *)_Dst, _SizeInBytes, _Value, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsnset_s, _Prepost_z_ char, _Dest, _In_ unsigned int, _Value , _In_ size_t, _Count) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsnset, _tcsnset_s, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_Count) char, _Dst, _In_ unsigned int, _Value , _In_ size_t, _Count) +{ + return (char *)_mbsnbset((unsigned char *)_Dst, _Value, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsnset, _tcsnset_s, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_Count), char, _Dst, _In_ unsigned int, _Value , _In_ size_t, _Count) + +_Check_return_wat_ __inline errno_t _tcsnset_s_l(_Inout_updates_z_(_SizeInBytes) char * _Dst, _In_ size_t _SizeInBytes, _In_ unsigned int _Value , _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnbset_s_l((unsigned char *)_Dst, _SizeInBytes, _Value, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tcsnset_s_l, _Prepost_z_ char, _Dest, _In_ unsigned int, _Value , _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsnset_l, _tcsnset_s_l, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_Count) char, _Dst, _In_ unsigned int, _Value , _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsnbset_l((unsigned char *)_Dst, _Value, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsnset_l, _tcsnset_s_l, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_Count), char, _Dst, _In_ unsigned int, _Value , _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__inline _PC _tcsrev(_Inout_z_ _PC _s1) {return (_PC)_mbsrev((_PUC)_s1);} + +_Check_return_wat_ __inline errno_t _tcsset_s(_Inout_updates_z_(_SizeInBytes) char * _Dst, _In_ size_t _SizeInBytes, _In_ unsigned int _Value) +{ + return _mbsset_s((unsigned char *)_Dst, _SizeInBytes, _Value); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _tcsset_s, _Prepost_z_ char, _Dest, _In_ unsigned int, _Value) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _tcsset, _tcsset_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_ unsigned int, _Value) +{ + return (char *)_mbsset((unsigned char *)_Dst, _Value); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _tcsset, _tcsset_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_ unsigned int, _Value) + +_Check_return_wat_ __inline errno_t _tcsset_s_l(_Inout_updates_z_(_SizeInBytes) char * _Dst, _In_ size_t _SizeInBytes, _In_ unsigned int _Value, _In_opt_ _locale_t _Locale) +{ + return _mbsset_s_l((unsigned char *)_Dst, _SizeInBytes, _Value, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsset_s_l, _Prepost_z_ char, _Dest, _In_ unsigned int, _Value, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsset_l, _tcsset_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_ unsigned int, _Value, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsset_l((unsigned char *)_Dst, _Value, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsset_l, _tcsset_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_ unsigned int, _Value, _In_opt_ _locale_t, _Locale) + +_Check_return_ __inline int _tcscmp(_In_z_ _CPC _s1,_In_z_ _CPC _s2) {return _mbscmp((_CPUC)_s1,(_CPUC)_s2);} + +_Check_return_ __inline int _tcsicmp(_In_z_ const char * _String1, _In_z_ const char * _String2) +{ + return _mbsicmp((const unsigned char *)_String1,(const unsigned char *)_String2); +} + +_Check_return_ __inline int _tcsicmp_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_opt_ _locale_t _Locale) +{ + return _mbsicmp_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Locale); +} + +_Check_return_ __inline int _tcsnccmp(_In_reads_or_z_(_n) _CPC _s1,_In_z_ _CPC _s2,_In_ size_t _n) {return _mbsncmp((_CPUC)_s1,(_CPUC)_s2,_n);} +__inline int _tcsncmp(_In_z_ _CPC _s1,_In_z_ _CPC _s2,_In_ size_t _n) {return _mbsnbcmp((_CPUC)_s1,(_CPUC)_s2,_n);} + +_Check_return_ __inline int _tcsncicmp(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Char_count) +{ + return _mbsnicmp((const unsigned char *)_String1,(const unsigned char *)_String2,_Char_count); +} + +_Check_return_ __inline int _tcsncicmp_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Char_count, _In_opt_ _locale_t _Locale) +{ + return _mbsnicmp_l((const unsigned char *)_String1,(const unsigned char *)_String2,_Char_count, _Locale); +} + +_Check_return_ __inline int _tcsnicmp(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Char_count) +{ + return _mbsnbicmp((const unsigned char *)_String1,(const unsigned char *)_String2,_Char_count); +} + +_Check_return_ __inline int _tcsnicmp_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Char_count, _In_opt_ _locale_t _Locale) +{ + return _mbsnbicmp_l((const unsigned char *)_String1,(const unsigned char *)_String2,_Char_count, _Locale); +} + +_Check_return_ __inline int _tcscoll(_In_z_ const char * _String1, _In_z_ const char * _String2) +{ + return _mbscoll((const unsigned char *)_String1,(const unsigned char *)_String2); +} + +_Check_return_ __inline int _tcscoll_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_opt_ _locale_t _Locale) +{ + return _mbscoll_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Locale); +} + +_Check_return_ __inline int _tcsicoll(_In_z_ const char * _String1, _In_z_ const char * _String2) +{ + return _mbsicoll((const unsigned char *)_String1,(const unsigned char *)_String2); +} + +_Check_return_ __inline int _tcsicoll_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_opt_ _locale_t _Locale) +{ + return _mbsicoll_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Locale); +} + +_Check_return_ __inline int _tcsnccoll(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count) +{ + return _mbsncoll((const unsigned char *)_String1,(const unsigned char *)_String2, _Count); +} + +_Check_return_ __inline int _tcsnccoll_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsncoll_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Count, _Locale); +} + +_Check_return_ __inline int _tcsncoll(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count) +{ + return _mbsnbcoll((const unsigned char *)_String1,(const unsigned char *)_String2, _Count); +} + +_Check_return_ __inline int _tcsncoll_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnbcoll_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Count, _Locale); +} + +_Check_return_ __inline int _tcsncicoll(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count) +{ + return _mbsnicoll((const unsigned char *)_String1,(const unsigned char *)_String2, _Count); +} + +_Check_return_ __inline int _tcsncicoll_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnicoll_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Count, _Locale); +} + +_Check_return_ __inline int _tcsnicoll(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count) +{ + return _mbsnbicoll((const unsigned char *)_String1,(const unsigned char *)_String2, _Count); +} + +_Check_return_ __inline int _tcsnicoll_l(_In_z_ const char * _String1, _In_z_ const char * _String2, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnbicoll_l((const unsigned char *)_String1,(const unsigned char *)_String2, _Count, _Locale); +} + +/* "logical-character" mappings */ +_Check_return_ __inline size_t _tcsclen(_In_z_ const char * _String) +{ + return _mbslen((const unsigned char *)_String); +} + +_Check_return_ __inline size_t _tcscnlen(_In_z_ const char * _String, _In_ size_t _Maximum) +{ + return _mbsnlen((const unsigned char *)_String, _Maximum); +} + +_Check_return_ __inline size_t _tcsclen_l(_In_z_ const char * _String, _In_opt_ _locale_t _Locale) +{ + return _mbslen_l((const unsigned char *)_String, _Locale); +} + +_Check_return_ __inline size_t _tcscnlen_l(_In_z_ const char * _String, _In_ size_t _Maximum, _In_opt_ _locale_t _Locale) +{ + return _mbsnlen_l((const unsigned char *)_String, _Maximum, _Locale); +} + +_Check_return_wat_ __inline errno_t _tcsnccat_s(_Inout_updates_z_(_Destination_size_chars) char * _Destination, _In_ size_t _Destination_size_chars, _In_z_ const char * _Source, _In_ size_t _Count) +{ + return _mbsncat_s((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsnccat_s, _Prepost_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsnccat, _tcsnccat_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) +{ + return (char *)_mbsncat((unsigned char *)_Dst,(const unsigned char *)_Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsnccat, _tcsnccat_s, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) + +_Check_return_wat_ __inline errno_t _tcsnccat_s_l(_Inout_updates_z_(_Destination_size_chars) char * _Destination, _In_ size_t _Destination_size_chars, _In_z_ const char * _Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsncat_s_l((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tcsnccat_s_l, _Prepost_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsnccat_l, _tcsnccat_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsncat_l((unsigned char *)_Dst,(const unsigned char *)_Source, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsnccat_l, _tcsnccat_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +_Check_return_wat_ __inline errno_t _tcsnccpy_s(_Out_writes_z_(_Destination_size_chars) char * _Destination, _In_ size_t _Destination_size_chars, _In_z_ const char * _Source, _In_ size_t _Count) +{ + return _mbsncpy_s((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsnccpy_s, _Post_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsnccpy, _tcsnccpy_s, _Out_writes_bytes_(_Size) _Post_maybez_ char, _Pre_notnull_ _Post_maybez_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) +{ + return (char *)_mbsncpy((unsigned char *)_Dst,(const unsigned char *)_Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsnccpy, _tcsnccpy_s, _Out_writes_z_(_Size) char, _Pre_notnull_ _Post_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count) + +_Check_return_wat_ __inline errno_t _tcsnccpy_s_l(_Out_writes_z_(_Destination_size_chars) char * _Destination, _In_ size_t _Destination_size_chars, _In_z_ const char * _Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsncpy_s_l((unsigned char *)_Destination, _Destination_size_chars, (const unsigned char *)_Source, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tcsnccpy_s_l, _Post_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsnccpy_l, _tcsnccpy_s_l, _Out_writes_z_(_Size) char, _Out_writes_bytes_(_Count) _Post_maybez_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsncpy_l((unsigned char *)_Dst,(const unsigned char *)_Source, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsnccpy_l, _tcsnccpy_s_l, _Out_writes_z_(_Size) char, _Out_writes_bytes_(_Count) _Post_maybez_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +_Check_return_wat_ __inline errno_t _tcsncset_s(_Inout_updates_bytes_(_SizeInBytes) char *_Destination, _In_ size_t _SizeInBytes, _In_ unsigned int _Value, _In_ size_t _Count) +{ + return _mbsnset_s((unsigned char *)_Destination, _SizeInBytes, _Value, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tcsncset_s, char, _Dest, _In_ unsigned int, _Value, _In_ size_t, _Count) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsncset, _tcsncset_s, _Inout_updates_z_(_Size) char, _Inout_updates_bytes_(_Count) char, _Dst, _In_ unsigned int, _Value, _In_ size_t, _Count) +{ + return (char *)_mbsnset((unsigned char *)_Dst, _Value, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_2_EX(char *, __RETURN_POLICY_DST, _tcsncset, _tcsncset_s, _Inout_updates_z_(_Size) char, _Inout_updates_bytes_(_Count), char, _Dst, _In_ unsigned int, _Value, _In_ size_t, _Count) + +_Check_return_wat_ __inline errno_t _tcsncset_s_l(_Inout_updates_bytes_(_SizeInBytes) char *_Destination, _In_ size_t _SizeInBytes, _In_ unsigned int _Value, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsnset_s_l((unsigned char *)_Destination, _SizeInBytes, _Value, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tcsncset_s_l, char, _Dest, _In_ unsigned int, _Value, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsncset_l, _tcsncset_s_l, _Inout_updates_z_(_Size) char, _Inout_updates_bytes_(_Count) char, _Dst, _In_ unsigned int, _Value, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsnset_l((unsigned char *)_Dst, _Value, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _tcsncset_l, _tcsncset_s_l, _Inout_updates_z_(_Size) char, _Inout_updates_bytes_(_Count), char, _Dst, _In_ unsigned int, _Value, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +/* MBCS-specific mappings */ + +_Check_return_ __inline _PC _tcsdec(_In_reads_z_(_s2 - _s1 + 1) _CPC _s1,_In_z_ _CPC _s2) {return (_PC)_mbsdec((_CPUC)_s1,(_CPUC)_s2);} +_Check_return_ __inline _PC _tcsinc(_In_z_ _CPC _s1) {return (_PC)_mbsinc((_CPUC)_s1);} +_Check_return_ __inline size_t _tcsnbcnt(_In_reads_or_z_(_n) _CPC _s1,_In_ size_t _n) {return _mbsnbcnt((_CPUC)_s1,_n);} +_Check_return_ __inline size_t _tcsnccnt(_In_reads_or_z_(_n) _CPC _s1,_In_ size_t _n) {return _mbsnccnt((_CPUC)_s1,_n);} +_Check_return_ __inline _PC _tcsninc(_In_reads_or_z_(_n) _CPC _s1,_In_ size_t _n) {return (_PC)_mbsninc((_CPUC)_s1,_n);} +_Check_return_ __inline _PC _tcsspnp(_In_z_ _CPC _s1,_In_z_ _CPC _s2) {return (_PC)_mbsspnp((_CPUC)_s1,(_CPUC)_s2);} + +_Check_return_wat_ __inline errno_t _tcslwr_s(_Inout_updates_z_(_SizeInBytes) char * _String, size_t _SizeInBytes) +{ + return _mbslwr_s((unsigned char *)_String, _SizeInBytes); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _tcslwr_s, _Prepost_z_ char, _String) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(char *, __RETURN_POLICY_DST, _tcslwr, _tcslwr_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String) +{ + return (char *)_mbslwr((unsigned char *)_String); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(char *, __RETURN_POLICY_DST, _tcslwr, _tcslwr_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String) + +_Check_return_wat_ __inline errno_t _tcslwr_s_l(_Inout_updates_z_(_SizeInBytes) char * _String, _In_ size_t _SizeInBytes, _In_opt_ _locale_t _Locale) +{ + return _mbslwr_s_l((unsigned char *)_String, _SizeInBytes, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _tcslwr_s_l, _Prepost_z_ char, _String, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _tcslwr_l, _tcslwr_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbslwr_l((unsigned char *)_String, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _tcslwr_l, _tcslwr_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String, _In_opt_ _locale_t, _Locale) + +_Check_return_wat_ __inline errno_t _tcsupr_s(_Inout_updates_z_(_Count) char * _String, _In_ size_t _Count) +{ + return _mbsupr_s((unsigned char *)_String, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0(errno_t, _tcsupr_s, _Prepost_z_ char, _String) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(char *, __RETURN_POLICY_DST, _tcsupr, _tcsupr_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String) +{ + return (char *)_mbsupr((unsigned char *)_String); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_0_EX(char *, __RETURN_POLICY_DST, _tcsupr, _tcsupr_s, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String) + +_Check_return_wat_ __inline errno_t _tcsupr_s_l(_Inout_updates_z_(_Count) char * _String, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + return _mbsupr_s_l((unsigned char *)_String, _Count, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(errno_t, _tcsupr_s_l, _Prepost_z_ char, _String, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _tcsupr_l, _tcsupr_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String, _In_opt_ _locale_t, _Locale) +{ + return (char *)_mbsupr_l((unsigned char *)_String, _Locale); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_1_EX(char *, __RETURN_POLICY_DST, _tcsupr_l, _tcsupr_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _String, _In_opt_ _locale_t, _Locale) + +_Check_return_ __inline size_t _tclen(_In_z_ _CPC _s1) {return _mbclen((_CPUC)_s1);} + +_Check_return_wat_ __inline errno_t _tccpy_s(_Out_writes_z_(_SizeInBytes) char * _Destination, size_t _SizeInBytes, _Out_opt_ int *_PCopied, _In_z_ const char * _Source) +{ + return _mbccpy_s((unsigned char *)_Destination, _SizeInBytes, _PCopied, (const unsigned char *)_Source); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _tccpy_s, _Post_z_ char, _Dest, _Out_opt_ int *, _PCopied, _In_z_ const char *, _Source) + +_CRT_INSECURE_DEPRECATE(_tccpy_s) __inline void _tccpy(_Out_writes_z_(2) char * _Destination, _In_z_ const char * _Source) +{ + _mbccpy((unsigned char *)_Destination, (const unsigned char *)_Source); +} + +_Check_return_wat_ __inline errno_t _tccpy_s_l(_Out_writes_z_(_SizeInBytes) char * _Destination, _In_ size_t _SizeInBytes, _Out_opt_ int *_PCopied, _In_z_ const char * _Source, _In_opt_ _locale_t _Locale) +{ + return _mbccpy_s_l((unsigned char *)_Destination, _SizeInBytes, _PCopied, (const unsigned char *)_Source, _Locale); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _tccpy_s_l, _Post_z_ char, _Dest, _Out_opt_ int *, _PCopied, _In_z_ const char *, _Source, _In_opt_ _locale_t, _Locale) + +_CRT_INSECURE_DEPRECATE(_tccpy_s_l) __inline void _tccpy_l(_Out_writes_z_(2) char * _Destination, _In_z_ const char * _Source, _In_opt_ _locale_t _Locale) +{ + _mbccpy_l((unsigned char *)_Destination,( const unsigned char *)_Source, _Locale); +} + +/* inline helper */ +_Check_return_ __inline _UI _tcsnextc(_In_z_ _CPC _s1) +{ + _UI _n=0; + if (_ismbblead((_UI)*(_PUC)_s1)) + { + /* for a dud MBCS string (leadbyte, EOS), we don't move forward 2 + We do not assert here because this routine is too low-level + */ + if(_s1[1]!='\0') + { + _n=((_UI)*(_PUC)_s1)<<8; + _s1++; + } + } + _n+=(_UI)*(_PUC)_s1; + + return(_n); +} + +#endif /* __STDC__ || defined (_NO_INLINING) */ + +#ifdef __cplusplus +#ifndef _CPP_TCHAR_INLINES_DEFINED +#define _CPP_TCHAR_INLINES_DEFINED +extern "C++" { +_Check_return_ inline char * __CRTDECL _tcschr(_In_z_ char *_S, _In_ unsigned int _C) + {return ((char *)_tcschr((const char *)_S, _C)); } +_Check_return_ inline char * __CRTDECL _tcspbrk(_In_z_ char *_S, _In_z_ const char *_P) + {return ((char *)_tcspbrk((const char *)_S, _P)); } +_Check_return_ inline char * __CRTDECL _tcsrchr(_In_z_ char *_S, _In_ unsigned int _C) + {return ((char *)_tcsrchr((const char *)_S, _C)); } +_Check_return_ inline char * __CRTDECL _tcsstr(_In_z_ char *_S, _In_z_ const char *_P) + {return ((char *)_tcsstr((const char *)_S, _P)); } +} +#endif /* _CPP_TCHAR_INLINES_DEFINED */ +#endif /* __cplusplus */ + +#endif /* _MB_MAP_DIRECT */ + + +/* MBCS-specific mappings */ + +#define _tccmp(_cp1,_cp2) _tcsnccmp(_cp1,_cp2,1) + + +/* ctype functions */ + +#define _istalnum _ismbcalnum +#define _istalnum_l _ismbcalnum_l +#define _istalpha _ismbcalpha +#define _istalpha_l _ismbcalpha_l +#define _istdigit _ismbcdigit +#define _istdigit_l _ismbcdigit_l +#define _istgraph _ismbcgraph +#define _istgraph_l _ismbcgraph_l +#define _istlegal _ismbclegal +#define _istlegal_l _ismbclegal_l +#define _istlower _ismbclower +#define _istlower_l _ismbclower_l +#define _istprint _ismbcprint +#define _istprint_l _ismbcprint_l +#define _istpunct _ismbcpunct +#define _istpunct_l _ismbcpunct_l +#define _istblank _ismbcblank +#define _istblank_l _ismbcblank_l +#define _istspace _ismbcspace +#define _istspace_l _ismbcspace_l +#define _istupper _ismbcupper +#define _istupper_l _ismbcupper_l + +#define _totupper _mbctoupper +#define _totupper_l _mbctoupper_l +#define _totlower _mbctolower +#define _totlower_l _mbctolower_l + +#define _istlead _ismbblead +#define _istleadbyte isleadbyte +#define _istleadbyte_l _isleadbyte_l + +#else /* _MBCS */ + +/* ++++++++++++++++++++ SBCS ++++++++++++++++++++ */ + + +#ifndef __TCHAR_DEFINED +typedef char _TCHAR; +typedef signed char _TSCHAR; +typedef unsigned char _TUCHAR; +typedef char _TXCHAR; +typedef int _TINT; +#define __TCHAR_DEFINED +#endif /* __TCHAR_DEFINED */ + +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES +#ifndef _TCHAR_DEFINED +typedef char TCHAR; +typedef char * PTCHAR; +typedef unsigned char TBYTE; +typedef unsigned char * PTBYTE; +#define _TCHAR_DEFINED +#endif /* _TCHAR_DEFINED */ +#endif /* _CRT_INTERNAL_NONSTDC_NAMES */ + + +/* String functions */ + +#define _tcschr strchr +#define _tcscspn strcspn +#define _tcsncat strncat +#define _tcsncat_s strncat_s +#define _tcsncat_l _strncat_l +#define _tcsncat_s_l _strncat_s_l +#define _tcsncpy strncpy +#define _tcsncpy_s strncpy_s +#define _tcsncpy_l _strncpy_l +#define _tcsncpy_s_l _strncpy_s_l +#define _tcspbrk strpbrk +#define _tcsrchr strrchr +#define _tcsspn strspn +#define _tcsstr strstr +#define _tcstok strtok +#define _tcstok_s strtok_s +#define _tcstok_l _strtok_l +#define _tcstok_s_l _strtok_s_l + +#define _tcsnset _strnset +#define _tcsnset_s _strnset_s +#define _tcsnset_l _strnset_l +#define _tcsnset_s_l _strnset_s_l +#define _tcsrev _strrev +#define _tcsset _strset +#define _tcsset_s _strset_s +#define _tcsset_l _strset_l +#define _tcsset_s_l _strset_s_l + +#define _tcscmp strcmp +#define _tcsicmp _stricmp +#define _tcsicmp_l _stricmp_l +#define _tcsnccmp strncmp +#define _tcsncmp strncmp +#define _tcsncicmp _strnicmp +#define _tcsncicmp_l _strnicmp_l +#define _tcsnicmp _strnicmp +#define _tcsnicmp_l _strnicmp_l + +#define _tcscoll strcoll +#define _tcscoll_l _strcoll_l +#define _tcsicoll _stricoll +#define _tcsicoll_l _stricoll_l +#define _tcsnccoll _strncoll +#define _tcsnccoll_l _strncoll_l +#define _tcsncoll _strncoll +#define _tcsncoll_l _strncoll_l +#define _tcsncicoll _strnicoll +#define _tcsncicoll_l _strnicoll_l +#define _tcsnicoll _strnicoll +#define _tcsnicoll_l _strnicoll_l + +/* "logical-character" mappings */ + +#define _tcsclen strlen +#define _tcscnlen strnlen +#define _tcsclen_l(_String, _Locale) strlen(_String) +#define _tcscnlen_l(_String, _Max_count, _Locale) strnlen((_String), (_Max_count)) +#define _tcsnccat strncat +#define _tcsnccat_s strncat_s +#define _tcsnccat_l _strncat_l +#define _tcsnccat_s_l _strncat_s_l +#define _tcsnccpy strncpy +#define _tcsnccpy_s strncpy_s +#define _tcsnccpy_l _strncpy_l +#define _tcsnccpy_s_l _strncpy_s_l +#define _tcsncset _strnset +#define _tcsncset_s _strnset_s +#define _tcsncset_l _strnset_l +#define _tcsncset_s_l _strnset_s_l + +/* MBCS-specific functions */ + +#define _tcsdec _strdec +#define _tcsinc _strinc +#define _tcsnbcnt _strncnt +#define _tcsnccnt _strncnt +#define _tcsnextc _strnextc +#define _tcsninc _strninc +#define _tcsspnp _strspnp + +#define _tcslwr _strlwr +#define _tcslwr_l _strlwr_l +#define _tcslwr_s _strlwr_s +#define _tcslwr_s_l _strlwr_s_l +#define _tcsupr _strupr +#define _tcsupr_l _strupr_l +#define _tcsupr_s _strupr_s +#define _tcsupr_s_l _strupr_s_l +#define _tcsxfrm strxfrm +#define _tcsxfrm_l _strxfrm_l + +#define _istlead(_Char) (0) +#define _istleadbyte(_Char) (0) +#define _istleadbyte_l(_Char, _Locale) (0) + +#if __STDC__ || defined (_NO_INLINING) +#define _tclen(_pc) (1) +#define _tccpy(_pc1,_cpc2) (*(_pc1) = *(_cpc2)) +#define _tccpy_l(_pc1,_cpc2,_locale) _tccpy((_pc1),(_cpc2)) +#define _tccmp(_cpc1,_cpc2) (((unsigned char)*(_cpc1))-((unsigned char)*(_cpc2))) +#else /* __STDC__ || defined (_NO_INLINING) */ +_Check_return_ __inline size_t __CRTDECL _tclen(_In_z_ const char *_cpc) +{ + _CRT_UNUSED(_cpc); + return 1; +} +__inline void __CRTDECL _tccpy(_Out_ char *_pc1, _In_z_ const char *_cpc2) { *_pc1 = *_cpc2; } +__inline void __CRTDECL _tccpy_l(_Out_ char *_Pc1, _In_z_ const char *_Cpc2, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + _tccpy(_Pc1, _Cpc2); +} +_Check_return_ __inline int __CRTDECL _tccmp(_In_z_ const char *_cpc1, _In_z_ const char *_cpc2) { return (int) (((unsigned char)*_cpc1)-((unsigned char)*_cpc2)); } +#endif /* __STDC__ || defined (_NO_INLINING) */ + + +/* ctype-functions */ + +#define _istalnum isalnum +#define _istalnum_l _isalnum_l +#define _istalpha isalpha +#define _istalpha_l _isalpha_l +#define _istdigit isdigit +#define _istdigit_l _isdigit_l +#define _istgraph isgraph +#define _istgraph_l _isgraph_l +#define _istlower islower +#define _istlower_l _islower_l +#define _istprint isprint +#define _istprint_l _isprint_l +#define _istpunct ispunct +#define _istpunct_l _ispunct_l +#define _istblank isblank +#define _istblank_l _isblank_l +#define _istspace isspace +#define _istspace_l _isspace_l +#define _istupper isupper +#define _istupper_l _isupper_l + +#define _totupper toupper +#define _totupper_l _toupper_l +#define _totlower tolower +#define _totlower_l _tolower_l + +#define _istlegal(_c) (1) + + +/* the following is optional if functional versions are available */ + +#if __STDC__ || defined (_NO_INLINING) +#define _strdec(_cpc1, _cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1) +#define _strinc(_pc) ((_pc)+1) +#define _strnextc(_cpc) ((unsigned int) *(const unsigned char *)(_cpc)) +#define _strninc(_pc, _sz) (((_pc)+(_sz))) +_ACRTIMP size_t __cdecl __strncnt(_In_reads_or_z_(_Cnt) const char * _Str, _In_ size_t _Cnt); +#define _strncnt(_cpc, _sz) (__strncnt(_cpc,_sz)) +#define _strspnp(_cpc1, _cpc2) (_cpc1==NULL ? NULL : ((*((_cpc1)+strspn(_cpc1,_cpc2))) ? ((_cpc1)+strspn(_cpc1,_cpc2)) : NULL)) + +#define _strncpy_l(_Destination, _Source, _Count, _Locale) (strncpy(_Destination, _Source, _Count)) +#if __STDC_WANT_SECURE_LIB__ +#define _strncpy_s_l(_Destination, _Destination_size_chars, _Source, _Count, _Locale) (strncpy_s(_Destination, _Destination_size_chars, _Source, _Count)) +#endif /* __STDC_WANT_SECURE_LIB__ */ +#define _strncat_l(_Destination, _Source, _Count, _Locale) (strncat(_Destination, _Source, _Count)) +#if __STDC_WANT_SECURE_LIB__ +#define _strncat_s_l(_Destination, _Destination_size_chars, _Source, _Count, _Locale) (strncat_s(_Destination, _Destination_size_chars, _Source, _Count)) +#endif /* __STDC_WANT_SECURE_LIB__ */ +#define _strtok_l(_String, _Delimiters, _Locale) (strtok(_String, _Delimiters)) +#if __STDC_WANT_SECURE_LIB__ +#define _strtok_s_l(_String, _Delimiters, _Current_position, _Locale) (strtok_s(_String, _Delimiters, _Current_position)) +#endif /* __STDC_WANT_SECURE_LIB__ */ +#define _strnset_l(_Destination, _Value, _Count, _Locale) (_strnset(_Destination, _Value, _Count)) +#define _strnset_s_l(_Destination, _Destination_size_chars, _Value, _Count, _Locale) (_strnset_s(_Destination, _Destination_size_chars, _Value, _Count)) +#define _strset_l(_Destination, _Value, _Locale) (_strset(_Destination, _Value)) +#define _strset_s_l(_Destination, _Destination_size_chars, _Value, _Locale) (_strset_s(_Destination, _Destination_size_chars, _Value)) +#else /* __STDC__ || defined (_NO_INLINING) */ +_Check_return_ __inline char * __CRTDECL _strdec(_In_reads_z_(_Cpc2 - _Cpc1) const char * _Cpc1, _In_z_ const char * _Cpc2) { return (char *)((_Cpc1)>=(_Cpc2) ? NULL : (_Cpc2-1)); } +_Check_return_ __inline char * __CRTDECL _strinc(_In_z_ const char * _Pc) { return (char *)(_Pc+1); } +_Check_return_ __inline unsigned int __CRTDECL _strnextc(_In_z_ const char * _Cpc) { return (unsigned int)*(const unsigned char *)_Cpc; } +_Check_return_ __inline char * __CRTDECL _strninc(_In_reads_or_z_(_Sz) const char * _Pc, _In_ size_t _Sz) { return (char *)(_Pc+_Sz); } +_Check_return_ __inline size_t __CRTDECL _strncnt(_In_reads_or_z_(_Cnt) const char * _String, _In_ size_t _Cnt) +{ + size_t n = _Cnt; + char *cp = (char *)_String; + while (n-- && *cp) + cp++; + return _Cnt - n - 1; +} +_Check_return_ __inline char * __CRTDECL _strspnp +( + _In_z_ const char * _Cpc1, + _In_z_ const char * _Cpc2 +) +{ + return _Cpc1==NULL ? NULL : ((*(_Cpc1 += strspn(_Cpc1,_Cpc2))!='\0') ? (char*)_Cpc1 : NULL); +} + +#if __STDC_WANT_SECURE_LIB__ +_Check_return_wat_ __inline errno_t __CRTDECL _strncpy_s_l(_Out_writes_z_(_Destination_size_chars) char *_Destination, _In_ size_t _Destination_size_chars, _In_z_ const char *_Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return strncpy_s(_Destination, _Destination_size_chars, _Source, _Count); +} +#endif /* __STDC_WANT_SECURE_LIB__ */ + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _strncpy_s_l, _Post_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _strncpy_l, _strncpy_s_l, _Out_writes_z_(_Size) char, _Out_writes_(_Count) char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); + return strncpy(_Dst, _Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _strncpy_l, _strncpy_s_l, _Out_writes_z_(_Size) char, _Out_writes_(_Count), char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +#if __STDC_WANT_SECURE_LIB__ +_Check_return_wat_ __inline errno_t __CRTDECL _strncat_s_l(_Inout_updates_z_(_Destination_size_chars) char *_Destination, _In_ size_t _Destination_size_chars, _In_z_ const char *_Source, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return strncat_s(_Destination, _Destination_size_chars, _Source, _Count); +} +#endif /* __STDC_WANT_SECURE_LIB__ */ + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _strncat_s_l, _Prepost_z_ char, _Dest, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _strncat_l, _strncat_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); +#pragma warning(suppress: 6054) // String may not be zero-terminated + return strncat(_Dst, _Source, _Count); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _strncat_l, _strncat_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_z_ const char *, _Source, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +_Check_return_ _CRT_INSECURE_DEPRECATE(_strtok_s_l) __inline char * _strtok_l(_Inout_opt_z_ char * _String, _In_z_ const char * _Delimiters, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return strtok(_String,_Delimiters); +} + +#if __STDC_WANT_SECURE_LIB__ +_Check_return_ __inline char * _strtok_s_l(_Inout_opt_z_ char * _String, _In_z_ const char * _Delimiters, _Inout_ _Deref_prepost_opt_z_ char **_Current_position, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return strtok_s(_String, _Delimiters, _Current_position); +} +#endif /* __STDC_WANT_SECURE_LIB__ */ + +__inline errno_t __CRTDECL _strnset_s_l(_Inout_updates_z_(_Destination_size_chars) char *_Destination, _In_ size_t _Destination_size_chars, _In_ int _Value, _In_ size_t _Count, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return _strnset_s(_Destination, _Destination_size_chars, _Value, _Count); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_3(errno_t, _strnset_s_l, _Prepost_z_ char, _Dest, _In_ int, _Value, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _strnset_l, _strnset_s_l, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_MaxCount) char, _Dst, _In_ int, _Value, _In_ size_t, _MaxCount, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); +#pragma warning(suppress: 6054) // String may not be zero-terminated + return _strnset(_Dst, _Value, _MaxCount); +} + +__DEFINE_CPP_OVERLOAD_INLINE_NFUNC_0_3_EX(char *, __RETURN_POLICY_DST, _strnset_l, _strnset_s_l, _Inout_updates_z_(_Size) char, _Inout_updates_z_(_MaxCount), char, _Dst, _In_ int, _Value, _In_ size_t, _Count, _In_opt_ _locale_t, _Locale) + +__inline errno_t __CRTDECL _strset_s_l(_Inout_updates_z_(_Destination_size_chars) char *_Destination, _In_ size_t _Destination_size_chars, _In_ int _Value, _In_opt_ _locale_t _Locale) +{ + _CRT_UNUSED(_Locale); + return _strset_s(_Destination, _Destination_size_chars, _Value); +} + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(errno_t, _strset_s_l, _Prepost_z_ char, _Dest, _In_ int, _Value, _In_opt_ _locale_t, _Locale) + +__DECLARE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(char *, __RETURN_POLICY_DST, _strset_l, _strset_s_l, _Inout_updates_z_(_Size) char, _Inout_z_ char, _Dst, _In_ int, _Value, _In_opt_ _locale_t, _Locale) +{ + _CRT_UNUSED(_Locale); + return _strset(_Dst, _Value); +} + +__DEFINE_CPP_OVERLOAD_INLINE_FUNC_0_2_EX(char *, __RETURN_POLICY_DST, _strset_l, _strset_s_l, _Inout_updates_z_(_Size) char, _Inout_z_, char, _Dst, _In_ int, _Value, _In_opt_ _locale_t, _Locale) + +#endif /* __STDC__ || defined (_NO_INLINING) */ + + +#endif /* _MBCS */ + +#endif /* _UNICODE */ + + +/* Generic text macros to be used with string literals and character constants. + Will also allow symbolic constants that resolve to same. */ + +#define _T(x) __T(x) +#define _TEXT(x) __T(x) + + +#ifdef __cplusplus +} /* ... extern "C" */ +#endif /* __cplusplus */ +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif /* _INC_TCHAR */ + diff --git a/sdk/include/ucrt/tgmath.h b/sdk/include/ucrt/tgmath.h new file mode 100644 index 0000000000000..ba5cca30b1fc4 --- /dev/null +++ b/sdk/include/ucrt/tgmath.h @@ -0,0 +1,650 @@ +// +// tgmath.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The type-generic math library. +// +#pragma once +#ifndef _TGMATH +#define _TGMATH + +#include + +#if (_CRT_HAS_CXX17 == 1) && !defined(_CRT_USE_C_TGMATH_H) + +#include + +#else // ^^^^ /std:c++17 ^^^^ // vvvv _CRT_USE_C_TGMATH_H vvvv + +#include +#include + +#if _CRT_HAS_C11 == 0 + +#ifndef _CRT_SILENCE_NONCONFORMING_TGMATH_H + +#pragma message(_CRT_WARNING_MESSAGE("UCRT4000", \ + "This header does not conform to the C99 standard. " \ + "C99 functionality is available when compiling in C11 mode or higher (/std:c11). " \ + "Functionality equivalent to the type-generic functions provided by tgmath.h is available " \ + "in when compiling as C++. " \ + "If compiling in C++17 mode or higher (/std:c++17), this header will automatically include instead. " \ + "You can define _CRT_SILENCE_NONCONFORMING_TGMATH_H to acknowledge that you have received this warning.")) + +#endif // _CRT_SILENCE_NONCONFORMING_TGMATH_H + +#else // ^^^^ Default C Support ^^^^ // vvvv C11 Support vvvv + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS +_CRT_BEGIN_C_HEADER + +#define __tgmath_resolve_real_binary_op(X, Y) _Generic((X), \ + long double: 0.0l, \ + \ + default: _Generic((Y), \ + long double: 0.0l, \ + default: 0.0 \ + ), \ + \ + float: _Generic((Y), \ + long double: 0.0l, \ + default: 0.0, \ + float: 0.0f \ + ) \ + ) + +#define fabs(X) _Generic((X), \ + _Lcomplex: cabsl, \ + _Fcomplex: cabsf, \ + _Dcomplex: cabs, \ + long double: fabsl, \ + float: fabsf, \ + default: fabs \ +)(X) + +#define exp(X) _Generic((X), \ + _Lcomplex: cexpl, \ + _Fcomplex: cexpf, \ + _Dcomplex: cexp, \ + long double: expl, \ + float: expf, \ + default: exp \ +)(X) + +#define log(X) _Generic((X), \ + _Lcomplex: clogl, \ + _Fcomplex: clogf, \ + _Dcomplex: clog, \ + long double: logl, \ + float: logf, \ + default: log \ +)(X) + +// C99 Complex types currently not supported. Complex types do not cast/promote implicitly - need inline helper functions. + +inline _Lcomplex __cpowl_lc_dc(_Lcomplex const __lc, _Dcomplex const __dc) +{ + return cpowl(__lc, _LCbuild(__dc._Val[0], __dc._Val[1])); +} + +inline _Lcomplex __cpowl_dc_lc(_Dcomplex const __dc, _Lcomplex const __lc) +{ + return cpowl(_LCbuild(__dc._Val[0], __dc._Val[1]), __lc); +} + +inline _Lcomplex __cpowl_lc_fc(_Lcomplex const __lc, _Fcomplex const __fc) +{ + return cpowl(__lc, _LCbuild(__fc._Val[0], __fc._Val[1])); +} + +inline _Lcomplex __cpowl_fc_lc(_Fcomplex const __fc, _Lcomplex const __lc) +{ + return cpowl(_LCbuild(__fc._Val[0], __fc._Val[1]), __lc); +} + +inline _Lcomplex __cpowl_lc_l(_Lcomplex const __lc, long double const __l) +{ + return cpowl(__lc, _LCbuild(__l, 0.0)); +} + +inline _Lcomplex __cpowl_l_lc(long double const __l, _Lcomplex const __lc) +{ + return cpowl(_LCbuild(__l, 0.0), __lc); +} + +inline _Lcomplex __cpowl_lc_d(_Lcomplex const __lc, double const __d) +{ + return cpowl(__lc, _LCbuild(__d, 0.0)); +} + +inline _Lcomplex __cpowl_d_lc(double const __d, _Lcomplex const __lc) +{ + return cpowl(_LCbuild(__d, 0.0), __lc); +} + +inline _Lcomplex __cpowl_lc_f(_Lcomplex const __lc, float const __f) +{ + return cpowl(__lc, _LCbuild(__f, 0.0)); +} + +inline _Lcomplex __cpowl_f_lc(float const __f, _Lcomplex const __lc) +{ + return cpowl(_LCbuild(__f, 0.0), __lc); +} + +inline _Lcomplex __cpowl_dc_l(_Dcomplex const __dc, long double const __l) +{ + return cpowl(_LCbuild(__dc._Val[0], __dc._Val[1]), _LCbuild(__l, 0.0)); +} + +inline _Lcomplex __cpowl_l_dc(long double const __l, _Dcomplex const __dc) +{ + return cpowl(_LCbuild(__l, 0.0), _LCbuild(__dc._Val[0], __dc._Val[1])); +} + +inline _Lcomplex __cpowl_fc_l(_Fcomplex const __fc, long double const __l) +{ + return cpowl(_LCbuild(__fc._Val[0], __fc._Val[1]), _LCbuild(__l, 0.0)); +} + +inline _Lcomplex __cpowl_l_fc(long double const __l, _Fcomplex const __fc) +{ + return cpowl(_LCbuild(__l, 0.0), _LCbuild(__fc._Val[0], __fc._Val[1])); +} + +inline _Dcomplex __cpow_dc_fc(_Dcomplex const __dc, _Fcomplex const __fc) +{ + return cpow(__dc, _Cbuild(__fc._Val[0], __fc._Val[1])); +} + +inline _Dcomplex __cpow_fc_dc(_Fcomplex const __fc, _Dcomplex const __dc) +{ + return cpow(_Cbuild(__fc._Val[0], __fc._Val[1]), __dc); +} + +inline _Dcomplex __cpow_dc_d(_Dcomplex const __dc, double const __d) +{ + return cpow(__dc, _Cbuild(__d, 0.0)); +} + +inline _Dcomplex __cpow_d_dc(double const __d, _Dcomplex const __dc) +{ + return cpow(_Cbuild(__d, 0.0), __dc); +} + +inline _Dcomplex __cpow_dc_f(_Dcomplex const __dc, float const __f) +{ + return cpow(__dc, _Cbuild(__f, 0.0)); +} + +inline _Dcomplex __cpow_f_dc(float const __f, _Dcomplex const __dc) +{ + return cpow(_Cbuild(__f, 0.0), __dc); +} + +inline _Dcomplex __cpow_fc_d(_Fcomplex const __fc, double const __d) +{ + return cpow(_Cbuild(__fc._Val[0], __fc._Val[1]), _Cbuild(__d, 0.0)); +} + +inline _Dcomplex __cpow_d_fc(double const __d, _Fcomplex const __fc) +{ + return cpow(_Cbuild(__d, 0.0), _Cbuild(__fc._Val[0], __fc._Val[1])); +} + +inline _Fcomplex __cpowf_fc_f(_Fcomplex const __fc, float const __f) +{ + return cpowf(__fc, _FCbuild(__f, 0.0f)); +} + +inline _Fcomplex __cpowf_f_fc(float const __f, _Fcomplex const __fc) +{ + return cpowf(_FCbuild(__f, 0.0f), __fc); +} + +#define pow(X, Y) _Generic((X), \ + _Lcomplex: _Generic((Y), \ + _Lcomplex: cpowl, \ + _Fcomplex: __cpowl_lc_fc, \ + _Dcomplex: __cpowl_lc_dc, \ + long double: __cpowl_lc_l, \ + default: __cpowl_lc_d, \ + float: __cpowl_lc_f \ + ), \ + \ + _Fcomplex: _Generic((Y), \ + _Lcomplex: __cpowl_fc_lc, \ + _Fcomplex: cpowf, \ + _Dcomplex: __cpow_fc_dc, \ + long double: __cpowl_fc_l, \ + default: __cpow_fc_d, \ + float: __cpowf_fc_f \ + ), \ + \ + _Dcomplex: _Generic((Y), \ + _Lcomplex: __cpowl_dc_lc, \ + _Fcomplex: __cpow_dc_fc, \ + _Dcomplex: cpow, \ + long double: __cpowl_dc_l, \ + default: __cpow_dc_d, \ + float: __cpow_dc_f \ + ), \ + \ + long double: _Generic((Y), \ + _Lcomplex: __cpowl_l_lc, \ + _Fcomplex: __cpowl_l_fc, \ + _Dcomplex: __cpowl_l_dc, \ + default: powl \ + ), \ + \ + float: _Generic((Y), \ + _Lcomplex: __cpowl_f_lc, \ + _Fcomplex: __cpowf_f_fc, \ + _Dcomplex: __cpow_f_dc, \ + long double: powl, \ + default: pow, \ + float: powf \ + ), \ + \ + default: _Generic((Y), \ + _Lcomplex: __cpowl_d_lc, \ + _Fcomplex: __cpow_d_fc, \ + _Dcomplex: __cpow_d_dc, \ + long double: powl, \ + default: pow \ + ) \ +)(X, Y) + +#define sqrt(X) _Generic((X), \ + _Lcomplex: csqrtl, \ + _Fcomplex: csqrtf, \ + _Dcomplex: csqrt, \ + long double: sqrtl, \ + float: sqrtf, \ + default: sqrt \ +)(X) + +#define sin(X) _Generic((X), \ + _Lcomplex: csinl, \ + _Fcomplex: csinf, \ + _Dcomplex: csin, \ + long double: sinl, \ + float: sinf, \ + default: sin \ +)(X) + +#define cos(X) _Generic((X), \ + _Lcomplex: ccosl, \ + _Fcomplex: ccosf, \ + _Dcomplex: ccos, \ + long double: cosl, \ + float: cosf, \ + default: cos \ +)(X) + +#define tan(X) _Generic((X), \ + _Lcomplex: ctanl, \ + _Fcomplex: ctanf, \ + _Dcomplex: ctan, \ + long double: tanl, \ + float: tanf, \ + default: tan \ +)(X) + +#define asin(X) _Generic((X), \ + _Lcomplex: casinl, \ + _Fcomplex: casinf, \ + _Dcomplex: casin, \ + long double: asinl, \ + float: asinf, \ + default: asin \ +)(X) + +#define acos(X) _Generic((X), \ + _Lcomplex: cacosl, \ + _Fcomplex: cacosf, \ + _Dcomplex: cacos, \ + long double: acosl, \ + float: acosf, \ + default: acos \ +)(X) + +#define atan(X) _Generic((X), \ + _Lcomplex: catanl, \ + _Fcomplex: catanf, \ + _Dcomplex: catan, \ + long double: atanl, \ + float: atanf, \ + default: atan \ +)(X) + +#define asinh(X) _Generic((X), \ + _Lcomplex: casinhl, \ + _Fcomplex: casinhf, \ + _Dcomplex: casinh, \ + long double: asinhl, \ + float: asinhf, \ + default: asinh \ +)(X) + +#define acosh(X) _Generic((X), \ + _Lcomplex: cacoshl, \ + _Fcomplex: cacoshf, \ + _Dcomplex: cacosh, \ + long double: acoshl, \ + float: acoshf, \ + default: acosh \ +)(X) + +#define atanh(X) _Generic((X), \ + _Lcomplex: catanhl, \ + _Fcomplex: catanhf, \ + _Dcomplex: catanh, \ + long double: atanhl, \ + float: atanhf, \ + default: atanh \ +)(X) + +#define atan2(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: atan2l, \ + float: atan2f, \ + default: atan2 \ +)(X, Y) + +#define cbrt(X) _Generic((X), \ + long double: cbrtl, \ + float: cbrtf, \ + default: cbrt \ +)(X) + +#define ceil(X) _Generic((X), \ + long double: ceill, \ + float: ceilf, \ + default: ceil \ +)(X) + +#define copysign(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: copysignl, \ + float: copysignf, \ + default: copysign \ +)(X, Y) + +#define erf(X) _Generic((X), \ + long double: erfl, \ + float: erff, \ + default: erf \ +)(X) + +#define erfc(X) _Generic((X), \ + long double: erfcl, \ + float: erfcf, \ + default: erfc \ +)(X) + +#define exp2(X) _Generic((X), \ + long double: exp2l, \ + float: exp2f, \ + default: exp2 \ +)(X) + +#define expm1(X) _Generic((X), \ + long double: expm1l, \ + float: expm1f, \ + default: expm1 \ +)(X) + +#define fdim(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: fdiml, \ + float: fdimf, \ + default: fdim \ +)(X, Y) + +#define floor(X) _Generic((X), \ + long double: floorl, \ + float: floorf, \ + default: floor \ +)(X) + +#define fma(X, Y, Z) _Generic(__tgmath_resolve_real_binary_op((X), __tgmath_resolve_real_binary_op((Y), (Z))), \ + long double: fmal, \ + float: fmaf, \ + default: fma \ +)(X, Y, Z) + +#define fmax(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: fmaxl, \ + float: fmaxf, \ + default: fmax \ +)(X, Y) + +#define fmin(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: fminl, \ + float: fminf, \ + default: fmin \ +)(X, Y) + +#define fmod(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: fmodl, \ + float: fmodf, \ + default: fmod \ +)(X, Y) + +#define frexp(X, INT_PTR) _Generic((X), \ + long double: frexpl, \ + float: frexpf, \ + default: frexp \ +)(X, INT_PTR) + +#define hypot(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: hypotl, \ + float: hypotf, \ + default: hypot \ +)(X, Y) + +#define ilogb(X) _Generic((X), \ + long double: ilogbl, \ + float: ilogbf, \ + default: ilogb \ +)(X) + +#define ldexp(X, INT) _Generic((X), \ + long double: ldexpl, \ + float: ldexpf, \ + default: ldexp \ +)(X, INT) + +#define lgamma(X) _Generic((X), \ + long double: lgammal, \ + float: lgammaf, \ + default: lgamma \ +)(X) + +#define llrint(X) _Generic((X), \ + long double: llrintl, \ + float: llrintf, \ + default: llrint \ +)(X) + +#define llround(X) _Generic((X), \ + long double: llroundl, \ + float: llroundf, \ + default: llround \ +)(X) + +#define log10(X) _Generic((X), \ + long double: log10l, \ + float: log10f, \ + default: log10 \ +)(X) + +#define log1p(X) _Generic((X), \ + long double: log1pl, \ + float: log1pf, \ + default: log1p \ +)(X) + +#define log2(X) _Generic((X), \ + long double: log2l, \ + float: log2f, \ + default: log2 \ +)(X) + +#define logb(X) _Generic((X), \ + long double: logbl, \ + float: logbf, \ + default: logb \ +)(X) + +#define lrint(X) _Generic((X), \ + long double: lrintl, \ + float: lrintf, \ + default: lrint \ +)(X) + +#define lround(X) _Generic((X), \ + long double: lroundl, \ + float: lroundf, \ + default: lround \ +)(X) + +#define nearbyint(X) _Generic((X), \ + long double: nearbyintl, \ + float: nearbyintf, \ + default: nearbyint \ +)(X) + +#define nextafter(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: nextafterl, \ + float: nextafterf, \ + default: nextafter \ +)(X, Y) + +#define nexttoward(X, LONG_DOUBLE) _Generic((X), \ + long double: nexttowardl, \ + float: nexttowardf, \ + default: nexttoward \ +)(X, LONG_DOUBLE) + +#define remainder(X, Y) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: remainderl, \ + float: remainderf, \ + default: remainder \ +)(X, Y) + +#define remquo(X, Y, INT_PTR) _Generic(__tgmath_resolve_real_binary_op((X), (Y)), \ + long double: remquol, \ + float: remquof, \ + default: remquo \ +)(X, Y, INT_PTR) + +#define rint(X) _Generic((X), \ + long double: rintl, \ + float: rintf, \ + default: rint \ +)(X) + +#define round(X) _Generic((X), \ + long double: roundl, \ + float: roundf, \ + default: round \ +)(X) + +#define scalbln(X, LONG) _Generic((X), \ + long double: scalblnl, \ + float: scalblnf, \ + default: scalbln \ +)(X, LONG) + +#define scalbn(X, INT) _Generic((X), \ + long double: scalbnl, \ + float: scalbnf, \ + default: scalbn \ +)(X, INT) + +#define tgamma(X) _Generic((X), \ + long double: tgammal, \ + float: tgammaf, \ + default: tgamma \ +)(X) + +#define trunc(X) _Generic((X), \ + long double: truncl, \ + float: truncf, \ + default: trunc \ +)(X) + +inline double __carg_d(double const __d) +{ + return carg(_Cbuild(__d, 0.0)); +} + +#define carg(X) _Generic((X), \ + _Lcomplex: cargl, \ + _Fcomplex: cargf, \ + _Dcomplex: carg, \ + default: __carg_d \ +)(X) + +inline _Dcomplex __conj_d(double const __d) +{ + return conj(_Cbuild(__d, 0.0)); +} + +#define conj(X) _Generic((X), \ + _Lcomplex: conjl, \ + _Fcomplex: conjf, \ + _Dcomplex: conj, \ + default: __conj_d \ +)(X) + +inline double __creal_d(double const __d) +{ + // The real part of a double casted to a double complex is just the double value. + return __d; +} + +#define creal(X) _Generic((X), \ + _Lcomplex: creall, \ + _Fcomplex: crealf, \ + _Dcomplex: creal, \ + default: __creal_d \ +)(X) + +inline double __cimag_d(double const __d) +{ + // The imaginary part of a double casted to a double complex is 0. + (void) __d; + return 0.0; +} + +#define cimag(X) _Generic((X), \ + _Lcomplex: cimagl, \ + _Fcomplex: cimagf, \ + _Dcomplex: cimag, \ + default: __cimag_d \ +)(X) + +inline _Dcomplex __cproj_d(double const __d) +{ + return cproj(_Cbuild(__d, 0.0)); +} + +#define cproj(X) _Generic((X), \ + _Lcomplex: cprojl, \ + _Fcomplex: cprojf, \ + _Dcomplex: cproj, \ + default: __cproj_d \ +)(X) + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS + +#endif // _CRT_HAS_C11 == 0 + +#endif // (_CRT_HAS_CXX17 == 1) && !defined(_CRT_USE_C_TGMATH_H) + +#endif // _TGMATH diff --git a/sdk/include/ucrt/time.h b/sdk/include/ucrt/time.h new file mode 100644 index 0000000000000..9c21af4788f7c --- /dev/null +++ b/sdk/include/ucrt/time.h @@ -0,0 +1,648 @@ +// +// time.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_TIME // include guard for 3rd party interop +#define _INC_TIME + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#ifndef _CRT_USE_CONFORMING_ANNEX_K_TIME +#define _CRT_USE_CONFORMING_ANNEX_K_TIME 0 +#endif + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Types +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +typedef long clock_t; + +struct _timespec32 +{ + __time32_t tv_sec; + long tv_nsec; +}; + +struct _timespec64 +{ + __time64_t tv_sec; + long tv_nsec; +}; + +#ifndef _CRT_NO_TIME_T + struct timespec + { + time_t tv_sec; // Seconds - >= 0 + long tv_nsec; // Nanoseconds - [0, 999999999] + }; +#endif + + + +// The number of clock ticks per second +#define CLOCKS_PER_SEC ((clock_t)1000) + +#define TIME_UTC 1 + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Time Zone and Daylight Savings Time Data and Accessors +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// Nonzero if Daylight Savings Time is used +_Check_return_ _CRT_INSECURE_DEPRECATE_GLOBALS(_get_daylight) +_ACRTIMP int* __cdecl __daylight(void); + +#define _daylight (*__daylight()) + +// Offset for Daylight Savings Time +_Check_return_ _CRT_INSECURE_DEPRECATE_GLOBALS(_get_dstbias) +_ACRTIMP long* __cdecl __dstbias(void); + +#define _dstbias (*__dstbias()) + +// Difference in seconds between GMT and local time +_Check_return_ _CRT_INSECURE_DEPRECATE_GLOBALS(_get_timezone) +_ACRTIMP long* __cdecl __timezone(void); + +#define _timezone (*__timezone()) + +// Standard and Daylight Savings Time time zone names +_Check_return_ _Deref_ret_z_ _CRT_INSECURE_DEPRECATE_GLOBALS(_get_tzname) +_ACRTIMP char** __cdecl __tzname(void); + +#define _tzname (__tzname()) + + _Success_(_Daylight != 0) +_ACRTIMP errno_t __cdecl _get_daylight( + _Out_ int* _Daylight + ); + +_Success_(_DaylightSavingsBias != 0) +_ACRTIMP errno_t __cdecl _get_dstbias( + _Out_ long* _DaylightSavingsBias + ); + + _Success_(_TimeZone != 0) +_ACRTIMP errno_t __cdecl _get_timezone( + _Out_ long* _TimeZone + ); + +_Success_(return == 0) +_ACRTIMP errno_t __cdecl _get_tzname( + _Out_ size_t* _ReturnValue, + _Out_writes_z_(_SizeInBytes) char* _Buffer, + _In_ size_t _SizeInBytes, + _In_ int _Index + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// AppCRT Time Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +_Success_(return != 0) +_Ret_writes_z_(26) +_Check_return_ _CRT_INSECURE_DEPRECATE(asctime_s) +_ACRTIMP char* __cdecl asctime( + _In_ struct tm const* _Tm + ); + +#if __STDC_WANT_SECURE_LIB__ + _Success_(return == 0) + _Check_return_wat_ + _ACRTIMP errno_t __cdecl asctime_s( + _Out_writes_(_SizeInBytes) _Post_readable_size_(26) char* _Buffer, + _In_range_(>=,26) size_t _SizeInBytes, + _In_ struct tm const* _Tm + ); +#endif + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, asctime_s, + _Post_readable_size_(26) char, _Buffer, + _In_ struct tm const*, _Time + ) + +_Check_return_ +_ACRTIMP clock_t __cdecl clock(void); + +_Ret_z_ +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_ctime32_s) +_ACRTIMP char* __cdecl _ctime32( + _In_ __time32_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _ctime32_s( + _Out_writes_(_SizeInBytes) _Post_readable_size_(26) char* _Buffer, + _In_range_(>=,26) size_t _SizeInBytes, + _In_ __time32_t const* _Time + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _ctime32_s, + _Post_readable_size_(26) char, _Buffer, + _In_ __time32_t const*, _Time + ) + +_Ret_z_ +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_ctime64_s) +_ACRTIMP char* __cdecl _ctime64( + _In_ __time64_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _ctime64_s( + _Out_writes_z_(_SizeInBytes) _Post_readable_size_(26) char* _Buffer, + _In_range_(>=,26) size_t _SizeInBytes, + _In_ __time64_t const* _Time + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1( + errno_t, _ctime64_s, + _Post_readable_size_(26) char, _Buffer, + _In_ __time64_t const*, _Time + ) + +_Check_return_ +_ACRTIMP double __cdecl _difftime32( + _In_ __time32_t _Time1, + _In_ __time32_t _Time2 + ); + +_Check_return_ +_ACRTIMP double __cdecl _difftime64( + _In_ __time64_t _Time1, + _In_ __time64_t _Time2 + ); + +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_gmtime32_s) +_ACRTIMP struct tm* __cdecl _gmtime32( + _In_ __time32_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _gmtime32_s( + _Out_ struct tm* _Tm, + _In_ __time32_t const* _Time + ); + +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_gmtime64_s) +_ACRTIMP struct tm* __cdecl _gmtime64( + _In_ __time64_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _gmtime64_s( + _Out_ struct tm* _Tm, + _In_ __time64_t const* _Time + ); + +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_localtime32_s) +_ACRTIMP struct tm* __cdecl _localtime32( + _In_ __time32_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _localtime32_s( + _Out_ struct tm* _Tm, + _In_ __time32_t const* _Time + ); + +_Success_(return != 0) +_Check_return_ _CRT_INSECURE_DEPRECATE(_localtime64_s) +_ACRTIMP struct tm* __cdecl _localtime64( + _In_ __time64_t const* _Time + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _localtime64_s( + _Out_ struct tm* _Tm, + _In_ __time64_t const* _Time + ); + +_Check_return_ +_ACRTIMP __time32_t __cdecl _mkgmtime32( + _Inout_ struct tm* _Tm + ); + +_Check_return_ +_ACRTIMP __time64_t __cdecl _mkgmtime64( + _Inout_ struct tm* _Tm + ); + +_Check_return_opt_ +_ACRTIMP __time32_t __cdecl _mktime32( + _Inout_ struct tm* _Tm + ); + +_Check_return_opt_ +_ACRTIMP __time64_t __cdecl _mktime64( + _Inout_ struct tm* _Tm + ); + +_Success_(return > 0) +_Check_return_wat_ +_ACRTIMP size_t __cdecl strftime( + _Out_writes_z_(_SizeInBytes) char* _Buffer, + _In_ size_t _SizeInBytes, + _In_z_ _Printf_format_string_ char const* _Format, + _In_ struct tm const* _Tm + ); + +_Success_(return > 0) +_Check_return_wat_ +_ACRTIMP size_t __cdecl _strftime_l( + _Out_writes_z_(_MaxSize) char* _Buffer, + _In_ size_t _MaxSize, + _In_z_ _Printf_format_string_ char const* _Format, + _In_ struct tm const* _Tm, + _In_opt_ _locale_t _Locale + ); + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strdate_s( + _Out_writes_(_SizeInBytes) _When_(_SizeInBytes >=9, _Post_readable_size_(9)) char* _Buffer, + _In_ size_t _SizeInBytes + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _strdate_s, + _Post_readable_size_(9) char, _Buffer + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + _Success_(return != 0) char*, __RETURN_POLICY_DST, _ACRTIMP, _strdate, + _Out_writes_z_(9), char, _Buffer + ) + +_Check_return_wat_ +_ACRTIMP errno_t __cdecl _strtime_s( + _Out_writes_(_SizeInBytes) _When_(_SizeInBytes >=9, _Post_readable_size_(9)) char* _Buffer, + _In_ size_t _SizeInBytes + ); + +__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_0( + errno_t, _strtime_s, + _Post_readable_size_(9) char, _Buffer + ) + +__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0( + char*, __RETURN_POLICY_DST, _ACRTIMP, _strtime, + _Out_writes_z_(9), char, _Buffer + ) + +_ACRTIMP __time32_t __cdecl _time32( + _Out_opt_ __time32_t* _Time + ); + +_ACRTIMP __time64_t __cdecl _time64( + _Out_opt_ __time64_t* _Time + ); + +_Success_(return != 0) +_Check_return_ +_ACRTIMP int __cdecl _timespec32_get( + _Out_ struct _timespec32* _Ts, + _In_ int _Base + ); + +_Success_(return != 0) +_Check_return_ +_ACRTIMP int __cdecl _timespec64_get( + _Out_ struct _timespec64* _Ts, + _In_ int _Base + ); + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// DesktopCRT Time Functions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + + _ACRTIMP void __cdecl _tzset(void); + + // The Win32 API GetLocalTime and SetLocalTime should be used instead. + _CRT_OBSOLETE(GetLocalTime) + _DCRTIMP unsigned __cdecl _getsystime( + _Out_ struct tm* _Tm + ); + + _CRT_OBSOLETE(SetLocalTime) + _DCRTIMP unsigned __cdecl _setsystime( + _In_ struct tm* _Tm, + _In_ unsigned _Milliseconds + ); + +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Inline Function Definitions +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if !defined RC_INVOKED && !defined __midl && !defined _INC_TIME_INL && !defined _CRT_NO_TIME_T + + #ifdef _USE_32BIT_TIME_T + + _Check_return_ _CRT_INSECURE_DEPRECATE(ctime_s) + static __inline char* __CRTDECL ctime( + _In_ time_t const* const _Time + ) + { + return _ctime32(_Time); + } + + _Check_return_ + static __inline double __CRTDECL difftime( + _In_ time_t const _Time1, + _In_ time_t const _Time2 + ) + { + return _difftime32(_Time1, _Time2); + } + + _Check_return_ _CRT_INSECURE_DEPRECATE(gmtime_s) + static __inline struct tm* __CRTDECL gmtime( + _In_ time_t const* const _Time + ) + { + return _gmtime32(_Time); + } + + _Check_return_ _CRT_INSECURE_DEPRECATE(localtime_s) + static __inline struct tm* __CRTDECL localtime( + _In_ time_t const* const _Time + ) + { + return _localtime32(_Time); + } + + _Check_return_ + static __inline time_t __CRTDECL _mkgmtime( + _Inout_ struct tm* const _Tm + ) + { + return _mkgmtime32(_Tm); + } + + _Check_return_opt_ + static __inline time_t __CRTDECL mktime( + _Inout_ struct tm* const _Tm + ) + { + return _mktime32(_Tm); + } + + static __inline time_t __CRTDECL time( + _Out_opt_ time_t* const _Time + ) + { + return _time32(_Time); + } + + _Check_return_ + static __inline int __CRTDECL timespec_get( + _Out_ struct timespec* const _Ts, + _In_ int const _Base + ) + { + return _timespec32_get((struct _timespec32*)_Ts, _Base); + } + + #if __STDC_WANT_SECURE_LIB__ + _Check_return_wat_ + static __inline errno_t __CRTDECL ctime_s( + _Out_writes_(_SizeInBytes) _Post_readable_size_(26) char* const _Buffer, + _In_range_(>=,26) size_t const _SizeInBytes, + _In_ time_t const* const _Time + ) + { + return _ctime32_s(_Buffer, _SizeInBytes, _Time); + } + + #if _CRT_USE_CONFORMING_ANNEX_K_TIME + _Check_return_wat_ + static __inline struct tm* __CRTDECL gmtime_s( + _In_ time_t const* const _Time, + _Out_ struct tm* const _Tm + ) + { + if (_gmtime32_s(_Tm, _Time) == 0) + { + return _Tm; + } + return NULL; + } + + _Check_return_wat_ + static __inline struct tm* __CRTDECL localtime_s( + _In_ time_t const* const _Time, + _Out_ struct tm* const _Tm + ) + { + if (_localtime32_s(_Tm, _Time) == 0) + { + return _Tm; + } + return NULL; + } + #else // _CRT_USE_CONFORMING_ANNEX_K_TIME + _Check_return_wat_ + static __inline errno_t __CRTDECL gmtime_s( + _Out_ struct tm* const _Tm, + _In_ time_t const* const _Time + ) + { + return _gmtime32_s(_Tm, _Time); + } + + _Check_return_wat_ + static __inline errno_t __CRTDECL localtime_s( + _Out_ struct tm* const _Tm, + _In_ time_t const* const _Time + ) + { + return _localtime32_s(_Tm, _Time); + } + #endif // _CRT_USE_CONFORMING_ANNEX_K_TIME + #endif + + #else // ^^^ _USE_32BIT_TIME_T ^^^ // vvv !_USE_32BIT_TIME_T vvv + + _Check_return_ _CRT_INSECURE_DEPRECATE(ctime_s) + static __inline char* __CRTDECL ctime( + _In_ time_t const* const _Time + ) + { + return _ctime64(_Time); + } + + _Check_return_ + static __inline double __CRTDECL difftime( + _In_ time_t const _Time1, + _In_ time_t const _Time2 + ) + { + return _difftime64(_Time1, _Time2); + } + + _Check_return_ _CRT_INSECURE_DEPRECATE(gmtime_s) + static __inline struct tm* __CRTDECL gmtime( + _In_ time_t const* const _Time) + { + return _gmtime64(_Time); + } + + _CRT_INSECURE_DEPRECATE(localtime_s) + static __inline struct tm* __CRTDECL localtime( + _In_ time_t const* const _Time + ) + { + return _localtime64(_Time); + } + + _Check_return_ + static __inline time_t __CRTDECL _mkgmtime( + _Inout_ struct tm* const _Tm + ) + { + return _mkgmtime64(_Tm); + } + + _Check_return_opt_ + static __inline time_t __CRTDECL mktime( + _Inout_ struct tm* const _Tm + ) + { + return _mktime64(_Tm); + } + + static __inline time_t __CRTDECL time( + _Out_opt_ time_t* const _Time + ) + { + return _time64(_Time); + } + + _Check_return_ + static __inline int __CRTDECL timespec_get( + _Out_ struct timespec* const _Ts, + _In_ int const _Base + ) + { + return _timespec64_get((struct _timespec64*)_Ts, _Base); + } + + #if __STDC_WANT_SECURE_LIB__ + _Check_return_wat_ + static __inline errno_t __CRTDECL ctime_s( + _Out_writes_(_SizeInBytes) _Post_readable_size_(26) char* const _Buffer, + _In_range_(>=,26) size_t const _SizeInBytes, + _In_ time_t const* const _Time + ) + { + return _ctime64_s(_Buffer, _SizeInBytes, _Time); + } + + #if _CRT_USE_CONFORMING_ANNEX_K_TIME + _Check_return_wat_ + static __inline struct tm* __CRTDECL gmtime_s( + _In_ time_t const* const _Time, + _Out_ struct tm* const _Tm + ) + { + if (_gmtime64_s(_Tm, _Time) == 0) + { + return _Tm; + } + return NULL; + } + + _Check_return_wat_ + static __inline struct tm* __CRTDECL localtime_s( + _In_ time_t const* const _Time, + _Out_ struct tm* const _Tm + ) + { + if (_localtime64_s(_Tm, _Time) == 0) + { + return _Tm; + } + return NULL; + } + #else // _CRT_USE_CONFORMING_ANNEX_K_TIME + _Check_return_wat_ + static __inline errno_t __CRTDECL gmtime_s( + _Out_ struct tm* const _Tm, + _In_ time_t const* const _Time + ) + { + return _gmtime64_s(_Tm, _Time); + } + + _Check_return_wat_ + static __inline errno_t __CRTDECL localtime_s( + _Out_ struct tm* const _Tm, + _In_ time_t const* const _Time + ) + { + return _localtime64_s(_Tm, _Time); + } + #endif // _CRT_USE_CONFORMING_ANNEX_K_TIME + #endif + + #endif // !_USE_32BIT_TIME_T + +#endif + + + +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// +// Non-ANSI Names for Compatibility +// +//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES + + #define CLK_TCK CLOCKS_PER_SEC + + #ifdef _CRT_USE_WINAPI_FAMILY_DESKTOP_APP + _CRT_NONSTDC_DEPRECATE(_tzset) _ACRTIMP void __cdecl tzset(void); + #endif + +#endif // _CRT_INTERNAL_NONSTDC_NAMES + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_TIME diff --git a/sdk/include/ucrt/uchar.h b/sdk/include/ucrt/uchar.h new file mode 100644 index 0000000000000..50df37a5dcadd --- /dev/null +++ b/sdk/include/ucrt/uchar.h @@ -0,0 +1,50 @@ +// +// uchar.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +#pragma once +#ifndef _UCHAR // include guard for 3rd party interop +#define _UCHAR + +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + +#ifndef __STDC_UTF_16__ + #define __STDC_UTF_16__ 1 +#endif + +#ifndef __STDC_UTF_32__ + #define __STDC_UTF_32__ 1 +#endif + +typedef unsigned short _Char16_t; +typedef unsigned int _Char32_t; + +#if !defined __cplusplus || (defined _MSC_VER && _MSC_VER < 1900) + typedef unsigned short char16_t; + typedef unsigned int char32_t; +#endif + + +_Check_return_ _ACRTIMP size_t __cdecl mbrtoc16(_Out_opt_ char16_t *_Pc16, _In_reads_or_z_opt_(_N) const char *_S, _In_ size_t _N, _Inout_ mbstate_t *_Ps); +_Check_return_ _ACRTIMP size_t __cdecl c16rtomb(_Out_writes_opt_(4) char *_S, _In_ char16_t _C16, _Inout_ mbstate_t *_Ps); + +_Check_return_ _ACRTIMP size_t __cdecl mbrtoc32(_Out_opt_ char32_t *_Pc32, _In_reads_or_z_opt_(_N) const char *_S, _In_ size_t _N, _Inout_ mbstate_t *_Ps); +_Check_return_ _ACRTIMP size_t __cdecl c32rtomb(_Out_writes_opt_(4) char *_S, _In_ char32_t _C32, _Inout_ mbstate_t *_Ps); + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS + +/* + * Copyright (c) 1992-2013 by P.J. Plauger. ALL RIGHTS RESERVED. + * Consult your license regarding permissions and restrictions. + V6.40:0009 */ + #endif // _UCHAR diff --git a/sdk/include/ucrt/wchar.h b/sdk/include/ucrt/wchar.h new file mode 100644 index 0000000000000..b2ca8f73edff0 --- /dev/null +++ b/sdk/include/ucrt/wchar.h @@ -0,0 +1,286 @@ +// +// wchar.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// All of the types, macros, and function declarations for all wide-character +// related functionality. Most of the functionality is in the #included +// headers, which are also #included by other public headers. +// +#pragma once +#ifndef _INC_WCHAR // include guard for 3rd party interop +#define _INC_WCHAR + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +#define WCHAR_MIN 0x0000 +#define WCHAR_MAX 0xffff + + + +typedef wchar_t _Wint_t; + + + +#if _CRT_FUNCTIONS_REQUIRED + + _Check_return_opt_ _Success_(return != 0) _Ret_z_ + _ACRTIMP wchar_t* __cdecl _wsetlocale( + _In_ int _Category, + _In_opt_z_ wchar_t const* _Locale + ); + + _Check_return_opt_ + _ACRTIMP _locale_t __cdecl _wcreate_locale( + _In_ int _Category, + _In_z_ wchar_t const* _Locale + ); + + + + _ACRTIMP wint_t __cdecl btowc( + _In_ int _Ch + ); + + _ACRTIMP size_t __cdecl mbrlen( + _In_reads_bytes_opt_(_SizeInBytes) _Pre_opt_z_ char const* _Ch, + _In_ size_t _SizeInBytes, + _Inout_ mbstate_t* _State + ); + + _ACRTIMP size_t __cdecl mbrtowc( + _Pre_maybenull_ _Post_z_ wchar_t* _DstCh, + _In_reads_bytes_opt_(_SizeInBytes) _Pre_opt_z_ char const* _SrcCh, + _In_ size_t _SizeInBytes, + _Inout_ mbstate_t* _State + ); + + _Success_(return == 0) + _ACRTIMP errno_t __cdecl mbsrtowcs_s( + _Out_opt_ size_t* _Retval, + _Out_writes_opt_z_(_Size) wchar_t* _Dst, + _In_ size_t _Size, + _Deref_pre_opt_z_ char const** _PSrc, + _In_ size_t _N, + _Inout_ mbstate_t* _State + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3( + _Success_(return == 0) + errno_t, mbsrtowcs_s, + _Out_opt_ size_t*, _Retval, + _Post_z_ wchar_t, _Dest, + _Inout_ _Deref_prepost_opt_valid_ char const**, _PSource, + _In_ size_t, _Count, + _Inout_ mbstate_t*, _State + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE( + _Success_(return == 0) _ACRTIMP, mbsrtowcs, + _Out_writes_opt_z_(_Count), wchar_t, _Dest, + _Deref_pre_opt_z_ char const**, _PSrc, + _In_ size_t, _Count, + _Inout_ mbstate_t*, _State + ) + + _Success_(return == 0) + _ACRTIMP errno_t __cdecl wcrtomb_s( + _Out_opt_ size_t* _Retval, + _Out_writes_opt_z_(_SizeInBytes) char* _Dst, + _In_ size_t _SizeInBytes, + _In_ wchar_t _Ch, + _Inout_opt_ mbstate_t* _State + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2( + _Success_(return == 0) + errno_t, wcrtomb_s, + _Out_opt_ size_t*, _Retval, + _Out_writes_opt_z_(_Size) char, _Dest, + _In_ wchar_t, _Source, + _Inout_opt_ mbstate_t*, _State + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_2_SIZE( + _ACRTIMP, wcrtomb, + _Pre_maybenull_ _Post_z_, char, _Dest, + _In_ wchar_t, _Source, + _Inout_opt_ mbstate_t*, _State + ) + + _Success_(return == 0) + _ACRTIMP errno_t __cdecl wcsrtombs_s( + _Out_opt_ size_t* _Retval, + _Out_writes_bytes_to_opt_(_SizeInBytes, *_Retval) char* _Dst, + _In_ size_t _SizeInBytes, + _Inout_ _Deref_prepost_z_ wchar_t const** _Src, + _In_ size_t _Size, + _Inout_opt_ mbstate_t* _State + ); + + __DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3( + _Success_(return == 0) + errno_t, wcsrtombs_s, + _Out_opt_ size_t*, _Retval, + _Out_writes_opt_z_(_Size) char, _Dest, + _Inout_ _Deref_prepost_z_ wchar_t const**, _PSrc, + _In_ size_t, _Count, + _Inout_opt_ mbstate_t*, _State + ) + + __DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE( + _ACRTIMP, wcsrtombs, + _Pre_maybenull_ _Post_z_, char, _Dest, + _Inout_ _Deref_prepost_z_ wchar_t const**, _PSource, + _In_ size_t, _Count, + _Inout_opt_ mbstate_t*, _State + ) + + _ACRTIMP int __cdecl wctob( + _In_ wint_t _WCh + ); + + #if __STDC_WANT_SECURE_LIB__ + + _Success_(return == 0) + errno_t __CRTDECL wmemcpy_s( + _Out_writes_to_opt_(_N1, _N) wchar_t* _S1, + _In_ rsize_t _N1, + _In_reads_opt_(_N) wchar_t const* _S2, + _In_ rsize_t _N + ); + + _Success_(return == 0) + errno_t __CRTDECL wmemmove_s( + _Out_writes_to_opt_(_N1, _N) wchar_t* _S1, + _In_ rsize_t _N1, + _In_reads_opt_(_N) wchar_t const* _S2, + _In_ rsize_t _N + ); + + #endif // __STDC_WANT_SECURE_LIB__ + + __inline int __CRTDECL fwide( + _In_opt_ FILE* _F, + _In_ int _M + ) + { + _CRT_UNUSED(_F); + return (_M); + } + + __inline int __CRTDECL mbsinit( + _In_opt_ mbstate_t const* _P + ) + { + return _P == NULL || _P->_Wchar == 0; + } + + __inline wchar_t _CONST_RETURN* __CRTDECL wmemchr( + _In_reads_(_N) wchar_t const* _S, + _In_ wchar_t _C, + _In_ size_t _N + ) + { + for (; 0 < _N; ++_S, --_N) + if (*_S == _C) + return (wchar_t _CONST_RETURN*)_S; + + return 0; + } + + __inline int __CRTDECL wmemcmp( + _In_reads_(_N) wchar_t const* _S1, + _In_reads_(_N) wchar_t const* _S2, + _In_ size_t _N + ) + { + for (; 0 < _N; ++_S1, ++_S2, --_N) + if (*_S1 != *_S2) + return *_S1 < *_S2 ? -1 : 1; + + return 0; + } + + _Post_equal_to_(_S1) + _At_buffer_(_S1, _Iter_, _N, _Post_satisfies_(_S1[_Iter_] == _S2[_Iter_])) + __inline _CRT_INSECURE_DEPRECATE_MEMORY(wmemcpy_s) + wchar_t* __CRTDECL wmemcpy( + _Out_writes_all_(_N) wchar_t* _S1, + _In_reads_(_N) wchar_t const* _S2, + _In_ size_t _N + ) + { + #pragma warning(suppress: 6386) // Buffer overrun + return (wchar_t*)memcpy(_S1, _S2, _N*sizeof(wchar_t)); + } + + __inline _CRT_INSECURE_DEPRECATE_MEMORY(wmemmove_s) + wchar_t* __CRTDECL wmemmove( + _Out_writes_all_opt_(_N) wchar_t* _S1, + _In_reads_opt_(_N) wchar_t const* _S2, + _In_ size_t _N + ) + { + #pragma warning(suppress: 6386) // Buffer overrun + return (wchar_t*)memmove(_S1, _S2, _N*sizeof(wchar_t)); + } + + _Post_equal_to_(_S) + _At_buffer_(_S, _Iter_, _N, _Post_satisfies_(_S[_Iter_] == _C)) + __inline wchar_t* __CRTDECL wmemset( + _Out_writes_all_(_N) wchar_t* _S, + _In_ wchar_t _C, + _In_ size_t _N + ) + { + wchar_t *_Su = _S; + for (; 0 < _N; ++_Su, --_N) + { + *_Su = _C; + } + return _S; + } + + #ifdef __cplusplus + + extern "C++" inline wchar_t* __CRTDECL wmemchr( + _In_reads_(_N) wchar_t* _S, + _In_ wchar_t _C, + _In_ size_t _N + ) + { + wchar_t const* const _SC = _S; + return const_cast(wmemchr(_SC, _C, _N)); + } + + #endif // __cplusplus + +#endif // _CRT_FUNCTIONS_REQUIRED + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_WCHAR diff --git a/sdk/include/ucrt/wctype.h b/sdk/include/ucrt/wctype.h new file mode 100644 index 0000000000000..7e58e91eabdd6 --- /dev/null +++ b/sdk/include/ucrt/wctype.h @@ -0,0 +1,33 @@ +// +// stdio.h +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The C Standard Library header. +// +#pragma once +#ifndef _INC_WCTYPE // include guard for 3rd party interop +#define _INC_WCTYPE + +#include +#include + +#pragma warning(push) +#pragma warning(disable: _UCRT_DISABLED_WARNINGS) +_UCRT_DISABLE_CLANG_WARNINGS + +_CRT_BEGIN_C_HEADER + + + +typedef wchar_t wctrans_t; +_ACRTIMP wint_t __cdecl towctrans(wint_t c, wctrans_t value); +_ACRTIMP wctrans_t __cdecl wctrans(const char *name); +_ACRTIMP wctype_t __cdecl wctype(const char *name); + + + +_CRT_END_C_HEADER +_UCRT_RESTORE_CLANG_WARNINGS +#pragma warning(pop) // _UCRT_DISABLED_WARNINGS +#endif // _INC_WCTYPE diff --git a/sdk/lib/ucrt/conio/cgets.cpp b/sdk/lib/ucrt/conio/cgets.cpp new file mode 100644 index 0000000000000..b116cdf8ae240 --- /dev/null +++ b/sdk/lib/ucrt/conio/cgets.cpp @@ -0,0 +1,128 @@ +// +// cgets.cpp +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Defines _cgets() and _cgets_s(), which read a string from the console. +// +#include +#include +#include + + + +extern "C" extern intptr_t __dcrt_lowio_console_input_handle; + + + +// Use of the following buffer variables is primarily for syncronizing with +// _cgets_s. _cget_s fills the MBCS buffer and if the user passes in single +// character buffer and the unicode character is not converted to single byte +// MBC, then _cget_s should buffer that character so that next call to +// _cgetws_s can return the same character. +extern "C" extern wchar_t __console_wchar_buffer; +extern "C" extern int __console_wchar_buffer_used; + + + +// Reads a string from the console; always null-terminates the buffer. Returns +// 0 on success; returns an errno error code on failure. +extern "C" errno_t __cdecl _cgets_s(char* const source_string, size_t const size_in_bytes, size_t* const size_read) +{ + _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(source_string != nullptr, EINVAL); + _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(size_in_bytes > 0, EINVAL); + _RESET_STRING(source_string, size_in_bytes); + + _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(size_read != nullptr, EINVAL); + + errno_t error = 0; + char* string = source_string; + + __acrt_lock(__acrt_conio_lock); + __try + { + // The implementation of cgets is slightly tricky. The reason being, + // the code page for console is different from the CRT code page. + // What this means is the program may interpret character + // differently from it's acctual value. To fix this, what we really + // want to do is read the input as unicode string and then convert + // it to proper MBCS representation. + // + // This fix this we are really converting from Unicode to MBCS. + // This adds performance problem as we may endup doing this + // character by character. The basic problem here is that we have + // no way to know how many UNICODE characters will be needed to fit + // them in given size of MBCS buffer. To fix this issue we will be + // converting one Unicode character at a time to MBCS. This makes + // this slow, but then this is already console input, + *size_read = 0; + + size_t available = size_in_bytes - 1; + do + { + wchar_t wchar_buff[2]; + size_t sizeRead = 0; + + error = _cgetws_s(wchar_buff, _countof(wchar_buff), &sizeRead); + if (error != 0) + break; + + if (wchar_buff[0] == '\0') + break; + + int size_converted = 0; + errno_t const wctomb_result = wctomb_s(&size_converted, string, available, wchar_buff[0]); + if (wctomb_result != 0) + { + // Put the wide character back in the buffer so that the + // unutilized wide character is still in the stream: + __console_wchar_buffer = wchar_buff[0]; + __console_wchar_buffer_used = 1; + break; + } + + string += size_converted; + *size_read += size_converted; + available -= size_converted; + } + while (available > 0); + } + __finally + { + __acrt_unlock(__acrt_conio_lock); + } + + *string++ = '\0'; + + if (error != 0) + errno = error; + + return error; +} + + + +// Reads a string from the console via ReadConsole on a cooked console handle. +// string[0] must contain the maximum length of the string. The number of +// characters written is stored in string[1]. The return value is a pointer to +// string[2] on success; nullptr on failure. +extern "C" char* __cdecl _cgets(_Inout_z_ char* const string) +{ + _VALIDATE_CLEAR_OSSERR_RETURN(string != nullptr, EINVAL, nullptr); + _VALIDATE_CLEAR_OSSERR_RETURN(string[0] > 0, EINVAL, nullptr); + + size_t const size_in_bytes = static_cast(string[0]); + + size_t size_read = 0; + // warning 26018: Potential overflow of null terminated buffer using expression string+2 + // Suppressing warning since _cgets is purposefully unsafe. +#pragma warning(suppress:__WARNING_POTENTIAL_BUFFER_OVERFLOW_NULLTERMINATED) + errno_t const result = _cgets_s(string + 2, size_in_bytes, &size_read); + + // warning 26018: Potential overflow of null terminated buffer using expression string[1] + // Suppressing warning since _cgets is purposefully unsafe. +#pragma warning(suppress:__WARNING_POTENTIAL_BUFFER_OVERFLOW_NULLTERMINATED) + string[1] = static_cast(size_read); + + return result == 0 ? string + 2 : nullptr; +} diff --git a/sdk/lib/ucrt/conio/cgetws.cpp b/sdk/lib/ucrt/conio/cgetws.cpp new file mode 100644 index 0000000000000..7dc4a25afbb28 --- /dev/null +++ b/sdk/lib/ucrt/conio/cgetws.cpp @@ -0,0 +1,156 @@ +// +// cgetws.cpp +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// Defines _cgetws() and _cgetws_s(), which read a wide string from the console. +// +#include +#include +#include +#include + +// Use of the following buffer variables is primarily for syncronizing with +// _cgets_s. _cget_s fills the MBCS buffer and if the user passes in single +// character buffer and the unicode character is not converted to single byte +// MBC, then _cget_s should buffer that character so that next call to +// _cgetws_s can return the same character. +extern "C" wchar_t __console_wchar_buffer = 0; +extern "C" int __console_wchar_buffer_used = 0; + + + +// Reads a string from the console; always null-terminates the buffer. Returns +// 0 on success; returns an errno error code on failure. +extern "C" errno_t __cdecl _cgetws_s(wchar_t* const string_buffer, size_t const size_in_words, size_t* const size_read) +{ + _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(string_buffer != nullptr, EINVAL); + _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(size_in_words > 0, EINVAL); + _RESET_STRING(string_buffer, size_in_words); + + _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE(size_read != nullptr, EINVAL); + + __acrt_lock(__acrt_conio_lock); + errno_t retval = 0; + __try + { + wchar_t* string = string_buffer; + + // We need to decrement size_in_words because ReadConsole reads as many + // characters as the parameter passed. It doesn't null-terminate: + size_t size_remaining = size_in_words - 1; + *size_read = 0; + + // If size_in_words was 1, then there's only room for the null terminator: + if (size_remaining == 0) + __leave; + + // If there is a buffered character, first fill with the buffered + // character then proceed with reading from the console: + if (__console_wchar_buffer_used != 0) + { + *string++ = __console_wchar_buffer; + --size_remaining; + (*size_read)++; + + if (__console_wchar_buffer == L'\0') + size_remaining = 0; + + __console_wchar_buffer = 0; + } + + if (size_remaining == 0) + __leave; + + /* + * __dcrt_lowio_console_input_handle, the handle to the console input, is created the first + * time that either _getch() or _cgets() or _kbhit() is called. + */ + + if (__dcrt_lowio_ensure_console_input_initialized() == FALSE) + { + __acrt_errno_map_os_error(GetLastError()); + retval = errno; + __leave; + } + + ULONG old_state; + __dcrt_get_input_console_mode(&old_state); + __dcrt_set_input_console_mode(ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_ECHO_INPUT); + + ULONG wchars_read; + BOOL read_console_result = __dcrt_read_console( + string, + static_cast(size_remaining), + &wchars_read); + + if (!read_console_result) + { + __acrt_errno_map_os_error(GetLastError()); + retval = errno; + __leave; + } + + // Set the length of the string and null terminate it: + if (wchars_read >= 2 && string[wchars_read - 2] == L'\r') + { + *size_read += wchars_read - 2; + string[wchars_read - 2] = L'\0'; + } + else if (wchars_read == size_remaining && string[wchars_read - 1] == L'\r') + { + // Special case 1: \r\n straddles the boundary: + string[wchars_read - 1] = L'\0'; + *size_read += wchars_read - 1; + } + else if (wchars_read == 1 && string[0] == L'\n') + { + // Special case 2: Read a single \n: + string[0] = L'\0'; + *size_read += 0; + } + else + { + *size_read += wchars_read; + string[wchars_read] = L'\0'; + } + + __dcrt_set_input_console_mode(old_state); + } + __finally + { + __acrt_unlock(__acrt_conio_lock); + } + + return retval; +} + + + +// Reads a string from the console via ReadConsole on a cooked console handle. +// string[0] must contain the maximum length of the string. The number of +// characters written is stored in string[1]. The return value is a pointer to +// string[2] on success; nullptr on failure. +// +// Note that _cgetws() does NOT check the pushback character buffer, so it will +// not return any character that is pushed back by a call to _ungetwch(). +extern "C" wchar_t* __cdecl _cgetws(_Inout_z_ wchar_t* const string) +{ + _VALIDATE_CLEAR_OSSERR_RETURN(string != nullptr, EINVAL, nullptr); + _VALIDATE_CLEAR_OSSERR_RETURN(string[0] > 0, EINVAL, nullptr); + + size_t const size_in_words = static_cast(string[0]); + + size_t size_read = 0; + // warning 26018: Potential overflow of null terminated buffer using expression string+2 + // Suppressing warning since _cgetws is purposefully unsafe. +#pragma warning(suppress:__WARNING_POTENTIAL_BUFFER_OVERFLOW_NULLTERMINATED) + errno_t const result = _cgetws_s(string + 2, size_in_words, &size_read); + + // warning 26018: Potential overflow of null terminated buffer using expression string[1] + // Suppressing warning since _cgetws is purposefully unsafe. +#pragma warning(suppress:__WARNING_POTENTIAL_BUFFER_OVERFLOW_NULLTERMINATED) + string[1] = static_cast(size_read); + + return result == 0 ? string + 2 : nullptr; +} diff --git a/sdk/lib/ucrt/conio/cprintf.cpp b/sdk/lib/ucrt/conio/cprintf.cpp new file mode 100644 index 0000000000000..17da406e18dad --- /dev/null +++ b/sdk/lib/ucrt/conio/cprintf.cpp @@ -0,0 +1,104 @@ +// +// cprintf.cpp +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The standard output functions, which perform formatted output to the +// console. +// +#include + + +using namespace __crt_stdio_output; + + + +template