+ return;
+ }
+ // New marks start before and overlap with the region
+ if ( BEG(p) + FRAG(p)->size < pos + size ) {
+ FRAG(p)->size = size; // new mark covers old region
+ } else {
+ FRAG(p)->size += BEG(p) - pos;
+ }
+ BEG(p) = pos;
+ q = p+1;
+ while ( q < overlay.count && BEG(q) <= END(p) ) {
+ if ( END(q) > END(p) ) {
+ FRAG(p)->size = END(q) - BEG(p);
+ }
+ overlay_delete( q );
+ deleted++;
+ }
+ overlay_save_table( p, deleted? overlay.count : q );
+#if DEBUG
+ fprintf( stderr, "overlay size 4( %ld ) deleted %d\n",
+ FRAG(p)->size, deleted );
+#endif
+}
+
+static void setup_overlay(char *filename) {
+ overlay.source.filename = filename;
+ overlay.source.fd = open( filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR );
+ if ( overlay.source.fd < 0 ) {
+ perror( filename );
+ usage();