зеркало из https://github.com/mozilla/pjs.git
Родитель
11e275014b
Коммит
b1dc6babfd
|
@ -1,52 +0,0 @@
|
||||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
||||||
* The contents of this file are subject to the Mozilla Public
|
|
||||||
* License Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS
|
|
||||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
||||||
* implied. See the License for the specific language governing
|
|
||||||
* rights and limitations under the License.
|
|
||||||
*
|
|
||||||
* The Original Code is mozilla.org code.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is Sun Microsystems,
|
|
||||||
* Inc. Portions created by Sun are
|
|
||||||
* Copyright (C) 1999 Sun Microsystems, Inc. All
|
|
||||||
* Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
* Igor Kushnirskiy <idk@eng.sun.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <iostream.h>
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "Marshaler.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
Marshaler::Marshaler(ostream *_out) {
|
|
||||||
out = _out;
|
|
||||||
}
|
|
||||||
|
|
||||||
Marshaler::~Marshaler() {
|
|
||||||
}
|
|
||||||
|
|
||||||
int Marshaler::WriteSimple(void *ptr, bcXPType type) {
|
|
||||||
out->write((const char*)ptr, type2size(type));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Marshaler::WriteString(void *ptr, size_t size) {
|
|
||||||
if (!size
|
|
||||||
&& ptr) {
|
|
||||||
size = 1;
|
|
||||||
}
|
|
||||||
out->write((const char*)&size, sizeof(size_t));
|
|
||||||
if (size) {
|
|
||||||
out->write((const char*)ptr,type2size(bc_T_CHAR)*size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
||||||
* The contents of this file are subject to the Mozilla Public
|
|
||||||
* License Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at http://www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS
|
|
||||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
||||||
* implied. See the License for the specific language governing
|
|
||||||
* rights and limitations under the License.
|
|
||||||
*
|
|
||||||
* The Original Code is mozilla.org code.
|
|
||||||
*
|
|
||||||
* The Initial Developer of the Original Code is Sun Microsystems,
|
|
||||||
* Inc. Portions created by Sun are
|
|
||||||
* Copyright (C) 1999 Sun Microsystems, Inc. All
|
|
||||||
* Rights Reserved.
|
|
||||||
*
|
|
||||||
* Contributor(s):
|
|
||||||
* Igor Kushnirskiy <idk@eng.sun.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "UnMarshaler.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
UnMarshaler::UnMarshaler(istream *_in) {
|
|
||||||
in = _in;
|
|
||||||
}
|
|
||||||
|
|
||||||
UnMarshaler::~UnMarshaler() {
|
|
||||||
}
|
|
||||||
|
|
||||||
int UnMarshaler::ReadSimple(void *ptr, bcXPType type) {
|
|
||||||
char *p = (char *)ptr;
|
|
||||||
int size = type2size(type);
|
|
||||||
in->read(p,size );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
int UnMarshaler::ReadString(void *ptr, size_t *size, bcIAllocator * allocator) {
|
|
||||||
size_t length;
|
|
||||||
in->read((char*)size,sizeof(size_t));
|
|
||||||
*(char**)ptr = (char *)allocator->Alloc(*size * type2size(bc_T_CHAR));
|
|
||||||
if (*size) {
|
|
||||||
in->read(*(char**)ptr,*size * type2size(bc_T_CHAR));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*size == 1) {
|
|
||||||
if (!(*(char**)ptr)[0]) {
|
|
||||||
*size = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -521,20 +521,24 @@ bcJavaMarshalToolkit::UnMarshalElement(jobject *value, uint8 ind, bcIUnMarshaler
|
||||||
size_t size;
|
size_t size;
|
||||||
jstring data = NULL;
|
jstring data = NULL;
|
||||||
if (um) {
|
if (um) {
|
||||||
um->ReadString(&data,&size,allocator);
|
char *str;
|
||||||
{
|
um->ReadString(&str,&size,allocator);
|
||||||
for (int i = 0; i < size && type == bc_T_WCHAR_STR; i++) {
|
if (str != NULL) {
|
||||||
char c = ((char*)data)[i];
|
{
|
||||||
PR_LOG(log, PR_LOG_DEBUG,("--[c++] bcJavaMarshalToolkit::UnMarshalElement T_WCHAR_STR [%d] = %d %c\n",i,c,c));
|
for (int i = 0; i < size && type == bc_T_WCHAR_STR; i++) {
|
||||||
|
char c = ((char*)data)[i];
|
||||||
|
PR_LOG(log, PR_LOG_DEBUG,("--[c++] bcJavaMarshalToolkit::UnMarshalElement T_WCHAR_STR [%d] = %d %c\n",i,c,c));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (type == bc_T_CHAR_STR) {
|
||||||
|
data = env->NewStringUTF((const char*)str);
|
||||||
|
} else {
|
||||||
|
size-=2; size/=2;
|
||||||
|
data = env->NewString((const jchar*)str,size);
|
||||||
|
}
|
||||||
|
allocator->Free(str);
|
||||||
|
EXCEPTION_CHECKING(env);
|
||||||
}
|
}
|
||||||
if (type == bc_T_CHAR_STR) {
|
|
||||||
data = env->NewStringUTF((const char*)data);
|
|
||||||
} else {
|
|
||||||
size-=2; size/=2;
|
|
||||||
data = env->NewString((const jchar*)data,size);
|
|
||||||
}
|
|
||||||
EXCEPTION_CHECKING(env);
|
|
||||||
}
|
}
|
||||||
if ( ! isOut
|
if ( ! isOut
|
||||||
&& (modifier == none) ) {
|
&& (modifier == none) ) {
|
||||||
|
|
|
@ -146,7 +146,7 @@ void test() {
|
||||||
}
|
}
|
||||||
//sigsend(P_PID, getpid(),SIGINT);
|
//sigsend(P_PID, getpid(),SIGINT);
|
||||||
//test->Test1(2000);
|
//test->Test1(2000);
|
||||||
#if 1
|
#if 0
|
||||||
test->Test1(1000);
|
test->Test1(1000);
|
||||||
bcIJavaSample *test1;
|
bcIJavaSample *test1;
|
||||||
if (NS_FAILED(r)) {
|
if (NS_FAILED(r)) {
|
||||||
|
@ -157,6 +157,7 @@ void test() {
|
||||||
test->QueryInterface(NS_GET_IID(bcIJavaSample),(void**)&test1);
|
test->QueryInterface(NS_GET_IID(bcIJavaSample),(void**)&test1);
|
||||||
int intArray[] = {1,2,3};
|
int intArray[] = {1,2,3};
|
||||||
test->Test3(3, intArray);
|
test->Test3(3, intArray);
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
char ** valueArray = (char **)malloc(sizeof(char*)*4);
|
char ** valueArray = (char **)malloc(sizeof(char*)*4);
|
||||||
valueArray[0] = "hi";
|
valueArray[0] = "hi";
|
||||||
|
@ -169,6 +170,7 @@ void test() {
|
||||||
printf("valueArray2[%d]=%s\n",i,(*valueArray2)[i]);
|
printf("valueArray2[%d]=%s\n",i,(*valueArray2)[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
{
|
{
|
||||||
|
|
||||||
nsIComponentManager* cm;
|
nsIComponentManager* cm;
|
||||||
|
@ -183,14 +185,18 @@ void test() {
|
||||||
}
|
}
|
||||||
printf("--[c++] bcJavaSample after test->Test5(cm)\n");
|
printf("--[c++] bcJavaSample after test->Test5(cm)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const char ** valueArray = (const char **)malloc(sizeof(char*)*4);
|
const char ** valueArray = (const char **)malloc(sizeof(char*)*4);
|
||||||
valueArray[0] = "hi";
|
valueArray[0] = "hi";
|
||||||
valueArray[1] = "there";
|
valueArray[1] = "there";
|
||||||
valueArray[2] = "a";
|
valueArray[2] = "a";
|
||||||
valueArray[3] = "b";
|
//valueArray[3] = "b";
|
||||||
|
|
||||||
|
valueArray[3] = NULL;
|
||||||
test->Test6(4,valueArray);
|
test->Test6(4,valueArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
printf("--[c++]about to test7\n");
|
printf("--[c++]about to test7\n");
|
||||||
PRUint32 count;
|
PRUint32 count;
|
||||||
|
@ -201,7 +207,7 @@ void test() {
|
||||||
}
|
}
|
||||||
printf("--[c++]end of test7\n");
|
printf("--[c++]end of test7\n");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
printf("--[c++]about to test8\n");
|
printf("--[c++]about to test8\n");
|
||||||
|
|
||||||
|
@ -215,6 +221,7 @@ void test() {
|
||||||
test->Test9(&cidParam);
|
test->Test9(&cidParam);
|
||||||
printf("--[c++]end of test9\n");
|
printf("--[c++]end of test9\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
printf("--BlackConnect test end\n");
|
printf("--BlackConnect test end\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ public class bcJavaSample implements bcIJavaSample {
|
||||||
for (int i = 0; i < array.length; i++) {
|
for (int i = 0; i < array.length; i++) {
|
||||||
System.out.println("--[java]bcJavaSample.test4 valueArray["+i+"] = "+array[i]);
|
System.out.println("--[java]bcJavaSample.test4 valueArray["+i+"] = "+array[i]);
|
||||||
}
|
}
|
||||||
String[] returnArray = {"4","3","2","1"};
|
String[] returnArray = {"4","3","2",null};
|
||||||
valueArray[0] = returnArray;
|
valueArray[0] = returnArray;
|
||||||
}
|
}
|
||||||
/* void test5 (in nsIComponentManager cm); */
|
/* void test5 (in nsIComponentManager cm); */
|
||||||
|
|
|
@ -258,18 +258,22 @@ nsresult bcXPCOMMarshalToolkit::MarshalElement(bcIMarshaler *m, void *data, nsXP
|
||||||
{
|
{
|
||||||
data = *(char **)data;
|
data = *(char **)data;
|
||||||
size_t length = 0;
|
size_t length = 0;
|
||||||
if (type == nsXPTType::T_WCHAR_STR) {
|
if (data != NULL) {
|
||||||
length = nsCRT::strlen((const PRUnichar*)data);
|
if (type == nsXPTType::T_WCHAR_STR) {
|
||||||
PR_LOG(log, PR_LOG_DEBUG,("--[c++] bcXPCOMMarshalToolkit::MarshalElement T_WCHAR_STR length=%d\n",length));
|
length = nsCRT::strlen((const PRUnichar*)data);
|
||||||
length *= 2;
|
PR_LOG(log, PR_LOG_DEBUG,
|
||||||
length +=2;
|
("--[c++] bcXPCOMMarshalToolkit::MarshalElement T_WCHAR_STR length=%d\n",length));
|
||||||
for (unsigned int i = 0; i < length && type == nsXPTType::T_WCHAR_STR; i++) {
|
length *= 2;
|
||||||
char c = ((char*)data)[i];
|
length +=2;
|
||||||
PR_LOG(log, PR_LOG_DEBUG, ("--[c++] bcXPCOMMarshalToolkit::MarshalElement T_WCHAR_STR [%d] = %d %c\n",i,c,c));
|
for (unsigned int i = 0; i < length && type == nsXPTType::T_WCHAR_STR; i++) {
|
||||||
|
char c = ((char*)data)[i];
|
||||||
|
PR_LOG(log, PR_LOG_DEBUG,
|
||||||
|
("--[c++] bcXPCOMMarshalToolkit::MarshalElement T_WCHAR_STR [%d] = %d %c\n",i,c,c));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
length = nsCRT::strlen((const char*)data);
|
||||||
|
length+=1;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
length = nsCRT::strlen((const char*)data);
|
|
||||||
length+=1;
|
|
||||||
}
|
}
|
||||||
m->WriteString(data,length);
|
m->WriteString(data,length);
|
||||||
break;
|
break;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче