Index: ossp-pkg/xds/Makefile.in RCS File: /v/ossp/cvs/ossp-pkg/xds/Makefile.in,v rcsdiff -q -kk '-r1.6' '-r1.7' -u '/v/ossp/cvs/ossp-pkg/xds/Makefile.in,v' 2>/dev/null --- Makefile.in 2001/07/23 15:28:53 1.6 +++ Makefile.in 2001/07/23 15:33:42 1.7 @@ -15,7 +15,7 @@ xdr-decode-int64.o xdr-decode-uint32.o xdr-decode-uint64.o \ xdr-encode-octetstream.o xdr-decode-octetstream.o \ xdr-encode-string.o xdr-decode-string.o xdr-encode-double.o \ - xdr-decode-double.o xml-encode-int32.o + xdr-decode-double.o xml-encode-int32.o xml-decode-int32.o .c.o: $(CC) $(CPPFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(CFLAGS) -c $< Index: ossp-pkg/xds/regression-tests/xds-mystruct.c RCS File: /v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xds-mystruct.c,v co -q -kk -p'1.3' '/v/ossp/cvs/ossp-pkg/xds/regression-tests/Attic/xds-mystruct.c,v' | diff -u - /dev/null -L'ossp-pkg/xds/regression-tests/xds-mystruct.c' 2>/dev/null --- ossp-pkg/xds/regression-tests/xds-mystruct.c +++ /dev/null 2024-05-11 20:45:32.000000000 +0200 @@ -1,166 +0,0 @@ -/* - 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" - -struct mystruct - { - xds_int32_t small; - xds_int64_t big; - xds_uint32_t positive; - }; - -static int encode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) - { - int rc; - struct mystruct* ms; - - assert(xds != NULL); - assert(buffer != NULL); - assert(buffer_size != 0); - assert(args != NULL); - - if (buffer_size >= sizeof(struct mystruct)) - { - ms = va_arg(*args, struct mystruct*); - rc = xds_encode(xds, "int32 int64 uint32", ms->small, ms->big, ms->positive); - if (rc != XDS_OK) - return rc; - } - else - return sizeof(struct mystruct); - - return 0; - } - -static int decode_mystruct_engine(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) - { - int rc; - struct mystruct* ms; - - assert(xds != NULL); - assert(buffer != NULL); - assert(buffer_size != 0); - assert(args != NULL); - - if (buffer_size >= sizeof(struct mystruct)) - { - ms = va_arg(*args, struct mystruct*); - rc = xds_decode(xds, "int32 int64 uint32", &(ms->small), &(ms->big), &(ms->positive)); - if (rc != XDS_OK) - return rc; - } - else - return XDS_ERR_UNDERFLOW; - - return 0; - } - -int main() - { - xds_t* xds; - char* buffer; - size_t buffer_size; - - struct mystruct ms, new_ms; - ms.small = -0x1234567; - ms.big = -0x1234567890abcdeLL; - ms.positive = 42; - - /* Encode our copy of mystruct using our encoding callback. Then - get a the buffer and destroy the context again. */ - - xds = xds_init(XDS_ENCODE); - if (xds == NULL) - { - printf("Failed to initialize XDS context.\n"); - return 1; - } - if (xds_register(xds, "mystruct", &encode_mystruct_engine, NULL) != XDS_OK || - xds_register(xds, "int32", &xdr_encode_int32, NULL) != XDS_OK || - xds_register(xds, "int64", &xdr_encode_int64, NULL) != XDS_OK || - xds_register(xds, "uint32", &xdr_encode_uint32, NULL) != XDS_OK) - { - printf("Failed to register my encoding engines.\n"); - return 1; - } - if (xds_encode(xds, "mystruct", &ms) != XDS_OK) - { - printf("xds_encode() failed!\n"); - return 1; - } - if (xds_getbuffer(xds, XDS_GIFT, (void**)&buffer, &buffer_size) != XDS_OK) - { - printf("xds_setbuffer() failed!\n"); - return 1; - } - xds_destroy(xds); - - /* Now create a decoding context and decode the whole thing again. */ - - xds = xds_init(XDS_DECODE); - if (xds == NULL) - { - printf("Failed to initialize XDS context.\n"); - return 1; - } - if (xds_register(xds, "mystruct", &decode_mystruct_engine, NULL) != XDS_OK || - xds_register(xds, "int32", &xdr_decode_int32, NULL) != XDS_OK || - xds_register(xds, "int64", &xdr_decode_int64, NULL) != XDS_OK || - xds_register(xds, "uint32", &xdr_decode_uint32, NULL) != XDS_OK) - { - printf("Failed to register my decoding engines.\n"); - return 1; - } - if (xds_setbuffer(xds, XDS_GIFT, buffer, buffer_size) != XDS_OK) - { - printf("xds_setbuffer() failed!\n"); - return 1; - } - if (xds_decode(xds, "mystruct", &new_ms) != XDS_OK) - { - printf("xds_decode() failed!\n"); - return 1; - } - xds_destroy(xds); - - /* Both structures must be identical. */ - - if (memcmp(&ms, &new_ms, sizeof(struct mystruct)) != 0) - { - printf("Decoded data does not match the original!\n"); - return 1; - } - - /* Everything went fine. */ - - return 0; - } Index: ossp-pkg/xds/xdr-decode-int32.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-int32.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-int32.c,v' 2>/dev/null --- xdr-decode-int32.c 2001/07/20 10:56:01 1.2 +++ xdr-decode-int32.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_decode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-decode-int64.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-int64.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-int64.c,v' 2>/dev/null --- xdr-decode-int64.c 2001/07/20 10:56:01 1.2 +++ xdr-decode-int64.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_decode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-decode-octetstream.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-octetstream.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-octetstream.c,v' 2>/dev/null --- xdr-decode-octetstream.c 2001/07/20 10:56:01 1.2 +++ xdr-decode-octetstream.c 2001/07/23 15:33:42 1.3 @@ -27,7 +27,6 @@ #include #include -#include #include "internal.h" int xdr_decode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-decode-string.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-string.c,v co -q -kk -p'1.4' '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-string.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/xdr-decode-string.c' 2>/dev/null --- ossp-pkg/xds/xdr-decode-string.c +++ - 2024-05-11 20:45:47.450018181 +0200 @@ -0,0 +1,89 @@ +/* + 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 "internal.h" + +int xdr_decode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + char** p; + size_t* p_len; + size_t padding; + + /* 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 pointers from the stack. */ + + p = va_arg(*args, char**); + p_len = va_arg(*args, size_t*); + assert(p != NULL); + assert(p_len != NULL); + + /* Read the size of the message. */ + + if (buffer_size >= 4) + { + *p_len = ((xds_uint8_t*)buffer)[0]; *p_len = *p_len << 8; + *p_len += ((xds_uint8_t*)buffer)[1]; *p_len = *p_len << 8; + *p_len += ((xds_uint8_t*)buffer)[2]; *p_len = *p_len << 8; + *p_len += ((xds_uint8_t*)buffer)[3]; + } + else + return XDS_ERR_UNDERFLOW; + + /* Calculate padding. */ + + padding = (4 - (*p_len & 0x03)) & 0x03; + + /* Do we have enough data?. */ + + if (buffer_size < 4 + *p_len + padding) + return XDS_ERR_UNDERFLOW; + + /* Allocate buffer for the data. */ + + *p = (char*)malloc(*p_len + 1); + if (*p == NULL) + return XDS_ERR_NO_MEM; + + /* Copy data into the buffer. */ + + memmove(*p, (xds_uint8_t*)buffer+4, *p_len); + ((xds_uint8_t*)buffer)[4+*p_len] = '\0'; + + /* Done. */ + + return 4 + *p_len + padding; + } Index: ossp-pkg/xds/xdr-decode-uint32.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-uint32.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-uint32.c,v' 2>/dev/null --- xdr-decode-uint32.c 2001/07/20 10:56:01 1.2 +++ xdr-decode-uint32.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_decode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-decode-uint64.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-uint64.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-decode-uint64.c,v' 2>/dev/null --- xdr-decode-uint64.c 2001/07/20 10:56:01 1.2 +++ xdr-decode-uint64.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_decode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-encode-int32.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-int32.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-int32.c,v' 2>/dev/null --- xdr-encode-int32.c 2001/07/20 10:56:01 1.2 +++ xdr-encode-int32.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_encode_int32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-encode-int64.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-int64.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-int64.c,v' 2>/dev/null --- xdr-encode-int64.c 2001/07/20 10:56:01 1.2 +++ xdr-encode-int64.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_encode_int64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-encode-octetstream.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-octetstream.c,v rcsdiff -q -kk '-r1.3' '-r1.4' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-octetstream.c,v' 2>/dev/null --- xdr-encode-octetstream.c 2001/07/20 10:56:01 1.3 +++ xdr-encode-octetstream.c 2001/07/23 15:33:42 1.4 @@ -27,7 +27,6 @@ #include #include -#include #include "internal.h" int xdr_encode_octetstream(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-encode-string.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-string.c,v co -q -kk -p'1.5' '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-string.c,v' | diff -u /dev/null - -L'ossp-pkg/xds/xdr-encode-string.c' 2>/dev/null --- ossp-pkg/xds/xdr-encode-string.c +++ - 2024-05-11 20:45:47.472620349 +0200 @@ -0,0 +1,71 @@ +/* + 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 "internal.h" + +int xdr_encode_string(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) + { + char* p; + size_t p_len; + size_t padding; + + /* 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 from stack and calculate the correct amount of + padding. */ + + p = va_arg(*args, char*); + assert(p != NULL); + p_len = strlen(p); + padding = (4 - (p_len & 0x03)) & 0x03; + assert((p_len + padding) % 4 == 0); + + /* Format the values into the buffer. */ + + if (buffer_size >= 4 + p_len + padding) + { + ((xds_uint8_t*)buffer)[0] = (p_len >> 24) & 0x000000ff; + ((xds_uint8_t*)buffer)[1] = (p_len >> 16) & 0x000000ff; + ((xds_uint8_t*)buffer)[2] = (p_len >> 8) & 0x000000ff; + ((xds_uint8_t*)buffer)[3] = (p_len >> 0) & 0x000000ff; + memmove((xds_uint8_t*)buffer+4, p, p_len); + memset((xds_uint8_t*)buffer+4+p_len, 0, padding); + } + + /* Done. */ + + return 4 + p_len + padding; + } Index: ossp-pkg/xds/xdr-encode-uint32.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-uint32.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-uint32.c,v' 2>/dev/null --- xdr-encode-uint32.c 2001/07/20 10:56:01 1.2 +++ xdr-encode-uint32.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_encode_uint32(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args) Index: ossp-pkg/xds/xdr-encode-uint64.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-uint64.c,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xdr-encode-uint64.c,v' 2>/dev/null --- xdr-encode-uint64.c 2001/07/20 10:56:01 1.2 +++ xdr-encode-uint64.c 2001/07/23 15:33:42 1.3 @@ -26,7 +26,6 @@ */ #include -#include #include "internal.h" int xdr_encode_uint64(xds_t* xds, void* engine_context, void* buffer, size_t buffer_size, va_list* args)