Index: ossp-pkg/xds/Makefile.in RCS File: /v/ossp/cvs/ossp-pkg/xds/Makefile.in,v rcsdiff -q -kk '-r1.8' '-r1.9' -u '/v/ossp/cvs/ossp-pkg/xds/Makefile.in,v' 2>/dev/null --- Makefile.in 2001/07/23 16:17:43 1.8 +++ Makefile.in 2001/07/23 16:33:03 1.9 @@ -17,7 +17,8 @@ xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \ xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o \ xml-decode-int64.o xml-decode-uint32.o xml-decode-uint64.o \ - xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o + xml-encode-int64.o xml-encode-uint32.o xml-encode-uint64.o \ + xml-encode-double.o xml-decode-double.o .c.o: $(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $< Index: ossp-pkg/xds/regression-tests/Makefile.in RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile.in,v rcsdiff -q -kk '-r1.8' '-r1.9' -u '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile.in,v' 2>/dev/null --- Makefile.in 2001/07/23 16:17:44 1.8 +++ Makefile.in 2001/07/23 16:33:04 1.9 @@ -13,7 +13,7 @@ xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe \ xdr-octetstream.exe xdr-octetstream-empty.exe xdr-string.exe \ xdr-string-empty.exe xds-mystruct.exe xml-uint32.exe xml-int32.exe \ - xml-uint64.exe xml-int64.exe + xml-uint64.exe xml-int64.exe xml-double.exe .SUFFIXES: .SUFFIXES: .c .exe Index: ossp-pkg/xds/regression-tests/xml-double.c RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xml-double.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xml-double.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/regression-tests/xml-double.c' 2>/dev/null --- ossp-pkg/xds/regression-tests/xml-double.c +++ - 2024-05-15 08:38:08.088425810 +0200 @@ -0,0 +1,113 @@ +/* + XDS - OSSP Extensible Data Serialization Library + Copyright (c) 2001 The OSSP Project (http://www.ossp.org/) + Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/) + + This file is part of OSSP XDS, an extensible data serialization + library which can be found at http://www.ossp.com/pkg/xds/. + + Permission to use, copy, modify, and distribute this software for + any purpose with or without fee is hereby granted, provided that + the above copyright notice and this permission notice appear in all + copies. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include "../internal.h" + +int main() + { + xds_t* xds; + char* buffer; + size_t buffer_size; + + xds_double_t values[] = + { + 3.14159265358979323844 + }; + + size_t i; + + /* Encode the values array, then decode it back and compare the + numbers. */ + + xds = xds_init(XDS_ENCODE); + if (xds == NULL) + { + printf("Failed to initialize XDS context.\n"); + return 1; + } + if (xds_register(xds, "int", &xml_encode_double, NULL) != XDS_OK) + { + printf("Failed to register my encoding engines.\n"); + return 1; + } + for (i = 0; i < sizeof(values)/sizeof(xds_double_t); ++i) + { + if (xds_encode(xds, "int", values[i]) != XDS_OK) + { + printf("xds_encode(values[%d]) failed!\n", i); + return 1; + } + } + if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK) + { + printf("getbuffer() failed.\n"); + return 1; + } + xds_destroy(xds); + + printf("%s\n", buffer); + + xds = xds_init(XDS_DECODE); + if (xds == NULL) + { + printf("Failed to initialize XDS context.\n"); + return 1; + } + if (xds_register(xds, "int", &xml_decode_double, NULL) != XDS_OK) + { + printf("Failed to register my decoding engines.\n"); + return 1; + } + if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) + { + printf("setbuffer() failed.\n"); + return 1; + } + for (i = 0; i < sizeof(values)/sizeof(xds_double_t); ++i) + { + xds_double_t val; + if (xds_decode(xds, "int", &val) != XDS_OK) + { + printf("xds_decode(values[%d]) failed!\n", i); + return 1; + } + if (val != values[i]) + { + printf("Decoded value (%E) does not match the original value (%E)!\n", val, values[i]); + return 1; + } + } + xds_destroy(xds); + + /* Everything went fine. */ + + return 0; + } Index: ossp-pkg/xds/xds.h.in RCS File: /v/ossp/cvs/ossp-pkg/xds/xds.h.in,v rcsdiff -q -kk '-r1.4' '-r1.5' -u '/v/ossp/cvs/ossp-pkg/xds/xds.h.in,v' 2>/dev/null --- xds.h.in 2001/07/23 16:17:43 1.4 +++ xds.h.in 2001/07/23 16:33:03 1.5 @@ -42,6 +42,7 @@ typedef @xds_int16_t@ xds_int16_t; typedef @xds_int32_t@ xds_int32_t; typedef @xds_int64_t@ xds_int64_t; +typedef double xds_double_t; enum { @@ -112,4 +113,7 @@ int xml_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args); int xml_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args); +int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args); +int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args); + #endif /* !defined(__LIBXDS_H__) */ Index: ossp-pkg/xds/xml-decode-double.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xml-decode-double.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/Attic/xml-decode-double.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/xml-decode-double.c' 2>/dev/null --- ossp-pkg/xds/xml-decode-double.c +++ - 2024-05-15 08:38:08.095356664 +0200 @@ -0,0 +1,55 @@ +/* + XDS - OSSP Extensible Data Serialization Library + Copyright (c) 2001 The OSSP Project (http://www.ossp.org/) + Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/) + + This file is part of OSSP XDS, an extensible data serialization + library which can be found at http://www.ossp.com/pkg/xds/. + + Permission to use, copy, modify, and distribute this software for + any purpose with or without fee is hereby granted, provided that + the above copyright notice and this permission notice appear in all + copies. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +#include +#include +#include "internal.h" + +int xml_decode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + int rc; + xds_double_t* value; + int len; + + /* Consistency checks. */ + + assert(xds != NULL); + assert(buffer != NULL); + assert(buffer_size != 0); + assert(args != NULL); + if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL) + return XDS_ERR_INVALID_ARG; + + /* Format value into buffer. */ + + value = va_arg(*args, xds_double_t*); + rc = sscanf(buffer, "%lE%n", value, &len); + if (rc <= 0) + return XDS_ERR_UNDERFLOW; + + return len; + } Index: ossp-pkg/xds/xml-encode-double.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xml-encode-double.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/Attic/xml-encode-double.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/xml-encode-double.c' 2>/dev/null --- ossp-pkg/xds/xml-encode-double.c +++ - 2024-05-15 08:38:08.097907163 +0200 @@ -0,0 +1,55 @@ +/* + XDS - OSSP Extensible Data Serialization Library + Copyright (c) 2001 The OSSP Project (http://www.ossp.org/) + Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/) + + This file is part of OSSP XDS, an extensible data serialization + library which can be found at http://www.ossp.com/pkg/xds/. + + Permission to use, copy, modify, and distribute this software for + any purpose with or without fee is hereby granted, provided that + the above copyright notice and this permission notice appear in all + copies. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +#include +#include +#include "internal.h" + +int xml_encode_double(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + int rc; + xds_double_t value; + + /* Consistency checks. */ + + assert(xds != NULL); + assert(buffer != NULL); + assert(buffer_size != 0); + assert(args != NULL); + if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL) + return XDS_ERR_INVALID_ARG; + + /* Format value into buffer. */ + + value = va_arg(*args, xds_double_t); + rc = snprintf(buffer, buffer_size, "%E", value); + if (rc < 0) + return buffer_size*2; + assert(rc >= 15); + + return rc; + }