Index: ossp-pkg/xds/regression-tests/Makefile RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile,v rcsdiff -q -kk '-r1.13' '-r1.14' -u '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile,v' 2>/dev/null --- Makefile 2001/07/18 17:38:37 1.13 +++ Makefile 2001/07/18 19:03:17 1.14 @@ -12,7 +12,8 @@ TESTS = xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \ xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe xds-engine-restart.exe \ - xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe + xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe \ + xds-mystruct.exe .SUFFIXES: .SUFFIXES: .c .exe Index: ossp-pkg/xds/regression-tests/xds-mystruct.c RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xds-mystruct.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xds-mystruct.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/regression-tests/xds-mystruct.c' 2>/dev/null --- ossp-pkg/xds/regression-tests/xds-mystruct.c +++ - 2024-05-20 23:56:45.068365273 +0200 @@ -0,0 +1,165 @@ +/* + 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 "../internal.h" + +struct mystruct + { + int32_t small; + int64_t big; + u_int32_t positive; + }; + +static int encode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + int rc; + struct mystruct* ms; + + assert(xds != NULL); + assert(buffer != NULL); + assert(buffer_size != 0); + assert(args != NULL); + + if (buffer_size >= sizeof(struct mystruct)) + { + ms = va_arg(*args, struct mystruct*); + rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive); + if (rc != XDS_OK) + return rc; + } + else + return sizeof(struct mystruct); + + return 0; + } + +static int decode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + int rc; + struct mystruct* ms; + + assert(xds != NULL); + assert(buffer != NULL); + assert(buffer_size != 0); + assert(args != NULL); + + if (buffer_size >= sizeof(struct mystruct)) + { + ms = va_arg(*args, struct mystruct*); + rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive)); + if (rc != XDS_OK) + return rc; + } + else + return XDS_ERR_UNDERFLOW; + + return 0; + } + +int main() + { + xds_t* xds; + char* buffer; + size_t buffer_size; + + struct mystruct ms, new_ms; + ms.small = -0x1234567; + ms.big = -0x1234567890abcdeLL; + ms.positive = 42; + + /* Encode our copy of mystruct using our encoding callback. Then + get a the buffer and destroy the context again. */ + + xds = xds_init(XDS_ENCODE); + if (xds == NULL) + { + printf("Failed to initialize XDS context.\n"); + return 1; + } + if (xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK || + xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK || + xds_register(xds, "int64", &xdr_encode_int64, NULL) != XDS_OK || + xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK) + { + printf("Failed to register my encoding engines.\n"); + return 1; + } + if (xds_encode(xds, "mystruct", &ms) != XDS_OK) + { + printf("xds_encode() failed!\n"); + return 1; + } + if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK) + { + printf("xds_setbuffer() failed!\n"); + return 1; + } + xds_destroy(xds); + + /* Now create a decoding context and decode the whole thing again. */ + + xds = xds_init(XDS_DECODE); + if (xds == NULL) + { + printf("Failed to initialize XDS context.\n"); + return 1; + } + if (xds_register(xds, "mystruct", &decode_mystruct_engine, NULL) != XDS_OK || + xds_register(xds, "int32", &xdr_decode_int32, NULL) != XDS_OK || + xds_register(xds, "int64", &xdr_decode_int64, NULL) != XDS_OK || + xds_register(xds, "uint32", &xdr_decode_uint32, 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("xds_setbuffer() failed!\n"); + return 1; + } + if (xds_decode(xds, "mystruct", &new_ms) != XDS_OK) + { + printf("xds_decode() failed!\n"); + return 1; + } + xds_destroy(xds); + + /* Both structures must be identical. */ + + if (memcmp(&ms, &new_ms, sizeof(struct mystruct)) != 0) + { + printf("Decoded data does not match the original!\n"); + return 1; + } + + /* Everything went fine. */ + + return 0; + }