From 872093579a7ca35aa65a89d4050204868b82d5ce Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 28 Sep 2003 08:24:56 +0000 Subject: [PATCH] (quote_file_name): Print the result instead of returning it. Fix the return type accordingly. (main): Under --eval, don't fail if left with additional arguments after decoding options. Quote file names. --- lib-src/emacsclient.c | 62 ++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 18 deletions(-) diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index f0090752fab..dbdde16db02 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -169,14 +169,15 @@ Report bugs to bug-gnu-emacs@gnu.org.\n", progname); exit (0); } -/* Return a copy of NAME, inserting a & +/* Inserting a & before each &, each space, each newline, and any initial -. Change spaces to underscores, too, so that the return value never contains a space. */ -char * -quote_file_name (name) +void +quote_file_name (name, stream) char *name; + FILE *stream; { char *copy = (char *) malloc (strlen (name) * 2 + 1); char *p, *q; @@ -206,7 +207,9 @@ quote_file_name (name) } *q++ = 0; - return copy; + fprintf (stream, copy); + + free (copy); } /* Like malloc but get fatal error if memory is exhausted. */ @@ -310,7 +313,7 @@ main (argc, argv) /* Process options. */ decode_options (argc, argv); - if (argc - optind < 1) + if ((argc - optind < 1) && !eval) { fprintf (stderr, "%s: file name or argument required\n", progname); fprintf (stderr, "Try `%s --help' for more information\n", progname); @@ -476,24 +479,47 @@ To start the server in Emacs, type \"M-x server-start\".\n", fprintf (out, "-eval "); if (display) - fprintf (out, "-display %s ", quote_file_name (display)); + { + fprintf (out, "-display "); + quote_file_name (display, out); + fprintf (out, " "); + } - for (i = optind; i < argc; i++) + if ((argc - optind > 0)) { - if (eval) - ; /* Don't prepend any cwd or anything like that. */ - else if (*argv[i] == '+') + for (i = optind; i < argc; i++) { - char *p = argv[i] + 1; - while (isdigit ((unsigned char) *p) || *p == ':') p++; - if (*p != 0) - fprintf (out, "%s/", quote_file_name (cwd)); + if (eval) + ; /* Don't prepend any cwd or anything like that. */ + else if (*argv[i] == '+') + { + char *p = argv[i] + 1; + while (isdigit ((unsigned char) *p) || *p == ':') p++; + if (*p != 0) + { + quote_file_name (cwd, out); + fprintf (out, "/"); + } + } + else if (*argv[i] != '/') + { + quote_file_name (cwd, out); + fprintf (out, "/"); + } + + quote_file_name (argv[i], out); + fprintf (out, " "); } - else if (*argv[i] != '/') - fprintf (out, "%s/", quote_file_name (cwd)); - - fprintf (out, "%s ", quote_file_name (argv[i])); } + else + { + while ((str = fgets (string, BUFSIZ, stdin))) + { + quote_file_name (str, out); + } + fprintf (out, " "); + } + fprintf (out, "\n"); fflush (out); -- 2.39.2