# HG changeset patch # User Stefan Monnier # Date 1058900531 0 # Node ID d116f572d76bdea074501a7a3a13abdc45bce3a3 # Parent 8bbd4454be32a4759e9be0b646436a3ade5f66ef (delete_all_overlays): New function. diff -r 8bbd4454be32 -r d116f572d76b src/buffer.c --- a/src/buffer.c Tue Jul 22 17:54:50 2003 +0000 +++ b/src/buffer.c Tue Jul 22 19:02:11 2003 +0000 @@ -630,8 +630,36 @@ return buf; } +void +delete_all_overlays (b) + struct buffer *b; +{ + Lisp_Object overlay; + + /* `reset_buffer' blindly sets the list of overlays to NULL, so we + have to empty the list, otherwise we end up with overlays that + think they belong to this buffer while the buffer doesn't know about + them any more. */ + while (b->overlays_before) + { + XSETMISC (overlay, b->overlays_before); + Fdelete_overlay (overlay); + } + while (b->overlays_after) + { + XSETMISC (overlay, b->overlays_after); + Fdelete_overlay (overlay); + } + eassert (b->overlays_before == NULL); + eassert (b->overlays_after == NULL); +} + /* Reinitialize everything about a buffer except its name and contents - and local variables. */ + and local variables. + If called on an already-initialized buffer, the list of overlays + should be deleted before calling this function, otherwise we end up + with overlays that claim to belong to the buffer but the buffer + claims it doesn't belong to it. */ void reset_buffer (b)