X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:date:from:mime-version:to:subject :content-type:content-transfer-encoding; q=dns; s=default; b=AHr 7Vy/UFqIFn/PkowNQuJl20tm7DPDAvQEByxjV5kyUa8TqhtyNLmKIQaVlcqtybdx YTjBc7oW189/9Dn3Arl+UcHpLEyA9/VSNjWXMO1UGUEmTvNgTXd8ovAZpt78mor7 BI0uAH8DeLRFsnxK8cco8CqQK862aYVQR2WmL9/Q= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:date:from:mime-version:to:subject :content-type:content-transfer-encoding; s=default; bh=sWzrfGd9j dWRZccBkgTU3p6p6pw=; b=SEBXWQPqvbvgf6buSbPRMDoCV1DQ5EZ3ZYg4lXck4 EjrMrX8f8TwSrugt2Id4ELhHXpygTxC4k+8gf9udbw8qqbZs8SXKbpp3+8sYMdZJ gz2rF1j/rGGynHTp1a7b2j4+dFwQfXwFFhshDOSfEXG56cEWYBwTiwWbmdE9zT6A 10= Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=ham version=3.3.2 X-HELO: mailout07.t-online.de Message-ID: <52695C49.30505@t-online.de> Date: Thu, 24 Oct 2013 19:43:37 +0200 From: Christian Franke User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0 SeaMonkey/2.19 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: /dev/clipboard: No O_TEXT conversion if write() is used Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes fopen("/dev/clipboard", "wt") sets O_TEXT, fprintf() does LF->CRLF conversion but write() does not. The latter is IMO a bug. fopen("/dev/clipboard", "wb") sets both O_TEXT and O_BINARY, fwrite() and write() do no conversion. The set_flags() call in fhandler_dev_clipboard::open() should possibly clear O_BINARY. With regular files, everything works as expected. Testcase: $ uname -srvm CYGWIN_NT-6.1-WOW64 1.7.25(0.270/5/3) 2013-08-31 20:39 i686 $ cat testmode.c #include #include #include int main(int argc, char **argv) { const char * name = argv[1], * flags = argv[2]; FILE * f = fopen(name, flags); if (!f) { perror(name); return 1; } int fd = fileno(f), mode = getmode(fd); printf("fd=%d, mode=%x%s%s\n", fd, mode, (mode & O_BINARY ? " O_BINARY":""), (mode & O_TEXT ? " O_TEXT":"")); fprintf(f, "printf1\nprintf2\n"); fflush(f); write(fd, "write1\nwrite2\n", 14); fprintf(f, "printf3\nprintf4\n"); fflush(f); write(fd, "write3\nwrite4\n", 14); fclose(f); return 0; } $ gcc -o testmode testmode.c $ ./testmode /dev/clipboard wt ; cat -A /dev/clipboard fd=3, mode=20000 O_TEXT printf1^M$ printf2^M$ write1$ write2$ printf3^M$ printf4^M$ write3$ write4$ $ ./testmode /dev/clipboard wb ; cat -A /dev/clipboard fd=3, mode=30000 O_BINARY O_TEXT printf1$ printf2$ write1$ write2$ printf3$ printf4$ write3$ write4$ $ ./testmode out wt ; cat -A out fd=3, mode=20000 O_TEXT printf1^M$ printf2^M$ write1^M$ ... $ ./testmode out wb ; cat -A out fd=3, mode=10000 O_BINARY printf1$ printf2$ write1$ ... This is likely the reason for the following inconsistent behavior: $ echo test1 >/dev/clipboard ; cat -A /dev/clipboard test1$ $ /bin/echo test2 >/dev/clipboard ; cat -A /dev/clipboard test2^M$ $ /bin/echo test3 | cat > /dev/clipboard ; cat -A /dev/clipboard test3$ $ echo test4 | sed s,x,x, > /dev/clipboard ; cat -A /dev/clipboard test4^M$ Christian -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple