1 /*
2 * Copyright 1999-2006 University of Chicago
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18 /*
19 * This file is automatically generated from source-type-builtin.tmpl
20 */
21
22 #include "globus_common.h"
23 #include "globus_xsd_types.h"
24 #include "globus_soap_message.h"
25 #include "globus_xsd_type_info.h"
26 #include "xsd_decimal.h"
27 #include "globus_xsd_generic.h"
28 #include "globus_xsd_generic_array.h"
29 #include "globus_i_soap_message.h"
30 #include "xsd_QName.h"
31 #include "libxml/schemasInternals.h"
32 #include "libxml/xmlschemastypes.h"
33
34 /**
35 * QName of the xsd_decimal builtin type
36 * @ingroup xsd_decimal
37 */
38 xsd_QName xsd_decimal_qname =
39 {
40 "http://www.w3.org/2001/XMLSchema",
41 "decimal"
42
43 };
44
45 #ifndef GLOBUS_DONT_DOCUMENT_INTERNAL
46 static
47 globus_result_t
48 xsd_decimal_serialize_wrapper(
49 const xsd_QName * element_qname,
50 const void * instance,
51 globus_soap_message_handle_t message_handle,
52 globus_xsd_element_options_t options)
53 0 {
54 0 return xsd_decimal_serialize(
55 element_qname,
56 (xsd_decimal *) instance,
57 message_handle, options);
58 }
59 /* xsd_decimal_serialize_wrapper() */
60
61 static
62 globus_result_t
63 xsd_decimal_deserialize_pointer_wrapper(
64 const xsd_QName * element_qname,
65 void ** ip,
66 globus_soap_message_handle_t message_handle,
67 globus_xsd_element_options_t options)
68 0 {
69 0 return xsd_decimal_deserialize_pointer(
70 element_qname,
71 (xsd_decimal **) ip,
72 message_handle, options);
73 }
74 /* xsd_decimal_deserialize_pointer_wrapper() */
75
76 static
77 globus_result_t
78 xsd_decimal_init_wrapper(void **object)
79 0 {
80 0 return xsd_decimal_init(
81 (xsd_decimal **) object);
82 }
83 /* xsd_decimal_init_wrapper() */
84
85 static
86 void
87 xsd_decimal_destroy_wrapper(
88 void * object)
89 0 {
90 0 xsd_decimal_destroy(
91 (xsd_decimal *) object);
92 0 }
93 /* xsd_decimal_destroy_wrapper() */
94
95 static
96 globus_result_t
97 xsd_decimal_copy_wrapper(
98 void ** dest_obj,
99 const void * src_obj)
100 0 {
101 0 return xsd_decimal_copy(
102 (xsd_decimal **) dest_obj,
103 (const xsd_decimal *) src_obj);
104 }
105 /* xsd_decimal_copy_wrapper() */
106
107 static
108 globus_result_t
109 xsd_decimal_init_contents_wrapper(void *object)
110 0 {
111 0 return xsd_decimal_init_contents(
112 (xsd_decimal *) object);
113 }
114 /* xsd_decimal_init_contents_wrapper() */
115
116 static
117 void
118 xsd_decimal_destroy_contents_wrapper(
119 void * object)
120 0 {
121 0 xsd_decimal_destroy_contents(
122 (xsd_decimal *) object);
123 0 }
124 /* xsd_decimal_destroy_contents_wrapper() */
125
126 static
127 globus_result_t
128 xsd_decimal_copy_contents_wrapper(
129 void * dest_obj,
130 const void * src_obj)
131 0 {
132 0 return xsd_decimal_copy_contents(
133 (xsd_decimal *) dest_obj,
134 (const xsd_decimal *) src_obj);
135 }
136 /* xsd_decimal_copy_contents_wrapper() */
137
138 static
139 globus_result_t
140 xsd_decimal_serialize_contents_wrapper(
141 const xsd_QName * element_qname,
142 const void * instance,
143 globus_soap_message_handle_t message_handle,
144 globus_xsd_element_options_t options)
145 15 {
146 15 return xsd_decimal_serialize_contents(
147 element_qname,
148 (xsd_decimal *) instance,
149 message_handle, options);
150 }
151 /* xsd_decimal_serialize_contents_wrapper() */
152
153 static
154 globus_result_t
155 xsd_decimal_deserialize_contents_wrapper(
156 const xsd_QName * element_qname,
157 void ** instance,
158 globus_soap_message_handle_t message_handle,
159 globus_xsd_element_options_t options)
160 15 {
161 globus_result_t result;
162 15 globus_bool_t allocated = GLOBUS_FALSE;
163 GlobusFuncName(xsd_decimal_deserialize_contents_wrapper);
164 15 GlobusSoapMessageDebugEnter();
165
166 15 if(!*instance)
167 {
168 0 result = xsd_decimal_init(
169 (xsd_decimal **)instance);
170 0 if(result != GLOBUS_SUCCESS)
171 {
172 0 goto error;
173 }
174 0 allocated = GLOBUS_TRUE;
175 }
176
177 15 result = xsd_decimal_deserialize_contents(
178 element_qname,
179 *(xsd_decimal **)instance,
180 message_handle, options);
181 15 error:
182 15 if (result != GLOBUS_SUCCESS && allocated)
183 {
184 0 xsd_decimal_destroy(*(xsd_decimal **)instance);
185 0 *instance = NULL;
186 }
187 15 GlobusSoapMessageDebugExit();
188 15 return result;
189 }
190 /* xsd_decimal_deserialize_contents_wrapper() */
191
192 static
193 globus_result_t
194 xsd_decimal_array_serialize_wrapper(
195 const xsd_QName * element,
196 const void * instance,
197 globus_soap_message_handle_t message,
198 globus_xsd_element_options_t options)
199 0 {
200 0 return xsd_decimal_array_serialize(
201 element,
202 (xsd_decimal_array *) instance,
203 message, options);
204 }
205 /* xsd_decimal_array_serialize_wrapper() */
206
207 static
208 globus_result_t
209 xsd_decimal_array_deserialize_wrapper(
210 const xsd_QName * element_qname,
211 void ** inst,
212 globus_soap_message_handle_t message,
213 globus_xsd_element_options_t options)
214 0 {
215 0 globus_bool_t allocated = GLOBUS_FALSE;
216
217 globus_result_t result;
218 0 if(!*inst)
219 {
220 0 result = xsd_decimal_array_init(
221 (xsd_decimal_array **)inst);
222 0 if(result != GLOBUS_SUCCESS)
223 {
224 0 return result;
225 }
226 0 allocated = GLOBUS_TRUE;
227 }
228
229 0 result = xsd_decimal_array_deserialize(
230 element_qname,
231 *(xsd_decimal_array **) inst,
232 message, options);
233 0 if (result != GLOBUS_SUCCESS && allocated)
234 {
235 0 xsd_decimal_array_destroy(*(xsd_decimal_array **) inst);
236 0 *inst = NULL;
237 }
238 0 return result;
239 }
240 /* xsd_decimal_array_deserialize_wrapper() */
241
242 static
243 globus_result_t
244 xsd_decimal_array_init_wrapper(
245 void ** arr)
246 0 {
247 0 return xsd_decimal_array_init(
248 (xsd_decimal_array **) arr);
249 }
250 /* xsd_decimal_array_init_wrapper() */
251
252 static
253 void
254 xsd_decimal_array_destroy_wrapper(
255 void * arr)
256 0 {
257 0 xsd_decimal_array_destroy(
258 (xsd_decimal_array *) arr);
259 0 }
260 /* xsd_decimal_array_destroy_wrapper() */
261
262 static
263 globus_result_t
264 xsd_decimal_array_copy_wrapper(
265 void ** dest_arr,
266 const void * src_arr)
267 0 {
268 0 return xsd_decimal_array_copy(
269 (xsd_decimal_array **) dest_arr,
270 (const xsd_decimal_array *) src_arr);
271 }
272 /* xsd_decimal_array_copy_wrapper() */
273
274 static
275 globus_result_t
276 xsd_decimal_array_init_contents_wrapper(
277 void * arr)
278 0 {
279 0 return xsd_decimal_array_init_contents(
280 (xsd_decimal_array *) arr);
281 }
282 /* xsd_decimal_array_init_contents_wrapper() */
283
284 static
285 void
286 xsd_decimal_array_destroy_contents_wrapper(
287 void * arr)
288 0 {
289 0 xsd_decimal_array_destroy_contents(
290 (xsd_decimal_array *) arr);
291 0 }
292 /* xsd_decimal_array_destroy_contents_wrapper() */
293
294 static
295 globus_result_t
296 xsd_decimal_array_copy_contents_wrapper(
297 void * dest_arr,
298 const void * src_arr)
299 0 {
300 0 return xsd_decimal_array_copy_contents(
301 (xsd_decimal_array *) dest_arr,
302 (const xsd_decimal_array *) src_arr);
303 }
304 /* xsd_decimal_array_copy_contents_wrapper() */
305
306 static
307 void *
308 xsd_decimal_array_push_wrapper(
309 void * array)
310 0 {
311 0 return (void *) xsd_decimal_array_push((xsd_decimal_array *) array);
312 }
313 /* xsd_decimal_array_push_wrapper() */
314 #endif /* GLOBUS_DONT_DOCUMENT_INTERNAL */
315
316 /**
317 * Type info for xsd_decimal
318 * @ingroup xsd_decimal
319 * This type info is used when serializing/deserializing an xsd:any
320 * which contains array values of this type.
321 */
322 struct globus_xsd_type_info_s xsd_decimal_array_info =
323 {
324 &xsd_decimal_qname,
325 xsd_decimal_array_serialize_wrapper,
326 xsd_decimal_array_deserialize_wrapper,
327 xsd_decimal_array_init_wrapper,
328 xsd_decimal_array_destroy_wrapper,
329 xsd_decimal_array_copy_wrapper,
330 xsd_decimal_array_init_contents_wrapper,
331 xsd_decimal_array_destroy_contents_wrapper,
332 xsd_decimal_array_copy_contents_wrapper,
333 sizeof(xsd_decimal),
334 xsd_decimal_array_push_wrapper,
335 NULL,
336 NULL
337 };
338
339 /**
340 * Type info for xsd_decimal
341 * @ingroup xsd_decimal
342 * This type info is used when serializing/deserializing an xsd:anyType
343 * which contains values of this type.
344 */
345 struct globus_xsd_type_info_s xsd_decimal_contents_info =
346 {
347 &xsd_decimal_qname,
348 xsd_decimal_serialize_contents_wrapper,
349 xsd_decimal_deserialize_contents_wrapper,
350 xsd_decimal_init_wrapper,
351 xsd_decimal_destroy_wrapper,
352 xsd_decimal_copy_wrapper,
353 xsd_decimal_init_contents_wrapper,
354 xsd_decimal_destroy_contents_wrapper,
355 xsd_decimal_copy_contents_wrapper,
356 sizeof(xsd_decimal),
357 NULL,
358 NULL,
359 NULL
360 };
361
362 /**
363 * Type info for xsd_decimal
364 * @ingroup xsd_decimal
365 * This type info is used when serializing/deserializing an xsd:any
366 * which contains values of this type.
367 */
368 struct globus_xsd_type_info_s xsd_decimal_info =
369 {
370 &xsd_decimal_qname,
371 xsd_decimal_serialize_wrapper,
372 xsd_decimal_deserialize_pointer_wrapper,
373 xsd_decimal_init_wrapper,
374 xsd_decimal_destroy_wrapper,
375 xsd_decimal_copy_wrapper,
376 xsd_decimal_init_contents_wrapper,
377 xsd_decimal_destroy_contents_wrapper,
378 xsd_decimal_copy_contents_wrapper,
379 sizeof(xsd_decimal),
380 NULL,
381 &xsd_decimal_contents_info,
382 &xsd_decimal_array_info
383 };
384
385
386 /**
387 * Initialize the contents of a xsd_decimal
388 * @ingroup xsd_decimal
389 *
390 * Initialize the contents of a xsd_decimal. This should be used
391 * when the structure is allocated on the stack or by a some allocator besides
392 * xsd_decimal_init(). The contents may be freed
393 * by calling xsd_decimal_destroy_contents().
394 *
395 * @param instance
396 * Pointer to an allocated but uninitialized xsd_decimal.
397 */
398 globus_result_t
399 xsd_decimal_init_contents(
400 xsd_decimal * instance)
401 15 {
402 15 globus_result_t result = GLOBUS_SUCCESS;
403 GlobusFuncName(xsd_decimal_init_contents);
404 15 GlobusSoapMessageDebugEnter();
405
406 15 memset(instance, 0, sizeof(xsd_decimal));
407
408 15 GlobusSoapMessageDebugExit();
409 15 return result;
410 }
411
412
413
414 /**
415 * Initialize a xsd_decimal
416 * @ingroup xsd_decimal
417 *
418 * Allocates a new xsd_decimal and initializes its contents. When the
419 * structure is no longer needed, it should be freed by calling
420 * xsd_decimal_destroy().
421 *
422 * @param object
423 * Pointer to set to a newly allocated instance.
424 */
425 globus_result_t
426 xsd_decimal_init(
427 xsd_decimal ** object)
428 0 {
429 0 globus_result_t result = GLOBUS_SUCCESS;
430 GlobusFuncName(xsd_decimal_init);
431 0 GlobusSoapMessageDebugEnter();
432
433 0 *object = malloc(sizeof(xsd_decimal));
434 0 if (*object == NULL)
435 {
436 0 result = GlobusSoapMessageErrorOutOfMemory;
437
438 0 goto exit;
439 }
440 0 result = xsd_decimal_init_contents(*object);
441 0 if (result != GLOBUS_SUCCESS)
442 {
443 0 free(*object);
444 0 *object = NULL;
445 }
446 0 exit:
447 0 GlobusSoapMessageDebugExit();
448 0 return result;
449 }
450 /* xsd_decimal_init() */
451
452
453
454 /**
455 * Destroy a xsd_decimal
456 * @ingroup xsd_decimal
457 *
458 * Frees a xsd_decimal.
459 *
460 * @param instance
461 * Pointer to the instance to destroy.
462 */
463 void
464 xsd_decimal_destroy(
465 xsd_decimal * instance)
466 0 {
467 GlobusFuncName(xsd_decimal_destroy);
468 0 GlobusSoapMessageDebugEnter();
469
470 0 if(!instance)
471 {
472 0 goto exit;
473 }
474
475 0 xsd_decimal_destroy_contents(instance);
476 0 free(instance);
477
478 0 exit:
479
480 0 GlobusSoapMessageDebugExit();
481 0 }
482 /* xsd_decimal_destroy() */
483
484
485
486 /**
487 * Destroy the contents of a xsd_decimal
488 * @ingroup xsd_decimal
489 *
490 * Destroy the the given xsd_decimal.
491 *
492 * @param instance
493 * Pointer to a xsd_decimal instance to destroy.
494 */
495 void
496 xsd_decimal_destroy_contents(
497 xsd_decimal * instance)
498 15 {
499 GlobusFuncName(xsd_decimal_destroy_contents);
500 15 GlobusSoapMessageDebugEnter();
501
502 15 GlobusSoapMessageDebugExit();
503 15 }
504 /* xsd_decimal_destroy_contents() */
505
506
507
508
509 /**
510 * Copy a xsd_decimal
511 * @ingroup xsd_decimal
512 *
513 * Perform a copy of a xsd_decimal.
514 * The @a dest_obj will be allocated, and then a copy of the contents
515 * of @a src to it. The caller is responsible for destroying @a dest_objb
516 *
517 * @param dest_obj
518 * The xsd_decimal to be initialized with a copy of the
519 * contents of the @a src_obj structure.
520 * @param src_obj
521 * Source xsd_decimal to be copied.
522 */
523 globus_result_t
524 xsd_decimal_copy(
525 xsd_decimal ** dest_obj,
526 const xsd_decimal * src_obj)
527 0 {
528 0 globus_result_t result = GLOBUS_SUCCESS;
529 xsd_decimal * instance;
530 GlobusFuncName(xsd_decimal_copy);
531
532 0 GlobusSoapMessageDebugEnter();
533
534 0 instance = malloc(sizeof(xsd_decimal));
535 0 if (instance == NULL)
536 {
537 0 GlobusSoapMessageDebugExit();
538 0 return GlobusSoapMessageErrorOutOfMemory;
539 }
540
541 0 result = xsd_decimal_copy_contents(instance, src_obj);
542 0 if(result != GLOBUS_SUCCESS)
543 {
544 0 free(instance);
545 0 instance = NULL;
546 0 result = GlobusSoapMessageErrorOutOfMemory;
547 }
548
549 0 *dest_obj = instance;
550 0 GlobusSoapMessageDebugExit();
551 0 return result;
552 }
553 /* xsd_decimal_copy() */
554
555
556
557 /**
558 * Copy the contents of a xsd_decimal
559 * @ingroup xsd_decimal
560 *
561 * Perform a copy of the contents of a xsd_decimal.
562 * The @a dest_obj value must point to a previously-allocated xsd_decimal.
563 * A copy of value @ src_obj will be made to
564 * @a dest_obj.
565 *
566 * @param dest_obj
567 * Structure to be initialized with copies of the contents of @a src_obj.
568 * @param src_obj
569 * Source xsd_decimal to be copied.
570 */
571 globus_result_t
572 xsd_decimal_copy_contents(
573 xsd_decimal * dest_obj,
574 const xsd_decimal * src_obj)
575 0 {
576 0 globus_result_t result = GLOBUS_SUCCESS;
577 GlobusFuncName(xsd_decimal_copy_contents);
578
579 0 GlobusSoapMessageDebugEnter();
580
581
582 0 *dest_obj = *src_obj;
583
584
585 0 GlobusSoapMessageDebugExit();
586 0 return result;
587 }
588 /* xsd_decimal_copy_contents() */
589
590
591 /**
592 * @fn globus_result_t xsd_decimal_serialize_contents(const xsd_QName *element_qname, const xsd_decimal * inst, globus_soap_message_handle_t message_handle, globus_xsd_element_options_t options)
593 * Serialize the contents of a xsd_decimal
594 * @ingroup xsd_decimal
595 * Serialize a xsd_decimal without an enclosing element.
596 *
597 * @param element_qname
598 * Ignored parameter.
599 * @param inst
600 * The xsd_decimal to serialize.
601 * @param message_handle
602 * The handle to serialize the contents on.
603 * @param options
604 * Serialization options.
605 */
606
607 globus_result_t
608 xsd_decimal_serialize_contents(
609 const xsd_QName * element_qname, /* ignored */
610 const xsd_decimal * inst,
611 globus_soap_message_handle_t message_handle,
612 globus_xsd_element_options_t options)
613 15 {
614 15 globus_result_t result = GLOBUS_SUCCESS;
615 GlobusFuncName(xsd_decimal_serialize_contents);
616 15 GlobusSoapMessageDebugEnter();
617
618
619 15 result = globus_soap_message_serialize_decimal(
620 message_handle,
621 inst);
622 15 if(result != GLOBUS_SUCCESS)
623 {
624 0 result = GlobusSoapMessageErrorSerializeFailed(
625 result, NULL, element_qname);
626 }
627
628
629 15 GlobusSoapMessageDebugExit();
630 15 return result;
631 }
632 /* xsd_decimal_serialize_contents() */
633
634
635
636 globus_result_t
637 xsd_decimal_serialize(
638 const xsd_QName * element_qname,
639 const xsd_decimal * instance,
640 globus_soap_message_handle_t message_handle,
641 globus_xsd_element_options_t options)
642 15 {
643 15 globus_result_t result = GLOBUS_SUCCESS;
644 GlobusFuncName(xsd_decimal_serialize);
645 15 GlobusSoapMessageDebugEnter();
646
647 15 result = globus_xsd_generic_serialize(
648 element_qname,
649 &xsd_decimal_info,
650 instance,
651 message_handle,
652 options);
653
654 15 return result;
655 }
656 /* xsd_decimal_serialize() */
657
658
659
660 globus_result_t
661 xsd_decimal_deserialize_contents(
662 const xsd_QName * element_qname, /* ignored */
663 xsd_decimal * inst,
664 globus_soap_message_handle_t message_handle,
665 globus_xsd_element_options_t options)
666 15 {
667 15 globus_result_t result = GLOBUS_SUCCESS;
668 GlobusFuncName(xsd_decimal_deserialize_contents);
669 15 GlobusSoapMessageDebugEnter();
670
671
672 15 if (options & GLOBUS_XSD_ELEMENT_ATTRIBUTE)
673 {
674 0 result = globus_soap_message_deserialize_decimal_attribute(
675 message_handle, element_qname, inst);
676 }
677 else
678 {
679 15 result = globus_soap_message_deserialize_decimal(
680 message_handle, inst);
681 }
682
683
684 15 GlobusSoapMessageDebugExit();
685 15 return result;
686 }
687 /* xsd_decimal_deserialize_contents() */
688
689
690
691 globus_result_t
692 xsd_decimal_deserialize(
693 const xsd_QName * element_qname,
694 xsd_decimal * instance,
695 globus_soap_message_handle_t message_handle,
696 globus_xsd_element_options_t options)
697 15 {
698 15 globus_result_t result = GLOBUS_SUCCESS;
699 GlobusFuncName(xsd_decimal_deserialize);
700 15 GlobusSoapMessageDebugEnter();
701
702 15 result = globus_xsd_generic_deserialize(
703 element_qname,
704 &xsd_decimal_info,
705 (void **) &instance,
706 message_handle,
707 options);
708
709 15 GlobusSoapMessageDebugExit();
710 15 return result;
711 }
712 /* xsd_decimal_deserialize() */
713
714 globus_result_t
715 xsd_decimal_deserialize_pointer(
716 const xsd_QName * element_qname,
717 xsd_decimal ** ip,
718 globus_soap_message_handle_t message_handle,
719 globus_xsd_element_options_t options)
720 0 {
721 0 globus_result_t result = GLOBUS_SUCCESS;
722 GlobusFuncName(xsd_decimal_deserialize_pointer);
723 0 GlobusSoapMessageDebugEnter();
724
725 0 result = globus_xsd_generic_deserialize_pointer(
726 element_qname,
727 &xsd_decimal_info,
728 (void **)ip,
729 message_handle,
730 options);
731
732 0 return result;
733 }
734 /* xsd_decimal_deserialize_pointer() */
735
736
737
738 globus_result_t
739 xsd_decimal_array_init_contents(
740 xsd_decimal_array * array)
741 0 {
742 GlobusFuncName(xsd_decimal_array_init_contents);
743 0 GlobusSoapMessageDebugEnter();
744
745 0 array->elements = NULL;
746 0 array->length = 0;
747 0 array->type_info = &xsd_decimal_info;
748
749 0 GlobusSoapMessageDebugExit();
750 0 return GLOBUS_SUCCESS;
751 }
752 /* xsd_decimal_array_init_contents() */
753
754
755
756 globus_result_t
757 xsd_decimal_array_init(
758 xsd_decimal_array ** arr)
759 0 {
760 0 return globus_xsd_generic_array_init(
761 (globus_xsd_generic_array_t **) arr,
762 &xsd_decimal_info);
763 }
764 /* xsd_decimal_array_init() */
765
766
767
768 void
769 xsd_decimal_array_destroy_contents(
770 xsd_decimal_array * array)
771 0 {
772 0 globus_xsd_generic_array_destroy_contents(
773 (globus_xsd_generic_array_t *) array);
774 0 }
775 /* xsd_decimal_array_destroy_contents() */
776
777
778
779 void
780 xsd_decimal_array_destroy(
781 xsd_decimal_array * array)
782 0 {
783
784 0 globus_xsd_generic_array_destroy(
785 (globus_xsd_generic_array_t *) array);
786 0 }
787 /* xsd_decimal_array_destroy() */
788
789
790
791
792 globus_result_t
793 xsd_decimal_array_copy(
794 xsd_decimal_array ** dest_arr,
795 const xsd_decimal_array * src_arr)
796 0 {
797 0 return globus_xsd_generic_array_copy(
798 (globus_xsd_generic_array_t **) dest_arr,
799 (const globus_xsd_generic_array_t *) src_arr);
800 }
801 /* xsd_decimal_array_copy() */
802
803
804
805 globus_result_t
806 xsd_decimal_array_copy_contents(
807 xsd_decimal_array * dest_arr,
808 const xsd_decimal_array * src_arr)
809 0 {
810 0 return globus_xsd_generic_array_copy_contents(
811 (globus_xsd_generic_array_t *) dest_arr,
812 (const globus_xsd_generic_array_t *) src_arr);
813 }
814 /* xsd_decimal_array_copy_contents() */
815
816
817
818 xsd_decimal *
819 xsd_decimal_array_push(
820 xsd_decimal_array * array)
821 0 {
822 /* Some contents initializers don't initialize subelments but to set their
823 * values to be NULL
824 */
825 0 if (array->type_info == NULL)
826 {
827 0 array->type_info = &xsd_decimal_info;
828 }
829 0 return globus_xsd_generic_array_push(
830 (globus_xsd_generic_array_t *) array);
831 }
832 /* xsd_decimal_array_push() */
833
834
835
836 globus_result_t
837 xsd_decimal_array_serialize(
838 const xsd_QName * element_qname,
839 const xsd_decimal_array * array,
840 globus_soap_message_handle_t message,
841 globus_xsd_element_options_t options)
842 0 {
843 0 return globus_xsd_generic_array_serialize(
844 element_qname,
845 (const globus_xsd_generic_array_t *) array,
846 message,
847 options);
848 }
849 /* xsd_decimal_array_serialize() */
850
851
852
853
854 globus_result_t
855 xsd_decimal_array_deserialize(
856 const xsd_QName * element_qname,
857 xsd_decimal_array * array,
858 globus_soap_message_handle_t message,
859 globus_xsd_element_options_t options)
860 0 {
861 /* Some initializers set the array contents to NULL */
862 0 if (array->type_info == NULL)
863 {
864 0 array->type_info = &xsd_decimal_info;
865 }
866
867 0 return globus_xsd_generic_array_deserialize(
868 element_qname,
869 (globus_xsd_generic_array_t *) array,
870 message,
871 options);
872 }
873 /* xsd_decimal_array_deserialize() */
874
875
876
877 globus_result_t
878 xsd_decimal_serialize_attribute(
879 const xsd_QName * attr_qname,
880 const xsd_decimal * val,
881 globus_soap_message_handle_t handle,
882 globus_xsd_element_options_t options)
883 0 {
884 0 globus_result_t result = GLOBUS_SUCCESS;
885 GlobusFuncName(xsd_decimal_serialize_attribute);
886 0 GlobusSoapMessageDebugEnter();
887
888 0 result = globus_soap_message_serialize_decimal_attribute(
889 handle, attr_qname, val);
890 0 if(result != GLOBUS_SUCCESS)
891 {
892 0 result = GlobusSoapMessageErrorSerializeFailed(
893 result, NULL, attr_qname);
894 0 goto exit;
895 }
896 0 exit:
897
898 0 GlobusSoapMessageDebugExit();
899 0 return result;
900 }
901 /* xsd_decimal_serialize_attribute() */
902
903
904
905
906 globus_result_t
907 xsd_decimal_deserialize_attribute(
908 const xsd_QName * attr_qname,
909 xsd_decimal * instance,
910 globus_soap_message_handle_t message,
911 globus_xsd_element_options_t options)
912 0 {
913 0 globus_result_t result = GLOBUS_SUCCESS;
914 GlobusFuncName(xsd_decimal_deserialize_attribute);
915 0 GlobusSoapMessageDebugEnter();
916
917 0 result = globus_soap_message_deserialize_decimal_attribute(
918 message, attr_qname, instance);
919
920 0 if(result != GLOBUS_SUCCESS)
921 {
922 0 result = GlobusSoapMessageErrorDeserializeFailed(
923 result, attr_qname);
924 }
925
926 0 GlobusSoapMessageDebugExit();
927 0 return result;
928 }
929 /* xsd_decimal_deserialize_attribute() */
930
931
932
933 globus_result_t
934 xsd_decimal_deserialize_attribute_pointer(
935 const xsd_QName * attr_qname,
936 xsd_decimal ** ip,
937 globus_soap_message_handle_t message,
938 globus_xsd_element_options_t options)
939 0 {
940 0 xsd_decimal * instance = NULL;
941 0 globus_result_t result = GLOBUS_SUCCESS;
942 GlobusFuncName(xsd_decimal_deserialize_attribute_pointer);
943 0 GlobusSoapMessageDebugEnter();
944
945
946 0 result = xsd_decimal_init(&instance);
947
948 0 if (result != GLOBUS_SUCCESS)
949 {
950 0 goto exit;
951 }
952
953 0 result = globus_soap_message_deserialize_decimal_attribute(
954 message,
955 attr_qname,
956 instance);
957
958 0 if(GlobusSoapMessageStatusAttributeNotFoundCheck(result))
959 {
960 0 result = GLOBUS_SUCCESS;
961 0 xsd_decimal_destroy(instance);
962 0 instance = NULL;
963 goto exit;
964 }
965
966 0 exit:
967 0 *ip = instance;
968
969 0 GlobusSoapMessageDebugExit();
970 0 return result;
971 }
972 /* xsd_decimal_deserialize_attribute_pointer() */
973
974
975
976 globus_result_t
977 xsd_decimal_list_serialize(
978 const xsd_QName * element_qname,
979 const xsd_decimal_array * inst,
980 globus_soap_message_handle_t message_handle,
981 globus_xsd_element_options_t options)
982 0 {
983 0 globus_result_t result = GLOBUS_SUCCESS;
984 GlobusFuncName(xsd_decimal_list_serialize);
985 0 GlobusSoapMessageDebugEnter();
986
987 0 if(!(options & GLOBUS_XSD_ELEMENT_CONTENTS_ONLY))
988 {
989 /* add begin element */
990 0 result = globus_soap_message_element_ns_set(
991 message_handle,
992 element_qname,
993 element_qname->Namespace,
994 &options);
995 0 if(result != GLOBUS_SUCCESS)
996 {
997 0 result = GlobusSoapMessageErrorSerializeFailed(
998 result, NULL, element_qname);
999 0 goto exit;
1000 }
1001
1002 0 result = globus_soap_message_serialize_element(
1003 message_handle,
1004 element_qname,
1005 options,
1006 &xsd_decimal_qname);
1007 0 if(result != GLOBUS_SUCCESS)
1008 {
1009 0 result = GlobusSoapMessageErrorSerializeFailed(
1010 result, NULL, element_qname);
1011 0 goto exit;
1012 }
1013
1014 0 if(options & GLOBUS_XSD_ELEMENT_TYPE_ATTR &&
1015 !globus_soap_message_serialize_is_c14n_subset(message_handle))
1016 {
1017 xsd_QName type_attr;
1018 0 type_attr.local = "type";
1019 0 type_attr.Namespace =
1020 "http://www.w3.org/2001/XMLSchema-instance";
1021 0 result = globus_soap_message_serialize_QName_attribute(
1022 message_handle,
1023 &type_attr,
1024 &xsd_decimal_qname);
1025 0 if(result != GLOBUS_SUCCESS)
1026 {
1027 0 result = GlobusSoapMessageErrorSerializeFailed(
1028 result, NULL, element_qname);
1029 0 goto exit;
1030 }
1031 }
1032
1033 0 result = globus_soap_message_serialize_element_begin_close(
1034 message_handle, element_qname);
1035 0 if(result != GLOBUS_SUCCESS)
1036 {
1037 0 result = GlobusSoapMessageErrorSerializeFailed(
1038 result, NULL, element_qname);
1039 0 goto exit;
1040 }
1041 }
1042
1043 0 result = xsd_decimal_list_serialize_contents(
1044 inst,
1045 message_handle,
1046 options);
1047 0 if(result != GLOBUS_SUCCESS)
1048 {
1049 0 result = GlobusSoapMessageErrorSerializeFailed(
1050 result, NULL, element_qname);
1051 0 goto exit;
1052 }
1053
1054 0 if(!(options & GLOBUS_XSD_ELEMENT_CONTENTS_ONLY))
1055 {
1056 /* add end element */
1057 0 result = globus_soap_message_serialize_element_end(
1058 message_handle,
1059 element_qname,
1060 options,
1061 &xsd_decimal_qname);
1062 0 if(result != GLOBUS_SUCCESS)
1063 {
1064 0 result = GlobusSoapMessageErrorSerializeFailed(
1065 result, NULL, element_qname);
1066 0 goto exit;
1067 }
1068
1069 0 globus_soap_message_element_ns_remove(
1070 message_handle,
1071 element_qname->Namespace,
1072 &options);
1073 }
1074
1075 0 exit:
1076
1077 0 GlobusSoapMessageDebugExit();
1078 0 return result;
1079 }
1080
1081
1082
1083
1084 globus_result_t
1085 xsd_decimal_list_serialize_contents(
1086 const xsd_decimal_array * inst,
1087 globus_soap_message_handle_t message_handle,
1088 globus_xsd_element_options_t options)
1089 0 {
1090 0 globus_result_t result = GLOBUS_SUCCESS;
1091 GlobusFuncName(xsd_decimal_list_serialize_contents);
1092 0 GlobusSoapMessageDebugEnter();
1093
1094 0 result = globus_soap_message_serialize_decimal_list(
1095 message_handle,
1096 inst);
1097 0 if(result != GLOBUS_SUCCESS)
1098 {
1099 0 result = GlobusSoapMessageErrorSerializeFailed(
1100 result, "could not serialize as list", &xsd_decimal_qname);
1101 0 goto exit;
1102 }
1103
1104 0 exit:
1105
1106 0 GlobusSoapMessageDebugExit();
1107 0 return result;
1108 }
1109 /* xsd_decimal_list_serialize_contents() */
1110
1111
1112
1113 globus_result_t
1114 xsd_decimal_list_serialize_attribute(
1115 const xsd_QName * attr_qname,
1116 const xsd_decimal_array * inst,
1117 globus_soap_message_handle_t message_handle,
1118 globus_xsd_element_options_t options)
1119 0 {
1120 0 globus_result_t result = GLOBUS_SUCCESS;
1121 GlobusFuncName(xsd_decimal_list_serialize_attribute);
1122 0 GlobusSoapMessageDebugEnter();
1123
1124 0 result = globus_soap_message_serialize_decimal_attribute_list(
1125 message_handle,
1126 attr_qname,
1127 inst);
1128 0 if(result != GLOBUS_SUCCESS)
1129 {
1130 0 result = GlobusSoapMessageErrorSerializeFailed(
1131 result, NULL, attr_qname);
1132 0 goto exit;
1133 }
1134
1135 0 exit:
1136
1137 0 GlobusSoapMessageDebugExit();
1138 0 return result;
1139 }
1140 /* xsd_decimal_list_serialize_attribute() */
1141
1142
1143
1144 globus_result_t
1145 xsd_decimal_list_deserialize_attribute(
1146 const xsd_QName * attr_qname,
1147 xsd_decimal_array * ip,
1148 globus_soap_message_handle_t message_handle,
1149 globus_xsd_element_options_t options)
1150 0 {
1151 0 globus_result_t result = GLOBUS_SUCCESS;
1152 GlobusFuncName(xsd_decimal_list_deserialize_attribute);
1153 0 GlobusSoapMessageDebugEnter();
1154
1155 0 result =
1156 globus_soap_message_deserialize_decimal_attribute_list(
1157 message_handle, attr_qname, ip);
1158 0 if(result != GLOBUS_SUCCESS)
1159 {
1160 0 result = GlobusSoapMessageErrorDeserializeFailed(
1161 result, attr_qname);
1162 }
1163
1164 0 return result;
1165 }
1166 /* xsd_decimal_list_deserialize_attribute() */
1167
1168
1169
1170 globus_result_t
1171 xsd_decimal_list_deserialize(
1172 const xsd_QName * element_qname,
1173 xsd_decimal_array * ip,
1174 globus_soap_message_handle_t message_handle,
1175 globus_xsd_element_options_t options)
1176 0 {
1177 0 globus_result_t result = GLOBUS_SUCCESS;
1178 GlobusFuncName(xsd_decimal_list_deserialize);
1179 0 GlobusSoapMessageDebugEnter();
1180
1181 0 if(!(options & GLOBUS_XSD_ELEMENT_CONTENTS_ONLY))
1182 {
1183 0 result = globus_soap_message_deserialize_element(
1184 message_handle, element_qname);
1185 0 if(result != GLOBUS_SUCCESS)
1186 {
1187 0 goto error_exit;
1188 }
1189
1190 0 result =
1191 globus_soap_message_deserialize_element_begin_close(
1192 message_handle);
1193 0 if(result != GLOBUS_SUCCESS)
1194 {
1195 0 goto error_exit;
1196 }
1197 }
1198
1199 0 result =
1200 xsd_decimal_list_deserialize_contents(
1201 ip, message_handle, options);
1202 0 if(result != GLOBUS_SUCCESS)
1203 {
1204 0 goto error_exit;
1205 }
1206
1207 0 if(!(options & GLOBUS_XSD_ELEMENT_CONTENTS_ONLY))
1208 {
1209 0 result =
1210 globus_soap_message_deserialize_element_end(
1211 message_handle,
1212 element_qname);
1213 0 if(result != GLOBUS_SUCCESS)
1214 {
1215 0 goto error_exit;
1216 }
1217 }
1218
1219 0 goto exit;
1220
1221 0 error_exit:
1222
1223 0 if(!GlobusSoapMessageStatusCheck(result))
1224 {
1225 0 result = GlobusSoapMessageErrorDeserializeFailed(
1226 result, element_qname);
1227 }
1228
1229 0 exit:
1230
1231 0 GlobusSoapMessageDebugExit();
1232 0 return result;
1233 }
1234 /* xsd_decimal_list_deserialize() */
1235
1236
1237
1238 globus_result_t
1239 xsd_decimal_list_deserialize_contents(
1240 xsd_decimal_array * ip,
1241 globus_soap_message_handle_t message_handle,
1242 globus_xsd_element_options_t options)
1243 0 {
1244 0 globus_result_t result = GLOBUS_SUCCESS;
1245 GlobusFuncName(xsd_decimal_list_deserialize_contents);
1246 0 GlobusSoapMessageDebugEnter();
1247
1248 0 result =
1249 globus_soap_message_deserialize_decimal_list(
1250 message_handle, ip);
1251 if(result != GLOBUS_SUCCESS)
1252 {
1253 0 goto exit;
1254 }
1255
1256 0 exit:
1257
1258 0 result = GlobusSoapMessageErrorDeserializeFailed(
1259 result, &xsd_decimal_qname);
1260 0 return result;
1261 }
1262 /* xsd_decimal_list_deserialize_contents() */
1263
1264
1265
1266 globus_result_t
1267 globus_soap_message_serialize_decimal(
1268 globus_soap_message_handle_t handle,
1269 const xsd_decimal * val)
1270 15 {
1271 15 int res = 0;
1272 15 globus_result_t result = GLOBUS_SUCCESS;
1273 GlobusFuncName(globus_soap_message_serialize_decimal);
1274 15 GlobusSoapMessageDebugEnter();
1275
1276
1277 {
1278 char format_string[42];
1279 xmlChar * significand_buf;
1280 xmlChar * p;
1281 int i;
1282 int left_of_decimal;
1283
1284 15 significand_buf = (xmlChar *) BN_bn2dec(&val->significand);
1285 15 if (significand_buf == NULL)
1286 {
1287 char errbuf[120];
1288 unsigned long errval;
1289
1290 0 errval = ERR_peek_last_error();
1291 0 ERR_error_string_n(errval, errbuf, sizeof(errbuf));
1292 0 result = GlobusSoapMessageErrorSerializeFailed(
1293 handle->result,
1294 errbuf,
1295 &xsd_decimal_qname);
1296
1297 0 goto exit;
1298 }
1299 15 if (val->exponent >= 0)
1300 {
1301 6 if ((res = xmlTextWriterWriteString(handle->writer,
1302 significand_buf))
1303 < 0)
1304 {
1305 0 goto serialize_failed;
1306 }
1307 9 for (i = 0; i < val->exponent; i++)
1308 {
1309 3 if((res = xmlTextWriterWriteString(handle->writer,
1310 (xmlChar*) "0")) < 0)
1311 {
1312 0 goto serialize_failed;
1313 }
1314 }
1315 }
1316 else
1317 {
1318 9 p = significand_buf;
1319
1320 9 if (*p == '-')
1321 {
1322 3 if ((res = xmlTextWriterWriteString(handle->writer,
1323 (xmlChar*)"-"))
1324 <0)
1325 {
1326 0 goto serialize_failed;
1327 }
1328 3 p++;
1329 }
1330
1331 9 left_of_decimal = strlen((char *)p) + val->exponent;
1332 9 if (left_of_decimal > 0)
1333 {
1334 0 sprintf(format_string, "%%%ds.", left_of_decimal);
1335 0 if ((res = xmlTextWriterWriteFormatString(
1336 handle->writer, format_string, p)) < 0)
1337 {
1338 0 goto serialize_failed;
1339 }
1340 0 p += left_of_decimal;
1341 }
1342 else
1343 {
1344 9 if ((res = xmlTextWriterWriteString(handle->writer,
1345 (xmlChar*)"0."))
1346 < 0)
1347 {
1348 0 goto serialize_failed;
1349 }
1350
1351 21 for (i = 0; i < -left_of_decimal; i++)
1352 {
1353 12 if ((res = xmlTextWriterWriteString(
1354 handle->writer, (xmlChar*) "0")) < 0)
1355 {
1356 0 goto serialize_failed;
1357 }
1358 }
1359 }
1360 9 if ((res = xmlTextWriterWriteString(handle->writer, p)) < 0)
1361 {
1362 9 goto serialize_failed;
1363 }
1364 }
1365 15 serialize_failed:
1366 15 if (res < 0)
1367 {
1368 0 xmlErrorPtr err = xmlGetLastError();
1369 0 result = GlobusSoapMessageErrorSerializeFailed(
1370 (handle->result ? handle->result : GLOBUS_SUCCESS),
1371 (err ? err->message : ""),
1372 &xsd_decimal_qname);
1373 }
1374 15 OPENSSL_free(significand_buf);
1375 }
1376
1377
1378 15 exit:
1379
1380 15 GlobusSoapMessageDebugExit();
1381 15 return result;
1382 }
1383 /* globus_soap_message_serialize_decimal() */
1384
1385 globus_result_t
1386 globus_soap_message_deserialize_decimal(
1387 globus_soap_message_handle_t handle,
1388 xsd_decimal * val)
1389 15 {
1390 15 globus_result_t result = GLOBUS_SUCCESS;
1391 const xmlChar * content;
1392 const xmlChar * content_save;
1393 GlobusFuncName(globus_soap_message_deserialize_decimal);
1394 15 GlobusSoapMessageDebugEnter();
1395
1396 15 result = globus_i_soap_message_deserialize_next_content(handle);
1397 15 if(result != GLOBUS_SUCCESS)
1398 {
1399 0 result = GlobusSoapMessageErrorDeserializeFailed(
1400 result, &xsd_decimal_qname);
1401 0 goto exit;
1402 }
1403
1404 15 content = xmlTextReaderConstValue(handle->reader);
1405 15 if (!content)
1406 {
1407 0 result = GlobusSoapMessageErrorDeserializeFailed(
1408 GLOBUS_SUCCESS, &xsd_decimal_qname);
1409 }
1410 15 content_save = content;
1411 {
1412
1413 {
1414 15 char * start_num = 0;
1415 15 globus_bool_t negate = GLOBUS_FALSE;
1416
1417 15 BN_init(&val->significand);
1418 15 val->exponent = 0;
1419 15 start_num = (char *) content;
1420 30 while (*start_num != 0 && isspace(*start_num))
1421 {
1422 0 start_num++;
1423 }
1424 15 if (*start_num == '-')
1425 {
1426 3 negate = GLOBUS_TRUE;
1427 3 start_num++;
1428 }
1429 51 while(*start_num != 0 && isdigit(*start_num))
1430 {
1431 21 BN_mul_word(&val->significand, 10);
1432 21 BN_add_word(&val->significand, (BN_ULONG) ((*start_num) - '0'));
1433 21 start_num++;
1434 }
1435 15 if (*start_num == '.')
1436 {
1437 9 start_num++;
1438 }
1439 105 while (*start_num != 0 && isdigit(*start_num))
1440 {
1441 75 BN_mul_word(&val->significand, 10);
1442 75 BN_add_word(&val->significand, ((*start_num)) - '0');
1443 75 val->exponent--;
1444 75 start_num++;
1445 }
1446 30 while (*start_num != 0 && isspace(*start_num))
1447 {
1448 0 start_num++;
1449 }
1450 15 if (*start_num != 0)
1451 {
1452 0 result = GlobusSoapMessageErrorDeserializeFailed(
1453 GLOBUS_SUCCESS, &xsd_decimal_qname);
1454 }
1455 15 if (negate)
1456 {
1457 3 val->significand.neg = 1;
1458 }
1459 }
1460
1461 }
1462
1463 15 exit:
1464 15 GlobusSoapMessageDebugExit();
1465 15 return result;
1466 }
1467 /* globus_soap_message_deserialize_decimal() */
1468
1469 globus_result_t
1470 globus_soap_message_serialize_decimal_list(
1471 globus_soap_message_handle_t handle,
1472 const xsd_decimal_array * inst)
1473 0 {
1474 0 int i = 0;
1475 0 globus_result_t result = GLOBUS_SUCCESS;
1476 int res;
1477 GlobusFuncName(globus_soap_message_serialize_string_list);
1478 0 GlobusSoapMessageDebugEnter();
1479
1480 0 for(i = 0; i < inst->length; ++i)
1481 {
1482 0 result = globus_soap_message_serialize_decimal(
1483 handle,
1484 &inst->elements[i]);
1485
1486 0 if (result != GLOBUS_SUCCESS)
1487 {
1488 0 goto exit;
1489 }
1490
1491 0 if (i != (inst->length-1))
1492 {
1493 0 res = xmlTextWriterWriteString(handle->writer, (xmlChar *) " ");
1494 0 if(res < 0)
1495 {
1496 0 xmlErrorPtr err = xmlGetLastError();
1497 0 result = GlobusSoapMessageErrorSerializeFailed(
1498 (handle->result ? handle->result : GLOBUS_SUCCESS),
1499 (err ? err->message : ""),
1500 &xsd_decimal_qname);
1501 0 goto exit;
1502 }
1503 }
1504 }
1505
1506 0 exit:
1507
1508 0 GlobusSoapMessageDebugExit();
1509 0 return result;
1510 }
1511 /* globus_soap_message_serialize_decimal_list() */
1512
1513 globus_result_t
1514 globus_soap_message_deserialize_decimal_list(
1515 globus_soap_message_handle_t handle,
1516 xsd_decimal_array * array_val)
1517 0 {
1518 0 globus_result_t result = GLOBUS_SUCCESS;
1519 0 xmlChar * content_value = NULL;
1520 0 xmlChar * content = NULL;
1521 char * saveptr;
1522 xsd_decimal * val;
1523 GlobusFuncName(globus_soap_message_deserialize_decimal_list);
1524 0 GlobusSoapMessageDebugEnter();
1525
1526 0 result = globus_i_soap_message_deserialize_next_content(handle);
1527 0 if(result != GLOBUS_SUCCESS)
1528 {
1529 0 result = GlobusSoapMessageErrorDeserializeFailed(
1530 result, &xsd_decimal_qname);
1531 0 goto exit;
1532 }
1533
1534 0 content_value = xmlTextReaderValue(handle->reader);
1535 0 if (!content_value)
1536 {
1537 0 result = GlobusSoapMessageErrorDeserializeFailed(
1538 GLOBUS_SUCCESS, &xsd_decimal_qname);
1539 0 goto exit;
1540 }
1541
1542 0 for (content = (xmlChar *) strtok_r((char *) content_value, " \t\r\n", &saveptr);
1543 0 content != NULL;
1544 0 content = (xmlChar *) strtok_r(NULL, " \t\r\n", &saveptr))
1545 {
1546 0 val = xsd_decimal_array_push(array_val);
1547 {
1548
1549 {
1550 0 char * start_num = 0;
1551 0 globus_bool_t negate = GLOBUS_FALSE;
1552
1553 0 BN_init(&val->significand);
1554 0 val->exponent = 0;
1555 0 start_num = (char *) content;
1556 0 while (*start_num != 0 && isspace(*start_num))
1557 {
1558 0 start_num++;
1559 }
1560 0 if (*start_num == '-')
1561 {
1562 0 negate = GLOBUS_TRUE;
1563 0 start_num++;
1564 }
1565 0 while(*start_num != 0 && isdigit(*start_num))
1566 {
1567 0 BN_mul_word(&val->significand, 10);
1568 0 BN_add_word(&val->significand, (BN_ULONG) ((*start_num) - '0'));
1569 0 start_num++;
1570 }
1571 0 if (*start_num == '.')
1572 {
1573 0 start_num++;
1574 }
1575 0 while (*start_num != 0 && isdigit(*start_num))
1576 {
1577 0 BN_mul_word(&val->significand, 10);
1578 0 BN_add_word(&val->significand, ((*start_num)) - '0');
1579 0 val->exponent--;
1580 0 start_num++;
1581 }
1582 0 while (*start_num != 0 && isspace(*start_num))
1583 {
1584 0 start_num++;
1585 }
1586 0 if (*start_num != 0)
1587 {
1588 0 result = GlobusSoapMessageErrorDeserializeFailed(
1589 GLOBUS_SUCCESS, &xsd_decimal_qname);
1590 }
1591 0 if (negate)
1592 {
1593 0 val->significand.neg = 1;
1594 }
1595 }
1596
1597 }
1598 }
1599
1600 0 exit:
1601 0 if (content_value != NULL)
1602 {
1603 0 xmlFree(content_value);
1604 }
1605 0 if (result != GLOBUS_SUCCESS)
1606 {
1607 0 xsd_decimal_array_destroy_contents(array_val);
1608 }
1609 0 GlobusSoapMessageDebugExit();
1610 0 return result;
1611 }
1612 /* globus_soap_message_deserialize_decimal_list() */
1613
1614 globus_result_t
1615 globus_soap_message_serialize_decimal_attribute(
1616 globus_soap_message_handle_t handle,
1617 const xsd_QName * attr_name,
1618 const xsd_decimal * val)
1619 0 {
1620 0 globus_result_t result = GLOBUS_SUCCESS;
1621 GlobusFuncName(globus_soap_message_serialize_decimal_attribute);
1622 0 GlobusSoapMessageDebugEnter();
1623
1624 0 if (val == NULL)
1625 {
1626 0 result = GlobusSoapMessageErrorNullParam;
1627
1628 0 goto exit;
1629 }
1630
1631 0 result = globus_soap_message_serialize_attribute(
1632 handle,
1633 attr_name);
1634 0 if (result != GLOBUS_SUCCESS)
1635 {
1636 0 goto exit;
1637 }
1638
1639 0 result = globus_soap_message_serialize_decimal(
1640 handle,
1641 val);
1642 0 if(result != GLOBUS_SUCCESS)
1643 {
1644 0 goto exit;
1645 }
1646
1647 0 result = globus_soap_message_serialize_attribute_end(
1648 handle,
1649 attr_name);
1650
1651 0 exit:
1652
1653 0 GlobusSoapMessageDebugExit();
1654 0 return result;
1655 }
1656 /* globus_soap_message_serialize_decimal_attribute() */
1657
1658 globus_result_t
1659 globus_soap_message_deserialize_decimal_attribute(
1660 globus_soap_message_handle_t handle,
1661 const xsd_QName * attr_qname,
1662 xsd_decimal * val)
1663 0 {
1664 0 globus_result_t result = GLOBUS_SUCCESS;
1665 0 xmlChar * content = NULL;
1666 0 xmlChar * content_save = NULL;
1667 GlobusFuncName(globus_soap_message_deserialize_decimal_attribute);
1668 0 GlobusSoapMessageDebugEnter();
1669
1670 0 if (val == NULL || attr_qname == NULL || attr_qname->local == NULL)
1671 {
1672 0 result = GlobusSoapMessageErrorNullParam;
1673
1674 0 goto exit;
1675 }
1676
1677 0 result = globus_soap_message_deserialize_attribute(
1678 handle,
1679 attr_qname,
1680 &content);
1681 0 if (result != GLOBUS_SUCCESS)
1682 {
1683 0 goto exit;
1684 }
1685 0 content_save = content;
1686
1687 {
1688
1689 {
1690 0 char * start_num = 0;
1691 0 globus_bool_t negate = GLOBUS_FALSE;
1692
1693 0 BN_init(&val->significand);
1694 0 val->exponent = 0;
1695 0 start_num = (char *) content;
1696 0 while (*start_num != 0 && isspace(*start_num))
1697 {
1698 0 start_num++;
1699 }
1700 0 if (*start_num == '-')
1701 {
1702 0 negate = GLOBUS_TRUE;
1703 0 start_num++;
1704 }
1705 0 while(*start_num != 0 && isdigit(*start_num))
1706 {
1707 0 BN_mul_word(&val->significand, 10);
1708 0 BN_add_word(&val->significand, (BN_ULONG) ((*start_num) - '0'));
1709 0 start_num++;
1710 }
1711 0 if (*start_num == '.')
1712 {
1713 0 start_num++;
1714 }
1715 0 while (*start_num != 0 && isdigit(*start_num))
1716 {
1717 0 BN_mul_word(&val->significand, 10);
1718 0 BN_add_word(&val->significand, ((*start_num)) - '0');
1719 0 val->exponent--;
1720 0 start_num++;
1721 }
1722 0 while (*start_num != 0 && isspace(*start_num))
1723 {
1724 0 start_num++;
1725 }
1726 0 if (*start_num != 0)
1727 {
1728 0 result = GlobusSoapMessageErrorDeserializeFailed(
1729 GLOBUS_SUCCESS, &xsd_decimal_qname);
1730 }
1731 0 if (negate)
1732 {
1733 0 val->significand.neg = 1;
1734 }
1735 }
1736
1737 }
1738 0 exit:
1739 0 if (content_save != NULL)
1740 {
1741 0 xmlFree(content_save);
1742 }
1743
1744 0 GlobusSoapMessageDebugExit();
1745 0 return result;
1746 }
1747 /* globus_soap_message_deserialize_decimal_attribute() */
1748
1749 globus_result_t
1750 globus_soap_message_serialize_decimal_attribute_list(
1751 globus_soap_message_handle_t handle,
1752 const xsd_QName * attr_name,
1753 const xsd_decimal_array * val)
1754 0 {
1755 0 globus_result_t result = GLOBUS_SUCCESS;
1756 GlobusFuncName(globus_soap_message_serialize_decimal_attribute_list);
1757 0 GlobusSoapMessageDebugEnter();
1758
1759 0 if (val == NULL)
1760 {
1761 0 result = GlobusSoapMessageErrorNullParam;
1762
1763 0 goto exit;
1764 }
1765
1766 0 result = globus_soap_message_serialize_attribute(
1767 handle,
1768 attr_name);
1769 0 if (result != GLOBUS_SUCCESS)
1770 {
1771 0 goto exit;
1772 }
1773
1774 0 result = globus_soap_message_serialize_decimal_list(
1775 handle,
1776 val);
1777
1778 0 if(result != GLOBUS_SUCCESS)
1779 {
1780 0 goto exit;
1781 }
1782
1783 0 result = globus_soap_message_serialize_attribute_end(
1784 handle,
1785 attr_name);
1786
1787 0 exit:
1788
1789 0 GlobusSoapMessageDebugExit();
1790 0 return result;
1791 }
1792 /* globus_soap_message_serialize_decimal_attribute_list() */
1793
1794 globus_result_t
1795 globus_soap_message_deserialize_decimal_attribute_list(
1796 globus_soap_message_handle_t handle,
1797 const xsd_QName * attr_qname,
1798 xsd_decimal_array * list_val)
1799 0 {
1800 0 globus_result_t result = GLOBUS_SUCCESS;
1801 0 xmlChar * content_value = NULL;
1802 0 xmlChar * content = NULL;
1803 char * saveptr;
1804 xsd_decimal * val;
1805 GlobusFuncName(globus_soap_message_deserialize_decimal_attribute_list);
1806 0 GlobusSoapMessageDebugEnter();
1807
1808 0 if (list_val == NULL || attr_qname == NULL || attr_qname->local == NULL)
1809 {
1810 0 result = GlobusSoapMessageErrorNullParam;
1811
1812 0 goto exit;
1813 }
1814
1815 0 result = globus_soap_message_deserialize_attribute(
1816 handle,
1817 attr_qname,
1818 &content_value);
1819 0 if (result != GLOBUS_SUCCESS)
1820 {
1821 0 goto exit;
1822 }
1823
1824 for (content = (xmlChar *) strtok_r((char *) content_value, " \t\r\n",
1825 0 &saveptr);
1826 0 content != NULL;
1827 0 content = (xmlChar *) strtok_r(NULL, " \t\r\n", &saveptr))
1828 {
1829 0 val = xsd_decimal_array_push(list_val);
1830 {
1831
1832 {
1833 0 char * start_num = 0;
1834 0 globus_bool_t negate = GLOBUS_FALSE;
1835
1836 0 BN_init(&val->significand);
1837 0 val->exponent = 0;
1838 0 start_num = (char *) content;
1839 0 while (*start_num != 0 && isspace(*start_num))
1840 {
1841 0 start_num++;
1842 }
1843 0 if (*start_num == '-')
1844 {
1845 0 negate = GLOBUS_TRUE;
1846 0 start_num++;
1847 }
1848 0 while(*start_num != 0 && isdigit(*start_num))
1849 {
1850 0 BN_mul_word(&val->significand, 10);
1851 0 BN_add_word(&val->significand, (BN_ULONG) ((*start_num) - '0'));
1852 0 start_num++;
1853 }
1854 0 if (*start_num == '.')
1855 {
1856 0 start_num++;
1857 }
1858 0 while (*start_num != 0 && isdigit(*start_num))
1859 {
1860 0 BN_mul_word(&val->significand, 10);
1861 0 BN_add_word(&val->significand, ((*start_num)) - '0');
1862 0 val->exponent--;
1863 0 start_num++;
1864 }
1865 0 while (*start_num != 0 && isspace(*start_num))
1866 {
1867 0 start_num++;
1868 }
1869 0 if (*start_num != 0)
1870 {
1871 0 result = GlobusSoapMessageErrorDeserializeFailed(
1872 GLOBUS_SUCCESS, &xsd_decimal_qname);
1873 }
1874 0 if (negate)
1875 {
1876 0 val->significand.neg = 1;
1877 }
1878 }
1879
1880 }
1881 }
1882 0 exit:
1883 0 if (content_value != NULL)
1884 {
1885 0 xmlFree(content_value);
1886 }
1887 0 if (result != GLOBUS_SUCCESS)
1888 {
1889 0 xsd_decimal_array_destroy_contents(list_val);
1890 }
1891
1892 0 GlobusSoapMessageDebugExit();
1893 0 return result;
1894 }