changeset 24886:f2cb4885cecf v8.2.2981

patch 8.2.2981: recovery test is not run on big-endian systems Commit: https://github.com/vim/vim/commit/6654ca702ca64c99965efcad3243ea5f95473252 Author: James McCoy <jamessan@jamessan.com> Date: Sat Jun 12 14:05:41 2021 +0200 patch 8.2.2981: recovery test is not run on big-endian systems Problem: Recovery test is not run on big-endian systems. Solution: Make it work on big-endian systems. (James McCoy, closes https://github.com/vim/vim/issues/8368)
author Bram Moolenaar <Bram@vim.org>
date Sat, 12 Jun 2021 14:15:02 +0200
parents f6bacdb175b8
children 670e100e6be6
files src/testdir/test_recover.vim src/version.c
diffstat 2 files changed, 88 insertions(+), 87 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_recover.vim
+++ b/src/testdir/test_recover.vim
@@ -198,103 +198,102 @@ func Test_recover_corrupted_swap_file()
   let b = readblob(sn)
   let save_b = copy(b)
   bw!
-  " Run these tests only on little-endian systems. These tests fail on a
-  " big-endian system (IBM S390x system).
-  if b[1008:1011] == 0z33323130
-        \ && b[4096:4097] == 0z7470
-        \ && b[8192:8193] == 0z6164
+
+  " Not all fields are written in a system-independent manner.  Detect whether
+  " the test is running on a little or big-endian system, so the correct
+  " corruption values can be set.
+  let little_endian = b[1008:1015] == 0z33323130.00000000
 
-    " clear the B0_MAGIC_LONG field
-    let b[1008:1011] = 0z00000000
-    call writefile(b, sn)
-    let msg = execute('recover Xfile1')
-    call assert_match('the file has been damaged', msg)
-    call assert_equal('Xfile1', @%)
-    call assert_equal([''], getline(1, '$'))
-    bw!
+  " clear the B0_MAGIC_LONG field
+  let b[1008:1015] = 0z0000000000000000
+  call writefile(b, sn)
+  let msg = execute('recover Xfile1')
+  call assert_match('the file has been damaged', msg)
+  call assert_equal('Xfile1', @%)
+  call assert_equal([''], getline(1, '$'))
+  bw!
 
-    " reduce the page size
-    let b = copy(save_b)
-    let b[12:15] = 0z00010000
-    call writefile(b, sn)
-    let msg = execute('recover Xfile1')
-    call assert_match('page size is smaller than minimum value', msg)
-    call assert_equal('Xfile1', @%)
-    call assert_equal([''], getline(1, '$'))
-    bw!
+  " reduce the page size
+  let b = copy(save_b)
+  let b[12:15] = 0z00010000
+  call writefile(b, sn)
+  let msg = execute('recover Xfile1')
+  call assert_match('page size is smaller than minimum value', msg)
+  call assert_equal('Xfile1', @%)
+  call assert_equal([''], getline(1, '$'))
+  bw!
 
-    " clear the pointer ID
-    let b = copy(save_b)
-    let b[4096:4097] = 0z0000
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E310:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal([''], getline(1, '$'))
-    bw!
+  " clear the pointer ID
+  let b = copy(save_b)
+  let b[4096:4097] = 0z0000
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E310:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal([''], getline(1, '$'))
+  bw!
 
-    " set the number of pointers in a pointer block to zero
-    let b = copy(save_b)
-    let b[4098:4099] = 0z0000
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['???EMPTY BLOCK'], getline(1, '$'))
-    bw!
+  " set the number of pointers in a pointer block to zero
+  let b = copy(save_b)
+  let b[4098:4099] = 0z0000
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['???EMPTY BLOCK'], getline(1, '$'))
+  bw!
 
-    " set the block number in a pointer entry to a negative number
-    let b = copy(save_b)
-    let b[4104:4111] = 0z00000000.00000080
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['???LINES MISSING'], getline(1, '$'))
-    bw!
+  " set the block number in a pointer entry to a negative number
+  let b = copy(save_b)
+  let b[4104:4111] = little_endian ? 0z00000000.00000080 : 0z80000000.00000000
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['???LINES MISSING'], getline(1, '$'))
+  bw!
 
-    " clear the data block ID
-    let b = copy(save_b)
-    let b[8192:8193] = 0z0000
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['???BLOCK MISSING'], getline(1, '$'))
-    bw!
+  " clear the data block ID
+  let b = copy(save_b)
+  let b[8192:8193] = 0z0000
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['???BLOCK MISSING'], getline(1, '$'))
+  bw!
 
-    " set the number of lines in the data block to zero
-    let b = copy(save_b)
-    let b[8208:8211] = 0z00000000
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['??? from here until ???END lines may have been inserted/deleted',
-          \ '???END'], getline(1, '$'))
-    bw!
+  " set the number of lines in the data block to zero
+  let b = copy(save_b)
+  let b[8208:8215] = 0z00000000.00000000
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['??? from here until ???END lines may have been inserted/deleted',
+        \ '???END'], getline(1, '$'))
+  bw!
 
-    " use an invalid text start for the lines in a data block
-    let b = copy(save_b)
-    let b[8216:8219] = 0z00000000
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['???'], getline(1, '$'))
-    bw!
+  " use an invalid text start for the lines in a data block
+  let b = copy(save_b)
+  let b[8216:8219] = 0z00000000
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['???'], getline(1, '$'))
+  bw!
 
-    " use an incorrect text end (db_txt_end) for the data block
-    let b = copy(save_b)
-    let b[8204:8207] = 0z80000000
-    call writefile(b, sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['??? from here until ???END lines may be messed up', '',
-          \ '???END'], getline(1, '$'))
-    bw!
+  " use an incorrect text end (db_txt_end) for the data block
+  let b = copy(save_b)
+  let b[8204:8207] = little_endian ? 0z80000000 : 0z00000080
+  call writefile(b, sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['??? from here until ???END lines may be messed up', '',
+        \ '???END'], getline(1, '$'))
+  bw!
 
-    " remove the data block
-    let b = copy(save_b)
-    call writefile(b[:8191], sn)
-    call assert_fails('recover Xfile1', 'E312:')
-    call assert_equal('Xfile1', @%)
-    call assert_equal(['???MANY LINES MISSING'], getline(1, '$'))
-  endif
+  " remove the data block
+  let b = copy(save_b)
+  call writefile(b[:8191], sn)
+  call assert_fails('recover Xfile1', 'E312:')
+  call assert_equal('Xfile1', @%)
+  call assert_equal(['???MANY LINES MISSING'], getline(1, '$'))
 
   bw!
   call delete(sn)
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2981,
+/**/
     2980,
 /**/
     2979,