*** /dev/null Sat Nov 23 01:27:00 2024
--- - Sat Nov 23 01:27:07 2024
***************
*** 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 <stdio.h> /* delete me */
+
+ #include <stdlib.h>
+ #include <assert.h>
+ #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;
+ }
|