diff options
-rw-r--r-- | trans/hello-mt.c | 28 | ||||
-rw-r--r-- | trans/hello.c | 21 |
2 files changed, 41 insertions, 8 deletions
diff --git a/trans/hello-mt.c b/trans/hello-mt.c index ba9329a7..44d54dea 100644 --- a/trans/hello-mt.c +++ b/trans/hello-mt.c @@ -273,16 +273,32 @@ trivfs_append_args (struct trivfs_control *fsys, { error_t err; char *opt; + size_t opt_len; + FILE *s; + char *c; + + s = open_memstream (&opt, &opt_len); + fprintf (s, "--contents='"); pthread_rwlock_rdlock (&contents_lock); - err = asprintf (&opt, "--contents=%s", contents) < 0 ? ENOMEM : 0; + for (c = contents; *c; c++) + switch (*c) + { + case 0x27: /* Single quote. */ + fprintf (s, "'\"'\"'"); + break; + + default: + fprintf (s, "%c", *c); + } pthread_rwlock_unlock (&contents_lock); - if (!err) - { - err = argz_add (argz, argz_len, opt); - free (opt); - } + fprintf (s, "'"); + fclose (s); + + err = argz_add (argz, argz_len, opt); + + free (opt); return err; } diff --git a/trans/hello.c b/trans/hello.c index 4e88c609..d1884df1 100644 --- a/trans/hello.c +++ b/trans/hello.c @@ -246,9 +246,26 @@ trivfs_append_args (struct trivfs_control *fsys, { error_t err; char *opt; + size_t opt_len; + FILE *s; + char *c; - if (asprintf (&opt, "--contents=%s", contents) < 0) - return ENOMEM; + s = open_memstream (&opt, &opt_len); + fprintf (s, "--contents='"); + + for (c = contents; *c; c++) + switch (*c) + { + case 0x27: /* Single quote. */ + fprintf (s, "'\"'\"'"); + break; + + default: + fprintf (s, "%c", *c); + } + + fprintf (s, "'"); + fclose (s); err = argz_add (argz, argz_len, opt); |