Index: ossp-pkg/xds/Makefile RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/Makefile,v rcsdiff -q -kk '-r1.10' '-r1.11' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/Makefile,v' 2>/dev/null --- Makefile 2001/07/08 14:07:35 1.10 +++ Makefile 2001/07/08 15:20:34 1.11 @@ -14,7 +14,8 @@ LDFLAGS = OBJS = decode.o destroy.o encode.o getbuffer.o init.o register.o \ - setbuffer.o unregister.o vdecode.o vencode.o find-engine.o + setbuffer.o unregister.o vdecode.o vencode.o find-engine.o \ + set-capacity.o .c.o: $(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $< Index: ossp-pkg/xds/internal.h RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/internal.h,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/internal.h,v' 2>/dev/null --- internal.h 2001/07/08 14:09:42 1.2 +++ internal.h 2001/07/08 15:20:34 1.3 @@ -55,5 +55,6 @@ }; int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos); +int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity); #endif /* !defined(__INTERNAL_H__) */ Index: ossp-pkg/xds/set-capacity.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/set-capacity.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/Attic/set-capacity.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/set-capacity.c' 2>/dev/null --- ossp-pkg/xds/set-capacity.c +++ - 2024-05-17 05:36:20.154985302 +0200 @@ -0,0 +1,67 @@ +/* + 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 /* delete me */ + +#include +#include +#include "internal.h" + +int xds_set_capacity(void** array, size_t* array_capacity, size_t new_capacity, size_t elem_size, size_t initial_capacity) + { + void* buf; + size_t size; + + /* Sanity checks. */ + + assert(array != NULL); + assert(array_capacity != NULL); + assert(elem_size != 0); + assert(initial_capacity != 0); + + /* Do we need to re-allocate? */ + + if (*array_capacity > new_capacity) + return XDS_OK; + + /* Find the correct capacity. */ + + for(size = (*array_capacity != 0) ? *array_capacity * 2 : initial_capacity; size <= new_capacity; size *= 2) + ; + + /* Allocate the array and store the new values. */ + + printf("Reallocating array with capacity %d; old value was %d.\n", size, *array_capacity); + + buf = realloc(*array, size * elem_size); + if (buf == NULL) + return XDS_ERR_NO_MEM; + *array = buf; + *array_capacity = size; + + return XDS_OK; + }