Mercurial > emacs
changeset 24518:a0423d2b9302
(Fw32_set_clipboard_data): Take into account line
ends when calculating clipboard storage needed for non-ASCII text.
author | Andrew Innes <andrewi@gnu.org> |
---|---|
date | Thu, 25 Mar 1999 22:59:18 +0000 |
parents | e422a11cf832 |
children | 2a1ffba95a70 |
files | src/w32select.c |
diffstat | 1 files changed, 14 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32select.c Thu Mar 25 22:56:34 1999 +0000 +++ b/src/w32select.c Thu Mar 25 22:59:18 1999 +0000 @@ -99,10 +99,10 @@ 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)) @@ -112,6 +112,16 @@ 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 @@ -134,14 +144,7 @@ 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; @@ -191,7 +194,7 @@ (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)