[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r107565: * emacsclient.c (main): Handle multiple messages in a single,
Andreas Schwab <=