src/solaris/native/java/io/io_util_md.c

Print this page

        

@@ -32,41 +32,29 @@
 
 #ifdef MACOSX
 
 #include <CoreFoundation/CoreFoundation.h>
 
-static inline char *convertToNFD(const char *path, char *buf, size_t bufsize)
-{
-    CFMutableStringRef mutable = CFStringCreateMutable(NULL, 0);
-    CFStringAppendCString(mutable, path, kCFStringEncodingUTF8);
-    CFStringNormalize(mutable, kCFStringNormalizationFormD);
-
-    CFStringGetCString(mutable, buf, bufsize, kCFStringEncodingUTF8);
-
-    CFRelease(mutable);
-    return buf;
-}
-
-/* Converts the path to NFD form if it was in NFC form. Returns a pointer to
- * the converting string which could be buf (if the converstion took place) or
- * origPath if no conversion was needed
- */
 __private_extern__
-char* convertToNFDIfNeeded(const char *origPath, char *buf, size_t bufsize)
+jstring newStringPlatform(JNIEnv *env, const char* str)
 {
-    const char *current = origPath;
-    int c;
-    for (c = *current; c != 0; current++, c = *current) {
-        if (c < 0) {
-            // Need to convert
-            return convertToNFD(origPath, buf, bufsize);
+    jstring rv = NULL;
+    CFMutableStringRef csref = CFStringCreateMutable(NULL, 0);
+    CFStringAppendCString(csref, str, kCFStringEncodingUTF8);
+    CFStringNormalize(csref, kCFStringNormalizationFormC);
+    int clen = CFStringGetLength(csref);
+    int ulen = (clen + 1) * 2;        // utf16 + zero padding
+    char* chars = malloc(ulen);
+    if (chars != NULL) {
+        if (CFStringGetCString(csref, chars, ulen, kCFStringEncodingUTF16)) {
+            rv = (*env)->NewString(env, (jchar*)chars, clen);
         }
+        free(chars);
     }
-
-    return (char *)origPath;
+    CFRelease(csref);
+    return rv;
 }
-
 #endif
 
 void
 fileOpen(JNIEnv *env, jobject this, jstring path, jfieldID fid, int flags)
 {