OSSP CVS Repository

ossp - Check-in [4164]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 4164
Date: 2001-Jul-08 17:20:34 (local)
2001-Jul-08 15:20:34 (UTC)
User:simons
Branch:
Comment: Added generic xds_set_capacity() function that will handle the enlarging of dynamic buffers for the rest of the code.
Tickets:
Inspections:
Files:
ossp-pkg/xds/Makefile      1.10 -> 1.11     2 inserted, 1 deleted
ossp-pkg/xds/internal.h      1.2 -> 1.3     1 inserted, 0 deleted
ossp-pkg/xds/set-capacity.c      added-> 1.1

ossp-pkg/xds/Makefile 1.10 -> 1.11

--- 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 $<


ossp-pkg/xds/internal.h 1.2 -> 1.3

--- 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__) */


ossp-pkg/xds/set-capacity.c -> 1.1

*** /dev/null    Thu May  2 06:07:59 2024
--- -    Thu May  2 06:09:59 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;
+     }

CVSTrac 2.0.1