Mercurial > emacs
changeset 24318:8c47fccebb58
(get_clipboard_data): Work around a bug in Windows95
DOS box which doubles the reported size of text in the clipboard.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Mon, 15 Feb 1999 15:14:47 +0000 |
parents | 971fec299b71 |
children | a26d4126c64b |
files | src/w16select.c |
diffstat | 1 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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++; }