changeset 16061:a1290c4159b5

(quote_file_name): New function. (main, both versions): Use quote_file_name. (decode_options): Don't return a value. (main, both versions): Use optind. Don't check for -nowait here.
author Richard M. Stallman <rms@gnu.org>
date Mon, 02 Sep 1996 00:05:56 +0000
parents 7e6b741a8b6a
children 2a9b6a25cb9e
files lib-src/emacsclient.c
diffstat 1 files changed, 58 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/lib-src/emacsclient.c	Mon Sep 02 00:03:28 1996 +0000
+++ b/lib-src/emacsclient.c	Mon Sep 02 00:05:56 1996 +0000
@@ -56,9 +56,9 @@
 };
 
 /* Decode the options from argv and argc.
-   Return the number of remaining arguments.  */
+   The global variable `optind' will say how many arguments we used up.  */
 
-int
+void
 decode_options (argc, argv)
      int argc;
      char **argv;
@@ -92,8 +92,6 @@
 	  print_help_and_exit ();
 	}
     }
-
-  return argc;
 }
 
 print_help_and_exit ()
@@ -105,6 +103,39 @@
 	   "Report bugs to bug-gnu-emacs@prep.ai.mit.edu.\n");
   exit (1);
 }
+
+/* Return a copy of NAME, inserting a \
+   before each \, each -, and each space.
+   Change spaces to underscores, too, so that the
+   return value never contains a space.  */
+
+char *
+quote_file_name (name)
+     char *name;
+{
+  char *copy = (char *) malloc (strlen (name) * 2 + 1);
+  char *p, *q;
+
+  p = name;
+  q = copy;
+  while (*p)
+    {
+      if (*p == ' ')
+	{
+	  *q++ = '\\';
+	  *q++ = '_';
+	  p++;
+	}
+      else
+	{
+	  if (*p == '\\' || *p == '-')
+	    *q++ = '\\';
+	  *q++ = *p++;
+	}
+    }
+
+  return copy;
+}
 
 #if !defined (HAVE_SOCKETS) && !defined (HAVE_SYSVIPC)
 
@@ -143,18 +174,13 @@
   struct sockaddr_un server;
   char *homedir, *cwd, *str;
   char string[BUFSIZ];
-  int args_left;
 
   progname = argv[0];
 
   /* Process options.  */
-  args_left = decode_options (argc, argv);
+  decode_options (argc, argv);
 
-  /* Advance argv and decrement argc for the options that were skipped.  */
-  argv += argc - args_left;
-  argc = args_left;
-
-  if (argc < 2)
+  if (argc - optind < 1)
     print_help_and_exit ();
 
   /* 
@@ -244,19 +270,11 @@
       exit (1);
     }
 
-  for (i = 1; i < argc; i++)
+  if (nowait)
+    fprintf (out, "-nowait ");
+
+  for (i = optind; i < argc; i++)
     {
-      /* If -nowait or --nowait option is used,
-	 report it to the server.  */
-      if (!strcmp (argv[i], "-nowait")
-	  || (!strncmp (argv[i], "--nowait", strlen (argv[i]))
-	      && strlen (argv[i]) >= 3))
-	{
-	  fprintf (out, "-nowait ");
-	  nowait = 1;
-	  continue;
-	}
-
       if (*argv[i] == '+')
 	{
 	  char *p = argv[i] + 1;
@@ -266,7 +284,8 @@
 	}
       else if (*argv[i] != '/')
 	fprintf (out, "%s/", cwd);
-      fprintf (out, "%s ", argv[i]);
+
+      fprintf (out, "%s ", quote_file_name (argv[i]));
     }
   fprintf (out, "\n");
   fflush (out);
@@ -321,13 +340,9 @@
   progname = argv[0];
 
   /* Process options.  */
-  args_left = decode_options (argc, argv);
+  decode_options (argc, argv);
 
-  /* Advance argv and decrement argc for the options that were skipped.  */
-  argv += argc - args_left;
-  argc = args_left;
-
-  if (argc < 2)
+  if (argc - optind < 1)
     print_help_and_exit ();
 
   /*
@@ -381,22 +396,22 @@
 
   msgp->mtext[0] = 0;
   used = 0;
-  argc--; argv++;
+
+  if (nowait)
+    {
+      strcat (msgp->mtext, "-nowait ");
+      used += 8;
+    }
+
+  argc -= optind;
+  argv += optind;
+
   while (argc)
     {
       int need_cwd = 0;
       char *modified_arg = argv[0];
 
-      /* If -nowait or --nowait option is used,
-	 report it to the server.  */
-      if (!strcmp (modified_arg, "-nowait")
-	  || (!strncmp (modified_arg, "--nowait", strlen (modified_arg))
-	      && strlen (modified_arg) >= 3))
-	{
-	  modified_arg = "-nowait";
-	  nowait = 1;
-	}
-      else if (*modified_arg == '+')
+      if (*modified_arg == '+')
 	{
 	  char *p = modified_arg + 1;
 	  while (*p >= '0' && *p <= '9') p++;
@@ -406,6 +421,8 @@
       else if (*modified_arg != '/')
 	need_cwd = 1;
 
+      modified_arg = quote_file_name (modified_arg);
+
       if (need_cwd)
 	used += strlen (cwd);
       used += strlen (modified_arg) + 1;