1997-08-31 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Version 2.5 released. 1997-07-21 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.4. * pch.c (there_is_another_patch), NEWS: Report an error if the patch input contains garbage but no patches. * pch.c (open_patch_file): Check for patch file too long (i.e., its size doesn't fit in a `long', and LFS isn't available). * inp.c (plan_a): Cast malloc return value, in case malloc returns char *. 1997-07-16 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.3. * NEWS, patch.man, pch.c (intuit_diff_type, get_line, pget_line): Now demangles RFC 934 encapsulation. * pch.c (p_rfc934_nesting): New var. * pch.c (intuit_diff_type): Don't bother to check file names carefully if we're going to return NO_DIFF. * inp.c (plan_a): Count the number of lines before allocating pointer-to-line buffer; this reduces memory requirements considerably (roughly by a factor of 5 on 32-bit hosts). Decrease `size' only when read unexpectedly reports EOF. (i_buffer): New var. (too_many_lines): New fn. (re_input): Free i_buffer if using plan A. Free buffers unconditionally; they can't be zero. * inp.c (plan_a, plan_b): Check for overflow of line counter. * pch.c (malformed), util.h (memory_fatal, read_fatal, write_fatal): Declare as noreturn. 1997-07-10 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.2. * util.c (ok_to_reverse), NEWS: The default answer is now `n'; this is better for Emacs. * Makefile.in (dist): Use cp -p, not ln; some hosts do the wrong thing with ln if the source is a symbolic link. * patch.man: Fix typo: -y -> -Y. 1997-07-05 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.1. * patch.c: (main, get_some_switches), NEWS, patch.man: Version control is now independent of whether backups are made. * patch.c (option_help): Put version control options together. (get_some_switches): With CVS 1.9 hack, treat -b foo like -b -z foo, not just -z foo. This change is needed due to recent change in -z. * backupfile.c (find_backup_file_name): backup_type == none causes undefined behavior; this undoes the previous change to this file. * patch.c (locate_hunk): Fix bug when locating context diff hunks near end of file with nonzero fuzz. * util.c (move_file): Don't assume that ENOENT is reported when both ENOENT and EXDEV apply; this isn't true with DJGPP, and Posix doesn't require it. * pch.c (there_is_another_patch): Suggest -p when we can't intuit a file. 1997-06-19 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Version 2.4 released. * NEWS: Patch is now verbose when patches do not match exactly. 1997-06-17 Paul Eggert <eggert@twinsun.com> * pc/djgpp/configure.sed (config.h): Remove redundant $(srcdir). * configure.in (VERSION): Bump to 2.3.9. * patch.c (main): By default, warn about hunks that succeed with nonzero offset. * patch.man: Add LC_ALL=C advice for making patches. * pc/djgpp/configure.sed (config.h): Fix paths to dependent files. 1997-06-17 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.8. * pch.c (open_patch_file): Test stdin for fseekability. (intuit_diff_type): Missing context diff headers are now warnings, not errors; some people use patches with them (e.g. when retrying rejects). * patch.c (struct outstate): New type, collecting together some output state vars. (apply_hunk, copy_till, spew_output, init_output): Use it. Keep track of whether some output has been generated. (backup_if_mismatch): New var. (ofp): Remove, in favor of local struct outstate vars. (main): Use struct outstate. Initialize backup_if_mismatch to be the inverse of posixly_correct. Keep track of whether mismatches occur, and use this to implement backup_if_mismatch. Report files that are not empty after patching, but should be. (longopts, option_help, get_some_switches): New options --backup-if-mismatch, --no-backup-if-mismatch. (get_some_switches): -B, -Y, -z no longer set backup_type. * backupfile.c (find_backup_file_name): Treat backup_type == none like simple. * Makefile.in (CONFIG_HDRS): Remove var; no longer needed by djgpp port. (DISTFILES_PC_DJGPP): Rename pc/djgpp/config.sed to pc/djgpp/configure.sed; remove pc/djgpp/config.h in favor of new file that edits it, called pc/djgpp/config.sed. * pc/djgpp/configure.bat: Rename config.sed to configure.sed. * pc/djgpp/configure.sed (CONFIG_HDRS): Remove. (config.h): Add rule to build this from config.hin and pc/djgpp/config.sed. * pc/djgpp/config.sed: Convert from .h file to .sed script that generates .h file. * NEWS: Describe --backup-if-mismatch, --no-backup-if-mismatch. * patch.man: Describe new options --backup-if-mismatch, --no-backup-if-mismatch and their ramifications. Use unreadable backup to represent nonexistent file. 1997-06-12 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.7. (AC_CHECK_FUNCS): Add `raise'. * Makefile.in (inp.o): No longer depends on quotearg.h. * common.h (outfile): New decl (was private var named `output'). (invc): New decl. (GENERIC_OBJECT): Renamed from VOID. (NULL_DEVICE, TTY_DEVICE): New macros. * patch.c (output): Remove; renamed to `outfile' and moved to common.h. (main): `failed' is count, not boolean. Say "Skipping patch." when deciding to skip patch. (get_some_switches): Set invc when setting inname. * inp.c: Do not include <quotearg.h>. (SCCSPREFIX, GET, GET_LOCKED, SCCSDIFF1, SCCSDIFF2, SCCSDIFF3, RCSSUFFIX, CHECKOUT, CHECKOUT_LOCKED, RCSDIFF1, RCSDIFF2): Move to util.c. (get_input_file): Invoke new functions version_controller and version_get to simplify this code. (plan_b): "/dev/tty" -> NULL_DEVICE * pch.h (pch_timestamp): New decl. * pch.c (p_timestamp): New var; takes over from global timestamp array. (pch_timestamp): New function to export p_timestamp. (there_is_another_patch): Use blander wording when you can't intuit the file name. Say "Skipping patch." when deciding to skip patch. (intuit_diff_type): Look for version-controlled but nonexistent files when intuiting file names; set invc accordingly. Ignore Index: line if either old or new line is present, and if POSIXLY_CORRECT is not set. (do_ed_script): Flush stdout before invoking popen, since it may send output to stdout. * util.h (version_controller, version_get): New decls. * util.c: Include <quotearg.h> earlier. (raise): New macro, if ! HAVE_RAISE. (move_file): Create empty unreadable file when backing up a nonexistent file. (DEV_NULL): New constant. (SCCSPREFIX, GET. GET_LOCKED, SCCSDIFF1, SCCSDIFF2, RCSSUFFIX, CHECKOUT, CHECKOUT_LOCKED, RCSDIFF1): Moved here from inp.c. (version_controller, version_get): New functions. (ask): Look only at /dev/tty for answers; and when standard output is not a terminal and ! posixly_correct, don't even look there. Remove unnecessary fflushes of stdout. (ok_to_reverse): Say "Skipping patch." when deciding to skip patch.. (sigs): SIGPIPE might not be defined. (exit_with_signal): Use `raise' instead of `kill'. (systemic): fflush stdout before invoking subsidiary command. * patch.man: Document recent changes. Add "COMPATIBILITY ISSUES" section. * NEWS: New COMPATIBILITY ISSUES for man page. Changed verbosity when fuzz is found. File name intuition is changed, again. Backups are made unreadable when the file did not exist. * pc/djgpp/config.h (HAVE_STRUCT_UTIMBUF): Define. (HAVE_RAISE): New macro. (HAVE_UTIME_H): Define. (TZ_is_unset): Do not define; it's not a serious problem with `patch' to have TZ be unset in DOS. 1997-06-08 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.6. (AC_CHECK_HEADERS): Add utime.h. * acconfig.h, configure.in, pc/djgpp/config.h (HAVE_STRUCT_UTIMBUF): New macro. * pc/djgpp/config.h (HAVE_UTIME_H, TZ_is_unset): New macros. * NEWS, patch.man: Describe new -Z, -T options, new numeric option for -G, retired -G, and more verbose default behavior with fuzz. * pch.c (intuit_diff_type): Record times reported for files in headers. Remove head_says_nonexistent[x], since it's now equivalent to !timestamp[x]. * util.h (fetchname): Change argument head_says_nonexistent to timestamp. * util.c: #include <partime.h> for TM_LOCAL_ZONE. Don't include <time.h> since common.h now includes it. (ok_to_reverse): noreverse and batch cases now output regardless of verbosity. (fetchname): Change argument head_says_nonexistent to pstamp, and store header timestamp into *pstamp. If -T or -Z option is given, match time stamps more precisely. (ask): Remove unnecessary close of ttyfd. When there is no terminal at all, output a newline to make the output look nicer. After reporting EOF, flush stdout; when an input error, report the error type. * inp.c (get_input_file): Ask user whether to get file if patch_get is negative. * Makefile.in (clean): Don't clean */*.o; clean core* and *core. 1997-06-04 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.5. * util.c (ok_to_reverse): Be less chatty if verbosity is SILENT and we don't have to ask the user. If force is nonzero, apply the patch anyway. * pch.c (there_is_another_patch): Before skipping rest of patch, skip to the patch start, so that another_hunk can skip it properly. (intuit_diff_type): Slight wording change for missing headers, to regularize with other diagnostics. Fix off-by-one error when setting p_input_line when scanning the first hunk to check for deleted files. 1997-06-03 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.4. * NEWS: Now matches more generously against nonexistent or empty files. * pch.c (there_is_another_patch): Move warning about not being able to intuit file names here from skip_to. (intuit_diff_type): Fatal error if we find a headless unified or context diff. * util.c (ask): Null-terminate buffer properly even if it grew. (fetchname): No need to test for null first argument. 1997-06-02 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.3. * pch.c (p_says_nonexistent, pch_says_nonexistent): Is now 1 for empty, 2 for nonexistent. (intuit_diff_type): Set p_says_nonexistent according to new meaning. Treat empty files like nonexistent files when reversing. (skip_to): Output better diagnostic when we can't intuit a file name. * patch.c (main): Count bytes, not lines, when testing whether a file is empty, since it may contain only non-newline chars. pch_says_nonexistent now returns 2 for nonexistent files. 1997-06-01 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.2. * pch.c (open_patch_file): Fix bug when computing size of patch read from a pipe. 1997-05-30 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.1. * Makefile.in (transform, patch_name): New vars, for proper implementation of AC_ARG_PROGRAM. (install, uninstall): Use them. (install-strip): New rule. * pc/djgpp/config.sed (program_transform_name): Set to empty. 1997-05-30 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION), NEWS: Version 2.3 released. * patch.man: Fix two font typos. * util.c (doprogram): Fix misspelled decl. 1997-05-26 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.2.93. * pch.c (open_patch_file): Fatal error if binary_transput and stdin is a tty. * pc/djgpp/config.sed (chdirsaf.c): Use sed instead of cp, since cp might not be installed. * pc/djgpp/configure.bat: Prepend %srcdir% to pathname of config.sed, for crosscompiles. 1997-05-25 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.2.92. (D_INO_IN_DIRENT): New macro. * pc/djgpp/config.h, acconfig.h (D_INO_IN_DIRENT): New macro. * backupfile.c (REAL_DIR_ENTRY): Depend on D_INO_IN_DIRENT, not _POSIX_VERSION. * addext.c (addext): Adjust slen when adjusting s for DOS 8.3 limit. Do not use xxx.h -> xxxh~ hack. * util.c: (move_file): Avoid makedirs test when possible even if FILESYSTEM_PREFIX_LEN (p) is nonzero. Don't play case-changing tricks to come up with backup file name; it's not portable to case-insensitive file systems. * common.h (ISLOWER): Remove. * inp.c (scan_input): Don't use Plan A if (debug & 16). * patch.c (shortopts): Add -g, -G. (longopts): --help now maps to 132, not 'h', to avoid confusion. (get_some_switches): Likewise. Don't invoke setmode on input if --binary; wait until needed. Don't ever invoke setmode on stdout. * pch.c (open_patch_file): Setmode stdin to binary if binary_transput. * patch.man: Fix documentation of backup file name to match behavior. Add advice for ordering of patches of derived files. Add /dev/tty to list of files used. * README: Adjust instructions for building on DOS. * pc/djgpp/README: Remove tentative wording. * NEWS: The DOS port is now tested. Backup file names are no longer computed by switching case. * pc/chdirsaf.c (ERANGE): Include <errno.h> to define it. (restore_wd): chdir unconditionally. (chdir_safer): Invoke atexit successfully at most once. * pc/djgpp/config.sed: Use chdirsaf.o, not pc/chdirsaf.o. Replace CONFIG_HDRS, don't append. Use $(srcdir) in CONFIG_STATUS. Don't apply $(SHELL) to $(CONFIG_STATUS). Append rules for chdirsaf.o, chdirsaf.c; clean chdirsaf.c at the end. * pc/djgpp/configure.bat: Append CR to each line; DOS needs this. Don't use | as sed s delimiter; DOS can't handle it. 1997-05-21 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.2.91. * pch.c (another_hunk): Fix bug with computing size of prefix and suffix context with ordinary context diffs. Report malformed patch if a unified diff has nothing but context. * inp.c (get_input_file): Use patch_get, not backup_type, to decide whether to get from RCS or SCCS. Use the word `get' in diagnostics. * patch.c (main): Initialize patch_get from PATCH_GET. Omit DEFAULT_VERSION_CONTROL hook; it just leads to nonstandarization. (longopts, option_help, get_some_switches): Add support for -g, -G. (option_help): Add bug report address. * common.h (patch_get): New decl. * patch.man: Add -g and -G options; use `get' instead of `check out'. Add PATCH_GET. Recommend -Naur instead of -raNU2 for diff. * NEWS: Describe -g, -G, PATCH_GET. * version.c (copyright_string): Use only most recent copyright year, as per GNU standards. * Makefile.in (DISTFILES_PC): Remove pc/quotearg.c. * pc/djgpp/config.sed: Remove unnecessary hooks for quotearg and SHELL. 1997-05-18 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Increase to 2.2.9. (AC_TYPE_MODE_T): Add. * pch.h (another_hunk): New parameter REV. * pch.c (hunkmax): Now of type LINENUM. (malformed): Add decl. (there_is_another_patch): Skip inname-detection if skip_rest_of_patch. (intuit_diff_type): To determine whether file appears to have been deleted, look at replacement, not pattern. If there is a mismatch between existence of file and whether the patch claims to change whether the file exists, ask whether to reverse the patch. (another_hunk): New parameter REV specifying whether to reverse the hunk. All callers changed. (do_ed_script): Add assertion to ensure input file exists. * util.h (create_file): New function. (copy_file): Now takes mode, not struct stat. (makedirs): No longer exported. (move_file): Now takes mode, not struct stat. * util.c (makedirs): No longer exported. (move_file): Accept mode of destination, not struct stat. All callers changed. Quote file names in diagnostics. Create parent dir of destination if necessary. Don't use ENOTDIR. Don't unlink source; it will be unlinked later. Unlink destination if FROM is zero. (create_file): New function. (copy_file): Accept mode of destination, not struct stat. All callers changed. Use create_file to create file. (ok_to_reverse): Moved here from patch.c. Now accepts format and args; all callers changed. (mkdir): 2nd arg is now mode_t, for better compatibility. (replace_slashes): Ignore slashes at the end of the filename. * common.h (noreverse): New decl. (ok_to_reverse): Remove decl. * patch.c (noreverse): Now extern. (main): New environment var PATCH_VERSION_CONTROL overrides VERSION_CONTROL. Don't assert(hunk) if we're skipping the patch; we may not have any hunks. When removing a file, back it up if backups are desired. Don't chmod output file if input file did not exist. chmod rej file to input file's mode minus executable bits. (locate_hunk): Go back to old way of a single fuzz parameter, but handle it more precisely: context diffs with partial contexts can only match file ends, since the partial context can occur only at the start or end of file. All callers changed. (create_output_file): Use create_file to create files. (ok_to_reverse): Move to util.c. * inp.c (scan_input, get_input_file): Quote file names in diagnostics. (get_input_file): Set inerrno if it's not already set. Don't create file; it's now the caller's responsibility. (plan_b): Use /dev/null if input size is zero, since it might not exist. Use create_file to create temporary file. * NEWS: Add PATCH_VERSION_CONTROL; DOS port is untested. * pc/djgpp/config.h: Add comment for mode_t. * pc/djgpp/README: Note that it's not tested. * patch.man: PATCH_VERSION_CONTROL overrides VERSION_CONTROL. 1997-05-15 Paul Eggert <eggert@twinsun.com> * configure.in: Add AC_PREREQ(2.12). (VERSION): Bump to 2.2.8. (ed_PROGRAM): Rename from ED_PROGRAM. * pch.c (prefix_components): Support DOS file names better. Fix typo that caused fn to almost always yield 0. * util.c (<time.h>, <maketime.h>): Include. (move_file, copy_file): Add support for DOS filenames. Preserve mode of input files when creating temp files. Add binary file support. (doprogram, rmdir): New functions. (mkdir): Use doprogram. (replace_slashes): Add support for DOS filenames. (removedirs): New function. (init_time)): New function. (initial_time): New var. (fetchname): Add support for deleted files, DOS filenames. * basename.c (FILESYSTEM_PREFIX_LEN, ISSLASH): New macros, for DOS port. (base_name): Use them. * addext.c (HAVE_DOS_FILE_NAMES): New macro. <limits.h>: Include if HAVE_LIMITS_H. (addext): Handle hosts with DOS file name limits. * common.h (LONG_MIN): New macro. (FILESYSTEM_PREFIX_LEN, ISSLASH): New macros, for DOS port. (ok_to_create_file): Remove. (reverse): Now int. (ok_to_reverse): New function decl. (O_WRONLY, _O_BINARY, O_BINARY, O_CREAT, O_TRUNC): New macros. (binary_transput): New var decl. * Makefile.in (ed_PROGRAM): Renamed from ED_PROGRAM. (CONFIG_HDRS, CONFIG_STATUS): New vars. (SRCS): Add maketime.c, partime.c. (OBJS): Likewise. (HDRS): Add maketime.h, partime.h. (DISTFILES_PC, DISTFILES_PC_DJGPP): New vars. (Makefile, config.status): Use CONFIG_STATUS, not config.status.Lines 1–500 of 1704. Load more
1997-08-31 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Version 2.5 released. 1997-07-21 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.4. * pch.c (there_is_another_patch), NEWS: Report an error if the patch input contains garbage but no patches. * pch.c (open_patch_file): Check for patch file too long (i.e., its size doesn't fit in a `long', and LFS isn't available). * inp.c (plan_a): Cast malloc return value, in case malloc returns char *. 1997-07-16 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.3. * NEWS, patch.man, pch.c (intuit_diff_type, get_line, pget_line): Now demangles RFC 934 encapsulation. * pch.c (p_rfc934_nesting): New var. * pch.c (intuit_diff_type): Don't bother to check file names carefully if we're going to return NO_DIFF. * inp.c (plan_a): Count the number of lines before allocating pointer-to-line buffer; this reduces memory requirements considerably (roughly by a factor of 5 on 32-bit hosts). Decrease `size' only when read unexpectedly reports EOF. (i_buffer): New var. (too_many_lines): New fn. (re_input): Free i_buffer if using plan A. Free buffers unconditionally; they can't be zero. * inp.c (plan_a, plan_b): Check for overflow of line counter. * pch.c (malformed), util.h (memory_fatal, read_fatal, write_fatal): Declare as noreturn. 1997-07-10 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.2. * util.c (ok_to_reverse), NEWS: The default answer is now `n'; this is better for Emacs. * Makefile.in (dist): Use cp -p, not ln; some hosts do the wrong thing with ln if the source is a symbolic link. * patch.man: Fix typo: -y -> -Y. 1997-07-05 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.4.1. * patch.c: (main, get_some_switches), NEWS, patch.man: Version control is now independent of whether backups are made. * patch.c (option_help): Put version control options together. (get_some_switches): With CVS 1.9 hack, treat -b foo like -b -z foo, not just -z foo. This change is needed due to recent change in -z. * backupfile.c (find_backup_file_name): backup_type == none causes undefined behavior; this undoes the previous change to this file. * patch.c (locate_hunk): Fix bug when locating context diff hunks near end of file with nonzero fuzz. * util.c (move_file): Don't assume that ENOENT is reported when both ENOENT and EXDEV apply; this isn't true with DJGPP, and Posix doesn't require it. * pch.c (there_is_another_patch): Suggest -p when we can't intuit a file. 1997-06-19 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Version 2.4 released. * NEWS: Patch is now verbose when patches do not match exactly. 1997-06-17 Paul Eggert <eggert@twinsun.com> * pc/djgpp/configure.sed (config.h): Remove redundant $(srcdir). * configure.in (VERSION): Bump to 2.3.9. * patch.c (main): By default, warn about hunks that succeed with nonzero offset. * patch.man: Add LC_ALL=C advice for making patches. * pc/djgpp/configure.sed (config.h): Fix paths to dependent files. 1997-06-17 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.8. * pch.c (open_patch_file): Test stdin for fseekability. (intuit_diff_type): Missing context diff headers are now warnings, not errors; some people use patches with them (e.g. when retrying rejects). * patch.c (struct outstate): New type, collecting together some output state vars. (apply_hunk, copy_till, spew_output, init_output): Use it. Keep track of whether some output has been generated. (backup_if_mismatch): New var. (ofp): Remove, in favor of local struct outstate vars. (main): Use struct outstate. Initialize backup_if_mismatch to be the inverse of posixly_correct. Keep track of whether mismatches occur, and use this to implement backup_if_mismatch. Report files that are not empty after patching, but should be. (longopts, option_help, get_some_switches): New options --backup-if-mismatch, --no-backup-if-mismatch. (get_some_switches): -B, -Y, -z no longer set backup_type. * backupfile.c (find_backup_file_name): Treat backup_type == none like simple. * Makefile.in (CONFIG_HDRS): Remove var; no longer needed by djgpp port. (DISTFILES_PC_DJGPP): Rename pc/djgpp/config.sed to pc/djgpp/configure.sed; remove pc/djgpp/config.h in favor of new file that edits it, called pc/djgpp/config.sed. * pc/djgpp/configure.bat: Rename config.sed to configure.sed. * pc/djgpp/configure.sed (CONFIG_HDRS): Remove. (config.h): Add rule to build this from config.hin and pc/djgpp/config.sed. * pc/djgpp/config.sed: Convert from .h file to .sed script that generates .h file. * NEWS: Describe --backup-if-mismatch, --no-backup-if-mismatch. * patch.man: Describe new options --backup-if-mismatch, --no-backup-if-mismatch and their ramifications. Use unreadable backup to represent nonexistent file. 1997-06-12 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.7. (AC_CHECK_FUNCS): Add `raise'. * Makefile.in (inp.o): No longer depends on quotearg.h. * common.h (outfile): New decl (was private var named `output'). (invc): New decl. (GENERIC_OBJECT): Renamed from VOID. (NULL_DEVICE, TTY_DEVICE): New macros. * patch.c (output): Remove; renamed to `outfile' and moved to common.h. (main): `failed' is count, not boolean. Say "Skipping patch." when deciding to skip patch. (get_some_switches): Set invc when setting inname. * inp.c: Do not include <quotearg.h>. (SCCSPREFIX, GET, GET_LOCKED, SCCSDIFF1, SCCSDIFF2, SCCSDIFF3, RCSSUFFIX, CHECKOUT, CHECKOUT_LOCKED, RCSDIFF1, RCSDIFF2): Move to util.c. (get_input_file): Invoke new functions version_controller and version_get to simplify this code. (plan_b): "/dev/tty" -> NULL_DEVICE * pch.h (pch_timestamp): New decl. * pch.c (p_timestamp): New var; takes over from global timestamp array. (pch_timestamp): New function to export p_timestamp. (there_is_another_patch): Use blander wording when you can't intuit the file name. Say "Skipping patch." when deciding to skip patch. (intuit_diff_type): Look for version-controlled but nonexistent files when intuiting file names; set invc accordingly. Ignore Index: line if either old or new line is present, and if POSIXLY_CORRECT is not set. (do_ed_script): Flush stdout before invoking popen, since it may send output to stdout. * util.h (version_controller, version_get): New decls. * util.c: Include <quotearg.h> earlier. (raise): New macro, if ! HAVE_RAISE. (move_file): Create empty unreadable file when backing up a nonexistent file. (DEV_NULL): New constant. (SCCSPREFIX, GET. GET_LOCKED, SCCSDIFF1, SCCSDIFF2, RCSSUFFIX, CHECKOUT, CHECKOUT_LOCKED, RCSDIFF1): Moved here from inp.c. (version_controller, version_get): New functions. (ask): Look only at /dev/tty for answers; and when standard output is not a terminal and ! posixly_correct, don't even look there. Remove unnecessary fflushes of stdout. (ok_to_reverse): Say "Skipping patch." when deciding to skip patch.. (sigs): SIGPIPE might not be defined. (exit_with_signal): Use `raise' instead of `kill'. (systemic): fflush stdout before invoking subsidiary command. * patch.man: Document recent changes. Add "COMPATIBILITY ISSUES" section. * NEWS: New COMPATIBILITY ISSUES for man page. Changed verbosity when fuzz is found. File name intuition is changed, again. Backups are made unreadable when the file did not exist. * pc/djgpp/config.h (HAVE_STRUCT_UTIMBUF): Define. (HAVE_RAISE): New macro. (HAVE_UTIME_H): Define. (TZ_is_unset): Do not define; it's not a serious problem with `patch' to have TZ be unset in DOS. 1997-06-08 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.6. (AC_CHECK_HEADERS): Add utime.h. * acconfig.h, configure.in, pc/djgpp/config.h (HAVE_STRUCT_UTIMBUF): New macro. * pc/djgpp/config.h (HAVE_UTIME_H, TZ_is_unset): New macros. * NEWS, patch.man: Describe new -Z, -T options, new numeric option for -G, retired -G, and more verbose default behavior with fuzz. * pch.c (intuit_diff_type): Record times reported for files in headers. Remove head_says_nonexistent[x], since it's now equivalent to !timestamp[x]. * util.h (fetchname): Change argument head_says_nonexistent to timestamp. * util.c: #include <partime.h> for TM_LOCAL_ZONE. Don't include <time.h> since common.h now includes it. (ok_to_reverse): noreverse and batch cases now output regardless of verbosity. (fetchname): Change argument head_says_nonexistent to pstamp, and store header timestamp into *pstamp. If -T or -Z option is given, match time stamps more precisely. (ask): Remove unnecessary close of ttyfd. When there is no terminal at all, output a newline to make the output look nicer. After reporting EOF, flush stdout; when an input error, report the error type. * inp.c (get_input_file): Ask user whether to get file if patch_get is negative. * Makefile.in (clean): Don't clean */*.o; clean core* and *core. 1997-06-04 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.5. * util.c (ok_to_reverse): Be less chatty if verbosity is SILENT and we don't have to ask the user. If force is nonzero, apply the patch anyway. * pch.c (there_is_another_patch): Before skipping rest of patch, skip to the patch start, so that another_hunk can skip it properly. (intuit_diff_type): Slight wording change for missing headers, to regularize with other diagnostics. Fix off-by-one error when setting p_input_line when scanning the first hunk to check for deleted files. 1997-06-03 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.4. * NEWS: Now matches more generously against nonexistent or empty files. * pch.c (there_is_another_patch): Move warning about not being able to intuit file names here from skip_to. (intuit_diff_type): Fatal error if we find a headless unified or context diff. * util.c (ask): Null-terminate buffer properly even if it grew. (fetchname): No need to test for null first argument. 1997-06-02 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.3. * pch.c (p_says_nonexistent, pch_says_nonexistent): Is now 1 for empty, 2 for nonexistent. (intuit_diff_type): Set p_says_nonexistent according to new meaning. Treat empty files like nonexistent files when reversing. (skip_to): Output better diagnostic when we can't intuit a file name. * patch.c (main): Count bytes, not lines, when testing whether a file is empty, since it may contain only non-newline chars. pch_says_nonexistent now returns 2 for nonexistent files. 1997-06-01 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.2. * pch.c (open_patch_file): Fix bug when computing size of patch read from a pipe. 1997-05-30 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.3.1. * Makefile.in (transform, patch_name): New vars, for proper implementation of AC_ARG_PROGRAM. (install, uninstall): Use them. (install-strip): New rule. * pc/djgpp/config.sed (program_transform_name): Set to empty. 1997-05-30 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION), NEWS: Version 2.3 released. * patch.man: Fix two font typos. * util.c (doprogram): Fix misspelled decl. 1997-05-26 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.2.93. * pch.c (open_patch_file): Fatal error if binary_transput and stdin is a tty. * pc/djgpp/config.sed (chdirsaf.c): Use sed instead of cp, since cp might not be installed. * pc/djgpp/configure.bat: Prepend %srcdir% to pathname of config.sed, for crosscompiles. 1997-05-25 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.2.92. (D_INO_IN_DIRENT): New macro. * pc/djgpp/config.h, acconfig.h (D_INO_IN_DIRENT): New macro. * backupfile.c (REAL_DIR_ENTRY): Depend on D_INO_IN_DIRENT, not _POSIX_VERSION. * addext.c (addext): Adjust slen when adjusting s for DOS 8.3 limit. Do not use xxx.h -> xxxh~ hack. * util.c: (move_file): Avoid makedirs test when possible even if FILESYSTEM_PREFIX_LEN (p) is nonzero. Don't play case-changing tricks to come up with backup file name; it's not portable to case-insensitive file systems. * common.h (ISLOWER): Remove. * inp.c (scan_input): Don't use Plan A if (debug & 16). * patch.c (shortopts): Add -g, -G. (longopts): --help now maps to 132, not 'h', to avoid confusion. (get_some_switches): Likewise. Don't invoke setmode on input if --binary; wait until needed. Don't ever invoke setmode on stdout. * pch.c (open_patch_file): Setmode stdin to binary if binary_transput. * patch.man: Fix documentation of backup file name to match behavior. Add advice for ordering of patches of derived files. Add /dev/tty to list of files used. * README: Adjust instructions for building on DOS. * pc/djgpp/README: Remove tentative wording. * NEWS: The DOS port is now tested. Backup file names are no longer computed by switching case. * pc/chdirsaf.c (ERANGE): Include <errno.h> to define it. (restore_wd): chdir unconditionally. (chdir_safer): Invoke atexit successfully at most once. * pc/djgpp/config.sed: Use chdirsaf.o, not pc/chdirsaf.o. Replace CONFIG_HDRS, don't append. Use $(srcdir) in CONFIG_STATUS. Don't apply $(SHELL) to $(CONFIG_STATUS). Append rules for chdirsaf.o, chdirsaf.c; clean chdirsaf.c at the end. * pc/djgpp/configure.bat: Append CR to each line; DOS needs this. Don't use | as sed s delimiter; DOS can't handle it. 1997-05-21 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Bump to 2.2.91. * pch.c (another_hunk): Fix bug with computing size of prefix and suffix context with ordinary context diffs. Report malformed patch if a unified diff has nothing but context. * inp.c (get_input_file): Use patch_get, not backup_type, to decide whether to get from RCS or SCCS. Use the word `get' in diagnostics. * patch.c (main): Initialize patch_get from PATCH_GET. Omit DEFAULT_VERSION_CONTROL hook; it just leads to nonstandarization. (longopts, option_help, get_some_switches): Add support for -g, -G. (option_help): Add bug report address. * common.h (patch_get): New decl. * patch.man: Add -g and -G options; use `get' instead of `check out'. Add PATCH_GET. Recommend -Naur instead of -raNU2 for diff. * NEWS: Describe -g, -G, PATCH_GET. * version.c (copyright_string): Use only most recent copyright year, as per GNU standards. * Makefile.in (DISTFILES_PC): Remove pc/quotearg.c. * pc/djgpp/config.sed: Remove unnecessary hooks for quotearg and SHELL. 1997-05-18 Paul Eggert <eggert@twinsun.com> * configure.in (VERSION): Increase to 2.2.9. (AC_TYPE_MODE_T): Add. * pch.h (another_hunk): New parameter REV. * pch.c (hunkmax): Now of type LINENUM. (malformed): Add decl. (there_is_another_patch): Skip inname-detection if skip_rest_of_patch. (intuit_diff_type): To determine whether file appears to have been deleted, look at replacement, not pattern. If there is a mismatch between existence of file and whether the patch claims to change whether the file exists, ask whether to reverse the patch. (another_hunk): New parameter REV specifying whether to reverse the hunk. All callers changed. (do_ed_script): Add assertion to ensure input file exists. * util.h (create_file): New function. (copy_file): Now takes mode, not struct stat. (makedirs): No longer exported. (move_file): Now takes mode, not struct stat. * util.c (makedirs): No longer exported. (move_file): Accept mode of destination, not struct stat. All callers changed. Quote file names in diagnostics. Create parent dir of destination if necessary. Don't use ENOTDIR. Don't unlink source; it will be unlinked later. Unlink destination if FROM is zero. (create_file): New function. (copy_file): Accept mode of destination, not struct stat. All callers changed. Use create_file to create file. (ok_to_reverse): Moved here from patch.c. Now accepts format and args; all callers changed. (mkdir): 2nd arg is now mode_t, for better compatibility. (replace_slashes): Ignore slashes at the end of the filename. * common.h (noreverse): New decl. (ok_to_reverse): Remove decl. * patch.c (noreverse): Now extern. (main): New environment var PATCH_VERSION_CONTROL overrides VERSION_CONTROL. Don't assert(hunk) if we're skipping the patch; we may not have any hunks. When removing a file, back it up if backups are desired. Don't chmod output file if input file did not exist. chmod rej file to input file's mode minus executable bits. (locate_hunk): Go back to old way of a single fuzz parameter, but handle it more precisely: context diffs with partial contexts can only match file ends, since the partial context can occur only at the start or end of file. All callers changed. (create_output_file): Use create_file to create files. (ok_to_reverse): Move to util.c. * inp.c (scan_input, get_input_file): Quote file names in diagnostics. (get_input_file): Set inerrno if it's not already set. Don't create file; it's now the caller's responsibility. (plan_b): Use /dev/null if input size is zero, since it might not exist. Use create_file to create temporary file. * NEWS: Add PATCH_VERSION_CONTROL; DOS port is untested. * pc/djgpp/config.h: Add comment for mode_t. * pc/djgpp/README: Note that it's not tested. * patch.man: PATCH_VERSION_CONTROL overrides VERSION_CONTROL. 1997-05-15 Paul Eggert <eggert@twinsun.com> * configure.in: Add AC_PREREQ(2.12). (VERSION): Bump to 2.2.8. (ed_PROGRAM): Rename from ED_PROGRAM. * pch.c (prefix_components): Support DOS file names better. Fix typo that caused fn to almost always yield 0. * util.c (<time.h>, <maketime.h>): Include. (move_file, copy_file): Add support for DOS filenames. Preserve mode of input files when creating temp files. Add binary file support. (doprogram, rmdir): New functions. (mkdir): Use doprogram. (replace_slashes): Add support for DOS filenames. (removedirs): New function. (init_time)): New function. (initial_time): New var. (fetchname): Add support for deleted files, DOS filenames. * basename.c (FILESYSTEM_PREFIX_LEN, ISSLASH): New macros, for DOS port. (base_name): Use them. * addext.c (HAVE_DOS_FILE_NAMES): New macro. <limits.h>: Include if HAVE_LIMITS_H. (addext): Handle hosts with DOS file name limits. * common.h (LONG_MIN): New macro. (FILESYSTEM_PREFIX_LEN, ISSLASH): New macros, for DOS port. (ok_to_create_file): Remove. (reverse): Now int. (ok_to_reverse): New function decl. (O_WRONLY, _O_BINARY, O_BINARY, O_CREAT, O_TRUNC): New macros. (binary_transput): New var decl. * Makefile.in (ed_PROGRAM): Renamed from ED_PROGRAM. (CONFIG_HDRS, CONFIG_STATUS): New vars. (SRCS): Add maketime.c, partime.c. (OBJS): Likewise. (HDRS): Add maketime.h, partime.h. (DISTFILES_PC, DISTFILES_PC_DJGPP): New vars. (Makefile, config.status): Use CONFIG_STATUS, not config.status.