--- gforth/engine/main.c 2005/01/23 09:55:13 1.148 +++ gforth/engine/main.c 2005/04/26 19:25:43 1.149 @@ -524,14 +524,18 @@ Address dict_alloc_read(FILE *file, Cell #if defined(HAVE_MMAP) if (offset==0) { + Address image1; image=alloc_mmap(dictsize); debugp(stderr,"try mmap($%lx, $%lx, ..., MAP_FIXED|MAP_FILE, imagefile, 0); ", (long)image, (long)imagesize); - image = mmap(image, imagesize, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FIXED|MAP_FILE|MAP_PRIVATE, fileno(file), 0); - after_alloc(image,dictsize); + image1 = mmap(image, imagesize, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FIXED|MAP_FILE|MAP_PRIVATE, fileno(file), 0); + after_alloc(image1,dictsize); + if (image != (Address)MAP_FAILED && image1 == (Address)MAP_FAILED) + goto read_image; } #endif /* defined(HAVE_MMAP) */ if (image == (Address)MAP_FAILED) { image = my_alloc(dictsize+offset)+offset; + read_image: rewind(file); /* fseek(imagefile,0L,SEEK_SET); */ fread(image, 1, imagesize, file); }