]> git.eshelyaron.com Git - emacs.git/commitdiff
(main) [HAVE_SOCKETS]: Use two separate stdio
authorRichard M. Stallman <rms@gnu.org>
Tue, 23 Jul 1996 14:18:34 +0000 (14:18 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 23 Jul 1996 14:18:34 +0000 (14:18 +0000)
streams, one for sending and one for reading the reply.

lib-src/emacsclient.c

index b3dac7923908b361dfa93d8faa77e6317aee5a2c..d1fb4df2ac743d0cb05c36ac9e0ba9023a65cef7 100644 (file)
@@ -63,7 +63,7 @@ main (argc, argv)
 {
   char system_name[32];
   int s, i;
-  FILE *out;
+  FILE *out, *in;
   struct sockaddr_un server;
   char *homedir, *cwd, *str;
   char string[BUFSIZ];
@@ -132,6 +132,8 @@ main (argc, argv)
       perror ("connect");
       exit (1);
     }
+
+  /* We use the stream OUT to send our command to the server.  */
   if ((out = fdopen (s, "r+")) == NULL)
     {
       fprintf (stderr, "%s: ", argv[0]);
@@ -139,6 +141,18 @@ main (argc, argv)
       exit (1);
     }
 
+  /* We use the stream IN to read the response.
+     We used to use just one stream for both output and input
+     on the socket, but reversing direction works nonportably:
+     on some systems, the output appears as the first input;
+     on other systems it does not.  */
+  if ((in = fdopen (s, "r+")) == NULL)
+    {
+      fprintf (stderr, "%s: ", argv[0]);
+      perror ("fdopen");
+      exit (1);
+    }
+
 #ifdef BSD
   cwd = getwd (string);
 #else
@@ -170,15 +184,14 @@ main (argc, argv)
   printf ("Waiting for Emacs...");
   fflush (stdout);
 
-  rewind (out); /* re-read the output */
-  str = fgets (string, BUFSIZ, out); 
-  printf ("\n");
-
-  /* Now, wait for an answer and print any messages.  */
+  /* Now, wait for an answer and print any messages.  On some systems,
+     the first line we read will actually be the output we just sent.
+     We can't predict whether that will happen, so if it does, we
+     detect it by recognizing `Client: ' at the beginning.  */
   
-  while (str = fgets (string, BUFSIZ, out))
+  while (str = fgets (string, BUFSIZ, in))
     printf ("%s", str);
-  
+
   return 0;
 }