diff --git a/contrib/pgcrypto/pgp-pgsql.c b/contrib/pgcrypto/pgp-pgsql.c index 9f38c621c9..5ffa5ad0a9 100644 --- a/contrib/pgcrypto/pgp-pgsql.c +++ b/contrib/pgcrypto/pgp-pgsql.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pgsql.c,v 1.9 2007/02/27 23:48:06 tgl Exp $ + * $PostgreSQL: pgsql/contrib/pgcrypto/pgp-pgsql.c,v 1.10 2008/05/04 16:42:41 tgl Exp $ */ #include "postgres.h" @@ -34,6 +34,7 @@ #include "fmgr.h" #include "parser/scansup.h" #include "mb/pg_wchar.h" +#include "utils/builtins.h" #include "mbuf.h" #include "px.h" @@ -140,7 +141,6 @@ static text * convert_charset(text *src, int cset_from, int cset_to) { int src_len = VARSIZE(src) - VARHDRSZ; - int dst_len; unsigned char *dst; unsigned char *csrc = (unsigned char *) VARDATA(src); text *res; @@ -149,10 +149,7 @@ convert_charset(text *src, int cset_from, int cset_to) if (dst == csrc) return src; - dst_len = strlen((char *) dst); - res = palloc(dst_len + VARHDRSZ); - memcpy(VARDATA(res), dst, dst_len); - SET_VARSIZE(res, dst_len + VARHDRSZ); + res = cstring_to_text((char *) dst); pfree(dst); return res; } diff --git a/contrib/xml2/xpath.c b/contrib/xml2/xpath.c index 601733ac87..98865bac7a 100644 --- a/contrib/xml2/xpath.c +++ b/contrib/xml2/xpath.c @@ -194,7 +194,6 @@ xml_encode_special_chars(PG_FUNCTION_ARGS) { text *tin = PG_GETARG_TEXT_P(0); text *tout; - int32 ressize; xmlChar *ts, *tt; @@ -204,10 +203,7 @@ xml_encode_special_chars(PG_FUNCTION_ARGS) pfree(ts); - ressize = strlen((char *) tt); - tout = (text *) palloc(ressize + VARHDRSZ); - memcpy(VARDATA(tout), tt, ressize); - SET_VARSIZE(tout, ressize + VARHDRSZ); + tout = cstring_to_text((char *) tt); xmlFree(tt); @@ -306,14 +302,7 @@ pgxmlNodeSetToText(xmlNodeSetPtr nodeset, xmlChar * pgxml_texttoxmlchar(text *textstring) { - xmlChar *res; - int32 txsize; - - txsize = VARSIZE(textstring) - VARHDRSZ; - res = (xmlChar *) palloc(txsize + 1); - memcpy((char *) res, VARDATA(textstring), txsize); - res[txsize] = '\0'; - return res; + return (xmlChar *) text_to_cstring(textstring); } /* Public visible XPath functions */ @@ -577,7 +566,6 @@ pgxml_result_to_text(xmlXPathObjectPtr res, xmlChar * plainsep) { xmlChar *xpresstr; - int32 ressize; text *xpres; if (res == NULL) @@ -604,10 +592,7 @@ pgxml_result_to_text(xmlXPathObjectPtr res, /* Now convert this result back to text */ - ressize = strlen((char *) xpresstr); - xpres = (text *) palloc(ressize + VARHDRSZ); - memcpy(VARDATA(xpres), xpresstr, ressize); - SET_VARSIZE(xpres, ressize + VARHDRSZ); + xpres = cstring_to_text((char *) xpresstr); /* Free various storage */ xmlCleanupParser(); diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c index f15fabcb3c..f498192426 100644 --- a/contrib/xml2/xslt_proc.c +++ b/contrib/xml2/xslt_proc.c @@ -39,8 +39,9 @@ PG_FUNCTION_INFO_V1(xslt_process); Datum xslt_process(PG_FUNCTION_ARGS) { - - + text *doct = PG_GETARG_TEXT_P(0); + text *ssheet = PG_GETARG_TEXT_P(1); + text *paramstr; const char *params[MAXPARAMS + 1]; /* +1 for the terminator */ xsltStylesheetPtr stylesheet = NULL; xmlDocPtr doctree; @@ -50,12 +51,6 @@ xslt_process(PG_FUNCTION_ARGS) int resstat; int reslen; - text *doct = PG_GETARG_TEXT_P(0); - text *ssheet = PG_GETARG_TEXT_P(1); - text *paramstr; - text *tres; - - if (fcinfo->nargs == 3) { paramstr = PG_GETARG_TEXT_P(2); @@ -124,11 +119,7 @@ xslt_process(PG_FUNCTION_ARGS) if (resstat < 0) PG_RETURN_NULL(); - tres = palloc(reslen + VARHDRSZ); - memcpy(VARDATA(tres), resstr, reslen); - SET_VARSIZE(tres, reslen + VARHDRSZ); - - PG_RETURN_TEXT_P(tres); + PG_RETURN_TEXT_P(cstring_to_text_with_len(resstr, reslen)); } diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 49ce0ef4d6..ad48f564c5 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/varchar.c,v 1.127 2008/03/25 22:42:44 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/varchar.c,v 1.128 2008/05/04 16:42:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -566,7 +566,6 @@ varchar(PG_FUNCTION_ARGS) VarChar *source = PG_GETARG_VARCHAR_PP(0); int32 typmod = PG_GETARG_INT32(1); bool isExplicit = PG_GETARG_BOOL(2); - VarChar *result; int32 len, maxlen; size_t maxmblen; @@ -596,11 +595,8 @@ varchar(PG_FUNCTION_ARGS) maxlen))); } - result = palloc(maxmblen + VARHDRSZ); - SET_VARSIZE(result, maxmblen + VARHDRSZ); - memcpy(VARDATA(result), s_data, maxmblen); - - PG_RETURN_VARCHAR_P(result); + PG_RETURN_VARCHAR_P((VarChar *) cstring_to_text_with_len(s_data, + maxmblen)); } Datum diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c index ce1e4a4fdd..6251e3c596 100644 --- a/src/backend/utils/adt/xml.c +++ b/src/backend/utils/adt/xml.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.72 2008/04/04 08:33:15 mha Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.73 2008/05/04 16:42:41 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -319,13 +319,7 @@ xml_recv(PG_FUNCTION_ARGS) if (newstr != str) { pfree(result); - - nbytes = strlen(newstr); - - result = palloc(nbytes + VARHDRSZ); - SET_VARSIZE(result, nbytes + VARHDRSZ); - memcpy(VARDATA(result), newstr, nbytes); - + result = (xmltype *) cstring_to_text(newstr); pfree(newstr); } @@ -369,30 +363,14 @@ appendStringInfoText(StringInfo str, const text *t) static xmltype * stringinfo_to_xmltype(StringInfo buf) { - int32 len; - xmltype *result; - - len = buf->len + VARHDRSZ; - result = palloc(len); - SET_VARSIZE(result, len); - memcpy(VARDATA(result), buf->data, buf->len); - - return result; + return (xmltype *) cstring_to_text_with_len(buf->data, buf->len); } static xmltype * cstring_to_xmltype(const char *string) { - int32 len; - xmltype *result; - - len = strlen(string) + VARHDRSZ; - result = palloc(len); - SET_VARSIZE(result, len); - memcpy(VARDATA(result), string, len - VARHDRSZ); - - return result; + return (xmltype *) cstring_to_text(string); } @@ -400,15 +378,8 @@ cstring_to_xmltype(const char *string) static xmltype * xmlBuffer_to_xmltype(xmlBufferPtr buf) { - int32 len; - xmltype *result; - - len = xmlBufferLength(buf) + VARHDRSZ; - result = palloc(len); - SET_VARSIZE(result, len); - memcpy(VARDATA(result), xmlBufferContent(buf), len - VARHDRSZ); - - return result; + return (xmltype *) cstring_to_text_with_len((char *) xmlBufferContent(buf), + xmlBufferLength(buf)); } #endif @@ -474,9 +445,7 @@ xmlconcat(List *args) char *str; len = VARSIZE(x) - VARHDRSZ; - str = palloc(len + 1); - memcpy(str, VARDATA(x), len); - str[len] = '\0'; + str = text_to_cstring((text *) x); parse_xml_decl((xmlChar *) str, &len, &version, NULL, &standalone); @@ -751,9 +720,7 @@ xmlroot(xmltype *data, text *version, int standalone) StringInfoData buf; len = VARSIZE(data) - VARHDRSZ; - str = palloc(len + 1); - memcpy(str, VARDATA(data), len); - str[len] = '\0'; + str = text_to_cstring((text *) data); parse_xml_decl((xmlChar *) str, &len, &orig_version, NULL, &orig_standalone); @@ -1237,19 +1204,12 @@ xml_parse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace, /* - * xmlChar<->text convertions + * xmlChar<->text conversions */ static xmlChar * xml_text2xmlChar(text *in) { - int32 len = VARSIZE(in) - VARHDRSZ; - xmlChar *res; - - res = palloc(len + 1); - memcpy(res, VARDATA(in), len); - res[len] = '\0'; - - return (res); + return (xmlChar *) text_to_cstring(in); } @@ -3188,7 +3148,6 @@ xml_xmlnodetoxmltype(xmlNodePtr cur) { xmlChar *str; xmltype *result; - size_t len; xmlBufferPtr buf; if (cur->type == XML_ELEMENT_NODE) @@ -3201,10 +3160,7 @@ xml_xmlnodetoxmltype(xmlNodePtr cur) else { str = xmlXPathCastNodeToString(cur); - len = strlen((char *) str); - result = (xmltype *) palloc(len + VARHDRSZ); - SET_VARSIZE(result, len + VARHDRSZ); - memcpy(VARDATA(result), str, len); + result = (xmltype *) cstring_to_text((char *) str); } return result;