|
1 | | -/* $PostgreSQL: pgsql/src/tutorial/funcs_new.c,v 1.11 2006/07/14 14:52:27 momjian Exp $ */ |
| 1 | +/* $PostgreSQL: pgsql/src/tutorial/funcs_new.c,v 1.12 2006/09/27 16:19:42 tgl Exp $ */ |
2 | 2 |
|
3 | 3 | /****************************************************************************** |
4 | 4 | These are user-defined functions that can be bound to a Postgres backend |
@@ -101,13 +101,14 @@ concat_text(PG_FUNCTION_ARGS) |
101 | 101 | { |
102 | 102 | text *arg1 = PG_GETARG_TEXT_P(0); |
103 | 103 | text *arg2 = PG_GETARG_TEXT_P(1); |
104 | | - int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ; |
| 104 | + int32 arg1_size = VARSIZE(arg1) - VARHDRSZ; |
| 105 | + int32 arg2_size = VARSIZE(arg2) - VARHDRSZ; |
| 106 | + int32 new_text_size = arg1_size + arg2_size + VARHDRSZ; |
105 | 107 | text *new_text = (text *) palloc(new_text_size); |
106 | 108 |
|
107 | | - memset((void *) new_text, 0, new_text_size); |
108 | 109 | VARATT_SIZEP(new_text) = new_text_size; |
109 | | - strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ); |
110 | | - strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ); |
| 110 | + memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size); |
| 111 | + memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size); |
111 | 112 | PG_RETURN_TEXT_P(new_text); |
112 | 113 | } |
113 | 114 |
|
|
0 commit comments