diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/pgcrypto/pgp-pgsql.c | 9 | ||||
-rw-r--r-- | contrib/xml2/xpath.c | 21 | ||||
-rw-r--r-- | contrib/xml2/xslt_proc.c | 17 |
3 files changed, 10 insertions, 37 deletions
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)); } |