]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fw32_set_clipboard_data): Take into account line
authorAndrew Innes <andrewi@gnu.org>
Thu, 25 Mar 1999 22:59:18 +0000 (22:59 +0000)
committerAndrew Innes <andrewi@gnu.org>
Thu, 25 Mar 1999 22:59:18 +0000 (22:59 +0000)
ends when calculating clipboard storage needed for non-ASCII text.

src/w32select.c

index 115d323ddbc76cb9a11a18a72d1b6c9701bc3c8b..cb506aefb42c93c48ec30cbc6f0c7205978e4a15 100644 (file)
@@ -99,10 +99,10 @@ DEFUN ("w32-set-clipboard-data", Fw32_set_clipboard_data, Sw32_set_clipboard_dat
   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 @@ DEFUN ("w32-set-clipboard-data", Fw32_set_clipboard_data, Sw32_set_clipboard_dat
 
   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 @@ DEFUN ("w32-set-clipboard-data", Fw32_set_clipboard_data, Sw32_set_clipboard_dat
           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 @@ DEFUN ("w32-set-clipboard-data", Fw32_set_clipboard_data, Sw32_set_clipboard_dat
          (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)