*** /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;
+ }
|