home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: Patch 5.6a.021
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- ------------
-
- I only solved half the problem...
-
- Patch 5.6a.021
- Problem: Recovering still may not work when the block size of the device
- where the swap file is located is larger than 4096.
- Solution: Read block 0 with the minimal block size.
- Files: src/memfile.c, src/memline.c, src/vim.h
-
-
- *** ../vim-5.6a.20/src/memfile.c Mon Jan 10 21:28:45 2000
- --- src/memfile.c Tue Jan 11 16:19:43 2000
- ***************
- *** 170,183 ****
- /*
- * Try to set the page size equal to the block size of the device.
- * Speeds up I/O a lot.
- ! * NOTE: minimal block size depends on size of block 0 data! It's not done
- ! * with a sizeof(), because block 0 is defined in memline.c (Sorry).
- ! * The maximal block size is arbitrary.
- */
- if (mfp->mf_fd >= 0
- && fstatfs(mfp->mf_fd, &stf, sizeof(struct statfs), 0) == 0
- ! && stf.F_BSIZE >= 1048
- ! && stf.F_BSIZE <= 50000)
- mfp->mf_page_size = stf.F_BSIZE;
- #endif
-
- --- 170,183 ----
- /*
- * Try to set the page size equal to the block size of the device.
- * Speeds up I/O a lot.
- ! * When recovering, the actual block size will be retrieved from block 0
- ! * in ml_recover(). The size used here may be wrong, therefore
- ! * mf_blocknr_max must be rounded up.
- */
- if (mfp->mf_fd >= 0
- && fstatfs(mfp->mf_fd, &stf, sizeof(struct statfs), 0) == 0
- ! && stf.F_BSIZE >= MIN_SWAP_PAGE_SIZE
- ! && stf.F_BSIZE <= MAX_SWAP_PAGE_SIZE)
- mfp->mf_page_size = stf.F_BSIZE;
- #endif
-
- *** ../vim-5.6a.20/src/memline.c Mon Dec 20 09:59:15 1999
- --- src/memline.c Tue Jan 11 16:15:36 2000
- ***************
- *** 143,150 ****
- * NOTE: DEFINITION OF BLOCK 0 SHOULD NOT CHANGE! It would make all existing
- * swap files unusable!
- *
- ! * If size of block0 changes anyway, adjust minimal block size
- ! * in mf_open()!!
- *
- * This block is built up of single bytes, to make it portable accros
- * different machines. b0_magic_* is used to check the byte order and size of
- --- 143,149 ----
- * NOTE: DEFINITION OF BLOCK 0 SHOULD NOT CHANGE! It would make all existing
- * swap files unusable!
- *
- ! * If size of block0 changes anyway, adjust MIN_SWAP_PAGE_SIZE in vim.h!!
- *
- * This block is built up of single bytes, to make it portable accros
- * different machines. b0_magic_* is used to check the byte order and size of
- ***************
- *** 801,806 ****
- --- 800,813 ----
- }
- vim_free(p);
- buf->b_ml.ml_mfp = mfp;
- +
- + /*
- + * The page size set in mf_open() might be different from the page size
- + * used in the swap file, we must get it from block 0. But to read block
- + * 0 we need a page size. Use the minimal size for block 0 here, it will
- + * be set to the real value below.
- + */
- + mfp->mf_page_size = MIN_SWAP_PAGE_SIZE;
-
- /*
- * try to read block 0
- *** ../vim-5.6a.20/src/vim.h Mon Dec 20 09:59:07 1999
- --- src/vim.h Tue Jan 11 16:20:58 2000
- ***************
- *** 576,581 ****
- --- 576,590 ----
- #define SEA_RECOVER 3 /* recover the file */
-
- /*
- + * Minimal size for block 0 of a swap file.
- + * NOTE: This depends on size of struct block0! It's not done with a sizeof(),
- + * because struct block0 is defined in memline.c (Sorry).
- + * The maximal block size is arbitrary.
- + */
- + #define MIN_SWAP_PAGE_SIZE 1048
- + #define MAX_SWAP_PAGE_SIZE 50000
- +
- + /*
- * Events for autocommands.
- */
- enum auto_event
- *** ../vim-5.6a.20/src/version.c Tue Jan 11 16:54:05 2000
- --- src/version.c Tue Jan 11 16:54:36 2000
- ***************
- *** 420,421 ****
- --- 420,423 ----
- { /* Add new patch number below this line */
- + /**/
- + 21,
- /**/
-
- --
- hundred-and-one symptoms of being an internet addict:
- 106. When told to "go to your room" you inform your parents that you
- can't...because you were kicked out and banned.
-
- --/-/---- Bram Moolenaar ---- Bram@moolenaar.net ---- Bram@vim.org ---\-\--
- \ \ www.vim.org/iccf www.moolenaar.net www.vim.org / /
-