Index: ossp-pkg/xds/decode.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/decode.c,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/xds/Attic/decode.c,v' | diff -u - /dev/null -L'ossp-pkg/xds/decode.c' 2>/dev/null --- ossp-pkg/xds/decode.c +++ /dev/null 2024-05-13 02:55:00.000000000 +0200 @@ -1,33 +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 "internal.h" - -int xds_decode(xds_t* xds, const char* fmt, ...) - { - return XDS_ERR_INVALID_ARG; - } Index: ossp-pkg/xds/vdecode.c RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/vdecode.c,v rcsdiff -q -kk '-r1.1' '-r1.2' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/vdecode.c,v' 2>/dev/null --- vdecode.c 2001/07/04 15:58:51 1.1 +++ vdecode.c 2001/07/09 19:00:44 1.2 @@ -25,9 +25,74 @@ SUCH DAMAGE. */ +#include +#include +#include #include "internal.h" -int xds_vdecode(xds_t* xds, const char* fmt, va_list args) +int xds_vdecode(xds_t* xds, const char* fmt_arg, va_list args) { - return XDS_ERR_INVALID_ARG; + char* name; + char* p; + char* fmt; + int rc; + + /* Sanity checks. */ + + assert(xds != NULL); + assert(fmt_arg != NULL); + assert(xds->mode == XDS_DECODE); + if (xds == NULL || fmt_arg == NULL) + return XDS_ERR_INVALID_ARG; + if (xds->mode != XDS_DECODE) + return XDS_ERR_INVALID_MODE; + + /* Ensure we have a buffer to decode. */ + + if (xds->buffer == NULL || xds->buffer_capacity == 0) + return XDS_ERR_UNDERFLOW; + + /* Iterate through the items in the format string and execute the + apropriate engines. */ + + fmt = p = strdup(fmt_arg); + if (fmt == NULL) + return XDS_ERR_NO_MEM; + for(name = p; *p != '\0'; name = p) + { + while(isalnum(*p) || *p == '-' || *p == '_') + ++p; + if (*p) + *p++ = '\0'; + else + *p = '\0'; + + if (strlen(name) > 0) + { + size_t pos; + if (xds_find_engine(xds->engines, xds->engines_len, name, &pos)) + { + rc = (*xds->engines[pos].engine)(xds, + xds->engines[pos].context, + xds->buffer + xds->buffer_len, + xds->buffer_capacity - xds->buffer_len, + args); + if (rc < 0) + goto leave; + else + xds->buffer_len += rc; + } + else + { + rc = XDS_ERR_UNKNOWN_ENGINE; + goto leave; + } + } + } + rc = XDS_OK; + + /* Clean up and leave. */ + leave: + free(fmt); + return rc; } Index: ossp-pkg/xds/xds.h RCS File: /v/ossp/cvs/ossp-pkg/xds/Attic/xds.h,v rcsdiff -q -kk '-r1.14' '-r1.15' -u '/v/ossp/cvs/ossp-pkg/xds/Attic/xds.h,v' 2>/dev/null --- xds.h 2001/07/09 17:19:26 1.14 +++ xds.h 2001/07/09 19:00:44 1.15 @@ -41,7 +41,8 @@ XDS_ERR_INVALID_ARG = -3, XDS_ERR_TYPE_MISMATCH = -4, XDS_ERR_UNKNOWN_ENGINE = -5, - XDS_ERR_INVALID_MODE = -6 + XDS_ERR_INVALID_MODE = -6, + XDS_ERR_UNDERFLOW = -7 }; typedef enum { XDS_ENCODE, XDS_DECODE } xds_mode_t; typedef enum { XDS_LOAN, XDS_GIFT } xds_scope_t;