Hello Danie,

Danie Theron - DSV wrote:
This is working fine up to v1.13 of "ed", but since v1.14 up to the
latest version v1.19, the deltas are not being applied correctly causing
corruption in the reconstruction of programs.

You are taking the deltas from the standard output of ed, which is for human consumption, not to be used as output to be written to a file. This may have worked with older versions of ed, but it no longer is expected to work.

For example, POSIX[1] states that:

If changes have been made in the buffer since the last w command that wrote the entire buffer, ed shall warn the user if an attempt is made to destroy the editor buffer via the e or q commands. The ed utility shall write the string:
  "?\n"
(followed by an explanatory message if help mode has been enabled via the H command) to standard output and shall continue in command mode with the current line number unchanged.

and

If an end-of-file is detected on standard input:
[...]
If the ed utility is in command mode, it shall act as if a q command had been entered.

[1] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html

The cause of the '?' being inserted into the reconstructed files is that ed is reaching the end of file on standard input with the buffer modified:

$ (cat textfile_v1.1_delta.txt ; echo '1,$p') | ed -vs textfile_v1.0.txt | diff textfile_v1.1.txt -
7a8,9
> ?
> Warning: buffer modified

A workaround may be to exit ed unconditionally with command 'Q':

$ (cat textfile_v1.1_delta.txt ; echo '1,$p' ; echo 'Q') | ed -s textfile_v1.0.txt | diff textfile_v1.1.txt -

But probably a better solution would be to use the 'w' command of 'ed', or to use 'patch' instead of 'ed' to apply the patches.


Best regards,
Antonio.

Reply via email to