Changeset: 8577f0ed7228 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8577f0ed7228 Modified Files: clients/Tests/exports.stable.out monetdb5/modules/atoms/batxml.c monetdb5/modules/atoms/xml.c monetdb5/modules/atoms/xml.h Branch: default Log Message:
Cleanup of xml/batxml. Added lots of const type qualifiers. Do a lot more error checking. Cleanup after errors. diffs (truncated from 1447 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -894,26 +894,26 @@ str BATPCREnotilike(int *ret, int *b, st str BATPCREnotilike2(int *ret, int *b, str *pat); str BATPCREnotlike(int *ret, int *b, str *pat, str *esc); str BATPCREnotlike2(int *ret, int *b, str *pat); -str BATXMLagg(int *ret, int *bid, int *grp); -str BATXMLagg3(int *ret, int *bid, int *grp, int *e); -str BATXMLattribute(int *ret, str *name, int *bid); -str BATXMLcomment(int *x, int *s); -str BATXMLconcat(int *ret, int *bid, int *rid); -str BATXMLcontent(int *x, int *s); -str BATXMLdocument(int *x, int *s); -str BATXMLelement(int *ret, str *name, xml *ns, xml *attr, int *bid); -str BATXMLelementSmall(int *x, str *name, int *s); +str BATXMLagg(bat *ret, const bat *bid, const bat *grp); +str BATXMLagg3(bat *ret, const bat *bid, const bat *grp, const bat *e); +str BATXMLattribute(bat *ret, const char *const *name, const bat *bid); +str BATXMLcomment(bat *ret, const bat *bid); +str BATXMLconcat(bat *ret, const bat *bid, const bat *rid); +str BATXMLcontent(bat *ret, const bat *bid); +str BATXMLdocument(bat *ret, const bat *bid); +str BATXMLelement(bat *ret, const char *const *name, xml *ns, xml *attr, const bat *bid); +str BATXMLelementSmall(bat *ret, const char *const *name, const bat *bid); str BATXMLforest(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -str BATXMLgroup(xml *ret, int *bid); -str BATXMLisdocument(int *x, int *s); -str BATXMLoptions(int *x, str *name, str *options, int *s); -str BATXMLparse(int *x, str *doccont, int *s, str *option); -str BATXMLpi(int *x, str *tgt, int *s); -str BATXMLroot(int *ret, int *bid, str *version, str *standalone); -str BATXMLstr2xml(int *x, int *s); -str BATXMLxml2str(int *ret, int *bid); -str BATXMLxmltext(int *ret, int *bid); -str BATXMLxquery(int *x, int *s, str *expr); +str BATXMLgroup(xml *ret, const bat *bid); +str BATXMLisdocument(bat *ret, const bat *bid); +str BATXMLoptions(bat *ret, const char *const *name, const char *const *options, const bat *bid); +str BATXMLparse(bat *ret, const char *const *doccont, const bat *bid, const char *const *option); +str BATXMLpi(bat *ret, const char *const *tgt, const bat *bid); +str BATXMLroot(bat *ret, const bat *bid, const char *const *version, const char *const *standalone); +str BATXMLstr2xml(bat *ret, const bat *bid); +str BATXMLxml2str(bat *ret, const bat *bid); +str BATXMLxmltext(bat *ret, const bat *bid); +str BATXMLxquery(bat *ret, const bat *bid, const char *const *expr); str BKCaccbuild(int *ret, int *bid, str *acc, ptr *param); str BKCaccbuild_std(int *ret, int *bid, int *acc); str BKCappend_force_wrap(int *r, int *bid, int *uid, bit *force); @@ -2343,7 +2343,7 @@ size_t XMLquotestring(const char *s, cha str XMLroot(str *x, str *v, str *version, str *standalone); str XMLstr2xml(xml *x, str *s); int XMLtoString(str *s, int *len, xml src); -size_t XMLunquotestring(char **p, char q, char *buf); +size_t XMLunquotestring(const char **p, char q, char *buf); str XMLxml2str(str *s, xml *x); str XMLxml2xml(xml *x, xml *s); str XMLxmltext(str *s, xml *x); diff --git a/monetdb5/modules/atoms/batxml.c b/monetdb5/modules/atoms/batxml.c --- a/monetdb5/modules/atoms/batxml.c +++ b/monetdb5/modules/atoms/batxml.c @@ -3,14 +3,14 @@ * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.monetdb.org/Legal/MonetDBLicense - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. - * + * * The Original Code is the MonetDB Database System. - * + * * The Initial Developer of the Original Code is CWI. * Portions created by CWI are Copyright (C) 1997-July 2008 CWI. * Copyright August 2008-2013 MonetDB B.V. @@ -33,12 +33,6 @@ */ -#define getBATdescriptor(X1,X2,X3,X4) \ - if ((X2 = BATdescriptor(*X1)) == NULL) {\ - X4;\ - throw(MAL, X3, RUNTIME_OBJECT_MISSING);\ - } - #include "monetdb_config.h" #include <gdk.h> #include "ctype.h" @@ -58,34 +52,30 @@ #define batxml_export extern #endif -batxml_export str BATXMLxml2str(int *ret, int *bid); -batxml_export str BATXMLxmltext(int *ret, int *bid); -batxml_export str BATXMLstr2xml(int *x, int *s); -batxml_export str BATXMLdocument(int *x, int *s); -batxml_export str BATXMLcontent(int *x, int *s); -batxml_export str BATXMLisdocument(int *x, int *s); -batxml_export str BATXMLelementSmall(int *x, str *name, int *s); -batxml_export str BATXMLoptions(int *x, str *name, str *options, int *s); -batxml_export str BATXMLcomment(int *x, int *s); -batxml_export str BATXMLparse(int *x, str *doccont, int *s, str *option); -batxml_export str BATXMLxquery(int *x, int *s, str *expr); -batxml_export str BATXMLpi(int *x, str *tgt, int *s); -batxml_export str BATXMLroot(int *ret, int *bid, str *version, str *standalone); -batxml_export str BATXMLattribute(int *ret, str *name, int *bid); -batxml_export str BATXMLelement(int *ret, str *name, xml *ns, xml *attr, int *bid); -batxml_export str BATXMLconcat(int *ret, int *bid, int *rid); +batxml_export str BATXMLxml2str(bat *ret, const bat *bid); +batxml_export str BATXMLxmltext(bat *ret, const bat *bid); +batxml_export str BATXMLstr2xml(bat *ret, const bat *bid); +batxml_export str BATXMLdocument(bat *ret, const bat *bid); +batxml_export str BATXMLcontent(bat *ret, const bat *bid); +batxml_export str BATXMLisdocument(bat *ret, const bat *bid); +batxml_export str BATXMLelementSmall(bat *ret, const char * const *name, const bat *bid); +batxml_export str BATXMLoptions(bat *ret, const char * const *name, const char * const *options, const bat *bid); +batxml_export str BATXMLcomment(bat *ret, const bat *bid); +batxml_export str BATXMLparse(bat *ret, const char * const *doccont, const bat *bid, const char * const *option); +batxml_export str BATXMLxquery(bat *ret, const bat *bid, const char * const *expr); +batxml_export str BATXMLpi(bat *ret, const char * const *tgt, const bat *bid); +batxml_export str BATXMLroot(bat *ret, const bat *bid, const char * const *version, const char * const *standalone); +batxml_export str BATXMLattribute(bat *ret, const char * const *name, const bat *bid); +batxml_export str BATXMLelement(bat *ret, const char * const *name, xml *ns, xml *attr, const bat *bid); +batxml_export str BATXMLconcat(bat *ret, const bat *bid, const bat *rid); batxml_export str BATXMLforest(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -batxml_export str BATXMLagg(int *ret, int *bid, int *grp); -batxml_export str BATXMLagg3(int *ret, int *bid, int *grp, int *e); -batxml_export str BATXMLgroup(xml *ret, int *bid); +batxml_export str BATXMLagg(bat *ret, const bat *bid, const bat *grp); +batxml_export str BATXMLagg3(bat *ret, const bat *bid, const bat *grp, const bat *e); +batxml_export str BATXMLgroup(xml *ret, const bat *bid); batxml_export str AGGRsubxmlcand(bat *retval, bat *bid, bat *gid, bat *eid, bat *sid, bit *skip_nils); batxml_export str AGGRsubxml(bat *retval, bat *bid, bat *gid, bat *eid, bit *skip_nils); -#define prepareOperand(X,Y,Z) \ - if (((X) = BATdescriptor(*(Y))) == NULL ) \ - throw(MAL, "xml." Z, INTERNAL_BAT_ACCESS); - #define prepareResult(X,Y,tpe,Z) \ (X) = BATnew((Y)->htype, (tpe), BATcount(Y)); \ if ((X) == NULL) { \ @@ -109,18 +99,19 @@ batxml_export str AGGRsubxml(bat *retval BBPreleaseref((Z)->batCacheid); str -BATXMLxml2str(int *ret, int *bid) +BATXMLxml2str(bat *ret, const bat *bid) { BAT *b, *bn; BUN p, q; BATiter bi; - prepareOperand(b, bid, "str"); + if ((b = BATdescriptor(*bid)) == NULL) + throw(MAL, "xml.str", INTERNAL_BAT_ACCESS); prepareResult(bn, b, TYPE_str, "str"); bi = bat_iterator(b); BATloop(b, p, q) { - ptr h = BUNhead(bi, p); - str t = (str) BUNtail(bi, p); + const void *h = (const void *) BUNhead(bi, p); + const char *t = (const char *) BUNtail(bi, p); if (strNil(t)) { bunfastins(bn, h, t); @@ -139,7 +130,7 @@ BATXMLxml2str(int *ret, int *bid) } str -BATXMLxmltext(int *ret, int *bid) +BATXMLxmltext(bat *ret, const bat *bid) { BAT *b, *bn; BUN p, q; @@ -148,14 +139,16 @@ BATXMLxmltext(int *ret, int *bid) str buf = NULL; xmlDocPtr doc = NULL; xmlNodePtr elem; - str content = NULL, err = OPERATION_FAILED; + str content = NULL; + const char *err = OPERATION_FAILED; - prepareOperand(b, bid, "text"); + if ((b = BATdescriptor(*bid)) == NULL) + throw(MAL, "xml.text", INTERNAL_BAT_ACCESS); prepareResult(bn, b, TYPE_str, "text"); bi = bat_iterator(b); BATloop(b, p, q) { - ptr h = BUNhead(bi, p); - str t = (str) BUNtail(bi, p); + const void *h = (const void *) BUNhead(bi, p); + const char *t = (const char *) BUNtail(bi, p); size_t len; if (strNil(t)) { @@ -192,8 +185,8 @@ BATXMLxmltext(int *ret, int *bid) if (buf != NULL) GDKfree(buf); buf = GDKmalloc(size); - if ( buf == 0) { - err= MAL_MALLOC_FAIL; + if (buf == 0) { + err = MAL_MALLOC_FAIL; goto bunins_failed; } } @@ -230,7 +223,7 @@ BATXMLxmltext(int *ret, int *bid) xmlFreeDoc(doc); if (content != NULL) GDKfree(content); - throw(MAL, "xml.text", "%s", err ); + throw(MAL, "xml.text", "%s", err); } /* @@ -245,23 +238,27 @@ BATXMLxmltext(int *ret, int *bid) * XML values are represented by strings already. */ str -BATXMLstr2xml(int *ret, int *bid) +BATXMLstr2xml(bat *ret, const bat *bid) { BAT *b, *bn; BUN p, q; size_t size = BUFSIZ; - str buf, err= OPERATION_FAILED; + str buf; + const char *err= OPERATION_FAILED; BATiter bi; buf = GDKmalloc(size); - if ( buf == NULL) + if (buf == NULL) throw(MAL,"xml.str2xml",MAL_MALLOC_FAIL); - prepareOperand(b, bid, "xml"); + if ((b = BATdescriptor(*bid)) == NULL) { + GDKfree(buf); + throw(MAL, "xml.xml", INTERNAL_BAT_ACCESS); + } prepareResult(bn, b, TYPE_xml, "xml"); bi = bat_iterator(b); BATloop(b, p, q) { - ptr h = BUNhead(bi, p); - str t = (str) BUNtail(bi, p); + const void *h = (const void *) BUNhead(bi, p); + const char *t = (const char *) BUNtail(bi, p); size_t len; if (strNil(t)) { @@ -275,7 +272,7 @@ BATXMLstr2xml(int *ret, int *bid) size = len + 128; GDKfree(buf); buf = GDKmalloc(size); - if ( buf == NULL){ + if (buf == NULL) { err= MAL_MALLOC_FAIL; goto bunins_failed; } @@ -290,29 +287,32 @@ BATXMLstr2xml(int *ret, int *bid) bunins_failed: BBPreleaseref(b->batCacheid); BBPunfix(bn->batCacheid); - if ( buf != NULL ) + if (buf != NULL) GDKfree(buf); throw(MAL, "xml.xml", "%s", err); } str -BATXMLdocument(int *ret, int *bid) +BATXMLdocument(bat *ret, const bat *bid) { BAT *b, *bn; BUN p, q; BATiter bi; size_t size = BUFSIZ; str buf = GDKmalloc(size); - str err = OPERATION_FAILED; + const char *err = OPERATION_FAILED; - if ( buf == NULL) + if (buf == NULL) throw(MAL,"xml.document",MAL_MALLOC_FAIL); - prepareOperand(b, bid, "document"); + if ((b = BATdescriptor(*bid)) == NULL) { + GDKfree(buf); + throw(MAL, "xml.document", INTERNAL_BAT_ACCESS); + } prepareResult(bn, b, TYPE_xml, "document"); bi = bat_iterator(b); BATloop(b, p, q) { - ptr h = BUNhead(bi, p); - str t = (str) BUNtail(bi, p); + const void *h = (const void *) BUNhead(bi, p); + const char *t = (const char *) BUNtail(bi, p); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list