Index: ossp-pkg/xds/regression-tests/Makefile RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile,v rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/Makefile,v' 2>/dev/null --- 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 Index: ossp-pkg/xds/regression-tests/xdr-int64.c RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xdr-int64.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xdr-int64.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/regression-tests/xdr-int64.c' 2>/dev/null --- ossp-pkg/xds/regression-tests/xdr-int64.c +++ - 2024-05-12 09:15:33.552489389 +0200 @@ -0,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 +#include +#include +#include +#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; + } Index: ossp-pkg/xds/regression-tests/xdr-uint64.c RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xdr-uint64.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xdr-uint64.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/regression-tests/xdr-uint64.c' 2>/dev/null --- ossp-pkg/xds/regression-tests/xdr-uint64.c +++ - 2024-05-12 09:15:33.555175918 +0200 @@ -0,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 +#include +#include +#include +#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; + } Index: ossp-pkg/xds/xdr-encode-int.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-int.c,v rcsdiff -q -kk '-r1.1' '-r1.2' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-int.c,v' 2>/dev/null --- 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; + } Index: ossp-pkg/xds/xds.h RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xds.h,v rcsdiff -q -kk '-r1.17' '-r1.18' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xds.h,v' 2>/dev/null --- 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__) */