emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r107565: * emacsclient.c (main): Hand


From: Andreas Schwab
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r107565: * emacsclient.c (main): Handle multiple messages in a single
Date: Sun, 11 Mar 2012 12:49:59 +0100
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 107565
committer: Andreas Schwab <address@hidden>
branch nick: emacs
timestamp: Sun 2012-03-11 12:49:59 +0100
message:
  * emacsclient.c (main): Handle multiple messages in a single
  datagram.
modified:
  lib-src/ChangeLog
  lib-src/emacsclient.c
=== modified file 'lib-src/ChangeLog'
--- a/lib-src/ChangeLog 2012-03-11 11:15:25 +0000
+++ b/lib-src/ChangeLog 2012-03-11 11:49:59 +0000
@@ -1,5 +1,8 @@
 2012-03-11  Andreas Schwab  <address@hidden>
 
+       * emacsclient.c (main): Handle multiple messages in a single
+       datagram.
+
        * emacsclient.c (socket_name): Add const.
        (get_server_config): Add parameter config_file, use it instead of
        global server_file.

=== modified file 'lib-src/emacsclient.c'
--- a/lib-src/emacsclient.c     2012-03-11 11:15:25 +0000
+++ b/lib-src/emacsclient.c     2012-03-11 11:49:59 +0000
@@ -1768,7 +1768,7 @@
   /* Now, wait for an answer and print any messages.  */
   while (exit_status == EXIT_SUCCESS)
     {
-      char *p;
+      char *p, *end_p;
       do
         {
           errno = 0;
@@ -1783,61 +1783,64 @@
 
       string[rl] = '\0';
 
-      p = string + strlen (string) - 1;
-      while (p > string && *p == '\n')
-        *p-- = 0;
+      /* Loop over all NL-terminated messages.  */
+      for (end_p = p = string; end_p != NULL && *end_p != '\0'; p = end_p)
+       {
+         end_p = strchr (p, '\n');
+         if (end_p != NULL)
+           *end_p++ = '\0';
 
-      if (strprefix ("-emacs-pid ", string))
-        {
-          /* -emacs-pid PID: The process id of the Emacs process. */
-          emacs_pid = strtol (string + strlen ("-emacs-pid"), NULL, 10);
-        }
-      else if (strprefix ("-window-system-unsupported ", string))
-        {
-          /* -window-system-unsupported: Emacs was compiled without X
-              support.  Try again on the terminal. */
-          nowait = 0;
-          tty = 1;
-          goto retry;
-        }
-      else if (strprefix ("-print ", string))
-        {
-          /* -print STRING: Print STRING on the terminal. */
-          str = unquote_argument (string + strlen ("-print "));
-          if (needlf)
-            printf ("\n");
-          printf ("%s", str);
-          needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
-        }
-      else if (strprefix ("-error ", string))
-        {
-          /* -error DESCRIPTION: Signal an error on the terminal. */
-          str = unquote_argument (string + strlen ("-error "));
-          if (needlf)
-            printf ("\n");
-          fprintf (stderr, "*ERROR*: %s", str);
-          needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
-         exit_status = EXIT_FAILURE;
-        }
+         if (strprefix ("-emacs-pid ", p))
+           {
+             /* -emacs-pid PID: The process id of the Emacs process. */
+             emacs_pid = strtol (p + strlen ("-emacs-pid"), NULL, 10);
+           }
+         else if (strprefix ("-window-system-unsupported ", p))
+           {
+             /* -window-system-unsupported: Emacs was compiled without X
+                support.  Try again on the terminal. */
+             nowait = 0;
+             tty = 1;
+             goto retry;
+           }
+         else if (strprefix ("-print ", p))
+           {
+             /* -print STRING: Print STRING on the terminal. */
+             str = unquote_argument (p + strlen ("-print "));
+             if (needlf)
+               printf ("\n");
+             printf ("%s", str);
+             needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
+           }
+         else if (strprefix ("-error ", p))
+           {
+             /* -error DESCRIPTION: Signal an error on the terminal. */
+             str = unquote_argument (p + strlen ("-error "));
+             if (needlf)
+               printf ("\n");
+             fprintf (stderr, "*ERROR*: %s", str);
+             needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
+             exit_status = EXIT_FAILURE;
+           }
 #ifdef SIGSTOP
-      else if (strprefix ("-suspend ", string))
-        {
-          /* -suspend: Suspend this terminal, i.e., stop the process. */
-          if (needlf)
-            printf ("\n");
-          needlf = 0;
-          kill (0, SIGSTOP);
-        }
+         else if (strprefix ("-suspend ", p))
+           {
+             /* -suspend: Suspend this terminal, i.e., stop the process. */
+             if (needlf)
+               printf ("\n");
+             needlf = 0;
+             kill (0, SIGSTOP);
+           }
 #endif
-      else
-        {
-          /* Unknown command. */
-          if (needlf)
-            printf ("\n");
-          printf ("*ERROR*: Unknown message: %s", string);
-          needlf = string[0]
-           == '\0' ? needlf : string[strlen (string) - 1] != '\n';
-        }
+         else
+           {
+             /* Unknown command. */
+             if (needlf)
+               printf ("\n");
+             needlf = 0;
+             printf ("*ERROR*: Unknown message: %s\n", p);
+           }
+       }
     }
 
   if (needlf)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]