Author: jgardou
Date: Thu Aug 5 21:03:35 2010
New Revision: 48464
URL:
http://svn.reactos.org/svn/reactos?rev=48464&view=rev
Log:
Sync with trunk (48463)
Modified:
branches/reactos-yarotows/ (props changed)
branches/reactos-yarotows/dll/win32/gdi32/objects/bitmap.c
branches/reactos-yarotows/dll/win32/gdi32/objects/text.c
branches/reactos-yarotows/dll/win32/jscript/jscript_Si.rc (props changed)
branches/reactos-yarotows/dll/win32/kernel32/file/dir.c
branches/reactos-yarotows/dll/win32/kernel32/misc/lang.c
branches/reactos-yarotows/dll/win32/kernel32/misc/lcformat.c
branches/reactos-yarotows/dll/win32/shell32/iconcache.c
branches/reactos-yarotows/dll/win32/ws2_32/misc/ns.c
branches/reactos-yarotows/drivers/filesystems/fastfat/create.c
branches/reactos-yarotows/lib/sdk/crt/misc/assert.c
branches/reactos-yarotows/media/doc/README.WINE
branches/reactos-yarotows/ntoskrnl/fsrtl/name.c
branches/reactos-yarotows/ntoskrnl/io/pnpmgr/plugplay.c
branches/reactos-yarotows/subsystems/win32/csrss/win32csr/ (props changed)
branches/reactos-yarotows/subsystems/win32/win32k/eng/xlate.c
branches/reactos-yarotows/subsystems/win32/win32k/include/text.h
branches/reactos-yarotows/subsystems/win32/win32k/misc/copy.c
branches/reactos-yarotows/subsystems/win32/win32k/ntuser/callback.c
branches/reactos-yarotows/subsystems/win32/win32k/objects/freetype.c
Propchange: branches/reactos-yarotows/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 5 21:03:35 2010
@@ -1,4 +1,4 @@
/branches/header-work:45691-47721
/branches/ros-amd64-bringup:36852
/branches/ros-amd64-bringup/reactos:34711-34712,34741,34743,34770,34780-34782,34803,34812,34839,34842,34864,34870,34874,34877,34908-34909,34917,34965,35323-35324,35347-35348,35361,35436,35509,35515,35588,35655,35683,35739,35746,35762,35771,35777,35781,35789,35805,35823,35827,35902,35904-35906,35942,35947-35949,35952-35953,35966,36011-36013,36172,36360,36380,36388-36389,36393,36397,36443,36445,36475,36502-36503,36505,36570,36614,36852,36898-36899,36930,36936,36949,36951,36958,36961,36964,36969,36972,36987-36988,36990,36992,37019,37322-37323,37333-37334,37434,37472,37475,37536,37820-37821,37868-37869,37873,37990-37991,38013-38014,38092,38100,38148-38151,38264-38265,38268,38355,39151,39333,39335,39345,39639,40120,40122-40123,40125,40127-40128,40155,40247,40324,40608,40753,40926-40928,40986-40987,40989,40991,40993,40995-40996,41000-41001,41027-41030,41044-41045,41047-41050,41052,41070,41082-41086,41097-41098,41101,41449,41479-41480,41483-41485,41499-41500,41502,41531,41536,41540,41546-41547,41549,43080,43426,43451,43454,43506,43566,43574,43598,43600-43602,43604-43605,43677,43682,43757,43775,43836,43838-43840,43852,43857-43858,43860,43905-43907,43952,43954,43965,43969,43979,43981,43992,44002,44036-44037,44039-44040,44044-44045,44053,44065,44095,44123,44143-44144,44205,44238,44257,44259,44294,44338-44339,44385,44389,44391,44426,44460,44467-44468,44470-44471,44499,44501,44503-44504,44506,44510-44512,44521,44523-44526,44530,44540,44601,44634,44639,44772,44818,45124,45126-45127,45430,46394,46404,46478,46511,46523-46524,46526,46534-46535,46537-46539,46589,46805,46868,47472,47846-47847,47878,47882
-/trunk/reactos:45219-48417
+/trunk/reactos:45219-48463
Modified: branches/reactos-yarotows/dll/win32/gdi32/objects/bitmap.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/gdi3…
==============================================================================
--- branches/reactos-yarotows/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -869,17 +869,12 @@
}
}
#endif
- if ( iUsage ) // Save time, we only look at non RGB.
- {
- pConvertedInfo = ConvertBitmapInfo(lpBitsInfo, iUsage,
- &ConvertedInfoSize, FALSE);
- if (!pConvertedInfo)
- {
+ pConvertedInfo = ConvertBitmapInfo(lpBitsInfo, iUsage,
+ &ConvertedInfoSize, FALSE);
+ if (!pConvertedInfo)
+ {
return 0;
- }
- }
- else
- pConvertedInfo = (PBITMAPINFO)lpBitsInfo;
+ }
cjBmpScanSize = DIB_BitmapBitsSize((LPBITMAPINFO)pConvertedInfo);
Modified: branches/reactos-yarotows/dll/win32/gdi32/objects/text.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/gdi3…
==============================================================================
--- branches/reactos-yarotows/dll/win32/gdi32/objects/text.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/gdi32/objects/text.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -192,6 +192,13 @@
LPSIZE lpSize
)
{
+
+ if(nMaxExtent < -1)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
return NtGdiGetTextExtentExW (
hdc, (LPWSTR)lpszStr, cchString, nMaxExtent, (PULONG)lpnFit, (PULONG)alpDx, lpSize, 0
);
}
@@ -215,6 +222,12 @@
NTSTATUS Status;
LPWSTR lpszStrW;
BOOL rc = 0;
+
+ if(nMaxExtent < -1)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
Status = HEAP_strdupA2W ( &lpszStrW, lpszStr );
if (!NT_SUCCESS (Status))
Propchange: branches/reactos-yarotows/dll/win32/jscript/jscript_Si.rc
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 5 21:03:35 2010
@@ -2,4 +2,4 @@
/branches/reactos-yarotows/dll/win32/jscript/jscript_Si.rc:46848,46966,47800
/branches/ros-amd64-bringup/dll/win32/jscript/jscript_Si.rc:36852
/branches/ros-amd64-bringup/reactos/dll/win32/jscript/jscript_Si.rc:34711-34712,34741,34743,34780-34782,34803,34812,34839,34842,34864,34870,34874,34877,34908-34909,34917,34965,35323-35324,35347-35348,35361,35436,35509,35515,35588,35655,35683,35739,35746,35762,35771,35777,35781,35789,35805,35823,35827,35902,35904-35906,35942,35947-35949,35952-35953,35966,36011-36013,36172,36360,36380,36388-36389,36397,36445,36502-36503,36505,36570,36614,36898-36899,36930,36936,36949,36951,36958,36961,36964,36969,36972,36992,37323,37434,37472,37475,37536,37820-37821,37868-37869,37873,37990-37991,38013-38014,38092,38100,38148-38151,38264-38265,38268,38355,39151,39333,39335,39345,39639,40122-40123,40125,40127-40128,40155,40247,40324,40608,40753,40927-40928,40986-40987,40989,40991,40993,40995-40996,41000-41001,41027-41030,41044-41045,41047-41050,41052,41070,41082-41086,41097-41098,41101,41449,41479,41484-41485,41499-41500,41502,41531,41536,41540,41546-41547,41549,43080,43426,43454,43506,43566,43574,43598,43600-43602,43604-43605,43677,43682,43757,43775,43836,43838-43840,43857-43858,43860,43905-43907,43969,44002,44036-44037,44039-44040,44044-44045,44065,44095,44123,44144,44205,44238,44294,44338-44339,44389,44391,44426,44460,44467-44468,44470-44471,44499,44501,44503-44504,44506,44510-44512,44521,44523-44526,44530,44540,44601,44772,45124,45126-45127,46394,46478,46511,46523-46524,46526,46534-46535,46537-46539,46589,46805
-/trunk/reactos/dll/win32/jscript/jscript_Si.rc:47414-48417
+/trunk/reactos/dll/win32/jscript/jscript_Si.rc:47414-48463
Modified: branches/reactos-yarotows/dll/win32/kernel32/file/dir.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/kern…
==============================================================================
--- branches/reactos-yarotows/dll/win32/kernel32/file/dir.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/kernel32/file/dir.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -972,7 +972,7 @@
{
if (RtlDetermineDosPathNameType_U(name) != RtlPathTypeRelative) return TRUE;
if (name[0] != '.') return FALSE;
- if (name[1] == '/' || name[1] == '\\') return TRUE;
+ if (name[1] == '/' || name[1] == '\\' || name[1] == '\0')
return TRUE;
return (name[1] == '.' && (name[2] == '/' || name[2] ==
'\\'));
}
Modified: branches/reactos-yarotows/dll/win32/kernel32/misc/lang.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/kern…
==============================================================================
--- branches/reactos-yarotows/dll/win32/kernel32/misc/lang.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/kernel32/misc/lang.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -155,142 +155,6 @@
}
return lcid;
-}
-
-
-/**************************************************************************
- * EnumDateFormatsExA (KERNEL32.@)
- *
- * FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
- * LOCALE_NOUSEROVERRIDE here as well?
- */
-BOOL
-WINAPI
-EnumDateFormatsExA(
- DATEFMT_ENUMPROCEXA lpDateFmtEnumProcEx,
- LCID Locale,
- DWORD dwFlags)
-{
- CALID cal_id;
- char szBuf[256];
-
- if (!lpDateFmtEnumProcEx)
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
-
- if (!GetLocaleInfoW(Locale,
- LOCALE_ICALENDARTYPE|LOCALE_RETURN_NUMBER,
- (LPWSTR)&cal_id,
- sizeof(cal_id)/sizeof(WCHAR)))
- {
- return FALSE;
- }
-
- switch (dwFlags & ~LOCALE_USE_CP_ACP)
- {
- case 0:
- case DATE_SHORTDATE:
- if (GetLocaleInfoA(Locale,
- LOCALE_SSHORTDATE | (dwFlags & LOCALE_USE_CP_ACP),
- szBuf, 256))
- {
- lpDateFmtEnumProcEx(szBuf, cal_id);
- }
- break;
-
- case DATE_LONGDATE:
- if (GetLocaleInfoA(Locale,
- LOCALE_SLONGDATE | (dwFlags & LOCALE_USE_CP_ACP),
- szBuf, 256))
- {
- lpDateFmtEnumProcEx(szBuf, cal_id);
- }
- break;
-
- case DATE_YEARMONTH:
- if (GetLocaleInfoA(Locale,
- LOCALE_SYEARMONTH | (dwFlags & LOCALE_USE_CP_ACP),
- szBuf, 256))
- {
- lpDateFmtEnumProcEx(szBuf, cal_id);
- }
- break;
-
- default:
- SetLastError(ERROR_INVALID_FLAGS);
- return FALSE;
- }
- return TRUE;
-}
-
-
-/**************************************************************************
- * EnumDateFormatsExW (KERNEL32.@)
- */
-BOOL
-WINAPI
-EnumDateFormatsExW(
- DATEFMT_ENUMPROCEXW lpDateFmtEnumProcEx,
- LCID Locale,
- DWORD dwFlags)
-{
- CALID cal_id;
- WCHAR wbuf[256]; // FIXME
-
- if (!lpDateFmtEnumProcEx)
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
-
- if (!GetLocaleInfoW(Locale,
- LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER,
- (LPWSTR)&cal_id,
- sizeof(cal_id)/sizeof(WCHAR)))
- {
- return FALSE;
- }
-
- switch (dwFlags & ~LOCALE_USE_CP_ACP)
- {
- case 0:
- case DATE_SHORTDATE:
- if (GetLocaleInfoW(Locale,
- LOCALE_SSHORTDATE | (dwFlags & LOCALE_USE_CP_ACP),
- wbuf,
- 256))
- {
- lpDateFmtEnumProcEx(wbuf, cal_id);
- }
- break;
-
- case DATE_LONGDATE:
- if (GetLocaleInfoW(Locale,
- LOCALE_SLONGDATE | (dwFlags & LOCALE_USE_CP_ACP),
- wbuf,
- 256))
- {
- lpDateFmtEnumProcEx(wbuf, cal_id);
- }
- break;
-
- case DATE_YEARMONTH:
- if (GetLocaleInfoW(Locale,
- LOCALE_SYEARMONTH | (dwFlags & LOCALE_USE_CP_ACP),
- wbuf,
- 256))
- {
- lpDateFmtEnumProcEx(wbuf, cal_id);
- }
- break;
-
- default:
- SetLastError(ERROR_INVALID_FLAGS);
- return FALSE;
- }
- return TRUE;
}
Modified: branches/reactos-yarotows/dll/win32/kernel32/misc/lcformat.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/kern…
==============================================================================
--- branches/reactos-yarotows/dll/win32/kernel32/misc/lcformat.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/kernel32/misc/lcformat.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -3,8 +3,9 @@
*
* Copyright 1995 Martin von Loewis
* Copyright 1998 David Lee Lambert
- * Copyright 2000 Julio César Gázquez
+ * Copyright 2000 Julio César Gázquez
* Copyright 2003 Jon Griffiths
+ * Copyright 2005 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,7 +19,7 @@
*
* 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 Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
/*
@@ -32,13 +33,9 @@
#include "wine/config.h"
#include "wine/unicode.h"
-#define NDEBUG
-#include <debug.h>
-
-#define TRACE DPRINT
-#define WARN DPRINT1
-#define ERR DPRINT1
-#define FIXME DPRINT1
+#include <wine/debug.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(nls);
#define DATE_DATEVARSONLY 0x0100 /* only date stuff: yMdg */
#define TIME_TIMEVARSONLY 0x0200 /* only time stuff: hHmst */
@@ -52,7 +49,7 @@
*
* Our cache takes the form of a singly linked list, whose node is below:
*/
-#define NLS_NUM_CACHED_STRINGS 45
+#define NLS_NUM_CACHED_STRINGS 57
typedef struct _NLS_FORMAT_NODE
{
@@ -72,14 +69,15 @@
#define GetLongDate(fmt) fmt->lppszStrings[1]
#define GetShortDate(fmt) fmt->lppszStrings[2]
#define GetTime(fmt) fmt->lppszStrings[3]
-#define GetAM(fmt) fmt->lppszStrings[42]
-#define GetPM(fmt) fmt->lppszStrings[43]
-#define GetYearMonth(fmt) fmt->lppszStrings[44]
-
-#define GetLongDay(fmt,day) fmt->lppszStrings[4 + day]
-#define GetShortDay(fmt,day) fmt->lppszStrings[11 + day]
-#define GetLongMonth(fmt,mth) fmt->lppszStrings[18 + mth]
-#define GetShortMonth(fmt,mth) fmt->lppszStrings[30 + mth]
+#define GetAM(fmt) fmt->lppszStrings[54]
+#define GetPM(fmt) fmt->lppszStrings[55]
+#define GetYearMonth(fmt) fmt->lppszStrings[56]
+
+#define GetLongDay(fmt,day) fmt->lppszStrings[4 + day]
+#define GetShortDay(fmt,day) fmt->lppszStrings[11 + day]
+#define GetLongMonth(fmt,mth) fmt->lppszStrings[18 + mth]
+#define GetGenitiveMonth(fmt,mth) fmt->lppszStrings[30 + mth]
+#define GetShortMonth(fmt,mth) fmt->lppszStrings[42 + mth]
/* Write access to the cache is protected by this critical section */
static RTL_CRITICAL_SECTION NLS_FormatsCS;
@@ -91,53 +89,6 @@
0, 0, 0, 0, 0
};
static RTL_CRITICAL_SECTION NLS_FormatsCS = { &NLS_FormatsCS_debug, -1, 0, 0, 0, 0
};
-
-/**************************************************************************
- * NLS_isSystemLocale <internal>
- *
- * Return TRUE, if locale is system-type
- */
-BOOL NLS_isSystemLocale(LCID lcid)
-{
- if(lcid == LOCALE_SYSTEM_DEFAULT ||
- lcid == LOCALE_NEUTRAL ||
- lcid == LOCALE_USER_DEFAULT)
- {
- return TRUE;
- }
- return FALSE;
-}
-
-/**************************************************************************
- * NLS_getDefaultLocale <internal>
- *
- * Return default system or user locale
- */
-LCID NLS_getDefaultLocale(LCID lcid)
-{
- LCID lcidTmp;
-
- DPRINT("Called NLS_getDefaultLocale(0x%04lx)\n", lcid);
-
- switch(lcid)
- {
- case LOCALE_SYSTEM_DEFAULT:
- NtQueryDefaultLocale(FALSE, &lcidTmp);
- return lcidTmp;
- break;
-
- case LOCALE_USER_DEFAULT:
- case LOCALE_NEUTRAL:
- NtQueryDefaultLocale(TRUE, &lcidTmp);
- return lcidTmp;
- break;
-
- default:
- DPRINT1("FIXME: unknown system lcid\n");
- }
-
- return lcid;
-}
/**************************************************************************
* NLS_GetLocaleNumber <internal>
@@ -184,10 +135,10 @@
}
#define GET_LOCALE_NUMBER(num, type) num = NLS_GetLocaleNumber(lcid, type|dwFlags); \
- TRACE( #type ": %ld (%08lx)\n", (DWORD)num, (DWORD)num)
+ TRACE( #type ": %d (%08x)\n", (DWORD)num, (DWORD)num)
#define GET_LOCALE_STRING(str, type) str = NLS_GetLocaleString(lcid, type|dwFlags); \
- TRACE( #type ": '%S'\n", (str))
+ TRACE( #type ": %s\n", debugstr_w(str))
/**************************************************************************
* NLS_GetFormats <internal>
@@ -197,7 +148,7 @@
static const NLS_FORMAT_NODE *NLS_GetFormats(LCID lcid, DWORD dwFlags)
{
/* GetLocaleInfo() identifiers for cached formatting strings */
- static const USHORT NLS_LocaleIndices[] = {
+ static const LCTYPE NLS_LocaleIndices[] = {
LOCALE_SNEGATIVESIGN,
LOCALE_SLONGDATE, LOCALE_SSHORTDATE,
LOCALE_STIMEFORMAT,
@@ -210,6 +161,18 @@
LOCALE_SMONTHNAME4, LOCALE_SMONTHNAME5, LOCALE_SMONTHNAME6,
LOCALE_SMONTHNAME7, LOCALE_SMONTHNAME8, LOCALE_SMONTHNAME9,
LOCALE_SMONTHNAME10, LOCALE_SMONTHNAME11, LOCALE_SMONTHNAME12,
+ LOCALE_SMONTHNAME1 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME2 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME3 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME4 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME5 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME6 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME7 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME8 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME9 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME10 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME11 | LOCALE_RETURN_GENITIVE_NAMES,
+ LOCALE_SMONTHNAME12 | LOCALE_RETURN_GENITIVE_NAMES,
LOCALE_SABBREVMONTHNAME1, LOCALE_SABBREVMONTHNAME2, LOCALE_SABBREVMONTHNAME3,
LOCALE_SABBREVMONTHNAME4, LOCALE_SABBREVMONTHNAME5, LOCALE_SABBREVMONTHNAME6,
LOCALE_SABBREVMONTHNAME7, LOCALE_SABBREVMONTHNAME8, LOCALE_SABBREVMONTHNAME9,
@@ -222,7 +185,7 @@
dwFlags &= LOCALE_NOUSEROVERRIDE;
- TRACE("(0x%04lx,0x%08lx)\n", lcid, dwFlags);
+ TRACE("(0x%04x,0x%08x)\n", lcid, dwFlags);
/* See if we have already cached the locales number format */
while (node && (node->lcid != lcid || node->dwFlags != dwFlags)
&& node->next)
@@ -296,6 +259,16 @@
{
GET_LOCALE_STRING(new_node->lppszStrings[i], NLS_LocaleIndices[i]);
}
+ /* Save some memory if month genitive name is the same or not present */
+ for (i = 0; i < 12; i++)
+ {
+ if (strcmpW(GetLongMonth(new_node, i), GetGenitiveMonth(new_node, i)) == 0)
+ {
+ HeapFree(GetProcessHeap(), 0, GetGenitiveMonth(new_node, i));
+ GetGenitiveMonth(new_node, i) = NULL;
+ }
+ }
+
new_node->szShortAM[0] = GetAM(new_node)[0]; new_node->szShortAM[1] =
'\0';
new_node->szShortPM[0] = GetPM(new_node)[0]; new_node->szShortPM[1] =
'\0';
@@ -360,7 +333,7 @@
case LANG_MARATHI:
case LANG_PUNJABI:
case LANG_SANSKRIT:
- TRACE("lcid 0x%08lx: langid 0x%4x is Unicode Only\n", lcid,
PRIMARYLANGID(lcid));
+ TRACE("lcid 0x%08x: langid 0x%4x is Unicode Only\n", lcid,
PRIMARYLANGID(lcid));
return TRUE;
default:
return FALSE;
@@ -399,14 +372,11 @@
INT cchWritten = 0;
INT lastFormatPos = 0;
BOOL bSkipping = FALSE; /* Skipping text around marker? */
+ BOOL d_dd_formatted = FALSE; /* previous formatted part was for d or dd */
/* Verify our arguments */
if ((cchOut && !lpStr) || !(node = NLS_GetFormats(lcid, dwFlags)))
- {
-NLS_GetDateTimeFormatW_InvalidParameter:
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
+ goto invalid_parameter;
if (dwFlags & ~(DATE_DATEVARSONLY|TIME_TIMEVARSONLY))
{
@@ -414,15 +384,13 @@
((dwFlags & DATE_DATEVARSONLY && dwFlags & ~DATE_FORMAT_FLAGS)
||
(dwFlags & TIME_TIMEVARSONLY && dwFlags & ~TIME_FORMAT_FLAGS)))
{
-NLS_GetDateTimeFormatW_InvalidFlags:
- SetLastError(ERROR_INVALID_FLAGS);
- return 0;
+ goto invalid_flags;
}
if (dwFlags & DATE_DATEVARSONLY)
{
if ((dwFlags & (DATE_LTRREADING|DATE_RTLREADING)) ==
(DATE_LTRREADING|DATE_RTLREADING))
- goto NLS_GetDateTimeFormatW_InvalidFlags;
+ goto invalid_flags;
else if (dwFlags & (DATE_LTRREADING|DATE_RTLREADING))
FIXME("Unsupported flags: DATE_LTRREADING/DATE_RTLREADING\n");
@@ -434,10 +402,10 @@
case DATE_LONGDATE:
case DATE_YEARMONTH:
if (lpFormat)
- goto NLS_GetDateTimeFormatW_InvalidFlags;
+ goto invalid_flags;
break;
default:
- goto NLS_GetDateTimeFormatW_InvalidFlags;
+ goto invalid_flags;
}
}
}
@@ -476,7 +444,7 @@
st.wDay = lpTime->wDay;
if (st.wDay > 31 || st.wMonth > 12 || !SystemTimeToFileTime(&st,
&ftTmp))
- goto NLS_GetDateTimeFormatW_InvalidParameter;
+ goto invalid_parameter;
FileTimeToSystemTime(&ftTmp, &st);
lpTime = &st;
@@ -486,7 +454,7 @@
{
/* Verify the time */
if (lpTime->wHour > 24 || lpTime->wMinute > 59 || lpTime->wSecond
> 59)
- goto NLS_GetDateTimeFormatW_InvalidParameter;
+ goto invalid_parameter;
}
}
@@ -511,7 +479,7 @@
if (!cchOut)
cchWritten++; /* Count size only */
else if (cchWritten >= cchOut)
- goto NLS_GetDateTimeFormatW_Overrun;
+ goto overrun;
else if (!bSkipping)
{
lpStr[cchWritten] = *lpFormat;
@@ -523,7 +491,6 @@
else if ((dwFlags & DATE_DATEVARSONLY && IsDateFmtChar(*lpFormat)) ||
(dwFlags & TIME_TIMEVARSONLY && IsTimeFmtChar(*lpFormat)))
{
- char buffA[32];
WCHAR buff[32], fmtChar;
LPCWSTR szAdd = NULL;
DWORD dwVal = 0;
@@ -539,6 +506,7 @@
}
buff[0] = '\0';
+ if (fmtChar != 'M') d_dd_formatted = FALSE;
switch(fmtChar)
{
case 'd':
@@ -550,12 +518,59 @@
{
dwVal = lpTime->wDay;
szAdd = buff;
+ d_dd_formatted = TRUE;
}
break;
case 'M':
if (count >= 4)
+ {
+ LPCWSTR genitive = GetGenitiveMonth(node, lpTime->wMonth - 1);
+ if (genitive)
+ {
+ if (d_dd_formatted)
+ {
+ szAdd = genitive;
+ break;
+ }
+ else
+ {
+ LPCWSTR format = lpFormat;
+ /* Look forward now, if next format pattern is for day genitive
+ name should be used */
+ while (*format)
+ {
+ /* Skip parts within markers */
+ if (IsLiteralMarker(*format))
+ {
+ ++format;
+ while (*format)
+ {
+ if (IsLiteralMarker(*format))
+ {
+ ++format;
+ if (!IsLiteralMarker(*format)) break;
+ }
+ }
+ }
+ if (*format != ' ') break;
+ ++format;
+ }
+ /* Only numeric day form matters */
+ if (*format && *format == 'd')
+ {
+ INT dcount = 1;
+ while (*++format == 'd') dcount++;
+ if (dcount < 3)
+ {
+ szAdd = genitive;
+ break;
+ }
+ }
+ }
+ }
szAdd = GetLongMonth(node, lpTime->wMonth - 1);
+ }
else if (count == 3)
szAdd = GetShortMonth(node, lpTime->wMonth - 1);
else
@@ -657,9 +672,9 @@
if (szAdd == buff && buff[0] == '\0')
{
+ static const WCHAR fmtW[] = {'%','.','*','d',0};
/* We have a numeric value to add */
- sprintf(buffA, "%.*ld", count, dwVal);
- MultiByteToWideChar(CP_ACP, 0, buffA, -1, buff, sizeof(buff)/sizeof(WCHAR));
+ snprintfW(buff, sizeof(buff)/sizeof(WCHAR), fmtW, count, dwVal);
}
dwLen = szAdd ? strlenW(szAdd) : 0;
@@ -671,7 +686,7 @@
else
{
memcpy(lpStr + cchWritten, szAdd, (cchOut - cchWritten) * sizeof(WCHAR));
- goto NLS_GetDateTimeFormatW_Overrun;
+ goto overrun;
}
}
cchWritten += dwLen;
@@ -683,7 +698,7 @@
if (!cchOut)
cchWritten++; /* Count size only */
else if (cchWritten >= cchOut)
- goto NLS_GetDateTimeFormatW_Overrun;
+ goto overrun;
else if (!bSkipping || *lpFormat == ' ')
{
lpStr[cchWritten] = *lpFormat;
@@ -697,19 +712,27 @@
if (cchOut)
{
if (cchWritten >= cchOut)
- goto NLS_GetDateTimeFormatW_Overrun;
+ goto overrun;
else
lpStr[cchWritten] = '\0';
}
cchWritten++; /* Include terminating NUL */
- TRACE("returning length=%d, ouput='%S'\n", cchWritten, lpStr);
+ TRACE("returning length=%d, ouput=%s\n", cchWritten, debugstr_w(lpStr));
return cchWritten;
-NLS_GetDateTimeFormatW_Overrun:
+overrun:
TRACE("returning 0, (ERROR_INSUFFICIENT_BUFFER)\n");
SetLastError(ERROR_INSUFFICIENT_BUFFER);
return 0;
+
+invalid_parameter:
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+
+invalid_flags:
+ SetLastError(ERROR_INVALID_FLAGS);
+ return 0;
}
/******************************************************************************
@@ -725,12 +748,11 @@
WCHAR szFormat[128], szOut[128];
INT iRet;
- TRACE("(0x%04lx,0x%08lx,%p,%s,%p,%d)\n", lcid, dwFlags, lpTime,
- lpFormat, lpStr, cchOut);
+ TRACE("(0x%04x,0x%08x,%p,%s,%p,%d)\n", lcid, dwFlags, lpTime,
+ debugstr_a(lpFormat), lpStr, cchOut);
if (NLS_IsUnicodeOnlyLcid(lcid))
{
-GetDateTimeFormatA_InvalidParameter:
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
@@ -739,7 +761,11 @@
{
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node)
- goto GetDateTimeFormatA_InvalidParameter;
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+
cp = node->dwCodePage;
}
@@ -810,8 +836,8 @@
INT WINAPI GetDateFormatA( LCID lcid, DWORD dwFlags, const SYSTEMTIME* lpTime,
LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
{
- TRACE("(0x%04lx,0x%08lx,%p,%s,%p,%d)\n",lcid, dwFlags, lpTime,
- lpFormat, lpDateStr, cchOut);
+ TRACE("(0x%04x,0x%08x,%p,%s,%p,%d)\n",lcid, dwFlags, lpTime,
+ debugstr_a(lpFormat), lpDateStr, cchOut);
return NLS_GetDateTimeFormatA(lcid, dwFlags | DATE_DATEVARSONLY, lpTime,
lpFormat, lpDateStr, cchOut);
@@ -826,8 +852,8 @@
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME* lpTime,
LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
{
- TRACE("(0x%04lx,0x%08lx,%p,%S,%p,%d)\n", lcid, dwFlags, lpTime,
- lpFormat, lpDateStr, cchOut);
+ TRACE("(0x%04x,0x%08x,%p,%s,%p,%d)\n", lcid, dwFlags, lpTime,
+ debugstr_w(lpFormat), lpDateStr, cchOut);
return NLS_GetDateTimeFormatW(lcid, dwFlags|DATE_DATEVARSONLY, lpTime,
lpFormat, lpDateStr, cchOut);
@@ -877,8 +903,8 @@
INT WINAPI GetTimeFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME* lpTime,
LPCSTR lpFormat, LPSTR lpTimeStr, INT cchOut)
{
- TRACE("(0x%04lx,0x%08lx,%p,%s,%p,%d)\n",lcid, dwFlags, lpTime,
- lpFormat, lpTimeStr, cchOut);
+ TRACE("(0x%04x,0x%08x,%p,%s,%p,%d)\n",lcid, dwFlags, lpTime,
+ debugstr_a(lpFormat), lpTimeStr, cchOut);
return NLS_GetDateTimeFormatA(lcid, dwFlags|TIME_TIMEVARSONLY, lpTime,
lpFormat, lpTimeStr, cchOut);
@@ -892,8 +918,8 @@
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME* lpTime,
LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
{
- TRACE("(0x%04lx,0x%08lx,%p,%S,%p,%d)\n",lcid, dwFlags, lpTime,
- lpFormat, lpTimeStr, cchOut);
+ TRACE("(0x%04x,0x%08x,%p,%s,%p,%d)\n",lcid, dwFlags, lpTime,
+ debugstr_w(lpFormat), lpTimeStr, cchOut);
return NLS_GetDateTimeFormatW(lcid, dwFlags|TIME_TIMEVARSONLY, lpTime,
lpFormat, lpTimeStr, cchOut);
@@ -936,12 +962,11 @@
const NUMBERFMTW *pfmt = NULL;
INT iRet;
- TRACE("(0x%04lx,0x%08lx,%s,%p,%p,%d)\n", lcid, dwFlags, lpszValue,
+ TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_a(lpszValue),
lpFormat, lpNumberStr, cchOut);
if (NLS_IsUnicodeOnlyLcid(lcid))
{
-GetNumberFormatA_InvalidParameter:
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
@@ -950,7 +975,11 @@
{
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node)
- goto GetNumberFormatA_InvalidParameter;
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+
cp = node->dwCodePage;
}
@@ -1013,28 +1042,16 @@
WCHAR szNegBuff[8];
const WCHAR *lpszNeg = NULL, *lpszNegStart, *szSrc;
DWORD dwState = 0, dwDecimals = 0, dwGroupCount = 0, dwCurrentGroupCount = 0;
- DWORD dwLeadingZeros = 0;
INT iRet;
- TRACE("(0x%04lx,0x%08lx,%S,%p,%p,%d)\n", lcid, dwFlags, lpszValue,
+ TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_w(lpszValue),
lpFormat, lpNumberStr, cchOut);
- if(NLS_isSystemLocale(lcid))
- {
- lcid = NLS_getDefaultLocale(lcid);
- }
- else if(!IsValidLocale(lcid, LCID_INSTALLED))
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
-
if (!lpszValue || cchOut < 0 || (cchOut > 0 && !lpNumberStr) ||
+ !IsValidLocale(lcid, 0) ||
(lpFormat && (dwFlags || !lpFormat->lpDecimalSep ||
!lpFormat->lpThousandSep)))
{
-GetNumberFormatW_Error:
- SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS :
ERROR_INVALID_PARAMETER);
- return 0;
+ goto error;
}
if (!lpFormat)
@@ -1042,7 +1059,7 @@
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node)
- goto GetNumberFormatW_Error;
+ goto error;
lpFormat = &node->fmt;
lpszNegStart = lpszNeg = GetNegative(node);
}
@@ -1064,11 +1081,7 @@
/* Check the number for validity */
while (*szSrc)
{
- if (*szSrc == '0' && !(dwState & NF_DIGITS))
- {
- dwLeadingZeros++;
- }
- else if ((*szSrc >= '1' && *szSrc <= '9') || (*szSrc ==
'0' && (dwState & NF_DIGITS)))
+ if (*szSrc >= '0' && *szSrc <= '9')
{
dwState |= NF_DIGITS;
if (dwState & NF_ISREAL)
@@ -1077,23 +1090,23 @@
else if (*szSrc == '-')
{
if (dwState)
- goto GetNumberFormatW_Error; /* '-' not first character */
+ goto error; /* '-' not first character */
dwState |= NF_ISNEGATIVE;
}
else if (*szSrc == '.')
{
if (dwState & NF_ISREAL)
- goto GetNumberFormatW_Error; /* More than one '.' */
+ goto error; /* More than one '.' */
dwState |= NF_ISREAL;
}
else
- goto GetNumberFormatW_Error; /* Invalid char */
+ goto error; /* Invalid char */
szSrc++;
}
szSrc--; /* Point to last character */
if (!(dwState & NF_DIGITS))
- goto GetNumberFormatW_Error; /* No digits */
+ goto error; /* No digits */
/* Add any trailing negative sign */
if (dwState & NF_ISNEGATIVE)
@@ -1181,7 +1194,7 @@
dwGroupCount = lpFormat->Grouping == 32 ? 3 : lpFormat->Grouping;
/* Write the remaining whole number digits, including grouping chars */
- while (szSrc >= (lpszValue + dwLeadingZeros) && *szSrc >= '0'
&& *szSrc <= '9')
+ while (szSrc >= lpszValue && *szSrc >= '0' && *szSrc
<= '9')
{
if (dwState & NF_ROUND)
{
@@ -1199,7 +1212,7 @@
dwState |= NF_DIGITS_OUT;
dwCurrentGroupCount++;
- if (szSrc >= (lpszValue + dwLeadingZeros) && dwCurrentGroupCount ==
dwGroupCount && *szSrc != '-')
+ if (szSrc >= lpszValue && dwCurrentGroupCount == dwGroupCount &&
*szSrc != '-')
{
LPWSTR lpszGrp = lpFormat->lpThousandSep + strlenW(lpFormat->lpThousandSep) -
1;
@@ -1251,6 +1264,10 @@
}
}
return iRet;
+
+error:
+ SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS :
ERROR_INVALID_PARAMETER);
+ return 0;
}
/**************************************************************************
@@ -1290,12 +1307,11 @@
const CURRENCYFMTW *pfmt = NULL;
INT iRet;
- TRACE("(0x%04lx,0x%08lx,%s,%p,%p,%d)\n", lcid, dwFlags, lpszValue,
+ TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_a(lpszValue),
lpFormat, lpCurrencyStr, cchOut);
if (NLS_IsUnicodeOnlyLcid(lcid))
{
-GetCurrencyFormatA_InvalidParameter:
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
@@ -1304,7 +1320,11 @@
{
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node)
- goto GetCurrencyFormatA_InvalidParameter;
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+
cp = node->dwCodePage;
}
@@ -1395,32 +1415,16 @@
DWORD dwState = 0, dwDecimals = 0, dwGroupCount = 0, dwCurrentGroupCount = 0, dwFmt;
INT iRet;
- DPRINT1("GetCurrencyFormatW(0x%04lx,0x%08lx,%S,%p,%p,%d)\n",
- lcid,
- dwFlags,
- lpszValue,
- lpFormat,
- lpCurrencyStr,
- cchOut);
-
- if(NLS_isSystemLocale(lcid))
- {
- lcid = NLS_getDefaultLocale(lcid);
- }
- else if(!IsValidLocale(lcid, LCID_INSTALLED))
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return 0;
- }
+ TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_w(lpszValue),
+ lpFormat, lpCurrencyStr, cchOut);
if (!lpszValue || cchOut < 0 || (cchOut > 0 && !lpCurrencyStr) ||
+ !IsValidLocale(lcid, 0) ||
(lpFormat && (dwFlags || !lpFormat->lpDecimalSep ||
!lpFormat->lpThousandSep ||
!lpFormat->lpCurrencySymbol || lpFormat->NegativeOrder > 15 ||
lpFormat->PositiveOrder > 3)))
{
-GetCurrencyFormatW_Error:
- SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS :
ERROR_INVALID_PARAMETER);
- return 0;
+ goto error;
}
if (!lpFormat)
@@ -1428,7 +1432,8 @@
const NLS_FORMAT_NODE *node = NLS_GetFormats(lcid, dwFlags);
if (!node)
- goto GetCurrencyFormatW_Error;
+ goto error;
+
lpFormat = &node->cyfmt;
lpszNegStart = lpszNeg = GetNegative(node);
}
@@ -1461,23 +1466,23 @@
else if (*szSrc == '-')
{
if (dwState)
- goto GetCurrencyFormatW_Error; /* '-' not first character */
+ goto error; /* '-' not first character */
dwState |= NF_ISNEGATIVE;
}
else if (*szSrc == '.')
{
if (dwState & NF_ISREAL)
- goto GetCurrencyFormatW_Error; /* More than one '.' */
+ goto error; /* More than one '.' */
dwState |= NF_ISREAL;
}
else
- goto GetCurrencyFormatW_Error; /* Invalid char */
+ goto error; /* Invalid char */
szSrc++;
}
szSrc--; /* Point to last character */
if (!(dwState & NF_DIGITS))
- goto GetCurrencyFormatW_Error; /* No digits */
+ goto error; /* No digits */
if (dwState & NF_ISNEGATIVE)
dwFmt = NLS_NegCyFormats[lpFormat->NegativeOrder];
@@ -1652,6 +1657,10 @@
}
}
return iRet;
+
+error:
+ SetLastError(lpFormat && dwFlags ? ERROR_INVALID_FLAGS :
ERROR_INVALID_PARAMETER);
+ return 0;
}
/* FIXME: Everything below here needs to move somewhere else along with the
@@ -1660,40 +1669,132 @@
*/
/**************************************************************************
- * EnumDateFormatsA (KERNEL32.@)
- */
-BOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA lpDateFmtEnumProc, LCID Locale, DWORD
dwFlags)
-{
+ * EnumDateFormatsExA (KERNEL32.@)
+ *
+ * FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
+ * LOCALE_NOUSEROVERRIDE here as well?
+ */
+BOOL WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA proc, LCID lcid, DWORD flags)
+{
+ CALID cal_id;
char buf[256];
- if (!lpDateFmtEnumProc)
+ if (!proc)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
- switch (dwFlags & ~LOCALE_USE_CP_ACP)
- {
- case 0:
- case DATE_SHORTDATE:
- if (GetLocaleInfoA(Locale, LOCALE_SSHORTDATE | (dwFlags &
LOCALE_USE_CP_ACP), buf, 256))
- lpDateFmtEnumProc(buf);
- break;
-
- case DATE_LONGDATE:
- if (GetLocaleInfoA(Locale, LOCALE_SLONGDATE | (dwFlags &
LOCALE_USE_CP_ACP), buf, 256))
- lpDateFmtEnumProc(buf);
- break;
-
- case DATE_YEARMONTH:
- if (GetLocaleInfoA(Locale, LOCALE_SYEARMONTH | (dwFlags &
LOCALE_USE_CP_ACP), buf, 256))
- lpDateFmtEnumProc(buf);
- break;
-
- default:
- FIXME("Unknown date format (%d)\n", dwFlags);
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
+ if (!GetLocaleInfoW(lcid, LOCALE_ICALENDARTYPE|LOCALE_RETURN_NUMBER,
(LPWSTR)&cal_id, sizeof(cal_id)/sizeof(WCHAR)))
+ return FALSE;
+
+ switch (flags & ~LOCALE_USE_CP_ACP)
+ {
+ case 0:
+ case DATE_SHORTDATE:
+ if (GetLocaleInfoA(lcid, LOCALE_SSHORTDATE | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf, cal_id);
+ break;
+
+ case DATE_LONGDATE:
+ if (GetLocaleInfoA(lcid, LOCALE_SLONGDATE | (flags & LOCALE_USE_CP_ACP), buf,
256))
+ proc(buf, cal_id);
+ break;
+
+ case DATE_YEARMONTH:
+ if (GetLocaleInfoA(lcid, LOCALE_SYEARMONTH | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf, cal_id);
+ break;
+
+ default:
+ FIXME("Unknown date format (%d)\n", flags);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**************************************************************************
+ * EnumDateFormatsExW (KERNEL32.@)
+ */
+BOOL WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW proc, LCID lcid, DWORD flags)
+{
+ CALID cal_id;
+ WCHAR buf[256];
+
+ if (!proc)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ if (!GetLocaleInfoW(lcid, LOCALE_ICALENDARTYPE|LOCALE_RETURN_NUMBER,
(LPWSTR)&cal_id, sizeof(cal_id)/sizeof(WCHAR)))
+ return FALSE;
+
+ switch (flags & ~LOCALE_USE_CP_ACP)
+ {
+ case 0:
+ case DATE_SHORTDATE:
+ if (GetLocaleInfoW(lcid, LOCALE_SSHORTDATE | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf, cal_id);
+ break;
+
+ case DATE_LONGDATE:
+ if (GetLocaleInfoW(lcid, LOCALE_SLONGDATE | (flags & LOCALE_USE_CP_ACP), buf,
256))
+ proc(buf, cal_id);
+ break;
+
+ case DATE_YEARMONTH:
+ if (GetLocaleInfoW(lcid, LOCALE_SYEARMONTH | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf, cal_id);
+ break;
+
+ default:
+ FIXME("Unknown date format (%d)\n", flags);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**************************************************************************
+ * EnumDateFormatsA (KERNEL32.@)
+ *
+ * FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
+ * LOCALE_NOUSEROVERRIDE here as well?
+ */
+BOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA proc, LCID lcid, DWORD flags)
+{
+ char buf[256];
+
+ if (!proc)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ switch (flags & ~LOCALE_USE_CP_ACP)
+ {
+ case 0:
+ case DATE_SHORTDATE:
+ if (GetLocaleInfoA(lcid, LOCALE_SSHORTDATE | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf);
+ break;
+
+ case DATE_LONGDATE:
+ if (GetLocaleInfoA(lcid, LOCALE_SLONGDATE | (flags & LOCALE_USE_CP_ACP), buf,
256))
+ proc(buf);
+ break;
+
+ case DATE_YEARMONTH:
+ if (GetLocaleInfoA(lcid, LOCALE_SYEARMONTH | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf);
+ break;
+
+ default:
+ FIXME("Unknown date format (%d)\n", flags);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
}
return TRUE;
}
@@ -1701,180 +1802,99 @@
/**************************************************************************
* EnumDateFormatsW (KERNEL32.@)
*/
-BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW lpDateFmtEnumProc, LCID Locale, DWORD
dwFlags)
+BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW proc, LCID lcid, DWORD flags)
{
WCHAR buf[256];
- if (!lpDateFmtEnumProc)
+ if (!proc)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
- switch (dwFlags & ~LOCALE_USE_CP_ACP)
- {
- case 0:
- case DATE_SHORTDATE:
- if (GetLocaleInfoW(Locale, LOCALE_SSHORTDATE | (dwFlags &
LOCALE_USE_CP_ACP), buf, 256))
- lpDateFmtEnumProc(buf);
- break;
-
- case DATE_LONGDATE:
- if (GetLocaleInfoW(Locale, LOCALE_SLONGDATE | (dwFlags &
LOCALE_USE_CP_ACP), buf, 256))
- lpDateFmtEnumProc(buf);
- break;
-
- case DATE_YEARMONTH:
- if (GetLocaleInfoW(Locale, LOCALE_SYEARMONTH | (dwFlags &
LOCALE_USE_CP_ACP), buf, 256))
- lpDateFmtEnumProc(buf);
- break;
-
- default:
- FIXME("Unknown date format (%d)\n", dwFlags);
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
+ switch (flags & ~LOCALE_USE_CP_ACP)
+ {
+ case 0:
+ case DATE_SHORTDATE:
+ if (GetLocaleInfoW(lcid, LOCALE_SSHORTDATE | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf);
+ break;
+
+ case DATE_LONGDATE:
+ if (GetLocaleInfoW(lcid, LOCALE_SLONGDATE | (flags & LOCALE_USE_CP_ACP), buf,
256))
+ proc(buf);
+ break;
+
+ case DATE_YEARMONTH:
+ if (GetLocaleInfoW(lcid, LOCALE_SYEARMONTH | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf);
+ break;
+
+ default:
+ FIXME("Unknown date format (%d)\n", flags);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
}
return TRUE;
}
/**************************************************************************
* EnumTimeFormatsA (KERNEL32.@)
- */
-BOOL WINAPI EnumTimeFormatsA( TIMEFMT_ENUMPROCA lpTimeFmtEnumProc, LCID Locale, DWORD
dwFlags )
-{
- LCID Loc = GetUserDefaultLCID();
- if(!lpTimeFmtEnumProc)
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
- if(dwFlags)
- {
- FIXME("Unknown time format (%ld)\n", dwFlags);
- }
-
- switch( Loc )
- {
- case 0x00000407: /* (Loc,"de_DE") */
- {
- if(!(*lpTimeFmtEnumProc)("HH.mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("HH:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("H:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("H.mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("H.mm'Uhr'")) return TRUE;
+ *
+ * FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
+ * LOCALE_NOUSEROVERRIDE here as well?
+ */
+BOOL WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA proc, LCID lcid, DWORD flags)
+{
+ char buf[256];
+
+ if (!proc)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ switch (flags & ~LOCALE_USE_CP_ACP)
+ {
+ case 0:
+ if (GetLocaleInfoA(lcid, LOCALE_STIMEFORMAT | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf);
+ break;
+
+ default:
+ FIXME("Unknown time format (%d)\n", flags);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
return TRUE;
- }
-
- case 0x0000040c: /* (Loc,"fr_FR") */
- case 0x00000c0c: /* (Loc,"fr_CA") */
- {
- if(!(*lpTimeFmtEnumProc)("H:mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("HH:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("H:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("HH.mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("HH'h'mm")) return TRUE;
- return TRUE;
- }
-
- case 0x00000809: /* (Loc,"en_UK") */
- case 0x00000c09: /* (Loc,"en_AU") */
- case 0x00001409: /* (Loc,"en_NZ") */
- case 0x00001809: /* (Loc,"en_IE") */
- {
- if(!(*lpTimeFmtEnumProc)("h:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("HH:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("H:mm:ss")) return TRUE;
- return TRUE;
- }
-
- case 0x00001c09: /* (Loc,"en_ZA") */
- case 0x00002809: /* (Loc,"en_BZ") */
- case 0x00002c09: /* (Loc,"en_TT") */
- {
- if(!(*lpTimeFmtEnumProc)("h:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("hh:mm:ss tt")) return TRUE;
- return TRUE;
- }
-
- default: /* default to US style "en_US" */
- {
- if(!(*lpTimeFmtEnumProc)("h:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("hh:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("H:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)("HH:mm:ss")) return TRUE;
- return TRUE;
- }
- }
}
/**************************************************************************
* EnumTimeFormatsW (KERNEL32.@)
*/
-BOOL WINAPI EnumTimeFormatsW( TIMEFMT_ENUMPROCW lpTimeFmtEnumProc, LCID Locale, DWORD
dwFlags )
-{
- LCID Loc = GetUserDefaultLCID();
- if(!lpTimeFmtEnumProc)
- {
- SetLastError(ERROR_INVALID_PARAMETER);
- return FALSE;
- }
- if(dwFlags)
- {
- FIXME("Unknown time format (%ld)\n", dwFlags);
- }
-
- switch( Loc )
- {
- case 0x00000407: /* (Loc,"de_DE") */
- {
- if(!(*lpTimeFmtEnumProc)(L"HH.mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"HH:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"H:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"H.mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"H.mm'Uhr'")) return TRUE;
+BOOL WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW proc, LCID lcid, DWORD flags)
+{
+ WCHAR buf[256];
+
+ if (!proc)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ switch (flags & ~LOCALE_USE_CP_ACP)
+ {
+ case 0:
+ if (GetLocaleInfoW(lcid, LOCALE_STIMEFORMAT | (flags & LOCALE_USE_CP_ACP),
buf, 256))
+ proc(buf);
+ break;
+
+ default:
+ FIXME("Unknown time format (%d)\n", flags);
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
return TRUE;
- }
-
- case 0x0000040c: /* (Loc,"fr_FR") */
- case 0x00000c0c: /* (Loc,"fr_CA") */
- {
- if(!(*lpTimeFmtEnumProc)(L"H:mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"HH:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"H:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"HH.mm")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"HH'h'mm")) return TRUE;
- return TRUE;
- }
-
- case 0x00000809: /* (Loc,"en_UK") */
- case 0x00000c09: /* (Loc,"en_AU") */
- case 0x00001409: /* (Loc,"en_NZ") */
- case 0x00001809: /* (Loc,"en_IE") */
- {
- if(!(*lpTimeFmtEnumProc)(L"h:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"HH:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"H:mm:ss")) return TRUE;
- return TRUE;
- }
-
- case 0x00001c09: /* (Loc,"en_ZA") */
- case 0x00002809: /* (Loc,"en_BZ") */
- case 0x00002c09: /* (Loc,"en_TT") */
- {
- if(!(*lpTimeFmtEnumProc)(L"h:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"hh:mm:ss tt")) return TRUE;
- return TRUE;
- }
-
- default: /* default to US style "en_US" */
- {
- if(!(*lpTimeFmtEnumProc)(L"h:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"hh:mm:ss tt")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"H:mm:ss")) return TRUE;
- if(!(*lpTimeFmtEnumProc)(L"HH:mm:ss")) return TRUE;
- return TRUE;
- }
- }
}
/******************************************************************************
@@ -1940,7 +1960,7 @@
if (opt == NULL)
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
- goto NLS_EnumCalendarInfoAW_Cleanup;
+ goto cleanup;
}
if (GetLocaleInfoW(locale, LOCALE_IOPTIONALCALENDAR, opt, optSz))
iter = opt;
@@ -1967,14 +1987,14 @@
if (bufSz >= newSz)
{
ERR("Buffer resizing disorder: was %d, requested %d.\n", bufSz,
newSz);
- goto NLS_EnumCalendarInfoAW_Cleanup;
+ goto cleanup;
}
bufSz = newSz;
WARN("Buffer too small; resizing to %d bytes.\n", bufSz);
buf = HeapReAlloc(GetProcessHeap(), 0, buf, bufSz);
if (buf == NULL)
- goto NLS_EnumCalendarInfoAW_Cleanup;
- } else goto NLS_EnumCalendarInfoAW_Cleanup;
+ goto cleanup;
+ } else goto cleanup;
}
} while (!ret);
@@ -2008,7 +2028,7 @@
}
}
-NLS_EnumCalendarInfoAW_Cleanup:
+cleanup:
HeapFree(GetProcessHeap(), 0, opt);
HeapFree(GetProcessHeap(), 0, buf);
return ret;
@@ -2016,12 +2036,14 @@
/******************************************************************************
* EnumCalendarInfoA [KERNEL32.@]
+ *
+ * See EnumCalendarInfoAW.
*/
BOOL WINAPI EnumCalendarInfoA( CALINFO_ENUMPROCA calinfoproc,LCID locale,
CALID calendar,CALTYPE caltype )
{
-
FIXME("(%p,0x%04lx,0x%08lx,0x%08lx),stub!\n",calinfoproc,locale,calendar,caltype);
- return NLS_EnumCalendarInfoAW(calinfoproc, locale, calendar, caltype, FALSE, FALSE);
+ TRACE("(%p,0x%08x,0x%08x,0x%08x)\n", calinfoproc, locale, calendar,
caltype);
+ return NLS_EnumCalendarInfoAW(calinfoproc, locale, calendar, caltype, FALSE, FALSE);
}
/******************************************************************************
Modified: branches/reactos-yarotows/dll/win32/shell32/iconcache.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/shel…
==============================================================================
--- branches/reactos-yarotows/dll/win32/shell32/iconcache.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/shell32/iconcache.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -171,25 +171,40 @@
goto fail;
}
- /* Copy the source xor bitmap to the target and clear out part of it by using
- the shortcut mask */
+ /* Copy the source color bitmap to the target */
if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight,
- SourceDC, 0, 0, SRCCOPY) ||
- ! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
- ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
- ShortcutDC, 0, 0, SRCAND))
- {
- goto fail;
- }
-
- if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
-
- /* Now put in the shortcut xor mask */
- if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
- ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
- ShortcutDC, 0, 0, SRCINVERT))
- {
- goto fail;
+ SourceDC, 0, 0, SRCCOPY)) goto fail;
+
+ /* Check if we can use alpha blending */
+ if (ShortcutBitmapInfo.bmBitsPixel == 32)
+ {
+ /* Use alpha blending to make sure the target alpha channel stays valid */
+ if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
+ if (!GdiAlphaBlend(TargetDC, 0, SourceBitmapInfo.bmHeight -
ShortcutBitmapInfo.bmHeight,
+ ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
+ ShortcutDC, 0, 0, ShortcutBitmapInfo.bmWidth,
ShortcutBitmapInfo.bmHeight,
+ (BLENDFUNCTION){AC_SRC_OVER, 0, 255, AC_SRC_ALPHA})) goto fail;
+ }
+ else
+ {
+ /* Copy the source xor bitmap to the target and clear out part of it by using
+ the shortcut mask */
+ if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
+ ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
+ ShortcutDC, 0, 0, SRCAND))
+ {
+ goto fail;
+ }
+
+ if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
+
+ /* Now put in the shortcut xor mask */
+ if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
+ ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
+ ShortcutDC, 0, 0, SRCINVERT))
+ {
+ goto fail;
+ }
}
/* Clean up, we're not goto'ing to 'fail' after this so we can be lazy
and not set
@@ -387,14 +402,14 @@
if (sic_hdpa)
{
TRACE("Icon cache already initialized\n");
- return TRUE;
+ return TRUE;
}
- sic_hdpa = DPA_Create(16);
- if (!sic_hdpa)
- {
+ sic_hdpa = DPA_Create(16);
+ if (!sic_hdpa)
+ {
return FALSE;
- }
+ }
hDC = CreateICW(L"DISPLAY", NULL, NULL, NULL);
if (!hDC)
@@ -439,7 +454,7 @@
100);
if (ShellSmallIconList)
{
- /* Load the document icon, which is used as the default if an icon isn't
found. */
+ /* Load the document icon, which is used as the default if an icon isn't
found. */
hSm = (HICON)LoadImageW(shell32_hInstance,
MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT),
IMAGE_ICON,
@@ -459,7 +474,7 @@
}
if (ShellBigIconList)
- {
+ {
hLg = (HICON)LoadImageW(shell32_hInstance,
MAKEINTRESOURCEW(IDI_SHELL_DOCUMENT),
IMAGE_ICON,
@@ -470,7 +485,7 @@
{
ERR("Failed to load IDI_SHELL_DOCUMENT icon2!\n");
DestroyIcon(hSm);
- return FALSE;
+ return FALSE;
}
}
else
@@ -482,9 +497,9 @@
SIC_IconAppend(swShell32Name, IDI_SHELL_DOCUMENT-1, hSm, hLg, 0);
SIC_IconAppend(swShell32Name, -IDI_SHELL_DOCUMENT, hSm, hLg, 0);
- TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
-
- return TRUE;
+ TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
+
+ return TRUE;
}
/*************************************************************************
* SIC_Destroy
@@ -550,7 +565,7 @@
LPWSTR p = wcschr(buffer, ',');
if (p)
- *p++ = 0;
+ *p++ = 0;
iconPath = buffer;
iconIdx = _wtoi(p);
Modified: branches/reactos-yarotows/dll/win32/ws2_32/misc/ns.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/dll/win32/ws2_…
==============================================================================
--- branches/reactos-yarotows/dll/win32/ws2_32/misc/ns.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/dll/win32/ws2_32/misc/ns.c [iso-8859-1] Thu Aug 5 21:03:35
2010
@@ -1172,11 +1172,11 @@
PCHAR SystemDirectory = ServiceDBData; /* Reuse this stack space */
PCHAR ServicesFileLocation = "\\drivers\\etc\\services";
PCHAR ThisLine = 0, NextLine = 0, ServiceName = 0, PortNumberStr = 0,
- ProtocolStr = 0, Comment = 0;
+ ProtocolStr = 0, Comment = 0, EndValid;
PCHAR Aliases[WS2_INTERNAL_MAX_ALIAS] = { 0 };
UINT i,SizeNeeded = 0,
SystemDirSize = sizeof(ServiceDBData) - 1;
- DWORD ReadSize = 0, ValidData = 0;
+ DWORD ReadSize = 0;
PWINSOCK_THREAD_BLOCK p = NtCurrentTeb()->WinSockData;
if( !p )
@@ -1215,43 +1215,56 @@
WSASetLastError( WSANO_RECOVERY );
return NULL;
}
-
+
/* Scan the services file ...
- *
- * We will read up to BUFSIZ bytes per pass, until the buffer does not
- * contain a full line, then we will try to read more.
- *
- * We fall from the loop if the buffer does not have a line terminator.
- */
-
+ *
+ * We will be share the buffer on the lines. If the line does not fit in
+ * the buffer, then moving it to the beginning of the buffer and read
+ * the remnants of line from file.
+ */
+
/* Initial Read */
- while(!Found &&
- ReadFile(ServicesFile,
- ServiceDBData + ValidData,
- sizeof( ServiceDBData ) - ValidData,
- &ReadSize,
- NULL))
- {
- ValidData += ReadSize;
- ReadSize = 0;
- NextLine = ThisLine = ServiceDBData;
-
- /* Find the beginning of the next line */
- while(NextLine < ServiceDBData + ValidData &&
- *NextLine != '\r' && *NextLine != '\n' )
+ ReadFile(ServicesFile,
+ ServiceDBData,
+ sizeof( ServiceDBData ) - 1,
+ &ReadSize, NULL );
+ ThisLine = NextLine = ServiceDBData;
+ EndValid = ServiceDBData + ReadSize;
+ ServiceDBData[sizeof(ServiceDBData) - 1] = '\0';
+
+ while(ReadSize)
+ {
+ for(; *NextLine != '\r' && *NextLine != '\n';
NextLine++)
{
- NextLine++;
+ if(NextLine == EndValid)
+ {
+ int LineLen = NextLine - ThisLine;
+
+ if(ThisLine == ServiceDBData)
+ {
+ WS_DbgPrint(MIN_TRACE,("Line too long"));
+ WSASetLastError( WSANO_RECOVERY );
+ return NULL;
+ }
+
+ memmove(ServiceDBData, ThisLine, LineLen);
+
+ ReadFile(ServicesFile, ServiceDBData + LineLen,
+ sizeof( ServiceDBData )-1 - LineLen,
+ &ReadSize, NULL );
+
+ EndValid = ServiceDBData + LineLen + ReadSize;
+ NextLine = ServiceDBData + LineLen;
+ ThisLine = ServiceDBData;
+
+ if(!ReadSize) break;
+ }
}
-
- /* Zero and skip, so we can treat what we have as a string */
- if( NextLine > ServiceDBData + ValidData )
- break;
-
- *NextLine = 0; NextLine++;
-
+
+ *NextLine = '\0';
Comment = strchr( ThisLine, '#' );
- if( Comment ) *Comment = 0; /* Terminate at comment start */
-
+ if( Comment ) *Comment = '\0'; /* Terminate at comment start */
+
if(DecodeServEntFromString(ThisLine,
&ServiceName,
&PortNumberStr,
@@ -1268,22 +1281,8 @@
(NextLine - ThisLine);
break;
}
-
- /* Get rid of everything we read so far */
- while( NextLine <= ServiceDBData + ValidData &&
- isspace( *NextLine ) )
- {
- NextLine++;
- }
-
- WS_DbgPrint(MAX_TRACE,("About to move %d chars\n",
- ServiceDBData + ValidData - NextLine));
-
- memmove(ServiceDBData,
- NextLine,
- ServiceDBData + ValidData - NextLine );
- ValidData -= NextLine - ServiceDBData;
- WS_DbgPrint(MAX_TRACE,("Valid bytes: %d\n", ValidData));
+ NextLine++;
+ ThisLine = NextLine;
}
/* This we'll do no matter what */
Modified: branches/reactos-yarotows/drivers/filesystems/fastfat/create.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/drivers/filesy…
==============================================================================
--- branches/reactos-yarotows/drivers/filesystems/fastfat/create.c [iso-8859-1]
(original)
+++ branches/reactos-yarotows/drivers/filesystems/fastfat/create.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -522,7 +522,7 @@
return(STATUS_OBJECT_NAME_INVALID);
}
}
- if (FileObject->RelatedFileObject && PathNameU.Length >
sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\')
+ if (FileObject->RelatedFileObject && PathNameU.Length >=
sizeof(WCHAR) && PathNameU.Buffer[0] == L'\\')
{
return(STATUS_OBJECT_NAME_INVALID);
}
Modified: branches/reactos-yarotows/lib/sdk/crt/misc/assert.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/lib/sdk/crt/mi…
==============================================================================
--- branches/reactos-yarotows/lib/sdk/crt/misc/assert.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/lib/sdk/crt/misc/assert.c [iso-8859-1] Thu Aug 5 21:03:35
2010
@@ -5,15 +5,68 @@
#include <stdlib.h>
#include <signal.h>
+static const char formatstr[] =
+ "Assertion failed!\n\n"
+ "Program: %s\n"
+ "File: %s\n"
+ "Line: %ld\n\n"
+ "Expression: %s\n"
+ "Press Retry to debug the application\n";
+
/*
* @implemented
*/
-void _assert(const char *msg, const char *file, unsigned line)
+void _assert(const char *exp, const char *file, unsigned line)
{
- /* Assertion failed at foo.c line 45: x<y */
- fprintf(stderr, "Assertion failed at %s line %d: %s\n", file, line, msg);
- FIXME("Assertion failed at %s line %d: %s\n", file, line, msg);
- raise(SIGABRT);
- for(;;); /* eliminate warning by mingw */
+ int (WINAPI *pMessageBoxA)(HWND, LPCTSTR, LPCTSTR, UINT);
+ HMODULE hmodUser32;
+ char achProgram[40];
+ char *pszBuffer;
+ int len;
+ int iResult;
+
+ /* Assertion failed at foo.c line 45: x<y */
+ fprintf(stderr, "Assertion failed at %s line %d: %s\n", file, line, exp);
+ FIXME("Assertion failed at %s line %d: %s\n", file, line, exp);
+
+ /* Get MessageBoxA function pointer */
+ hmodUser32 = LoadLibrary("user32.dll");
+ pMessageBoxA = GetProcAddress(hmodUser32, "MessageBoxA");
+ if (!pMessageBoxA)
+ {
+ abort();
+ }
+
+ /* Get the file name of the module */
+ len = GetModuleFileNameA(NULL, achProgram, 40);
+
+ /* Calculate full length of the message */
+ len += sizeof(formatstr) + len + strlen(exp) + strlen(file);
+
+ /* Allocate a buffer */
+ pszBuffer = malloc(len + 1);
+
+ /* Format a message */
+ _snprintf(pszBuffer, len, formatstr, achProgram, file, line, exp);
+
+ /* Display a message box */
+ iResult = pMessageBoxA(NULL,
+ pszBuffer,
+ "ReactOS C Runtime Library",
+ MB_ABORTRETRYIGNORE | MB_ICONERROR);
+
+ free(pszBuffer);
+
+ /* Does the user want to abort? */
+ if (iResult == IDABORT)
+ {
+ abort();
+ }
+
+ /* Does the user want to debug? */
+ if (iResult == IDRETRY)
+ {
+ __debugbreak();
+ }
}
Modified: branches/reactos-yarotows/media/doc/README.WINE
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/media/doc/READ…
==============================================================================
--- branches/reactos-yarotows/media/doc/README.WINE [iso-8859-1] (original)
+++ branches/reactos-yarotows/media/doc/README.WINE [iso-8859-1] Thu Aug 5 21:03:35 2010
@@ -218,7 +218,7 @@
kernel32 -
reactos/dll/win32/kernel32/misc/errormsg.c # Out of sync
reactos/dll/win32/kernel32/misc/profile.c # Out of sync
- reactos/dll/win32/kernel32/misc/lcformat.c # Out of sync
+ reactos/dll/win32/kernel32/misc/lcformat.c # Synced to Wine-1_3
reactos/dll/win32/kernel32/misc/lzexpand.c # Synced to Wine-1_1_23
msvcrt -
Modified: branches/reactos-yarotows/ntoskrnl/fsrtl/name.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/ntoskrnl/fsrtl…
==============================================================================
--- branches/reactos-yarotows/ntoskrnl/fsrtl/name.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/ntoskrnl/fsrtl/name.c [iso-8859-1] Thu Aug 5 21:03:35 2010
@@ -28,59 +28,58 @@
while (i < Name->Length / sizeof(WCHAR) && k < Expression->Length
/ sizeof(WCHAR))
{
- if ((Expression->Buffer[k] == (IgnoreCase ? UpcaseTable[Name->Buffer[i]] :
Name->Buffer[i])) ||
- (Expression->Buffer[k] == L'?') || (Expression->Buffer[k] == DOS_QM) ||
- (Expression->Buffer[k] == DOS_DOT && (Name->Buffer[i] == L'.' ||
Name->Buffer[i] == L'0')))
- {
- i++;
- k++;
- }
- else if (Expression->Buffer[k] == L'*')
- {
- if (k < Expression->Length / sizeof(WCHAR))
- {
- if (Expression->Buffer[k+1] != L'*' && Expression->Buffer[k+1]
!= L'?' &&
+ if ((Expression->Buffer[k] == (IgnoreCase ? UpcaseTable[Name->Buffer[i]] :
Name->Buffer[i])) ||
+ (Expression->Buffer[k] == L'?') || (Expression->Buffer[k] ==
DOS_QM) ||
+ (Expression->Buffer[k] == DOS_DOT && (Name->Buffer[i] ==
L'.' || Name->Buffer[i] == L'0')))
+ {
+ i++;
+ k++;
+ }
+ else if (Expression->Buffer[k] == L'*')
+ {
+ if (k < (Expression->Length / sizeof(WCHAR) - 1))
+ {
+ if (Expression->Buffer[k+1] != L'*' &&
Expression->Buffer[k+1] != L'?' &&
Expression->Buffer[k+1] != DOS_DOT && Expression->Buffer[k+1]
!= DOS_QM &&
- Expression->Buffer[k+1] != DOS_STAR)
- {
- while ((IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i]) !=
Expression->Buffer[k+1] &&
- i <= Name->Length / sizeof(WCHAR)) i++;
- }
- else
- {
- if (!(Expression->Buffer[k+1] != DOS_DOT && (Name->Buffer[i] ==
L'.' || Name->Buffer[i] == L'0')))
- {
- i++;
- }
- }
- }
- else
- {
- i = Name->Length / sizeof(WCHAR);
- }
- k++;
- }
- else if (Expression->Buffer[k] == DOS_STAR)
- {
- j = i;
- while (j <= Name->Length / sizeof(WCHAR))
- {
- if (Name->Buffer[j] == L'.')
- {
- i = j;
- }
- j++;
- }
- k++;
- }
- else
- {
- i++;
- k = 0;
- }
- }
-
- return (k == Expression->Length / sizeof(WCHAR));
+ Expression->Buffer[k+1] != DOS_STAR)
+ {
+ while ((IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i]) !=
Expression->Buffer[k+1] &&
+ i < Name->Length / sizeof(WCHAR)) i++;
+ }
+ else
+ {
+ if (!(Expression->Buffer[k+1] != DOS_DOT && (Name->Buffer[i] ==
L'.' || Name->Buffer[i] == L'0')))
+ {
+ i++;
+ }
+ }
+ }
+ else
+ {
+ i = Name->Length / sizeof(WCHAR);
+ }
+ k++;
+ }
+ else if (Expression->Buffer[k] == DOS_STAR)
+ {
+ j = i;
+ while (j < Name->Length / sizeof(WCHAR))
+ {
+ if (Name->Buffer[j] == L'.')
+ {
+ i = j;
+ }
+ j++;
+ }
+ k++;
+ }
+ else
+ {
+ i = Name->Length / sizeof(WCHAR);
+ }
+ }
+
+ return (k == Expression->Length / sizeof(WCHAR) && i == Name->Length /
sizeof(WCHAR));
}
/* PUBLIC FUNCTIONS **********************************************************/
Modified: branches/reactos-yarotows/ntoskrnl/io/pnpmgr/plugplay.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/ntoskrnl/io/pn…
==============================================================================
--- branches/reactos-yarotows/ntoskrnl/io/pnpmgr/plugplay.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/ntoskrnl/io/pnpmgr/plugplay.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -98,7 +98,7 @@
/* Remove a pnp event entry from the tail of the queue */
if (!IsListEmpty(&IopPnpEventQueueHead))
{
- ExFreePool(RemoveTailList(&IopPnpEventQueueHead));
+ ExFreePool(CONTAINING_RECORD(RemoveTailList(&IopPnpEventQueueHead),
PNP_EVENT_ENTRY, ListEntry));
}
/* Signal the next pnp event in the queue */
Propchange: branches/reactos-yarotows/subsystems/win32/csrss/win32csr/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 5 21:03:35 2010
@@ -1,4 +1,4 @@
/branches/header-work/subsystems/win32/csrss/win32csr:45691-46463
/branches/ros-amd64-bringup/reactos/subsystems/win32/csrss/win32csr:34711-34712,34741,34743,34780-34782,34803,34812,34839,34842,34864,34870,34874,34877,34908-34909,34917,34965,35323-35324,35347-35348,35361,35436,35509,35515,35588,35655,35683,35739,35746,35762,35771,35777,35781,35789,35805,35823,35827,35902,35904-35906,35942,35947-35949,35952-35953,35966,36011-36013,36172,36360,36380,36388-36389,36397,36445,36502-36503,36505,36570,36614,36898-36899,36930,36936,36949,36951,36958,36961,36964,36969,36972,36992,37323,37434,37472,37475,37536,37820-37821,37868-37869,37873,37990-37991,38013-38014,38092,38100,38148-38151,38264-38265,38268,38355,39151,39333,39335,39345,39639,40122-40123,40125,40128,40155,40247,40324,40753,40927-40928,40986-40987,40989,40991,40993,40995-40996,41000-41001,41027-41030,41044-41045,41047-41050,41052,41070,41082-41086,41097-41098,41101,41449,41479,41484-41485,41499-41500,41502,41531,41536,41540,41546-41547,41549,43080,43426,43454,43506,43566,43574,43598,43600-43602,43604-43605,43677,43682,43757,43775,43836,43838-43840,43857-43858,43860,43905-43907,43969,44002,44036-44037,44039-44040,44044-44045,44065,44095,44123,44144,44205,44238,44294,44338-44339,44389,44391,44426,44460,44467-44468,44470-44471,44499,44501,44503-44504,44506,44510-44512,44521,44523-44526,44530,44540,44601,44772,45124,45126-45127,46394,46478,46511,46524,46526,46534-46535,46537-46539,46589
/branches/ros-amd64-bringup/subsystems/win32/csrss/win32csr:36852
-/trunk/reactos/subsystems/win32/csrss/win32csr:45219-48417
+/trunk/reactos/subsystems/win32/csrss/win32csr:45219-48463
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/xlate.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/eng/xlate.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/eng/xlate.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -65,10 +65,10 @@
ULONG iNewColor;
/* Copy green */
- iNewColor = iColor & 0x00ff00;
+ iNewColor = iColor & 0xff00ff00;
/* Mask red and blue */
- iColor &= 0xff00ff;
+ iColor &= 0x00ff00ff;
/* Shift and copy red and blue */
iNewColor |= iColor >> 16;
Modified: branches/reactos-yarotows/subsystems/win32/win32k/include/text.h
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/include/text.h [iso-8859-1]
(original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/include/text.h [iso-8859-1] Thu Aug
5 21:03:35 2010
@@ -96,7 +96,7 @@
ULONG FASTCALL
ftGdiGetGlyphOutline(PDC,WCHAR,UINT,LPGLYPHMETRICS,ULONG,PVOID,LPMAT2,BOOL);
INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI,UINT,OUTLINETEXTMETRICW *);
BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS);
-BOOL FASTCALL
TextIntGetTextExtentPoint(PDC,PTEXTOBJ,LPCWSTR,int,int,LPINT,LPINT,LPSIZE);
+BOOL FASTCALL
TextIntGetTextExtentPoint(PDC,PTEXTOBJ,LPCWSTR,INT,ULONG,LPINT,LPINT,LPSIZE);
BOOL FASTCALL ftGdiGetTextMetricsW(HDC,PTMW_INTERNAL);
DWORD FASTCALL IntGetFontLanguageInfo(PDC);
INT FASTCALL ftGdiGetTextCharsetInfo(PDC,PFONTSIGNATURE,DWORD);
Modified: branches/reactos-yarotows/subsystems/win32/win32k/misc/copy.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/misc/copy.c [iso-8859-1] (original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/misc/copy.c [iso-8859-1] Thu Aug 5
21:03:35 2010
@@ -5,7 +5,7 @@
_SEH2_TRY
{
- /* ProbeForRead(Source,Bytes,1); */
+ ProbeForRead(Source,Bytes,1);
RtlCopyMemory(Target,Source,Bytes);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
Modified: branches/reactos-yarotows/subsystems/win32/win32k/ntuser/callback.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/ntuser/callback.c [iso-8859-1]
(original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/ntuser/callback.c [iso-8859-1] Thu
Aug 5 21:03:35 2010
@@ -267,7 +267,16 @@
if (NT_SUCCESS(Status))
{
/* Simulate old behaviour: copy into our local buffer */
- Result = *(LRESULT*)ResultPointer;
+ _SEH2_TRY
+ {
+ ProbeForRead(ResultPointer, sizeof(LRESULT), 1);
+ Result = *(LRESULT*)ResultPointer;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Result = 0;
+ }
+ _SEH2_END
}
UserEnterCo();
Modified: branches/reactos-yarotows/subsystems/win32/win32k/objects/freetype.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/objects/freetype.c [iso-8859-1]
(original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/objects/freetype.c [iso-8859-1] Thu
Aug 5 21:03:35 2010
@@ -2119,8 +2119,8 @@
TextIntGetTextExtentPoint(PDC dc,
PTEXTOBJ TextObj,
LPCWSTR String,
- int Count,
- int MaxExtent,
+ INT Count,
+ ULONG MaxExtent,
LPINT Fit,
LPINT Dx,
LPSIZE Size)