Tests 58 and 59 fail when doing 'make test' with latest Vim-7.2.55
(huge version, tested on Linux).
I tried older versions:
- Vim-7.2.49 .... All tests pass
- Vim-7.2.50 .... Tests 58 & 59 fail.
Patch 7.2.50 introduces the regression:
--- 8< --- cut here --- 8< --- cut here --- 8< ---
Patch 7.2.050
Problem: Warnings for not checking return value of fwrite(). (Chip Campbell)
Solution: Use the return value.
Files: src/spell.c
--- 8< --- cut here --- 8< --- cut here --- 8< ---
Here is the mismatch in the test outcome:
--- 8< --- cut here --- 8< --- cut here --- 8< ---
$ diff -c test58.ok test58.failed
*** test58.ok 2006-04-05 22:35:46.000000000 +0200
--- test58.failed 2008-11-29 08:07:28.000000000 +0100
***************
*** 40,48 ****
gebletegek
kepereneven
everles gesvets etele
! kbltykk
! kprnfn
! *fls kswts tl
elekwent
elequint
elekwint
--- 40,48 ----
gebletegek
kepereneven
everles gesvets etele
! gebletegek
! kepereneven
! everles gesvets etele
elekwent
elequint
elekwint
$ diff -c test59.ok test59.failed
*** test59.ok 2006-04-05 22:39:13.000000000 +0200
--- test59.failed 2008-11-29 08:07:29.000000000 +0100
***************
*** 40,48 ****
gebletegek
kepereneven
everles gesvets etele
! kbltykk
! kprnfn
! *fls kswts tl
elekwent
elequint
elekwint
--- 40,48 ----
gebletegek
kepereneven
everles gesvets etele
! gebletegek
! kepereneven
! everles gesvets etele
elekwent
elequint
--- 8< --- cut here --- 8< --- cut here --- 8< ---
Looking at the official patch 7.2.50, I see that I/O errors are checked
like this for example:
int fwv = 1; /* collect return value of fwrite() to avoid
warnings from picky compiler */
...snip...
fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* <sofofrom> */
...snip...
fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* <sofoto> */
...snip...
if (fwv != 1)
retval = FAIL;
if (retval == FAIL)
EMSG(_(e_write));
This is an incorrect way of checking errors: fwrite() returns the number
of items successfully written. So doing bit arithmetic on the return value
can't possibly be correct.
Correct would be to compare the return value of fwrite() with the number
of items that is requested to be written:
int error = 0;
...
if (fwrite(spin->si_sofofr, l, (size_t)1, fd) != 1) /* <sofofrom> */
error = 1;
-- Dominique
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---