Author: joes
Date: Mon Apr 11 08:02:51 2005
New Revision: 160897

URL: http://svn.apache.org/viewcvs?view=rev&rev=160897
Log:
Add apreq_cp1252_to_utf8().

Modified:
    httpd/apreq/branches/multi-env-unstable/CHANGES
    httpd/apreq/branches/multi-env-unstable/include/apreq_util.h
    httpd/apreq/branches/multi-env-unstable/library/t/util.c
    httpd/apreq/branches/multi-env-unstable/library/util.c

Modified: httpd/apreq/branches/multi-env-unstable/CHANGES
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/branches/multi-env-unstable/CHANGES?view=diff&r1=160896&r2=160897
==============================================================================
--- httpd/apreq/branches/multi-env-unstable/CHANGES (original)
+++ httpd/apreq/branches/multi-env-unstable/CHANGES Mon Apr 11 08:02:51 2005
@@ -4,9 +4,11 @@
 
 @section v2_05_dev Changes with libapreq2-2.05-dev
 
+- C API [joes]
+  Add apreq_cp_1252_to_utf8().
 
 - C API [joes]
-  Add utf8 charset flag for params.
+  Add charset support for params.
 
 - C API [joes]
   Replace v->size with v->nlen + v->dlen.

Modified: httpd/apreq/branches/multi-env-unstable/include/apreq_util.h
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/branches/multi-env-unstable/include/apreq_util.h?view=diff&r1=160896&r2=160897
==============================================================================
--- httpd/apreq/branches/multi-env-unstable/include/apreq_util.h (original)
+++ httpd/apreq/branches/multi-env-unstable/include/apreq_util.h Mon Apr 11 
08:02:51 2005
@@ -109,10 +109,24 @@
  * @param src  Original string.
  * @param slen Length of original string.
  *
- * @return length of url-encoded string in dest.
+ * @return length of url-encoded string in dest; does not exceed 3 * slen.
  */
 APREQ_DECLARE(apr_size_t) apreq_encode(char *dest, const char *src, 
                                        const apr_size_t slen);
+
+/**
+ * Convert a string from cp1252 to utf8.  Caller must ensure it is large enough
+ * to hold the encoded string and trailing '\\0'.
+ *
+ * @param dest Location of utf8-encoded result string. Caller must ensure it
+ *             is large enough to hold the encoded string and trailing '\\0'.
+ * @param src  Original string.
+ * @param slen Length of original string.
+ *
+ * @return length of utf8-encoded string in dest; does not exceed 3 * slen.
+ */
+APREQ_DECLARE(apr_size_t) apreq_cp1252_to_utf8(char *dest,
+                                               const char *src, apr_size_t 
slen);
 
 /**
  * Url-decodes a string.

Modified: httpd/apreq/branches/multi-env-unstable/library/t/util.c
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/branches/multi-env-unstable/library/t/util.c?view=diff&r1=160896&r2=160897
==============================================================================
--- httpd/apreq/branches/multi-env-unstable/library/t/util.c (original)
+++ httpd/apreq/branches/multi-env-unstable/library/t/util.c Mon Apr 11 
08:02:51 2005
@@ -112,6 +112,10 @@
 
 }
 
+static void test_cp1252_to_utf8(dAT)
+{
+
+}
 
 static void test_quote(dAT)
 {
@@ -167,6 +171,7 @@
         { dT(test_decode, 0) },
         { dT(test_decodev, 6) },
         { dT(test_encode, 0) },
+        { dT(test_cp1252_to_utf8, 0) },
         { dT(test_quote, 0) },
         { dT(test_quote_once, 0), },
         { dT(test_join, 0) },

Modified: httpd/apreq/branches/multi-env-unstable/library/util.c
URL: 
http://svn.apache.org/viewcvs/httpd/apreq/branches/multi-env-unstable/library/util.c?view=diff&r1=160896&r2=160897
==============================================================================
--- httpd/apreq/branches/multi-env-unstable/library/util.c (original)
+++ httpd/apreq/branches/multi-env-unstable/library/util.c Mon Apr 11 08:02:51 
2005
@@ -183,6 +183,36 @@
     return c;
 }
 
+/* converts cp1252 to utf8 */
+APREQ_DECLARE(apr_size_t) apreq_cp1252_to_utf8(char *dest,
+                                               const char *src, apr_size_t 
slen)
+{
+    const unsigned char *s = (unsigned const char *)src;
+    const unsigned char *end = s + slen;
+    unsigned char *d = (unsigned char *)dest;
+    apr_uint16_t c;
+
+    while (s < end) {
+        c = cp1252_to_bmp(*s++);
+        
+        if (c < 0x80) {
+            *d++ = c;
+        }
+        else if (c < 0x800) {
+            *d++ = 0xC0 | (c >> 6);
+            *d++ = 0x80 | (c & 0x3F);
+        }
+        else {
+            *d++ = 0xE0 | (c >> 12);
+            *d++ = 0x80 | ((c >> 6) & 0x3F);
+            *d++ = 0x80 | (c & 0x3F);
+        }
+    }
+    *d = 0;
+    return d - (unsigned char *)dest;
+}
+
+
 /**
  * Valid utf8 bit patterns:
  *


Reply via email to