OSSP CVS Repository

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

Check-in Number: 4207
Date: 2001-Jul-18 19:38:37 (local)
2001-Jul-18 17:38:37 (UTC)
User:simons
Branch:
Comment: When an engine is restarted after buffer enlargement, the original value of the ap_list must be restored. Fixed that bug and added a test suite that verifies this behavior.
Tickets:
Inspections:
Files:
ossp-pkg/xds/regression-tests/Makefile      1.12 -> 1.13     1 inserted, 1 deleted
ossp-pkg/xds/regression-tests/xds-engine-restart.c      added-> 1.1
ossp-pkg/xds/vencode.c      1.7 -> 1.8     5 inserted, 0 deleted

ossp-pkg/xds/regression-tests/Makefile 1.12 -> 1.13

--- Makefile     2001/07/18 16:59:28     1.12
+++ Makefile     2001/07/18 17:38:37     1.13
@@ -11,7 +11,7 @@
 LDFLAGS         = -L..
 
 TESTS           = xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
-                  xds-getbuffer.exe xds-decode.exe xds-setbuffer.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
 
 .SUFFIXES:


ossp-pkg/xds/regression-tests/xds-engine-restart.c -> 1.1

*** /dev/null    Sat Nov 23 01:06:15 2024
--- -    Sat Nov 23 01:06:31 2024
***************
*** 0 ****
--- 1,111 ----
+ /*
+    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>
+ #include <string.h>
+ #include "../internal.h"
+ 
+ static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+     {
+     if (xds == NULL)
+        {
+        printf("XDS context isn't passed through to registered engine.\n");
+        exit(1);
+        }
+     if (engine_context != (void*)42)
+        {
+        printf("Engine context isn't passed through to registered engine.\n");
+        exit(1);
+        }
+     if (buffer == NULL)
+        {
+        printf("Buffer passed to engine is NULL.\n");
+        exit(1);
+        }
+     if (buffer_size == 0)
+        {
+        printf("Buffer size passed to engine is zero!\n");
+        exit(1);
+        }
+     if (args == NULL)
+        {
+        printf("args pointer passed to engine is NULL!\n");
+        exit(1);
+        }
+     if (va_arg(*args, int) != 42)
+        {
+        printf("The varadic argument is not what the engine expected!\n");
+        exit(1);
+        }
+     return 64;
+     }
+ 
+ int main()
+     {
+     xds_t* xds;
+     char*  buffer;
+     size_t buffer_size;
+ 
+     /* Create an XDS context and set a buffer that's too small for the
+        first encode() call. Then call encode() with two parameters:
+        the one the engine is expecting and a different one after that.
+        The engine will complain if it sees the second value -- what
+        would mean that the args parameter was not resetted to the
+        original value before the engine is restarted after buffer
+        enlargement. */
+ 
+     xds = xds_init(XDS_ENCODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "int", &dummy_engine, (void*)42) != XDS_OK)
+        {
+        printf("Failed to register my encoding engines.\n");
+        return 1;
+        }
+     buffer = malloc(32);
+     if (buffer == NULL)
+         {
+         printf("malloc() failed!\n");
+         return 1;
+         }
+     buffer_size = 32;
+     if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK)
+         {
+         printf("xds_setbuffer() failed!\n");
+         return 1;
+         }
+     if (xds_encode(xds, "int", 42, 13) != XDS_OK)
+        {
+        printf("xds_encode() failed!");
+        return 1;
+        }
+     xds_destroy(xds);
+     return 0;
+     }


ossp-pkg/xds/vencode.c 1.7 -> 1.8

--- vencode.c    2001/07/16 18:31:36     1.7
+++ vencode.c    2001/07/18 17:38:37     1.8
@@ -34,6 +34,7 @@
 
 int xds_vencode(xds_t* xds, const char* fmt_arg, va_list args)
     {
+    va_list args_backup;
     char* name;
     char* p;
     char* fmt;
@@ -111,6 +112,7 @@
                 do
                     {
                     printf("Executing engine '%s' ...\n", name);
+                    args_backup = args;
                     rc = (*xds->engines[pos].engine)(xds,
                                                      xds->engines[pos].context,
                                                      xds->buffer + xds->buffer_len,
@@ -123,7 +125,10 @@
                         int rc2;
 
                         if (rc > xds->buffer_capacity - xds->buffer_len)
+                            {
                             restart_engine = (1==1);
+                            args = args_backup;
+                            }
                         else
                             restart_engine = (1!=1);
 

CVSTrac 2.0.1