]> granicus.if.org Git - postgresql/blobdiff - src/tutorial/funcs_new.c
Phase 2 of pgindent updates.
[postgresql] / src / tutorial / funcs_new.c
index f668d281bb1f773009cb53ad41c5b7899160c55b..091ca639cf12bd0d373b07828038999328d18999 100644 (file)
@@ -66,21 +66,24 @@ PG_FUNCTION_INFO_V1(copytext);
 Datum
 copytext(PG_FUNCTION_ARGS)
 {
-       text       *t = PG_GETARG_TEXT_P(0);
+       text       *t = PG_GETARG_TEXT_PP(0);
 
        /*
-        * VARSIZE is the total size of the struct in bytes.
+        * VARSIZE_ANY_EXHDR is the size of the struct in bytes, minus the
+        * VARHDRSZ or VARHDRSZ_SHORT of its header.  Construct the copy with a
+        * full-length header.
         */
-       text       *new_t = (text *) palloc(VARSIZE(t));
+       text       *new_t = (text *) palloc(VARSIZE_ANY_EXHDR(t) + VARHDRSZ);
 
-       SET_VARSIZE(new_t, VARSIZE(t));
+       SET_VARSIZE(new_t, VARSIZE_ANY_EXHDR(t) + VARHDRSZ);
 
        /*
-        * VARDATA is a pointer to the data region of the struct.
+        * VARDATA is a pointer to the data region of the new struct.  The source
+        * could be a short datum, so retrieve its data through VARDATA_ANY.
         */
-       memcpy((void *) VARDATA(new_t),         /* destination */
-                  (void *) VARDATA(t), /* source */
-                  VARSIZE(t) - VARHDRSZ);              /* how many bytes */
+       memcpy((void *) VARDATA(new_t), /* destination */
+                  (void *) VARDATA_ANY(t), /* source */
+                  VARSIZE_ANY_EXHDR(t));       /* how many bytes */
        PG_RETURN_TEXT_P(new_t);
 }
 
@@ -89,16 +92,16 @@ PG_FUNCTION_INFO_V1(concat_text);
 Datum
 concat_text(PG_FUNCTION_ARGS)
 {
-       text       *arg1 = PG_GETARG_TEXT_P(0);
-       text       *arg2 = PG_GETARG_TEXT_P(1);
-       int32           arg1_size = VARSIZE(arg1) - VARHDRSZ;
-       int32           arg2_size = VARSIZE(arg2) - VARHDRSZ;
+       text       *arg1 = PG_GETARG_TEXT_PP(0);
+       text       *arg2 = PG_GETARG_TEXT_PP(1);
+       int32           arg1_size = VARSIZE_ANY_EXHDR(arg1);
+       int32           arg2_size = VARSIZE_ANY_EXHDR(arg2);
        int32           new_text_size = arg1_size + arg2_size + VARHDRSZ;
        text       *new_text = (text *) palloc(new_text_size);
 
        SET_VARSIZE(new_text, new_text_size);
-       memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
-       memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
+       memcpy(VARDATA(new_text), VARDATA_ANY(arg1), arg1_size);
+       memcpy(VARDATA(new_text) + arg1_size, VARDATA_ANY(arg2), arg2_size);
        PG_RETURN_TEXT_P(new_text);
 }