]> granicus.if.org Git - php/commitdiff
i18n, part I
authorSam Ruby <rubys@php.net>
Fri, 12 May 2000 09:51:16 +0000 (09:51 +0000)
committerSam Ruby <rubys@php.net>
Fri, 12 May 2000 09:51:16 +0000 (09:51 +0000)
ext/java/java.c
ext/java/reflect.java
ext/rpc/java/java.c
ext/rpc/java/reflect.java

index b7c2a4dc061f2ca0e20b358799e47cf4d3511aed..2da4ac849c9e4b02ed50ffc1ca092b348b2e12d9 100644 (file)
@@ -263,7 +263,9 @@ static jobjectArray _java_makeArray(int argc, pval** argv) {
   for (i=0; i<argc; i++) {
     switch (argv[i]->type) {
       case IS_STRING:
-        arg=(*jenv)->NewStringUTF(jenv,argv[i]->value.str.val);
+        arg=(*jenv)->NewByteArray(jenv,argv[i]->value.str.len);
+        (*jenv)->SetByteArrayRegion(jenv,(jbyteArray)arg,0,
+          argv[i]->value.str.len, argv[i]->value.str.val);
         break;
 
       case IS_OBJECT:
@@ -498,16 +500,16 @@ ZEND_GET_MODULE(java)
 /***************************************************************************/
 
 JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString
-  (JNIEnv *jenv, jclass self, jlong result, jstring value)
+  (JNIEnv *jenv, jclass self, jlong result, jbyteArray jvalue)
 {
   jboolean isCopy;
-  const char *valueAsUTF = (*jenv)->GetStringUTFChars(jenv, value, &isCopy);
+  jbyte *value = (*jenv)->GetByteArrayElements(jenv, jvalue, &isCopy);
   pval *presult = (pval*)(long)result;
   presult->type=IS_STRING;
-  presult->value.str.len=strlen(valueAsUTF);
+  presult->value.str.len=(*jenv)->GetArrayLength(jenv, jvalue);
   presult->value.str.val=emalloc(presult->value.str.len+1);
-  strcpy(presult->value.str.val, valueAsUTF);
-  if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, value, valueAsUTF);
+  strcpy(presult->value.str.val, value);
+  if (isCopy) (*jenv)->ReleaseByteArrayElements(jenv, jvalue, value, 0);
 }
 
 JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong
index b7693e907cc79405cc8f5e1adc6adfecb2694954..f2bc02a2f63585ffea75cbb0c1e1a3a67018f413 100644 (file)
@@ -38,7 +38,7 @@ class reflect {
   //
   // Native methods
   //
-  private static native void setResultFromString(long result, String value);
+  private static native void setResultFromString(long result, byte value[]);
   private static native void setResultFromLong(long result, long value);
   private static native void setResultFromDouble(long result, double value);
   private static native void setResultFromBoolean(long result, boolean value);
@@ -56,7 +56,7 @@ class reflect {
 
     if (value instanceof java.lang.String) {
 
-      setResultFromString(result, (String)value);
+      setResultFromString(result, ((String)value).getBytes());
 
     } else if (value instanceof java.lang.Number) {
 
@@ -155,6 +155,9 @@ class reflect {
             if (!c.isInstance(args[i])) break;
             weight++;
           }
+        } else if (parms[i].isInstance("")) {
+         if (!(args[i] instanceof byte[]))
+           weight+=9999;
         } else if (parms[i].isPrimitive()) {
           Class c=parms[i];
          if (args[i] instanceof Number) {
@@ -199,7 +202,9 @@ class reflect {
     Object result[] = args;
     for (int i=0; i<args.length; i++) {
       if (parms[i].isInstance(args[i])) continue;
-      if (args[i] instanceof Number && parms[i].isPrimitive()) {
+      if (args[i] instanceof byte[] && parms[i].isInstance("")) {
+        result[i] = new String((byte[])args[i]);
+      } else if (args[i] instanceof Number && parms[i].isPrimitive()) {
         if (result==args) result=(Object[])result.clone();
         Class c = parms[i];
         Number n = (Number)args[i];
index b7c2a4dc061f2ca0e20b358799e47cf4d3511aed..2da4ac849c9e4b02ed50ffc1ca092b348b2e12d9 100644 (file)
@@ -263,7 +263,9 @@ static jobjectArray _java_makeArray(int argc, pval** argv) {
   for (i=0; i<argc; i++) {
     switch (argv[i]->type) {
       case IS_STRING:
-        arg=(*jenv)->NewStringUTF(jenv,argv[i]->value.str.val);
+        arg=(*jenv)->NewByteArray(jenv,argv[i]->value.str.len);
+        (*jenv)->SetByteArrayRegion(jenv,(jbyteArray)arg,0,
+          argv[i]->value.str.len, argv[i]->value.str.val);
         break;
 
       case IS_OBJECT:
@@ -498,16 +500,16 @@ ZEND_GET_MODULE(java)
 /***************************************************************************/
 
 JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString
-  (JNIEnv *jenv, jclass self, jlong result, jstring value)
+  (JNIEnv *jenv, jclass self, jlong result, jbyteArray jvalue)
 {
   jboolean isCopy;
-  const char *valueAsUTF = (*jenv)->GetStringUTFChars(jenv, value, &isCopy);
+  jbyte *value = (*jenv)->GetByteArrayElements(jenv, jvalue, &isCopy);
   pval *presult = (pval*)(long)result;
   presult->type=IS_STRING;
-  presult->value.str.len=strlen(valueAsUTF);
+  presult->value.str.len=(*jenv)->GetArrayLength(jenv, jvalue);
   presult->value.str.val=emalloc(presult->value.str.len+1);
-  strcpy(presult->value.str.val, valueAsUTF);
-  if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, value, valueAsUTF);
+  strcpy(presult->value.str.val, value);
+  if (isCopy) (*jenv)->ReleaseByteArrayElements(jenv, jvalue, value, 0);
 }
 
 JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong
index b7693e907cc79405cc8f5e1adc6adfecb2694954..f2bc02a2f63585ffea75cbb0c1e1a3a67018f413 100644 (file)
@@ -38,7 +38,7 @@ class reflect {
   //
   // Native methods
   //
-  private static native void setResultFromString(long result, String value);
+  private static native void setResultFromString(long result, byte value[]);
   private static native void setResultFromLong(long result, long value);
   private static native void setResultFromDouble(long result, double value);
   private static native void setResultFromBoolean(long result, boolean value);
@@ -56,7 +56,7 @@ class reflect {
 
     if (value instanceof java.lang.String) {
 
-      setResultFromString(result, (String)value);
+      setResultFromString(result, ((String)value).getBytes());
 
     } else if (value instanceof java.lang.Number) {
 
@@ -155,6 +155,9 @@ class reflect {
             if (!c.isInstance(args[i])) break;
             weight++;
           }
+        } else if (parms[i].isInstance("")) {
+         if (!(args[i] instanceof byte[]))
+           weight+=9999;
         } else if (parms[i].isPrimitive()) {
           Class c=parms[i];
          if (args[i] instanceof Number) {
@@ -199,7 +202,9 @@ class reflect {
     Object result[] = args;
     for (int i=0; i<args.length; i++) {
       if (parms[i].isInstance(args[i])) continue;
-      if (args[i] instanceof Number && parms[i].isPrimitive()) {
+      if (args[i] instanceof byte[] && parms[i].isInstance("")) {
+        result[i] = new String((byte[])args[i]);
+      } else if (args[i] instanceof Number && parms[i].isPrimitive()) {
         if (result==args) result=(Object[])result.clone();
         Class c = parms[i];
         Number n = (Number)args[i];