1998-03-04  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* entries.c, cvs.h (Entries_Open): New argument update_dir; use it
	in error message.
	* add.c, checkout.c, client.c, find_names.c, import.c, recurse.c,
	update.c: Pass it (as NULL except in call_in_directory).
	* entries.c (Subdirs_Known): Just return if there is no CVSADM
	directory (as in subdir_record).
	* sanity.sh (conflicts3): New tests conflicts3-20a and
	conflicts3-23 test for these fixes.

	* commit.c (commit): Only set up hardlist if preserve_perms.

	* commit.c, import.c, no_diff.c, parseinfo.c, rcs.c, rcscmds.c,
	update.c: Omit the preserve_perms code if
	PRESERVE_PERMISSIONS_SUPPORT is not defined.  Much of that code
	won't even compile on non-unix systems.

	* hardlink.c, hardlink.h: Use the 'standard' copyright (as found
	in server.c).
	* commit.c, rcs.c: Minor whitespace changes to Tim's submission.
	* commit.c (check_fileproc), update.c (get_linkinfo_proc): Remove
	unused variable delta.
	* hardlink.c (set_hardlink_field_proc), update.c
	(get_linkinfo_proc): Return a value rather than falling off the
	end of the function.

1998-03-02  Tim Pierce  <twp@skepsis.com>

	* update.c (special_file_mismatch): Compare the hard links of the
	two revisions.

	* rcs.c (RCS_checkout): 

	* hardlink.c, hardlink.h: New files.
	(hardlink_info): New struct.
	(hardlist, working_dir): New variables.
	(list_files_proc, cache_hardlinks_proc, set_hardlink_field_proc,
	lookup_file_by_inode, update_hardlink_info, list_files_linked_to):
	New functions.

	* Makefile.in (SOURCES): Add hardlink.c.
	(OBJECTS): Add hardlink.o.
	(HEADERS): Add hardlink.h.
	* commit.c: Include hardlink.h.
	(commit): Save the working directory before recursing.  Walk the
	hardlink list, calling set_hardlink_field_proc on each node.
	(check_fileproc): Add each file's link information to hardlist.
	* rcs.c: Include hardlink.h.
	(RCS_checkin): Save list of hardlinks in delta node.
	(RCS_checkout): Look up the file's `hardlinks' delta field, and
	see if any of the files linked to it have been checked out
	already.  Link to one of those files if so.
	* update.c: Include hardlink.h.
	(get_linkinfo_proc): New function.
	(do_update): Extra recursion to collect hardlink info.
	(special_file_mismatch): Reparse the RCS file if necessary.

	fsortcmp is now used by several files, so let's make it extern.
	* hash.c, hash.h (fsortcmp): New function.
	* find_names.c (fsortcmp): Removed.
	* lock.c (fsortcmp): Removed.

1998-03-03  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (conflicts3): New tests conflicts3-14a,
	conflicts3-14b, and conflicts3-21, conflicts3-22 test that we can
	skip over a working directory with a CVSADM directory missing.

1998-02-26  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (conflicts3): Tests conflicts3-16 and conflicts3-20
	test that we include update_dir in messages.  Rename test
	conflicts3-14 to fix typo.

Sun Feb 22 23:14:25 1998  Steve Cameron  <steve.cameron@compaq.com>
	and Ian Lance Taylor  <ian@cygnus.com>

	* update.c (tag_update_dir): New static variable.
	(update_dirent_proc): If no tag or date were specified when
	creating a subdirectory, use the tag and/or date of the parent
	directory.
	(update_dirleave_proc): If we set the tag and/or date in
	update_dirent_proc, reset them when we leave the directory.
	* sanity.sh (branches2): New set of tests for above patch, and
	related behaviour.

Sun Feb 22 13:31:51 1998  Ian Lance Taylor  <ian@cygnus.com>

	* commit.c (lock_RCS): Don't call RCS_rewrite.

	* update.c (patch_file): If the revision is dead, let
	checkout_file handle it.
	* sanity.sh (death2): Add test for above patch: add
	death2-10a, death2-10b, death2-13a, and adjust
	death2-{2,4,5,11,14,diff-11,diff-12,19}.

	* cvs.h (RCS_FLAGS_KEEPFILE): Define.
	* rcs.c (RCS_checkin): If RCS_FLAGS_KEEPFILE is set in the flags
	parameter, don't unlink the working file.
	* checkin.c (Checkin): Don't copy the file.  Instead pass
 	RCS_FLAGS_KEEPFILE to RCS_checkin, and only check the file out
	again if it has changed.

1998-02-21  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (rcs_internal_unlockfile, RCS_rewrite): Don't assume errno
	means anything just because ferror is set.

Sat Feb 21 20:02:24 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (clean): Change "/bin/rm" to "rm".

	* buffer.c (buf_append_buffer): Correct typo in comment.
	* rcs.c (RCS_putadmin): Likewise.

Fri Feb 20 17:53:06 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (rcs_internal_unlockfile): Pass errno when calling error
 	because ferror is true.

1998-02-20  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (abspath): Don't assume that we can't write to /; this
	is the kind of thing that is sure to break sooner or later
	(especially on Windows).

	* sanity.sh: Add summary of which modules tests are which (at
	"modules").  Move cvsadm, abspath, and toplevel next to modules.
	Add comments to clarify the structure (such as it is).

Fri Feb 20 12:47:14 1998  Larry Jones  <larry.jones@sdrc.com>

	* admin.c (admin_fileproc): Better fix for -b.

	* rcs.c (RCS_whatbranch): Back out previous change.
	(RCS_getversion): Ditto.
	(RCS_setbranch): Treat an empty revision string like a null pointer.

1998-02-18  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (RCS_whatbranch): Fix indentation.

	* patch.c (patch_fileproc): Check for errors from fclose; check
	for errors from fopen properly.

Wed Feb 18 16:03:37 1998  Larry Jones  <larry.jones@sdrc.com>

	* admin.c (admin_fileproc): Convert -b argument from symbolic name
	to revision number before storing in the RCS file.
	* rcs.c (RCS_whatbranch): Allow numeric as well as symbolic revision.
	(RCS_getversion): Take advantage of above.
	* sanity.sh (admin): Add/revise/renumber admin-10c, admin-11a,
	admin-12, and admin-12a to check above.

	* commmit.c (lock_RCS): Minor clean-up.

	* sanity.sh (abspath-6a): Don't depend on the sepcific contents of
	CVSROOT, it depends on which other tests have been run.

Wed Feb 18 01:56:04 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (putsymbol_proc): Use putc and fputs rather than fprintf.
	(RCS_putadmin): Don't call RCS_symbols if the symbols have not yet
	been converted to a list.

	* rcs.c (rcsbuf_cache, rcsbuf_cache_open, rcsbuf_cache_close): New
	static functions to avoid closing and reopening the RCS file.
	(cached_rcs, cached_rcsbuf): New static variables.
 	(RCS_parse): Call rcsbuf_cache_close.  Don't call fclose.
	(RCS_parsercsfile): Likewise.
	(RCS_parsercsfile_i): Call rcsbuf_cache rather than
	rcsbuf_close.  Call fclose on error.  Remove comment about
	inefficiency of opening file twice.
	(RCS_reparsercsfile): Call rcsbuf_cache_open rather than fopen and
	rcsbuf_open.  Call rcsbuf_cache rather than rcsbuf_close and
	fclose.
	(RCS_fully_parse, RCS_checkout, RCS_deltas): Likewise.
	(RCS_rewrite): Likewise.
	(RCS_checkin): Call rcsbuf_cache_close.

	* rcs.c (RCS_copydeltas): Fix code which checks for an extra
	newline in buffered data.

	* rcs.c (rcsbuf_getkey): Save an indirection by using start rather
	than *valp when trimming trailing whitespace from value.

	* rcs.c (rcsbuf_get_buffered): New static function.
	(RCS_copydeltas): After we have done all the required special
 	actions, and inserted any new revision, just copy the file bytes
 	directly, rather than interpreting all the data.
	(count_delta_actions): New static function.
	* sanity.sh (rcs): Add rcs-6a and rcs-6b to commit a new branch
	revision, to force CVS to interpret all the data, rather than just
	copying it.  Adjust rcs-5 to add a branch tag.  Adjust rcs-8a and
	rcs-14 for the changes created by rcs-6b.

Tue Feb 17 18:34:01 1998  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh (cvsadm, diffmerge2): Remove directories at the end of
	the test.

	* import.c (expand_at_signs): Rewrite to use memchr and fwrite
	rather than putc.

	Rewrite RCS file reading routines for speed:
	* rcs.c (struct rcsbuffer): Define.
	(rcsbuf_open, rcsbuf_close, rcsbuf_getkey, rcsbuf_getrevnum,
	rcsbuf_fill, rcsbuf_valcopy, rcsbuf_valpolish,
	rcsbuf_valpolish_internal, rcsbuf_ftell): New static functions.
	(getrcskey, getrcsrev, getrevnum): Remove.
	(many functions): Change to use new rcsbuf functions instead of
	old getrcskey/getrcsrev/getrevnum functions.
	(RCS_reparsercsfile): Add rcsbufp parameter.  Change all callers.
	(RCS_deltas): Add rcsbuf parameter.  Change all callers.
	(getdelta): Change fp parameter to rcsbuf parameter.  Change all
	callers.
	(RCS_getdeltatext): Add rcsbuf parameter.  Change all callers.
	(RCS_copydeltas): Add rcsbufin parameter.  Change all callers.
	* rcs.h (RCS_reparsercsfile): Update declaration.
	* admin.c (admin_fileproc): Update calls to RCS_reparsercsfile for
	new parameters.

1998-02-17  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (toplevel): Also clean up second-dir (not a new
	bug, but triggered by running tests as "toplevel abspath").

	* create_adm.c (Create_Admin): Just print update_dir to tell the
	user where we are; not the whole xgetwd.  Cleaner than
	Noel's change (which also had problems in errno handling).
	* sanity.sh (toplevel-12): Update accordingly.

Tue Feb 17 02:32:21 1998  Noel Cragg  <noel@swish.red-bean.com>

	[These mods make "checkout" work with "-d /absolute/pathname"
	once again.]
	
	* checkout.c (checkout_proc): the -d flag on the command line
 	should override the -d flag in the modules file if the latter is
 	an absolute path.  The loop that assembles the list of directories
 	to build has been reorganized slightly to prepare for rewriting
 	with last_component rather than assuming '/' as a path separator.
  	Also added to that loop was some code to handle absolute
 	pathnames.
	(build_dirs_and_chdir): add a new argument that tells this routine
 	whether or not to check before it creates and populates
 	directories or not.

	* filesubr.c (last_component): return the top-level directory when
 	asked about the top-level directory.

	* sanity.sh (toplevel-12): change test to reflect the new style of
 	this error message.

	* create_adm.c (Create_Admin): include the directory in the error
 	message.
	
1998-02-16  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* diff.c (diff_fileproc), import.c (import, add_rcs_file), rcs.c
	(RCS_cmp_file): Don't ignore errors from CVS_UNLINK and fclose.

	* patch.c (patch_fileproc): Check for errors from fclose; if we
	get -1 from getline check for end of file vs. error.

	* rcs.c (RCS_checkout): Comment return value (0/1, not -1).
	* commit.c, diff.c, mkmodules.c, patch.c, rcs.c, update.c: Update
	to match this convention.  Don't suppress errors based on
	quiet or really_quiet variables.

	Fix a longstanding bug which also makes stamps-8kw in make
	remotecheck work again (it stopped working with Ian's 8 Feb 98
	checkin):
	* client.c, client.h (change_mode): If new argument respect_umask
	is set, then honor the umask.
	* client.c, server.c: Update callers.

	Cleanups to Tim's checkin:
	* rcs.c (RCS_checkout): Use existence_error not ENOENT.
	* commit.c (checkaddfile): Remove comment about whether we want to
	check for errors from fclose; there is no reason not to.
	* rcs.c (RCS_checkout), update.c (special_file_mismatch): sscanf
	on %ld requires an unsigned long, not a dev_t.
	* update.c (special_file_mismatch): Remove unused variable
	check_devnums.
	* mkmodules.c (config_contents): Between two settings, use a blank
	line not a "#" line.

1998-02-15  Tim Pierce  <twp@skepsis.com>

	[This is the code as submitted.  I'll be checking in my cleanups
	shortly.  This work sponsored by Abbott Labs.  -kingdon]

	Support for device special files, symbolic links, user and group
	ownerships, and file permissions.
	
	* parseinfo.c: (parse_config): Handle new config variable
	`PreservePermissions'.
	* mkmodules.c (config_contents): Add new PreservePermissions var.

	* rcs.c, rcs.h (preserve_perms): New variable.
	(RCS_checkout, RCS_checkin): Support for newphrases `owner',
	`group', `permissions', `special', `symlink'.
	(RCS_checkout): If `workfile' and `sout' are symlinks, remove them
	before attempting to open them for writing.
	* import.c (add_rcs_file): Support for newphrases.  Do not attempt
	to read data from special files or symlinks.  Error message
	`cannot fstat' is now `cannot lstat'.

	New metrics for deciding when two files are different:

	* update.c, cvs.h (special_file_mismatch): New function.
	(merge_file, join_file): Call it.
	* no_diff.c (No_Difference): Call it.

	* filesubr.c (xcmp): Consider files to be different if they are of
	different types; if they are symlinks which link to different
	pathnames; or if they are devices with different device numbers.
	Error message is now `cannot lstat'.
	* rcs.c (RCS_cmp_file): Use `xcmp' to compare files, simplifying
	the special handling for nonregular files.

	* rcscmds.c (diff_exec, diff_execv): If asked to obtain diffs for
	special files, report no differences.

	Miscellaneous changes to make special file support possible:

	* commit.c (fix_rcs_modes): Don't attempt to `fix' permissions on
	a symlink.

	* import.c (add_rcs_file): Don't try to close fpuser if it was
	never opened (e.g. when operating on a symlink).

	* filesubr.c, cvs.h (isdevice, xreadlink): New functions.
	* filesubr.c (copy_file): Handle special files and symlinks.
	(xchmod): Do nothing if `preserve_perms' is set.

	* commit.c (checkaddfile): Replace `copy_file (DEVNULL, ...)' with
	fopen/fclose calls.  Copy_file no longer attempts to read data
	from device files.

	* filesubr.c (islink): Use CVS_LSTAT, not lstat.
	* vers_ts.c (time_stamp, time_stamp_server): Use CVS_LSTAT, not stat,
	to get symlinks right.
	* subr.c (get_file): Same.  Don't attempt to read from special
	files or symlinks.

	* classify.c (Classify_File): Doc fix.

Fri Feb 13 17:07:32 1998  Eric Mumpower  <nocturne@cygnus.com>
	and Ian Lance Taylor  <ian@cygnus.com>

	Fix some file system ordering problems found on Irix 6.4:
	* sanity.sh (basic2): Use dotest_sort for test 56.
	(importb): Use dotest_sort for tests importb-1 and importb-2.
	(head): Use dotest_sort for test head-1.

Thu Feb 12 15:15:33 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* import.c (add_rcs_file): If add_logfp is NULL, don't call fperror.

11 Feb 1998  Andy Piper

	* server.c (cvs_output_binary): Use OPEN_BINARY not _O_BINARY.

Mon Feb  9 18:34:39 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	Tweaks to Ian's checkin:
	* update.c (merge_file): Remove comment about sending file to
	client before the message.  It doesn't apply to this code any more
	(it does apply to checkout_file, but I'm not sure it is important
	to have such a comment anyway).
	* buffer.c (buf_default_memory_error, buf_length): Reindent.
	* server.h: Declare struct buffer before use.

Mon Feb  9 21:05:28 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_fully_parse): Call getrevnum rather than getrcsrev.
	Don't bother with ungetc.

	* rcs.c (getrcsrev): Rewrite to simply call getrevnum.

Sun Feb  8 15:49:39 1998  Ian Lance Taylor  <ian@cygnus.com>

	Don't have the server check out a revision into a file and then
	immediately read the file; just read into a buffer instead.
	* update.c: Include buffer.h.
	(update_fileproc): Let checkout_file call server_updated.
	(checkout_file): Add merging and update_server parameters.  Change
	all callers.  If server_active, don't mess with backup files.  If
	server_active, copy the revision into a buffer rather than a file
	when possible.  If update_server, call server_updated.  Fix
	handling of error status.
	(checkout_to_buffer): New static function used by checkout_file.
	(merge_file): Let checkout_file call server_updated.
	(join_file): Likewise.
	* server.c (server_updated): Change file_info parameter to mode
	parameter.  Add filebuf parameter.  Change all callers.  If
	filebuf is not NULL, don't read the file.
	* server.h (server_updated): Update declaration.
	* buffer.c (buf_free): New function.
	(buf_append_buffer): New function.
	(buf_length): New function.
	* buffer.h (buf_free, buf_append_buffer, buf_length): Declare.

	* buffer.c: (buf_initialize): If the memory parameter is NULL, use
	buf_default_memory_error.
	(buf_default_memory_error): New static function.
	* buffer.h (BUFMEMERRPROC): Define typedef.
	* client.c (buf_memory_error): Remove.
	(start_server): Pass NULL rather than buf_memory_error as buffer
	memory error function.

Sat Feb  7 16:27:30 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_parsercsfile_i): Read the expand keyword from the RCS
	file.  We do this because Version_TS calls RCS_getexpand in many
	common cases, and we don't want to reopen the file just for that.
	(RCS_reparsercsfile): Skip the expand keyword.
	(RCS_getexpand): Don't call RCS_reparsercsfile.

	* rcs.c (STREQ): New macro.  In all string equality tests in the
	file, replace strcmp with STREQ.

Fri Feb  6 16:14:49 1998  Ian Lance Taylor  <ian@cygnus.com>

	* update.c (checkout_file): If we've already removed the backup
	file once, don't try to remove it again.

	* filesubr.c (unlink_file_dir): Call stat rather than isdir, and
	don't call unlink if the file does not exist.

	* myndbm.c (mydbm_load_file): Rename line_len to line_size.  Call
	getstr rather than getline, to avoid any confusion between \n and
	\012.  Use the line length returned by getstr rather than calling
	strlen.  Remove local variable len.

Fri Feb  6 13:23:46 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (RCS_parsercsfile_i): Don't suppress errors on
	really_quiet.
	(RCS_parsercsfile_i, RCS_reparsercsfile, RCS_fully_parse,
	RCS_deltas, getdelta, getrcskey, RCS_getdeltatext):
	Check for errors.  Include errno in error messages.  Include
	filename in error messages.  Pass new argument to getrcskey.
	(getrcskey): New argument NAME, so we can report errors ourself.

Fri Feb  6 12:10:18 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rcs.c (RCS_reparsercsfile): Don't use ftell/fseek; just keep
	track of whether we've already read a key/value pair.  Use sizeof
	rather than strlen for a constant string.  Pass the current key
	and value to getdelta, and get them back as well.
	(getdelta): Add keyp and valp parameters.  Don't use ftell/fseek;
	just return the key/value pair to the caller.  Don't allocate
	vnode before we know we need it.  Check one getrcskey return
	value.  Use sizeof rather than strlen for a constant string.

	* rcs.c (getrcskey): Correct comment describing return value.

Thu Feb  5 22:51:13 1998  Ian Lance Taylor  <ian@cygnus.com>

	* subr.c (getcaller): Cache the result, so that we don't keep
	searching the password file.

Wed Feb  4 23:31:08 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* rcs.c (max_rev): Don't prototype.  Interesting that noone
	complained about this until now.

4 Feb 1998  Jim Kingdon

	* rcs.c (RCS_checkin): When adding a new file, read it
	with "rb" if binary.

Fri Jan 30 11:32:41 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Also test "first-dir" as the regexp in loginfo in
	addition to ALL.

	* main.c (main): Update year in copyright notice to 1998.

Thu Jan 29 00:01:05 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Change version number to 1.9.25.

	* Version 1.9.24.

	* sanity.sh (multibranch2): File file2 and tests multibranch2-13
	through multibranch2-15 test a slightly different case than the
	rest of multibranch2.

	* mkmodules.c (cvswrappers_contents): Rewrite.  The text didn't
	describe -k and had various other problems.

28 Jan 1998  Karl Fogel and Jim Kingdon

	New feature to let server tell client about wrappers.
	* client.h (struct response): Add comment about args being
	'\0' terminated when passed to handle_* functions.
	* client.c (start_server): send "wrapper-sendme-rcsOptions" to
	server iff supported.
	(responses): new response "Wrapper-rcsOption"; allows the server
	to send certain lines from its cvswrappers file.
	(handle_wrapper_rcs_option): new func, handles "Wrapper-rcsOption"
	response from server.
	* server.c (serve_wrapper_sendme_rcs_options): new func, sends
	server side CVSROOT/cvswrappers rcs option lines to client.
	(requests): new request "wrapper-sendme-rcsOptions"; if received,
	we know we can send "Wrapper-rcsOption..." to the client.
	* wrapper.c (wrap_unparse_rcs_options): new func; repeated calls
	step down the wrapper list returning rcs option entries, but
	repackaged as cvswrappers lines.
	(wrap_setup): new guard variable `wrap_setup_already_done'; if
	this function has run already, just return having done nothing.
	Add comment concerning environment variable.
	* cvs.h: declare wrap_unparse_rcs_options().

Tue Jan 27 18:27:19 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rtag.c (rtag_dirproc): Call ignore_directory, and skip the
	directory if it returns true.
	* sanity.sh (modules4): New set of tests to test some aspects of
	excluding directories in the modules file, including the above
	patch.

Thu Jan 22 10:05:55 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (serve_kopt): Check for length of arg.  Based on
	inspection of the code, plugs a buffer overrun security hole which
	was introduced Monday.

	* server.c (serve_is_modified): Don't call xmalloc; we aren't
	allowed to call error() here.  Remove duplicate (and potentially
	confusing) variable 'p'.

	* log.c (log_fileproc): Look for first character of version
	'0' AND second character '\0', rather than OR.  I didn't try to
	come up with a test case but this looks like a simple thinko
	(albeit one which would show up in obscure cases if at all).

Tue Jan 20 19:37:53 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* client.c (send_dirent_proc): Don't send nonexistent directories
	unless noexec.
	* sanity.sh (modules2): New tests modules2-13 through modules2-18
	test for this fix.

Mon Jan 19 11:17:51 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (serve_kopt): New function.
	(requests): Add "Kopt" request.
	(kopt): New variable.
	(serve_is_modified): Write kopts from there into entries.
	(serve_modified): Call serve_is_modified so we do the same.
	Declare serve_modified and serve_is_modified.
	* vers_ts.c (Version_TS): Set ->options even for a dummy ("D"
	timestamp) entry.
	* import.c (process_import_file): Check for -k options.
	* client.c (client_process_import_file): Send Kopt request.
	(send_fileproc): Likewise, for "cvs add".
	* sanity.sh: Enable test binwrap3-sub2-add1 for remote.
	Add -I .cvswrappers to binwrap3-2a; adjust binwrap3-2d
	accordingly.  Tests for this fix.

Mon Jan 19 08:48:59 1998  Larry Jones  <larry.jones@sdrc.com>

	* sanity.sh (errmsg1): Append test 168 output to log file.

Sat Jan 17 08:01:51 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (ann-10, ann-11): Don't make assumptions about the
	number of characters in the username.

Fri Jan 16 15:34:02 1998  Larry Jones  <larry.jones@sdrc.com>

	* diff.c (diff_fileproc): Free label1 and label2 when finished.

	* edit.c (editor_set): Don't free edlist until after we're
	done using it.

	* rcscmds.c (RCS_merge): Free xrev1 and xrev2 when finished.

	* subr.c (make_message_rcslegal): Don't access uninitialized or
	unallocated memory; only strip trailing blank lines.
	* sanity.sh (log-3): Enhance to test this fix.

Fri Jan 16 12:41:03 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Add keywordlog to list of tests run by default.

	* rcs.c (RCS_deltas): Don't call cvs_output if length is zero;
	passing zero length to cvs_output does not mean output zero
	bytes.  The 27 Dec 1997 change to no longer '\0'-terminate the
	->text field turned this from a time bomb to a user-visible bug.
	* sanity.sh (ann): New tests, test for this fix and other annotate
	behaviors.

Thu Jan 15 23:52:00 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* root.c (root_allow_ok): If inetd.conf didn't specify an
	--allow-root options at all, we know we are in trouble.  Give a
	specific error message.

Thu Jan 15 21:24:59 1998  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh (dotest_sort): New variant of dotest which sorts the
	output, for use when the output depends upon details of the file
	system, typically when doing an import.
	(rdiff): Use dotest_sort for rdiff-1.
	(ignore): Use dotest_sort for 188a, 188b, 189d, 190, and 191.

	* sanity.sh: (TESTSHELL): New variable.
	(editor, info, reserved): Use TESTSHELL in temporary script.

	* sanity.sh (ignore): Do all tests in subdirectory, to avoid
	conflict between cvsroot and CVSROOT on Windows.
	(binwrap3, mwrap, info, config): Likewise.

	* sanity.sh (binfiles2): Correct test name binfile2-7-brmod to
	binfiles2-7-brmod.

	* release.c (release_delete): If __CYGWIN32__ is defined, don't
 	worry about mismatched inodes.  This is a hack, but then I think
 	the test is rather peculiar anyhow.

Thu Jan 15 16:07:36 1998  Larry Jones  <larry.jones@sdrc.com>

	* sanity.sh (reserved-9): Use ${PROG} instead of "cvs".

Wed Jan 14 15:43:13 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* Split ChangeLog into ChangeLog-97 and ChangeLog.
	* Makefile.in (DISTFILES): Add ChangeLog-97.

13 Jan 1998  Jim Kingdon

	* client.c: Declare handle_mt.

Tue Jan 13 22:21:30 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh: Add comment about how pwd and /bin/pwd often differ
	in behavior (but are not guaranteed to).

Tue Jan 13 13:49:53 1998  Ian Lance Taylor  <ian@cygnus.com>

	* sanity.sh: When setting TMPPWD use just pwd, not /bin/pwd.

	* update.c (checkout_file): Don't pass set_time as true to
	Version_TS if the file is dead.
	* sanity.sh (modules): Add tests modules-155c6 through
 	modules-155c8 to test for above patch (without the above patch,
 	modules-155c8 will fail when remote).

Tue Jan 13 10:37:02 1998  Larry Jones  <larry.jones@sdrc.com>

	* client.c (send_modified): Change bufsize and newsize from int
	to size_t to avoid type clashes in call to read_and_gzip.

Tue Jan 13 10:33:02 1998  Larry Jones  <larry.jones@sdrc.com>

	* zlib.c (read_and_gzip): Set finish to 0; it was uninitialized.

Tue Jan 13 10:26:43 1998  Larry Jones  <larry.jones@sdrc.com>

	* add.c, rcs.c: Plug memory leaks.

Mon Jan 12 10:45:27 1998  Larry Jones  <larry.jones@sdrc.com>

	* server.c (mkdir_p): Don't try to create nameless directories
	(i.e., given "/foo//bar", don't try to create "/foo/",
	just "/foo" and "/foo//bar") since it isn't necessary and
	it fails on some systems in unexpected ways.

1998-01-11  enami tsugutomo  <enami@but-b.or.jp>

	* rcs.c (linevector_copy): Delete lines before overwriting them.

Sat Jan 10 11:05:40 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* cvsrc.c, entries.c, login.c, logmsg.c, myndbm.c, patch.c,
	release.c, server.c: Check for errors from getline, CVS_FOPEN,
	fprintf, CVS_UNLINK and fclose.  Note that the new errors are
	nonfatal.  This is because of conservatism more than because
	it is always the best thing.
	* login.c (get_cvs_password): Close the file when done with it.
	* client.c (notified_a_file): If -1 return from getline, check
	feof rather than assuming errno is set.

Fri Jan  9 14:38:54 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* server.c (expand_proc): Also output server_dir in
	"Module-expansion", not just in output_dir ("Created", &c).
	* sanity.sh (modules2): New tests modules2-9 through modules2-12
	test for this.

Thu Jan  8 12:56:55 1998  Yasutoshi Hiroe  <hiroe@rgk.ricoh.co.jp>

	* import.c (import): Don't strcat on uninitialized memory.  Fixes
	possible SIGSEGV with zero-length message.

Tue Jan  6 22:56:29 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (crerepos): Fix mistaken variable name which caused us
	not to clean up at the end of the test.

Mon Dec 22 01:40:57 1997  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* add.c (add): Also look for .cvswrappers files.
	* sanity.sh (binwrap3): New tests binwrap3-2*, binwrap3-sub2-add*
	test for this.

Tue Jan  6 11:50:38 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* sanity.sh (crerepos): New tests crerepos-8 through crerepos-18
	test behaviors when mixing repositories.

Sun Jan  4 17:40:22 1998  Jim Kingdon  <kingdon@harvey.cyclic.com>

	* version.c: Change version number to 1.9.23.

	* Version 1.9.22.


For older changes see ChangeLog-97.
