BOOL ok = TRUE;
HANDLE htext;
int nbytes;
- int truelen;
+ int truelen, nlines = 0;
unsigned char *src;
unsigned char *dst;
-
+
CHECK_STRING (string, 0);
if (!NILP (frame))
nbytes = STRING_BYTES (XSTRING (string)) + 1;
src = XSTRING (string)->data;
+ dst = src;
+
+ /* We need to know how many lines there are, since we need CRLF line
+ termination for compatibility with other Windows Programs.
+ avoid using strchr because it recomputes the length every time */
+ while ((dst = memchr (dst, '\n', nbytes - (dst - src))) != NULL)
+ {
+ nlines++;
+ dst++;
+ }
{
/* Since we are now handling multilingual text, we must consider
standard CF_TEXT clipboard format uses CRLF line endings,
while Emacs uses just LF internally). */
- truelen = nbytes;
- dst = src;
- /* avoid using strchr because it recomputes the length everytime */
- while ((dst = memchr (dst, '\n', nbytes - (dst - src))) != NULL)
- {
- truelen++;
- dst++;
- }
+ truelen = nbytes + nlines;
if ((htext = GlobalAlloc (GMEM_MOVEABLE | GMEM_DDESHARE, truelen)) == NULL)
goto error;
(Fcheck_coding_system (Vnext_selection_coding_system), &coding);
Vnext_selection_coding_system = Qnil;
coding.mode |= CODING_MODE_LAST_BLOCK;
- bufsize = encoding_buffer_size (&coding, nbytes);
+ bufsize = encoding_buffer_size (&coding, nbytes) + nlines;
if ((htext = GlobalAlloc (GMEM_MOVEABLE | GMEM_DDESHARE, bufsize)) == NULL)
goto error;
if ((dst = (unsigned char *) GlobalLock (htext)) == NULL)