Author: cwittich
Date: Fri Sep  9 17:22:29 2016
New Revision: 72633

URL: http://svn.reactos.org/svn/reactos?rev=72633&view=rev
Log:
[CRT] sync strxfrm.c to wine-1.9.16

Modified:
    trunk/reactos/media/doc/README.WINE
    trunk/reactos/sdk/lib/crt/string/strxfrm.c

Modified: trunk/reactos/media/doc/README.WINE
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=72633&r1=72632&r2=72633&view=diff
==============================================================================
--- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original)
+++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Fri Sep  9 17:22:29 2016
@@ -297,6 +297,7 @@
   reactos/sdk/lib/crt/string/strtok.c           # Synced to WineStaging-1.9.16
   reactos/sdk/lib/crt/string/strtok_s.c         # Synced to WineStaging-1.9.16
   reactos/sdk/lib/crt/string/strtoul.c          # Synced to WineStaging-1.9.9
+  reactos/sdk/lib/crt/string/strxfrm.c          # Synced to Wine-1.9.16
   reactos/sdk/lib/crt/string/wcs.c              # Synced at 20080611
   reactos/sdk/lib/crt/string/wctype.c           # Synced at WineStaging-1.9.16
   reactos/sdk/lib/crt/wine/heap.c               # Synced at 20080529

Modified: trunk/reactos/sdk/lib/crt/string/strxfrm.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/crt/string/strxfrm.c?rev=72633&r1=72632&r2=72633&view=diff
==============================================================================
--- trunk/reactos/sdk/lib/crt/string/strxfrm.c  [iso-8859-1] (original)
+++ trunk/reactos/sdk/lib/crt/string/strxfrm.c  [iso-8859-1] Fri Sep  9 
17:22:29 2016
@@ -1,33 +1,55 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS system libraries
- * FILE:        lib/sdk/crt/string/strxfrm.c
- * PURPOSE:     Unknown
- * PROGRAMER:   Unknown
- * UPDATE HISTORY:
- *              25/11/05: Added license header
- */
-
 #include <precomp.h>
 
-#if 1
-/*
- * @implemented
+#include <locale.h>
+#include <internal/wine/msvcrt.h>
+
+size_t CDECL _strxfrm_l( char *dest, const char *src,
+        size_t len, _locale_t locale )
+{
+    MSVCRT_pthreadlocinfo locinfo;
+    int ret;
+
+    if(!MSVCRT_CHECK_PMT(src)) return INT_MAX;
+    if(!MSVCRT_CHECK_PMT(dest || !len)) return INT_MAX;
+
+    if(len > INT_MAX) {
+        FIXME("len > INT_MAX not supported\n");
+        len = INT_MAX;
+    }
+
+    if(!locale)
+        locinfo = get_locinfo();
+    else
+        locinfo = ((MSVCRT__locale_t)locale)->locinfo;
+
+    if(!locinfo->lc_handle[MSVCRT_LC_COLLATE]) {
+        strncpy(dest, src, len);
+        return strlen(src);
+    }
+
+    ret = LCMapStringA(locinfo->lc_handle[MSVCRT_LC_COLLATE],
+            LCMAP_SORTKEY, src, -1, NULL, 0);
+    if(!ret) {
+        if(len) dest[0] = 0;
+        *_errno() = EILSEQ;
+        return INT_MAX;
+    }
+    if(!len) return ret-1;
+
+    if(ret > len) {
+        dest[0] = 0;
+        *_errno() = ERANGE;
+        return ret-1;
+    }
+
+    return LCMapStringA(locinfo->lc_handle[MSVCRT_LC_COLLATE],
+            LCMAP_SORTKEY, src, -1, dest, len) - 1;
+}
+
+/*********************************************************************
+ *             strxfrm (MSVCRT.@)
  */
-size_t strxfrm( char *dest, const char *src, size_t n )
+size_t CDECL strxfrm( char *dest, const char *src, size_t len )
 {
-   strncpy(dest, src, n);
-   return strnlen(src, n);
+    return _strxfrm_l(dest, src, len, NULL);
 }
-#else
-size_t strxfrm( char *dest, const char *src, size_t n )
-{
-       int ret = LCMapStringA(LOCALE_USER_DEFAULT,LCMAP_LOWERCASE,
-                           src, strlen(src), dest, strlen(dest));
-
-       if ( ret == 0 )
-               return -1;
-       return ret;
-
-}
-#endif


Reply via email to