aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2024-10-31 11:52:26 +0100
committerCorinna Vinschen <corinna@vinschen.de>2024-10-31 13:15:29 +0100
commit1f05c040599afe63af8c7ecfe71bc461f393600d (patch)
tree71c81733dd631ddadd8446e265fd812a61cbc513 /winsup/cygwin
parent04f386e9af997d0929e90556cce712346bef0d68 (diff)
downloadnewlib-1f05c040599afe63af8c7ecfe71bc461f393600d.zip
newlib-1f05c040599afe63af8c7ecfe71bc461f393600d.tar.gz
newlib-1f05c040599afe63af8c7ecfe71bc461f393600d.tar.bz2
Cygwin: pipe: fix shift value
The expression computing the next-less-power of 2 for the next write when the pipe buffer is getting filled up allows negative shift values. This works on Intel CPUs because the shift expression only evaluates the 5 LSBs, but it's undefined behaviour per the C standard. Use the correct expression to get a positive shift value. Fixes: 170e6badb621 ("Cygwin: pipe: improve writing when pipe buffer is almost full") Reported-by: Takashi Yano <takashi.yano@nifty.ne.jp> Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/fhandler/pipe.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler/pipe.cc b/winsup/cygwin/fhandler/pipe.cc
index c686df6..7370bd8 100644
--- a/winsup/cygwin/fhandler/pipe.cc
+++ b/winsup/cygwin/fhandler/pipe.cc
@@ -575,7 +575,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len)
else if (avail >= PIPE_BUF)
len1 = avail & ~(PIPE_BUF - 1);
else
- len1 = 1 << (31 - __builtin_clzl (avail));
+ len1 = 1 << (63 - __builtin_clzl (avail));
short_write_once = true;
}
if (isclosed ()) /* A signal handler might have closed the fd. */