*** /dev/null Sat Nov 23 06:31:06 2024
--- - Sat Nov 23 06:31:09 2024
***************
*** 0 ****
--- 1,146 ----
+ /*
+ 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 <unistd.h>
+ #include <assert.h>
+ #include "../internal.h"
+
+ static int dummy_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list args)
+ {
+ strncpy(buffer, "Hallo!", buffer_size);
+ return 6;
+ }
+
+ int main()
+ {
+ xds_t* xds;
+ char* old;
+ size_t old_len;
+ char* new;
+ size_t new_len;
+
+ /* Create XDS context. */
+
+ xds = xds_init(XDS_ENCODE);
+ if (xds == NULL)
+ {
+ printf("Failed to initialize XDS context.\n");
+ return 1;
+ }
+
+ /* Register the dummy callback under multiple names. */
+
+ if (xds_register(xds, "text", &dummy_engine, (void*)42) != XDS_OK)
+ {
+ printf("Failed to register my encoding engine.\n");
+ return 1;
+ }
+
+ /* Encode something, then flush the buffer by calling
+ xds_getbuffer(), then encode something new and verify that the
+ old buffer hasn't ben overwritten and that the new one contains
+ the correct string. */
+
+ if (xds_encode(xds, "text text") != XDS_OK)
+ {
+ printf("xds_encode() failed!");
+ return 1;
+ }
+ if (xds_getbuffer(xds, XDS_GIFT, (void**)&old, &old_len) != XDS_OK)
+ {
+ printf("xds_getbuffer() failed for the first buffer!");
+ return 1;
+ }
+ if (xds_encode(xds, "text") != XDS_OK)
+ {
+ printf("xds_encode() failed!");
+ return 1;
+ }
+ if (xds_getbuffer(xds, XDS_GIFT, (void**)&new, &new_len) != XDS_OK)
+ {
+ printf("xds_getbuffer() failed for the second buffer!");
+ return 1;
+ }
+ if ((strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12) &&
+ (strcmp(new, "Hallo!") != 0 || new_len != 6))
+ {
+ printf("xds_encode() did not yield the expected result.\n");
+ return 1;
+ }
+ free(old);
+ free(new);
+
+ /* Encode somthing, then get the buffer via XDS_LOAN and verify
+ the contents. Encode something new and compare the new content
+ with what we expect. */
+
+ if (xds_encode(xds, "text text") != XDS_OK)
+ {
+ printf("xds_encode() failed!");
+ return 1;
+ }
+ if (xds_getbuffer(xds, XDS_LOAN, (void**)&old, &old_len) != XDS_OK)
+ {
+ printf("xds_getbuffer() failed for the first buffer!");
+ return 1;
+ }
+ if (strcmp(old, "Hallo!Hallo!") != 0 || old_len != 12)
+ {
+ printf("xds_encode() did not yield the expected result.\n");
+ return 1;
+ }
+ if (xds_encode(xds, "text") != XDS_OK)
+ {
+ printf("xds_encode() failed!");
+ return 1;
+ }
+ if (xds_getbuffer(xds, XDS_LOAN, (void**)&new, &new_len) != XDS_OK)
+ {
+ printf("xds_getbuffer() failed for the second buffer!");
+ return 1;
+ }
+ if (old != new)
+ {
+ printf("xds_encode() allocated a new buffer even though we used XDS_LOAN.\n");
+ return 1;
+ }
+ if (strcmp(new, "Hallo!") != 0 || new_len != 6)
+ {
+ printf("xds_encode() did not yield the expected result.\n");
+ return 1;
+ }
+
+ /* Clean up. */
+
+ xds_destroy(xds);
+
+ /* Everything went fine. */
+
+ return 0;
+ }
|