aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1997-10-02 13:52:29 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1997-10-02 13:52:29 +0000
commit1b677e7e34aefd11031e204a3c31aefa93ee944c (patch)
treecac3f8448806e815bd0dc253abfca89186cb24e4
parent0c8ef6e5cb97470958ec33720cff6114ef237f65 (diff)
downloadpostgresql-1b677e7e34aefd11031e204a3c31aefa93ee944c.tar.gz
postgresql-1b677e7e34aefd11031e204a3c31aefa93ee944c.zip
Fix \ handling
-rw-r--r--src/backend/commands/trigger.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index c3116ca8829..9215f410555 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -159,14 +159,31 @@ CreateTrigger(CreateTrigStmt * stmt)
foreach(le, stmt->args)
{
- char *ar = (char *) lfirst(le);
+ char *ar = (char *) lfirst(le);
len += strlen(ar) + 4;
+ for ( ; *ar; ar++)
+ {
+ if (*ar == '\\')
+ len++;
+ }
}
args = (char *) palloc(len + 1);
args[0] = 0;
foreach(le, stmt->args)
- sprintf(args + strlen(args), "%s\\000", (char *) lfirst(le));
+ {
+ char *s = (char *) lfirst(le);
+ char *d = args + strlen(args);
+
+ while (*s)
+ {
+ if (*s == '\\')
+ *d++ = '\\';
+ *d++ = *s++;
+ }
+ *d = 0;
+ strcat(args, "\\000");
+ }
values[Anum_pg_trigger_tgnargs - 1] = Int16GetDatum(nargs);
values[Anum_pg_trigger_tgargs - 1] = PointerGetDatum(byteain(args));
}