summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trans/hello-mt.c28
-rw-r--r--trans/hello.c21
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);