Handle \r\n in gdbreplay

Message ID 87y369jfby.fsf@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Feb. 21, 2019, 4:06 p.m. UTC
  >>>>> "Eli" == Eli Zaretskii <eliz@gnu.org> writes:

Eli> I'm okay with treating \r\n as a single \n, but do we really want to
Eli> treat a single \r as if it were \n?  I thought systems which used that
Eli> EOL convention are not really widespread, to say the least.

I normally handle \r this way out of habit I suppose.  It doesn't matter
that much to me, I guess \r isn't likely to be seen or made by accident.

Tom

commit eb7112d0f11809c25f415fa4f48aa6abe5fd84a4
Author: Tom Tromey <tromey@adacore.com>
Date:   Wed Feb 20 14:29:23 2019 -0700

    Handle \r\n in gdbreplay
    
    I tried gdbreplay yesterday, but the remotelogfile I received was made
    on Windows, so the lines were terminated with \r\n rather than plain
    \n.
    
    This patch changes gdbreplay to allow \r\n line termination when
    reading the log file.
    
    gdb/gdbserver/ChangeLog
    2019-02-21  Tom Tromey  <tromey@adacore.com>
    
            * gdbreplay.c (logchar): Handle \r\n.
  

Comments

Paul Koning Feb. 21, 2019, 4:12 p.m. UTC | #1
> On Feb 21, 2019, at 11:06 AM, Tom Tromey <tromey@adacore.com> wrote:
> 
>>>>>> "Eli" == Eli Zaretskii <eliz@gnu.org> writes:
> 
> Eli> I'm okay with treating \r\n as a single \n, but do we really want to
> Eli> treat a single \r as if it were \n?  I thought systems which used that
> Eli> EOL convention are not really widespread, to say the least.
> 
> I normally handle \r this way out of habit I suppose.  It doesn't matter
> that much to me, I guess \r isn't likely to be seen or made by accident.

Supposedly \r alone is newline in Mac OS 9 and before, which at this point is sufficiently ancient history it may no longer be interesting.

	paul
  
Tom Tromey Feb. 27, 2019, 6:49 p.m. UTC | #2
>>>>> "Tom" == Tom Tromey <tromey@adacore.com> writes:

Tom> commit eb7112d0f11809c25f415fa4f48aa6abe5fd84a4
Tom> Author: Tom Tromey <tromey@adacore.com>
Tom> Date:   Wed Feb 20 14:29:23 2019 -0700

Tom>     Handle \r\n in gdbreplay
    
[...]

I'm checking this in now.

Tom
  

Patch

diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index e9fe5ab03f0..be0d0e293b2 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,7 @@ 
+2019-02-21  Tom Tromey  <tromey@adacore.com>
+
+	* gdbreplay.c (logchar): Handle \r\n.
+
 2019-02-07  Alan Hayward  <alan.hayward@arm.com>
 
 	* linux-low.c (linux_attach): Add process before lwp.
diff --git a/gdb/gdbserver/gdbreplay.c b/gdb/gdbserver/gdbreplay.c
index 26a55533ff6..bda8095839c 100644
--- a/gdb/gdbserver/gdbreplay.c
+++ b/gdb/gdbserver/gdbreplay.c
@@ -316,10 +316,26 @@  logchar (FILE *fp)
   int ch2;
 
   ch = fgetc (fp);
-  fputc (ch, stdout);
-  fflush (stdout);
+  if (ch != '\r')
+    {
+      fputc (ch, stdout);
+      fflush (stdout);
+    }
   switch (ch)
     {
+      /* Treat \r\n as a newline.  */
+    case '\r':
+      ch = fgetc (fp);
+      if (ch == '\n')
+	ch = EOL;
+      else
+	{
+	  ungetc (ch, fp);
+	  ch = '\r';
+	}
+      fputc (ch == EOL ? '\n' : '\r', stdout);
+      fflush (stdout);
+      break;
     case '\n':
       ch = EOL;
       break;