From: Eli Zaretskii Date: Mon, 15 Feb 1999 15:14:47 +0000 (+0000) Subject: (get_clipboard_data): Work around a bug in Windows95 X-Git-Tag: emacs-20.4~631 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cc6d8c5b60d02946f5b5fb149a8ba9c0c670aba2;p=emacs.git (get_clipboard_data): Work around a bug in Windows95 DOS box which doubles the reported size of text in the clipboard. --- diff --git a/src/w16select.c b/src/w16select.c index 68e958fa427..b1f4b3adeba 100644 --- a/src/w16select.c +++ b/src/w16select.c @@ -369,10 +369,15 @@ get_clipboard_data (Format, Data, Size, Raw) __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 @@ get_clipboard_data (Format, Data, Size, Raw) 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++; }