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:
/***************************************************************************/
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
//
// 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);
if (value instanceof java.lang.String) {
- setResultFromString(result, (String)value);
+ setResultFromString(result, ((String)value).getBytes());
} else if (value instanceof java.lang.Number) {
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) {
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];
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:
/***************************************************************************/
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
//
// 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);
if (value instanceof java.lang.String) {
- setResultFromString(result, (String)value);
+ setResultFromString(result, ((String)value).getBytes());
} else if (value instanceof java.lang.Number) {
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) {
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];