(fast_string_match): Give re_search byte size of
[bpt/emacs.git] / src / xselect.c
index 88efb84..ec8d2af 100644 (file)
@@ -1,5 +1,5 @@
 /* X Selection processing for Emacs.
-   Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation.
+   Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation.
 
 This file is part of GNU Emacs.
 
@@ -730,10 +730,10 @@ x_handle_selection_request (event)
       /* Indicate we have successfully processed this event.  */
       x_selection_current_request = 0;
 
-      /* Use free, not XFree, because lisp_data_to_selection_data
+      /* Use xfree, not XFree, because lisp_data_to_selection_data
         calls xmalloc itself.  */
       if (!nofree)
-       free (data);
+       xfree (data);
     }
   unbind_to (count, Qnil);
 
@@ -936,7 +936,7 @@ unexpect_property_change (location)
            prev->next = rest->next;
          else
            property_change_wait_list = rest->next;
-         free (rest);
+         xfree (rest);
          return;
        }
       prev = rest;
@@ -1025,7 +1025,7 @@ x_handle_property_notify (event)
            prev->next = rest->next;
          else
            property_change_wait_list = rest->next;
-         free (rest);
+         xfree (rest);
          return;
        }
       prev = rest;
@@ -1169,7 +1169,7 @@ x_get_foreign_selection (selection_symbol, target_type)
 \f
 /* Subroutines of x_get_window_property_as_lisp_data */
 
-/* Use free, not XFree, to free the data obtained with this function.  */
+/* Use xfree, not XFree, to free the data obtained with this function.  */
 
 static void
 x_get_window_property (display, window, property, data_ret, bytes_ret,
@@ -1252,7 +1252,7 @@ x_get_window_property (display, window, property, data_ret, bytes_ret,
   *bytes_ret = offset;
 }
 \f
-/* Use free, not XFree, to free the data obtained with this function.  */
+/* Use xfree, not XFree, to free the data obtained with this function.  */
 
 static void
 receive_incremental_selection (display, window, property, target_type,
@@ -1314,9 +1314,9 @@ receive_incremental_selection (display, window, property, target_type,
          if (! waiting_for_other_props_on_window (display, window))
            XSelectInput (display, window, STANDARD_EVENT_SET);
          unexpect_property_change (wait_object);
-         /* Use free, not XFree, because x_get_window_property
+         /* Use xfree, not XFree, because x_get_window_property
             calls xmalloc itself.  */
-         if (tmp_data) free (tmp_data);
+         if (tmp_data) xfree (tmp_data);
          break;
        }
 
@@ -1341,9 +1341,9 @@ receive_incremental_selection (display, window, property, target_type,
        }
       bcopy (tmp_data, (*data_ret) + offset, tmp_size_bytes);
       offset += tmp_size_bytes;
-      /* Use free, not XFree, because x_get_window_property
+      /* Use xfree, not XFree, because x_get_window_property
         calls xmalloc itself.  */
-      free (tmp_data);
+      xfree (tmp_data);
     }
 }
 \f
@@ -1398,9 +1398,9 @@ x_get_window_property_as_lisp_data (display, window, property, target_type,
 
       unsigned int min_size_bytes = * ((unsigned int *) data);
       BLOCK_INPUT;
-      /* Use free, not XFree, because x_get_window_property
+      /* Use xfree, not XFree, because x_get_window_property
         calls xmalloc itself.  */
-      free ((char *) data);
+      xfree ((char *) data);
       UNBLOCK_INPUT;
       receive_incremental_selection (display, window, property, target_type,
                                     min_size_bytes, &data, &bytes,
@@ -1418,9 +1418,9 @@ x_get_window_property_as_lisp_data (display, window, property, target_type,
   val = selection_data_to_lisp_data (display, data, bytes,
                                     actual_type, actual_format);
   
-  /* Use free, not XFree, because x_get_window_property
+  /* Use xfree, not XFree, because x_get_window_property
      calls xmalloc itself.  */
-  free ((char *) data);
+  xfree ((char *) data);
   return val;
 }
 \f
@@ -1493,21 +1493,22 @@ selection_data_to_lisp_data (display, data, size, type, format)
            }
        }
       if (!require_encoding)
-       str = make_string ((char *) data, size);
+       str = make_unibyte_string ((char *) data, size);
       else
        {
-         int bufsize, dummy;
+         int bufsize;
          unsigned char *buf;
          struct coding_system coding;
 
          setup_coding_system
             (Fcheck_coding_system(Vclipboard_coding_system), &coding);
-          coding.last_block = 1;
+          coding.mode |= CODING_MODE_LAST_BLOCK;
          bufsize = decoding_buffer_size (&coding, size);
          buf = (unsigned char *) xmalloc (bufsize);
-         size = decode_coding (&coding, data, buf, size, bufsize, &dummy);
-         str = make_string ((char *) buf, size);
-         free (buf);
+         decode_coding (&coding, data, buf, size, bufsize);
+         str = make_multibyte_string ((char *) buf,
+                                      coding.produced_char, coding.produced);
+         xfree (buf);
        }
       return str;
     }
@@ -1568,7 +1569,7 @@ selection_data_to_lisp_data (display, data, size, type, format)
 }
 
 
-/* Use free, not XFree, to free the data obtained with this function.  */
+/* Use xfree, not XFree, to free the data obtained with this function.  */
 
 static void
 lisp_data_to_selection_data (display, obj,
@@ -1610,7 +1611,7 @@ lisp_data_to_selection_data (display, obj,
       int num;
 
       *format_ret = 8;
-      *size_ret = XSTRING (obj)->size;
+      *size_ret = XSTRING (obj)->size_byte;
       *data_ret = XSTRING (obj)->data;
       bzero (charsets, (MAX_CHARSET + 1) * sizeof (int));
       num = ((*size_ret <= 1   /* Check the possibility of short cut.  */
@@ -1630,17 +1631,17 @@ lisp_data_to_selection_data (display, obj,
              The format is compatible with what the target `STRING'
              expects if OBJ contains only ASCII and Latin-1
              characters.  */
-         int bufsize, dummy;
+         int bufsize;
          unsigned char *buf;
          struct coding_system coding;
 
          setup_coding_system
             (Fcheck_coding_system (Vclipboard_coding_system), &coding);
-         coding.last_block = 1;
+         coding.mode |= CODING_MODE_LAST_BLOCK;
          bufsize = encoding_buffer_size (&coding, *size_ret);
          buf = (unsigned char *) xmalloc (bufsize);
-         *size_ret = encode_coding (&coding, *data_ret, buf,
-                                    *size_ret, bufsize, &dummy);
+         encode_coding (&coding, *data_ret, buf, *size_ret, bufsize);
+         *size_ret = coding.produced;
          *data_ret = buf;
           if (charsets[charset_latin_iso8859_1]
              && (num == 1 || (num == 2 && charsets[CHARSET_ASCII])))
@@ -1915,7 +1916,7 @@ Disowning it means there is no such selection.")
 {
   Time timestamp;
   Atom selection_atom;
-  XSelectionClearEvent event;
+  struct selection_input_event event;
   Display *display;
   struct x_display_info *dpyinfo;
 
@@ -1945,7 +1946,7 @@ Disowning it means there is no such selection.")
   SELECTION_EVENT_DISPLAY (&event) = display;
   SELECTION_EVENT_SELECTION (&event) = selection_atom;
   SELECTION_EVENT_TIME (&event) = timestamp;
-  x_handle_selection_clear (&event);
+  x_handle_selection_clear ((struct input_event *) &event);
 
   return Qt;
 }
@@ -2099,9 +2100,9 @@ DEFUN ("x-get-cut-buffer-internal", Fx_get_cut_buffer_internal,
                           Fcons (make_number (format), Qnil))));
 
   ret = (bytes ? make_string ((char *) data, bytes) : Qnil);
-  /* Use free, not XFree, because x_get_window_property
+  /* Use xfree, not XFree, because x_get_window_property
      calls xmalloc itself.  */
-  free (data);
+  xfree (data);
   return ret;
 }
 
@@ -2133,7 +2134,7 @@ DEFUN ("x-store-cut-buffer-internal", Fx_store_cut_buffer_internal,
   buffer_atom = symbol_to_x_atom (FRAME_X_DISPLAY_INFO (selected_frame),
                                  display, buffer);
   data = (unsigned char *) XSTRING (string)->data;
-  bytes = XSTRING (string)->size;
+  bytes = XSTRING (string)->size_byte;
   bytes_remaining = bytes;
 
   if (! FRAME_X_DISPLAY_INFO (selected_frame)->cut_buffers_initialized)
@@ -2168,8 +2169,8 @@ DEFUN ("x-store-cut-buffer-internal", Fx_store_cut_buffer_internal,
 
 DEFUN ("x-rotate-cut-buffers-internal", Fx_rotate_cut_buffers_internal,
   Sx_rotate_cut_buffers_internal, 1, 1, 0,
-  "Rotate the values of the cut buffers by the given number of steps;\n\
-positive means move values forward, negative means backward.")
+  "Rotate the values of the cut buffers by the given number of step.\n\
+Positive means shift the values forward, negative means backward.")
   (n)
      Lisp_Object n;
 {
@@ -2274,8 +2275,8 @@ it merely informs you that they have happened.");
     "Coding system for communicating with other X clients.\n\
 When sending or receiving text via cut_buffer, selection, and clipboard,\n\
 the text is encoded or decoded by this coding system.\n\
-A default value is `iso-latin-1'");
-  Vclipboard_coding_system=intern ("iso-latin-1");
+A default value is `compound-text'");
+  Vclipboard_coding_system=intern ("compound-text");
   staticpro(&Vclipboard_coding_system);
 
   DEFVAR_INT ("x-selection-timeout", &x_selection_timeout,