+/* Return a list of overlays which is a copy of the overlay list
+ LIST, but for buffer B. */
+
+static Lisp_Object
+copy_overlays (b, list)
+ struct buffer *b;
+ Lisp_Object list;
+{
+ Lisp_Object result, buffer;
+
+ XSETBUFFER (buffer, b);
+
+ for (result = Qnil; CONSP (list); list = XCDR (list))
+ {
+ Lisp_Object overlay, start, end, old_overlay;
+ int charpos;
+
+ old_overlay = XCAR (list);
+ charpos = marker_position (OVERLAY_START (old_overlay));
+ start = Fmake_marker ();
+ Fset_marker (start, make_number (charpos), buffer);
+ XMARKER (start)->insertion_type
+ = XMARKER (OVERLAY_START (old_overlay))->insertion_type;
+
+ charpos = marker_position (OVERLAY_END (old_overlay));
+ end = Fmake_marker ();
+ Fset_marker (end, make_number (charpos), buffer);
+ XMARKER (end)->insertion_type
+ = XMARKER (OVERLAY_END (old_overlay))->insertion_type;
+
+ overlay = allocate_misc ();
+ XMISCTYPE (overlay) = Lisp_Misc_Overlay;
+ OVERLAY_START (overlay) = start;
+ OVERLAY_END (overlay) = end;
+ OVERLAY_PLIST (overlay) = Fcopy_sequence (OVERLAY_PLIST (old_overlay));
+
+ result = Fcons (overlay, result);
+ }
+
+ return Fnreverse (result);
+}
+
+