OSSP CVS Repository

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

Check-in Number: 4205
Date: 2001-Jul-18 18:59:27 (local)
2001-Jul-18 16:59:27 (UTC)
User:simons
Branch:
Comment: Implemented encoding routines for 64 bit integers and added the apropriate test suites.
Tickets:
Inspections:
Files:
ossp-pkg/xds/regression-tests/Makefile      1.11 -> 1.12     4 inserted, 2 deleted
ossp-pkg/xds/regression-tests/xdr-int64.c      added-> 1.1
ossp-pkg/xds/regression-tests/xdr-uint64.c      added-> 1.1
ossp-pkg/xds/xdr-encode-int.c      1.1 -> 1.2     70 inserted, 0 deleted
ossp-pkg/xds/xds.h      1.17 -> 1.18     2 inserted, 0 deleted

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

--- Makefile     2001/07/18 11:29:46     1.11
+++ Makefile     2001/07/18 16:59:28     1.12
@@ -2,7 +2,9 @@
 
 CC              = gcc
 
-WARNFLAGS       = -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Werror
+WARNFLAGS       = -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wcast-align -Winline \
+                  -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long \
+                  -Werror
 OPTFLAGS        = -O3 -pipe
 CPPFLAGS        = -D_GNU_SOURCE
 CFLAGS          =
@@ -10,7 +12,7 @@
 
 TESTS           = xds-core.exe xds-find-engine.exe xds-register.exe xds-encode.exe \
                   xds-getbuffer.exe xds-decode.exe xds-setbuffer.exe \
-                  xdr-uint32.exe xdr-int32.exe
+                  xdr-uint32.exe xdr-int32.exe xdr-uint64.exe xdr-int64.exe
 
 .SUFFIXES:
 .SUFFIXES:      .c .exe


ossp-pkg/xds/regression-tests/xdr-int64.c -> 1.1

*** /dev/null    Sat Nov 23 01:05:31 2024
--- -    Sat Nov 23 01:05:37 2024
***************
*** 0 ****
--- 1,108 ----
+ /*
+    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 <rpc/types.h>
+ #include <rpc/xdr.h>
+ #include "../internal.h"
+ 
+ int main()
+     {
+     XDR    xdrs;
+     char   xdr_buf[1024];
+     size_t xdr_buf_size;
+ 
+     xds_t* xds;
+     char*  xds_buf;
+     size_t xds_buf_size;
+ 
+     int64_t values[] =
+        {
+         0x0000000000000000LL,
+         0x123456789abcdef0LL,
+        -0x123456789abcdef0LL,
+         0xabcdef01cc45bb9aLL,
+        -0xabcdef01cc45bb9aLL,
+         0x7fffffffffffffffLL
+        };
+ 
+     size_t i;
+ 
+     /* Encode the values array using the RPC-XDR implementation. */
+ 
+     xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
+     for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
+        xdr_int64_t(&xdrs, &values[i]);
+     xdr_buf_size = xdr_getpos(&xdrs);
+     xdr_destroy(&xdrs);
+ 
+     /* Encode the values array using the XDS implementation. */
+ 
+     xds = xds_init(XDS_ENCODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "int", &xdr_encode_int64, NULL) != XDS_OK)
+        {
+        printf("Failed to register my encoding engines.\n");
+        return 1;
+        }
+     for (i = 0; i < sizeof(values)/sizeof(int64_t); ++i)
+        {
+        if (xds_encode(xds, "int", values[i]) != XDS_OK)
+            {
+            printf("xds_encode(values[%d]) failed!", i);
+            return 1;
+            }
+        }
+     if (xds_getbuffer(xds, XDS_GIFT, (void**)&xds_buf, &xds_buf_size) != XDS_OK)
+        {
+        printf("getbuffer() failed.\n");
+        return 1;
+        }
+     xds_destroy(xds);
+ 
+     /* Both buffers must be equal now. */
+ 
+     if (xdr_buf_size != xds_buf_size)
+        {
+        printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size, xds_buf_size);
+        return 1;
+        }
+     if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0)
+        {
+        printf("The buffers' contents is not identical!\n");
+        return 1;
+        }
+ 
+     /* Everything went fine. */
+ 
+     return 0;
+     }


ossp-pkg/xds/regression-tests/xdr-uint64.c -> 1.1

*** /dev/null    Sat Nov 23 01:05:31 2024
--- -    Sat Nov 23 01:05:37 2024
***************
*** 0 ****
--- 1,107 ----
+ /*
+    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 <rpc/types.h>
+ #include <rpc/xdr.h>
+ #include "../internal.h"
+ 
+ int main()
+     {
+     XDR    xdrs;
+     char   xdr_buf[1024];
+     size_t xdr_buf_size;
+ 
+     xds_t* xds;
+     char*  xds_buf;
+     size_t xds_buf_size;
+ 
+     u_int64_t values[] =
+        {
+        0x0000000000000000ULL,
+        0x123456789abcdef0ULL,
+        0xabcdef01cc45bb9aULL,
+        0xc500b3efdd34ca9eULL,
+        0xffffffffffffffffULL
+        };
+ 
+     size_t i;
+ 
+     /* Encode the values array using the RPC-XDR implementation. */
+ 
+     xdrmem_create(&xdrs, xdr_buf, sizeof(xdr_buf), XDR_ENCODE);
+     for (i = 0; i < sizeof(values)/sizeof(u_int64_t); ++i)
+        xdr_uint64_t(&xdrs, &values[i]);
+     xdr_buf_size = xdr_getpos(&xdrs);
+     xdr_destroy(&xdrs);
+ 
+     /* Encode the values array using the XDS implementation. */
+ 
+     xds = xds_init(XDS_ENCODE);
+     if (xds == NULL)
+        {
+        printf("Failed to initialize XDS context.\n");
+        return 1;
+        }
+     if (xds_register(xds, "uint", &xdr_encode_uint64, NULL) != XDS_OK)
+        {
+        printf("Failed to register my encoding engines.\n");
+        return 1;
+        }
+     for (i = 0; i < sizeof(values)/sizeof(uint64_t); ++i)
+        {
+        if (xds_encode(xds, "uint", values[i]) != XDS_OK)
+            {
+            printf("xds_encode(values[%d]) failed!", i);
+            return 1;
+            }
+        }
+     if (xds_getbuffer(xds, XDS_GIFT, (void**)&xds_buf, &xds_buf_size) != XDS_OK)
+        {
+        printf("getbuffer() failed.\n");
+        return 1;
+        }
+     xds_destroy(xds);
+ 
+     /* Both buffers must be equal now. */
+ 
+     if (xdr_buf_size != xds_buf_size)
+        {
+        printf("The buffer sizes don't match: %d != %d.\n", xdr_buf_size, xds_buf_size);
+        return 1;
+        }
+     if (memcmp(xds_buf, xdr_buf, xds_buf_size) != 0)
+        {
+        printf("The buffers' contents is not identical!\n");
+        return 1;
+        }
+ 
+     /* Everything went fine. */
+ 
+     return 0;
+     }


ossp-pkg/xds/xdr-encode-int.c 1.1 -> 1.2

--- xdr-encode-int.c     2001/07/18 11:30:19     1.1
+++ xdr-encode-int.c     2001/07/18 16:59:27     1.2
@@ -89,3 +89,73 @@
 
     return 4;
     }
+
+int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+    {
+    /* Consistency checks. */
+
+    assert(xds != NULL);
+    assert(buffer != NULL);
+    assert(buffer_size != 0);
+    assert(args != NULL);
+    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
+        return XDS_ERR_INVALID_ARG;
+
+    /* Get value and format it into the buffer. */
+
+    if (buffer_size >= 8)
+        {
+        u_int64_t tmp;
+        int64_t value = va_arg(*args, u_int64_t);
+        if (value < 0)
+            {
+            value = 0 - value;
+            tmp = 0 - (u_int64_t)value;
+            }
+        else
+            tmp = (u_int64_t)value;
+        ((u_int8_t*)buffer)[0] = (tmp >> 56) & 0x000000ff;
+        ((u_int8_t*)buffer)[1] = (tmp >> 48) & 0x000000ff;
+        ((u_int8_t*)buffer)[2] = (tmp >> 40) & 0x000000ff;
+        ((u_int8_t*)buffer)[3] = (tmp >> 32) & 0x000000ff;
+        ((u_int8_t*)buffer)[4] = (tmp >> 24) & 0x000000ff;
+        ((u_int8_t*)buffer)[5] = (tmp >> 16) & 0x000000ff;
+        ((u_int8_t*)buffer)[6] = (tmp >>  8) & 0x000000ff;
+        ((u_int8_t*)buffer)[7] = (tmp >>  0) & 0x000000ff;
+        }
+
+    /* Done. */
+
+    return 8;
+    }
+
+int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)
+    {
+    /* Consistency checks. */
+
+    assert(xds != NULL);
+    assert(buffer != NULL);
+    assert(buffer_size != 0);
+    assert(args != NULL);
+    if (xds == NULL || buffer == NULL || buffer_size == 0 || args == NULL)
+        return XDS_ERR_INVALID_ARG;
+
+    /* Get value and format it into the buffer. */
+
+    if (buffer_size >= 8)
+        {
+        u_int64_t value = va_arg(*args, u_int64_t);
+        ((u_int8_t*)buffer)[0] = (value >> 56) & 0x000000ff;
+        ((u_int8_t*)buffer)[1] = (value >> 48) & 0x000000ff;
+        ((u_int8_t*)buffer)[2] = (value >> 40) & 0x000000ff;
+        ((u_int8_t*)buffer)[3] = (value >> 32) & 0x000000ff;
+        ((u_int8_t*)buffer)[4] = (value >> 24) & 0x000000ff;
+        ((u_int8_t*)buffer)[5] = (value >> 16) & 0x000000ff;
+        ((u_int8_t*)buffer)[6] = (value >>  8) & 0x000000ff;
+        ((u_int8_t*)buffer)[7] = (value >>  0) & 0x000000ff;
+        }
+
+    /* Done. */
+
+    return 8;
+    }


ossp-pkg/xds/xds.h 1.17 -> 1.18

--- xds.h        2001/07/18 11:30:19     1.17
+++ xds.h        2001/07/18 16:59:27     1.18
@@ -72,5 +72,7 @@
 
 int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
 int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
+int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
+int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args);
 
 #endif /* !defined(__LIBXDS_H__) */

CVSTrac 2.0.1