Index: ossp-pkg/xds/regression-tests/Makefile RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile,v rcsdiff -q -kk '-r1.9' '-r1.10' -u '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile,v' 2>/dev/null --- Makefile 2001/07/09 19:09:42 1.9 +++ Makefile 2001/07/16 18:38:53 1.10 @@ -4,12 +4,12 @@ WARNFLAGS = -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror OPTFLAGS = -O3 -pipe -CPPFLAGS = +CPPFLAGS = -D_GNU_SOURCE CFLAGS = LDFLAGS = -L.. TESTS = xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \ - xds-getbuffer.exe xds-decode.exe + xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe .SUFFIXES: .SUFFIXES: .c .exe Index: ossp-pkg/xds/regression-tests/xds-setbuffer.c RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xds-setbuffer.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xds-setbuffer.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/regression-tests/xds-setbuffer.c' 2>/dev/null --- ossp-pkg/xds/regression-tests/xds-setbuffer.c +++ - 2024-05-20 23:08:56.315032984 +0200 @@ -0,0 +1,128 @@ +/* + 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" + +static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + assert(xds != NULL); + assert(buffer != NULL); + assert(buffer_size != 0); + if (buffer_size >= 64) + memset(buffer, 'a', 64); + return 64; + } + +int main() + { + xds_t* xds; + char* buffer; + size_t buffer_size; + + /* Create XDS context. */ + + xds = xds_init(XDS_ENCODE); + if (xds == NULL) + { + printf("Failed to initialize XDS context.\n"); + return 1; + } + + /* Register the callback. */ + + if (xds_register(xds, "dummy", &dummy_engine, NULL) != XDS_OK) + { + printf("Failed to register my encoding engine.\n"); + return 1; + } + + /* Give the library a buffer of 64 byte, call the engine once, get + the buffer back and see whether it has been enlarged or not. */ + + buffer = malloc(64); + if (buffer == NULL) + { + printf("Failed to allocate my memory.\n"); + return 1; + } + buffer_size = 64; + if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) + { + printf("xds_setbuffer() failed!\n"); + return 1; + } + if (xds_encode(xds, "dummy") != XDS_OK) + { + printf("xds_encode() failed!\n"); + return 1; + } + if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK) + { + printf("xds_getbuffer() failed!\n"); + return 1; + } + if (buffer_size == 64) + { + printf("xds_encode() did not enlarge the buffer after processing the callback\n"); + printf("even though all capacity was used up!\n"); + return 1; + } + + /* Loan the library a buffer we own, call the engine once to + exceed the buffer's capacity and check, whether the library + returns the correct error code. */ + + buffer = malloc(32); + if (buffer == NULL) + { + printf("Failed to allocate my memory.\n"); + return 1; + } + buffer_size = 32; + if (xds_setbuffer(xds, XDS_LOAN, buffer, buffer_size) != XDS_OK) + { + printf("xds_setbuffer() failed!\n"); + return 1; + } + if (xds_encode(xds, "dummy") != XDS_ERR_OVERFLOW) + { + printf("xds_encode() was supposed to fail with XDS_ERR_OVERFLOW!\n"); + return 1; + } + free(buffer); + + /* Clean up. */ + + xds_destroy(xds); + + /* Everything went fine. */ + + return 0; + }