Fixed FIXME in EnumTimeFormats32W
Added support for FONTSIGNATURE in GetLocaleInfo32A and updated
GetLocaleInfo32W.

diff --git a/ole/nls/enu.nls b/ole/nls/enu.nls
index 65e317a..8bd3a91 100644
--- a/ole/nls/enu.nls
+++ b/ole/nls/enu.nls
@@ -107,6 +107,6 @@
 LOCVAL(LOCALE_IPOSSEPBYSPACE, "0")
 LOCVAL(LOCALE_INEGSYMPRECEDES, "1")
 LOCVAL(LOCALE_INEGSEPBYSPACE, "0")
-/* LOCVAL(LOCALE_FONTSIGNATURE, "") */
+LOCVAL(LOCALE_FONTSIGNATURE,"\xaf\x00\x00\x80\xcb\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x80")
 LOCVAL(LOCALE_SISO639LANGNAME,"en")
 LOCVAL(LOCALE_SISO3166CTRYNAME,"US")
diff --git a/ole/ole2nls.c b/ole/ole2nls.c
index 4660a17..85c4a04 100644
--- a/ole/ole2nls.c
+++ b/ole/ole2nls.c
@@ -639,6 +639,10 @@
  *
  * NOTES 
  *  LANG_NEUTRAL is equal to LOCALE_SYSTEM_DEFAULT
+ *
+ *  MS online documentation states that the string returned is NULL terminated
+ *  except for LOCALE_FONTSIGNATURE  which "will return a non-NULL
+ *  terminated string".
  */
 INT32 WINAPI GetLocaleInfo32A(LCID lcid,LCTYPE LCType,LPSTR buf,INT32 len)
 {
@@ -713,16 +717,24 @@
 		SetLastError(ERROR_INVALID_PARAMETER);
 		return 0;			
 	}
-	/* if len=0 return only the length, don't touch the buffer*/
-	if (len)
-		lstrcpyn32A(buf,retString,len);
-
-	return strlen(retString)+1;
+    /* a FONTSIGNATURE is not a string, just 6 DWORDs  */
+    if (LCType == LOCALE_FONTSIGNATURE) {
+        if (len)
+            memcpy(buf, retString, (len<=sizeof(FONTSIGNATURE))?len:sizeof(FONTSIGNATURE));
+        return sizeof(FONTSIGNATURE);
+    }
+    /* if len=0 return only the length, don't touch the buffer*/
+    if (len) lstrcpyn32A(buf,retString,len);
+    return strlen(retString)+1;
 }
 
 /******************************************************************************
  *		GetLocaleInfo32W	[KERNEL32.343]
  *
+ * NOTES
+ *  MS documentation states that len "specifies the size, in bytes (ANSI version)
+ *  or characters (Unicode version), of" wbuf. Thus the number returned is
+ *  the same between GetLocaleInfo32W and GetLocaleInfo32A.
  */
 INT32 WINAPI GetLocaleInfo32W(LCID lcid,LCTYPE LCType,LPWSTR wbuf,INT32 len)
 {	WORD wlen;
@@ -734,10 +746,10 @@
 	}
 
 	abuf = (LPSTR)HeapAlloc(GetProcessHeap(),0,len);
-	wlen = 2 * GetLocaleInfo32A(lcid, LCType, abuf, len);
+	wlen = GetLocaleInfo32A(lcid, LCType, abuf, len);
 
 	if (wlen && len)	/* if len=0 return only the length*/
-	  lstrcpynAtoW(wbuf,abuf,len/2);
+	  lstrcpynAtoW(wbuf,abuf,len);
 
 	HeapFree(GetProcessHeap(),0,abuf);
 	return wlen;
@@ -2990,7 +3002,7 @@
 BOOL32 WINAPI EnumTimeFormats32W(
   TIMEFMT_ENUMPROC32W lpTimeFmtEnumProc, LCID Locale, DWORD dwFlags)
 {
-  FIXME(ole, "(%p,%ld,%ld): stub", lpTimeFmtEnumProc, Locale, dwFlags);
+  FIXME(ole, "(%p,%ld,%ld): stub\n", lpTimeFmtEnumProc, Locale, dwFlags);
   SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
   return FALSE;
 }