bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#1523: [Ivan Shmakov] process-send-string apparently mangles \r into


From: richardeng
Subject: bug#1523: [Ivan Shmakov] process-send-string apparently mangles \r into \n
Date: Tue, 13 Jan 2009 01:24:20 +0800
User-agent: Thunderbird 2.0.0.19 (Windows/20081209)

Sven Joachim wrote:
I received the following report via the Debian bug tracking system.
It is reproducible in the trunk.

------------------------------------------------------------------------

Subject:
Bug#508300: process-send-string apparently mangles \r into \n
From:
Ivan Shmakov <oneingray@gmail.com>
Date:
Wed, 10 Dec 2008 01:14:09 +0600
To:
submit@bugs.debian.org

To:
submit@bugs.debian.org
CC:
Ivan Shmakov <oneingray@gmail.com>


Package: emacs22
Version: 22.2+2-5

        After running the following program:

(let* ((coding-system-for-read  'binary)
       (coding-system-for-write 'binary)
       (p (start-process "foo" "*foo*" "od" "-td1")))
    (process-send-string p "\r\n")
    (process-send-eof p))
;; => #<process foo>

        the `*foo*' buffer contains:

--cut: *foo*--
0000000   10   10
0000002

Process foo finished
--cut: *foo*--

        While I'd expect the following instead:

--cut: *foo*--
0000000   13   10
0000002

Process foo finished
--cut: *foo*--

        Compare:

(let ((coding-system-for-read  'binary)
      (coding-system-for-write 'binary))
  (save-excursion
    (set-buffer "*foo*")
    (let* ((start (point))
           (end   (progn (insert "\r\n") (point))))
      (call-process-region start end "od" t t t "-td1"))))

--cut: *foo*--
0000000   13   10
0000002
--cut: *foo*--


(start-process "foo" "*foo*" "od" "-td1") // pty is used, pty driver will map '\r' <-> '\n' (call-process-region start end "od" t t t "-td1") // temp file is used, no such problem

--- process.c.~1.577.~ 2009-01-03 07:03:59.000000000 -0800 +++ process.c 2009-01-13 01:18:08.000000000 -0800 @@ -1871,6 +1871,13 @@ forkin = forkout = -1; #endif /* not USG, or USG_SUBTTY_WORKS */ pty_flag = 1; + { + struct emacs_tty settings; + EMACS_GET_TTY(outchannel, &settings); + settings.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */ + settings.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */ + EMACS_SET_TTY(outchannel, &settings, 1); + } } else #endif /* HAVE_PTYS */






reply via email to

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