whitlock 2005/07/08 03:56:19
Modified: c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal
BeanParamWriter.java
Log:
Avoid using memset on an array of objects. Instead create a vanilla object
initialised to its default values and assign each object in this array to this
vanilla object.
Revision Changes Path
1.83 +6 -4
ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java
Index: BeanParamWriter.java
===================================================================
RCS file:
/home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- BeanParamWriter.java 8 Jul 2005 09:57:57 -0000 1.82
+++ BeanParamWriter.java 8 Jul 2005 10:56:18 -0000 1.83
@@ -854,7 +854,7 @@
+ "\t\t\t\t\t\t\t\t \""
+ attribs[i].getElementNameAsString()
+ "\", Axis_URI_" + arrayType +
");\n\n");
- writer.write("\t// Additional code to find is reference
is pointer or pointer to a pointer\n");
+ writer.write("\t// Additional code to find if reference
is pointer or pointer to a pointer\n");
if (nillable)
{
@@ -873,9 +873,10 @@
writer.write("\t\tparam->" + attributeParamName
+ ".m_Array = pp" + i + ";\n");
writer.write("\t}\n\n");
- writer.write("\t" + attributeTypeName + " * p" + i
+ writer.write("\t" + attributeTypeName + " *p" + i
+ " = (" + attributeTypeName
- + " *) array.m_Array;\n\n");
+ + " *) array.m_Array;\n");
+ writer.write("\t" + attributeTypeName + "
default" + i + ";\n");
writer.write("\tfor( int iCount" + i + " = 0; iCount"
+ i + " < array.m_Size; iCount" + i +
"++)\n");
writer.write("\t{\n");
@@ -883,8 +884,9 @@
+ attributeTypeName + "();\n");
writer.write("\t\t*(pp" + i + "[iCount" + i + "]) =
p"
+ i + "[iCount" + i + "];\n");
+ writer.write("\t\t// Set the array to default
values so that the delete does not delete subfields\n");
+ writer.write("\t\tp" + i + "[iCount" + i + "] =
default" + i + ";\n");
writer.write("\t}\n");
- writer.write("\tmemset(p" + i + ", 0, sizeof("
+ attributeTypeName + ")*array.m_Size);\n");
writer.write("\tdelete [] p" + i + ";\n");
}
else