You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/04/30 23:38:12 UTC

svn commit: r1098174 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/ native/ native/include/acr/ native/shared/ test/org/apache/commons/runtime/

Author: mturk
Date: Sat Apr 30 21:38:12 2011
New Revision: 1098174

URL: http://svn.apache.org/viewvc?rev=1098174&view=rev
Log:
More internal methods

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Unsafe.java
    commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
    commons/sandbox/runtime/trunk/src/main/native/include/acr/stddefs.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h
    commons/sandbox/runtime/trunk/src/main/native/shared/native.c
    commons/sandbox/runtime/trunk/src/main/native/shared/string.c
    commons/sandbox/runtime/trunk/src/main/native/shared/unsafe.c
    commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestString.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Unsafe.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Unsafe.java?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Unsafe.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Unsafe.java Sat Apr 30 21:38:12 2011
@@ -36,6 +36,15 @@ public final class Unsafe
     private static native int    getOffset0(Field f);
     private static native int    getOffset1(Field f);
     private static native int    getBase0(Field f);
+    
+    private static native int    getSd0(long ptr);
+    private static native long   getSd1(long ptr);
+    private static native short  getSd2(long ptr);
+    private static native double getSd3(long ptr);
+    private static native String getSd4(long ptr);
+    private static native String getSd5(long ptr);
+    private static native char[] getSd6(long ptr);
+
     static {
         unsafe = init0();
     }

Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Sat Apr 30 21:38:12 2011
@@ -175,7 +175,7 @@ depend: prepdep $(DEPOBJECTS)
 clean:
 	@for %i in ($(SRCDIRS)) do @$(RM) %%i\*.obj 2>NUL
 	@for %i in ($(SRCDIRS)) do @$(RM) %%i\*.res 2>NUL
-	@$(RMDIR) $(OUTLIBDIR) 2>NUL
+	@$(RMDIR) $(OUTLIBDIR) >NUL 2>&1
 	@echo Cleaned.
 
 distclean: clean

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/stddefs.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/stddefs.h?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/stddefs.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/stddefs.h Sat Apr 30 21:38:12 2011
@@ -159,9 +159,12 @@
 
 #if defined(offsetof) && !defined(__cplusplus)
 # define ACR_OFFSETOF(T, F)  offsetof(T, F)
+# define IOFFSETOF(T, F)     (int)offsetof(T, F)
 #else
 # define ACR_OFFSETOF(T, F) \
-            ((size_t)(((char *)(&(((T *)0)->F))) - ((char *)0)))
+            ((size_t)(ptrdiff_t)(((char *)(&(((T *)0)->F))) - ((char *)0)))
+# define IOFFSETOF(T, F) \
+            ((int)(ptrdiff_t)(((char *)(&(((T *)0)->F))) - ((char *)0)))
 #endif
 /** Number of elements in static array */
 #define ACR_COUNTOF(a)      (sizeof((a)) / sizeof((a)[0]))
@@ -271,8 +274,8 @@
 #define IS_VALID_STR(s)      ((s) != 0 && *(s) != '\0')
 #define IS_EMPTY_WCS(s)      ((s) == 0 || *(s) == L'\0')
 #define IS_VALID_WCS(s)      ((s) != 0 && *(s) != L'\0')
-#define ISIZEOF(s)           ((int)sizeof(s))
-#define TSIZEOF(t, s)        ((t)sizeof(s))
+#define ISIZEOF(s)           (int)sizeof(s)
+#define TSIZEOF(t, s)        (t)sizeof(s)
 
 #define ACR_OS_WINDOWS          0x10000
 #define ACR_OS_WIN64            0x10010

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/string.h Sat Apr 30 21:38:12 2011
@@ -203,6 +203,8 @@ AcrGetJavaStringArrayA(JNI_STDENV, jobje
 wchar_t **
 AcrGetJavaStringArrayW(JNI_STDENV, jobjectArray arr);
 
+jcharArray
+AcrNewJavaMszArrayW(JNI_STDENV, const wchar_t *s);
 
 #ifdef __cplusplus
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/native.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/native.c?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/native.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/native.c Sat Apr 30 21:38:12 2011
@@ -43,4 +43,3 @@ ACR_JNI_EXPORT(void, Native, fini0)(JNI_
         _loaded = JNI_FALSE;
     }
 }
-

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/string.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/string.c?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/string.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/string.c Sat Apr 30 21:38:12 2011
@@ -153,7 +153,7 @@ AcrGetNativeCodePage(const char *cs)
     return ACR_CP_DEFAULT;
 }
 
-static char *get_string_iso_8859_1(JNIEnv *env, jstring str, char *b)
+static char *get_string_iso_8859_1(JNI_STDENV, jstring str, char *b)
 {
     jsize sl;
     const jchar *sr;
@@ -655,8 +655,36 @@ static int java_utf8_to_ucs2(const char 
     return ACR_SUCCESS;
 }
 
+static int wcszlen(const wchar_t *str, int *n)
+{
+    int   c = 0;
+    int len = 0;
+    const wchar_t *s;
+
+    if (str == 0)
+        return 0;
+    if (*str == 0) {
+        if (n != 0)
+            *n = 0;
+        return 2;
+    }
+    for (s = str; *s != 0; s++) {
+        int p = 0;
+        c++;
+        while (*s != 0) {
+            s++;
+            p++;
+        }
+        p++;
+        len += p;
+    }
+    if (n != 0)
+        *n = c;
+    return len + 1;
+}
+
 jchar *
-AcrUtf8ToUcs2(JNIEnv *env, const char *str)
+AcrUtf8ToUcs2(JNI_STDENV, const char *str)
 {
     int rc;
     jsize len, out;
@@ -676,7 +704,7 @@ AcrUtf8ToUcs2(JNIEnv *env, const char *s
 }
 
 wchar_t *
-AcrUtf8ToWcs(JNIEnv *env, const char *str)
+AcrUtf8ToWcs(JNI_STDENV, const char *str)
 {
     int rc;
     size_t len, out;
@@ -696,7 +724,7 @@ AcrUtf8ToWcs(JNIEnv *env, const char *st
 }
 
 char *
-AcrUsc2ToUtf8(JNIEnv *env, const jchar *str, jsize len)
+AcrUsc2ToUtf8(JNI_STDENV, const jchar *str, jsize len)
 {
     int rc;
     jsize out;
@@ -715,7 +743,7 @@ AcrUsc2ToUtf8(JNIEnv *env, const jchar *
     return dst;
 }
 
-static char *get_string_utf_8(JNIEnv *env, jstring str, char *b)
+static char *get_string_utf_8(JNI_STDENV, jstring str, char *b)
 {
     jsize sl, nl;
     const jchar *sr;
@@ -759,7 +787,7 @@ static char *get_string_utf_8(JNIEnv *en
     return rv;
 }
 
-static char *get_string_default(JNIEnv *env, jstring str, char *b)
+static char *get_string_default(JNI_STDENV, jstring str, char *b)
 {
     jbyteArray sb = 0;
     char *rv = 0;
@@ -795,7 +823,7 @@ static char *get_string_default(JNIEnv *
     return rv;
 }
 
-static jstring new_string_zerolen(JNIEnv *env)
+static jstring new_string_zerolen(JNI_STDENV)
 {
     if (!CLAZZ_LOADED) {
         ACR_SET_OS_ERROR(ACR_EINIT);
@@ -803,7 +831,7 @@ static jstring new_string_zerolen(JNIEnv
     }
     return (*env)->NewObject(env, _clazzn.i, J4MID(0000));
 }
-static jstring new_string_default(JNIEnv *env, const char *str)
+static jstring new_string_default(JNI_STDENV, const char *str)
 {
     jstring    rs;
     jbyteArray ba;
@@ -827,7 +855,7 @@ static jstring new_string_default(JNIEnv
     return 0;
 }
 
-static jstring new_string_iso_8859_1(JNIEnv *env, const char *s)
+static jstring new_string_iso_8859_1(JNI_STDENV, const char *s)
 {
     jstring rs = 0;
     jsize sl = (jsize)strlen(s);
@@ -857,7 +885,7 @@ static jstring new_string_iso_8859_1(JNI
     return rs;
 }
 
-static jstring new_string_cp_1252(JNIEnv *env, const char *s)
+static jstring new_string_cp_1252(JNI_STDENV, const char *s)
 {
     jstring rs = 0;
     jsize sl = (jsize)strlen(s);
@@ -887,7 +915,7 @@ static jstring new_string_cp_1252(JNIEnv
     return rs;
 }
 
-static jstring new_string_utf_8(JNIEnv *env, const char *s)
+static jstring new_string_utf_8(JNI_STDENV, const char *s)
 {
     jstring rs = 0;
     int ex;
@@ -920,7 +948,7 @@ static jstring new_string_utf_8(JNIEnv *
 
 
 wchar_t *
-AcrGetJavaStringW(JNIEnv *env, jstring str, wchar_t *b)
+AcrGetJavaStringW(JNI_STDENV, jstring str, wchar_t *b)
 {
     jsize sl;
     const jchar *sr;
@@ -965,7 +993,7 @@ AcrGetJavaStringW(JNIEnv *env, jstring s
 }
 
 char *
-AcrGetJavaStringA(JNIEnv *env, jstring str, char *b)
+AcrGetJavaStringA(JNI_STDENV, jstring str, char *b)
 {
     char *rv = 0;
 
@@ -987,7 +1015,7 @@ AcrGetJavaStringA(JNIEnv *env, jstring s
 }
 
 char *
-AcrGetJavaStringU(JNIEnv *env, jstring str, char *b)
+AcrGetJavaStringU(JNI_STDENV, jstring str, char *b)
 {
     if (IS_JOBJECT_NULL(str))
         return 0;
@@ -1031,7 +1059,7 @@ cleanup:
 }
 
 jstring
-AcrNewJavaStringW(JNIEnv *env, const wchar_t *s)
+AcrNewJavaStringW(JNI_STDENV, const wchar_t *s)
 {
     jstring r = 0;
 
@@ -1066,8 +1094,46 @@ AcrNewJavaStringW(JNIEnv *env, const wch
     return r;
 }
 
+jcharArray
+AcrNewJavaMszArrayW(JNI_STDENV, const wchar_t *s)
+{
+    jcharArray r = 0;
+    int len;
+    
+    if ((len = wcszlen(s, 0)) == 0)
+        return 0;
+    if ((r = (*env)->NewCharArray(env, len)) == 0)
+        return 0;    
+#if CC_SIZEOF_WCHAR_T == 2
+     (*env)->SetCharArrayRegion(env, r, 0, len, (jchar *)s);
+#else
+    if (len < ACR_MBUFF_SIZ) {
+        jchar cc[ACR_MBUFF_SIZ];
+        int i;
+        for (i = 0; i < len; i++) {
+            /* Simply assign utf32 to utf16 */
+            cc[i] = (jchar)s[i];
+        }        
+        (*env)->SetCharArrayRegion(env, r, 0, len, cc);
+    }
+    else {
+        jchar *cc;
+        if ((cc = ACR_MALLOC(jchar, len))) {
+            int i;
+            for (i = 0; i < l; i++) {
+                /* Simply assign utf32 to utf16 */
+                cc[i] = (jchar)s[i];
+            }
+            (*env)->SetCharArrayRegion(env, r, 0, len, cc);
+            AcrFree(cc);
+        }
+    }
+#endif
+    return r;
+}
+
 jstring
-AcrNewJavaStringA(JNIEnv *env, const char *str)
+AcrNewJavaStringA(JNI_STDENV, const char *str)
 {
     jstring rv = 0;
 
@@ -1091,7 +1157,7 @@ AcrNewJavaStringA(JNIEnv *env, const cha
 }
 
 jstring
-AcrNewJavaStringU(JNIEnv *env, const char *str)
+AcrNewJavaStringU(JNI_STDENV, const char *str)
 {
     if (str == 0)
         return 0;
@@ -1195,4 +1261,18 @@ ACR_JNI_EXPORT(jint, TestString, test1)(
     AcrFree(wstr);
     return wlen;
 }
+
+ACR_JNI_EXPORT(jint, TestString, test2)(JNI_STDARGS, jcharArray c)
+{
+    int rv;
+    int len;
+    jchar *jca;
+
+    len = (*env)->GetArrayLength(env, c);
+    jca = (*env)->GetPrimitiveArrayCritical(env, c, 0);
+    rv = wcszlen(jca, 0);
+    (*env)->ReleasePrimitiveArrayCritical(env, c, jca, 0);
+    return rv;
+}
+
 #endif

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/unsafe.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/unsafe.c?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/unsafe.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/unsafe.c Sat Apr 30 21:38:12 2011
@@ -199,6 +199,48 @@ ACR_JNI_EXPORT(jint, Unsafe, getBase0)(J
     return AcrUnsafeStaticFieldBase(env, field);
 }
 
+ACR_JNI_EXPORT(jint,  Unsafe, getSd0)(JNI_STDARGS, jlong ptr)
+{
+    char *buf = J2P(ptr, char *);
+    return *((int *)buf);
+}
+
+ACR_JNI_EXPORT(jlong, Unsafe, getSd1)(JNI_STDARGS, jlong ptr)
+{
+    char *buf = J2P(ptr, char *);
+    return *((jlong *)buf);
+}
+
+ACR_JNI_EXPORT(jshort, Unsafe, getSd2)(JNI_STDARGS, jlong ptr)
+{
+    char *buf = J2P(ptr, char *);
+    return *((jshort *)buf);
+}
+
+ACR_JNI_EXPORT(jdouble, Unsafe, getSd3)(JNI_STDARGS, jlong ptr)
+{
+    char *buf = J2P(ptr, char *);
+    return *((double *)buf);
+}
+
+ACR_JNI_EXPORT(jstring, Unsafe, getSd4)(JNI_STDARGS, jlong ptr)
+{
+    char *buf = J2P(ptr, char *);
+    return AcrNewJavaStringA(env, buf);
+}
+
+ACR_JNI_EXPORT(jstring, Unsafe, getSd5)(JNI_STDARGS, jlong ptr)
+{
+    wchar_t *buf = J2P(ptr, wchar_t *);
+    return AcrNewJavaStringW(env, buf);
+}
+
+ACR_JNI_EXPORT(jcharArray, Unsafe, getSd6)(JNI_STDARGS, jlong ptr)
+{
+    wchar_t *buf = J2P(ptr, wchar_t *);
+    return AcrNewJavaMszArrayW(env, buf);
+}
+
 #if defined(ENABLE_TEST_PRIVATE)
 ACR_JNI_EXPORT(jint, TestUnsafe, test0)(JNI_STDARGS, jobject o, jint off)
 {

Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestString.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestString.java?rev=1098174&r1=1098173&r2=1098174&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestString.java (original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestString.java Sat Apr 30 21:38:12 2011
@@ -27,6 +27,7 @@ public class TestString extends Assert
     static private final byte[] gUIF = { (byte)0x5a, (byte)0x77, (byte)0xc3, (byte)0xb6, (byte)0x6c, (byte)0x66 };
     static private native int test0(String s);
     static private native int test1(String s);
+    static private native int test2(char[] c);
 
     @Test(groups = { "private" })
     public void getStrlenA()
@@ -44,4 +45,16 @@ public class TestString extends Assert
         assertEquals(test1(s), 5);
     }
 
+    @Test(groups = { "windows" })
+    public void getStrlenZ()
+        throws Exception
+    {
+        char[] a = {'a', 0, 'b', 'c', 0, 0 };
+        assertEquals(test2(a), 6);
+        char[] b = {0, 0 };
+        assertEquals(test2(b), 2);
+        char[] c = {'a', 0, 0 };
+        assertEquals(test2(c), 3);
+    }
+
 }