]> pd.if.org Git - pdclib/blobdiff - functions/uchar/mbrtoc16.c
dos2unix
[pdclib] / functions / uchar / mbrtoc16.c
index 93c35fd287d94ef733aceb7e668d36d26ee41346..c44c165c9f4372cb471cd8eabec8b184444967cf 100644 (file)
@@ -1,95 +1,95 @@
-/* size_t mbrtoc16( char16_t *, const char *, size_t, mbstate_t * )\r
-\r
-   This file is part of the Public Domain C Library (PDCLib).\r
-   Permission is granted to use, modify, and / or redistribute at will.\r
-*/\r
-\r
-#ifndef REGTEST\r
-#include <uchar.h>\r
-#include <errno.h>\r
-#include <stdint.h>\r
-#include <assert.h>\r
-#include "_PDCLIB_encoding.h"\r
-#include "_PDCLIB_locale.h"\r
-\r
-size_t mbrtoc16_l(\r
-    char16_t    *restrict   pc16,\r
-    const char  *restrict   s, \r
-    size_t                  n,\r
-    mbstate_t   *restrict   ps,\r
-    locale_t     restrict   l\r
-)\r
-{\r
-    size_t dstlen = 1;\r
-    size_t nr = n;\r
-\r
-    if(!l->_Codec->__mbstoc16s) {\r
-        // No UTF-16 support in codec. Must synthesize on top of UCS-4 support.\r
-\r
-        if(ps->_Surrogate) {\r
-            // If a pending surrogate is stored in the state\r
-            *pc16 = ps->_Surrogate;\r
-            ps->_Surrogate = 0;\r
-            return (size_t) -3;\r
-        }\r
-\r
-        char32_t c32;\r
-        size_t res = mbrtoc32_l(&c32, s, n, ps, l);\r
-        if(res != (size_t) -1) {\r
-            // Conversion was successful. Check for surrogates\r
-            if(c32 <= 0xFFFF) {\r
-                // BMP char\r
-                *pc16 = c32;\r
-            } else {\r
-                // Supplementary char\r
-                *pc16 = 0xD800 | (c32 >> 10);\r
-                ps->_Surrogate = 0xDC00 | (c32 & 0x3FF);\r
-            }\r
-        }\r
-        return res;\r
-    } else if(l->_Codec->__mbstoc16s(&pc16, &dstlen, &s, &nr, ps)) {\r
-        // Successful conversion\r
-        if(dstlen == 0) {\r
-            // A character was output\r
-            if(nr == n) {\r
-                // The output character resulted entirely from stored state\r
-                return (size_t) -3;\r
-            } else if(pc16[-1] == 0) {\r
-                // Was null character\r
-                return 0;\r
-            } else {\r
-                // Count of processed characters\r
-                return n - nr;\r
-            }\r
-        } else {\r
-            assert(nr == 0 && "Must have processed whole input");\r
-            return (size_t) -2;\r
-        }\r
-    } else {\r
-        // Failed conversion\r
-        errno = EILSEQ;\r
-        return (size_t) -1;\r
-    }\r
-}\r
-\r
-size_t mbrtoc16(\r
-    char16_t    *restrict   pc16,\r
-    const char  *restrict   s, \r
-    size_t                  n,\r
-    mbstate_t   *restrict   ps\r
-)\r
-{\r
-    return mbrtoc16_l(pc16, s, n, ps, _PDCLIB_threadlocale());\r
-}\r
-\r
-#endif\r
-\r
-#ifdef TEST\r
-#include "_PDCLIB_test.h"\r
-\r
-int main( void )\r
-{\r
-    TESTCASE( NO_TESTDRIVER );\r
-    return TEST_RESULTS;\r
-}\r
-#endif\r
+/* size_t mbrtoc16( char16_t *, const char *, size_t, mbstate_t * )
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#ifndef REGTEST
+#include <uchar.h>
+#include <errno.h>
+#include <stdint.h>
+#include <assert.h>
+#include "_PDCLIB_encoding.h"
+#include "_PDCLIB_locale.h"
+
+size_t mbrtoc16_l(
+    char16_t    *restrict   pc16,
+    const char  *restrict   s, 
+    size_t                  n,
+    mbstate_t   *restrict   ps,
+    locale_t     restrict   l
+)
+{
+    size_t dstlen = 1;
+    size_t nr = n;
+
+    if(!l->_Codec->__mbstoc16s) {
+        // No UTF-16 support in codec. Must synthesize on top of UCS-4 support.
+
+        if(ps->_Surrogate) {
+            // If a pending surrogate is stored in the state
+            *pc16 = ps->_Surrogate;
+            ps->_Surrogate = 0;
+            return (size_t) -3;
+        }
+
+        char32_t c32;
+        size_t res = mbrtoc32_l(&c32, s, n, ps, l);
+        if(res != (size_t) -1) {
+            // Conversion was successful. Check for surrogates
+            if(c32 <= 0xFFFF) {
+                // BMP char
+                *pc16 = c32;
+            } else {
+                // Supplementary char
+                *pc16 = 0xD800 | (c32 >> 10);
+                ps->_Surrogate = 0xDC00 | (c32 & 0x3FF);
+            }
+        }
+        return res;
+    } else if(l->_Codec->__mbstoc16s(&pc16, &dstlen, &s, &nr, ps)) {
+        // Successful conversion
+        if(dstlen == 0) {
+            // A character was output
+            if(nr == n) {
+                // The output character resulted entirely from stored state
+                return (size_t) -3;
+            } else if(pc16[-1] == 0) {
+                // Was null character
+                return 0;
+            } else {
+                // Count of processed characters
+                return n - nr;
+            }
+        } else {
+            assert(nr == 0 && "Must have processed whole input");
+            return (size_t) -2;
+        }
+    } else {
+        // Failed conversion
+        errno = EILSEQ;
+        return (size_t) -1;
+    }
+}
+
+size_t mbrtoc16(
+    char16_t    *restrict   pc16,
+    const char  *restrict   s, 
+    size_t                  n,
+    mbstate_t   *restrict   ps
+)
+{
+    return mbrtoc16_l(pc16, s, n, ps, _PDCLIB_threadlocale());
+}
+
+#endif
+
+#ifdef TEST
+#include "_PDCLIB_test.h"
+
+int main( void )
+{
+    TESTCASE( NO_TESTDRIVER );
+    return TEST_RESULTS;
+}
+#endif