ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
December 2012
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
12 participants
287 discussions
Start a n
N
ew thread
[hbelusca] 57842: [FREELDR] Improve the overall look: - Augment the timeout of the livecd from 3 seconds to 5 seconds. - In "Mini"-UI (i.e. NTLDR-like UI), add a newline between "Press ENTER" and t...
by hbelusca@svn.reactos.org
Author: hbelusca Date: Sun Dec 9 15:01:51 2012 New Revision: 57842 URL:
http://svn.reactos.org/svn/reactos?rev=57842&view=rev
Log: [FREELDR] Improve the overall look: - Augment the timeout of the livecd from 3 seconds to 5 seconds. - In "Mini"-UI (i.e. NTLDR-like UI), add a newline between "Press ENTER" and the time counting. - Have a real "Setup"-UI (i.e. make it really work). - Add the possibility to change the title of menus. Modified: trunk/reactos/boot/bootdata/bootcd.ini trunk/reactos/boot/bootdata/livecd.ini trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c trunk/reactos/boot/freeldr/freeldr/bootmgr.c trunk/reactos/boot/freeldr/freeldr/include/ui.h trunk/reactos/boot/freeldr/freeldr/include/ui/noui.h trunk/reactos/boot/freeldr/freeldr/include/ui/tui.h trunk/reactos/boot/freeldr/freeldr/options.c trunk/reactos/boot/freeldr/freeldr/ui/directui.c trunk/reactos/boot/freeldr/freeldr/ui/minitui.c trunk/reactos/boot/freeldr/freeldr/ui/noui.c trunk/reactos/boot/freeldr/freeldr/ui/tui.c trunk/reactos/boot/freeldr/freeldr/ui/tuimenu.c trunk/reactos/boot/freeldr/freeldr/ui/ui.c trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c Modified: trunk/reactos/boot/bootdata/bootcd.ini URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/bootcd.ini?r…
============================================================================== --- trunk/reactos/boot/bootdata/bootcd.ini [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/bootcd.ini [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -13,16 +13,11 @@ TitleBoxColor=Red MessageBoxTextColor=White MessageBoxColor=Blue -MenuTextColor=Gray -MenuColor=Black -TextColor=Gray +MenuTextColor=White +MenuColor=Blue +TextColor=Yellow SelectedTextColor=Black SelectedColor=Gray -ShowTime=No -MenuBox=No -CenterMenu=No -MinimalUI=Yes -TimeText=Seconds until highlighted choice will be started automatically: [Operating Systems] Setup="Setup" Modified: trunk/reactos/boot/bootdata/livecd.ini URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/livecd.ini?r…
============================================================================== --- trunk/reactos/boot/bootdata/livecd.ini [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/livecd.ini [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -1,6 +1,6 @@ [FREELOADER] DefaultOS=LiveCD_Debug -TimeOut=3 +TimeOut=5 [Display] TitleText=ReactOS LiveCD Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/custom.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -43,7 +43,13 @@ ULONG CustomBootMenuCount = sizeof(CustomBootMenuList) / sizeof(CustomBootMenuList[0]); ULONG SelectedMenuItem; - if (!UiDisplayMenu(CustomBootMenuList, CustomBootMenuCount, 0, -1, &SelectedMenuItem, TRUE, NULL)) + if (!UiDisplayMenu("Please choose a boot method:", + CustomBootMenuList, + CustomBootMenuCount, + 0, -1, + &SelectedMenuItem, + TRUE, + NULL)) { // The user pressed ESC return; Modified: trunk/reactos/boot/freeldr/freeldr/bootmgr.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/bootm…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/bootmgr.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/bootmgr.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -191,7 +191,14 @@ UiDrawBackdrop(); // Show the operating system list menu - if (!UiDisplayMenu(OperatingSystemDisplayNames, OperatingSystemCount, DefaultOperatingSystem, TimeOut, &SelectedOperatingSystem, FALSE, MainBootMenuKeyPressFilter)) + if (!UiDisplayMenu("Please select the operating system to start:", + OperatingSystemDisplayNames, + OperatingSystemCount, + DefaultOperatingSystem, + TimeOut, + &SelectedOperatingSystem, + FALSE, + MainBootMenuKeyPressFilter)) { UiMessageBox("Press ENTER to reboot."); goto reboot; Modified: trunk/reactos/boot/freeldr/freeldr/include/ui.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/inclu…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/ui.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/ui.h [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -19,8 +19,8 @@ #pragma once -extern ULONG UiScreenWidth; // Screen Width -extern ULONG UiScreenHeight; // Screen Height +extern ULONG UiScreenWidth; // Screen Width +extern ULONG UiScreenHeight; // Screen Height extern UCHAR UiStatusBarFgColor; // Status bar foreground color extern UCHAR UiStatusBarBgColor; // Status bar background color @@ -42,10 +42,10 @@ extern CHAR UiTitleBoxTitleText[260]; // Title box's title text extern BOOLEAN UiUseSpecialEffects; // Tells us if we should use fade effects -extern BOOLEAN UiCenterMenu; -extern BOOLEAN UiMenuBox; -extern CHAR UiTimeText[]; -extern BOOLEAN UiDrawTime; +extern BOOLEAN UiCenterMenu; +extern BOOLEAN UiMenuBox; +extern CHAR UiTimeText[]; +extern BOOLEAN UiDrawTime; extern const CHAR UiMonthNames[12][15]; @@ -55,7 +55,7 @@ // /////////////////////////////////////////////////////////////////////////////////////// BOOLEAN UiInitialize(BOOLEAN ShowGui); // Initialize User-Interface -BOOLEAN SetupUiInitialize(VOID); // Initialize User-Interface +BOOLEAN SetupUiInitialize(VOID); // Initialize Setup User-Interface VOID UiUnInitialize(PCSTR BootText); // Un-initialize User-Interface VOID UiDrawBackdrop(VOID); // Fills the entire screen with a backdrop VOID UiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar, UCHAR Attr /* Color Attributes */); // Fills the area specified with FillChar and Attr @@ -93,7 +93,7 @@ typedef BOOLEAN (*UiMenuKeyPressFilterCallback)(ULONG KeyPress); -BOOLEAN UiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); +BOOLEAN UiDisplayMenu(PCSTR MenuTitle, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); /////////////////////////////////////////////////////////////////////////////////////// // @@ -123,7 +123,7 @@ VOID (*FadeInBackdrop)(VOID); VOID (*FadeOut)(VOID); - BOOLEAN (*DisplayMenu)(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); + BOOLEAN (*DisplayMenu)(PCSTR MenuTitle, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); VOID (*DrawMenu)(PUI_MENU_INFO MenuInfo); } UIVTBL, *PUIVTBL; Modified: trunk/reactos/boot/freeldr/freeldr/include/ui/noui.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/inclu…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/ui/noui.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/ui/noui.h [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -35,14 +35,11 @@ VOID NoUiFadeInBackdrop(VOID); VOID NoUiFadeOut(VOID); -BOOLEAN NoUiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); -VOID NoUiDrawMenu(PUI_MENU_INFO MenuInfo); - /////////////////////////////////////////////////////////////////////////////////////// // // Menu Functions // /////////////////////////////////////////////////////////////////////////////////////// -BOOLEAN NoUiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); +BOOLEAN NoUiDisplayMenu(PCSTR MenuTitle, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); VOID NoUiDrawMenu(PUI_MENU_INFO MenuInfo); Modified: trunk/reactos/boot/freeldr/freeldr/include/ui/tui.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/inclu…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/ui/tui.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/ui/tui.h [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -60,6 +60,8 @@ struct tagUI_MENU_INFO { + PCSTR MenuTitle; + PCSTR *MenuItemList; ULONG MenuItemCount; LONG MenuTimeRemaining; @@ -69,7 +71,6 @@ ULONG Top; ULONG Right; ULONG Bottom; - }; VOID NTAPI TuiCalcMenuBoxSize(PUI_MENU_INFO MenuInfo); @@ -77,7 +78,7 @@ VOID NTAPI TuiDrawMenuBox(PUI_MENU_INFO MenuInfo); VOID NTAPI TuiDrawMenuItem(PUI_MENU_INFO MenuInfo, ULONG MenuItemNumber); ULONG NTAPI TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo, UiMenuKeyPressFilterCallback KeyPressFilter); -BOOLEAN TuiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); +BOOLEAN TuiDisplayMenu(PCSTR MenuTitle, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter); /* Definitions for corners, depending on HORIZ and VERT */ #define UL (0xda) Modified: trunk/reactos/boot/freeldr/freeldr/options.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/optio…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/options.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/options.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -101,7 +101,13 @@ ULONG SelectedMenuItem; CHAR DebugChannelString[100]; - if (!UiDisplayMenu(OptionsMenuList, OptionsMenuItemCount, 0, -1, &SelectedMenuItem, TRUE, NULL)) + if (!UiDisplayMenu("Select an option:", + OptionsMenuList, + OptionsMenuItemCount, + 0, -1, + &SelectedMenuItem, + TRUE, + NULL)) { // The user pressed ESC return; Modified: trunk/reactos/boot/freeldr/freeldr/ui/directui.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/ui/di…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/ui/directui.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/ui/directui.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -52,11 +52,11 @@ UiInitialize(IN BOOLEAN ShowGui) { ULONG Depth; - - /* Nothing to do */ - if (!ShowGui) return TRUE; - - /* Set mode and query size */ + + /* Nothing to do */ + if (!ShowGui) return TRUE; + + /* Set mode and query size */ MachVideoSetDisplayMode(NULL, TRUE); MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth); return TRUE; @@ -245,7 +245,7 @@ IN ULONG MaxChars) { /* If it's too large, just add some ellipsis past the maximum */ - if (strlen(StringText) > MaxChars) strcpy(&StringText[MaxChars - 3], "..."); + if (strlen(StringText) > MaxChars) strcpy(&StringText[MaxChars - 3], "..."); } VOID @@ -273,7 +273,7 @@ /* Display under the menu directly */ UiDrawText(0, - MenuInfo->Bottom + 3, + MenuInfo->Bottom + 4, MenuLineText, ATTR(UiMenuFgColor, UiMenuBgColor)); } @@ -288,7 +288,7 @@ /* Draw this "empty" string to erase */ UiDrawText(0, - MenuInfo->Bottom + 3, + MenuInfo->Bottom + 4, MenuLineText, ATTR(UiMenuFgColor, UiMenuBgColor)); } @@ -356,14 +356,13 @@ /* No GUI status bar text, just minimal text. first to tell the user to choose */ UiDrawText(0, MenuInfo->Top - 2, - "Please select the operating system to start:", + MenuInfo->MenuTitle, ATTR(UiMenuFgColor, UiMenuBgColor)); /* Now tell him how to choose */ UiDrawText(0, MenuInfo->Bottom + 1, - "Use the up and down arrow keys to move the highlight to " - "your choice.", + "Use \x18 and \x19 to move the highlight to your choice.", ATTR(UiMenuFgColor, UiMenuBgColor)); UiDrawText(0, MenuInfo->Bottom + 2, @@ -381,7 +380,10 @@ UiDrawMenuBox(MenuInfo); /* Draw each line of the menu */ - for (i = 0; i < MenuInfo->MenuItemCount; i++) UiDrawMenuItem(MenuInfo, i); + for (i = 0; i < MenuInfo->MenuItemCount; i++) + { + UiDrawMenuItem(MenuInfo, i); + } } ULONG @@ -495,7 +497,8 @@ } BOOLEAN -UiDisplayMenu(IN PCSTR MenuItemList[], +UiDisplayMenu(IN PCSTR MenuTitle, + IN PCSTR MenuItemList[], IN ULONG MenuItemCount, IN ULONG DefaultMenuItem, IN LONG MenuTimeOut, @@ -517,6 +520,7 @@ } /* Setup the MENU_INFO structure */ + MenuInformation.MenuTitle = MenuTitle; MenuInformation.MenuItemList = MenuItemList; MenuInformation.MenuItemCount = MenuItemCount; MenuInformation.MenuTimeRemaining = MenuTimeOut; Modified: trunk/reactos/boot/freeldr/freeldr/ui/minitui.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/ui/mi…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/ui/minitui.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/ui/minitui.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -14,13 +14,8 @@ // // Fill in a black background // - TuiFillArea(0, - 0, - UiScreenWidth - 1, - UiScreenHeight - 1, - 0, - 0); - + TuiFillArea(0, 0, UiScreenWidth - 1, UiScreenHeight - 1, 0, 0); + // // Update the screen buffer // @@ -93,7 +88,7 @@ // UiVtbl.DrawText(0, MenuInfo->Top - 2, - "Please select the operating system to start:", + MenuInfo->MenuTitle, ATTR(UiMenuFgColor, UiMenuBgColor)); // @@ -101,8 +96,7 @@ // UiVtbl.DrawText(0, MenuInfo->Bottom + 1, - "Use the up and down arrow keys to move the highlight to " - "your choice.", + "Use \x18 and \x19 to move the highlight to your choice.", ATTR(UiMenuFgColor, UiMenuBgColor)); UiVtbl.DrawText(0, MenuInfo->Bottom + 2, @@ -126,7 +120,11 @@ // // Draw each line of the menu // - for (i = 0; i < MenuInfo->MenuItemCount; i++) TuiDrawMenuItem(MenuInfo, i); + for (i = 0; i < MenuInfo->MenuItemCount; i++) + { + TuiDrawMenuItem(MenuInfo, i); + } + VideoCopyOffScreenBufferToVRAM(); } Modified: trunk/reactos/boot/freeldr/freeldr/ui/noui.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/ui/no…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/ui/noui.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/ui/noui.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -109,7 +109,7 @@ // /////////////////////////////////////////////////////////////////////////////////////// -BOOLEAN NoUiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter) +BOOLEAN NoUiDisplayMenu(PCSTR MenuTitle, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter) { *SelectedMenuItem = DefaultMenuItem; return TRUE; Modified: trunk/reactos/boot/freeldr/freeldr/ui/tui.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/ui/tu…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/ui/tui.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/ui/tui.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -153,7 +153,7 @@ VOID TuiFillArea(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, CHAR FillChar, UCHAR Attr /* Color Attributes */) { PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer; - ULONG i, j; + ULONG i, j; // Clip the area to the screen if ((Left >= UiScreenWidth) || (Top >= UiScreenHeight)) @@ -188,7 +188,7 @@ VOID TuiDrawShadow(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom) { PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer; - ULONG Idx; + ULONG Idx; // Shade the bottom of the area if (Bottom < (UiScreenHeight - 1)) @@ -320,7 +320,7 @@ VOID TuiDrawText(ULONG X, ULONG Y, PCSTR Text, UCHAR Attr) { PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer; - ULONG i, j; + ULONG i, j; // Draw the text for (i=X, j=0; Text[j] && i<UiScreenWidth; i++,j++) @@ -332,16 +332,16 @@ VOID TuiDrawCenteredText(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, PCSTR TextString, UCHAR Attr) { - SIZE_T TextLength; - ULONG BoxWidth; - ULONG BoxHeight; - ULONG LineBreakCount; - SIZE_T Index; - SIZE_T LastIndex; - ULONG RealLeft; - ULONG RealTop; - ULONG X; - ULONG Y; + SIZE_T TextLength; + ULONG BoxWidth; + ULONG BoxHeight; + ULONG LineBreakCount; + SIZE_T Index; + SIZE_T LastIndex; + ULONG RealLeft; + ULONG RealTop; + ULONG X; + ULONG Y; CHAR Temp[2]; TextLength = strlen(TextString); @@ -393,7 +393,7 @@ VOID TuiDrawStatusText(PCSTR StatusText) { - SIZE_T i; + SIZE_T i; TuiDrawText(0, UiScreenHeight-1, " ", ATTR(UiStatusBarFgColor, UiStatusBarBgColor)); TuiDrawText(1, UiScreenHeight-1, StatusText, ATTR(UiStatusBarFgColor, UiStatusBarBgColor)); @@ -504,7 +504,7 @@ VOID TuiSaveScreen(PUCHAR Buffer) { PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer; - ULONG i; + ULONG i; for (i=0; i < (UiScreenWidth * UiScreenHeight * 2); i++) { @@ -515,7 +515,7 @@ VOID TuiRestoreScreen(PUCHAR Buffer) { PUCHAR ScreenMemory = (PUCHAR)TextVideoBuffer; - ULONG i; + ULONG i; for (i=0; i < (UiScreenWidth * UiScreenHeight * 2); i++) { @@ -630,12 +630,11 @@ } - VOID TuiDrawProgressBarCenter(ULONG Position, ULONG Range, PCHAR ProgressText) { - ULONG Left, Top, Right, Bottom; - ULONG Width = 50; // Allow for 50 "bars" - ULONG Height = 2; + ULONG Left, Top, Right, Bottom; + ULONG Width = 50; // Allow for 50 "bars" + ULONG Height = 2; Left = (UiScreenWidth - Width - 4) / 2; Right = Left + Width + 3; @@ -648,8 +647,8 @@ VOID TuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, ULONG Position, ULONG Range, PCHAR ProgressText) { - ULONG i; - ULONG ProgressBarWidth = (Right - Left) - 3; + ULONG i; + ULONG ProgressBarWidth = (Right - Left) - 3; // First make sure the progress bar text fits UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4); Modified: trunk/reactos/boot/freeldr/freeldr/ui/tuimenu.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/ui/tu…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/ui/tuimenu.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/ui/tuimenu.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -14,7 +14,8 @@ /* FUNCTIONS *****************************************************************/ BOOLEAN -TuiDisplayMenu(PCSTR MenuItemList[], +TuiDisplayMenu(PCSTR MenuTitle, + PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, @@ -41,6 +42,7 @@ // // Setup the MENU_INFO structure // + MenuInformation.MenuTitle = MenuTitle; MenuInformation.MenuItemList = MenuItemList; MenuInformation.MenuItemCount = MenuItemCount; MenuInformation.MenuTimeRemaining = MenuTimeOut; @@ -203,7 +205,7 @@ // // Update the status bar // - UiVtbl.DrawStatusText("Use \x18\x19 to select, then press ENTER."); + UiVtbl.DrawStatusText("Use \x18 and \x19 to select, then press ENTER."); // // Draw the menu box @@ -213,7 +215,11 @@ // // Draw each line of the menu // - for (i = 0; i < MenuInfo->MenuItemCount; i++) TuiDrawMenuItem(MenuInfo, i); + for (i = 0; i < MenuInfo->MenuItemCount; i++) + { + TuiDrawMenuItem(MenuInfo, i); + } + VideoCopyOffScreenBufferToVRAM(); } @@ -221,8 +227,7 @@ NTAPI TuiDrawMenuBox(PUI_MENU_INFO MenuInfo) { - CHAR MenuLineText[80]; - CHAR TempString[80]; + CHAR MenuLineText[80], TempString[80]; ULONG i; // @@ -237,7 +242,7 @@ D_VERT, D_HORZ, FALSE, // Filled - TRUE, // Shadow + TRUE, // Shadow ATTR(UiMenuFgColor, UiMenuBgColor)); } @@ -284,7 +289,7 @@ // Display under the menu directly // UiDrawText(0, - MenuInfo->Bottom + 3, + MenuInfo->Bottom + 4, MenuLineText, ATTR(UiMenuFgColor, UiMenuBgColor)); } @@ -313,7 +318,7 @@ else { UiDrawText(0, - MenuInfo->Bottom + 3, + MenuInfo->Bottom + 4, MenuLineText, ATTR(UiMenuFgColor, UiMenuBgColor)); } Modified: trunk/reactos/boot/freeldr/freeldr/ui/ui.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/ui/ui…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/ui/ui.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/ui/ui.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -23,8 +23,10 @@ DBG_DEFAULT_CHANNEL(UI); -ULONG UiScreenWidth; // Screen Width -ULONG UiScreenHeight; // Screen Height +BOOLEAN UiMinimal = FALSE; // Tells us if we are using a minimal console-like UI + +ULONG UiScreenWidth; // Screen Width +ULONG UiScreenHeight; // Screen Height UCHAR UiStatusBarFgColor = COLOR_BLACK; // Status bar foreground color UCHAR UiStatusBarBgColor = COLOR_CYAN; // Status bar background color @@ -81,13 +83,13 @@ BOOLEAN UiInitialize(BOOLEAN ShowGui) { VIDEODISPLAYMODE UiDisplayMode; // Tells us if we are in text or graphics mode - BOOLEAN UiMinimal = FALSE; // Tells us if we should use a minimal console-like UI ULONG_PTR SectionId; CHAR DisplayModeText[260]; CHAR SettingText[260]; ULONG Depth; - if (!ShowGui) { + if (!ShowGui) + { if (!UiVtbl.Initialize()) { MachVideoSetDisplayMode(NULL, FALSE); @@ -102,7 +104,7 @@ DisplayModeText[0] = '\0'; if (IniOpenSection("Display", &SectionId)) { - if (! IniReadSettingByName(SectionId, "DisplayMode", DisplayModeText, sizeof(DisplayModeText))) + if (!IniReadSettingByName(SectionId, "DisplayMode", DisplayModeText, sizeof(DisplayModeText))) { DisplayModeText[0] = '\0'; } @@ -116,7 +118,7 @@ MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth); if (VideoTextMode == UiDisplayMode) - UiVtbl = UiMinimal ? MiniTuiVtbl : TuiVtbl; + UiVtbl = (UiMinimal ? MiniTuiVtbl : TuiVtbl); else UiVtbl = GuiVtbl; @@ -222,44 +224,6 @@ UiFadeInBackdrop(); TRACE("UiInitialize() returning TRUE.\n"); - return TRUE; -} - -BOOLEAN SetupUiInitialize(VOID) -{ - CHAR DisplayModeText[260]; - ULONG Depth; - SIZE_T Length; - - - DisplayModeText[0] = '\0'; - - MachVideoSetDisplayMode(DisplayModeText, TRUE); - MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth); - - UiVtbl = TuiVtbl; - UiVtbl.Initialize(); - - // Draw the backdrop and fade it in if special effects are enabled - UiVtbl.FillArea(0, - 0, - UiScreenWidth - 1, - UiScreenHeight - 2, - 0, - ATTR(UiBackdropFgColor, UiBackdropBgColor)); - - UiDrawTime = FALSE; - UiStatusBarBgColor = 7; - - Length = strlen("ReactOS " KERNEL_VERSION_STR " Setup"); - memset(DisplayModeText, 0xcd, Length + 2); - DisplayModeText[Length + 2] = '\0'; - - UiVtbl.DrawText(4, 1, "ReactOS " KERNEL_VERSION_STR " Setup", ATTR(COLOR_GRAY, UiBackdropBgColor)); - UiVtbl.DrawText(3, 2, DisplayModeText, ATTR(COLOR_GRAY, UiBackdropBgColor)); - - TRACE("UiInitialize() returning TRUE.\n"); - return TRUE; } @@ -405,7 +369,7 @@ VOID UiShowMessageBoxesInSection(PCSTR SectionName) { - ULONG Idx; + ULONG Idx; CHAR SettingName[80]; CHAR SettingValue[80]; PCHAR MessageBoxText; @@ -455,7 +419,7 @@ VOID UiEscapeString(PCHAR String) { - ULONG Idx; + ULONG Idx; for (Idx=0; Idx<strlen(String); Idx++) { @@ -479,9 +443,9 @@ } } -BOOLEAN UiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter) -{ - return UiVtbl.DisplayMenu(MenuItemList, MenuItemCount, DefaultMenuItem, MenuTimeOut, SelectedMenuItem, CanEscape, KeyPressFilter); +BOOLEAN UiDisplayMenu(PCSTR MenuTitle, PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter) +{ + return UiVtbl.DisplayMenu(MenuTitle, MenuItemList, MenuItemCount, DefaultMenuItem, MenuTimeOut, SelectedMenuItem, CanEscape, KeyPressFilter); } VOID UiFadeInBackdrop(VOID) @@ -498,4 +462,73 @@ { return UiVtbl.EditBox(MessageText, EditTextBuffer, Length); } + + +/* SETUP MODE *****************************************************************/ + +VOID SetupUiDrawBackdrop(VOID) +{ + CHAR Underline[80]; + SIZE_T Length; + + // Draw the backdrop and fade it in if special effects are enabled + UiVtbl.FillArea(0, 0, UiScreenWidth - 1, UiScreenHeight - 2, 0, + ATTR(UiBackdropFgColor, UiBackdropBgColor)); + + Length = min( strlen("ReactOS " KERNEL_VERSION_STR " Setup"), + sizeof(Underline) - 1 ); + memset(Underline, 0xcd, Length); // Underline title + Underline[Length] = '\0'; + + UiVtbl.DrawText(4, 1, "ReactOS " KERNEL_VERSION_STR " Setup", ATTR(COLOR_GRAY, UiBackdropBgColor)); + UiVtbl.DrawText(4, 2, Underline, ATTR(COLOR_GRAY, UiBackdropBgColor)); + + // Update the screen buffer + VideoCopyOffScreenBufferToVRAM(); +} + +BOOLEAN SetupUiInitialize(VOID) +{ + if (!UiMinimal) + { + ULONG Depth; + + // Initialize the video + MachVideoSetDisplayMode(NULL, TRUE); + MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth); + + // Use Text UI with a modified backdrop and set display properties + UiVtbl = TuiVtbl; + UiVtbl.DrawBackdrop = SetupUiDrawBackdrop; + + UiStatusBarFgColor = COLOR_BLACK; + UiStatusBarBgColor = COLOR_GRAY; + UiBackdropFgColor = COLOR_WHITE; + UiBackdropBgColor = COLOR_BLUE; + UiBackdropFillStyle = MEDIUM_FILL; + UiTitleBoxFgColor = COLOR_WHITE; + UiTitleBoxBgColor = COLOR_RED; + UiMessageBoxFgColor = COLOR_WHITE; + UiMessageBoxBgColor = COLOR_BLUE; + UiMenuFgColor = COLOR_WHITE; + UiMenuBgColor = COLOR_BLUE; + UiTextColor = COLOR_YELLOW; + UiSelectedTextColor = COLOR_BLACK; + UiSelectedTextBgColor = COLOR_GRAY; + UiEditBoxTextColor = COLOR_WHITE; + UiEditBoxBgColor = COLOR_BLACK; + UiUseSpecialEffects = FALSE; + UiDrawTime = FALSE; + + UiVtbl.Initialize(); + + // Draw the backdrop + UiDrawBackdrop(); + } + + TRACE("SetupUiInitialize() returning TRUE.\n"); + + return TRUE; +} + #endif Modified: trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windo…
============================================================================== --- trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/windows/setupldr.c [iso-8859-1] Sun Dec 9 15:01:51 2012 @@ -210,8 +210,8 @@ TRACE("BootOptions: '%s'\n", BootOptions); - //SetupUiInitialize(); - UiDrawStatusText(""); + SetupUiInitialize(); + UiDrawStatusText("Setup is loading..."); /* Allocate and minimalistic-initialize LPB */ AllocateAndInitLPB(&LoaderBlock); @@ -231,7 +231,7 @@ /* Get a list of boot drivers */ SetupLdrScanBootDrivers(&LoaderBlock->BootDriverListHead, InfHandle, BootPath); - + /* Load ReactOS */ LoadAndBootWindowsCommon(_WIN32_WINNT_WS03, LoaderBlock, BootOptions,
12 years
1
0
0
0
[pschweitzer] 57841: [WIN32CSR] Add langage definition support
by pschweitzer@svn.reactos.org
Author: pschweitzer Date: Sun Dec 9 14:53:32 2012 New Revision: 57841 URL:
http://svn.reactos.org/svn/reactos?rev=57841&view=rev
Log: [WIN32CSR] Add langage definition support Modified: trunk/reactos/win32ss/user/win32csr/rsrc.rc Modified: trunk/reactos/win32ss/user/win32csr/rsrc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/win32csr/rsrc…
============================================================================== --- trunk/reactos/win32ss/user/win32csr/rsrc.rc [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/win32csr/rsrc.rc [iso-8859-1] Sun Dec 9 14:53:32 2012 @@ -5,27 +5,69 @@ 1 ICON DISCARDABLE res/terminal.ico -#include "lang/bg-BG.rc" -#include "lang/cs-CZ.rc" -#include "lang/de-DE.rc" -#include "lang/el-GR.rc" -#include "lang/en-US.rc" -#include "lang/es-ES.rc" -#include "lang/fr-FR.rc" -#include "lang/id-ID.rc" -#include "lang/it-IT.rc" -#include "lang/ja-JP.rc" -#include "lang/no-NO.rc" -#include "lang/sk-SK.rc" -#include "lang/sv-SE.rc" -#include "lang/zh-CN.rc" -#include "lang/zh-TW.rc" +#ifdef LANGUAGE_BG_BG + #include "lang/bg-BG.rc" +#endif +#ifdef LANGUAGE_CS_CZ + #include "lang/cs-CZ.rc" +#endif +#ifdef LANGUAGE_DE_DE + #include "lang/de-DE.rc" +#endif +#ifdef LANGUAGE_EL_GR + #include "lang/el-GR.rc" +#endif +#ifdef LANGUAGE_EN_US + #include "lang/en-US.rc" +#endif +#ifdef LANGUAGE_ES_ES + #include "lang/es-ES.rc" +#endif +#ifdef LANGUAGE_FR_FR + #include "lang/fr-FR.rc" +#endif +#ifdef LANGUAGE_ID_ID + #include "lang/id-ID.rc" +#endif +#ifdef LANGUAGE_IT_IT + #include "lang/it-IT.rc" +#endif +#ifdef LANGUAGE_JA_JP + #include "lang/ja-JP.rc" +#endif +#ifdef LANGUAGE_NB_NO + #include "lang/no-NO.rc" +#endif +#ifdef LANGUAGE_SK_SK + #include "lang/sk-SK.rc" +#endif +#ifdef LANGUAGE_SV_SE + #include "lang/sv-SE.rc" +#endif +#ifdef LANGUAGE_ZH_CN + #include "lang/zh-CN.rc" +#endif +#ifdef LANGUAGE_ZH_TW + #include "lang/zh-TW.rc" +#endif // UTF-8 #pragma code_page(65001) -#include "lang/pl-PL.rc" -#include "lang/pt-BR.rc" -#include "lang/ro-RO.rc" -#include "lang/ru-RU.rc" -#include "lang/uk-UA.rc" -#include "lang/tr-TR.rc" +#ifdef LANGUAGE_PL_PL + #include "lang/pl-PL.rc" +#endif +#ifdef LANGUAGE_PT_BR + #include "lang/pt-BR.rc" +#endif +#ifdef LANGUAGE_RO_RO + #include "lang/ro-RO.rc" +#endif +#ifdef LANGUAGE_RU_RU + #include "lang/ru-RU.rc" +#endif +#ifdef LANGUAGE_UK_UA + #include "lang/uk-UA.rc" +#endif +#ifdef LANGUAGE_TR_TR + #include "lang/tr-TR.rc" +#endif
12 years
1
0
0
0
[akhaldi] 57840: [SERVICES_WINETEST]: Import from Wine 1.5.19.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Sun Dec 9 13:06:56 2012 New Revision: 57840 URL:
http://svn.reactos.org/svn/reactos?rev=57840&view=rev
Log: [SERVICES_WINETEST]: Import from Wine 1.5.19. Added: trunk/rostests/winetests/services/ trunk/rostests/winetests/services/CMakeLists.txt (with props) trunk/rostests/winetests/services/service.c (with props) trunk/rostests/winetests/services/testlist.c (with props) Modified: trunk/rostests/winetests/CMakeLists.txt Modified: trunk/rostests/winetests/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/CMakeLists.txt?…
============================================================================== --- trunk/rostests/winetests/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/CMakeLists.txt [iso-8859-1] Sun Dec 9 13:06:56 2012 @@ -71,6 +71,7 @@ add_subdirectory(schannel) add_subdirectory(secur32) add_subdirectory(serialui) +add_subdirectory(services) add_subdirectory(setupapi) add_subdirectory(shdocvw) add_subdirectory(shell32) Added: trunk/rostests/winetests/services/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/services/CMakeL…
============================================================================== --- trunk/rostests/winetests/services/CMakeLists.txt (added) +++ trunk/rostests/winetests/services/CMakeLists.txt [iso-8859-1] Sun Dec 9 13:06:56 2012 @@ -1,0 +1,7 @@ + +add_definitions(-D__ROS_LONG64__) +add_executable(services_winetest service.c testlist.c) +target_link_libraries(services_winetest wine) +set_module_type(services_winetest win32cui) +add_importlibs(services_winetest advapi32 msvcrt kernel32 ntdll) +add_cd_file(TARGET services_winetest DESTINATION reactos/bin FOR all) Propchange: trunk/rostests/winetests/services/CMakeLists.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/winetests/services/service.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/services/servic…
============================================================================== --- trunk/rostests/winetests/services/service.c (added) +++ trunk/rostests/winetests/services/service.c [iso-8859-1] Sun Dec 9 13:06:56 2012 @@ -1,0 +1,490 @@ +/* + * Copyright 2012 Jacek Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <windows.h> +#include <stdio.h> + +#include "wine/test.h" + +static SERVICE_STATUS_HANDLE (WINAPI *pRegisterServiceCtrlHandlerExA)(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID); + +static HANDLE pipe_handle = INVALID_HANDLE_VALUE; +static char service_name[100], named_pipe_name[100]; +static SERVICE_STATUS_HANDLE service_handle; + +/* Service process global variables */ +static HANDLE service_stop_event; + +static void send_msg(const char *type, const char *msg) +{ + DWORD written = 0; + char buf[512]; + + sprintf(buf, "%s:%s", type, msg); + WriteFile(pipe_handle, buf, strlen(buf)+1, &written, NULL); +} + +static inline void service_trace(const char *msg) +{ + send_msg("TRACE", msg); +} + +static inline void service_event(const char *event) +{ + send_msg("EVENT", event); +} + +static void service_ok(int cnd, const char *msg, ...) +{ + va_list valist; + char buf[512]; + + va_start(valist, msg); + vsprintf(buf, msg, valist); + va_end(valist); + + send_msg(cnd ? "OK" : "FAIL", buf); +} + +static DWORD WINAPI service_handler(DWORD ctrl, DWORD event_type, void *event_data, void *context) +{ + SERVICE_STATUS status; + + status.dwServiceType = SERVICE_WIN32; + status.dwControlsAccepted = SERVICE_ACCEPT_STOP; + status.dwWin32ExitCode = 0; + status.dwServiceSpecificExitCode = 0; + status.dwCheckPoint = 0; + status.dwWaitHint = 0; + + switch(ctrl) + { + case SERVICE_CONTROL_STOP: + case SERVICE_CONTROL_SHUTDOWN: + service_event("STOP"); + status.dwCurrentState = SERVICE_STOP_PENDING; + status.dwControlsAccepted = 0; + SetServiceStatus(service_handle, &status); + SetEvent(service_stop_event); + return NO_ERROR; + default: + status.dwCurrentState = SERVICE_RUNNING; + SetServiceStatus( service_handle, &status ); + return NO_ERROR; + } +} + +static void WINAPI service_main(DWORD argc, char **argv) +{ + SERVICE_STATUS status; + BOOL res; + + service_ok(argc == 1, "argc = %d", argc); + if(argc) + service_ok(!strcmp(argv[0], service_name), "argv[0] = %s, expected %s", argv[0], service_name); + + service_handle = pRegisterServiceCtrlHandlerExA(service_name, service_handler, NULL); + service_ok(service_handle != NULL, "RegisterServiceCtrlHandlerEx failed: %u\n", GetLastError()); + if(!service_handle) + return; + + status.dwServiceType = SERVICE_WIN32; + status.dwCurrentState = SERVICE_RUNNING; + status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + status.dwWin32ExitCode = 0; + status.dwServiceSpecificExitCode = 0; + status.dwCheckPoint = 0; + status.dwWaitHint = 10000; + res = SetServiceStatus(service_handle, &status); + service_ok(res, "SetServiceStatus(SERVICE_RUNNING) failed: %u", GetLastError()); + + service_event("RUNNING"); + + WaitForSingleObject(service_stop_event, INFINITE); + + status.dwCurrentState = SERVICE_STOPPED; + status.dwControlsAccepted = 0; + res = SetServiceStatus(service_handle, &status); + service_ok(res, "SetServiceStatus(SERVICE_STOPPED) failed: %u", GetLastError()); +} + +static void service_process(void (WINAPI *p_service_main)(DWORD, char **)) +{ + BOOL res; + + SERVICE_TABLE_ENTRYA servtbl[] = { + {service_name, p_service_main}, + {NULL, NULL} + }; + + res = WaitNamedPipeA(named_pipe_name, NMPWAIT_USE_DEFAULT_WAIT); + if(!res) + return; + + pipe_handle = CreateFileA(named_pipe_name, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if(pipe_handle == INVALID_HANDLE_VALUE) + return; + + service_trace("Starting..."); + + service_stop_event = CreateEventA(NULL, TRUE, FALSE, NULL); + service_ok(service_stop_event != NULL, "Could not create event: %u\n", GetLastError()); + if(!service_stop_event) + return; + + res = StartServiceCtrlDispatcherA(servtbl); + service_ok(res, "StartServiceCtrlDispatcher failed: %u\n", GetLastError()); + + /* Let service thread terminate */ + Sleep(50); + + CloseHandle(service_stop_event); + CloseHandle(pipe_handle); +} + +static DWORD WINAPI no_stop_handler(DWORD ctrl, DWORD event_type, void *event_data, void *context) +{ + SERVICE_STATUS status; + + status.dwServiceType = SERVICE_WIN32; + status.dwControlsAccepted = SERVICE_ACCEPT_STOP; + status.dwWin32ExitCode = 0; + status.dwServiceSpecificExitCode = 0; + status.dwCheckPoint = 0; + status.dwWaitHint = 0; + + switch(ctrl) + { + case SERVICE_CONTROL_STOP: + case SERVICE_CONTROL_SHUTDOWN: + service_event("STOP"); + status.dwCurrentState = SERVICE_STOPPED; + status.dwControlsAccepted = 0; + SetServiceStatus(service_handle, &status); + SetEvent(service_stop_event); + return NO_ERROR; + default: + status.dwCurrentState = SERVICE_RUNNING; + SetServiceStatus( service_handle, &status ); + return NO_ERROR; + } +} + +static void WINAPI no_stop_main(DWORD argc, char **argv) +{ + SERVICE_STATUS status; + BOOL res; + + service_ok(argc == 1, "argc = %d", argc); + if(argc) + service_ok(!strcmp(argv[0], service_name), "argv[0] = %s, expected %s", argv[0], service_name); + + service_handle = pRegisterServiceCtrlHandlerExA(service_name, no_stop_handler, NULL); + service_ok(service_handle != NULL, "RegisterServiceCtrlHandlerEx failed: %u\n", GetLastError()); + if(!service_handle) + return; + + status.dwServiceType = SERVICE_WIN32; + status.dwCurrentState = SERVICE_RUNNING; + status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + status.dwWin32ExitCode = 0; + status.dwServiceSpecificExitCode = 0; + status.dwCheckPoint = 0; + status.dwWaitHint = 10000; + res = SetServiceStatus(service_handle, &status); + service_ok(res, "SetServiceStatus(SERVICE_RUNNING) failed: %u", GetLastError()); + + service_event("RUNNING"); +} + +/* Test process global variables */ +static SC_HANDLE scm_handle; + +static char current_event[32]; +static HANDLE event_handle = INVALID_HANDLE_VALUE; +static CRITICAL_SECTION event_cs; + +static SC_HANDLE register_service(const char *test_name) +{ + char service_cmd[MAX_PATH+150], *ptr; + SC_HANDLE service; + + ptr = service_cmd + GetModuleFileNameA(NULL, service_cmd, MAX_PATH); + + /* If the file doesn't exist, assume we're using built-in exe and append .so to the path */ + if(GetFileAttributesA(service_cmd) == INVALID_FILE_ATTRIBUTES) { + strcpy(ptr, ".so"); + ptr += 3; + } + + strcpy(ptr, " service "); + ptr += strlen(ptr); + sprintf(ptr, "%s ", test_name); + ptr += strlen(ptr); + strcpy(ptr, service_name); + + trace("service_cmd \"%s\"\n", service_cmd); + + service = CreateServiceA(scm_handle, service_name, service_name, GENERIC_ALL, + SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, + service_cmd, NULL, NULL, NULL, NULL, NULL); + if(!service && GetLastError() == ERROR_ACCESS_DENIED) { + skip("Not enough access right to create service\n"); + return NULL; + } + + ok(service != NULL, "CreateService failed: %u\n", GetLastError()); + return service; +} + +static void expect_event(const char *event_name) +{ + char evt[32]; + DWORD res; + + trace("waiting for %s\n", event_name); + + res = WaitForSingleObject(event_handle, 30000); + ok(res == WAIT_OBJECT_0, "WaitForSingleObject failed: %u\n", res); + if(res != WAIT_OBJECT_0) + return; + + EnterCriticalSection(&event_cs); + strcpy(evt, current_event); + *current_event = 0; + LeaveCriticalSection(&event_cs); + + ok(!strcmp(evt, event_name), "Unexpected event: %s, expected %s\n", evt, event_name); +} + +static DWORD WINAPI pipe_thread(void *arg) +{ + char buf[257], *ptr; + DWORD read; + BOOL res; + + res = ConnectNamedPipe(pipe_handle, NULL); + ok(res || GetLastError() == ERROR_PIPE_CONNECTED, "ConnectNamedPipe failed: %u\n", GetLastError()); + + while(1) { + res = ReadFile(pipe_handle, buf, sizeof(buf), &read, NULL); + if(!res) { + ok(GetLastError() == ERROR_BROKEN_PIPE || GetLastError() == ERROR_INVALID_HANDLE, + "ReadFile failed: %u\n", GetLastError()); + break; + } + + for(ptr = buf; ptr < buf+read; ptr += strlen(ptr)+1) { + if(!strncmp(ptr, "TRACE:", 6)) { + trace("service trace: %s\n", ptr+6); + }else if(!strncmp(ptr, "OK:", 3)) { + ok(1, "service: %s\n", ptr+3); + }else if(!strncmp(ptr, "FAIL:", 5)) { + ok(0, "service: %s\n", ptr+5); + }else if(!strncmp(ptr, "EVENT:", 6)) { + trace("service event: %s\n", ptr+6); + EnterCriticalSection(&event_cs); + ok(!current_event[0], "event %s still queued\n", current_event); + strcpy(current_event, ptr+6); + LeaveCriticalSection(&event_cs); + SetEvent(event_handle); + }else { + ok(0, "malformed service message: %s\n", ptr); + } + } + } + + DisconnectNamedPipe(pipe_handle); + trace("pipe disconnected\n"); + return 0; +} + +static void test_service(void) +{ + SC_HANDLE service_handle = register_service("simple_service"); + SERVICE_STATUS status; + BOOL res; + + if(!service_handle) + return; + + trace("starting...\n"); + res = StartServiceA(service_handle, 0, NULL); + ok(res, "StartService failed: %u\n", GetLastError()); + if(!res) { + DeleteService(service_handle); + return; + } + expect_event("RUNNING"); + + res = QueryServiceStatus(service_handle, &status); + ok(res, "QueryServiceStatus failed: %d\n", GetLastError()); + todo_wine ok(status.dwServiceType == SERVICE_WIN32_OWN_PROCESS, "status.dwServiceType = %x\n", status.dwServiceType); + ok(status.dwCurrentState == SERVICE_RUNNING, "status.dwCurrentState = %x\n", status.dwCurrentState); + ok(status.dwControlsAccepted == (SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN), + "status.dwControlsAccepted = %x\n", status.dwControlsAccepted); + ok(status.dwWin32ExitCode == 0, "status.dwExitCode = %d\n", status.dwWin32ExitCode); + ok(status.dwServiceSpecificExitCode == 0, "status.dwServiceSpecificExitCode = %d\n", + status.dwServiceSpecificExitCode); + ok(status.dwCheckPoint == 0, "status.dwCheckPoint = %d\n", status.dwCheckPoint); + todo_wine ok(status.dwWaitHint == 0, "status.dwWaitHint = %d\n", status.dwWaitHint); + + res = ControlService(service_handle, SERVICE_CONTROL_STOP, &status); + ok(res, "ControlService failed: %u\n", GetLastError()); + expect_event("STOP"); + + res = DeleteService(service_handle); + ok(res, "DeleteService failed: %u\n", GetLastError()); + + CloseServiceHandle(service_handle); +} + +static inline void test_no_stop(void) +{ + SC_HANDLE service_handle = register_service("no_stop"); + SERVICE_STATUS status; + BOOL res; + + if(!service_handle) + return; + + trace("starting...\n"); + res = StartServiceA(service_handle, 0, NULL); + ok(res, "StartService failed: %u\n", GetLastError()); + if(!res) { + DeleteService(service_handle); + return; + } + expect_event("RUNNING"); + + /* Let service thread terminate */ + Sleep(1000); + + res = QueryServiceStatus(service_handle, &status); + ok(res, "QueryServiceStatus failed: %d\n", GetLastError()); + todo_wine ok(status.dwServiceType == SERVICE_WIN32_OWN_PROCESS, "status.dwServiceType = %x\n", status.dwServiceType); + ok(status.dwCurrentState == SERVICE_RUNNING, "status.dwCurrentState = %x\n", status.dwCurrentState); + ok(status.dwControlsAccepted == (SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN), + "status.dwControlsAccepted = %x\n", status.dwControlsAccepted); + ok(status.dwWin32ExitCode == 0, "status.dwExitCode = %d\n", status.dwWin32ExitCode); + ok(status.dwServiceSpecificExitCode == 0, "status.dwServiceSpecificExitCode = %d\n", + status.dwServiceSpecificExitCode); + ok(status.dwCheckPoint == 0, "status.dwCheckPoint = %d\n", status.dwCheckPoint); + todo_wine ok(status.dwWaitHint == 0, "status.dwWaitHint = %d\n", status.dwWaitHint); + + res = ControlService(service_handle, SERVICE_CONTROL_STOP, &status); + ok(res, "ControlService failed: %u\n", GetLastError()); + expect_event("STOP"); + + res = QueryServiceStatus(service_handle, &status); + ok(res, "QueryServiceStatus failed: %d\n", GetLastError()); + todo_wine ok(status.dwServiceType == SERVICE_WIN32_OWN_PROCESS, "status.dwServiceType = %x\n", status.dwServiceType); + ok(status.dwCurrentState==SERVICE_STOPPED || status.dwCurrentState==SERVICE_STOP_PENDING, + "status.dwCurrentState = %x\n", status.dwCurrentState); + ok(status.dwControlsAccepted == 0, "status.dwControlsAccepted = %x\n", status.dwControlsAccepted); + ok(status.dwWin32ExitCode == 0, "status.dwExitCode = %d\n", status.dwWin32ExitCode); + ok(status.dwServiceSpecificExitCode == 0, "status.dwServiceSpecificExitCode = %d\n", + status.dwServiceSpecificExitCode); + ok(status.dwCheckPoint == 0, "status.dwCheckPoint = %d\n", status.dwCheckPoint); + ok(status.dwWaitHint == 0, "status.dwWaitHint = %d\n", status.dwWaitHint); + + res = DeleteService(service_handle); + ok(res, "DeleteService failed: %u\n", GetLastError()); + + res = QueryServiceStatus(service_handle, &status); + ok(res, "QueryServiceStatus failed: %d\n", GetLastError()); + todo_wine ok(status.dwServiceType == SERVICE_WIN32_OWN_PROCESS, "status.dwServiceType = %x\n", status.dwServiceType); + ok(status.dwCurrentState==SERVICE_STOPPED || status.dwCurrentState==SERVICE_STOP_PENDING, + "status.dwCurrentState = %x\n", status.dwCurrentState); + ok(status.dwControlsAccepted == 0, "status.dwControlsAccepted = %x\n", status.dwControlsAccepted); + ok(status.dwWin32ExitCode == 0, "status.dwExitCode = %d\n", status.dwWin32ExitCode); + ok(status.dwServiceSpecificExitCode == 0, "status.dwServiceSpecificExitCode = %d\n", + status.dwServiceSpecificExitCode); + ok(status.dwCheckPoint == 0, "status.dwCheckPoint = %d\n", status.dwCheckPoint); + ok(status.dwWaitHint == 0, "status.dwWaitHint = %d\n", status.dwWaitHint); + + CloseServiceHandle(service_handle); + + res = QueryServiceStatus(service_handle, &status); + ok(!res, "QueryServiceStatus should have failed\n"); + ok(GetLastError() == ERROR_INVALID_HANDLE, "GetLastError = %d\n", GetLastError()); +} + +static void test_runner(void (*p_run_test)(void)) +{ + HANDLE thread; + + sprintf(service_name, "WineTestService%d", GetTickCount()); + trace("service_name: %s\n", service_name); + sprintf(named_pipe_name, "\\\\.\\pipe\\%s_pipe", service_name); + + pipe_handle = CreateNamedPipeA(named_pipe_name, PIPE_ACCESS_INBOUND, + PIPE_TYPE_BYTE|PIPE_READMODE_BYTE|PIPE_WAIT, 10, 2048, 2048, 10000, NULL); + ok(pipe_handle != INVALID_HANDLE_VALUE, "CreateNamedPipe failed: %u\n", GetLastError()); + if(pipe_handle == INVALID_HANDLE_VALUE) + return; + + InitializeCriticalSection(&event_cs); + event_handle = CreateEventA(NULL, FALSE, FALSE, NULL); + ok(event_handle != INVALID_HANDLE_VALUE, "CreateEvent failed: %u\n", GetLastError()); + if(event_handle == INVALID_HANDLE_VALUE) + return; + + thread = CreateThread(NULL, 0, pipe_thread, NULL, 0, NULL); + ok(thread != NULL, "CreateThread failed: %u\n", GetLastError()); + if(!thread) + return; + + p_run_test(); + + WaitForSingleObject(thread, INFINITE); + CloseHandle(event_handle); + CloseHandle(pipe_handle); +} + +START_TEST(service) +{ + char **argv; + int argc; + + pRegisterServiceCtrlHandlerExA = (void*)GetProcAddress(GetModuleHandleA("advapi32.dll"), "RegisterServiceCtrlHandlerExA"); + if(!pRegisterServiceCtrlHandlerExA) { + win_skip("RegisterServiceCtrlHandlerExA not available, skipping tests\n"); + return; + } + + argc = winetest_get_mainargs(&argv); + + scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_ALL); + ok(scm_handle != NULL, "OpenSCManager failed: %u\n", GetLastError()); + + if(argc < 3) { + test_runner(test_service); + test_runner(test_no_stop); + }else { + strcpy(service_name, argv[3]); + sprintf(named_pipe_name, "\\\\.\\pipe\\%s_pipe", service_name); + + if(!strcmp(argv[2], "simple_service")) + service_process(service_main); + else if(!strcmp(argv[2], "no_stop")) + service_process(no_stop_main); + } + + CloseServiceHandle(scm_handle); +} Propchange: trunk/rostests/winetests/services/service.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/winetests/services/testlist.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/services/testli…
============================================================================== --- trunk/rostests/winetests/services/testlist.c (added) +++ trunk/rostests/winetests/services/testlist.c [iso-8859-1] Sun Dec 9 13:06:56 2012 @@ -1,0 +1,15 @@ +/* Automatically generated file; DO NOT EDIT!! */ + +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#define STANDALONE +#include "wine/test.h" + +extern void func_service(void); + +const struct test winetest_testlist[] = +{ + { "service", func_service }, + { 0, 0 } +}; Propchange: trunk/rostests/winetests/services/testlist.c ------------------------------------------------------------------------------ svn:eol-style = native
12 years
1
0
0
0
[akhaldi] 57839: [REGEDIT_WINETEST]: Import from Wine 1.5.19.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Sun Dec 9 13:02:24 2012 New Revision: 57839 URL:
http://svn.reactos.org/svn/reactos?rev=57839&view=rev
Log: [REGEDIT_WINETEST]: Import from Wine 1.5.19. Added: trunk/rostests/winetests/regedit/ (with props) trunk/rostests/winetests/regedit/CMakeLists.txt (with props) trunk/rostests/winetests/regedit/regedit.c (with props) trunk/rostests/winetests/regedit/testlist.c (with props) Modified: trunk/rostests/winetests/CMakeLists.txt Modified: trunk/rostests/winetests/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/CMakeLists.txt?…
============================================================================== --- trunk/rostests/winetests/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/CMakeLists.txt [iso-8859-1] Sun Dec 9 13:02:24 2012 @@ -62,6 +62,7 @@ add_subdirectory(qmgr) add_subdirectory(quartz) add_subdirectory(rasapi32) +add_subdirectory(regedit) add_subdirectory(riched20) add_subdirectory(riched32) add_subdirectory(rpcrt4) Propchange: trunk/rostests/winetests/regedit/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Sun Dec 9 13:02:24 2012 @@ -1,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+) Propchange: trunk/rostests/winetests/regedit/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details. Propchange: trunk/rostests/winetests/regedit/ ------------------------------------------------------------------------------ bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/rostests/winetests/regedit/ ------------------------------------------------------------------------------ tsvn:logminsize = 10 Added: trunk/rostests/winetests/regedit/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/regedit/CMakeLi…
============================================================================== --- trunk/rostests/winetests/regedit/CMakeLists.txt (added) +++ trunk/rostests/winetests/regedit/CMakeLists.txt [iso-8859-1] Sun Dec 9 13:02:24 2012 @@ -1,0 +1,10 @@ + +add_definitions( + -D__ROS_LONG64__ + -D_DLL -D__USE_CRTIMP) + +add_executable(regedit_winetest regedit.c testlist.c) +target_link_libraries(regedit_winetest wine) +set_module_type(regedit_winetest win32cui) +add_importlibs(regedit_winetest advapi32 msvcrt kernel32 ntdll) +add_cd_file(TARGET regedit_winetest DESTINATION reactos/bin FOR all) Propchange: trunk/rostests/winetests/regedit/CMakeLists.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/winetests/regedit/regedit.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/regedit/regedit…
============================================================================== --- trunk/rostests/winetests/regedit/regedit.c (added) +++ trunk/rostests/winetests/regedit/regedit.c [iso-8859-1] Sun Dec 9 13:02:24 2012 @@ -1,0 +1,392 @@ +/* + * Copyright 2010 Andrew Eikum for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <windows.h> + +#include "wine/test.h" + +static BOOL supports_wchar; + +#define lok ok_(__FILE__,line) + +#define exec_import_str(c) r_exec_import_str(__LINE__, c) +static BOOL r_exec_import_str(unsigned line, const char *file_contents) +{ + STARTUPINFOA si = {sizeof(STARTUPINFOA)}; + PROCESS_INFORMATION pi; + HANDLE regfile; + DWORD written, dr; + BOOL br; + char cmd[] = "regedit /s test.reg"; + + regfile = CreateFileA("test.reg", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); + lok(regfile != INVALID_HANDLE_VALUE, "Failed to create test.reg file\n"); + if(regfile == INVALID_HANDLE_VALUE) + return FALSE; + + br = WriteFile(regfile, file_contents, strlen(file_contents), &written, + NULL); + lok(br == TRUE, "WriteFile failed: %d\n", GetLastError()); + + CloseHandle(regfile); + + if(!CreateProcessA(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + return FALSE; + + dr = WaitForSingleObject(pi.hProcess, 10000); + if(dr == WAIT_TIMEOUT) + TerminateProcess(pi.hProcess, 1); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + + br = DeleteFileA("test.reg"); + lok(br == TRUE, "DeleteFileA failed: %d\n", GetLastError()); + + return (dr != WAIT_TIMEOUT); +} + +#define exec_import_wstr(c) r_exec_import_wstr(__LINE__, c) +static BOOL r_exec_import_wstr(unsigned line, const WCHAR *file_contents) +{ + STARTUPINFOA si = {sizeof(STARTUPINFOA)}; + PROCESS_INFORMATION pi; + HANDLE regfile; + DWORD written, dr; + BOOL br; + char cmd[] = "regedit /s test.reg"; + + regfile = CreateFileA("test.reg", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, NULL); + lok(regfile != INVALID_HANDLE_VALUE, "Failed to create test.reg file\n"); + if(regfile == INVALID_HANDLE_VALUE) + return FALSE; + + br = WriteFile(regfile, file_contents, + lstrlenW(file_contents) * sizeof(WCHAR), &written, NULL); + lok(br == TRUE, "WriteFile failed: %d\n", GetLastError()); + + CloseHandle(regfile); + + if(!CreateProcessA(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + return FALSE; + + dr = WaitForSingleObject(pi.hProcess, 10000); + if(dr == WAIT_TIMEOUT) + TerminateProcess(pi.hProcess, 1); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + + br = DeleteFileA("test.reg"); + lok(br == TRUE, "DeleteFileA failed: %d\n", GetLastError()); + + return (dr != WAIT_TIMEOUT); +} + +#define verify_reg_sz(k,s,n,e) r_verify_reg_sz(__LINE__,k,s,n,e) +static void r_verify_reg_sz(unsigned line, HKEY key, const char *subkey, + const char *value_name, const char *exp_value) +{ + LONG lr; + DWORD fnd_type, fnd_len; + char fnd_value[1024]; + HKEY fnd_key; + + lr = RegOpenKeyExA(key, subkey, 0, KEY_READ, &fnd_key); + lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + fnd_len = sizeof(fnd_value); + lr = RegQueryValueExA(fnd_key, value_name, NULL, &fnd_type, + (BYTE*)fnd_value, &fnd_len); + RegCloseKey(fnd_key); + lok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + lok(fnd_type == REG_SZ, "Got wrong type: %d\n", fnd_type); + if(fnd_type != REG_SZ) + return; + lok(!strcmp(exp_value, fnd_value), + "Strings differ: expected %s, got %s\n", exp_value, fnd_value); +} + +#define verify_reg_wsz(k,s,n,e) r_verify_reg_wsz(__LINE__,k,s,n,e) +static void r_verify_reg_wsz(unsigned line, HKEY key, const char *subkey, + const char *value_name, const WCHAR *exp_value) +{ + LONG lr; + DWORD fnd_type, fnd_len; + WCHAR fnd_value[1024], value_nameW[1024]; + HKEY fnd_key; + + lr = RegOpenKeyExA(key, subkey, 0, KEY_READ, &fnd_key); + lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + MultiByteToWideChar(CP_ACP, 0, value_name, -1, value_nameW, + sizeof(value_nameW)/sizeof(value_nameW[0])); + + fnd_len = sizeof(fnd_value); + lr = RegQueryValueExW(fnd_key, value_nameW, NULL, &fnd_type, + (BYTE*)fnd_value, &fnd_len); + RegCloseKey(fnd_key); + lok(lr == ERROR_SUCCESS, "RegQueryValueExW failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + lok(fnd_type == REG_SZ, "Got wrong type: %d\n", fnd_type); + if(fnd_type != REG_SZ) + return; + lok(!lstrcmpW(exp_value, fnd_value), + "Strings differ: expected %s, got %s\n", + wine_dbgstr_w(exp_value), wine_dbgstr_w(fnd_value)); +} + +#define verify_reg_dword(k,s,n,e) r_verify_reg_dword(__LINE__,k,s,n,e) +static void r_verify_reg_dword(unsigned line, HKEY key, const char *subkey, + const char *value_name, DWORD exp_value) +{ + LONG lr; + DWORD fnd_type, fnd_len, fnd_value; + HKEY fnd_key; + + lr = RegOpenKeyExA(key, subkey, 0, KEY_READ, &fnd_key); + lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + fnd_len = sizeof(fnd_value); + lr = RegQueryValueExA(fnd_key, value_name, NULL, &fnd_type, + (BYTE *)&fnd_value, &fnd_len); + RegCloseKey(fnd_key); + lok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + lok(fnd_type == REG_DWORD, "Got wrong type: %d\n", fnd_type); + if(fnd_type != REG_DWORD) + return; + lok(fnd_value == exp_value, "Values differ: expected: 0x%x, got: 0x%x\n", + exp_value, fnd_value); +} + +#define verify_reg_binary(k,s,n,e,z) r_verify_reg_binary(__LINE__,k,s,n,e,z) +static void r_verify_reg_binary(unsigned line, HKEY key, const char *subkey, + const char *value_name, const char *exp_value, int exp_len) +{ + LONG lr; + DWORD fnd_type, fnd_len; + char fnd_value[1024]; + HKEY fnd_key; + + lr = RegOpenKeyExA(key, subkey, 0, KEY_READ, &fnd_key); + lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + fnd_len = sizeof(fnd_value); + lr = RegQueryValueExA(fnd_key, value_name, NULL, &fnd_type, + (BYTE*)fnd_value, &fnd_len); + RegCloseKey(fnd_key); + lok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + lok(fnd_type == REG_BINARY, "Got wrong type: %d\n", fnd_type); + if(fnd_type != REG_BINARY) + return; + lok(fnd_len == exp_len, + "Lengths differ: expected %d, got %d\n", exp_len, fnd_len); + lok(!memcmp(exp_value, fnd_value, exp_len), + "Data differs\n"); +} + +#define verify_reg_nonexist(k,s,n) r_verify_reg_nonexist(__LINE__,k,s,n) +static void r_verify_reg_nonexist(unsigned line, HKEY key, const char *subkey, + const char *value_name) +{ + LONG lr; + DWORD fnd_type, fnd_len; + char fnd_value[32]; + HKEY fnd_key; + + lr = RegOpenKeyExA(key, subkey, 0, KEY_READ, &fnd_key); + lok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr); + if(lr != ERROR_SUCCESS) + return; + + fnd_len = sizeof(fnd_value); + lr = RegQueryValueExA(fnd_key, value_name, NULL, &fnd_type, + (BYTE*)fnd_value, &fnd_len); + RegCloseKey(fnd_key); + lok(lr == ERROR_FILE_NOT_FOUND, "Reg value shouldn't exist: %s\n", + value_name); +} + +static void test_basic_import(void) +{ + char exp_binary[] = {0xAA,0xBB,0xCC,0x11}; + WCHAR wide_test[] = {0xFEFF,'W','i','n','d','o','w','s',' ','R','e','g', + 'i','s','t','r','y',' ','E','d','i','t','o','r',' ','V','e','r','s', + 'i','o','n',' ','5','.','0','0','\n','\n', + '[','H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E', + 'R','\\','S','o','f','t','w','a','r','e','\\','W','i','n','e','\\', + 'r','e','g','e','d','i','t','_','t','e','s','t',']','\n', + '"','T','e','s','t','V','a','l','u','e','3','"','=','"',0x3041,'V','a', + 'l','u','e','"','\n',0}; + WCHAR wide_test_r[] = {0xFEFF,'W','i','n','d','o','w','s',' ','R','e','g', + 'i','s','t','r','y',' ','E','d','i','t','o','r',' ','V','e','r','s', + 'i','o','n',' ','5','.','0','0','\r','\r', + '[','H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E', + 'R','\\','S','o','f','t','w','a','r','e','\\','W','i','n','e','\\', + 'r','e','g','e','d','i','t','_','t','e','s','t',']','\r', + '"','T','e','s','t','V','a','l','u','e','5','"','=','"',0x3041,'V','a', + 'l','u','e','"','\r',0}; + WCHAR wide_exp[] = {0x3041,'V','a','l','u','e',0}; + LONG lr; + + lr = RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test"); + ok(lr == ERROR_SUCCESS || lr == ERROR_FILE_NOT_FOUND, + "RegDeleteKeyA failed: %d\n", lr); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"TestValue\"=\"AValue\"\n"); + verify_reg_sz(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestValue", "AValue"); + + exec_import_str("REGEDIT4\r\n\r\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\r\n" + "\"TestValue2\"=\"BValue\"\r\n"); + verify_reg_sz(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestValue2", "BValue"); + + if(supports_wchar){ + exec_import_wstr(wide_test); + verify_reg_wsz(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestValue3", wide_exp); + + exec_import_wstr(wide_test_r); + verify_reg_wsz(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestValue5", wide_exp); + }else + win_skip("Some WCHAR tests skipped\n"); + + exec_import_str("REGEDIT4\r\r" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\r" + "\"TestValue4\"=\"DValue\"\r"); + verify_reg_sz(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestValue4", "DValue"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"TestDword\"=dword:00000017\n"); + verify_reg_dword(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestDword", 0x17); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"TestBinary\"=hex:aa,bb,cc,11\n"); + verify_reg_binary(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestBinary", exp_binary, sizeof(exp_binary)); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"With=Equals\"=\"asdf\"\n"); + verify_reg_sz(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "With=Equals", "asdf"); + + lr = RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test"); + ok(lr == ERROR_SUCCESS, "RegDeleteKeyA failed: %d\n", lr); +} + +static void test_invalid_import(void) +{ + LONG lr; + + lr = RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test"); + ok(lr == ERROR_SUCCESS || lr == ERROR_FILE_NOT_FOUND, + "RegDeleteKeyA failed: %d\n", lr); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"TestNoEndQuote\"=\"Asdffdsa\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestNoEndQuote"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"TestNoBeginQuote\"=Asdffdsa\"\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestNoBeginQuote"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"TestNoQuotes\"=Asdffdsa\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "TestNoQuotes"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"NameNoEndQuote=\"Asdffdsa\"\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "NameNoEndQuote"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "NameNoBeginQuote\"=\"Asdffdsa\"\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "NameNoBeginQuote"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "NameNoQuotes=\"Asdffdsa\"\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "NameNoQuotes"); + + exec_import_str("REGEDIT4\n\n" + "[HKEY_CURRENT_USER\\Software\\Wine\\regedit_test]\n" + "\"MixedQuotes=Asdffdsa\"\n"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "MixedQuotes"); + verify_reg_nonexist(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test", + "MixedQuotes=Asdffdsa"); + + lr = RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\regedit_test"); + ok(lr == ERROR_SUCCESS, "RegDeleteKeyA failed: %d\n", lr); +} + +START_TEST(regedit) +{ + WCHAR wchar_test[] = {0xFEFF,'W','i','n','d','o','w','s',' ','R','e','g', + 'i','s','t','r','y',' ','E','d','i','t','o','r',' ','V','e','r','s', + 'i','o','n',' ','5','.','0','0','\n','\n',0}; + + if(!exec_import_str("REGEDIT4\r\n\r\n")){ + win_skip("regedit not available, skipping regedit tests\n"); + return; + } + + supports_wchar = exec_import_wstr(wchar_test); + + test_basic_import(); + test_invalid_import(); +} Propchange: trunk/rostests/winetests/regedit/regedit.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/winetests/regedit/testlist.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/regedit/testlis…
============================================================================== --- trunk/rostests/winetests/regedit/testlist.c (added) +++ trunk/rostests/winetests/regedit/testlist.c [iso-8859-1] Sun Dec 9 13:02:24 2012 @@ -1,0 +1,15 @@ +/* Automatically generated file; DO NOT EDIT!! */ + +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#define STANDALONE +#include "wine/test.h" + +extern void func_regedit(void); + +const struct test winetest_testlist[] = +{ + { "regedit", func_regedit }, + { 0, 0 } +}; Propchange: trunk/rostests/winetests/regedit/testlist.c ------------------------------------------------------------------------------ svn:eol-style = native
12 years
1
0
0
0
[jgardou] 57838: [CRT] - make some functions locale aware - add implementation of ___mb_cur_max_func and _isctype_l [MSVCRT20] - keep up with msvcrt [MSVCRT40] - ditto
by jgardou@svn.reactos.org
Author: jgardou Date: Sun Dec 9 11:42:02 2012 New Revision: 57838 URL:
http://svn.reactos.org/svn/reactos?rev=57838&view=rev
Log: [CRT] - make some functions locale aware - add implementation of ___mb_cur_max_func and _isctype_l [MSVCRT20] - keep up with msvcrt [MSVCRT40] - ditto Modified: trunk/reactos/dll/win32/msvcrt/msvcrt.spec trunk/reactos/dll/win32/msvcrt20/msvcrt20.c trunk/reactos/dll/win32/msvcrt40/msvcrt40.c trunk/reactos/lib/sdk/crt/include/internal/locale.h trunk/reactos/lib/sdk/crt/mbstring/iskana.c trunk/reactos/lib/sdk/crt/mbstring/ismbkaln.c trunk/reactos/lib/sdk/crt/mbstring/ismblead.c trunk/reactos/lib/sdk/crt/mbstring/ismbpun.c trunk/reactos/lib/sdk/crt/mbstring/ismbtrl.c trunk/reactos/lib/sdk/crt/misc/environ.c trunk/reactos/lib/sdk/crt/string/ctype.c Modified: trunk/reactos/dll/win32/msvcrt/msvcrt.spec URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt/msvcrt.sp…
============================================================================== --- trunk/reactos/dll/win32/msvcrt/msvcrt.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvcrt/msvcrt.spec [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -133,7 +133,7 @@ @ cdecl ___lc_codepage_func() # @ cdecl ___lc_collate_cp_func() @ cdecl ___lc_handle_func() -# @ cdecl ___mb_cur_max_func() MSVCRT___mb_cur_max_func +@ cdecl ___mb_cur_max_func() @ cdecl ___setlc_active_func() @ cdecl ___unguarded_readlc_active_add_func() @ extern __argc @@ -492,7 +492,7 @@ @ cdecl _isatty(long) # stub _iscntrl_l @ cdecl _isctype(long long) -# stub _isctype_l +@ cdecl _isctype_l(long long ptr) # stub _isdigit_l # stub _isgraph_l # stub _isleadbyte_l Modified: trunk/reactos/dll/win32/msvcrt20/msvcrt20.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt20/msvcrt2…
============================================================================== --- trunk/reactos/dll/win32/msvcrt20/msvcrt20.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvcrt20/msvcrt20.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -24,6 +24,7 @@ #include <stdlib.h> #include <windows.h> #include <internal/wine/msvcrt.h> +#include <internal/locale.h> #include <locale.h> #include <mbctype.h> @@ -93,17 +94,11 @@ /* Initialization of the WINE code */ msvcrt_init_mt_locks(); - //if(!msvcrt_init_locale()) { - // msvcrt_free_mt_locks(); - // msvcrt_free_tls_mem(); - // return FALSE; - //} //msvcrt_init_math(); msvcrt_init_io(); //msvcrt_init_console(); //msvcrt_init_args(); //msvcrt_init_signals(); - _setmbcp(_MB_CP_LOCALE); TRACE("Attach done\n"); break; @@ -126,7 +121,8 @@ msvcrt_free_tls_mem(); if (!msvcrt_free_tls()) return FALSE; - //MSVCRT__free_locale(MSVCRT_locale); + if(global_locale) + MSVCRT__free_locale(global_locale); if (__winitenv && __winitenv != _wenviron) FreeEnvironment((char**)__winitenv); @@ -169,4 +165,4 @@ __wgetmainargs( argc, wargv, wenvp, expand_wildcards, &new_mode ); } -/* EOF */ +/* EOF */ Modified: trunk/reactos/dll/win32/msvcrt40/msvcrt40.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt40/msvcrt4…
============================================================================== --- trunk/reactos/dll/win32/msvcrt40/msvcrt40.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvcrt40/msvcrt40.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -24,6 +24,7 @@ #include <stdlib.h> #include <windows.h> #include <internal/wine/msvcrt.h> +#include <internal/locale.h> #include <locale.h> #include <mbctype.h> @@ -88,17 +89,11 @@ /* Initialization of the WINE code */ msvcrt_init_mt_locks(); - //if(!msvcrt_init_locale()) { - // msvcrt_free_mt_locks(); - // msvcrt_free_tls_mem(); - // return FALSE; - //} //msvcrt_init_math(); msvcrt_init_io(); //msvcrt_init_console(); //msvcrt_init_args(); //msvcrt_init_signals(); - _setmbcp(_MB_CP_LOCALE); TRACE("Attach done\n"); break; @@ -121,7 +116,8 @@ msvcrt_free_tls_mem(); if (!msvcrt_free_tls()) return FALSE; - //MSVCRT__free_locale(MSVCRT_locale); + if(global_locale) + MSVCRT__free_locale(global_locale); if (__winitenv && __winitenv != _wenviron) FreeEnvironment((char**)__winitenv); @@ -140,4 +136,4 @@ return TRUE; } -/* EOF */ +/* EOF */ Modified: trunk/reactos/lib/sdk/crt/include/internal/locale.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
============================================================================== --- trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -33,7 +33,7 @@ int ismbcodepage; int mblcid; unsigned short mbulinfo[6]; - char mbctype[257]; + unsigned char mbctype[257]; char mbcasemap[256]; } MSVCRT_threadmbcinfo; Modified: trunk/reactos/lib/sdk/crt/mbstring/iskana.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/iskan…
============================================================================== --- trunk/reactos/lib/sdk/crt/mbstring/iskana.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/mbstring/iskana.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -17,5 +17,5 @@ */ int _ismbbkana(unsigned int c) { - return (_mbctype[c & 0xff] & _MBKANA); + return (get_mbcinfo()->mbctype[c & 0xff] & _MBKANA); } Modified: trunk/reactos/lib/sdk/crt/mbstring/ismbkaln.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/ismbk…
============================================================================== --- trunk/reactos/lib/sdk/crt/mbstring/ismbkaln.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/mbstring/ismbkaln.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -16,5 +16,5 @@ */ int _ismbbkalnum( unsigned int c ) { - return (_mbctype[c & 0xff] & _MKMOJI); + return (get_mbcinfo()->mbctype[c & 0xff] & _MKMOJI); } Modified: trunk/reactos/lib/sdk/crt/mbstring/ismblead.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/ismbl…
============================================================================== --- trunk/reactos/lib/sdk/crt/mbstring/ismblead.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/mbstring/ismblead.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -19,7 +19,7 @@ */ int _ismbblead(unsigned int c) { - return (_mbctype[(c&0xff) + 1] & _M1) != 0; + return (get_mbcinfo()->mbctype[(c&0xff) + 1] & _M1) != 0; } /* @@ -47,7 +47,7 @@ */ unsigned char *__p__mbctype(void) { - return _mbctype; + return get_mbcinfo()->mbctype; } Modified: trunk/reactos/lib/sdk/crt/mbstring/ismbpun.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/ismbp…
============================================================================== --- trunk/reactos/lib/sdk/crt/mbstring/ismbpun.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/mbstring/ismbpun.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -18,7 +18,7 @@ int _ismbbpunct(unsigned int c) { // (0xA1 <= c <= 0xA6) - return (_mbctype[c & 0xff] & _MBPUNCT); + return (get_mbcinfo()->mbctype[c & 0xff] & _MBPUNCT); } //iskana() :(0xA1 <= c <= 0xDF) Modified: trunk/reactos/lib/sdk/crt/mbstring/ismbtrl.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/ismbt…
============================================================================== --- trunk/reactos/lib/sdk/crt/mbstring/ismbtrl.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/mbstring/ismbtrl.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -22,7 +22,7 @@ */ int _ismbbtrail(unsigned int c) { - return (_mbctype[(c&0xff) + 1] & _M2) != 0; + return (get_mbcinfo()->mbctype[(c&0xff) + 1] & _M2) != 0; } Modified: trunk/reactos/lib/sdk/crt/misc/environ.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/misc/environ.c…
============================================================================== --- trunk/reactos/lib/sdk/crt/misc/environ.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/misc/environ.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -426,7 +426,15 @@ */ int *__p___mb_cur_max(void) { - return &__mb_cur_max; + return &get_locinfo()->mb_cur_max; +} + +/********************************************************************* + * ___mb_cur_max_func(MSVCRT.@) + */ +int CDECL ___mb_cur_max_func(void) +{ + return get_locinfo()->mb_cur_max; } /* Modified: trunk/reactos/lib/sdk/crt/string/ctype.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/ctype.c…
============================================================================== --- trunk/reactos/lib/sdk/crt/string/ctype.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/string/ctype.c [iso-8859-1] Sun Dec 9 11:42:02 2012 @@ -2,6 +2,10 @@ #undef __MINGW_IMPORT #define __MINGW_IMPORT #include <ctype.h> + +#ifndef _LIBCNT_ +#include <precomp.h> +#endif #undef _pctype #undef _pwctype @@ -567,10 +571,50 @@ return _pwctype; } -int _isctype (int c, int ctypeFlags) +#ifdef _LIBCNT_ +int __cdecl _isctype (int c, int ctypeFlags) { return (_pctype[(unsigned char)(c & 0xFF)] & ctypeFlags); } +#else +/********************************************************************* + * _isctype_l (MSVCRT.@) + */ +int __cdecl _isctype_l(int c, int type, _locale_t locale) +{ + MSVCRT_pthreadlocinfo locinfo; + + if(!locale) + locinfo = get_locinfo(); + else + locinfo = ((MSVCRT__locale_t)locale)->locinfo; + + if (c >= -1 && c <= 255) + return locinfo->pctype[c] & type; + + if (locinfo->mb_cur_max != 1 && c > 0) + { + /* FIXME: Is there a faster way to do this? */ + WORD typeInfo; + char convert[3], *pconv = convert; + + if (locinfo->pctype[(UINT)c >> 8] & _LEADBYTE) + *pconv++ = (UINT)c >> 8; + *pconv++ = c & 0xff; + *pconv = 0; + + if (GetStringTypeExA(locinfo->lc_handle[LC_CTYPE], + CT_CTYPE1, convert, convert[1] ? 2 : 1, &typeInfo)) + return typeInfo & type; + } + return 0; +} + +int __cdecl _isctype (int c, int ctypeFlags) +{ + return _isctype_l(c, ctypeFlags, NULL); +} +#endif /* _LIBCNT_ */ /* * @implemented
12 years
1
0
0
0
[ekohl] 57837: [LSASRV] - LsarQueryAuditEvents: Do not fail if the PolAdtEv attribute does not exist and return proper inormation to the caller. - Implement LsarSetAuditEvents.
by ekohl@svn.reactos.org
Author: ekohl Date: Sun Dec 9 11:34:09 2012 New Revision: 57837 URL:
http://svn.reactos.org/svn/reactos?rev=57837&view=rev
Log: [LSASRV] - LsarQueryAuditEvents: Do not fail if the PolAdtEv attribute does not exist and return proper inormation to the caller. - Implement LsarSetAuditEvents. Modified: trunk/reactos/dll/win32/lsasrv/policy.c Modified: trunk/reactos/dll/win32/lsasrv/policy.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/policy.c?…
============================================================================== --- trunk/reactos/dll/win32/lsasrv/policy.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/lsasrv/policy.c [iso-8859-1] Sun Dec 9 11:34:09 2012 @@ -90,6 +90,7 @@ if (!NT_SUCCESS(Status)) return Status; + TRACE("Attribute size: %lu\n", AttributeSize); if (AttributeSize > 0) { AuditData = MIDL_user_allocate(AttributeSize); @@ -102,14 +103,23 @@ &AttributeSize); if (!NT_SUCCESS(Status)) goto done; - - p = MIDL_user_allocate(sizeof(LSAPR_POLICY_AUDIT_EVENTS_INFO)); - if (p == NULL) - { - Status = STATUS_INSUFFICIENT_RESOURCES; - goto done; - } - + } + + p = MIDL_user_allocate(sizeof(LSAPR_POLICY_AUDIT_EVENTS_INFO)); + if (p == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto done; + } + + if (AuditData == NULL) + { + p->AuditingMode = FALSE; + p->MaximumAuditEventCount = 0; + p->EventAuditingOptions = NULL; + } + else + { p->AuditingMode = AuditData->AuditingMode; p->MaximumAuditEventCount = AuditData->MaximumAuditEventCount; @@ -128,19 +138,23 @@ *PolicyInformation = (PLSAPR_POLICY_INFORMATION)p; done: - if (!NT_SUCCESS(Status)) - { - if (p->EventAuditingOptions != NULL) - MIDL_user_free(p->EventAuditingOptions); - + TRACE("Status: 0x%lx\n", Status); + + if (!NT_SUCCESS(Status)) + { if (p != NULL) + { + if (p->EventAuditingOptions != NULL) + MIDL_user_free(p->EventAuditingOptions); + MIDL_user_free(p); + } } if (AuditData != NULL) MIDL_user_free(AuditData); - return STATUS_SUCCESS; + return Status; } @@ -783,8 +797,37 @@ LsarSetAuditEvents(PLSA_DB_OBJECT PolicyObject, PLSAPR_POLICY_AUDIT_EVENTS_INFO Info) { - FIXME("\n"); - return STATUS_NOT_IMPLEMENTED; + PLSAP_POLICY_AUDIT_EVENTS_DATA AuditData = NULL; + ULONG AttributeSize; + NTSTATUS Status = STATUS_SUCCESS; + + TRACE("(%p %p)\n", PolicyObject, Info); + + AttributeSize = sizeof(LSAP_POLICY_AUDIT_EVENTS_DATA) + + Info->MaximumAuditEventCount * sizeof(DWORD); + + AuditData = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + AttributeSize); + if (AuditData == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + AuditData->AuditingMode = Info->AuditingMode; + AuditData->MaximumAuditEventCount = Info->MaximumAuditEventCount; + + memcpy(&(AuditData->AuditEvents[0]), + Info->EventAuditingOptions, + Info->MaximumAuditEventCount * sizeof(DWORD)); + + Status = LsapSetObjectAttribute(PolicyObject, + L"PolAdtEv", + AuditData, + AttributeSize); + + if (AuditData != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, AuditData); + + return Status; }
12 years
1
0
0
0
[jgardou] 57836: [CRT] - attempt to fix MSVC build
by jgardou@svn.reactos.org
Author: jgardou Date: Sun Dec 9 04:06:25 2012 New Revision: 57836 URL:
http://svn.reactos.org/svn/reactos?rev=57836&view=rev
Log: [CRT] - attempt to fix MSVC build Modified: trunk/reactos/lib/sdk/crt/include/internal/locale.h Modified: trunk/reactos/lib/sdk/crt/include/internal/locale.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
============================================================================== --- trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] Sun Dec 9 04:06:25 2012 @@ -95,7 +95,7 @@ void __init_global_locale(); extern MSVCRT__locale_t global_locale; #define MSVCRT_locale __get_MSVCRT_locale() -extern inline MSVCRT__locale_t __get_MSVCRT_locale() +FORCEINLINE MSVCRT__locale_t __get_MSVCRT_locale() { if(!global_locale) __init_global_locale();
12 years
1
0
0
0
[jgardou] 57835: [MSVCRT_WINETEST] - ROSTESTS-91 #comment Fixed with r57833 and r57834 #resolve
by jgardou@svn.reactos.org
Author: jgardou Date: Sun Dec 9 03:39:12 2012 New Revision: 57835 URL:
http://svn.reactos.org/svn/reactos?rev=57835&view=rev
Log: [MSVCRT_WINETEST] - ROSTESTS-91 #comment Fixed with r57833 and r57834 #resolve Modified: trunk/rostests/winetests/msvcrt/locale.c Modified: trunk/rostests/winetests/msvcrt/locale.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msvcrt/locale.c…
============================================================================== --- trunk/rostests/winetests/msvcrt/locale.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msvcrt/locale.c [iso-8859-1] Sun Dec 9 03:39:12 2012 @@ -622,7 +622,6 @@ ok(!ret, "ret == TRUE\n"); } -#if ROSTESTS_91_IS_FIXED static void test__Gettnames(void) { struct { @@ -742,7 +741,6 @@ setlocale(LC_ALL, "C"); } -#endif static void test___mb_cur_max_func(void) { @@ -799,8 +797,6 @@ test_crtGetStringTypeW(); test_setlocale(); -#if ROSTESTS_91_IS_FIXED test__Gettnames(); -#endif test___mb_cur_max_func(); }
12 years
1
0
0
0
[jgardou] 57834: [CRT] - attempt to fix build
by jgardou@svn.reactos.org
Author: jgardou Date: Sun Dec 9 03:36:14 2012 New Revision: 57834 URL:
http://svn.reactos.org/svn/reactos?rev=57834&view=rev
Log: [CRT] - attempt to fix build Modified: trunk/reactos/dll/win32/msvcrt/precomp.h trunk/reactos/lib/sdk/crt/include/internal/locale.h trunk/reactos/lib/sdk/crt/include/internal/tls.h Modified: trunk/reactos/dll/win32/msvcrt/precomp.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt/precomp.h…
============================================================================== --- trunk/reactos/dll/win32/msvcrt/precomp.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msvcrt/precomp.h [iso-8859-1] Sun Dec 9 03:36:14 2012 @@ -7,6 +7,7 @@ #include <mbctype.h> #include <internal/wine/msvcrt.h> #include <internal/tls.h> +#include <internal/locale.h> #include <windows.h> #include <internal/wine/msvcrt.h> Modified: trunk/reactos/lib/sdk/crt/include/internal/locale.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
============================================================================== --- trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/include/internal/locale.h [iso-8859-1] Sun Dec 9 03:36:14 2012 @@ -1,7 +1,71 @@ #ifndef __CRT_INTERNAL_LOCALE_H #define __CRT_INTERNAL_LOCALE_H +typedef struct MSVCRT_threadlocaleinfostruct { + LONG refcount; + unsigned int lc_codepage; + unsigned int lc_collate_cp; + unsigned long lc_handle[6]; + LC_ID lc_id[6]; + struct { + char *locale; + wchar_t *wlocale; + int *refcount; + int *wrefcount; + } lc_category[6]; + int lc_clike; + int mb_cur_max; + int *lconv_intl_refcount; + int *lconv_num_refcount; + int *lconv_mon_refcount; + struct MSVCRT_lconv *lconv; + int *ctype1_refcount; + unsigned short *ctype1; + const unsigned short *pctype; + unsigned char *pclmap; + unsigned char *pcumap; + struct __lc_time_data *lc_time_curr; +} MSVCRT_threadlocinfo; + +typedef struct MSVCRT_threadmbcinfostruct { + LONG refcount; + int mbcodepage; + int ismbcodepage; + int mblcid; + unsigned short mbulinfo[6]; + char mbctype[257]; + char mbcasemap[256]; +} MSVCRT_threadmbcinfo; + +struct MSVCRT_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; +}; + +typedef struct MSVCRT_threadlocaleinfostruct *MSVCRT_pthreadlocinfo; typedef struct MSVCRT_threadmbcinfostruct *MSVCRT_pthreadmbcinfo; + +typedef struct MSVCRT_localeinfo_struct +{ + MSVCRT_pthreadlocinfo locinfo; + MSVCRT_pthreadmbcinfo mbcinfo; +} MSVCRT__locale_tstruct, *MSVCRT__locale_t; typedef struct __lc_time_data { union { @@ -28,5 +92,20 @@ MSVCRT_pthreadmbcinfo get_mbcinfo(void) DECLSPEC_HIDDEN; LCID MSVCRT_locale_to_LCID(const char *locale) DECLSPEC_HIDDEN; +void __init_global_locale(); +extern MSVCRT__locale_t global_locale; +#define MSVCRT_locale __get_MSVCRT_locale() +extern inline MSVCRT__locale_t __get_MSVCRT_locale() +{ + if(!global_locale) + __init_global_locale(); + return global_locale; +} + +MSVCRT_pthreadlocinfo get_locinfo(void); +void __cdecl MSVCRT__free_locale(MSVCRT__locale_t); +void free_locinfo(MSVCRT_pthreadlocinfo); +void free_mbcinfo(MSVCRT_pthreadmbcinfo); + #endif //__CRT_INTERNAL_LOCALE_H Modified: trunk/reactos/lib/sdk/crt/include/internal/tls.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
============================================================================== --- trunk/reactos/lib/sdk/crt/include/internal/tls.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/include/internal/tls.h [iso-8859-1] Sun Dec 9 03:36:14 2012 @@ -16,108 +16,42 @@ #include <internal/wine/eh.h> -typedef struct MSVCRT_threadlocaleinfostruct { - LONG refcount; - unsigned int lc_codepage; - unsigned int lc_collate_cp; - unsigned long lc_handle[6]; - LC_ID lc_id[6]; - struct { - char *locale; - wchar_t *wlocale; - int *refcount; - int *wrefcount; - } lc_category[6]; - int lc_clike; - int mb_cur_max; - int *lconv_intl_refcount; - int *lconv_num_refcount; - int *lconv_mon_refcount; - struct MSVCRT_lconv *lconv; - int *ctype1_refcount; - unsigned short *ctype1; - const unsigned short *pctype; - unsigned char *pclmap; - unsigned char *pcumap; - struct __lc_time_data *lc_time_curr; -} MSVCRT_threadlocinfo; - -typedef struct MSVCRT_threadmbcinfostruct { - LONG refcount; - int mbcodepage; - int ismbcodepage; - int mblcid; - unsigned short mbulinfo[6]; - char mbctype[257]; - char mbcasemap[256]; -} MSVCRT_threadmbcinfo; - -struct MSVCRT_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; -}; - -typedef struct MSVCRT_threadlocaleinfostruct *MSVCRT_pthreadlocinfo; -typedef struct MSVCRT_threadmbcinfostruct *MSVCRT_pthreadmbcinfo; - -typedef struct MSVCRT_localeinfo_struct -{ - MSVCRT_pthreadlocinfo locinfo; - MSVCRT_pthreadmbcinfo mbcinfo; -} MSVCRT__locale_tstruct, *MSVCRT__locale_t; - /* TLS data */ extern DWORD tls_index; struct __thread_data { - DWORD tid; - HANDLE handle; - int thread_errno; - unsigned long thread_doserrno; - int unk1; - unsigned int random_seed; /* seed for rand() */ - char *strtok_next; /* next ptr for strtok() */ - wchar_t *wcstok_next; /* next ptr for wcstok() */ - unsigned char *mbstok_next; /* next ptr for mbstok() */ - char *strerror_buffer; /* buffer for strerror */ - wchar_t *wcserror_buffer; /* buffer for wcserror */ - char *tmpnam_buffer; /* buffer for tmpname() */ - wchar_t *wtmpnam_buffer; /* buffer for wtmpname() */ - void *unk2[2]; - char *asctime_buffer; /* buffer for asctime */ - wchar_t *wasctime_buffer; /* buffer for wasctime */ - struct tm *time_buffer; /* buffer for localtime/gmtime */ - char *efcvt_buffer; /* buffer for ecvt/fcvt */ - int unk3[2]; - void *unk4[4]; - int fpecode; - MSVCRT_pthreadmbcinfo mbcinfo; - MSVCRT_pthreadlocinfo locinfo; - BOOL have_locale; - int unk5[1]; - terminate_function terminate_handler; - unexpected_function unexpected_handler; - _se_translator_function se_translator; - void *unk6[3]; - int unk7; - EXCEPTION_RECORD *exc_record; - void *unk8[100]; + DWORD tid; + HANDLE handle; + int thread_errno; + unsigned long thread_doserrno; + int unk1; + unsigned int random_seed; /* seed for rand() */ + char *strtok_next; /* next ptr for strtok() */ + wchar_t *wcstok_next; /* next ptr for wcstok() */ + unsigned char *mbstok_next; /* next ptr for mbstok() */ + char *strerror_buffer; /* buffer for strerror */ + wchar_t *wcserror_buffer; /* buffer for wcserror */ + char *tmpnam_buffer; /* buffer for tmpname() */ + wchar_t *wtmpnam_buffer; /* buffer for wtmpname() */ + void *unk2[2]; + char *asctime_buffer; /* buffer for asctime */ + wchar_t *wasctime_buffer; /* buffer for wasctime */ + struct tm *time_buffer; /* buffer for localtime/gmtime */ + char *efcvt_buffer; /* buffer for ecvt/fcvt */ + int unk3[2]; + void *unk4[4]; + int fpecode; + struct MSVCRT_threadmbcinfostruct *mbcinfo; + struct MSVCRT_threadlocaleinfostruct *locinfo; + BOOL have_locale; + int unk5[1]; + terminate_function terminate_handler; + unexpected_function unexpected_handler; + _se_translator_function se_translator; + void *unk6[3]; + int unk7; + EXCEPTION_RECORD *exc_record; + void *unk8[100]; }; typedef struct __thread_data thread_data_t; @@ -130,21 +64,6 @@ #define MSVCRT_ENABLE_PER_THREAD_LOCALE 1 #define MSVCRT_DISABLE_PER_THREAD_LOCALE 2 -void __init_global_locale(); -extern MSVCRT__locale_t global_locale; -#define MSVCRT_locale __get_MSVCRT_locale() -extern inline MSVCRT__locale_t __get_MSVCRT_locale() -{ - if(!global_locale) - __init_global_locale(); - return global_locale; -} - -MSVCRT_pthreadlocinfo get_locinfo(void); -void __cdecl MSVCRT__free_locale(MSVCRT__locale_t); -void free_locinfo(MSVCRT_pthreadlocinfo); -void free_mbcinfo(MSVCRT_pthreadmbcinfo); - #endif /* __MSVCRT_INTERNAL_TLS_H */ /* EOF */
12 years
1
0
0
0
[jgardou] 57833: [MSVCRT] - Massive update to go towards a proper localization implementation Based on wine code
by jgardou@svn.reactos.org
Author: jgardou Date: Sun Dec 9 03:17:14 2012 New Revision: 57833 URL:
http://svn.reactos.org/svn/reactos?rev=57833&view=rev
Log: [MSVCRT] - Massive update to go towards a proper localization implementation Based on wine code Added: trunk/reactos/lib/sdk/crt/include/internal/locale.h (with props) trunk/reactos/lib/sdk/crt/mbstring/_setmbcp.c (with props) Modified: trunk/reactos/dll/win32/msvcrt/dllmain.c trunk/reactos/dll/win32/msvcrt/msvcrt.spec trunk/reactos/lib/sdk/crt/crt.cmake trunk/reactos/lib/sdk/crt/include/internal/mbstring.h trunk/reactos/lib/sdk/crt/include/internal/tls.h trunk/reactos/lib/sdk/crt/locale/locale.c trunk/reactos/lib/sdk/crt/mbstring/mbsncpy.c trunk/reactos/lib/sdk/crt/misc/tls.c trunk/reactos/lib/sdk/crt/precomp.h trunk/reactos/lib/sdk/crt/string/ctype.c trunk/reactos/lib/sdk/crt/string/wcs.c trunk/reactos/lib/sdk/crt/time/strftime.c [This mail would be too long, it was shortened to contain the URLs only.] Modified: trunk/reactos/dll/win32/msvcrt/dllmain.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt/dllmain.c…
Modified: trunk/reactos/dll/win32/msvcrt/msvcrt.spec URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt/msvcrt.sp…
Modified: trunk/reactos/lib/sdk/crt/crt.cmake URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/crt.cmake?rev=…
Added: trunk/reactos/lib/sdk/crt/include/internal/locale.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
Modified: trunk/reactos/lib/sdk/crt/include/internal/mbstring.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
Modified: trunk/reactos/lib/sdk/crt/include/internal/tls.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/include/intern…
Modified: trunk/reactos/lib/sdk/crt/locale/locale.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/locale/locale.…
Added: trunk/reactos/lib/sdk/crt/mbstring/_setmbcp.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/_setm…
Modified: trunk/reactos/lib/sdk/crt/mbstring/mbsncpy.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/mbstring/mbsnc…
Modified: trunk/reactos/lib/sdk/crt/misc/tls.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/misc/tls.c?rev…
Modified: trunk/reactos/lib/sdk/crt/precomp.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/precomp.h?rev=…
Modified: trunk/reactos/lib/sdk/crt/string/ctype.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/ctype.c…
Modified: trunk/reactos/lib/sdk/crt/string/wcs.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/wcs.c?r…
Modified: trunk/reactos/lib/sdk/crt/time/strftime.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/time/strftime.…
12 years
1
0
0
0
← Newer
1
...
21
22
23
24
25
26
27
28
29
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Results per page:
10
25
50
100
200