# HG changeset patch # User Eli Zaretskii # Date 919091687 0 # Node ID 8c47fccebb58161d83efd41556bf9d60e6ca1431 # Parent 971fec299b717891c357cbf30b7acc4077f0934c (get_clipboard_data): Work around a bug in Windows95 DOS box which doubles the reported size of text in the clipboard. diff -r 971fec299b71 -r 8c47fccebb58 src/w16select.c --- a/src/w16select.c Mon Feb 15 12:07:01 1999 +0000 +++ b/src/w16select.c Mon Feb 15 15:14:47 1999 +0000 @@ -369,10 +369,15 @@ __dpmi_regs regs; unsigned long xbuf_addr; unsigned char *dp = Data; - /* The last 32-byte aligned block of data. See commentary below. */ - unsigned char *last_block = dp + ((Size & 0x1f) - ? (Size & 0x20) - : Size - 0x20); + /* Copying text from the DOS box on Windows 95 evidently doubles the + size of text as reported by the clipboard. So we must begin + looking for the zeroes as if the actual size were half of what's + reported. Jeez, what a mess! */ + unsigned half_size = Size > 32 ? Size / 2 : Size; + /* Where we should begin looking for zeroes. See commentary below. */ + unsigned char *last_block = dp + ((half_size & 0x1f) + ? (half_size & 0x20) + : half_size - 0x20); if (Format != CF_OEMTEXT) return 0; @@ -419,7 +424,8 @@ dp--; *dp++ = '\n'; xbuf_addr++; - last_block--; /* adjust the beginning of the last 32 bytes */ + if (last_block > dp) + last_block--; /* adjust the beginning of the last 32 bytes */ if (*lcdp == '\n') lcdp++; }