2024-02-14 Antonio Diaz Diaz * Version 1.20.1 released. * io.c (write_file): Don't create missing intermediate directories. 2024-01-19 Antonio Diaz Diaz * Version 1.20 released. * Implement options '+line', '+/RE', and '+?RE'. (Suggested by Matthew Polk and John Cowan). * main.c: New option '--unsafe-names'. (print_filename): New function for file names with control chars. (may_access_filename): Reject file names ending with a slash. * buffer.c (warned, set_warned): New functions. * main_loop.c: Intervening cmds don't make a second 'e' or 'q' fail. (get_filename): Add tilde expansion. (Suggested by John Cowan). Warn on first modification of buffer loaded from read-only file. (Suggested by Dan Jacobson). * io.c (write_file): Create missing intermediate directories. * ed.texi: Improve description of commands 'e', 'f', 'q'. * main.c, ed.texi: Improve description of exit status. * configure, Makefile.in: New variable 'MAKEINFO'. * INSTALL: Document use of CFLAGS+='--std=c99 -D_POSIX_C_SOURCE=2'. 2023-01-11 Antonio Diaz Diaz * Version 1.19 released. * main_loop.c (exec_command): Fix commands 'e', 'E'; they did set the 'modified' flag if file not found. (Reported by Harry Graf). (main_loop): Print script error line to stdout instead of stderr. * Change long name of option '-s' to '--script'. (Suggested by Andrew L. Moore). * Assign short name '-q' to options '--quiet' and '--silent'. * main.c (show_strerror) Use '!quiet' to enable diagnostics. * Do not process file names for backslash escapes. (Suggested by Andrew L. Moore). * ed.texi: Document 0 as starting point for searches '0;/RE/'. Document how to achieve the effect of ex style '!' filtering. 2022-02-04 Antonio Diaz Diaz * Version 1.18 released. * main_loop.c (get_shell_command): Flush stdout after printing cmd. (Reported by Sören Tempel). * signal.c (sighup_handler): Fix a memory leak just before exiting. * carg_parser.c (ap_init): Likewise. (Both reported by Xosé Vázquez Pérez). * io.c (read_file, write_file): Check ptr returned by strip_escapes. * main_loop.c (get_shell_command, exec_command): Likewise. * main_loop.c (get_shell_command): Remove backslash from escaped '%'. (Reported by Martin Thomsen). * main_loop.c, regex.c: Implement case-insensitive REs. * regex.c (compile_regex): Don't overwrite previous regex if error. * main.c: New option '--strip-trailing-cr'. * buffer.c (push_undo_atom): Fail if stack grows larger than INT_MAX. (too_many_lines): Fail if buffer grows larger than INT_MAX lines. * global.c (set_active_node): Fail if list grows larger than INT_MAX. * signal.c (resize_buffer): Fail if a line grows longer than INT_MAX. * io.c (read_file): Return -2 for fatal errors. * main_loop.c (main_loop): Set error status if fatal error from main. * main.c [restricted_]: New message "Directory access restricted". * ed.texi: New chapter "The 's' Command". * COPYING: Restored. (I forgot to do it in 1.11). * TODO: Removed. 2021-01-06 Antonio Diaz Diaz * Version 1.17 released. * main_loop.c (exec_global): Make commands 'q' and 'Q' work in a global command. (Reported by J. A. Harris). * main.c: New option '-E, --extended-regexp'. (Suggested by Shawn Wagner). * io.c (read_stream_line, write_stream): Add filename parameter. Print the file name in case of error. (Reported by Dan Jacobson). * global.c: Integrate 'resize_line_buffer' into 'set_active_node'. * buffer.c: Integrate 'resize_undo_buffer' into 'push_undo_atom'. 2020-02-20 Antonio Diaz Diaz * Version 1.16 released. * regex.c (line_replace): Accept 's/^/#/g' as valid. (Reported by Bjoern Wibben). * main_loop.c: Remove length limit of prompt string. (Reported by Tim Chase). * main.c: Set a valid invocation_name even if argc == 0. * ed.texi: Extended operators depend on regex implementation. (Reported by Brian Zwahr). * ed.texi: Several fixes and improvements. 2019-01-01 Antonio Diaz Diaz * Version 1.15 released. * io.c (print_line): Make command 'l' print '\\' before every '$' within the text. (Reported by Ori Avtalion). * main_loop.c (extract_addresses): Fix address ',,' to mean '$,$' instead of '1,$'. (Reported by Matthieu Felix). * regex.c (extract_replacement): Allow newlines even if global. * main_loop.c (exec_command): Make command 'c' reject address 0. * ed.texi: Minor fixes. * configure: Accept appending to CFLAGS; 'CFLAGS+=OPTIONS'. 2017-02-22 Antonio Diaz Diaz * Version 1.14.2 released. * main.c (show_strerror) Revert to using '!scripted' instead of 'verbose' to enable diagnostics. 2017-01-10 Antonio Diaz Diaz * Version 1.14.1 released. * Print counts, messages, '?' and '!' to stdout instead of stderr. * buffer.c (append_lines): Fix current address after empty 'i'. * regex.c (get_compiled_regex): Fix crash caused by invalid free introduced in ed 1.14. (Reported by Hanno Böck). (set_subst_regex): Treat missing delimiters consistently. (extract_replacement): Don't replace 'a' with '%' in 's/a/%'. Fix infinite loop with EOF in the middle of a replacement. Don't accept newlines in replacement in a global command. Last delimiter can't be omitted if not last in command list. (search_and_replace): Set current address to last line modified. * main_loop.c (extract_addresses): Fix address offsets; '3 ---- 2' was calculated as -2 instead of 1. Accept ranges with the first address omitted. (exec_command): Fix current address after empty replacement text in command 'c'. Don't clear the modified status after writing the buffer to a shell command. (Reported by Jérôme Frgacic). (get_command_suffix): Don't allow repeated print suffixes. (command_s): Accept suffixes in any order. Don't allow multiple count suffixes. 'sp' now toggles all print suffixes. (main_loop): Make EOF on stdin behave as command 'q'. * ed.texi: Fix the description of commands 'acegijkmqrsuw'. Document that ed allows any combination of print suffixes. * testsuite: Improve most tests. Simplify bug reporting. * configure: Avoid warning on some shells when testing for gcc. * Makefile.in: Detect the existence of install-info. 2016-01-24 Antonio Diaz Diaz * Version 1.13 released. * buffer.c (put_sbuf_line): Fix a memory leak. * io.c (read_file, write_file): Close file on error. (Both issues reported by Cédric Picard). 2015-07-04 Antonio Diaz Diaz * Version 1.12 released. * ed.texi: Remove extra spaces from some commands. 2015-03-30 Antonio Diaz Diaz * Version 1.11 released. * main_loop.c (exec_command): Fix command 'z'. (zN printed N + 1 lines). * ed.texi: Document the window size used by the command 'z'. * Makefile.in: New targets 'install*-compress'. * Restore original copyright and license notices in the code. I assigned to the FSF the copyright on changes made to the part of ed already copyrighted by the FSF, which seems to be just the manual. 2014-01-22 Antonio Diaz Diaz * Version 1.10 released. * ed.texinfo: Rename to ed.texi. 2013-06-18 Antonio Diaz Diaz * Version 1.9 released. * check.sh: Don't feed shell scripts to ed. * configure: Options now accept a separate argument. 2013-04-23 Antonio Diaz Diaz * Version 1.8 released. * io.c (get_tty_line): Remove "double EOF" behavior. 2012-10-09 Antonio Diaz Diaz * Version 1.7 released. * main.c (main): Set invocation_name before calling show_error. * Change quote characters in messages as advised by GNU Standards. * ed.texinfo: Fix description of address offsets. * ed.texinfo: Fix a link to the Bash manual. * configure: Rename 'datadir' to 'datarootdir'. * Makefile.in: New target 'install-bin'. 2012-01-01 Antonio Diaz Diaz * Version 1.6 released. * io.c (put_tty_line): Null characters where incorrectly shown by the command 'l'. (Reported by Martin Guy). * io.c (read_stream): Fix the condition deciding when to show the message "Newline appended". * main_loop.c (exec_command): The 'modified' flag is now set when reading a non-empty file into an empty buffer. * regex.c (translit_text): Fix typo that prevented using NUL characters in regular expressions. * main_loop.c (exec_command): Return ERR if 'system' can't create a shell process. * main_loop.c (main_loop): Flush stdout/stderr before reading a new command. * buffer.c (put_sbuf_line): Add size parameter. * ed.1: Man page is now generated with 'help2man'. * ed.1: All command-line options are now documented in the man page. * Restore copyright notices of Andrew L. Moore. It seems Andrew granted some permissions but never assigned copyright to the FSF. 2010-08-30 Antonio Diaz Diaz * Version 1.5 released. * buffer.c (append_lines): Fix commands 'a', 'c', and 'i'. (When used in a global command list, the commands following them in the list were ignored). * main_loop.c (exec_command): Fix command 'e'. (It quitted when invoked a second time with a modified buffer). * main.c: New option '-r, --restricted'. * 'red' has been converted to a script invoking 'ed --restricted'. * Description of ed in the manual has been changed. * testsuite: Modify some tests and remove obsolete POSIX tests. * main_loop.c: Make variable 'ibufp' local to main_loop. * Define type bool to make clear which functions and variables are Boolean. * Add 'const' to all pointer declarations accepting it. * regex.c (replace_matching_text): Make se_max an enum. * signal.c: Include termios.h. * Convert C99 style comments '//' to C89 style comments '/* */'. * ed.texinfo: Fix an erratum. * Change copyright holder from Andrew, Antonio to the FSF. (This change was later discovered to be wrong. See 1.6 and 1.11). 2009-07-10 Antonio Diaz Diaz * Version 1.4 released. * buffer.c, main_loop.c: Undo now restores the modified status. * regex.c (search_and_replace): Fix a race condition with user interrupt. * signal.c: Add new functions 'resize_line_buffer' and 'resize_undo_buffer' to definitively fix the aliasing warnings. * Some minor corrections have been made to the manual. 2009-05-24 Antonio Diaz Diaz * Version 1.3 released. * carg_parser.c (ap_resize_buffer): An aliasing related segfault that only occurs when overoptimizing with GCC on some architectures (alpha, sparc) has been (hopefully) fixed. * signal.c (resize_buffer): Likewise. 2009-01-31 Antonio Diaz Diaz * Version 1.2 released. * configure: Locale has been fixed to 'C'. * Makefile.in: Man page is now installed by default. * 'make install-info' should now work on Debian and OS X. * ed.texinfo: Update license to GFDL version 1.3 or later. 2008-10-14 Antonio Diaz Diaz * Version 1.1 released. * configure: Quote arguments stored in config.status. 2008-08-21 Antonio Diaz Diaz * Version 1.0 released. * configure: New option '--program-prefix'. * signal.c (strip_escapes): Fix a buffer overflow. * signal.c (resize_buffer): Fix a pointer aliasing warning. 2008-02-24 Antonio Diaz Diaz * Version 0.9 released. * signal.c (sighup_handler): Return 0 if no error. * Arg_parser updated to 1.1. 2007-08-18 Antonio Diaz Diaz * Version 0.8 released. * check.sh: Testsuite exits unsuccesfully in case of error. * ed.1: Fix some minor problems in the manual page. * ed.texinfo: Add 21 kB of legalese (fdl.texinfo). 2007-07-18 Antonio Diaz Diaz * Version 0.7 released. * buffer.c (dec_addr): Return correct address when wrapping. 2007-06-29 Antonio Diaz Diaz * Version 0.6 released. * signal.c (sigwinch_handler, set_signal): Fix two minor compatibility problems. * main_loop.c (main_loop): Fix an infinite loop when reading an empty script. * Update license to GPL version 3 or later. (This change was later discovered to be wrong. See 1.5 and 1.18). 2007-03-09 Antonio Diaz Diaz * Version 0.5 released. * main_loop.c (next_addr): '%' reimplemented as it was in ed 0.2. 2007-01-15 Antonio Diaz Diaz * Version 0.4 released. * Fix some minor problems in the testsuite. 2006-11-11 Antonio Diaz Diaz * Version 0.3 released. * buffer.c (open_sbuf): Fix symlink vulnerability using 'tmpfile'. * signal.c: Fix signal handling for SIGINT. * main_loop.c (exec_command): Modify commands 'c' and 'i' to treat address 0 as a synonym for address 1, as per POSIX. * The pause mode has been removed. * main.c: New option '-l, --loose-exit-status'. * main.c: New option '-v, --verbose'. * carg_parser.c: New argument parser that replaces 'getopt_long'. * 'configure' and 'Makefile.in' have been replaced. * Remove recursive make for testsuite. * Create directory 'doc'. * Remove all pre ISO C89 code. * Remove all global variables. * ed.texinfo: Add the changes from Andrew and some mine. Sun Jun 26 22:21:59 1994 Andrew L. Moore * GNU ed 0.2 release. * main.c (yank_lines): Added yank buffer. A range of lines may be cut ('d') to or yanked ('y') from a yank buffer. Lines in the buffer may be put ('x') after the addressed line (. by default). * main.c (display_lines): Page output of listed ('l') lines if isatty(0). * main.c (main): Replaced isatty(0) with is_regular_file(). Errors in piped scripts, as opposed to regular scripts or here documents, do not force ed to exit. * Capitilize error messages per the standard. Wed Jun 22 01:06:11 1994 Andrew L. Moore * ed.h: Generic definition of INT_MAX * signal.c: Added #ifndef SIG_ERR Tue Apr 19 10:52:51 1994 Andrew L. Moore * Version 0.1. Initial release for GNU. * main.c (exec_command): Add comment command '#'. Mon Mar 21 21:58:11 PST 1994 Andrew L. Moore * Use umask 077 to open buffer file. Sat Mar 19 14:06:52 PST 1994 Andrew L. Moore * Removed problematic DES and insque support. Wed Jan 19 20:42:50 PST 1994 Andrew L. Moore * Added reliable signal(2) for SysV. Dec 1993 François Pinard * GNUified ed. Copyright (C) 1993 François Pinard Copyright (C) 1994 Andrew L. Moore Copyright (C) 2006-2024 Antonio Diaz Diaz. This file is a collection of facts, and thus it is not copyrightable, but just in case, you have unlimited permission to copy, distribute, and modify it.