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);
+ }
+
}