diff options
author | cvs2svn <cvs2svn@FreeBSD.org> | 1998-03-24 11:00:04 +0000 |
---|---|---|
committer | cvs2svn <cvs2svn@FreeBSD.org> | 1998-03-24 11:00:04 +0000 |
commit | 49bb4432503ea0590b0639b2e328e177b42e0e25 (patch) | |
tree | 164e74ba33bdd6d1dea9f5d32d261eda6f50e99b | |
parent | c07eac88c8860b0a1f42c1f95992c53a0554ff83 (diff) |
Notes
73 files changed, 11 insertions, 17707 deletions
diff --git a/contrib/cvs/contrib/ccvs-rsh.pl b/contrib/cvs/contrib/ccvs-rsh.pl deleted file mode 100644 index 8cfc6743ba3b..000000000000 --- a/contrib/cvs/contrib/ccvs-rsh.pl +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/perl - -# The version of the remote shell program on some Linuxes, at least, -# misuses GNU getopt in such a way that it plucks arguments to rsh -# that look like command-line switches from anywhere in rsh's -# arguments. This is the Wrong Thing to do, and causes older versions -# of CCVS to break. - -# In addition, if we live behind a firewall and have to construct a -# "pipeline" of rshes through different machines in order to get to -# the outside world, each rshd along the way undoes the hard work CCVS -# does to put the command to be executed at the far end into a single -# argument. Sigh. - -# This script is a very minimal wrapper to rsh which makes sure that -# the commands to be executed remotely are packed into a single -# argument before we call exec(). It works on the idea of a "proxy -# chain", which is a set of machines you go through to get to the CCVS -# server machine. - -# Each host you go through before you reach the CCVS server machine -# should have a copy of this script somewhere (preferably accessible -# directly from your PATH envariable). In addition, each host you go -# through before you reach the firewall should have the CVS_PROXY_HOST -# envariable set to the next machine in the chain, and CVS_PROXY_USER -# set if necessary. - -# This really isn't as complex as it sounds. Honest. - -# Bryan O'Sullivan <bos@serpentine.com> April 1995 - -$usage = "usage: ccvs-rsh hostname [-l username] command [...]\n"; - -if ($#ARGV < 1) { - print STDERR $usage; - exit 1; -} - -# Try to pick a sane version of the remote shell command to run. This -# only understands BSD and Linux machines; if your remote shell is -# called "remsh" under some System V (e.g. HP-SUX), you should edit -# the line manually to suit yourself. - -$rsh = (-x "/usr/ucb/rsh") ? "/usr/ucb/rsh" : "/usr/bin/rsh"; - -# If you are not rshing directly to the CCVS server machine, make the -# following variable point at ccvs-rsh on the next machine in the -# proxy chain. If it's accessible through the PATH envariable, you -# can just set this to "ccvs-rsh". - -$ccvs_rsh = "ccvs-rsh"; - -# There shouldn't be any user-serviceable parts beyond this point. - -$host = $ARGV[0]; - -if ($ARGV[1] eq "-l") { - if ($#ARGV < 3) { - print STDERR $usage; - exit 1; - } - $user = $ARGV[2]; - $cbase = 3; -} else { - $cbase = 1; -} - -# You might think you shoul be able to do something like -# $command = join(' ', $ARGV[$cbase..$#ARGV]); -# to achieve the effect of the following block of code, but it doesn't -# work under Perl 4 on Linux, at least. Sigh. - -$command = $ARGV[$cbase]; -for ($cbase++; $cbase <= $#ARGV; $cbase++) { - $command .= " " . $ARGV[$cbase]; -} - -if (defined $ENV{"CVS_PROXY_HOST"}) { - $command = (defined $user) - ? "$ccvs_rsh $host -l $user $command" - : "$ccvs_rsh $host $command"; - - if (defined $ENV{"CVS_PROXY_USER"}) { - exec ($rsh, $ENV{"CVS_PROXY_HOST"}, "-l", $ENV{"CVS_PROXY_USER"}, - $command); - } else { - exec ($rsh, $ENV{"CVS_PROXY_HOST"}, $command); - } -} elsif (defined $user) { - exec ($rsh, $host, "-l", $user, $command); -} else { - if (defined $ENV{"CVS_PROXY_USER"}) { - exec ($rsh, $host, "-l", $ENV{"CVS_PROXY_USER"}, $command); - } else { - exec ($rsh, $host, $command); - } -} diff --git a/contrib/cvs/contrib/pvcs_to_rcs b/contrib/cvs/contrib/pvcs_to_rcs deleted file mode 100644 index 7d526d81ad21..000000000000 --- a/contrib/cvs/contrib/pvcs_to_rcs +++ /dev/null @@ -1,439 +0,0 @@ -#! /opt/bin/perl5 -# -# Beware of the fact that this script was not written to handle -# branches in the PVCS archives, but it might work nontheless. I have -# a specific addition in this latest version that would not be -# globally useful: automatically making Framemaker files binary with -# -kb (regardless of the file extension). -# --------------------------------- -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -########################################################################### -# FUNCTION: -# To recursively walk through a PVCS archive directory tree (archives -# located in VCS/ or vcs/ subdirectories) and convert them to RCS archives. -# The RCS archive name is the PVCS workfile name with ",v" appended. -# -# SYNTAX: -# The calling syntax is: -# pvcs_to_rcs [-l] -# -# where -l indicates the operation is to be performed only in the current -# directory (no recursion) -# -# EXAMPLE: -# pvcs_to_rcs -# -# Would walk through every VCS or vcs subdir starting at the current directory, -# and produce corresponding RCS archives one level above the VCS or vcs subdir. -# -# NOTES: -# * This script does not perform any error checking or logging of any kind -# (i.e. USE AT YOUR OWN RISK) -# * This script was developed using perl-5.003 on a Sun Solaris 2.5 machine -# and executed from a csh -# * PVCS archives in VCS/ or vcs/ subdirectories are left intact -# * RCS archives are processed in the VCS/ or vcs/ subdirectories and -# are moved (forcibly) up one level upon completion of the conversion -# * This script has *not* been tested with PVCS archives with branches, -# although the only thing I believe that might need to be changed -# is the ORDER of revision processing (e.g. you can't checkin 1.2.4.1 if -# you haven't yet checked in 1.2). -# * All revisions are saved with correct "metadata" (i.e. check-in date, -# author, and log message). Any blank log message is replaced with -# "no comment". This is because RCS does not allow non-interactive -# checkin of a new revision without a comment string. -# * Revision numbers are incremented by 1 during the conversion (since -# RCS does not allow revision 1.0). -# * Version labels are assigned to the appropriate (incremented) revision -# numbers. PVCS allows spaces and periods in version labels while RCS -# does not. A global search and replace converts " " and "." to "_" -# There may be other cases that ought to be added. -# * Any workfile within the VCS/ or vcs/ will be deleted (or overwritten) -# since it is used in the checkout of each revision -# * Locks on PVCS archives should be removed (or the workfiles should be -# checked-in) prior to conversion, although the script will blaze through -# the archive nonetheless (But you would lose any checked out revision(s)) -# * The -kb option is added to the RCS archive for workfiles with the following -# extensions: .bin .out .btl .rom .a07 .lib .exe .tco .obj .t8u .c8u .o .lku -######################################################################### - -require("getcwd.pl"); - -#NOTE: Each possible binary extension is delimited by '.' -$bin_ext = -".bin.out.btl.rom.a07.lib.exe.tco.obj.t8u.c8u.o.lku.BIN.OUT.BTL.ROM.A07.LIB.EXE.TCO.OBJ -.T8U.C8U.O.LKU."; - -# the main procedure that is run once in each directory -sub execdir -{ - $curlevel= $curlevel +1; - -#local sets the variables directory and prev directory local to the procedure - - local($dir,$prevdir)=@_; - -#change into the directory to be processed - - chdir($dir); - -#open the current directory for listing - - opendir(CURDIR,"."); - -#initialize the list of filenames - - local(@filenames); - -#set filenames equal to directory listing - - @filenames = readdir(CURDIR); - -#clean up by closing the directory - - closedir(CURDIR); - -#initialize a list for any subdirectories - local(@subdirs); - -#begin a for loop to execute on each filename in the list @filename - for (@filenames) - - { -#if the file is a directory... - if (-d $_) - { -#include it in @subdir - push(@subdirs,$_); - } - } - -#for loop of subdirs - for (@subdirs) -#if not a parent directory, run execdir on each sub dir - { - if (($_ ne '.') and ($_ ne '..') and ($maxlevel > $curlevel)) - { - &execdir($_,$dir); - } - } - -#save the current directory - $cd = &getcwd; - -#Print output header for each directory - print("Directory: $cd\n"); - -#determine the last directory in this path (to only process vcs or VCS) - $_ = $cd; - $num_dirs = split /\//; - @dirs = @_; - $last_dir = $dirs[$num_dirs-1]; -# print"Last directory is $last_dir\n"; - -#shell redirection: output from command in @ARGV is put in $output -# $output = `@ARGV`; -#begin a for loop to execute on each filename in the list @filename - for (@filenames) - { - if ( (-f $_) and ($_ ne '.') and ($_ ne '..') and ($maxlevel > $curlevel) - and ( ( $last_dir eq 'vcs' ) or ( $last_dir eq 'VCS' ) ) ) - { - $got_archivefile = 0; - $got_workfile = 0; - $got_version_labels = 0; - $got_description = 0; - $got_rev_count = 0; - - $file = $_; - $abs_file = $cd . "/" . $file; - print("Converting $abs_file...\n"); - $vlog_output = `vlog $_`; - $_ = $vlog_output; -# Split the cvs status output into individual lines - @vlog_strings = split /\n/; - $num_vlog_strings = @vlog_strings; - $_ = $vlog_string[0]; - if ( /^vlog: warning/ ) - { - print("$abs_file is NOT a valid PVCS archive!!!\n"); - } - elsif( $vlog_output ) - { - -# Collect all vlog output into appropriate variables - - $num = 0; - while( $num < $num_vlog_strings ) - { -# print("$vlog_strings[$num]\n"); - - $_ = $vlog_strings[$num]; - - if( ( /^Workfile:\s*/ ) && (!$got_workfile ) ) - { - $got_workfile = 1; -# get the string to the right of the above search (with any path stripped) - $workfile = $'; - $_=$workfile; - $num_fields = split /\//; - if ( $num_fields > 1 ) - { - $workfile = $_[$num_fields - 1 ]; - } -# print"Workfile is $workfile\n"; - } - - elsif( ( /^Archive:\s*/ ) && (!$got_archivefile ) ) - { - $got_archivefile = 1; -# get the string to the right of the above search (with any path stripped) - $archivefile = $'; - $_=$archivefile; - $num_fields = split /\//; - if ( $num_fields > 1 ) - { - $archivefile = $_[$num_fields - 1 ]; - } -# print"Archive is $archivefile\n"; - } - - elsif ( ( /^Rev count:\s*/ ) && (!$got_rev_count ) ) - { - $got_rev_count = 1; -# get the string to the right of the above search - $rev_count = $'; - print"Revision count is $rev_count\n"; - } - - elsif ( ( /^Version labels:\s*/ ) && (!$got_version_labels ) ) - { - $got_version_labels = 1; - $first_vl = $num+1; - } - - elsif ( ( /^Description:\s*/ ) && (!$got_description ) ) - { - $got_description = 1; - $description = "\"" . $vlog_strings[$num+1] . "\""; -# print"Description is $description\n"; - $last_vl = $num - 1; - } - - elsif ( /^Rev\s*/ ) # get all the revision information at once - { - $rev_index = 0; - while ( $rev_index < $rev_count ) - { - $_=$vlog_strings[$num]; - /^Rev\s*/; - $rev_num[$rev_index] = $'; - $_=$vlog_strings[$num+1]; - if ( /^Locked\s*/ ) - { - $num += 1; - } - $_=$vlog_strings[$num+1]; - /^Checked in:\s*/; - $checked_in[$rev_index] = "\"" . $' . "\""; - $_=$vlog_strings[$num+3]; - /^Author id:\s*/; - split; - $author[$rev_index] = "\"" . $_[2] . "\""; - $relative_comment_index = 0; - $comment_string = ""; - while( ( $vlog_strings[$num+4+$relative_comment_index] ne - "-----------------------------------" ) && - ( $vlog_strings[$num+4+$relative_comment_index] ne - "===================================" ) ) - { -# We need the \n added for multi-line comments. There is no effect for -# single-line comments since RCS inserts the \n if it doesn't exist already - $comment_string = $comment_string . -$vlog_strings[$num+4+$relative_comment_index] . "\n"; - $relative_comment_index += 1; - } -# Convert any double quotes to an escaped double quote - $comment_string =~ s/\"/\\\"/g; - $comment[$rev_index] = "\"" . $comment_string . "\""; - $num += ( 5 + $relative_comment_index ); - $rev_index += 1; - } - $num -= 1; #although there should be nothing left for this to matter - } - - $num += 1; - - } - -# Loop through each version label, checking for need to relabel ' ' with '_'. - $num_version_labels = $last_vl - $first_vl + 1; - print"Version label count is $num_version_labels\n"; - for( $i = $first_vl; $i <= $last_vl; $i += 1 ) - { -# print("$vlog_strings[$i]\n"); - $label_index = $i - $first_vl; - $_=$vlog_strings[$i]; - split /\"/; - $label = @_[1]; - $_=@_[2]; - split; - $label_revision[$label_index] = @_[1]; - -# Create RCS revision numbers corresponding to PVCS version numbers by -# adding 1 to the revision number (# after last .) - $rcs_rev = &pvcs_to_rcs_rev_number( $label_revision[$label_index]); - $label_revision[ $label_index ] = $rcs_rev; -# replace ' ' with '_', if needed - $_=$label; - $new_label[$label_index] = $label; - $new_label[$label_index] =~ s/ /_/g; - $new_label[$label_index] =~ s/\./_/g; - $new_label[$label_index] = "\"" . $new_label[$label_index] . "\""; -# print"Label $new_label[$label_index] is for revision -$label_revision[$label_index]\n"; - } - -# Create RCS revision numbers corresponding to PVCS version numbers by -# adding 1 to the revision number (# after last .) - - for( $i = 0; $i < $rev_count; $i += 1 ) - { - $rcs_rev_num[ $i ] = &pvcs_to_rcs_rev_number( $rev_num[ $i ] ); -# print"PVCS is $rev_num[ $i ]; RCS is $rcs_rev_num[ $i ]\n" - } - -# Create RCS archive and check in all revisions, then label. -# PVCS vlog lists revisions last-revision-first; reverse that ordering - $first_time = 1; - - for( $i = $rev_count - 1; $i >= 0; $i -= 1 ) - { - print "get -r$rev_num[$i] $archivefile\\($workfile\\)\n"; -# $vcs_output = `vcs -u -r$rev_num[$i] $file`; - $get_output = `get -r$rev_num[$i] $archivefile\\($workfile\\)`; - if( $first_time ) - { - $first_time = 0; - $file_output = `file $workfile`; -# If an empty comment is specified, RCS will not check in the file; -# check for this case. (but an empty -t- description is fine - go figure!) -# Since RCS will pause and ask for a comment if one is not given, -# substitute a dummy comment "no comment". - if ( $comment[$i] eq "\"\"" ) - { - $ci_command = "ci -f -r$rcs_rev_num[$i] -d$checked_in[$i] -w$author[$i] --t-$description -m\"no comment\" $workfile"; - } - else - { - $ci_command = "ci -f -r$rcs_rev_num[$i] -d$checked_in[$i] -w$author[$i] --t-$description -m$comment[$i] $workfile"; - } - print "$ci_command\n"; - $ci_output = `$ci_command`; - -# Also check here whether this file ought to be "binary" - $_=$file_output; - split; - if( $_[1] eq "Frame" ) - { - print"Binary attribute -kb added (file type is Frame)\n"; - $rcs_output = `rcs -kb $workfile,v`; - } - else - { - $_=$workfile; - $num_fields = split /\./; - if ( $num_fields > 1 ) - { - $ext = "." . $_[$num_fields - 1] . "."; - if ( ( index $bin_ext, $ext ) > - 1 ) - { - print"Binary attribute -kb added (file type is $ext)\n"; - $rcs_output = `rcs -kb $workfile,v`; - } - } - } - } - else - { - $rcs_output = `rcs -l $workfile`; -# If an empty comment is specified, RCS will not check in the file; -# check for this case. (but an empty -t- description is fine - go figure!) - if ( $comment[$i] eq "\"\"" ) - { - $ci_command = "ci -f -r$rcs_rev_num[$i] -d$checked_in[$i] -w$author[$i] --m\"no comment\" $workfile"; - } - else - { - $ci_command = "ci -f -r$rcs_rev_num[$i] -d$checked_in[$i] -w$author[$i] --m$comment[$i] $workfile"; - } - print "$ci_command\n"; - $ci_output = `$ci_command`; - } - } -# Attach version labels - for( $i = $num_version_labels - 1; $i >= 0; $i -= 1 ) - { -# print "rcs -n$new_label[$i]:$label_revision[$i] $workfile\n"; - $rcs_output = `rcs -n$new_label[$i]:$label_revision[$i] $workfile`; - print "Version label $new_label[$i] added to revision $label_revision[$i]\n"; - } - -# Move archive file up one directory level (above vcs/ or VCS/) - $mv_output = `mv -f $workfile",v" ..`; - } - } - } - -#print the output to STDOUT -# print("$output"); - - $curlevel=$curlevel - 1; - if ($dir ne $prevdir) - { - chdir('..'); - } -} - -sub pvcs_to_rcs_rev_number -{ - local($input, $num_fields, @rev_string, $return_rev_num, $i); - - $input = @_[0]; - $_ = $input; - $num_fields = split /\./; - @rev_string = @_; - @rev_string[$num_fields-1] += 1; - $return_rev_num = @rev_string[ 0 ]; - for( $i = 1; $i < $num_fields; $i += 1 ) - { - $return_rev_num = $return_rev_num . "." . @rev_string[ $i ]; - } - return $return_rev_num; -} - -##MAIN program: checks to see if there are command line parameters -if ($#ARGV > 2) { - -#if not then end and print help message -die "Usage: pvcsns [-l]\n"}; -$curlevel=0-1;$maxlevel=10000; - -if (@ARGV[0] eq "-l") {$maxlevel=1;shift @ARGV;} - -#start the whole thing -&execdir(".","."); - diff --git a/contrib/cvs/diff/ChangeLog b/contrib/cvs/diff/ChangeLog deleted file mode 100644 index 34aa7077b8c4..000000000000 --- a/contrib/cvs/diff/ChangeLog +++ /dev/null @@ -1,202 +0,0 @@ -Fri Jan 16 14:58:19 1998 Larry Jones <larry.jones@sdrc.com> - - * diff.c, diff3.c: Plug memory leaks. - -Thu Jan 15 13:36:46 1998 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in (installdirs): New rule, for when ../Makefile - recurses into this directory (bug reported by W. L. Estes). - -Tue Nov 11 10:48:19 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * diff.c (diff_run): Change #ifdef on HAVE_SETMODE to #if to match - the other uses (fixes compilation error on unix). - - * diff.c (diff_run): Don't set stdout to binary mode. - -Mon, 10 Nov 1997 Jim Kingdon - - * diff.c (run_diff): Open outfile in binary mode if --binary. - -Thu Nov 6 12:42:12 1997 Karl Fogel <kfogel@floss.red-bean.com> - and Paul Eggert <eggert@twinsun.com> - - * analyze.c: applied Paul Eggert's patch to fix the diff3 merge - bug described in ccvs/doc/DIFFUTILS-2.7-BUG: - (shift_boundaries): new var `inhibit_hunk_merge'; use it to - control something important that I don't quite understand, but - Paul apparently does, so that's okay. - -Sat Nov 1 14:17:57 1997 Michael L.H. Brouwer <michael@thi.nl> - - * Makefile.in: Add call to ranlib to build a table of contents for - the library since some systems seem to require this. - -1997-10-28 Jim Kingdon - - * .cvsignore: Add files du jour for Visual C++, vc50.pdb and vc50.idb. - - * system.h: Define HAVE_TIME_H. - * dir.c [_WIN32]: Define CLOSEDIR_VOID. - -1997-10-18 Jim Kingdon - - * build_diff.com: Add diff3.c - -Fri Sep 26 14:24:42 1997 Tim Pierce <twp@twp.tezcat.com> - - * diff.c (diff_run): Save old value of optind before calling - getopt_long, then restore before returning. Eventually it would - be nice if diff_run were fully reentrant. - - New diff3 library for CVS. - * Makefile.in (SOURCES): Add diff3.c. - (OBJECTS): Add diff3.o. - * diff3.c: New file, copied from diffutils-2.7. See diffutils for - earlier ChangeLogs. Undefine initialize_main macro. Remove <signal.h>. - (diff3_run): Renamed from main(). Add `outfile' argument. Remove - SIGCLD handling; we do not fork. Save optind and reset to 0 - before calling getopt_long; restore after option processing done. - (read_diff): Use diff_run with a temporary output file, - instead of forking a diff subprocess and reading from a pipe. - Change DIFF_PROGRAM to "diff"; this argument is now used only for - diagnostic reporting. - (xmalloc, xrealloc): Removed. - (diff_program): Removed. - (diff_program_name): Made extern, so it may be used in other - library calls like `error'. - (initialize_main): New function. - - Namespace munging. util.c defines both fatal() and - perror_with_exit(), but these cannot be used to abort diff3: both - attempt to longjmp() to a buffer set in diff.c, used only by - diff_run. This is an awful solution, but necessary until the code - can be cleaned up. (These functions do not *have* to be renamed, - since both are declared static to diff3.c and should not clash - with libdiff.a, but it reduces potential confusion.) - * diff3.c (diff3_fatal): Renamed from fatal. - (diff3_perror_with_exit): Renamed from perror_with_exit. - - Eliminate exit calls. - (try_help): Change from `void' to `int'. Return, do not exit. - (diff3_fatal, diff3_perror_with_exit, process_diff): Change `exit' - to DIFF3_ABORT. - (diff3_run): Initialize jump buffer for nonlocal exits. Change - exit calls to returns. Change `perror_with_exit' to - `perror_with_name' and add a return. Change `fatal' to - `diff_error' and add a return. The reasoning is that we shouldn't - rely on setjmp/longjmp any more than necessary. - - Redirect stdout. - (check_output): Renamed from check_stdout. Take stream argument - instead of blindly checking stdout. Do not close stream, but - merely fflush it. - (diff3_run): Initialize outstream, and close when done. Pass this - stream (instead of stdout) to output_diff3_edscript, - output_diff3_merge, and output_diff3. - -Thu Sep 25 14:34:22 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * util.c (begin_output, finish_output): If PR_PROGRAM is not - defined (VMS), just give a fatal error if --paginate specified. - - * Makefile.in (DISTFILES): Add ChangeLog build_diff.com - Makefile.in. - * build_diff.com: New file. - -Wed Sep 24 10:27:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in: Also set top_srcdir. Needed to make today's other - Makefile.in change work. - - * .cvsignore: New file. - - * Makefile.in (COMPILE): Add -I options for srcdir (perhaps - unneeded) and change -I option for lib to use top_srcdir (needed - to avoid mixups with CVS's regex.h vs. the system one). - -Sun Sep 21 19:44:42 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in (util.o): Change util.c to $<, needed for srcdir. - -Sat Sep 20 12:06:41 1997 Tim Pierce <twp@twp.tezcat.com> - - New diff library for CVS, based on diffutils-2.7. See diffutils - for earlier ChangeLogs. - * Makefile.in, analyze.c, cmpbuf.c, cmpbuf.h, config.hin, - context.c, diagmeet.note, diff.c, diff.h, dir.c, ed.c, ifdef.c, - io.c, normal.c, side.c, stamp-h.in, system.h, util.c, version.c: - New files. - (COMPILE): Add -I../lib, so we can get getopt.h. - - * Makefile.in: Removed anything not related to libdiff.a. - (dist-dir): New target, copied from ../lib/Makefile.in. - (DISTFILES): New variable. - (SOURCES): Renamed from `srcs'. - (OBJECTS): Renamed from `libdiff_o'. - (Makefile): Changed dependencies to reflect - new, shallow config directory structure. - (stamp-h.in, config.h.in, config.h, stamp-h): Removed. - * stamp-h.in, config.h.in: Removed. - - * system.h: Remove dup2 macro (provided by ../lib/dup2.c). - Include stdlib.h if STDC_HEADERS is defined (not just - HAVE_STDLIB_H). - -Sat Sep 20 05:32:18 1997 Tim Pierce <twp@twp.tezcat.com> - - Diff librarification. - - * diff.c (diff_run): New function, renamed from `main'. - Initialize `outfile' based on the value of the new `out' filename - argument. - (initialize_main): New function. - * system.h: Removed initialize_main macro. - * diffmain.c: New file. - * Makefile.in (diff): Added diffmain.o. - (libdiff): New target. - (AR, libdiff_o): New variables. libdiff_o does not include - xmalloc.o, fnmatch.o, getopt.o, getopt1.o, regex.o or error.o, - because these functions are already present in CVS. It will take - some work to make this more general-purpose. - - Redirect standard output. - * util.c: Redirect stdout to outfile: change all naked `printf' - and `putchar' statements to `fprintf (outfile)' and `putc (..., - outfile)' throughout. This should permit redirecting diff output - by changing `outfile' just once in `diff_run'. - (output_in_progress): New variable. - (begin_output, finish_output): Use `output_in_progress', rather than - `outfile', as a semaphore to avoid reentrancy problems. - (finish_output): Close `outfile' only if paginate_flag is set. - * diff.c (check_output): New function, was check_stdout. Take a - `file' argument, and flush it instead of closing it. - (diff_run): Change check_stdout to check_output. - (compare_files): Fflush outfile, not stdout. - - Eliminate exit statements. - * diff.h: Include setjmp.h. - (diff_abort_buf): New variable. - (DIFF_ABORT): New macro. - * diff.c (diff_run): Change all `exit' statements to `return'. - Set up diff_abort_buf, so we can abort diff without - terminating (for libdiff.a). - (try_help): Return int instead of void; do not exit. - * util.c (fatal): Use DIFF_ABORT instead of exit. - (pfatal_with_name): Use DIFF_ABORT instead of exit. - - Namespace cleanup (rudimentary). Strictly speaking, this is not - necessary to make diff into a library. However, namespace - clashes between diff and CVS must be resolved immediately, since - CVS is the first application targeted for use with difflib. - - * analyze.c, diff.c, diff.h, util.c (diff_error): Renamed from `error'. - - * version.c, diff.c, diff.h, cmp.c, diff3.c, sdiff.c - (diff_version_string): Renamed from version_string. - * diff.c, util.c, diff.h, diff3.c, error.c (diff_program_name): - Renamed from program_name. - - * util.c (xmalloc, xrealloc): Removed. - * Makefile.in (diff_o): Added error.o and xmalloc.o. - diff --git a/contrib/cvs/diff/Makefile.in b/contrib/cvs/diff/Makefile.in deleted file mode 100644 index 333d4d9251d0..000000000000 --- a/contrib/cvs/diff/Makefile.in +++ /dev/null @@ -1,104 +0,0 @@ -# Makefile for GNU DIFF -# Copyright (C) 1988,1989,1991,1992,1993,1994,1997 Free Software Foundation, Inc. -# -# This file is part of GNU DIFF. -# -# GNU DIFF is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU DIFF is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU DIFF; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - -#### Start of system configuration section. #### - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -subdir = diff - -CC = @CC@ -AR = ar - -CPPFLAGS = @CPPFLAGS@ -DEFS = @DEFS@ -RANLIB = @RANLIB@ -CFLAGS = @CFLAGS@ - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -PR_PROGRAM = /bin/pr - -#### End of system configuration section. #### - -SHELL = /bin/sh - -# The source files for all of the programs. -SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c context.c ed.c \ - normal.c ifdef.c util.c dir.c version.c diff.h side.c system.h -OBJECTS = diff.o diff3.o analyze.o cmpbuf.o dir.o io.o util.o \ - context.o ed.o ifdef.o normal.o side.o version.o -DISTFILES = $(SOURCES) ChangeLog build_diff.com Makefile.in - -all: libdiff.a - -# $(top_srcdir)/lib is so we don't get the system-supplied headers for -# functions that we supply ourselves in lib. $(srcdir) is perhaps not -# necessary if we assume the unix compiler behavior whereby "" looks -# in the directory containing the .c file first. -# -I. is probably unnecessary (I don't think we generate any .h files). -# -I.. is for config.h. -COMPILE = $(CC) -c $(CPPFLAGS) $(DEFS) \ - -I. -I.. -I$(srcdir) -I$(top_srcdir)/lib $(CFLAGS) - -.c.o: - $(COMPILE) $< - -libdiff libdiff.a: $(OBJECTS) - $(AR) cr libdiff.a $(OBJECTS) - -$(RANLIB) libdiff.a - -$(OBJECTS): diff.h system.h -analyze.o cmpbuf.o: cmpbuf.h - -util.o: util.c - $(COMPILE) -DPR_PROGRAM=\"$(PR_PROGRAM)\" $< - -install: all - -installdirs: - @: nothing to do for installdirs -.PHONY: installdirs - -TAGS: $(SOURCES) - etags $(SOURCES) - -clean: - rm -f *.o *.a core - -mostlyclean: clean - -distclean: clean - rm -f TAGS tags Makefile - -realclean: distclean - -Makefile: Makefile.in ../config.status - cd .. && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status - -dist-dir: - mkdir ${DISTDIR} - for i in ${DISTFILES}; do \ - ln $(srcdir)/$${i} ${DISTDIR}; \ - done - -# Prevent GNU make v3 from overflowing arg limit on SysV. -.NOEXPORT: diff --git a/contrib/cvs/diff/analyze.c b/contrib/cvs/diff/analyze.c deleted file mode 100644 index 0bda3cf77231..000000000000 --- a/contrib/cvs/diff/analyze.c +++ /dev/null @@ -1,1087 +0,0 @@ -/* Analyze file differences for GNU DIFF. - Copyright (C) 1988, 1989, 1992, 1993, 1997 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* The basic algorithm is described in: - "An O(ND) Difference Algorithm and its Variations", Eugene Myers, - Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; - see especially section 4.2, which describes the variation used below. - Unless the --minimal option is specified, this code uses the TOO_EXPENSIVE - heuristic, by Paul Eggert, to limit the cost to O(N**1.5 log N) - at the price of producing suboptimal output for large inputs with - many differences. - - The basic algorithm was independently discovered as described in: - "Algorithms for Approximate String Matching", E. Ukkonen, - Information and Control Vol. 64, 1985, pp. 100-118. */ - -#include "diff.h" -#include "cmpbuf.h" - -extern int no_discards; - -static int *xvec, *yvec; /* Vectors being compared. */ -static int *fdiag; /* Vector, indexed by diagonal, containing - 1 + the X coordinate of the point furthest - along the given diagonal in the forward - search of the edit matrix. */ -static int *bdiag; /* Vector, indexed by diagonal, containing - the X coordinate of the point furthest - along the given diagonal in the backward - search of the edit matrix. */ -static int too_expensive; /* Edit scripts longer than this are too - expensive to compute. */ - -#define SNAKE_LIMIT 20 /* Snakes bigger than this are considered `big'. */ - -struct partition -{ - int xmid, ymid; /* Midpoints of this partition. */ - int lo_minimal; /* Nonzero if low half will be analyzed minimally. */ - int hi_minimal; /* Likewise for high half. */ -}; - -static int diag PARAMS((int, int, int, int, int, struct partition *)); -static struct change *add_change PARAMS((int, int, int, int, struct change *)); -static struct change *build_reverse_script PARAMS((struct file_data const[])); -static struct change *build_script PARAMS((struct file_data const[])); -static void briefly_report PARAMS((int, struct file_data const[])); -static void compareseq PARAMS((int, int, int, int, int)); -static void discard_confusing_lines PARAMS((struct file_data[])); -static void shift_boundaries PARAMS((struct file_data[])); - -/* Find the midpoint of the shortest edit script for a specified - portion of the two files. - - Scan from the beginnings of the files, and simultaneously from the ends, - doing a breadth-first search through the space of edit-sequence. - When the two searches meet, we have found the midpoint of the shortest - edit sequence. - - If MINIMAL is nonzero, find the minimal edit script regardless - of expense. Otherwise, if the search is too expensive, use - heuristics to stop the search and report a suboptimal answer. - - Set PART->(XMID,YMID) to the midpoint (XMID,YMID). The diagonal number - XMID - YMID equals the number of inserted lines minus the number - of deleted lines (counting only lines before the midpoint). - Return the approximate edit cost; this is the total number of - lines inserted or deleted (counting only lines before the midpoint), - unless a heuristic is used to terminate the search prematurely. - - Set PART->LEFT_MINIMAL to nonzero iff the minimal edit script for the - left half of the partition is known; similarly for PART->RIGHT_MINIMAL. - - This function assumes that the first lines of the specified portions - of the two files do not match, and likewise that the last lines do not - match. The caller must trim matching lines from the beginning and end - of the portions it is going to specify. - - If we return the "wrong" partitions, - the worst this can do is cause suboptimal diff output. - It cannot cause incorrect diff output. */ - -static int -diag (xoff, xlim, yoff, ylim, minimal, part) - int xoff, xlim, yoff, ylim, minimal; - struct partition *part; -{ - int *const fd = fdiag; /* Give the compiler a chance. */ - int *const bd = bdiag; /* Additional help for the compiler. */ - int const *const xv = xvec; /* Still more help for the compiler. */ - int const *const yv = yvec; /* And more and more . . . */ - int const dmin = xoff - ylim; /* Minimum valid diagonal. */ - int const dmax = xlim - yoff; /* Maximum valid diagonal. */ - int const fmid = xoff - yoff; /* Center diagonal of top-down search. */ - int const bmid = xlim - ylim; /* Center diagonal of bottom-up search. */ - int fmin = fmid, fmax = fmid; /* Limits of top-down search. */ - int bmin = bmid, bmax = bmid; /* Limits of bottom-up search. */ - int c; /* Cost. */ - int odd = (fmid - bmid) & 1; /* True if southeast corner is on an odd - diagonal with respect to the northwest. */ - - fd[fmid] = xoff; - bd[bmid] = xlim; - - for (c = 1;; ++c) - { - int d; /* Active diagonal. */ - int big_snake = 0; - - /* Extend the top-down search by an edit step in each diagonal. */ - fmin > dmin ? fd[--fmin - 1] = -1 : ++fmin; - fmax < dmax ? fd[++fmax + 1] = -1 : --fmax; - for (d = fmax; d >= fmin; d -= 2) - { - int x, y, oldx, tlo = fd[d - 1], thi = fd[d + 1]; - - if (tlo >= thi) - x = tlo + 1; - else - x = thi; - oldx = x; - y = x - d; - while (x < xlim && y < ylim && xv[x] == yv[y]) - ++x, ++y; - if (x - oldx > SNAKE_LIMIT) - big_snake = 1; - fd[d] = x; - if (odd && bmin <= d && d <= bmax && bd[d] <= x) - { - part->xmid = x; - part->ymid = y; - part->lo_minimal = part->hi_minimal = 1; - return 2 * c - 1; - } - } - - /* Similarly extend the bottom-up search. */ - bmin > dmin ? bd[--bmin - 1] = INT_MAX : ++bmin; - bmax < dmax ? bd[++bmax + 1] = INT_MAX : --bmax; - for (d = bmax; d >= bmin; d -= 2) - { - int x, y, oldx, tlo = bd[d - 1], thi = bd[d + 1]; - - if (tlo < thi) - x = tlo; - else - x = thi - 1; - oldx = x; - y = x - d; - while (x > xoff && y > yoff && xv[x - 1] == yv[y - 1]) - --x, --y; - if (oldx - x > SNAKE_LIMIT) - big_snake = 1; - bd[d] = x; - if (!odd && fmin <= d && d <= fmax && x <= fd[d]) - { - part->xmid = x; - part->ymid = y; - part->lo_minimal = part->hi_minimal = 1; - return 2 * c; - } - } - - if (minimal) - continue; - - /* Heuristic: check occasionally for a diagonal that has made - lots of progress compared with the edit distance. - If we have any such, find the one that has made the most - progress and return it as if it had succeeded. - - With this heuristic, for files with a constant small density - of changes, the algorithm is linear in the file size. */ - - if (c > 200 && big_snake && heuristic) - { - int best; - - best = 0; - for (d = fmax; d >= fmin; d -= 2) - { - int dd = d - fmid; - int x = fd[d]; - int y = x - d; - int v = (x - xoff) * 2 - dd; - if (v > 12 * (c + (dd < 0 ? -dd : dd))) - { - if (v > best - && xoff + SNAKE_LIMIT <= x && x < xlim - && yoff + SNAKE_LIMIT <= y && y < ylim) - { - /* We have a good enough best diagonal; - now insist that it end with a significant snake. */ - int k; - - for (k = 1; xv[x - k] == yv[y - k]; k++) - if (k == SNAKE_LIMIT) - { - best = v; - part->xmid = x; - part->ymid = y; - break; - } - } - } - } - if (best > 0) - { - part->lo_minimal = 1; - part->hi_minimal = 0; - return 2 * c - 1; - } - - best = 0; - for (d = bmax; d >= bmin; d -= 2) - { - int dd = d - bmid; - int x = bd[d]; - int y = x - d; - int v = (xlim - x) * 2 + dd; - if (v > 12 * (c + (dd < 0 ? -dd : dd))) - { - if (v > best - && xoff < x && x <= xlim - SNAKE_LIMIT - && yoff < y && y <= ylim - SNAKE_LIMIT) - { - /* We have a good enough best diagonal; - now insist that it end with a significant snake. */ - int k; - - for (k = 0; xv[x + k] == yv[y + k]; k++) - if (k == SNAKE_LIMIT - 1) - { - best = v; - part->xmid = x; - part->ymid = y; - break; - } - } - } - } - if (best > 0) - { - part->lo_minimal = 0; - part->hi_minimal = 1; - return 2 * c - 1; - } - } - - /* Heuristic: if we've gone well beyond the call of duty, - give up and report halfway between our best results so far. */ - if (c >= too_expensive) - { - int fxybest, fxbest; - int bxybest, bxbest; - - fxbest = bxbest = 0; /* Pacify `gcc -Wall'. */ - - /* Find forward diagonal that maximizes X + Y. */ - fxybest = -1; - for (d = fmax; d >= fmin; d -= 2) - { - int x = min (fd[d], xlim); - int y = x - d; - if (ylim < y) - x = ylim + d, y = ylim; - if (fxybest < x + y) - { - fxybest = x + y; - fxbest = x; - } - } - - /* Find backward diagonal that minimizes X + Y. */ - bxybest = INT_MAX; - for (d = bmax; d >= bmin; d -= 2) - { - int x = max (xoff, bd[d]); - int y = x - d; - if (y < yoff) - x = yoff + d, y = yoff; - if (x + y < bxybest) - { - bxybest = x + y; - bxbest = x; - } - } - - /* Use the better of the two diagonals. */ - if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff)) - { - part->xmid = fxbest; - part->ymid = fxybest - fxbest; - part->lo_minimal = 1; - part->hi_minimal = 0; - } - else - { - part->xmid = bxbest; - part->ymid = bxybest - bxbest; - part->lo_minimal = 0; - part->hi_minimal = 1; - } - return 2 * c - 1; - } - } -} - -/* Compare in detail contiguous subsequences of the two files - which are known, as a whole, to match each other. - - The results are recorded in the vectors files[N].changed_flag, by - storing a 1 in the element for each line that is an insertion or deletion. - - The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1. - - Note that XLIM, YLIM are exclusive bounds. - All line numbers are origin-0 and discarded lines are not counted. - - If MINIMAL is nonzero, find a minimal difference no matter how - expensive it is. */ - -static void -compareseq (xoff, xlim, yoff, ylim, minimal) - int xoff, xlim, yoff, ylim, minimal; -{ - int * const xv = xvec; /* Help the compiler. */ - int * const yv = yvec; - - /* Slide down the bottom initial diagonal. */ - while (xoff < xlim && yoff < ylim && xv[xoff] == yv[yoff]) - ++xoff, ++yoff; - /* Slide up the top initial diagonal. */ - while (xlim > xoff && ylim > yoff && xv[xlim - 1] == yv[ylim - 1]) - --xlim, --ylim; - - /* Handle simple cases. */ - if (xoff == xlim) - while (yoff < ylim) - files[1].changed_flag[files[1].realindexes[yoff++]] = 1; - else if (yoff == ylim) - while (xoff < xlim) - files[0].changed_flag[files[0].realindexes[xoff++]] = 1; - else - { - int c; - struct partition part; - - /* Find a point of correspondence in the middle of the files. */ - - c = diag (xoff, xlim, yoff, ylim, minimal, &part); - - if (c == 1) - { - /* This should be impossible, because it implies that - one of the two subsequences is empty, - and that case was handled above without calling `diag'. - Let's verify that this is true. */ - abort (); -#if 0 - /* The two subsequences differ by a single insert or delete; - record it and we are done. */ - if (part.xmid - part.ymid < xoff - yoff) - files[1].changed_flag[files[1].realindexes[part.ymid - 1]] = 1; - else - files[0].changed_flag[files[0].realindexes[part.xmid]] = 1; -#endif - } - else - { - /* Use the partitions to split this problem into subproblems. */ - compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal); - compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal); - } - } -} - -/* Discard lines from one file that have no matches in the other file. - - A line which is discarded will not be considered by the actual - comparison algorithm; it will be as if that line were not in the file. - The file's `realindexes' table maps virtual line numbers - (which don't count the discarded lines) into real line numbers; - this is how the actual comparison algorithm produces results - that are comprehensible when the discarded lines are counted. - - When we discard a line, we also mark it as a deletion or insertion - so that it will be printed in the output. */ - -static void -discard_confusing_lines (filevec) - struct file_data filevec[]; -{ - unsigned int f, i; - char *discarded[2]; - int *equiv_count[2]; - int *p; - - /* Allocate our results. */ - p = (int *) xmalloc ((filevec[0].buffered_lines + filevec[1].buffered_lines) - * (2 * sizeof (int))); - for (f = 0; f < 2; f++) - { - filevec[f].undiscarded = p; p += filevec[f].buffered_lines; - filevec[f].realindexes = p; p += filevec[f].buffered_lines; - } - - /* Set up equiv_count[F][I] as the number of lines in file F - that fall in equivalence class I. */ - - p = (int *) xmalloc (filevec[0].equiv_max * (2 * sizeof (int))); - equiv_count[0] = p; - equiv_count[1] = p + filevec[0].equiv_max; - bzero (p, filevec[0].equiv_max * (2 * sizeof (int))); - - for (i = 0; i < filevec[0].buffered_lines; ++i) - ++equiv_count[0][filevec[0].equivs[i]]; - for (i = 0; i < filevec[1].buffered_lines; ++i) - ++equiv_count[1][filevec[1].equivs[i]]; - - /* Set up tables of which lines are going to be discarded. */ - - discarded[0] = xmalloc (sizeof (char) - * (filevec[0].buffered_lines - + filevec[1].buffered_lines)); - discarded[1] = discarded[0] + filevec[0].buffered_lines; - bzero (discarded[0], sizeof (char) * (filevec[0].buffered_lines - + filevec[1].buffered_lines)); - - /* Mark to be discarded each line that matches no line of the other file. - If a line matches many lines, mark it as provisionally discardable. */ - - for (f = 0; f < 2; f++) - { - unsigned int end = filevec[f].buffered_lines; - char *discards = discarded[f]; - int *counts = equiv_count[1 - f]; - int *equivs = filevec[f].equivs; - unsigned int many = 5; - unsigned int tem = end / 64; - - /* Multiply MANY by approximate square root of number of lines. - That is the threshold for provisionally discardable lines. */ - while ((tem = tem >> 2) > 0) - many *= 2; - - for (i = 0; i < end; i++) - { - int nmatch; - if (equivs[i] == 0) - continue; - nmatch = counts[equivs[i]]; - if (nmatch == 0) - discards[i] = 1; - else if (nmatch > many) - discards[i] = 2; - } - } - - /* Don't really discard the provisional lines except when they occur - in a run of discardables, with nonprovisionals at the beginning - and end. */ - - for (f = 0; f < 2; f++) - { - unsigned int end = filevec[f].buffered_lines; - register char *discards = discarded[f]; - - for (i = 0; i < end; i++) - { - /* Cancel provisional discards not in middle of run of discards. */ - if (discards[i] == 2) - discards[i] = 0; - else if (discards[i] != 0) - { - /* We have found a nonprovisional discard. */ - register int j; - unsigned int length; - unsigned int provisional = 0; - - /* Find end of this run of discardable lines. - Count how many are provisionally discardable. */ - for (j = i; j < end; j++) - { - if (discards[j] == 0) - break; - if (discards[j] == 2) - ++provisional; - } - - /* Cancel provisional discards at end, and shrink the run. */ - while (j > i && discards[j - 1] == 2) - discards[--j] = 0, --provisional; - - /* Now we have the length of a run of discardable lines - whose first and last are not provisional. */ - length = j - i; - - /* If 1/4 of the lines in the run are provisional, - cancel discarding of all provisional lines in the run. */ - if (provisional * 4 > length) - { - while (j > i) - if (discards[--j] == 2) - discards[j] = 0; - } - else - { - register unsigned int consec; - unsigned int minimum = 1; - unsigned int tem = length / 4; - - /* MINIMUM is approximate square root of LENGTH/4. - A subrun of two or more provisionals can stand - when LENGTH is at least 16. - A subrun of 4 or more can stand when LENGTH >= 64. */ - while ((tem = tem >> 2) > 0) - minimum *= 2; - minimum++; - - /* Cancel any subrun of MINIMUM or more provisionals - within the larger run. */ - for (j = 0, consec = 0; j < length; j++) - if (discards[i + j] != 2) - consec = 0; - else if (minimum == ++consec) - /* Back up to start of subrun, to cancel it all. */ - j -= consec; - else if (minimum < consec) - discards[i + j] = 0; - - /* Scan from beginning of run - until we find 3 or more nonprovisionals in a row - or until the first nonprovisional at least 8 lines in. - Until that point, cancel any provisionals. */ - for (j = 0, consec = 0; j < length; j++) - { - if (j >= 8 && discards[i + j] == 1) - break; - if (discards[i + j] == 2) - consec = 0, discards[i + j] = 0; - else if (discards[i + j] == 0) - consec = 0; - else - consec++; - if (consec == 3) - break; - } - - /* I advances to the last line of the run. */ - i += length - 1; - - /* Same thing, from end. */ - for (j = 0, consec = 0; j < length; j++) - { - if (j >= 8 && discards[i - j] == 1) - break; - if (discards[i - j] == 2) - consec = 0, discards[i - j] = 0; - else if (discards[i - j] == 0) - consec = 0; - else - consec++; - if (consec == 3) - break; - } - } - } - } - } - - /* Actually discard the lines. */ - for (f = 0; f < 2; f++) - { - char *discards = discarded[f]; - unsigned int end = filevec[f].buffered_lines; - unsigned int j = 0; - for (i = 0; i < end; ++i) - if (no_discards || discards[i] == 0) - { - filevec[f].undiscarded[j] = filevec[f].equivs[i]; - filevec[f].realindexes[j++] = i; - } - else - filevec[f].changed_flag[i] = 1; - filevec[f].nondiscarded_lines = j; - } - - free (discarded[0]); - free (equiv_count[0]); -} - -/* Adjust inserts/deletes of identical lines to join changes - as much as possible. - - We do something when a run of changed lines include a - line at one end and have an excluded, identical line at the other. - We are free to choose which identical line is included. - `compareseq' usually chooses the one at the beginning, - but usually it is cleaner to consider the following identical line - to be the "change". */ - -int inhibit; - -static void -shift_boundaries (filevec) - struct file_data filevec[]; -{ - int f; - int inhibit_hunk_merge = horizon_lines != context; - - for (f = 0; f < 2; f++) - { - char *changed = filevec[f].changed_flag; - char const *other_changed = filevec[1-f].changed_flag; - int const *equivs = filevec[f].equivs; - int i = 0; - int j = 0; - int i_end = filevec[f].buffered_lines; - - while (1) - { - int runlength, start, corresponding; - - /* Scan forwards to find beginning of another run of changes. - Also keep track of the corresponding point in the other file. */ - - while (i < i_end && changed[i] == 0) - { - while (other_changed[j++]) - continue; - i++; - } - - if (i == i_end) - break; - - start = i; - - /* Find the end of this run of changes. */ - - while (changed[++i]) - continue; - while (other_changed[j]) - j++; - - do - { - /* Record the length of this run of changes, so that - we can later determine whether the run has grown. */ - runlength = i - start; - - if (! inhibit_hunk_merge) - { - /* Move the changed region back, so long as the - previous unchanged line matches the last changed one. - This merges with previous changed regions. */ - - while (start && equivs[start - 1] == equivs[i - 1]) - { - changed[--start] = 1; - changed[--i] = 0; - while (changed[start - 1]) - start--; - while (other_changed[--j]) - continue; - } - } - - /* Set CORRESPONDING to the end of the changed run, at the last - point where it corresponds to a changed run in the other file. - CORRESPONDING == I_END means no such point has been found. */ - corresponding = other_changed[j - 1] ? i : i_end; - - /* Shift the changed region forward, so long as the - first changed line matches the following unchanged one, - but if INHIBIT_HUNK_MERGE is 1 do not shift if - this would merge with another changed region. - Do this second, so that if there are no merges, - the changed region is moved forward as far as possible. */ - - while (i != i_end && equivs[start] == equivs[i] - && ! (inhibit_hunk_merge & other_changed[j + 1])) - { - changed[start++] = 0; - changed[i++] = 1; - while (changed[i]) - i++; - while (other_changed[++j]) - corresponding = i; - } - } - while (runlength != i - start); - - /* If possible, move the fully-merged run of changes - back to a corresponding run in the other file. */ - - while (corresponding < i) - { - changed[--start] = 1; - changed[--i] = 0; - while (other_changed[--j]) - continue; - } - } - } -} - -/* Cons an additional entry onto the front of an edit script OLD. - LINE0 and LINE1 are the first affected lines in the two files (origin 0). - DELETED is the number of lines deleted here from file 0. - INSERTED is the number of lines inserted here in file 1. - - If DELETED is 0 then LINE0 is the number of the line before - which the insertion was done; vice versa for INSERTED and LINE1. */ - -static struct change * -add_change (line0, line1, deleted, inserted, old) - int line0, line1, deleted, inserted; - struct change *old; -{ - struct change *new = (struct change *) xmalloc (sizeof (struct change)); - - new->line0 = line0; - new->line1 = line1; - new->inserted = inserted; - new->deleted = deleted; - new->link = old; - return new; -} - -/* Scan the tables of which lines are inserted and deleted, - producing an edit script in reverse order. */ - -static struct change * -build_reverse_script (filevec) - struct file_data const filevec[]; -{ - struct change *script = 0; - char *changed0 = filevec[0].changed_flag; - char *changed1 = filevec[1].changed_flag; - int len0 = filevec[0].buffered_lines; - int len1 = filevec[1].buffered_lines; - - /* Note that changedN[len0] does exist, and contains 0. */ - - int i0 = 0, i1 = 0; - - while (i0 < len0 || i1 < len1) - { - if (changed0[i0] || changed1[i1]) - { - int line0 = i0, line1 = i1; - - /* Find # lines changed here in each file. */ - while (changed0[i0]) ++i0; - while (changed1[i1]) ++i1; - - /* Record this change. */ - script = add_change (line0, line1, i0 - line0, i1 - line1, script); - } - - /* We have reached lines in the two files that match each other. */ - i0++, i1++; - } - - return script; -} - -/* Scan the tables of which lines are inserted and deleted, - producing an edit script in forward order. */ - -static struct change * -build_script (filevec) - struct file_data const filevec[]; -{ - struct change *script = 0; - char *changed0 = filevec[0].changed_flag; - char *changed1 = filevec[1].changed_flag; - int i0 = filevec[0].buffered_lines, i1 = filevec[1].buffered_lines; - - /* Note that changedN[-1] does exist, and contains 0. */ - - while (i0 >= 0 || i1 >= 0) - { - if (changed0[i0 - 1] || changed1[i1 - 1]) - { - int line0 = i0, line1 = i1; - - /* Find # lines changed here in each file. */ - while (changed0[i0 - 1]) --i0; - while (changed1[i1 - 1]) --i1; - - /* Record this change. */ - script = add_change (i0, i1, line0 - i0, line1 - i1, script); - } - - /* We have reached lines in the two files that match each other. */ - i0--, i1--; - } - - return script; -} - -/* If CHANGES, briefly report that two files differed. */ -static void -briefly_report (changes, filevec) - int changes; - struct file_data const filevec[]; -{ - if (changes) - message (no_details_flag ? "Files %s and %s differ\n" - : "Binary files %s and %s differ\n", - filevec[0].name, filevec[1].name); -} - -/* Report the differences of two files. DEPTH is the current directory - depth. */ -int -diff_2_files (filevec, depth) - struct file_data filevec[]; - int depth; -{ - int diags; - int i; - struct change *e, *p; - struct change *script; - int changes; - - - /* If we have detected that either file is binary, - compare the two files as binary. This can happen - only when the first chunk is read. - Also, --brief without any --ignore-* options means - we can speed things up by treating the files as binary. */ - - if (read_files (filevec, no_details_flag & ~ignore_some_changes)) - { - /* Files with different lengths must be different. */ - if (filevec[0].stat.st_size != filevec[1].stat.st_size - && (filevec[0].desc < 0 || S_ISREG (filevec[0].stat.st_mode)) - && (filevec[1].desc < 0 || S_ISREG (filevec[1].stat.st_mode))) - changes = 1; - - /* Standard input equals itself. */ - else if (filevec[0].desc == filevec[1].desc) - changes = 0; - - else - /* Scan both files, a buffer at a time, looking for a difference. */ - { - /* Allocate same-sized buffers for both files. */ - size_t buffer_size = buffer_lcm (STAT_BLOCKSIZE (filevec[0].stat), - STAT_BLOCKSIZE (filevec[1].stat)); - for (i = 0; i < 2; i++) - filevec[i].buffer = xrealloc (filevec[i].buffer, buffer_size); - - for (;; filevec[0].buffered_chars = filevec[1].buffered_chars = 0) - { - /* Read a buffer's worth from both files. */ - for (i = 0; i < 2; i++) - if (0 <= filevec[i].desc) - while (filevec[i].buffered_chars != buffer_size) - { - int r = read (filevec[i].desc, - filevec[i].buffer - + filevec[i].buffered_chars, - buffer_size - filevec[i].buffered_chars); - if (r == 0) - break; - if (r < 0) - pfatal_with_name (filevec[i].name); - filevec[i].buffered_chars += r; - } - - /* If the buffers differ, the files differ. */ - if (filevec[0].buffered_chars != filevec[1].buffered_chars - || (filevec[0].buffered_chars != 0 - && memcmp (filevec[0].buffer, - filevec[1].buffer, - filevec[0].buffered_chars) != 0)) - { - changes = 1; - break; - } - - /* If we reach end of file, the files are the same. */ - if (filevec[0].buffered_chars != buffer_size) - { - changes = 0; - break; - } - } - } - - briefly_report (changes, filevec); - } - else - { - /* Allocate vectors for the results of comparison: - a flag for each line of each file, saying whether that line - is an insertion or deletion. - Allocate an extra element, always zero, at each end of each vector. */ - - size_t s = filevec[0].buffered_lines + filevec[1].buffered_lines + 4; - filevec[0].changed_flag = xmalloc (s); - bzero (filevec[0].changed_flag, s); - filevec[0].changed_flag++; - filevec[1].changed_flag = filevec[0].changed_flag - + filevec[0].buffered_lines + 2; - - /* Some lines are obviously insertions or deletions - because they don't match anything. Detect them now, and - avoid even thinking about them in the main comparison algorithm. */ - - discard_confusing_lines (filevec); - - /* Now do the main comparison algorithm, considering just the - undiscarded lines. */ - - xvec = filevec[0].undiscarded; - yvec = filevec[1].undiscarded; - diags = filevec[0].nondiscarded_lines + filevec[1].nondiscarded_lines + 3; - fdiag = (int *) xmalloc (diags * (2 * sizeof (int))); - bdiag = fdiag + diags; - fdiag += filevec[1].nondiscarded_lines + 1; - bdiag += filevec[1].nondiscarded_lines + 1; - - /* Set TOO_EXPENSIVE to be approximate square root of input size, - bounded below by 256. */ - too_expensive = 1; - for (i = filevec[0].nondiscarded_lines + filevec[1].nondiscarded_lines; - i != 0; i >>= 2) - too_expensive <<= 1; - too_expensive = max (256, too_expensive); - - files[0] = filevec[0]; - files[1] = filevec[1]; - - compareseq (0, filevec[0].nondiscarded_lines, - 0, filevec[1].nondiscarded_lines, no_discards); - - free (fdiag - (filevec[1].nondiscarded_lines + 1)); - - /* Modify the results slightly to make them prettier - in cases where that can validly be done. */ - - shift_boundaries (filevec); - - /* Get the results of comparison in the form of a chain - of `struct change's -- an edit script. */ - - if (output_style == OUTPUT_ED) - script = build_reverse_script (filevec); - else - script = build_script (filevec); - - /* Set CHANGES if we had any diffs. - If some changes are ignored, we must scan the script to decide. */ - if (ignore_blank_lines_flag || ignore_regexp_list) - { - struct change *next = script; - changes = 0; - - while (next && changes == 0) - { - struct change *this, *end; - int first0, last0, first1, last1, deletes, inserts; - - /* Find a set of changes that belong together. */ - this = next; - end = find_change (next); - - /* Disconnect them from the rest of the changes, making them - a hunk, and remember the rest for next iteration. */ - next = end->link; - end->link = 0; - - /* Determine whether this hunk is really a difference. */ - analyze_hunk (this, &first0, &last0, &first1, &last1, - &deletes, &inserts); - - /* Reconnect the script so it will all be freed properly. */ - end->link = next; - - if (deletes || inserts) - changes = 1; - } - } - else - changes = (script != 0); - - if (no_details_flag) - briefly_report (changes, filevec); - else - { - if (changes || ! no_diff_means_no_output) - { - /* Record info for starting up output, - to be used if and when we have some output to print. */ - setup_output (files[0].name, files[1].name, depth); - - switch (output_style) - { - case OUTPUT_CONTEXT: - print_context_script (script, 0); - break; - - case OUTPUT_UNIFIED: - print_context_script (script, 1); - break; - - case OUTPUT_ED: - print_ed_script (script); - break; - - case OUTPUT_FORWARD_ED: - pr_forward_ed_script (script); - break; - - case OUTPUT_RCS: - print_rcs_script (script); - break; - - case OUTPUT_NORMAL: - print_normal_script (script); - break; - - case OUTPUT_IFDEF: - print_ifdef_script (script); - break; - - case OUTPUT_SDIFF: - print_sdiff_script (script); - } - - finish_output (); - } - } - - free (filevec[0].undiscarded); - - free (filevec[0].changed_flag - 1); - - for (i = 1; i >= 0; --i) - free (filevec[i].equivs); - - for (i = 0; i < 2; ++i) - free (filevec[i].linbuf + filevec[i].linbuf_base); - - for (e = script; e; e = p) - { - p = e->link; - free (e); - } - - if (! ROBUST_OUTPUT_STYLE (output_style)) - for (i = 0; i < 2; ++i) - if (filevec[i].missing_newline) - { - diff_error ("No newline at end of file %s", filevec[i].name, ""); - changes = 2; - } - } - - if (filevec[0].buffer != filevec[1].buffer) - free (filevec[0].buffer); - free (filevec[1].buffer); - - return changes; -} diff --git a/contrib/cvs/diff/cmpbuf.c b/contrib/cvs/diff/cmpbuf.c deleted file mode 100644 index e95a8f98ed9d..000000000000 --- a/contrib/cvs/diff/cmpbuf.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Buffer primitives for comparison operations. - Copyright (C) 1993 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "system.h" -#include "cmpbuf.h" - -/* Least common multiple of two buffer sizes A and B. */ - -size_t -buffer_lcm (a, b) - size_t a, b; -{ - size_t m, n, r; - - /* Yield reasonable values if buffer sizes are zero. */ - if (!a) - return b ? b : 8 * 1024; - if (!b) - return a; - - /* n = gcd (a, b) */ - for (m = a, n = b; (r = m % n) != 0; m = n, n = r) - continue; - - return a/n * b; -} diff --git a/contrib/cvs/diff/cmpbuf.h b/contrib/cvs/diff/cmpbuf.h deleted file mode 100644 index e3852b7bd4f4..000000000000 --- a/contrib/cvs/diff/cmpbuf.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Buffer primitives for comparison operations. - Copyright (C) 1993 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -size_t buffer_lcm PARAMS((size_t, size_t)); diff --git a/contrib/cvs/diff/context.c b/contrib/cvs/diff/context.c deleted file mode 100644 index 14f950c52699..000000000000 --- a/contrib/cvs/diff/context.c +++ /dev/null @@ -1,468 +0,0 @@ -/* Context-format output routines for GNU DIFF. - Copyright (C) 1988,1989,1991,1992,1993,1994 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "diff.h" - -static struct change *find_hunk PARAMS((struct change *)); -static void find_function PARAMS((struct file_data const *, int, char const **, size_t *)); -static void mark_ignorable PARAMS((struct change *)); -static void pr_context_hunk PARAMS((struct change *)); -static void pr_unidiff_hunk PARAMS((struct change *)); -static void print_context_label PARAMS ((char const *, struct file_data *, char const *)); -static void print_context_number_range PARAMS((struct file_data const *, int, int)); -static void print_unidiff_number_range PARAMS((struct file_data const *, int, int)); - -/* Last place find_function started searching from. */ -static int find_function_last_search; - -/* The value find_function returned when it started searching there. */ -static int find_function_last_match; - -/* Print a label for a context diff, with a file name and date or a label. */ - -static void -print_context_label (mark, inf, label) - char const *mark; - struct file_data *inf; - char const *label; -{ - if (label) - fprintf (outfile, "%s %s\n", mark, label); - else - { - char const *ct = ctime (&inf->stat.st_mtime); - if (!ct) - ct = "?\n"; - /* See Posix.2 section 4.17.6.1.4 for this format. */ - fprintf (outfile, "%s %s\t%s", mark, inf->name, ct); - } -} - -/* Print a header for a context diff, with the file names and dates. */ - -void -print_context_header (inf, unidiff_flag) - struct file_data inf[]; - int unidiff_flag; -{ - if (unidiff_flag) - { - print_context_label ("---", &inf[0], file_label[0]); - print_context_label ("+++", &inf[1], file_label[1]); - } - else - { - print_context_label ("***", &inf[0], file_label[0]); - print_context_label ("---", &inf[1], file_label[1]); - } -} - -/* Print an edit script in context format. */ - -void -print_context_script (script, unidiff_flag) - struct change *script; - int unidiff_flag; -{ - if (ignore_blank_lines_flag || ignore_regexp_list) - mark_ignorable (script); - else - { - struct change *e; - for (e = script; e; e = e->link) - e->ignore = 0; - } - - find_function_last_search = - files[0].prefix_lines; - find_function_last_match = find_function_last_search - 1; - - if (unidiff_flag) - print_script (script, find_hunk, pr_unidiff_hunk); - else - print_script (script, find_hunk, pr_context_hunk); -} - -/* Print a pair of line numbers with a comma, translated for file FILE. - If the second number is not greater, use the first in place of it. - - Args A and B are internal line numbers. - We print the translated (real) line numbers. */ - -static void -print_context_number_range (file, a, b) - struct file_data const *file; - int a, b; -{ - int trans_a, trans_b; - translate_range (file, a, b, &trans_a, &trans_b); - - /* Note: we can have B < A in the case of a range of no lines. - In this case, we should print the line number before the range, - which is B. */ - if (trans_b > trans_a) - fprintf (outfile, "%d,%d", trans_a, trans_b); - else - fprintf (outfile, "%d", trans_b); -} - -/* Print a portion of an edit script in context format. - HUNK is the beginning of the portion to be printed. - The end is marked by a `link' that has been nulled out. - - Prints out lines from both files, and precedes each - line with the appropriate flag-character. */ - -static void -pr_context_hunk (hunk) - struct change *hunk; -{ - int first0, last0, first1, last1, show_from, show_to, i; - struct change *next; - char const *prefix; - char const *function; - size_t function_length; - FILE *out; - - /* Determine range of line numbers involved in each file. */ - - analyze_hunk (hunk, &first0, &last0, &first1, &last1, &show_from, &show_to); - - if (!show_from && !show_to) - return; - - /* Include a context's width before and after. */ - - i = - files[0].prefix_lines; - first0 = max (first0 - context, i); - first1 = max (first1 - context, i); - last0 = min (last0 + context, files[0].valid_lines - 1); - last1 = min (last1 + context, files[1].valid_lines - 1); - - /* If desired, find the preceding function definition line in file 0. */ - function = 0; - if (function_regexp_list) - find_function (&files[0], first0, &function, &function_length); - - begin_output (); - out = outfile; - - /* If we looked for and found a function this is part of, - include its name in the header of the diff section. */ - fprintf (out, "***************"); - - if (function) - { - fprintf (out, " "); - fwrite (function, 1, min (function_length - 1, 40), out); - } - - fprintf (out, "\n*** "); - print_context_number_range (&files[0], first0, last0); - fprintf (out, " ****\n"); - - if (show_from) - { - next = hunk; - - for (i = first0; i <= last0; i++) - { - /* Skip past changes that apply (in file 0) - only to lines before line I. */ - - while (next && next->line0 + next->deleted <= i) - next = next->link; - - /* Compute the marking for line I. */ - - prefix = " "; - if (next && next->line0 <= i) - /* The change NEXT covers this line. - If lines were inserted here in file 1, this is "changed". - Otherwise it is "deleted". */ - prefix = (next->inserted > 0 ? "!" : "-"); - - print_1_line (prefix, &files[0].linbuf[i]); - } - } - - fprintf (out, "--- "); - print_context_number_range (&files[1], first1, last1); - fprintf (out, " ----\n"); - - if (show_to) - { - next = hunk; - - for (i = first1; i <= last1; i++) - { - /* Skip past changes that apply (in file 1) - only to lines before line I. */ - - while (next && next->line1 + next->inserted <= i) - next = next->link; - - /* Compute the marking for line I. */ - - prefix = " "; - if (next && next->line1 <= i) - /* The change NEXT covers this line. - If lines were deleted here in file 0, this is "changed". - Otherwise it is "inserted". */ - prefix = (next->deleted > 0 ? "!" : "+"); - - print_1_line (prefix, &files[1].linbuf[i]); - } - } -} - -/* Print a pair of line numbers with a comma, translated for file FILE. - If the second number is smaller, use the first in place of it. - If the numbers are equal, print just one number. - - Args A and B are internal line numbers. - We print the translated (real) line numbers. */ - -static void -print_unidiff_number_range (file, a, b) - struct file_data const *file; - int a, b; -{ - int trans_a, trans_b; - translate_range (file, a, b, &trans_a, &trans_b); - - /* Note: we can have B < A in the case of a range of no lines. - In this case, we should print the line number before the range, - which is B. */ - if (trans_b <= trans_a) - fprintf (outfile, trans_b == trans_a ? "%d" : "%d,0", trans_b); - else - fprintf (outfile, "%d,%d", trans_a, trans_b - trans_a + 1); -} - -/* Print a portion of an edit script in unidiff format. - HUNK is the beginning of the portion to be printed. - The end is marked by a `link' that has been nulled out. - - Prints out lines from both files, and precedes each - line with the appropriate flag-character. */ - -static void -pr_unidiff_hunk (hunk) - struct change *hunk; -{ - int first0, last0, first1, last1, show_from, show_to, i, j, k; - struct change *next; - char const *function; - size_t function_length; - FILE *out; - - /* Determine range of line numbers involved in each file. */ - - analyze_hunk (hunk, &first0, &last0, &first1, &last1, &show_from, &show_to); - - if (!show_from && !show_to) - return; - - /* Include a context's width before and after. */ - - i = - files[0].prefix_lines; - first0 = max (first0 - context, i); - first1 = max (first1 - context, i); - last0 = min (last0 + context, files[0].valid_lines - 1); - last1 = min (last1 + context, files[1].valid_lines - 1); - - /* If desired, find the preceding function definition line in file 0. */ - function = 0; - if (function_regexp_list) - find_function (&files[0], first0, &function, &function_length); - - begin_output (); - out = outfile; - - fprintf (out, "@@ -"); - print_unidiff_number_range (&files[0], first0, last0); - fprintf (out, " +"); - print_unidiff_number_range (&files[1], first1, last1); - fprintf (out, " @@"); - - /* If we looked for and found a function this is part of, - include its name in the header of the diff section. */ - - if (function) - { - putc (' ', out); - fwrite (function, 1, min (function_length - 1, 40), out); - } - putc ('\n', out); - - next = hunk; - i = first0; - j = first1; - - while (i <= last0 || j <= last1) - { - - /* If the line isn't a difference, output the context from file 0. */ - - if (!next || i < next->line0) - { - putc (tab_align_flag ? '\t' : ' ', out); - print_1_line (0, &files[0].linbuf[i++]); - j++; - } - else - { - /* For each difference, first output the deleted part. */ - - k = next->deleted; - while (k--) - { - putc ('-', out); - if (tab_align_flag) - putc ('\t', out); - print_1_line (0, &files[0].linbuf[i++]); - } - - /* Then output the inserted part. */ - - k = next->inserted; - while (k--) - { - putc ('+', out); - if (tab_align_flag) - putc ('\t', out); - print_1_line (0, &files[1].linbuf[j++]); - } - - /* We're done with this hunk, so on to the next! */ - - next = next->link; - } - } -} - -/* Scan a (forward-ordered) edit script for the first place that more than - 2*CONTEXT unchanged lines appear, and return a pointer - to the `struct change' for the last change before those lines. */ - -static struct change * -find_hunk (start) - struct change *start; -{ - struct change *prev; - int top0, top1; - int thresh; - - do - { - /* Compute number of first line in each file beyond this changed. */ - top0 = start->line0 + start->deleted; - top1 = start->line1 + start->inserted; - prev = start; - start = start->link; - /* Threshold distance is 2*CONTEXT between two non-ignorable changes, - but only CONTEXT if one is ignorable. */ - thresh = ((prev->ignore || (start && start->ignore)) - ? context - : 2 * context + 1); - /* It is not supposed to matter which file we check in the end-test. - If it would matter, crash. */ - if (start && start->line0 - top0 != start->line1 - top1) - abort (); - } while (start - /* Keep going if less than THRESH lines - elapse before the affected line. */ - && start->line0 < top0 + thresh); - - return prev; -} - -/* Set the `ignore' flag properly in each change in SCRIPT. - It should be 1 if all the lines inserted or deleted in that change - are ignorable lines. */ - -static void -mark_ignorable (script) - struct change *script; -{ - while (script) - { - struct change *next = script->link; - int first0, last0, first1, last1, deletes, inserts; - - /* Turn this change into a hunk: detach it from the others. */ - script->link = 0; - - /* Determine whether this change is ignorable. */ - analyze_hunk (script, &first0, &last0, &first1, &last1, &deletes, &inserts); - /* Reconnect the chain as before. */ - script->link = next; - - /* If the change is ignorable, mark it. */ - script->ignore = (!deletes && !inserts); - - /* Advance to the following change. */ - script = next; - } -} - -/* Find the last function-header line in FILE prior to line number LINENUM. - This is a line containing a match for the regexp in `function_regexp'. - Store the address of the line text into LINEP and the length of the - line into LENP. - Do not store anything if no function-header is found. */ - -static void -find_function (file, linenum, linep, lenp) - struct file_data const *file; - int linenum; - char const **linep; - size_t *lenp; -{ - int i = linenum; - int last = find_function_last_search; - find_function_last_search = i; - - while (--i >= last) - { - /* See if this line is what we want. */ - struct regexp_list *r; - char const *line = file->linbuf[i]; - size_t len = file->linbuf[i + 1] - line; - - for (r = function_regexp_list; r; r = r->next) - if (0 <= re_search (&r->buf, line, len, 0, len, 0)) - { - *linep = line; - *lenp = len; - find_function_last_match = i; - return; - } - } - /* If we search back to where we started searching the previous time, - find the line we found last time. */ - if (find_function_last_match >= - file->prefix_lines) - { - i = find_function_last_match; - *linep = file->linbuf[i]; - *lenp = file->linbuf[i + 1] - *linep; - return; - } - return; -} diff --git a/contrib/cvs/diff/diagmeet.note b/contrib/cvs/diff/diagmeet.note deleted file mode 100644 index 8f7242c7356a..000000000000 --- a/contrib/cvs/diff/diagmeet.note +++ /dev/null @@ -1,71 +0,0 @@ -Here is a comparison matrix which shows a case in which -it is possible for the forward and backward scan in `diag' -to meet along a nonzero length of diagonal simultaneous -(so that bdiag[d] and fdiag[d] are not equal) -even though there is no snake on that diagonal at the meeting point. - - - 85 1 1 1 159 1 1 17 - 1 2 3 4 -60 - 1 2 -1 - 2 2 3 4 -71 - 3 3 4 5 -85 - 4 3 4 5 -17 - 5 4 5 -1 - 6 4 5 6 -183 - 7 5 6 7 -10 - 8 6 7 -1 - 9 6 7 8 -12 - 7 8 9 10 -13 - 10 8 9 10 -14 - 10 9 10 -17 - 10 10 -1 - 10 9 10 -1 - 8 10 10 10 -183 - 8 7 9 9 9 -10 - 7 6 8 9 8 8 -1 - 6 5 7 7 -1 - 5 6 6 -1 - 5 5 5 -50 - 5 4 4 4 -1 - 4 3 3 -85 - 5 4 3 2 2 -1 - 2 1 -17 - 5 4 3 2 1 1 -1 - 1 0 - 85 1 1 1 159 1 1 17 - - - - - - - - - diff --git a/contrib/cvs/diff/diff.c b/contrib/cvs/diff/diff.c deleted file mode 100644 index c0e37d7d4212..000000000000 --- a/contrib/cvs/diff/diff.c +++ /dev/null @@ -1,1214 +0,0 @@ -/* GNU DIFF entry routine. - Copyright (C) 1988, 1989, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* GNU DIFF was written by Mike Haertel, David Hayes, - Richard Stallman, Len Tower, and Paul Eggert. */ - -#define GDIFF_MAIN -#include "diff.h" -#include <signal.h> -#include "getopt.h" -#include "fnmatch.h" - -#ifndef DEFAULT_WIDTH -#define DEFAULT_WIDTH 130 -#endif - -#ifndef GUTTER_WIDTH_MINIMUM -#define GUTTER_WIDTH_MINIMUM 3 -#endif - -/* diff.c has a real initialize_main function. */ -#ifdef initialize_main -#undef initialize_main -#endif - -static char const *filetype PARAMS((struct stat const *)); -static char *option_list PARAMS((char **, int)); -static int add_exclude_file PARAMS((char const *)); -static int ck_atoi PARAMS((char const *, int *)); -static int compare_files PARAMS((char const *, char const *, char const *, char const *, int)); -static int specify_format PARAMS((char **, char *)); -static void add_exclude PARAMS((char const *)); -static void add_regexp PARAMS((struct regexp_list **, char const *)); -static void specify_style PARAMS((enum output_style)); -static int try_help PARAMS((char const *)); -static void check_output PARAMS((FILE *)); -static void usage PARAMS((void)); -static void initialize_main PARAMS((int *, char ***)); - -/* Nonzero for -r: if comparing two directories, - compare their common subdirectories recursively. */ - -static int recursive; - -/* For debugging: don't do discard_confusing_lines. */ - -int no_discards; - -#if HAVE_SETMODE -/* I/O mode: nonzero only if using binary input/output. */ -static int binary_I_O; -#endif - -/* Return a string containing the command options with which diff was invoked. - Spaces appear between what were separate ARGV-elements. - There is a space at the beginning but none at the end. - If there were no options, the result is an empty string. - - Arguments: OPTIONVEC, a vector containing separate ARGV-elements, and COUNT, - the length of that vector. */ - -static char * -option_list (optionvec, count) - char **optionvec; /* Was `vector', but that collides on Alliant. */ - int count; -{ - int i; - size_t length = 0; - char *result; - - for (i = 0; i < count; i++) - length += strlen (optionvec[i]) + 1; - - result = xmalloc (length + 1); - result[0] = 0; - - for (i = 0; i < count; i++) - { - strcat (result, " "); - strcat (result, optionvec[i]); - } - - return result; -} - -/* Convert STR to a positive integer, storing the result in *OUT. - If STR is not a valid integer, return -1 (otherwise 0). */ -static int -ck_atoi (str, out) - char const *str; - int *out; -{ - char const *p; - for (p = str; *p; p++) - if (*p < '0' || *p > '9') - return -1; - - *out = atoi (optarg); - return 0; -} - -/* Keep track of excluded file name patterns. */ - -static char const **exclude; -static int exclude_alloc, exclude_count; - -int -excluded_filename (f) - char const *f; -{ - int i; - for (i = 0; i < exclude_count; i++) - if (fnmatch (exclude[i], f, 0) == 0) - return 1; - return 0; -} - -static void -add_exclude (pattern) - char const *pattern; -{ - if (exclude_alloc <= exclude_count) - exclude = (char const **) - (exclude_alloc == 0 - ? xmalloc ((exclude_alloc = 64) * sizeof (*exclude)) - : xrealloc (exclude, (exclude_alloc *= 2) * sizeof (*exclude))); - - exclude[exclude_count++] = pattern; -} - -static int -add_exclude_file (name) - char const *name; -{ - struct file_data f; - char *p, *q, *lim; - - f.name = optarg; - f.desc = (strcmp (optarg, "-") == 0 - ? STDIN_FILENO - : open (optarg, O_RDONLY, 0)); - if (f.desc < 0 || fstat (f.desc, &f.stat) != 0) - return -1; - - sip (&f, 1); - slurp (&f); - - for (p = f.buffer, lim = p + f.buffered_chars; p < lim; p = q) - { - q = (char *) memchr (p, '\n', lim - p); - if (!q) - q = lim; - *q++ = 0; - add_exclude (p); - } - - return close (f.desc); -} - -/* The numbers 129- that appear in the fourth element of some entries - tell the big switch in `diff_run' how to process those options. */ - -static struct option const longopts[] = -{ - {"ignore-blank-lines", 0, 0, 'B'}, - {"context", 2, 0, 'C'}, - {"ifdef", 1, 0, 'D'}, - {"show-function-line", 1, 0, 'F'}, - {"speed-large-files", 0, 0, 'H'}, - {"ignore-matching-lines", 1, 0, 'I'}, - {"label", 1, 0, 'L'}, - {"file-label", 1, 0, 'L'}, /* An alias, no longer recommended */ - {"new-file", 0, 0, 'N'}, - {"entire-new-file", 0, 0, 'N'}, /* An alias, no longer recommended */ - {"unidirectional-new-file", 0, 0, 'P'}, - {"starting-file", 1, 0, 'S'}, - {"initial-tab", 0, 0, 'T'}, - {"width", 1, 0, 'W'}, - {"text", 0, 0, 'a'}, - {"ascii", 0, 0, 'a'}, /* An alias, no longer recommended */ - {"ignore-space-change", 0, 0, 'b'}, - {"minimal", 0, 0, 'd'}, - {"ed", 0, 0, 'e'}, - {"forward-ed", 0, 0, 'f'}, - {"ignore-case", 0, 0, 'i'}, - {"paginate", 0, 0, 'l'}, - {"print", 0, 0, 'l'}, /* An alias, no longer recommended */ - {"rcs", 0, 0, 'n'}, - {"show-c-function", 0, 0, 'p'}, - {"brief", 0, 0, 'q'}, - {"recursive", 0, 0, 'r'}, - {"report-identical-files", 0, 0, 's'}, - {"expand-tabs", 0, 0, 't'}, - {"version", 0, 0, 'v'}, - {"ignore-all-space", 0, 0, 'w'}, - {"exclude", 1, 0, 'x'}, - {"exclude-from", 1, 0, 'X'}, - {"side-by-side", 0, 0, 'y'}, - {"unified", 2, 0, 'U'}, - {"left-column", 0, 0, 129}, - {"suppress-common-lines", 0, 0, 130}, - {"sdiff-merge-assist", 0, 0, 131}, - {"old-line-format", 1, 0, 132}, - {"new-line-format", 1, 0, 133}, - {"unchanged-line-format", 1, 0, 134}, - {"line-format", 1, 0, 135}, - {"old-group-format", 1, 0, 136}, - {"new-group-format", 1, 0, 137}, - {"unchanged-group-format", 1, 0, 138}, - {"changed-group-format", 1, 0, 139}, - {"horizon-lines", 1, 0, 140}, - {"help", 0, 0, 141}, - {"binary", 0, 0, 142}, - {0, 0, 0, 0} -}; - -int -diff_run (argc, argv, out) - int argc; - char *argv[]; - char *out; -{ - int val; - int c; - int prev = -1; - int width = DEFAULT_WIDTH; - int show_c_function = 0; - int optind_old; - - /* Do our initializations. */ - initialize_main (&argc, &argv); - - /* Decode the options. */ - - optind_old = optind; - optind = 0; - while ((c = getopt_long (argc, argv, - "0123456789abBcC:dD:efF:hHiI:lL:nNpPqrsS:tTuU:vwW:x:X:y", - longopts, 0)) != EOF) - { - switch (c) - { - /* All digits combine in decimal to specify the context-size. */ - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '0': - if (context == -1) - context = 0; - /* If a context length has already been specified, - more digits allowed only if they follow right after the others. - Reject two separate runs of digits, or digits after -C. */ - else if (prev < '0' || prev > '9') - fatal ("context length specified twice"); - - context = context * 10 + c - '0'; - break; - - case 'a': - /* Treat all files as text files; never treat as binary. */ - always_text_flag = 1; - break; - - case 'b': - /* Ignore changes in amount of white space. */ - ignore_space_change_flag = 1; - ignore_some_changes = 1; - ignore_some_line_changes = 1; - break; - - case 'B': - /* Ignore changes affecting only blank lines. */ - ignore_blank_lines_flag = 1; - ignore_some_changes = 1; - break; - - case 'C': /* +context[=lines] */ - case 'U': /* +unified[=lines] */ - if (optarg) - { - if (context >= 0) - fatal ("context length specified twice"); - - if (ck_atoi (optarg, &context)) - fatal ("invalid context length argument"); - } - - /* Falls through. */ - case 'c': - /* Make context-style output. */ - specify_style (c == 'U' ? OUTPUT_UNIFIED : OUTPUT_CONTEXT); - break; - - case 'd': - /* Don't discard lines. This makes things slower (sometimes much - slower) but will find a guaranteed minimal set of changes. */ - no_discards = 1; - break; - - case 'D': - /* Make merged #ifdef output. */ - specify_style (OUTPUT_IFDEF); - { - int i, err = 0; - static char const C_ifdef_group_formats[] = - "#ifndef %s\n%%<#endif /* not %s */\n%c#ifdef %s\n%%>#endif /* %s */\n%c%%=%c#ifndef %s\n%%<#else /* %s */\n%%>#endif /* %s */\n"; - char *b = xmalloc (sizeof (C_ifdef_group_formats) - + 7 * strlen(optarg) - 14 /* 7*"%s" */ - - 8 /* 5*"%%" + 3*"%c" */); - sprintf (b, C_ifdef_group_formats, - optarg, optarg, 0, - optarg, optarg, 0, 0, - optarg, optarg, optarg); - for (i = 0; i < 4; i++) - { - err |= specify_format (&group_format[i], b); - b += strlen (b) + 1; - } - if (err) - diff_error ("conflicting #ifdef formats", 0, 0); - } - break; - - case 'e': - /* Make output that is a valid `ed' script. */ - specify_style (OUTPUT_ED); - break; - - case 'f': - /* Make output that looks vaguely like an `ed' script - but has changes in the order they appear in the file. */ - specify_style (OUTPUT_FORWARD_ED); - break; - - case 'F': - /* Show, for each set of changes, the previous line that - matches the specified regexp. Currently affects only - context-style output. */ - add_regexp (&function_regexp_list, optarg); - break; - - case 'h': - /* Split the files into chunks of around 1500 lines - for faster processing. Usually does not change the result. - - This currently has no effect. */ - break; - - case 'H': - /* Turn on heuristics that speed processing of large files - with a small density of changes. */ - heuristic = 1; - break; - - case 'i': - /* Ignore changes in case. */ - ignore_case_flag = 1; - ignore_some_changes = 1; - ignore_some_line_changes = 1; - break; - - case 'I': - /* Ignore changes affecting only lines that match the - specified regexp. */ - add_regexp (&ignore_regexp_list, optarg); - ignore_some_changes = 1; - break; - - case 'l': - /* Pass the output through `pr' to paginate it. */ - paginate_flag = 1; -#if !defined(SIGCHLD) && defined(SIGCLD) -#define SIGCHLD SIGCLD -#endif -#ifdef SIGCHLD - /* Pagination requires forking and waiting, and - System V fork+wait does not work if SIGCHLD is ignored. */ - signal (SIGCHLD, SIG_DFL); -#endif - break; - - case 'L': - /* Specify file labels for `-c' output headers. */ - if (!file_label[0]) - file_label[0] = optarg; - else if (!file_label[1]) - file_label[1] = optarg; - else - fatal ("too many file label options"); - break; - - case 'n': - /* Output RCS-style diffs, like `-f' except that each command - specifies the number of lines affected. */ - specify_style (OUTPUT_RCS); - break; - - case 'N': - /* When comparing directories, if a file appears only in one - directory, treat it as present but empty in the other. */ - entire_new_file_flag = 1; - break; - - case 'p': - /* Make context-style output and show name of last C function. */ - show_c_function = 1; - add_regexp (&function_regexp_list, "^[_a-zA-Z$]"); - break; - - case 'P': - /* When comparing directories, if a file appears only in - the second directory of the two, - treat it as present but empty in the other. */ - unidirectional_new_file_flag = 1; - break; - - case 'q': - no_details_flag = 1; - break; - - case 'r': - /* When comparing directories, - recursively compare any subdirectories found. */ - recursive = 1; - break; - - case 's': - /* Print a message if the files are the same. */ - print_file_same_flag = 1; - break; - - case 'S': - /* When comparing directories, start with the specified - file name. This is used for resuming an aborted comparison. */ - dir_start_file = optarg; - break; - - case 't': - /* Expand tabs to spaces in the output so that it preserves - the alignment of the input files. */ - tab_expand_flag = 1; - break; - - case 'T': - /* Use a tab in the output, rather than a space, before the - text of an input line, so as to keep the proper alignment - in the input line without changing the characters in it. */ - tab_align_flag = 1; - break; - - case 'u': - /* Output the context diff in unidiff format. */ - specify_style (OUTPUT_UNIFIED); - break; - - case 'v': - printf ("diff - GNU diffutils version %s\n", diff_version_string); - return 0; - - case 'w': - /* Ignore horizontal white space when comparing lines. */ - ignore_all_space_flag = 1; - ignore_some_changes = 1; - ignore_some_line_changes = 1; - break; - - case 'x': - add_exclude (optarg); - break; - - case 'X': - if (add_exclude_file (optarg) != 0) - pfatal_with_name (optarg); - break; - - case 'y': - /* Use side-by-side (sdiff-style) columnar output. */ - specify_style (OUTPUT_SDIFF); - break; - - case 'W': - /* Set the line width for OUTPUT_SDIFF. */ - if (ck_atoi (optarg, &width) || width <= 0) - fatal ("column width must be a positive integer"); - break; - - case 129: - sdiff_left_only = 1; - break; - - case 130: - sdiff_skip_common_lines = 1; - break; - - case 131: - /* sdiff-style columns output. */ - specify_style (OUTPUT_SDIFF); - sdiff_help_sdiff = 1; - break; - - case 132: - case 133: - case 134: - specify_style (OUTPUT_IFDEF); - if (specify_format (&line_format[c - 132], optarg) != 0) - diff_error ("conflicting line format", 0, 0); - break; - - case 135: - specify_style (OUTPUT_IFDEF); - { - int i, err = 0; - for (i = 0; i < sizeof (line_format) / sizeof (*line_format); i++) - err |= specify_format (&line_format[i], optarg); - if (err) - diff_error ("conflicting line format", 0, 0); - } - break; - - case 136: - case 137: - case 138: - case 139: - specify_style (OUTPUT_IFDEF); - if (specify_format (&group_format[c - 136], optarg) != 0) - diff_error ("conflicting group format", 0, 0); - break; - - case 140: - if (ck_atoi (optarg, &horizon_lines) || horizon_lines < 0) - fatal ("horizon must be a nonnegative integer"); - break; - - case 141: - usage (); - check_output (stdout); - return 0; - - case 142: - /* Use binary I/O when reading and writing data. - On Posix hosts, this has no effect. */ -#if HAVE_SETMODE - binary_I_O = 1; -# if 0 - /* Because this code is leftover from pre-library days, - there is no way to set stdout back to the default mode - when we are done. As it turns out, I think the only - parts of CVS that pass out == NULL, and thus cause diff - to write to stdout, are "cvs diff" and "cvs rdiff". So - I'm not going to worry about this too much yet. */ - setmode (STDOUT_FILENO, O_BINARY); -# else - if (out == NULL) - error (0, 0, "warning: did not set stdout to binary mode"); -# endif -#endif - break; - - default: - return try_help (0); - } - prev = c; - } - - if (argc - optind != 2) - return try_help (argc - optind < 2 ? "missing operand" : "extra operand"); - - { - /* - * We maximize first the half line width, and then the gutter width, - * according to the following constraints: - * 1. Two half lines plus a gutter must fit in a line. - * 2. If the half line width is nonzero: - * a. The gutter width is at least GUTTER_WIDTH_MINIMUM. - * b. If tabs are not expanded to spaces, - * a half line plus a gutter is an integral number of tabs, - * so that tabs in the right column line up. - */ - int t = tab_expand_flag ? 1 : TAB_WIDTH; - int off = (width + t + GUTTER_WIDTH_MINIMUM) / (2*t) * t; - sdiff_half_width = max (0, min (off - GUTTER_WIDTH_MINIMUM, width - off)), - sdiff_column2_offset = sdiff_half_width ? off : width; - } - - if (show_c_function && output_style != OUTPUT_UNIFIED) - specify_style (OUTPUT_CONTEXT); - - if (output_style != OUTPUT_CONTEXT && output_style != OUTPUT_UNIFIED) - context = 0; - else if (context == -1) - /* Default amount of context for -c. */ - context = 3; - - if (output_style == OUTPUT_IFDEF) - { - /* Format arrays are char *, not char const *, - because integer formats are temporarily modified. - But it is safe to assign a constant like "%=" to a format array, - since "%=" does not format any integers. */ - int i; - for (i = 0; i < sizeof (line_format) / sizeof (*line_format); i++) - if (!line_format[i]) - line_format[i] = "%l\n"; - if (!group_format[OLD]) - group_format[OLD] - = group_format[UNCHANGED] ? group_format[UNCHANGED] : "%<"; - if (!group_format[NEW]) - group_format[NEW] - = group_format[UNCHANGED] ? group_format[UNCHANGED] : "%>"; - if (!group_format[UNCHANGED]) - group_format[UNCHANGED] = "%="; - if (!group_format[CHANGED]) - group_format[CHANGED] = concat (group_format[OLD], - group_format[NEW], ""); - } - - no_diff_means_no_output = - (output_style == OUTPUT_IFDEF ? - (!*group_format[UNCHANGED] - || (strcmp (group_format[UNCHANGED], "%=") == 0 - && !*line_format[UNCHANGED])) - : output_style == OUTPUT_SDIFF ? sdiff_skip_common_lines : 1); - - switch_string = option_list (argv + 1, optind - 1); - - if (out == NULL) - outfile = stdout; - else - { -#if HAVE_SETMODE - /* A diff which is full of ^Z and such isn't going to work - very well in text mode. */ - if (binary_I_O) - outfile = fopen (out, "wb"); - else -#endif - outfile = fopen (out, "w"); - if (outfile == NULL) - { - perror_with_name ("could not open output file"); - return 2; - } - } - - /* Set the jump buffer, so that diff may abort execution without - terminating the process. */ - if ((val = setjmp (diff_abort_buf)) != 0) - { - optind = optind_old; - if (outfile != stdout) - fclose (outfile); - return val; - } - - val = compare_files (0, argv[optind], 0, argv[optind + 1], 0); - - /* Print any messages that were saved up for last. */ - print_message_queue (); - - free (switch_string); - - optind = optind_old; - check_output (outfile); - if (outfile != stdout) - if (fclose (outfile) != 0) - perror ("close error on output file"); - return val; -} - -/* Add the compiled form of regexp PATTERN to REGLIST. */ - -static void -add_regexp (reglist, pattern) - struct regexp_list **reglist; - char const *pattern; -{ - struct regexp_list *r; - char const *m; - - r = (struct regexp_list *) xmalloc (sizeof (*r)); - bzero (r, sizeof (*r)); - r->buf.fastmap = xmalloc (256); - m = re_compile_pattern (pattern, strlen (pattern), &r->buf); - if (m != 0) - diff_error ("%s: %s", pattern, m); - - /* Add to the start of the list, since it's easier than the end. */ - r->next = *reglist; - *reglist = r; -} - -static int -try_help (reason) - char const *reason; -{ - if (reason) - diff_error ("%s", reason, 0); - diff_error ("Try `%s --help' for more information.", diff_program_name, 0); - return 2; -} - -static void -check_output (file) - FILE *file; -{ - if (ferror (file) || fflush (file) != 0) - fatal ("write error"); -} - -static char const * const option_help[] = { -"-i --ignore-case Consider upper- and lower-case to be the same.", -"-w --ignore-all-space Ignore all white space.", -"-b --ignore-space-change Ignore changes in the amount of white space.", -"-B --ignore-blank-lines Ignore changes whose lines are all blank.", -"-I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE.", -#if HAVE_SETMODE -"--binary Read and write data in binary mode.", -#endif -"-a --text Treat all files as text.\n", -"-c -C NUM --context[=NUM] Output NUM (default 2) lines of copied context.", -"-u -U NUM --unified[=NUM] Output NUM (default 2) lines of unified context.", -" -NUM Use NUM context lines.", -" -L LABEL --label LABEL Use LABEL instead of file name.", -" -p --show-c-function Show which C function each change is in.", -" -F RE --show-function-line=RE Show the most recent line matching RE.", -"-q --brief Output only whether files differ.", -"-e --ed Output an ed script.", -"-n --rcs Output an RCS format diff.", -"-y --side-by-side Output in two columns.", -" -w NUM --width=NUM Output at most NUM (default 130) characters per line.", -" --left-column Output only the left column of common lines.", -" --suppress-common-lines Do not output common lines.", -"-DNAME --ifdef=NAME Output merged file to show `#ifdef NAME' diffs.", -"--GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT.", -"--line-format=LFMT Similar, but format all input lines with LFMT.", -"--LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT.", -" LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'.", -" GFMT may contain:", -" %< lines from FILE1", -" %> lines from FILE2", -" %= lines common to FILE1 and FILE2", -" %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER", -" LETTERs are as follows for new group, lower case for old group:", -" F first line number", -" L last line number", -" N number of lines = L-F+1", -" E F-1", -" M L+1", -" LFMT may contain:", -" %L contents of line", -" %l contents of line, excluding any trailing newline", -" %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number", -" Either GFMT or LFMT may contain:", -" %% %", -" %c'C' the single character C", -" %c'\\OOO' the character with octal code OOO\n", -"-l --paginate Pass the output through `pr' to paginate it.", -"-t --expand-tabs Expand tabs to spaces in output.", -"-T --initial-tab Make tabs line up by prepending a tab.\n", -"-r --recursive Recursively compare any subdirectories found.", -"-N --new-file Treat absent files as empty.", -"-P --unidirectional-new-file Treat absent first files as empty.", -"-s --report-identical-files Report when two files are the same.", -"-x PAT --exclude=PAT Exclude files that match PAT.", -"-X FILE --exclude-from=FILE Exclude files that match any pattern in FILE.", -"-S FILE --starting-file=FILE Start with FILE when comparing directories.\n", -"--horizon-lines=NUM Keep NUM lines of the common prefix and suffix.", -"-d --minimal Try hard to find a smaller set of changes.", -"-H --speed-large-files Assume large files and many scattered small changes.\n", -"-v --version Output version info.", -"--help Output this help.", -0 -}; - -static void -usage () -{ - char const * const *p; - - printf ("Usage: %s [OPTION]... FILE1 FILE2\n\n", diff_program_name); - for (p = option_help; *p; p++) - printf (" %s\n", *p); - printf ("\nIf FILE1 or FILE2 is `-', read standard input.\n"); -} - -static int -specify_format (var, value) - char **var; - char *value; -{ - int err = *var ? strcmp (*var, value) : 0; - *var = value; - return err; -} - -static void -specify_style (style) - enum output_style style; -{ - if (output_style != OUTPUT_NORMAL - && output_style != style) - diff_error ("conflicting specifications of output style", 0, 0); - output_style = style; -} - -static char const * -filetype (st) - struct stat const *st; -{ - /* See Posix.2 section 4.17.6.1.1 and Table 5-1 for these formats. - To keep diagnostics grammatical, the returned string must start - with a consonant. */ - - if (S_ISREG (st->st_mode)) - { - if (st->st_size == 0) - return "regular empty file"; - /* Posix.2 section 5.14.2 seems to suggest that we must read the file - and guess whether it's C, Fortran, etc., but this is somewhat useless - and doesn't reflect historical practice. We're allowed to guess - wrong, so we don't bother to read the file. */ - return "regular file"; - } - if (S_ISDIR (st->st_mode)) return "directory"; - - /* other Posix.1 file types */ -#ifdef S_ISBLK - if (S_ISBLK (st->st_mode)) return "block special file"; -#endif -#ifdef S_ISCHR - if (S_ISCHR (st->st_mode)) return "character special file"; -#endif -#ifdef S_ISFIFO - if (S_ISFIFO (st->st_mode)) return "fifo"; -#endif - - /* other Posix.1b file types */ -#ifdef S_TYPEISMQ - if (S_TYPEISMQ (st)) return "message queue"; -#endif -#ifdef S_TYPEISSEM - if (S_TYPEISSEM (st)) return "semaphore"; -#endif -#ifdef S_TYPEISSHM - if (S_TYPEISSHM (st)) return "shared memory object"; -#endif - - /* other popular file types */ - /* S_ISLNK is impossible with `fstat' and `stat'. */ -#ifdef S_ISSOCK - if (S_ISSOCK (st->st_mode)) return "socket"; -#endif - - return "weird file"; -} - -/* Compare two files (or dirs) with specified names - DIR0/NAME0 and DIR1/NAME1, at level DEPTH in directory recursion. - (if DIR0 is 0, then the name is just NAME0, etc.) - This is self-contained; it opens the files and closes them. - - Value is 0 if files are the same, 1 if different, - 2 if there is a problem opening them. */ - -static int -compare_files (dir0, name0, dir1, name1, depth) - char const *dir0, *dir1; - char const *name0, *name1; - int depth; -{ - struct file_data inf[2]; - register int i; - int val; - int same_files; - int failed = 0; - char *free0 = 0, *free1 = 0; - - /* If this is directory comparison, perhaps we have a file - that exists only in one of the directories. - If so, just print a message to that effect. */ - - if (! ((name0 != 0 && name1 != 0) - || (unidirectional_new_file_flag && name1 != 0) - || entire_new_file_flag)) - { - char const *name = name0 == 0 ? name1 : name0; - char const *dir = name0 == 0 ? dir1 : dir0; - message ("Only in %s: %s\n", dir, name); - /* Return 1 so that diff_dirs will return 1 ("some files differ"). */ - return 1; - } - - bzero (inf, sizeof (inf)); - - /* Mark any nonexistent file with -1 in the desc field. */ - /* Mark unopened files (e.g. directories) with -2. */ - - inf[0].desc = name0 == 0 ? -1 : -2; - inf[1].desc = name1 == 0 ? -1 : -2; - - /* Now record the full name of each file, including nonexistent ones. */ - - if (name0 == 0) - name0 = name1; - if (name1 == 0) - name1 = name0; - - inf[0].name = dir0 == 0 ? name0 : (free0 = dir_file_pathname (dir0, name0)); - inf[1].name = dir1 == 0 ? name1 : (free1 = dir_file_pathname (dir1, name1)); - - /* Stat the files. Record whether they are directories. */ - - for (i = 0; i <= 1; i++) - { - if (inf[i].desc != -1) - { - int stat_result; - - if (i && filename_cmp (inf[i].name, inf[0].name) == 0) - { - inf[i].stat = inf[0].stat; - stat_result = 0; - } - else if (strcmp (inf[i].name, "-") == 0) - { - inf[i].desc = STDIN_FILENO; - stat_result = fstat (STDIN_FILENO, &inf[i].stat); - if (stat_result == 0 && S_ISREG (inf[i].stat.st_mode)) - { - off_t pos = lseek (STDIN_FILENO, (off_t) 0, SEEK_CUR); - if (pos == -1) - stat_result = -1; - else - { - if (pos <= inf[i].stat.st_size) - inf[i].stat.st_size -= pos; - else - inf[i].stat.st_size = 0; - /* Posix.2 4.17.6.1.4 requires current time for stdin. */ - time (&inf[i].stat.st_mtime); - } - } - } - else - stat_result = stat (inf[i].name, &inf[i].stat); - - if (stat_result != 0) - { - perror_with_name (inf[i].name); - failed = 1; - } - else - { - inf[i].dir_p = S_ISDIR (inf[i].stat.st_mode) && inf[i].desc != 0; - if (inf[1 - i].desc == -1) - { - inf[1 - i].dir_p = inf[i].dir_p; - inf[1 - i].stat.st_mode = inf[i].stat.st_mode; - } - } - } - } - - if (! failed && depth == 0 && inf[0].dir_p != inf[1].dir_p) - { - /* If one is a directory, and it was specified in the command line, - use the file in that dir with the other file's basename. */ - - int fnm_arg = inf[0].dir_p; - int dir_arg = 1 - fnm_arg; - char const *fnm = inf[fnm_arg].name; - char const *dir = inf[dir_arg].name; - char const *p = filename_lastdirchar (fnm); - char const *filename = inf[dir_arg].name - = dir_file_pathname (dir, p ? p + 1 : fnm); - - if (strcmp (fnm, "-") == 0) - fatal ("can't compare - to a directory"); - - if (stat (filename, &inf[dir_arg].stat) != 0) - { - perror_with_name (filename); - failed = 1; - } - else - inf[dir_arg].dir_p = S_ISDIR (inf[dir_arg].stat.st_mode); - } - - if (failed) - { - - /* If either file should exist but does not, return 2. */ - - val = 2; - - } - else if ((same_files = inf[0].desc != -1 && inf[1].desc != -1 - && 0 < same_file (&inf[0].stat, &inf[1].stat)) - && no_diff_means_no_output) - { - /* The two named files are actually the same physical file. - We know they are identical without actually reading them. */ - - val = 0; - } - else if (inf[0].dir_p & inf[1].dir_p) - { - if (output_style == OUTPUT_IFDEF) - fatal ("-D option not supported with directories"); - - /* If both are directories, compare the files in them. */ - - if (depth > 0 && !recursive) - { - /* But don't compare dir contents one level down - unless -r was specified. */ - message ("Common subdirectories: %s and %s\n", - inf[0].name, inf[1].name); - val = 0; - } - else - { - val = diff_dirs (inf, compare_files, depth); - } - - } - else if ((inf[0].dir_p | inf[1].dir_p) - || (depth > 0 - && (! S_ISREG (inf[0].stat.st_mode) - || ! S_ISREG (inf[1].stat.st_mode)))) - { - /* Perhaps we have a subdirectory that exists only in one directory. - If so, just print a message to that effect. */ - - if (inf[0].desc == -1 || inf[1].desc == -1) - { - if ((inf[0].dir_p | inf[1].dir_p) - && recursive - && (entire_new_file_flag - || (unidirectional_new_file_flag && inf[0].desc == -1))) - val = diff_dirs (inf, compare_files, depth); - else - { - char const *dir = (inf[0].desc == -1) ? dir1 : dir0; - /* See Posix.2 section 4.17.6.1.1 for this format. */ - message ("Only in %s: %s\n", dir, name0); - val = 1; - } - } - else - { - /* We have two files that are not to be compared. */ - - /* See Posix.2 section 4.17.6.1.1 for this format. */ - message5 ("File %s is a %s while file %s is a %s\n", - inf[0].name, filetype (&inf[0].stat), - inf[1].name, filetype (&inf[1].stat)); - - /* This is a difference. */ - val = 1; - } - } - else if ((no_details_flag & ~ignore_some_changes) - && inf[0].stat.st_size != inf[1].stat.st_size - && (inf[0].desc == -1 || S_ISREG (inf[0].stat.st_mode)) - && (inf[1].desc == -1 || S_ISREG (inf[1].stat.st_mode))) - { - message ("Files %s and %s differ\n", inf[0].name, inf[1].name); - val = 1; - } - else - { - /* Both exist and neither is a directory. */ - - /* Open the files and record their descriptors. */ - - if (inf[0].desc == -2) - if ((inf[0].desc = open (inf[0].name, O_RDONLY, 0)) < 0) - { - perror_with_name (inf[0].name); - failed = 1; - } - if (inf[1].desc == -2) - if (same_files) - inf[1].desc = inf[0].desc; - else if ((inf[1].desc = open (inf[1].name, O_RDONLY, 0)) < 0) - { - perror_with_name (inf[1].name); - failed = 1; - } - -#if HAVE_SETMODE - if (binary_I_O) - for (i = 0; i <= 1; i++) - if (0 <= inf[i].desc) - setmode (inf[i].desc, O_BINARY); -#endif - - /* Compare the files, if no error was found. */ - - val = failed ? 2 : diff_2_files (inf, depth); - - /* Close the file descriptors. */ - - if (inf[0].desc >= 0 && close (inf[0].desc) != 0) - { - perror_with_name (inf[0].name); - val = 2; - } - if (inf[1].desc >= 0 && inf[0].desc != inf[1].desc - && close (inf[1].desc) != 0) - { - perror_with_name (inf[1].name); - val = 2; - } - } - - /* Now the comparison has been done, if no error prevented it, - and VAL is the value this function will return. */ - - if (val == 0 && !inf[0].dir_p) - { - if (print_file_same_flag) - message ("Files %s and %s are identical\n", - inf[0].name, inf[1].name); - } - else - fflush (outfile); - - if (free0) - free (free0); - if (free1) - free (free1); - - return val; -} - -/* Initialize status variables and flag variables used in libdiff, - to permit repeated calls to diff_run. */ - -static void -initialize_main (argcp, argvp) - int *argcp; - char ***argvp; -{ - /* These variables really must be reset each time diff_run is called. */ - output_style = OUTPUT_NORMAL; - context = -1; - file_label[0] = NULL; - file_label[1] = NULL; - diff_program_name = (*argvp)[0]; - outfile = NULL; - - /* Reset these also, just for safety's sake. (If one invocation turns - on ignore_case_flag, it must be turned off before diff_run is called - again. But it is possible to make many diffs before encountering - such a problem. */ - recursive = 0; - no_discards = 0; -#if HAVE_SETMODE - binary_I_O = 0; -#endif - no_diff_means_no_output = 0; - always_text_flag = 0; - horizon_lines = 0; - ignore_space_change_flag = 0; - ignore_all_space_flag = 0; - ignore_blank_lines_flag = 0; - ignore_some_line_changes = 0; - ignore_some_changes = 0; - ignore_case_flag = 0; - function_regexp_list = NULL; - ignore_regexp_list = NULL; - no_details_flag = 0; - print_file_same_flag = 0; - tab_align_flag = 0; - tab_expand_flag = 0; - dir_start_file = NULL; - entire_new_file_flag = 0; - unidirectional_new_file_flag = 0; - paginate_flag = 0; - bzero (group_format, sizeof (group_format)); - bzero (line_format, sizeof (line_format)); - sdiff_help_sdiff = 0; - sdiff_left_only = 0; - sdiff_skip_common_lines = 0; - sdiff_half_width = 0; - sdiff_column2_offset = 0; - switch_string = NULL; - heuristic = 0; - bzero (files, sizeof (files)); -} diff --git a/contrib/cvs/diff/diff.h b/contrib/cvs/diff/diff.h deleted file mode 100644 index fba26a7bf076..000000000000 --- a/contrib/cvs/diff/diff.h +++ /dev/null @@ -1,345 +0,0 @@ -/* Shared definitions for GNU DIFF - Copyright (C) 1988, 89, 91, 92, 93, 97 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "system.h" -#include <stdio.h> -#include <setjmp.h> -#include "regex.h" - -#define TAB_WIDTH 8 - -/* Variables for command line options */ - -#ifndef GDIFF_MAIN -#define EXTERN extern -#else -#define EXTERN -#endif - -enum output_style { - /* Default output style. */ - OUTPUT_NORMAL, - /* Output the differences with lines of context before and after (-c). */ - OUTPUT_CONTEXT, - /* Output the differences in a unified context diff format (-u). */ - OUTPUT_UNIFIED, - /* Output the differences as commands suitable for `ed' (-e). */ - OUTPUT_ED, - /* Output the diff as a forward ed script (-f). */ - OUTPUT_FORWARD_ED, - /* Like -f, but output a count of changed lines in each "command" (-n). */ - OUTPUT_RCS, - /* Output merged #ifdef'd file (-D). */ - OUTPUT_IFDEF, - /* Output sdiff style (-y). */ - OUTPUT_SDIFF -}; - -/* True for output styles that are robust, - i.e. can handle a file that ends in a non-newline. */ -#define ROBUST_OUTPUT_STYLE(S) ((S) != OUTPUT_ED && (S) != OUTPUT_FORWARD_ED) - -EXTERN enum output_style output_style; - -/* Nonzero if output cannot be generated for identical files. */ -EXTERN int no_diff_means_no_output; - -/* Number of lines of context to show in each set of diffs. - This is zero when context is not to be shown. */ -EXTERN int context; - -/* Consider all files as text files (-a). - Don't interpret codes over 0177 as implying a "binary file". */ -EXTERN int always_text_flag; - -/* Number of lines to keep in identical prefix and suffix. */ -EXTERN int horizon_lines; - -/* Ignore changes in horizontal white space (-b). */ -EXTERN int ignore_space_change_flag; - -/* Ignore all horizontal white space (-w). */ -EXTERN int ignore_all_space_flag; - -/* Ignore changes that affect only blank lines (-B). */ -EXTERN int ignore_blank_lines_flag; - -/* 1 if lines may match even if their contents do not match exactly. - This depends on various options. */ -EXTERN int ignore_some_line_changes; - -/* 1 if files may match even if their contents are not byte-for-byte identical. - This depends on various options. */ -EXTERN int ignore_some_changes; - -/* Ignore differences in case of letters (-i). */ -EXTERN int ignore_case_flag; - -/* File labels for `-c' output headers (-L). */ -EXTERN char *file_label[2]; - -struct regexp_list -{ - struct re_pattern_buffer buf; - struct regexp_list *next; -}; - -/* Regexp to identify function-header lines (-F). */ -EXTERN struct regexp_list *function_regexp_list; - -/* Ignore changes that affect only lines matching this regexp (-I). */ -EXTERN struct regexp_list *ignore_regexp_list; - -/* Say only whether files differ, not how (-q). */ -EXTERN int no_details_flag; - -/* Report files compared that match (-s). - Normally nothing is output when that happens. */ -EXTERN int print_file_same_flag; - -/* Output the differences with exactly 8 columns added to each line - so that any tabs in the text line up properly (-T). */ -EXTERN int tab_align_flag; - -/* Expand tabs in the output so the text lines up properly - despite the characters added to the front of each line (-t). */ -EXTERN int tab_expand_flag; - -/* In directory comparison, specify file to start with (-S). - All file names less than this name are ignored. */ -EXTERN char *dir_start_file; - -/* If a file is new (appears in only one dir) - include its entire contents (-N). - Then `patch' would create the file with appropriate contents. */ -EXTERN int entire_new_file_flag; - -/* If a file is new (appears in only the second dir) - include its entire contents (-P). - Then `patch' would create the file with appropriate contents. */ -EXTERN int unidirectional_new_file_flag; - -/* Pipe each file's output through pr (-l). */ -EXTERN int paginate_flag; - -enum line_class { - /* Lines taken from just the first file. */ - OLD, - /* Lines taken from just the second file. */ - NEW, - /* Lines common to both files. */ - UNCHANGED, - /* A hunk containing both old and new lines (line groups only). */ - CHANGED -}; - -/* Line group formats for old, new, unchanged, and changed groups. */ -EXTERN char *group_format[CHANGED + 1]; - -/* Line formats for old, new, and unchanged lines. */ -EXTERN char *line_format[UNCHANGED + 1]; - -/* If using OUTPUT_SDIFF print extra information to help the sdiff filter. */ -EXTERN int sdiff_help_sdiff; - -/* Tell OUTPUT_SDIFF to show only the left version of common lines. */ -EXTERN int sdiff_left_only; - -/* Tell OUTPUT_SDIFF to not show common lines. */ -EXTERN int sdiff_skip_common_lines; - -/* The half line width and column 2 offset for OUTPUT_SDIFF. */ -EXTERN unsigned sdiff_half_width; -EXTERN unsigned sdiff_column2_offset; - -/* String containing all the command options diff received, - with spaces between and at the beginning but none at the end. - If there were no options given, this string is empty. */ -EXTERN char * switch_string; - -/* Nonzero means use heuristics for better speed. */ -EXTERN int heuristic; - -/* Name of program the user invoked (for error messages). */ -EXTERN char *diff_program_name; - -/* Jump buffer for nonlocal exits. */ -EXTERN jmp_buf diff_abort_buf; -#define DIFF_ABORT(retval) longjmp(diff_abort_buf, retval) - -/* The result of comparison is an "edit script": a chain of `struct change'. - Each `struct change' represents one place where some lines are deleted - and some are inserted. - - LINE0 and LINE1 are the first affected lines in the two files (origin 0). - DELETED is the number of lines deleted here from file 0. - INSERTED is the number of lines inserted here in file 1. - - If DELETED is 0 then LINE0 is the number of the line before - which the insertion was done; vice versa for INSERTED and LINE1. */ - -struct change -{ - struct change *link; /* Previous or next edit command */ - int inserted; /* # lines of file 1 changed here. */ - int deleted; /* # lines of file 0 changed here. */ - int line0; /* Line number of 1st deleted line. */ - int line1; /* Line number of 1st inserted line. */ - char ignore; /* Flag used in context.c */ -}; - -/* Structures that describe the input files. */ - -/* Data on one input file being compared. */ - -struct file_data { - int desc; /* File descriptor */ - char const *name; /* File name */ - struct stat stat; /* File status from fstat() */ - int dir_p; /* nonzero if file is a directory */ - - /* Buffer in which text of file is read. */ - char * buffer; - /* Allocated size of buffer. */ - size_t bufsize; - /* Number of valid characters now in the buffer. */ - size_t buffered_chars; - - /* Array of pointers to lines in the file. */ - char const **linbuf; - - /* linbuf_base <= buffered_lines <= valid_lines <= alloc_lines. - linebuf[linbuf_base ... buffered_lines - 1] are possibly differing. - linebuf[linbuf_base ... valid_lines - 1] contain valid data. - linebuf[linbuf_base ... alloc_lines - 1] are allocated. */ - int linbuf_base, buffered_lines, valid_lines, alloc_lines; - - /* Pointer to end of prefix of this file to ignore when hashing. */ - char const *prefix_end; - - /* Count of lines in the prefix. - There are this many lines in the file before linbuf[0]. */ - int prefix_lines; - - /* Pointer to start of suffix of this file to ignore when hashing. */ - char const *suffix_begin; - - /* Vector, indexed by line number, containing an equivalence code for - each line. It is this vector that is actually compared with that - of another file to generate differences. */ - int *equivs; - - /* Vector, like the previous one except that - the elements for discarded lines have been squeezed out. */ - int *undiscarded; - - /* Vector mapping virtual line numbers (not counting discarded lines) - to real ones (counting those lines). Both are origin-0. */ - int *realindexes; - - /* Total number of nondiscarded lines. */ - int nondiscarded_lines; - - /* Vector, indexed by real origin-0 line number, - containing 1 for a line that is an insertion or a deletion. - The results of comparison are stored here. */ - char *changed_flag; - - /* 1 if file ends in a line with no final newline. */ - int missing_newline; - - /* 1 more than the maximum equivalence value used for this or its - sibling file. */ - int equiv_max; -}; - -/* Describe the two files currently being compared. */ - -EXTERN struct file_data files[2]; - -/* Stdio stream to output diffs to. */ - -EXTERN FILE *outfile; - -/* Declare various functions. */ - -/* analyze.c */ -int diff_2_files PARAMS((struct file_data[], int)); - -/* context.c */ -void print_context_header PARAMS((struct file_data[], int)); -void print_context_script PARAMS((struct change *, int)); - -/* diff.c */ -int excluded_filename PARAMS((char const *)); - -/* dir.c */ -int diff_dirs PARAMS((struct file_data const[], int (*) PARAMS((char const *, char const *, char const *, char const *, int)), int)); - -/* ed.c */ -void print_ed_script PARAMS((struct change *)); -void pr_forward_ed_script PARAMS((struct change *)); - -/* ifdef.c */ -void print_ifdef_script PARAMS((struct change *)); - -/* io.c */ -int read_files PARAMS((struct file_data[], int)); -int sip PARAMS((struct file_data *, int)); -void slurp PARAMS((struct file_data *)); - -/* normal.c */ -void print_normal_script PARAMS((struct change *)); - -/* rcs.c */ -void print_rcs_script PARAMS((struct change *)); - -/* side.c */ -void print_sdiff_script PARAMS((struct change *)); - -/* util.c */ -VOID *xmalloc PARAMS((size_t)); -VOID *xrealloc PARAMS((VOID *, size_t)); -char *concat PARAMS((char const *, char const *, char const *)); -char *dir_file_pathname PARAMS((char const *, char const *)); -int change_letter PARAMS((int, int)); -int line_cmp PARAMS((char const *, char const *)); -int translate_line_number PARAMS((struct file_data const *, int)); -struct change *find_change PARAMS((struct change *)); -struct change *find_reverse_change PARAMS((struct change *)); -void analyze_hunk PARAMS((struct change *, int *, int *, int *, int *, int *, int *)); -void begin_output PARAMS((void)); -void debug_script PARAMS((struct change *)); -void diff_error PARAMS((char const *, char const *, char const *)); -void fatal PARAMS((char const *)); -void finish_output PARAMS((void)); -void message PARAMS((char const *, char const *, char const *)); -void message5 PARAMS((char const *, char const *, char const *, char const *, char const *)); -void output_1_line PARAMS((char const *, char const *, char const *, char const *)); -void perror_with_name PARAMS((char const *)); -void pfatal_with_name PARAMS((char const *)); -void print_1_line PARAMS((char const *, char const * const *)); -void print_message_queue PARAMS((void)); -void print_number_range PARAMS((int, struct file_data *, int, int)); -void print_script PARAMS((struct change *, struct change * (*) PARAMS((struct change *)), void (*) PARAMS((struct change *)))); -void setup_output PARAMS((char const *, char const *, int)); -void translate_range PARAMS((struct file_data const *, int, int, int *, int *)); - -/* version.c */ -extern char const diff_version_string[]; diff --git a/contrib/cvs/diff/diff3.c b/contrib/cvs/diff/diff3.c deleted file mode 100644 index 533214c436b1..000000000000 --- a/contrib/cvs/diff/diff3.c +++ /dev/null @@ -1,1809 +0,0 @@ -/* Three way file comparison program (diff3) for Project GNU. - Copyright (C) 1988, 1989, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* Written by Randy Smith */ -/* Librarification by Tim Pierce */ - -#include "system.h" -#include <stdio.h> -#include <setjmp.h> -#include "getopt.h" - -/* diff3.c has a real initialize_main function. */ -#ifdef initialize_main -#undef initialize_main -#endif - -extern char const diff_version_string[]; - -/* - * Internal data structures and macros for the diff3 program; includes - * data structures for both diff3 diffs and normal diffs. - */ - -/* Different files within a three way diff. */ -#define FILE0 0 -#define FILE1 1 -#define FILE2 2 - -/* - * A three way diff is built from two two-way diffs; the file which - * the two two-way diffs share is: - */ -#define FILEC FILE2 - -/* - * Different files within a two way diff. - * FC is the common file, FO the other file. - */ -#define FO 0 -#define FC 1 - -/* The ranges are indexed by */ -#define START 0 -#define END 1 - -enum diff_type { - ERROR, /* Should not be used */ - ADD, /* Two way diff add */ - CHANGE, /* Two way diff change */ - DELETE, /* Two way diff delete */ - DIFF_ALL, /* All three are different */ - DIFF_1ST, /* Only the first is different */ - DIFF_2ND, /* Only the second */ - DIFF_3RD /* Only the third */ -}; - -/* Two way diff */ -struct diff_block { - int ranges[2][2]; /* Ranges are inclusive */ - char **lines[2]; /* The actual lines (may contain nulls) */ - size_t *lengths[2]; /* Line lengths (including newlines, if any) */ - struct diff_block *next; -}; - -/* Three way diff */ - -struct diff3_block { - enum diff_type correspond; /* Type of diff */ - int ranges[3][2]; /* Ranges are inclusive */ - char **lines[3]; /* The actual lines (may contain nulls) */ - size_t *lengths[3]; /* Line lengths (including newlines, if any) */ - struct diff3_block *next; -}; - -/* - * Access the ranges on a diff block. - */ -#define D_LOWLINE(diff, filenum) \ - ((diff)->ranges[filenum][START]) -#define D_HIGHLINE(diff, filenum) \ - ((diff)->ranges[filenum][END]) -#define D_NUMLINES(diff, filenum) \ - (D_HIGHLINE (diff, filenum) - D_LOWLINE (diff, filenum) + 1) - -/* - * Access the line numbers in a file in a diff by relative line - * numbers (i.e. line number within the diff itself). Note that these - * are lvalues and can be used for assignment. - */ -#define D_RELNUM(diff, filenum, linenum) \ - ((diff)->lines[filenum][linenum]) -#define D_RELLEN(diff, filenum, linenum) \ - ((diff)->lengths[filenum][linenum]) - -/* - * And get at them directly, when that should be necessary. - */ -#define D_LINEARRAY(diff, filenum) \ - ((diff)->lines[filenum]) -#define D_LENARRAY(diff, filenum) \ - ((diff)->lengths[filenum]) - -/* - * Next block. - */ -#define D_NEXT(diff) ((diff)->next) - -/* - * Access the type of a diff3 block. - */ -#define D3_TYPE(diff) ((diff)->correspond) - -/* - * Line mappings based on diffs. The first maps off the top of the - * diff, the second off of the bottom. - */ -#define D_HIGH_MAPLINE(diff, fromfile, tofile, lineno) \ - ((lineno) \ - - D_HIGHLINE ((diff), (fromfile)) \ - + D_HIGHLINE ((diff), (tofile))) - -#define D_LOW_MAPLINE(diff, fromfile, tofile, lineno) \ - ((lineno) \ - - D_LOWLINE ((diff), (fromfile)) \ - + D_LOWLINE ((diff), (tofile))) - -/* - * General memory allocation function. - */ -#define ALLOCATE(number, type) \ - (type *) xmalloc ((number) * sizeof (type)) - -/* Options variables for flags set on command line. */ - -/* If nonzero, treat all files as text files, never as binary. */ -static int always_text; - -/* If nonzero, write out an ed script instead of the standard diff3 format. */ -static int edscript; - -/* If nonzero, in the case of overlapping diffs (type DIFF_ALL), - preserve the lines which would normally be deleted from - file 1 with a special flagging mechanism. */ -static int flagging; - -/* Number of lines to keep in identical prefix and suffix. */ -static int horizon_lines = 10; - -/* Use a tab to align output lines (-T). */ -static int tab_align_flag; - -/* If nonzero, do not output information for overlapping diffs. */ -static int simple_only; - -/* If nonzero, do not output information for non-overlapping diffs. */ -static int overlap_only; - -/* If nonzero, show information for DIFF_2ND diffs. */ -static int show_2nd; - -/* If nonzero, include `:wq' at the end of the script - to write out the file being edited. */ -static int finalwrite; - -/* If nonzero, output a merged file. */ -static int merge; - -extern char *diff_program_name; - -static char *read_diff PARAMS((char const *, char const *, char **)); -static char *scan_diff_line PARAMS((char *, char **, size_t *, char *, int)); -static enum diff_type process_diff_control PARAMS((char **, struct diff_block *)); -static int compare_line_list PARAMS((char * const[], size_t const[], char * const[], size_t const[], int)); -static int copy_stringlist PARAMS((char * const[], size_t const[], char *[], size_t[], int)); -static int dotlines PARAMS((FILE *, struct diff3_block *, int)); -static int output_diff3_edscript PARAMS((FILE *, struct diff3_block *, int const[3], int const[3], char const *, char const *, char const *)); -static int output_diff3_merge PARAMS((FILE *, FILE *, struct diff3_block *, int const[3], int const[3], char const *, char const *, char const *)); -static size_t myread PARAMS((int, char *, size_t)); -static struct diff3_block *create_diff3_block PARAMS((int, int, int, int, int, int)); -static struct diff3_block *make_3way_diff PARAMS((struct diff_block *, struct diff_block *)); -static struct diff3_block *reverse_diff3_blocklist PARAMS((struct diff3_block *)); -static struct diff3_block *using_to_diff3_block PARAMS((struct diff_block *[2], struct diff_block *[2], int, int, struct diff3_block const *)); -static struct diff_block *process_diff PARAMS((char const *, char const *, struct diff_block **, char **)); -static void check_output PARAMS((FILE *)); -static void diff3_fatal PARAMS((char const *)); -static void output_diff3 PARAMS((FILE *, struct diff3_block *, int const[3], int const[3])); -static void diff3_perror_with_exit PARAMS((char const *)); -static int try_help PARAMS((char const *)); -static void undotlines PARAMS((FILE *, int, int, int)); -static void usage PARAMS((void)); -static void initialize_main PARAMS((int *, char ***)); -static void free_diff_blocks PARAMS((struct diff_block *)); -static void free_diff3_blocks PARAMS((struct diff3_block *)); - -/* Functions provided in libdiff.a or other external sources. */ -int diff_run PARAMS((int, char **, char *)); -VOID *xmalloc PARAMS((size_t)); -VOID *xrealloc PARAMS((VOID *, size_t)); -void perror_with_name PARAMS((char const *)); -void diff_error PARAMS((char const *, char const *, char const *)); - -/* Permit non-local exits from diff3. */ -static jmp_buf diff3_abort_buf; -#define DIFF3_ABORT(retval) longjmp(diff3_abort_buf, retval) - -static struct option const longopts[] = -{ - {"text", 0, 0, 'a'}, - {"show-all", 0, 0, 'A'}, - {"ed", 0, 0, 'e'}, - {"show-overlap", 0, 0, 'E'}, - {"label", 1, 0, 'L'}, - {"merge", 0, 0, 'm'}, - {"initial-tab", 0, 0, 'T'}, - {"overlap-only", 0, 0, 'x'}, - {"easy-only", 0, 0, '3'}, - {"version", 0, 0, 'v'}, - {"help", 0, 0, 129}, - {0, 0, 0, 0} -}; - -/* - * Main program. Calls diff twice on two pairs of input files, - * combines the two diffs, and outputs them. - */ -int -diff3_run (argc, argv, outfile) - int argc; - char **argv; - char *outfile; -{ - int c, i; - int mapping[3]; - int rev_mapping[3]; - int incompat = 0; - int conflicts_found; - int status; - struct diff_block *thread0, *thread1, *last_block; - char *content0, *content1; - struct diff3_block *diff3; - int tag_count = 0; - char *tag_strings[3]; - char *commonname; - char **file; - struct stat statb; - int optind_old; - FILE *outstream; - - initialize_main (&argc, &argv); - - optind_old = optind; - optind = 0; - while ((c = getopt_long (argc, argv, "aeimvx3AEL:TX", longopts, 0)) != EOF) - { - switch (c) - { - case 'a': - always_text = 1; - break; - case 'A': - show_2nd = 1; - flagging = 1; - incompat++; - break; - case 'x': - overlap_only = 1; - incompat++; - break; - case '3': - simple_only = 1; - incompat++; - break; - case 'i': - finalwrite = 1; - break; - case 'm': - merge = 1; - break; - case 'X': - overlap_only = 1; - /* Falls through */ - case 'E': - flagging = 1; - /* Falls through */ - case 'e': - incompat++; - break; - case 'T': - tab_align_flag = 1; - break; - case 'v': - printf ("diff3 - GNU diffutils version %s\n", diff_version_string); - return 0; - case 129: - usage (); - check_output (stdout); - return 0; - case 'L': - /* Handle up to three -L options. */ - if (tag_count < 3) - { - tag_strings[tag_count++] = optarg; - break; - } - return try_help ("Too many labels were given. The limit is 3."); - default: - return try_help (0); - } - } - - edscript = incompat & ~merge; /* -AeExX3 without -m implies ed script. */ - show_2nd |= ~incompat & merge; /* -m without -AeExX3 implies -A. */ - flagging |= ~incompat & merge; - - if (incompat > 1 /* Ensure at most one of -AeExX3. */ - || finalwrite & merge /* -i -m would rewrite input file. */ - || (tag_count && ! flagging)) /* -L requires one of -AEX. */ - return try_help ("incompatible options"); - - if (argc - optind != 3) - return try_help (argc - optind < 3 ? "missing operand" : "extra operand"); - - file = &argv[optind]; - - optind = optind_old; - - for (i = tag_count; i < 3; i++) - tag_strings[i] = file[i]; - - /* Always compare file1 to file2, even if file2 is "-". - This is needed for -mAeExX3. Using the file0 as - the common file would produce wrong results, because if the - file0-file1 diffs didn't line up with the file0-file2 diffs - (which is entirely possible since we don't use diff's -n option), - diff3 might report phantom changes from file1 to file2. */ - - if (strcmp (file[2], "-") == 0) - { - /* Sigh. We've got standard input as the last arg. We can't - call diff twice on stdin. Use the middle arg as the common - file instead. */ - if (strcmp (file[0], "-") == 0 || strcmp (file[1], "-") == 0) - { - diff_error ("%s", "`-' specified for more than one input file", 0); - return 2; - } - mapping[0] = 0; - mapping[1] = 2; - mapping[2] = 1; - } - else - { - /* Normal, what you'd expect */ - mapping[0] = 0; - mapping[1] = 1; - mapping[2] = 2; - } - - for (i = 0; i < 3; i++) - rev_mapping[mapping[i]] = i; - - for (i = 0; i < 3; i++) - if (strcmp (file[i], "-") != 0) - { - if (stat (file[i], &statb) < 0) - { - perror_with_name (file[i]); - return 2; - } - else if (S_ISDIR(statb.st_mode)) - { - fprintf (stderr, "%s: %s: Is a directory\n", - diff_program_name, file[i]); - return 2; - } - } - - if (outfile == NULL) - outstream = stdout; - else - { - outstream = fopen (outfile, "w"); - if (outstream == NULL) - { - perror_with_name ("could not open output file"); - return 2; - } - } - - /* Set the jump buffer, so that diff may abort execution without - terminating the process. */ - status = setjmp (diff3_abort_buf); - if (status != 0) - return status; - - commonname = file[rev_mapping[FILEC]]; - thread1 = process_diff (file[rev_mapping[FILE1]], commonname, &last_block, - &content1); - if (thread1) - for (i = 0; i < 2; i++) - { - horizon_lines = max (horizon_lines, D_NUMLINES (thread1, i)); - horizon_lines = max (horizon_lines, D_NUMLINES (last_block, i)); - } - thread0 = process_diff (file[rev_mapping[FILE0]], commonname, &last_block, - &content0); - diff3 = make_3way_diff (thread0, thread1); - if (edscript) - conflicts_found - = output_diff3_edscript (outstream, diff3, mapping, rev_mapping, - tag_strings[0], tag_strings[1], tag_strings[2]); - else if (merge) - { - if (! freopen (file[rev_mapping[FILE0]], "r", stdin)) - diff3_perror_with_exit (file[rev_mapping[FILE0]]); - conflicts_found - = output_diff3_merge (stdin, outstream, diff3, mapping, rev_mapping, - tag_strings[0], tag_strings[1], tag_strings[2]); - if (ferror (stdin)) - diff3_fatal ("read error"); - } - else - { - output_diff3 (outstream, diff3, mapping, rev_mapping); - conflicts_found = 0; - } - - free(content0); - free(content1); - free_diff_blocks(thread0); - free_diff_blocks(thread1); - free_diff3_blocks(diff3); - - check_output (outstream); - if (outstream != stdout) - if (fclose (outstream) != 0) - perror ("close error on output file"); - return conflicts_found; -} - -static int -try_help (reason) - char const *reason; -{ - if (reason) - fprintf (stderr, "%s: %s\n", diff_program_name, reason); - fprintf (stderr, "%s: Try `%s --help' for more information.\n", - diff_program_name, diff_program_name); - return 2; -} - -static void -check_output (stream) - FILE *stream; -{ - if (ferror (stream) || fflush (stream) != 0) - diff3_fatal ("write error"); -} - -/* - * Explain, patiently and kindly, how to use this program. - */ -static void -usage () -{ - printf ("Usage: %s [OPTION]... MYFILE OLDFILE YOURFILE\n\n", diff_program_name); - - printf ("%s", "\ - -e --ed Output unmerged changes from OLDFILE to YOURFILE into MYFILE.\n\ - -E --show-overlap Output unmerged changes, bracketing conflicts.\n\ - -A --show-all Output all changes, bracketing conflicts.\n\ - -x --overlap-only Output overlapping changes.\n\ - -X Output overlapping changes, bracketing them.\n\ - -3 --easy-only Output unmerged nonoverlapping changes.\n\n"); - printf ("%s", "\ - -m --merge Output merged file instead of ed script (default -A).\n\ - -L LABEL --label=LABEL Use LABEL instead of file name.\n\ - -i Append `w' and `q' commands to ed scripts.\n\ - -a --text Treat all files as text.\n\ - -T --initial-tab Make tabs line up by prepending a tab.\n\n"); - printf ("%s", "\ - -v --version Output version info.\n\ - --help Output this help.\n\n"); - printf ("If a FILE is `-', read standard input.\n"); -} - -/* - * Routines that combine the two diffs together into one. The - * algorithm used follows: - * - * File2 is shared in common between the two diffs. - * Diff02 is the diff between 0 and 2. - * Diff12 is the diff between 1 and 2. - * - * 1) Find the range for the first block in File2. - * a) Take the lowest of the two ranges (in File2) in the two - * current blocks (one from each diff) as being the low - * water mark. Assign the upper end of this block as - * being the high water mark and move the current block up - * one. Mark the block just moved over as to be used. - * b) Check the next block in the diff that the high water - * mark is *not* from. - * - * *If* the high water mark is above - * the low end of the range in that block, - * - * mark that block as to be used and move the current - * block up. Set the high water mark to the max of - * the high end of this block and the current. Repeat b. - * - * 2) Find the corresponding ranges in File0 (from the blocks - * in diff02; line per line outside of diffs) and in File1. - * Create a diff3_block, reserving space as indicated by the ranges. - * - * 3) Copy all of the pointers for file2 in. At least for now, - * do memcmp's between corresponding strings in the two diffs. - * - * 4) Copy all of the pointers for file0 and 1 in. Get what you - * need from file2 (when there isn't a diff block, it's - * identical to file2 within the range between diff blocks). - * - * 5) If the diff blocks you used came from only one of the two - * strings of diffs, then that file (i.e. the one other than - * the common file in that diff) is the odd person out. If you used - * diff blocks from both sets, check to see if files 0 and 1 match: - * - * Same number of lines? If so, do a set of memcmp's (if a - * memcmp matches; copy the pointer over; it'll be easier later - * if you have to do any compares). If they match, 0 & 1 are - * the same. If not, all three different. - * - * Then you do it again, until you run out of blocks. - * - */ - -/* - * This routine makes a three way diff (chain of diff3_block's) from two - * two way diffs (chains of diff_block's). It is assumed that each of - * the two diffs passed are onto the same file (i.e. that each of the - * diffs were made "to" the same file). The three way diff pointer - * returned will have numbering FILE0--the other file in diff02, - * FILE1--the other file in diff12, and FILEC--the common file. - */ -static struct diff3_block * -make_3way_diff (thread0, thread1) - struct diff_block *thread0, *thread1; -{ -/* - * This routine works on the two diffs passed to it as threads. - * Thread number 0 is diff02, thread number 1 is diff12. The USING - * array is set to the base of the list of blocks to be used to - * construct each block of the three way diff; if no blocks from a - * particular thread are to be used, that element of the using array - * is set to 0. The elements LAST_USING array are set to the last - * elements on each of the using lists. - * - * The HIGH_WATER_MARK is set to the highest line number in the common file - * described in any of the diffs in either of the USING lists. The - * HIGH_WATER_THREAD names the thread. Similarly the BASE_WATER_MARK - * and BASE_WATER_THREAD describe the lowest line number in the common file - * described in any of the diffs in either of the USING lists. The - * HIGH_WATER_DIFF is the diff from which the HIGH_WATER_MARK was - * taken. - * - * The HIGH_WATER_DIFF should always be equal to LAST_USING - * [HIGH_WATER_THREAD]. The OTHER_DIFF is the next diff to check for - * higher water, and should always be equal to - * CURRENT[HIGH_WATER_THREAD ^ 0x1]. The OTHER_THREAD is the thread - * in which the OTHER_DIFF is, and hence should always be equal to - * HIGH_WATER_THREAD ^ 0x1. - * - * The variable LAST_DIFF is kept set to the last diff block produced - * by this routine, for line correspondence purposes between that diff - * and the one currently being worked on. It is initialized to - * ZERO_DIFF before any blocks have been created. - */ - - struct diff_block - *using[2], - *last_using[2], - *current[2]; - - int - high_water_mark; - - int - high_water_thread, - base_water_thread, - other_thread; - - struct diff_block - *high_water_diff, - *other_diff; - - struct diff3_block - *result, - *tmpblock, - **result_end; - - struct diff3_block const *last_diff3; - - static struct diff3_block const zero_diff3; - - /* Initialization */ - result = 0; - result_end = &result; - current[0] = thread0; current[1] = thread1; - last_diff3 = &zero_diff3; - - /* Sniff up the threads until we reach the end */ - - while (current[0] || current[1]) - { - using[0] = using[1] = last_using[0] = last_using[1] = 0; - - /* Setup low and high water threads, diffs, and marks. */ - if (!current[0]) - base_water_thread = 1; - else if (!current[1]) - base_water_thread = 0; - else - base_water_thread = - (D_LOWLINE (current[0], FC) > D_LOWLINE (current[1], FC)); - - high_water_thread = base_water_thread; - - high_water_diff = current[high_water_thread]; - -#if 0 - /* low and high waters start off same diff */ - base_water_mark = D_LOWLINE (high_water_diff, FC); -#endif - - high_water_mark = D_HIGHLINE (high_water_diff, FC); - - /* Make the diff you just got info from into the using class */ - using[high_water_thread] - = last_using[high_water_thread] - = high_water_diff; - current[high_water_thread] = high_water_diff->next; - last_using[high_water_thread]->next = 0; - - /* And mark the other diff */ - other_thread = high_water_thread ^ 0x1; - other_diff = current[other_thread]; - - /* Shuffle up the ladder, checking the other diff to see if it - needs to be incorporated. */ - while (other_diff - && D_LOWLINE (other_diff, FC) <= high_water_mark + 1) - { - - /* Incorporate this diff into the using list. Note that - this doesn't take it off the current list */ - if (using[other_thread]) - last_using[other_thread]->next = other_diff; - else - using[other_thread] = other_diff; - last_using[other_thread] = other_diff; - - /* Take it off the current list. Note that this following - code assumes that other_diff enters it equal to - current[high_water_thread ^ 0x1] */ - current[other_thread] = current[other_thread]->next; - other_diff->next = 0; - - /* Set the high_water stuff - If this comparison is equal, then this is the last pass - through this loop; since diff blocks within a given - thread cannot overlap, the high_water_mark will be - *below* the range_start of either of the next diffs. */ - - if (high_water_mark < D_HIGHLINE (other_diff, FC)) - { - high_water_thread ^= 1; - high_water_diff = other_diff; - high_water_mark = D_HIGHLINE (other_diff, FC); - } - - /* Set the other diff */ - other_thread = high_water_thread ^ 0x1; - other_diff = current[other_thread]; - } - - /* The using lists contain a list of all of the blocks to be - included in this diff3_block. Create it. */ - - tmpblock = using_to_diff3_block (using, last_using, - base_water_thread, high_water_thread, - last_diff3); - - if (!tmpblock) - diff3_fatal ("internal error: screwup in format of diff blocks"); - - /* Put it on the list. */ - *result_end = tmpblock; - result_end = &tmpblock->next; - - /* Set up corresponding lines correctly. */ - last_diff3 = tmpblock; - } - return result; -} - -/* - * using_to_diff3_block: - * This routine takes two lists of blocks (from two separate diff - * threads) and puts them together into one diff3 block. - * It then returns a pointer to this diff3 block or 0 for failure. - * - * All arguments besides using are for the convenience of the routine; - * they could be derived from the using array. - * LAST_USING is a pair of pointers to the last blocks in the using - * structure. - * LOW_THREAD and HIGH_THREAD tell which threads contain the lowest - * and highest line numbers for File0. - * last_diff3 contains the last diff produced in the calling routine. - * This is used for lines mappings which would still be identical to - * the state that diff ended in. - * - * A distinction should be made in this routine between the two diffs - * that are part of a normal two diff block, and the three diffs that - * are part of a diff3_block. - */ -static struct diff3_block * -using_to_diff3_block (using, last_using, low_thread, high_thread, last_diff3) - struct diff_block - *using[2], - *last_using[2]; - int low_thread, high_thread; - struct diff3_block const *last_diff3; -{ - int low[2], high[2]; - struct diff3_block *result; - struct diff_block *ptr; - int d, i; - - /* Find the range in the common file. */ - int lowc = D_LOWLINE (using[low_thread], FC); - int highc = D_HIGHLINE (last_using[high_thread], FC); - - /* Find the ranges in the other files. - If using[d] is null, that means that the file to which that diff - refers is equivalent to the common file over this range. */ - - for (d = 0; d < 2; d++) - if (using[d]) - { - low[d] = D_LOW_MAPLINE (using[d], FC, FO, lowc); - high[d] = D_HIGH_MAPLINE (last_using[d], FC, FO, highc); - } - else - { - low[d] = D_HIGH_MAPLINE (last_diff3, FILEC, FILE0 + d, lowc); - high[d] = D_HIGH_MAPLINE (last_diff3, FILEC, FILE0 + d, highc); - } - - /* Create a block with the appropriate sizes */ - result = create_diff3_block (low[0], high[0], low[1], high[1], lowc, highc); - - /* Copy information for the common file. - Return with a zero if any of the compares failed. */ - - for (d = 0; d < 2; d++) - for (ptr = using[d]; ptr; ptr = D_NEXT (ptr)) - { - int result_offset = D_LOWLINE (ptr, FC) - lowc; - - if (!copy_stringlist (D_LINEARRAY (ptr, FC), - D_LENARRAY (ptr, FC), - D_LINEARRAY (result, FILEC) + result_offset, - D_LENARRAY (result, FILEC) + result_offset, - D_NUMLINES (ptr, FC))) - return 0; - } - - /* Copy information for file d. First deal with anything that might be - before the first diff. */ - - for (d = 0; d < 2; d++) - { - struct diff_block *u = using[d]; - int lo = low[d], hi = high[d]; - - for (i = 0; - i + lo < (u ? D_LOWLINE (u, FO) : hi + 1); - i++) - { - D_RELNUM (result, FILE0 + d, i) = D_RELNUM (result, FILEC, i); - D_RELLEN (result, FILE0 + d, i) = D_RELLEN (result, FILEC, i); - } - - for (ptr = u; ptr; ptr = D_NEXT (ptr)) - { - int result_offset = D_LOWLINE (ptr, FO) - lo; - int linec; - - if (!copy_stringlist (D_LINEARRAY (ptr, FO), - D_LENARRAY (ptr, FO), - D_LINEARRAY (result, FILE0 + d) + result_offset, - D_LENARRAY (result, FILE0 + d) + result_offset, - D_NUMLINES (ptr, FO))) - return 0; - - /* Catch the lines between here and the next diff */ - linec = D_HIGHLINE (ptr, FC) + 1 - lowc; - for (i = D_HIGHLINE (ptr, FO) + 1 - lo; - i < (D_NEXT (ptr) ? D_LOWLINE (D_NEXT (ptr), FO) : hi + 1) - lo; - i++) - { - D_RELNUM (result, FILE0 + d, i) = D_RELNUM (result, FILEC, linec); - D_RELLEN (result, FILE0 + d, i) = D_RELLEN (result, FILEC, linec); - linec++; - } - } - } - - /* Set correspond */ - if (!using[0]) - D3_TYPE (result) = DIFF_2ND; - else if (!using[1]) - D3_TYPE (result) = DIFF_1ST; - else - { - int nl0 = D_NUMLINES (result, FILE0); - int nl1 = D_NUMLINES (result, FILE1); - - if (nl0 != nl1 - || !compare_line_list (D_LINEARRAY (result, FILE0), - D_LENARRAY (result, FILE0), - D_LINEARRAY (result, FILE1), - D_LENARRAY (result, FILE1), - nl0)) - D3_TYPE (result) = DIFF_ALL; - else - D3_TYPE (result) = DIFF_3RD; - } - - return result; -} - -/* - * This routine copies pointers from a list of strings to a different list - * of strings. If a spot in the second list is already filled, it - * makes sure that it is filled with the same string; if not it - * returns 0, the copy incomplete. - * Upon successful completion of the copy, it returns 1. - */ -static int -copy_stringlist (fromptrs, fromlengths, toptrs, tolengths, copynum) - char * const fromptrs[]; - char *toptrs[]; - size_t const fromlengths[]; - size_t tolengths[]; - int copynum; -{ - register char * const *f = fromptrs; - register char **t = toptrs; - register size_t const *fl = fromlengths; - register size_t *tl = tolengths; - - while (copynum--) - { - if (*t) - { if (*fl != *tl || memcmp (*f, *t, *fl)) return 0; } - else - { *t = *f ; *tl = *fl; } - - t++; f++; tl++; fl++; - } - return 1; -} - -/* - * Create a diff3_block, with ranges as specified in the arguments. - * Allocate the arrays for the various pointers (and zero them) based - * on the arguments passed. Return the block as a result. - */ -static struct diff3_block * -create_diff3_block (low0, high0, low1, high1, low2, high2) - register int low0, high0, low1, high1, low2, high2; -{ - struct diff3_block *result = ALLOCATE (1, struct diff3_block); - int numlines; - - D3_TYPE (result) = ERROR; - D_NEXT (result) = 0; - - /* Assign ranges */ - D_LOWLINE (result, FILE0) = low0; - D_HIGHLINE (result, FILE0) = high0; - D_LOWLINE (result, FILE1) = low1; - D_HIGHLINE (result, FILE1) = high1; - D_LOWLINE (result, FILE2) = low2; - D_HIGHLINE (result, FILE2) = high2; - - /* Allocate and zero space */ - numlines = D_NUMLINES (result, FILE0); - if (numlines) - { - D_LINEARRAY (result, FILE0) = ALLOCATE (numlines, char *); - D_LENARRAY (result, FILE0) = ALLOCATE (numlines, size_t); - bzero (D_LINEARRAY (result, FILE0), (numlines * sizeof (char *))); - bzero (D_LENARRAY (result, FILE0), (numlines * sizeof (size_t))); - } - else - { - D_LINEARRAY (result, FILE0) = 0; - D_LENARRAY (result, FILE0) = 0; - } - - numlines = D_NUMLINES (result, FILE1); - if (numlines) - { - D_LINEARRAY (result, FILE1) = ALLOCATE (numlines, char *); - D_LENARRAY (result, FILE1) = ALLOCATE (numlines, size_t); - bzero (D_LINEARRAY (result, FILE1), (numlines * sizeof (char *))); - bzero (D_LENARRAY (result, FILE1), (numlines * sizeof (size_t))); - } - else - { - D_LINEARRAY (result, FILE1) = 0; - D_LENARRAY (result, FILE1) = 0; - } - - numlines = D_NUMLINES (result, FILE2); - if (numlines) - { - D_LINEARRAY (result, FILE2) = ALLOCATE (numlines, char *); - D_LENARRAY (result, FILE2) = ALLOCATE (numlines, size_t); - bzero (D_LINEARRAY (result, FILE2), (numlines * sizeof (char *))); - bzero (D_LENARRAY (result, FILE2), (numlines * sizeof (size_t))); - } - else - { - D_LINEARRAY (result, FILE2) = 0; - D_LENARRAY (result, FILE2) = 0; - } - - /* Return */ - return result; -} - -/* - * Compare two lists of lines of text. - * Return 1 if they are equivalent, 0 if not. - */ -static int -compare_line_list (list1, lengths1, list2, lengths2, nl) - char * const list1[], * const list2[]; - size_t const lengths1[], lengths2[]; - int nl; -{ - char - * const *l1 = list1, - * const *l2 = list2; - size_t const - *lgths1 = lengths1, - *lgths2 = lengths2; - - while (nl--) - if (!*l1 || !*l2 || *lgths1 != *lgths2++ - || memcmp (*l1++, *l2++, *lgths1++)) - return 0; - return 1; -} - -/* - * Routines to input and parse two way diffs. - */ - -extern char **environ; - -static struct diff_block * -process_diff (filea, fileb, last_block, diff_contents) - char const *filea, *fileb; - struct diff_block **last_block; - char **diff_contents; -{ - char *diff_limit; - char *scan_diff; - enum diff_type dt; - int i; - struct diff_block *block_list, **block_list_end, *bptr; - - diff_limit = read_diff (filea, fileb, diff_contents); - scan_diff = *diff_contents; - block_list_end = &block_list; - bptr = 0; /* Pacify `gcc -W'. */ - - while (scan_diff < diff_limit) - { - bptr = ALLOCATE (1, struct diff_block); - bptr->lines[0] = bptr->lines[1] = 0; - bptr->lengths[0] = bptr->lengths[1] = 0; - - dt = process_diff_control (&scan_diff, bptr); - if (dt == ERROR || *scan_diff != '\n') - { - fprintf (stderr, "%s: diff error: ", diff_program_name); - do - { - putc (*scan_diff, stderr); - } - while (*scan_diff++ != '\n'); - DIFF3_ABORT (2); - } - scan_diff++; - - /* Force appropriate ranges to be null, if necessary */ - switch (dt) - { - case ADD: - bptr->ranges[0][0]++; - break; - case DELETE: - bptr->ranges[1][0]++; - break; - case CHANGE: - break; - default: - diff3_fatal ("internal error: invalid diff type in process_diff"); - break; - } - - /* Allocate space for the pointers for the lines from filea, and - parcel them out among these pointers */ - if (dt != ADD) - { - int numlines = D_NUMLINES (bptr, 0); - bptr->lines[0] = ALLOCATE (numlines, char *); - bptr->lengths[0] = ALLOCATE (numlines, size_t); - for (i = 0; i < numlines; i++) - scan_diff = scan_diff_line (scan_diff, - &(bptr->lines[0][i]), - &(bptr->lengths[0][i]), - diff_limit, - '<'); - } - - /* Get past the separator for changes */ - if (dt == CHANGE) - { - if (strncmp (scan_diff, "---\n", 4)) - diff3_fatal ("invalid diff format; invalid change separator"); - scan_diff += 4; - } - - /* Allocate space for the pointers for the lines from fileb, and - parcel them out among these pointers */ - if (dt != DELETE) - { - int numlines = D_NUMLINES (bptr, 1); - bptr->lines[1] = ALLOCATE (numlines, char *); - bptr->lengths[1] = ALLOCATE (numlines, size_t); - for (i = 0; i < numlines; i++) - scan_diff = scan_diff_line (scan_diff, - &(bptr->lines[1][i]), - &(bptr->lengths[1][i]), - diff_limit, - '>'); - } - - /* Place this block on the blocklist. */ - *block_list_end = bptr; - block_list_end = &bptr->next; - } - - *block_list_end = 0; - *last_block = bptr; - return block_list; -} - -/* - * This routine will parse a normal format diff control string. It - * returns the type of the diff (ERROR if the format is bad). All of - * the other important information is filled into to the structure - * pointed to by db, and the string pointer (whose location is passed - * to this routine) is updated to point beyond the end of the string - * parsed. Note that only the ranges in the diff_block will be set by - * this routine. - * - * If some specific pair of numbers has been reduced to a single - * number, then both corresponding numbers in the diff block are set - * to that number. In general these numbers are interpetted as ranges - * inclusive, unless being used by the ADD or DELETE commands. It is - * assumed that these will be special cased in a superior routine. - */ - -static enum diff_type -process_diff_control (string, db) - char **string; - struct diff_block *db; -{ - char *s = *string; - int holdnum; - enum diff_type type; - -/* These macros are defined here because they can use variables - defined in this function. Don't try this at home kids, we're - trained professionals! - - Also note that SKIPWHITE only recognizes tabs and spaces, and - that READNUM can only read positive, integral numbers */ - -#define SKIPWHITE(s) { while (*s == ' ' || *s == '\t') s++; } -#define READNUM(s, num) \ - { unsigned char c = *s; if (!ISDIGIT (c)) return ERROR; holdnum = 0; \ - do { holdnum = (c - '0' + holdnum * 10); } \ - while (ISDIGIT (c = *++s)); (num) = holdnum; } - - /* Read first set of digits */ - SKIPWHITE (s); - READNUM (s, db->ranges[0][START]); - - /* Was that the only digit? */ - SKIPWHITE (s); - if (*s == ',') - { - /* Get the next digit */ - s++; - READNUM (s, db->ranges[0][END]); - } - else - db->ranges[0][END] = db->ranges[0][START]; - - /* Get the letter */ - SKIPWHITE (s); - switch (*s) - { - case 'a': - type = ADD; - break; - case 'c': - type = CHANGE; - break; - case 'd': - type = DELETE; - break; - default: - return ERROR; /* Bad format */ - } - s++; /* Past letter */ - - /* Read second set of digits */ - SKIPWHITE (s); - READNUM (s, db->ranges[1][START]); - - /* Was that the only digit? */ - SKIPWHITE (s); - if (*s == ',') - { - /* Get the next digit */ - s++; - READNUM (s, db->ranges[1][END]); - SKIPWHITE (s); /* To move to end */ - } - else - db->ranges[1][END] = db->ranges[1][START]; - - *string = s; - return type; -} - -static char * -read_diff (filea, fileb, output_placement) - char const *filea, *fileb; - char **output_placement; -{ - char *diff_result; - size_t bytes, current_chunk_size, total; - int fd, wstatus; - struct stat pipestat; - - /* 302 / 1000 is log10(2.0) rounded up. Subtract 1 for the sign bit; - add 1 for integer division truncation; add 1 more for a minus sign. */ -#define INT_STRLEN_BOUND(type) ((sizeof(type)*CHAR_BIT - 1) * 302 / 1000 + 2) - - char const *argv[7]; - char horizon_arg[17 + INT_STRLEN_BOUND (int)]; - char const **ap; - char *diffout; - - ap = argv; - *ap++ = "diff"; - if (always_text) - *ap++ = "-a"; - sprintf (horizon_arg, "--horizon-lines=%d", horizon_lines); - *ap++ = horizon_arg; - *ap++ = "--"; - *ap++ = filea; - *ap++ = fileb; - *ap = 0; - - diffout = tmpnam(NULL); - wstatus = diff_run (ap - argv, (char **) argv, diffout); - if (wstatus == 2) - diff3_fatal ("subsidiary diff failed"); - - if (-1 == (fd = open (diffout, O_RDONLY))) - diff3_fatal ("could not open temporary diff file"); - - current_chunk_size = 8 * 1024; - if (fstat (fd, &pipestat) == 0) - current_chunk_size = max (current_chunk_size, STAT_BLOCKSIZE (pipestat)); - - diff_result = xmalloc (current_chunk_size); - total = 0; - do { - bytes = myread (fd, - diff_result + total, - current_chunk_size - total); - total += bytes; - if (total == current_chunk_size) - { - if (current_chunk_size < 2 * current_chunk_size) - current_chunk_size = 2 * current_chunk_size; - else if (current_chunk_size < (size_t) -1) - current_chunk_size = (size_t) -1; - else - diff3_fatal ("files are too large to fit into memory"); - diff_result = xrealloc (diff_result, (current_chunk_size *= 2)); - } - } while (bytes); - - if (total != 0 && diff_result[total-1] != '\n') - diff3_fatal ("invalid diff format; incomplete last line"); - - *output_placement = diff_result; - - if (close (fd) != 0) - diff3_perror_with_exit ("pipe close"); - unlink (diffout); - - return diff_result + total; -} - - -/* - * Scan a regular diff line (consisting of > or <, followed by a - * space, followed by text (including nulls) up to a newline. - * - * This next routine began life as a macro and many parameters in it - * are used as call-by-reference values. - */ -static char * -scan_diff_line (scan_ptr, set_start, set_length, limit, leadingchar) - char *scan_ptr, **set_start; - size_t *set_length; - char *limit; - int leadingchar; -{ - char *line_ptr; - - if (!(scan_ptr[0] == leadingchar - && scan_ptr[1] == ' ')) - diff3_fatal ("invalid diff format; incorrect leading line chars"); - - *set_start = line_ptr = scan_ptr + 2; - while (*line_ptr++ != '\n') - ; - - /* Include newline if the original line ended in a newline, - or if an edit script is being generated. - Copy any missing newline message to stderr if an edit script is being - generated, because edit scripts cannot handle missing newlines. - Return the beginning of the next line. */ - *set_length = line_ptr - *set_start; - if (line_ptr < limit && *line_ptr == '\\') - { - if (edscript) - fprintf (stderr, "%s:", diff_program_name); - else - --*set_length; - line_ptr++; - do - { - if (edscript) - putc (*line_ptr, stderr); - } - while (*line_ptr++ != '\n'); - } - - return line_ptr; -} - -/* - * This routine outputs a three way diff passed as a list of - * diff3_block's. - * The argument MAPPING is indexed by external file number (in the - * argument list) and contains the internal file number (from the - * diff passed). This is important because the user expects his - * outputs in terms of the argument list number, and the diff passed - * may have been done slightly differently (if the last argument - * was "-", for example). - * REV_MAPPING is the inverse of MAPPING. - */ -static void -output_diff3 (outputfile, diff, mapping, rev_mapping) - FILE *outputfile; - struct diff3_block *diff; - int const mapping[3], rev_mapping[3]; -{ - int i; - int oddoneout; - char *cp; - struct diff3_block *ptr; - int line; - size_t length; - int dontprint; - static int skew_increment[3] = { 2, 3, 1 }; /* 0==>2==>1==>3 */ - char const *line_prefix = tab_align_flag ? "\t" : " "; - - for (ptr = diff; ptr; ptr = D_NEXT (ptr)) - { - char x[2]; - - switch (ptr->correspond) - { - case DIFF_ALL: - x[0] = '\0'; - dontprint = 3; /* Print them all */ - oddoneout = 3; /* Nobody's odder than anyone else */ - break; - case DIFF_1ST: - case DIFF_2ND: - case DIFF_3RD: - oddoneout = rev_mapping[(int) ptr->correspond - (int) DIFF_1ST]; - - x[0] = oddoneout + '1'; - x[1] = '\0'; - dontprint = oddoneout==0; - break; - default: - diff3_fatal ("internal error: invalid diff type passed to output"); - } - fprintf (outputfile, "====%s\n", x); - - /* Go 0, 2, 1 if the first and third outputs are equivalent. */ - for (i = 0; i < 3; - i = (oddoneout == 1 ? skew_increment[i] : i + 1)) - { - int realfile = mapping[i]; - int - lowt = D_LOWLINE (ptr, realfile), - hight = D_HIGHLINE (ptr, realfile); - - fprintf (outputfile, "%d:", i + 1); - switch (lowt - hight) - { - case 1: - fprintf (outputfile, "%da\n", lowt - 1); - break; - case 0: - fprintf (outputfile, "%dc\n", lowt); - break; - default: - fprintf (outputfile, "%d,%dc\n", lowt, hight); - break; - } - - if (i == dontprint) continue; - - if (lowt <= hight) - { - line = 0; - do - { - fprintf (outputfile, line_prefix); - cp = D_RELNUM (ptr, realfile, line); - length = D_RELLEN (ptr, realfile, line); - fwrite (cp, sizeof (char), length, outputfile); - } - while (++line < hight - lowt + 1); - if (cp[length - 1] != '\n') - fprintf (outputfile, "\n\\ No newline at end of file\n"); - } - } - } -} - - -/* - * Output to OUTPUTFILE the lines of B taken from FILENUM. - * Double any initial '.'s; yield nonzero if any initial '.'s were doubled. - */ -static int -dotlines (outputfile, b, filenum) - FILE *outputfile; - struct diff3_block *b; - int filenum; -{ - int i; - int leading_dot = 0; - - for (i = 0; - i < D_NUMLINES (b, filenum); - i++) - { - char *line = D_RELNUM (b, filenum, i); - if (line[0] == '.') - { - leading_dot = 1; - fprintf (outputfile, "."); - } - fwrite (line, sizeof (char), - D_RELLEN (b, filenum, i), outputfile); - } - - return leading_dot; -} - -/* - * Output to OUTPUTFILE a '.' line. If LEADING_DOT is nonzero, - * also output a command that removes initial '.'s - * starting with line START and continuing for NUM lines. - */ -static void -undotlines (outputfile, leading_dot, start, num) - FILE *outputfile; - int leading_dot, start, num; -{ - fprintf (outputfile, ".\n"); - if (leading_dot) - if (num == 1) - fprintf (outputfile, "%ds/^\\.//\n", start); - else - fprintf (outputfile, "%d,%ds/^\\.//\n", start, start + num - 1); -} - -/* - * This routine outputs a diff3 set of blocks as an ed script. This - * script applies the changes between file's 2 & 3 to file 1. It - * takes the precise format of the ed script to be output from global - * variables set during options processing. Note that it does - * destructive things to the set of diff3 blocks it is passed; it - * reverses their order (this gets around the problems involved with - * changing line numbers in an ed script). - * - * Note that this routine has the same problem of mapping as the last - * one did; the variable MAPPING maps from file number according to - * the argument list to file number according to the diff passed. All - * files listed below are in terms of the argument list. - * REV_MAPPING is the inverse of MAPPING. - * - * The arguments FILE0, FILE1 and FILE2 are the strings to print - * as the names of the three files. These may be the actual names, - * or may be the arguments specified with -L. - * - * Returns 1 if conflicts were found. - */ - -static int -output_diff3_edscript (outputfile, diff, mapping, rev_mapping, - file0, file1, file2) - FILE *outputfile; - struct diff3_block *diff; - int const mapping[3], rev_mapping[3]; - char const *file0, *file1, *file2; -{ - int leading_dot; - int conflicts_found = 0, conflict; - struct diff3_block *b; - - for (b = reverse_diff3_blocklist (diff); b; b = b->next) - { - /* Must do mapping correctly. */ - enum diff_type type - = ((b->correspond == DIFF_ALL) ? - DIFF_ALL : - ((enum diff_type) - (((int) DIFF_1ST) - + rev_mapping[(int) b->correspond - (int) DIFF_1ST]))); - - /* If we aren't supposed to do this output block, skip it. */ - switch (type) - { - default: continue; - case DIFF_2ND: if (!show_2nd) continue; conflict = 1; break; - case DIFF_3RD: if (overlap_only) continue; conflict = 0; break; - case DIFF_ALL: if (simple_only) continue; conflict = flagging; break; - } - - if (conflict) - { - conflicts_found = 1; - - - /* Mark end of conflict. */ - - fprintf (outputfile, "%da\n", D_HIGHLINE (b, mapping[FILE0])); - leading_dot = 0; - if (type == DIFF_ALL) - { - if (show_2nd) - { - /* Append lines from FILE1. */ - fprintf (outputfile, "||||||| %s\n", file1); - leading_dot = dotlines (outputfile, b, mapping[FILE1]); - } - /* Append lines from FILE2. */ - fprintf (outputfile, "=======\n"); - leading_dot |= dotlines (outputfile, b, mapping[FILE2]); - } - fprintf (outputfile, ">>>>>>> %s\n", file2); - undotlines (outputfile, leading_dot, - D_HIGHLINE (b, mapping[FILE0]) + 2, - (D_NUMLINES (b, mapping[FILE1]) - + D_NUMLINES (b, mapping[FILE2]) + 1)); - - - /* Mark start of conflict. */ - - fprintf (outputfile, "%da\n<<<<<<< %s\n", - D_LOWLINE (b, mapping[FILE0]) - 1, - type == DIFF_ALL ? file0 : file1); - leading_dot = 0; - if (type == DIFF_2ND) - { - /* Prepend lines from FILE1. */ - leading_dot = dotlines (outputfile, b, mapping[FILE1]); - fprintf (outputfile, "=======\n"); - } - undotlines (outputfile, leading_dot, - D_LOWLINE (b, mapping[FILE0]) + 1, - D_NUMLINES (b, mapping[FILE1])); - } - else if (D_NUMLINES (b, mapping[FILE2]) == 0) - /* Write out a delete */ - { - if (D_NUMLINES (b, mapping[FILE0]) == 1) - fprintf (outputfile, "%dd\n", - D_LOWLINE (b, mapping[FILE0])); - else - fprintf (outputfile, "%d,%dd\n", - D_LOWLINE (b, mapping[FILE0]), - D_HIGHLINE (b, mapping[FILE0])); - } - else - /* Write out an add or change */ - { - switch (D_NUMLINES (b, mapping[FILE0])) - { - case 0: - fprintf (outputfile, "%da\n", - D_HIGHLINE (b, mapping[FILE0])); - break; - case 1: - fprintf (outputfile, "%dc\n", - D_HIGHLINE (b, mapping[FILE0])); - break; - default: - fprintf (outputfile, "%d,%dc\n", - D_LOWLINE (b, mapping[FILE0]), - D_HIGHLINE (b, mapping[FILE0])); - break; - } - - undotlines (outputfile, dotlines (outputfile, b, mapping[FILE2]), - D_LOWLINE (b, mapping[FILE0]), - D_NUMLINES (b, mapping[FILE2])); - } - } - if (finalwrite) fprintf (outputfile, "w\nq\n"); - return conflicts_found; -} - -/* - * Read from INFILE and output to OUTPUTFILE a set of diff3_ blocks DIFF - * as a merged file. This acts like 'ed file0 <[output_diff3_edscript]', - * except that it works even for binary data or incomplete lines. - * - * As before, MAPPING maps from arg list file number to diff file number, - * REV_MAPPING is its inverse, - * and FILE0, FILE1, and FILE2 are the names of the files. - * - * Returns 1 if conflicts were found. - */ - -static int -output_diff3_merge (infile, outputfile, diff, mapping, rev_mapping, - file0, file1, file2) - FILE *infile, *outputfile; - struct diff3_block *diff; - int const mapping[3], rev_mapping[3]; - char const *file0, *file1, *file2; -{ - int c, i; - int conflicts_found = 0, conflict; - struct diff3_block *b; - int linesread = 0; - - for (b = diff; b; b = b->next) - { - /* Must do mapping correctly. */ - enum diff_type type - = ((b->correspond == DIFF_ALL) ? - DIFF_ALL : - ((enum diff_type) - (((int) DIFF_1ST) - + rev_mapping[(int) b->correspond - (int) DIFF_1ST]))); - char const *format_2nd = "<<<<<<< %s\n"; - - /* If we aren't supposed to do this output block, skip it. */ - switch (type) - { - default: continue; - case DIFF_2ND: if (!show_2nd) continue; conflict = 1; break; - case DIFF_3RD: if (overlap_only) continue; conflict = 0; break; - case DIFF_ALL: if (simple_only) continue; conflict = flagging; - format_2nd = "||||||| %s\n"; - break; - } - - /* Copy I lines from file 0. */ - i = D_LOWLINE (b, FILE0) - linesread - 1; - linesread += i; - while (0 <= --i) - do - { - c = getc (infile); - if (c == EOF) - if (ferror (infile)) - diff3_perror_with_exit ("input file"); - else if (feof (infile)) - diff3_fatal ("input file shrank"); - putc (c, outputfile); - } - while (c != '\n'); - - if (conflict) - { - conflicts_found = 1; - - if (type == DIFF_ALL) - { - /* Put in lines from FILE0 with bracket. */ - fprintf (outputfile, "<<<<<<< %s\n", file0); - for (i = 0; - i < D_NUMLINES (b, mapping[FILE0]); - i++) - fwrite (D_RELNUM (b, mapping[FILE0], i), sizeof (char), - D_RELLEN (b, mapping[FILE0], i), outputfile); - } - - if (show_2nd) - { - /* Put in lines from FILE1 with bracket. */ - fprintf (outputfile, format_2nd, file1); - for (i = 0; - i < D_NUMLINES (b, mapping[FILE1]); - i++) - fwrite (D_RELNUM (b, mapping[FILE1], i), sizeof (char), - D_RELLEN (b, mapping[FILE1], i), outputfile); - } - - fprintf (outputfile, "=======\n"); - } - - /* Put in lines from FILE2. */ - for (i = 0; - i < D_NUMLINES (b, mapping[FILE2]); - i++) - fwrite (D_RELNUM (b, mapping[FILE2], i), sizeof (char), - D_RELLEN (b, mapping[FILE2], i), outputfile); - - if (conflict) - fprintf (outputfile, ">>>>>>> %s\n", file2); - - /* Skip I lines in file 0. */ - i = D_NUMLINES (b, FILE0); - linesread += i; - while (0 <= --i) - while ((c = getc (infile)) != '\n') - if (c == EOF) - if (ferror (infile)) - diff3_perror_with_exit ("input file"); - else if (feof (infile)) - { - if (i || b->next) - diff3_fatal ("input file shrank"); - return conflicts_found; - } - } - /* Copy rest of common file. */ - while ((c = getc (infile)) != EOF || !(ferror (infile) | feof (infile))) - putc (c, outputfile); - return conflicts_found; -} - -/* - * Reverse the order of the list of diff3 blocks. - */ -static struct diff3_block * -reverse_diff3_blocklist (diff) - struct diff3_block *diff; -{ - register struct diff3_block *tmp, *next, *prev; - - for (tmp = diff, prev = 0; tmp; tmp = next) - { - next = tmp->next; - tmp->next = prev; - prev = tmp; - } - - return prev; -} - -static size_t -myread (fd, ptr, size) - int fd; - char *ptr; - size_t size; -{ - size_t result = read (fd, ptr, size); - if (result == -1) - diff3_perror_with_exit ("read failed"); - return result; -} - -static void -diff3_fatal (string) - char const *string; -{ - fprintf (stderr, "%s: %s\n", diff_program_name, string); - DIFF3_ABORT (2); -} - -static void -diff3_perror_with_exit (string) - char const *string; -{ - int e = errno; - fprintf (stderr, "%s: ", diff_program_name); - errno = e; - perror (string); - DIFF3_ABORT (2); -} - -static void -initialize_main (argcp, argvp) - int *argcp; - char ***argvp; -{ - always_text = 0; - edscript = 0; - flagging = 0; - horizon_lines = 10; - tab_align_flag = 0; - simple_only = 0; - overlap_only = 0; - show_2nd = 0; - finalwrite = 0; - merge = 0; - diff_program_name = (*argvp)[0]; -} - -static void -free_diff_blocks(p) - struct diff_block *p; -{ - register struct diff_block *next; - - while (p) - { - next = p->next; - if (p->lines[0]) free(p->lines[0]); - if (p->lines[1]) free(p->lines[1]); - if (p->lengths[0]) free(p->lengths[0]); - if (p->lengths[1]) free(p->lengths[1]); - free(p); - p = next; - } -} - -static void -free_diff3_blocks(p) - struct diff3_block *p; -{ - register struct diff3_block *next; - - while (p) - { - next = p->next; - if (p->lines[0]) free(p->lines[0]); - if (p->lines[1]) free(p->lines[1]); - if (p->lines[2]) free(p->lines[2]); - if (p->lengths[0]) free(p->lengths[0]); - if (p->lengths[1]) free(p->lengths[1]); - if (p->lengths[2]) free(p->lengths[2]); - free(p); - p = next; - } -} diff --git a/contrib/cvs/diff/dir.c b/contrib/cvs/diff/dir.c deleted file mode 100644 index 6eef9a632443..000000000000 --- a/contrib/cvs/diff/dir.c +++ /dev/null @@ -1,220 +0,0 @@ -/* Read, sort and compare two directories. Used for GNU DIFF. - Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "diff.h" - -/* Read the directory named by DIR and store into DIRDATA a sorted vector - of filenames for its contents. DIR->desc == -1 means this directory is - known to be nonexistent, so set DIRDATA to an empty vector. - Return -1 (setting errno) if error, 0 otherwise. */ - -struct dirdata -{ - char const **names; /* Sorted names of files in dir, 0-terminated. */ - char *data; /* Allocated storage for file names. */ -}; - -static int compare_names PARAMS((void const *, void const *)); -static int dir_sort PARAMS((struct file_data const *, struct dirdata *)); - -#ifdef _WIN32 -#define CLOSEDIR_VOID 1 -#endif - -static int -dir_sort (dir, dirdata) - struct file_data const *dir; - struct dirdata *dirdata; -{ - register struct dirent *next; - register int i; - - /* Address of block containing the files that are described. */ - char const **names; - - /* Number of files in directory. */ - size_t nnames; - - /* Allocated and used storage for file name data. */ - char *data; - size_t data_alloc, data_used; - - dirdata->names = 0; - dirdata->data = 0; - nnames = 0; - data = 0; - - if (dir->desc != -1) - { - /* Open the directory and check for errors. */ - register DIR *reading = opendir (dir->name); - if (!reading) - return -1; - - /* Initialize the table of filenames. */ - - data_alloc = max (1, (size_t) dir->stat.st_size); - data_used = 0; - dirdata->data = data = xmalloc (data_alloc); - - /* Read the directory entries, and insert the subfiles - into the `data' table. */ - - while ((errno = 0, (next = readdir (reading)) != 0)) - { - char *d_name = next->d_name; - size_t d_size = NAMLEN (next) + 1; - - /* Ignore the files `.' and `..' */ - if (d_name[0] == '.' - && (d_name[1] == 0 || (d_name[1] == '.' && d_name[2] == 0))) - continue; - - if (excluded_filename (d_name)) - continue; - - while (data_alloc < data_used + d_size) - dirdata->data = data = xrealloc (data, data_alloc *= 2); - memcpy (data + data_used, d_name, d_size); - data_used += d_size; - nnames++; - } - if (errno) - { - int e = errno; - closedir (reading); - errno = e; - return -1; - } -#if CLOSEDIR_VOID - closedir (reading); -#else - if (closedir (reading) != 0) - return -1; -#endif - } - - /* Create the `names' table from the `data' table. */ - dirdata->names = names = (char const **) xmalloc (sizeof (char *) - * (nnames + 1)); - for (i = 0; i < nnames; i++) - { - names[i] = data; - data += strlen (data) + 1; - } - names[nnames] = 0; - - /* Sort the table. */ - qsort (names, nnames, sizeof (char *), compare_names); - - return 0; -} - -/* Sort the files now in the table. */ - -static int -compare_names (file1, file2) - void const *file1, *file2; -{ - return filename_cmp (* (char const *const *) file1, - * (char const *const *) file2); -} - -/* Compare the contents of two directories named in FILEVEC[0] and FILEVEC[1]. - This is a top-level routine; it does everything necessary for diff - on two directories. - - FILEVEC[0].desc == -1 says directory FILEVEC[0] doesn't exist, - but pretend it is empty. Likewise for FILEVEC[1]. - - HANDLE_FILE is a caller-provided subroutine called to handle each file. - It gets five operands: dir and name (rel to original working dir) of file - in dir 0, dir and name pathname of file in dir 1, and the recursion depth. - - For a file that appears in only one of the dirs, one of the name-args - to HANDLE_FILE is zero. - - DEPTH is the current depth in recursion, used for skipping top-level - files by the -S option. - - Returns the maximum of all the values returned by HANDLE_FILE, - or 2 if trouble is encountered in opening files. */ - -int -diff_dirs (filevec, handle_file, depth) - struct file_data const filevec[]; - int (*handle_file) PARAMS((char const *, char const *, char const *, char const *, int)); - int depth; -{ - struct dirdata dirdata[2]; - int val = 0; /* Return value. */ - int i; - - /* Get sorted contents of both dirs. */ - for (i = 0; i < 2; i++) - if (dir_sort (&filevec[i], &dirdata[i]) != 0) - { - perror_with_name (filevec[i].name); - val = 2; - } - - if (val == 0) - { - register char const * const *names0 = dirdata[0].names; - register char const * const *names1 = dirdata[1].names; - char const *name0 = filevec[0].name; - char const *name1 = filevec[1].name; - - /* If `-S name' was given, and this is the topmost level of comparison, - ignore all file names less than the specified starting name. */ - - if (dir_start_file && depth == 0) - { - while (*names0 && filename_cmp (*names0, dir_start_file) < 0) - names0++; - while (*names1 && filename_cmp (*names1, dir_start_file) < 0) - names1++; - } - - /* Loop while files remain in one or both dirs. */ - while (*names0 || *names1) - { - /* Compare next name in dir 0 with next name in dir 1. - At the end of a dir, - pretend the "next name" in that dir is very large. */ - int nameorder = (!*names0 ? 1 : !*names1 ? -1 - : filename_cmp (*names0, *names1)); - int v1 = (*handle_file) (name0, 0 < nameorder ? 0 : *names0++, - name1, nameorder < 0 ? 0 : *names1++, - depth + 1); - if (v1 > val) - val = v1; - } - } - - for (i = 0; i < 2; i++) - { - if (dirdata[i].names) - free (dirdata[i].names); - if (dirdata[i].data) - free (dirdata[i].data); - } - - return val; -} diff --git a/contrib/cvs/diff/ed.c b/contrib/cvs/diff/ed.c deleted file mode 100644 index 717ef358d0ee..000000000000 --- a/contrib/cvs/diff/ed.c +++ /dev/null @@ -1,200 +0,0 @@ -/* Output routines for ed-script format. - Copyright (C) 1988, 89, 91, 92, 93 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "diff.h" - -static void print_ed_hunk PARAMS((struct change *)); -static void print_rcs_hunk PARAMS((struct change *)); -static void pr_forward_ed_hunk PARAMS((struct change *)); - -/* Print our script as ed commands. */ - -void -print_ed_script (script) - struct change *script; -{ - print_script (script, find_reverse_change, print_ed_hunk); -} - -/* Print a hunk of an ed diff */ - -static void -print_ed_hunk (hunk) - struct change *hunk; -{ - int f0, l0, f1, l1; - int deletes, inserts; - -#if 0 - hunk = flip_script (hunk); -#endif -#ifdef DEBUG - debug_script (hunk); -#endif - - /* Determine range of line numbers involved in each file. */ - analyze_hunk (hunk, &f0, &l0, &f1, &l1, &deletes, &inserts); - if (!deletes && !inserts) - return; - - begin_output (); - - /* Print out the line number header for this hunk */ - print_number_range (',', &files[0], f0, l0); - fprintf (outfile, "%c\n", change_letter (inserts, deletes)); - - /* Print new/changed lines from second file, if needed */ - if (inserts) - { - int i; - int inserting = 1; - for (i = f1; i <= l1; i++) - { - /* Resume the insert, if we stopped. */ - if (! inserting) - fprintf (outfile, "%da\n", - i - f1 + translate_line_number (&files[0], f0) - 1); - inserting = 1; - - /* If the file's line is just a dot, it would confuse `ed'. - So output it with a double dot, and set the flag LEADING_DOT - so that we will output another ed-command later - to change the double dot into a single dot. */ - - if (files[1].linbuf[i][0] == '.' - && files[1].linbuf[i][1] == '\n') - { - fprintf (outfile, "..\n"); - fprintf (outfile, ".\n"); - /* Now change that double dot to the desired single dot. */ - fprintf (outfile, "%ds/^\\.\\././\n", - i - f1 + translate_line_number (&files[0], f0)); - inserting = 0; - } - else - /* Line is not `.', so output it unmodified. */ - print_1_line ("", &files[1].linbuf[i]); - } - - /* End insert mode, if we are still in it. */ - if (inserting) - fprintf (outfile, ".\n"); - } -} - -/* Print change script in the style of ed commands, - but print the changes in the order they appear in the input files, - which means that the commands are not truly useful with ed. */ - -void -pr_forward_ed_script (script) - struct change *script; -{ - print_script (script, find_change, pr_forward_ed_hunk); -} - -static void -pr_forward_ed_hunk (hunk) - struct change *hunk; -{ - int i; - int f0, l0, f1, l1; - int deletes, inserts; - - /* Determine range of line numbers involved in each file. */ - analyze_hunk (hunk, &f0, &l0, &f1, &l1, &deletes, &inserts); - if (!deletes && !inserts) - return; - - begin_output (); - - fprintf (outfile, "%c", change_letter (inserts, deletes)); - print_number_range (' ', files, f0, l0); - fprintf (outfile, "\n"); - - /* If deletion only, print just the number range. */ - - if (!inserts) - return; - - /* For insertion (with or without deletion), print the number range - and the lines from file 2. */ - - for (i = f1; i <= l1; i++) - print_1_line ("", &files[1].linbuf[i]); - - fprintf (outfile, ".\n"); -} - -/* Print in a format somewhat like ed commands - except that each insert command states the number of lines it inserts. - This format is used for RCS. */ - -void -print_rcs_script (script) - struct change *script; -{ - print_script (script, find_change, print_rcs_hunk); -} - -/* Print a hunk of an RCS diff */ - -static void -print_rcs_hunk (hunk) - struct change *hunk; -{ - int i; - int f0, l0, f1, l1; - int deletes, inserts; - int tf0, tl0, tf1, tl1; - - /* Determine range of line numbers involved in each file. */ - analyze_hunk (hunk, &f0, &l0, &f1, &l1, &deletes, &inserts); - if (!deletes && !inserts) - return; - - begin_output (); - - translate_range (&files[0], f0, l0, &tf0, &tl0); - - if (deletes) - { - fprintf (outfile, "d"); - /* For deletion, print just the starting line number from file 0 - and the number of lines deleted. */ - fprintf (outfile, "%d %d\n", - tf0, - (tl0 >= tf0 ? tl0 - tf0 + 1 : 1)); - } - - if (inserts) - { - fprintf (outfile, "a"); - - /* Take last-line-number from file 0 and # lines from file 1. */ - translate_range (&files[1], f1, l1, &tf1, &tl1); - fprintf (outfile, "%d %d\n", - tl0, - (tl1 >= tf1 ? tl1 - tf1 + 1 : 1)); - - /* Print the inserted lines. */ - for (i = f1; i <= l1; i++) - print_1_line ("", &files[1].linbuf[i]); - } -} diff --git a/contrib/cvs/diff/ifdef.c b/contrib/cvs/diff/ifdef.c deleted file mode 100644 index 2834cbdfa236..000000000000 --- a/contrib/cvs/diff/ifdef.c +++ /dev/null @@ -1,428 +0,0 @@ -/* #ifdef-format output routines for GNU DIFF. - Copyright (C) 1989, 1991, 1992, 1993, 1994 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. Refer to the GNU DIFF General Public -License for full details. - -Everyone is granted permission to copy, modify and redistribute -GNU DIFF, but only under the conditions described in the -GNU DIFF General Public License. A copy of this license is -supposed to have been given to you along with GNU DIFF so you -can know your rights and responsibilities. It should be in a -file named COPYING. Among other things, the copyright notice -and this notice must be preserved on all copies. */ - - -#include "diff.h" - -struct group -{ - struct file_data const *file; - int from, upto; /* start and limit lines for this group of lines */ -}; - -static char *format_group PARAMS((FILE *, char *, int, struct group const *)); -static char *scan_char_literal PARAMS((char *, int *)); -static char *scan_printf_spec PARAMS((char *)); -static int groups_letter_value PARAMS((struct group const *, int)); -static void format_ifdef PARAMS((char *, int, int, int, int)); -static void print_ifdef_hunk PARAMS((struct change *)); -static void print_ifdef_lines PARAMS((FILE *, char *, struct group const *)); - -static int next_line; - -/* Print the edit-script SCRIPT as a merged #ifdef file. */ - -void -print_ifdef_script (script) - struct change *script; -{ - next_line = - files[0].prefix_lines; - print_script (script, find_change, print_ifdef_hunk); - if (next_line < files[0].valid_lines) - { - begin_output (); - format_ifdef (group_format[UNCHANGED], next_line, files[0].valid_lines, - next_line - files[0].valid_lines + files[1].valid_lines, - files[1].valid_lines); - } -} - -/* Print a hunk of an ifdef diff. - This is a contiguous portion of a complete edit script, - describing changes in consecutive lines. */ - -static void -print_ifdef_hunk (hunk) - struct change *hunk; -{ - int first0, last0, first1, last1, deletes, inserts; - char *format; - - /* Determine range of line numbers involved in each file. */ - analyze_hunk (hunk, &first0, &last0, &first1, &last1, &deletes, &inserts); - if (inserts) - format = deletes ? group_format[CHANGED] : group_format[NEW]; - else if (deletes) - format = group_format[OLD]; - else - return; - - begin_output (); - - /* Print lines up to this change. */ - if (next_line < first0) - format_ifdef (group_format[UNCHANGED], next_line, first0, - next_line - first0 + first1, first1); - - /* Print this change. */ - next_line = last0 + 1; - format_ifdef (format, first0, next_line, first1, last1 + 1); -} - -/* Print a set of lines according to FORMAT. - Lines BEG0 up to END0 are from the first file; - lines BEG1 up to END1 are from the second file. */ - -static void -format_ifdef (format, beg0, end0, beg1, end1) - char *format; - int beg0, end0, beg1, end1; -{ - struct group groups[2]; - - groups[0].file = &files[0]; - groups[0].from = beg0; - groups[0].upto = end0; - groups[1].file = &files[1]; - groups[1].from = beg1; - groups[1].upto = end1; - format_group (outfile, format, '\0', groups); -} - -/* Print to file OUT a set of lines according to FORMAT. - The format ends at the first free instance of ENDCHAR. - Yield the address of the terminating character. - GROUPS specifies which lines to print. - If OUT is zero, do not actually print anything; just scan the format. */ - -static char * -format_group (out, format, endchar, groups) - register FILE *out; - char *format; - int endchar; - struct group const *groups; -{ - register char c; - register char *f = format; - - while ((c = *f) != endchar && c != 0) - { - f++; - if (c == '%') - { - char *spec = f; - switch ((c = *f++)) - { - case '%': - break; - - case '(': - /* Print if-then-else format e.g. `%(n=1?thenpart:elsepart)'. */ - { - int i, value[2]; - FILE *thenout, *elseout; - - for (i = 0; i < 2; i++) - { - unsigned char f0 = f[0]; - if (ISDIGIT (f0)) - { - value[i] = atoi (f); - while (ISDIGIT ((unsigned char) *++f)) - continue; - } - else - { - value[i] = groups_letter_value (groups, f0); - if (value[i] < 0) - goto bad_format; - f++; - } - if (*f++ != "=?"[i]) - goto bad_format; - } - if (value[0] == value[1]) - thenout = out, elseout = 0; - else - thenout = 0, elseout = out; - f = format_group (thenout, f, ':', groups); - if (*f) - { - f = format_group (elseout, f + 1, ')', groups); - if (*f) - f++; - } - } - continue; - - case '<': - /* Print lines deleted from first file. */ - print_ifdef_lines (out, line_format[OLD], &groups[0]); - continue; - - case '=': - /* Print common lines. */ - print_ifdef_lines (out, line_format[UNCHANGED], &groups[0]); - continue; - - case '>': - /* Print lines inserted from second file. */ - print_ifdef_lines (out, line_format[NEW], &groups[1]); - continue; - - default: - { - int value; - char *speclim; - - f = scan_printf_spec (spec); - if (!f) - goto bad_format; - speclim = f; - c = *f++; - switch (c) - { - case '\'': - f = scan_char_literal (f, &value); - if (!f) - goto bad_format; - break; - - default: - value = groups_letter_value (groups, c); - if (value < 0) - goto bad_format; - break; - } - if (out) - { - /* Temporarily replace e.g. "%3dnx" with "%3d\0x". */ - *speclim = 0; - fprintf (out, spec - 1, value); - /* Undo the temporary replacement. */ - *speclim = c; - } - } - continue; - - bad_format: - c = '%'; - f = spec; - break; - } - } - if (out) - putc (c, out); - } - return f; -} - -/* For the line group pair G, return the number corresponding to LETTER. - Return -1 if LETTER is not a group format letter. */ -static int -groups_letter_value (g, letter) - struct group const *g; - int letter; -{ - if (ISUPPER (letter)) - { - g++; - letter = tolower (letter); - } - switch (letter) - { - case 'e': return translate_line_number (g->file, g->from) - 1; - case 'f': return translate_line_number (g->file, g->from); - case 'l': return translate_line_number (g->file, g->upto) - 1; - case 'm': return translate_line_number (g->file, g->upto); - case 'n': return g->upto - g->from; - default: return -1; - } -} - -/* Print to file OUT, using FORMAT to print the line group GROUP. - But do nothing if OUT is zero. */ -static void -print_ifdef_lines (out, format, group) - register FILE *out; - char *format; - struct group const *group; -{ - struct file_data const *file = group->file; - char const * const *linbuf = file->linbuf; - int from = group->from, upto = group->upto; - - if (!out) - return; - - /* If possible, use a single fwrite; it's faster. */ - if (!tab_expand_flag && format[0] == '%') - { - if (format[1] == 'l' && format[2] == '\n' && !format[3]) - { - fwrite (linbuf[from], sizeof (char), - linbuf[upto] + (linbuf[upto][-1] != '\n') - linbuf[from], - out); - return; - } - if (format[1] == 'L' && !format[2]) - { - fwrite (linbuf[from], sizeof (char), - linbuf[upto] - linbuf[from], out); - return; - } - } - - for (; from < upto; from++) - { - register char c; - register char *f = format; - - while ((c = *f++) != 0) - { - if (c == '%') - { - char *spec = f; - switch ((c = *f++)) - { - case '%': - break; - - case 'l': - output_1_line (linbuf[from], - linbuf[from + 1] - - (linbuf[from + 1][-1] == '\n'), 0, 0); - continue; - - case 'L': - output_1_line (linbuf[from], linbuf[from + 1], 0, 0); - continue; - - default: - { - int value; - char *speclim; - - f = scan_printf_spec (spec); - if (!f) - goto bad_format; - speclim = f; - c = *f++; - switch (c) - { - case '\'': - f = scan_char_literal (f, &value); - if (!f) - goto bad_format; - break; - - case 'n': - value = translate_line_number (file, from); - break; - - default: - goto bad_format; - } - /* Temporarily replace e.g. "%3dnx" with "%3d\0x". */ - *speclim = 0; - fprintf (out, spec - 1, value); - /* Undo the temporary replacement. */ - *speclim = c; - } - continue; - - bad_format: - c = '%'; - f = spec; - break; - } - } - putc (c, out); - } - } -} - -/* Scan the character literal represented in the string LIT; LIT points just - after the initial apostrophe. Put the literal's value into *INTPTR. - Yield the address of the first character after the closing apostrophe, - or zero if the literal is ill-formed. */ -static char * -scan_char_literal (lit, intptr) - char *lit; - int *intptr; -{ - register char *p = lit; - int value, digits; - char c = *p++; - - switch (c) - { - case 0: - case '\'': - return 0; - - case '\\': - value = 0; - while ((c = *p++) != '\'') - { - unsigned digit = c - '0'; - if (8 <= digit) - return 0; - value = 8 * value + digit; - } - digits = p - lit - 2; - if (! (1 <= digits && digits <= 3)) - return 0; - break; - - default: - value = c; - if (*p++ != '\'') - return 0; - break; - } - *intptr = value; - return p; -} - -/* Scan optional printf-style SPEC of the form `-*[0-9]*(.[0-9]*)?[cdoxX]'. - Return the address of the character following SPEC, or zero if failure. */ -static char * -scan_printf_spec (spec) - register char *spec; -{ - register unsigned char c; - - while ((c = *spec++) == '-') - continue; - while (ISDIGIT (c)) - c = *spec++; - if (c == '.') - while (ISDIGIT (c = *spec++)) - continue; - switch (c) - { - case 'c': case 'd': case 'o': case 'x': case 'X': - return spec; - - default: - return 0; - } -} diff --git a/contrib/cvs/diff/io.c b/contrib/cvs/diff/io.c deleted file mode 100644 index 660591551091..000000000000 --- a/contrib/cvs/diff/io.c +++ /dev/null @@ -1,714 +0,0 @@ -/* File I/O for GNU DIFF. - Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "diff.h" - -/* Rotate a value n bits to the left. */ -#define UINT_BIT (sizeof (unsigned) * CHAR_BIT) -#define ROL(v, n) ((v) << (n) | (v) >> (UINT_BIT - (n))) - -/* Given a hash value and a new character, return a new hash value. */ -#define HASH(h, c) ((c) + ROL (h, 7)) - -/* Guess remaining number of lines from number N of lines so far, - size S so far, and total size T. */ -#define GUESS_LINES(n,s,t) (((t) - (s)) / ((n) < 10 ? 32 : (s) / ((n)-1)) + 5) - -/* Type used for fast prefix comparison in find_identical_ends. */ -#ifndef word -#define word int -#endif - -/* Lines are put into equivalence classes (of lines that match in line_cmp). - Each equivalence class is represented by one of these structures, - but only while the classes are being computed. - Afterward, each class is represented by a number. */ -struct equivclass -{ - int next; /* Next item in this bucket. */ - unsigned hash; /* Hash of lines in this class. */ - char const *line; /* A line that fits this class. */ - size_t length; /* That line's length, not counting its newline. */ -}; - -/* Hash-table: array of buckets, each being a chain of equivalence classes. - buckets[-1] is reserved for incomplete lines. */ -static int *buckets; - -/* Number of buckets in the hash table array, not counting buckets[-1]. */ -static int nbuckets; - -/* Array in which the equivalence classes are allocated. - The bucket-chains go through the elements in this array. - The number of an equivalence class is its index in this array. */ -static struct equivclass *equivs; - -/* Index of first free element in the array `equivs'. */ -static int equivs_index; - -/* Number of elements allocated in the array `equivs'. */ -static int equivs_alloc; - -static void find_and_hash_each_line PARAMS((struct file_data *)); -static void find_identical_ends PARAMS((struct file_data[])); -static void prepare_text_end PARAMS((struct file_data *)); - -/* Check for binary files and compare them for exact identity. */ - -/* Return 1 if BUF contains a non text character. - SIZE is the number of characters in BUF. */ - -#define binary_file_p(buf, size) (memchr (buf, '\0', size) != 0) - -/* Get ready to read the current file. - Return nonzero if SKIP_TEST is zero, - and if it appears to be a binary file. */ - -int -sip (current, skip_test) - struct file_data *current; - int skip_test; -{ - /* If we have a nonexistent file at this stage, treat it as empty. */ - if (current->desc < 0) - { - /* Leave room for a sentinel. */ - current->bufsize = sizeof (word); - current->buffer = xmalloc (current->bufsize); - } - else - { - current->bufsize = STAT_BLOCKSIZE (current->stat); - current->buffer = xmalloc (current->bufsize); - - if (! skip_test) - { - /* Check first part of file to see if it's a binary file. */ -#if HAVE_SETMODE - int oldmode = setmode (current->desc, O_BINARY); -#endif - size_t n = read (current->desc, current->buffer, current->bufsize); - if (n == -1) - pfatal_with_name (current->name); - current->buffered_chars = n; -#if HAVE_SETMODE - if (oldmode != O_BINARY) - { - if (lseek (current->desc, - (off_t) n, SEEK_CUR) == -1) - pfatal_with_name (current->name); - setmode (current->desc, oldmode); - current->buffered_chars = 0; - } -#endif - return binary_file_p (current->buffer, n); - } - } - - current->buffered_chars = 0; - return 0; -} - -/* Slurp the rest of the current file completely into memory. */ - -void -slurp (current) - struct file_data *current; -{ - size_t cc; - - if (current->desc < 0) - /* The file is nonexistent. */ - ; - else if (S_ISREG (current->stat.st_mode)) - { - /* It's a regular file; slurp in the rest all at once. */ - - /* Get the size out of the stat block. - Allocate enough room for appended newline and sentinel. */ - cc = current->stat.st_size + 1 + sizeof (word); - if (current->bufsize < cc) - { - current->bufsize = cc; - current->buffer = xrealloc (current->buffer, cc); - } - - if (current->buffered_chars < current->stat.st_size) - { - cc = read (current->desc, - current->buffer + current->buffered_chars, - current->stat.st_size - current->buffered_chars); - if (cc == -1) - pfatal_with_name (current->name); - current->buffered_chars += cc; - } - } - /* It's not a regular file; read it, growing the buffer as needed. */ - else if (always_text_flag || current->buffered_chars != 0) - { - for (;;) - { - if (current->buffered_chars == current->bufsize) - { - current->bufsize = current->bufsize * 2; - current->buffer = xrealloc (current->buffer, current->bufsize); - } - cc = read (current->desc, - current->buffer + current->buffered_chars, - current->bufsize - current->buffered_chars); - if (cc == 0) - break; - if (cc == -1) - pfatal_with_name (current->name); - current->buffered_chars += cc; - } - /* Allocate just enough room for appended newline and sentinel. */ - current->bufsize = current->buffered_chars + 1 + sizeof (word); - current->buffer = xrealloc (current->buffer, current->bufsize); - } -} - -/* Split the file into lines, simultaneously computing the equivalence class for - each line. */ - -static void -find_and_hash_each_line (current) - struct file_data *current; -{ - unsigned h; - unsigned char const *p = (unsigned char const *) current->prefix_end; - unsigned char c; - int i, *bucket; - size_t length; - - /* Cache often-used quantities in local variables to help the compiler. */ - char const **linbuf = current->linbuf; - int alloc_lines = current->alloc_lines; - int line = 0; - int linbuf_base = current->linbuf_base; - int *cureqs = (int *) xmalloc (alloc_lines * sizeof (int)); - struct equivclass *eqs = equivs; - int eqs_index = equivs_index; - int eqs_alloc = equivs_alloc; - char const *suffix_begin = current->suffix_begin; - char const *bufend = current->buffer + current->buffered_chars; - int use_line_cmp = ignore_some_line_changes; - - while ((char const *) p < suffix_begin) - { - char const *ip = (char const *) p; - - /* Compute the equivalence class for this line. */ - - h = 0; - - /* Hash this line until we find a newline. */ - if (ignore_case_flag) - { - if (ignore_all_space_flag) - while ((c = *p++) != '\n') - { - if (! ISSPACE (c)) - h = HASH (h, ISUPPER (c) ? tolower (c) : c); - } - else if (ignore_space_change_flag) - while ((c = *p++) != '\n') - { - if (ISSPACE (c)) - { - for (;;) - { - c = *p++; - if (!ISSPACE (c)) - break; - if (c == '\n') - goto hashing_done; - } - h = HASH (h, ' '); - } - /* C is now the first non-space. */ - h = HASH (h, ISUPPER (c) ? tolower (c) : c); - } - else - while ((c = *p++) != '\n') - h = HASH (h, ISUPPER (c) ? tolower (c) : c); - } - else - { - if (ignore_all_space_flag) - while ((c = *p++) != '\n') - { - if (! ISSPACE (c)) - h = HASH (h, c); - } - else if (ignore_space_change_flag) - while ((c = *p++) != '\n') - { - if (ISSPACE (c)) - { - for (;;) - { - c = *p++; - if (!ISSPACE (c)) - break; - if (c == '\n') - goto hashing_done; - } - h = HASH (h, ' '); - } - /* C is now the first non-space. */ - h = HASH (h, c); - } - else - while ((c = *p++) != '\n') - h = HASH (h, c); - } - hashing_done:; - - bucket = &buckets[h % nbuckets]; - length = (char const *) p - ip - 1; - - if ((char const *) p == bufend - && current->missing_newline - && ROBUST_OUTPUT_STYLE (output_style)) - { - /* This line is incomplete. If this is significant, - put the line into bucket[-1]. */ - if (! (ignore_space_change_flag | ignore_all_space_flag)) - bucket = &buckets[-1]; - - /* Omit the inserted newline when computing linbuf later. */ - p--; - bufend = suffix_begin = (char const *) p; - } - - for (i = *bucket; ; i = eqs[i].next) - if (!i) - { - /* Create a new equivalence class in this bucket. */ - i = eqs_index++; - if (i == eqs_alloc) - eqs = (struct equivclass *) - xrealloc (eqs, (eqs_alloc*=2) * sizeof(*eqs)); - eqs[i].next = *bucket; - eqs[i].hash = h; - eqs[i].line = ip; - eqs[i].length = length; - *bucket = i; - break; - } - else if (eqs[i].hash == h) - { - char const *eqline = eqs[i].line; - - /* Reuse existing equivalence class if the lines are identical. - This detects the common case of exact identity - faster than complete comparison would. */ - if (eqs[i].length == length && memcmp (eqline, ip, length) == 0) - break; - - /* Reuse existing class if line_cmp reports the lines equal. */ - if (use_line_cmp && line_cmp (eqline, ip) == 0) - break; - } - - /* Maybe increase the size of the line table. */ - if (line == alloc_lines) - { - /* Double (alloc_lines - linbuf_base) by adding to alloc_lines. */ - alloc_lines = 2 * alloc_lines - linbuf_base; - cureqs = (int *) xrealloc (cureqs, alloc_lines * sizeof (*cureqs)); - linbuf = (char const **) xrealloc (linbuf + linbuf_base, - (alloc_lines - linbuf_base) - * sizeof (*linbuf)) - - linbuf_base; - } - linbuf[line] = ip; - cureqs[line] = i; - ++line; - } - - current->buffered_lines = line; - - for (i = 0; ; i++) - { - /* Record the line start for lines in the suffix that we care about. - Record one more line start than lines, - so that we can compute the length of any buffered line. */ - if (line == alloc_lines) - { - /* Double (alloc_lines - linbuf_base) by adding to alloc_lines. */ - alloc_lines = 2 * alloc_lines - linbuf_base; - linbuf = (char const **) xrealloc (linbuf + linbuf_base, - (alloc_lines - linbuf_base) - * sizeof (*linbuf)) - - linbuf_base; - } - linbuf[line] = (char const *) p; - - if ((char const *) p == bufend) - break; - - if (context <= i && no_diff_means_no_output) - break; - - line++; - - while (*p++ != '\n') - ; - } - - /* Done with cache in local variables. */ - current->linbuf = linbuf; - current->valid_lines = line; - current->alloc_lines = alloc_lines; - current->equivs = cureqs; - equivs = eqs; - equivs_alloc = eqs_alloc; - equivs_index = eqs_index; -} - -/* Prepare the end of the text. Make sure it's initialized. - Make sure text ends in a newline, - but remember that we had to add one. */ - -static void -prepare_text_end (current) - struct file_data *current; -{ - size_t buffered_chars = current->buffered_chars; - char *p = current->buffer; - - if (buffered_chars == 0 || p[buffered_chars - 1] == '\n') - current->missing_newline = 0; - else - { - p[buffered_chars++] = '\n'; - current->buffered_chars = buffered_chars; - current->missing_newline = 1; - } - - /* Don't use uninitialized storage when planting or using sentinels. */ - if (p) - bzero (p + buffered_chars, sizeof (word)); -} - -/* Given a vector of two file_data objects, find the identical - prefixes and suffixes of each object. */ - -static void -find_identical_ends (filevec) - struct file_data filevec[]; -{ - word *w0, *w1; - char *p0, *p1, *buffer0, *buffer1; - char const *end0, *beg0; - char const **linbuf0, **linbuf1; - int i, lines; - size_t n0, n1, tem; - int alloc_lines0, alloc_lines1; - int buffered_prefix, prefix_count, prefix_mask; - - slurp (&filevec[0]); - if (filevec[0].desc != filevec[1].desc) - slurp (&filevec[1]); - else - { - filevec[1].buffer = filevec[0].buffer; - filevec[1].bufsize = filevec[0].bufsize; - filevec[1].buffered_chars = filevec[0].buffered_chars; - } - for (i = 0; i < 2; i++) - prepare_text_end (&filevec[i]); - - /* Find identical prefix. */ - - p0 = buffer0 = filevec[0].buffer; - p1 = buffer1 = filevec[1].buffer; - - n0 = filevec[0].buffered_chars; - n1 = filevec[1].buffered_chars; - - if (p0 == p1) - /* The buffers are the same; sentinels won't work. */ - p0 = p1 += n1; - else - { - /* Insert end sentinels, in this case characters that are guaranteed - to make the equality test false, and thus terminate the loop. */ - - if (n0 < n1) - p0[n0] = ~p1[n0]; - else - p1[n1] = ~p0[n1]; - - /* Loop until first mismatch, or to the sentinel characters. */ - - /* Compare a word at a time for speed. */ - w0 = (word *) p0; - w1 = (word *) p1; - while (*w0++ == *w1++) - ; - --w0, --w1; - - /* Do the last few bytes of comparison a byte at a time. */ - p0 = (char *) w0; - p1 = (char *) w1; - while (*p0++ == *p1++) - ; - --p0, --p1; - - /* Don't mistakenly count missing newline as part of prefix. */ - if (ROBUST_OUTPUT_STYLE (output_style) - && (buffer0 + n0 - filevec[0].missing_newline < p0) - != - (buffer1 + n1 - filevec[1].missing_newline < p1)) - --p0, --p1; - } - - /* Now P0 and P1 point at the first nonmatching characters. */ - - /* Skip back to last line-beginning in the prefix, - and then discard up to HORIZON_LINES lines from the prefix. */ - i = horizon_lines; - while (p0 != buffer0 && (p0[-1] != '\n' || i--)) - --p0, --p1; - - /* Record the prefix. */ - filevec[0].prefix_end = p0; - filevec[1].prefix_end = p1; - - /* Find identical suffix. */ - - /* P0 and P1 point beyond the last chars not yet compared. */ - p0 = buffer0 + n0; - p1 = buffer1 + n1; - - if (! ROBUST_OUTPUT_STYLE (output_style) - || filevec[0].missing_newline == filevec[1].missing_newline) - { - end0 = p0; /* Addr of last char in file 0. */ - - /* Get value of P0 at which we should stop scanning backward: - this is when either P0 or P1 points just past the last char - of the identical prefix. */ - beg0 = filevec[0].prefix_end + (n0 < n1 ? 0 : n0 - n1); - - /* Scan back until chars don't match or we reach that point. */ - while (p0 != beg0) - if (*--p0 != *--p1) - { - /* Point at the first char of the matching suffix. */ - ++p0, ++p1; - beg0 = p0; - break; - } - - /* Are we at a line-beginning in both files? If not, add the rest of - this line to the main body. Discard up to HORIZON_LINES lines from - the identical suffix. Also, discard one extra line, - because shift_boundaries may need it. */ - i = horizon_lines + !((buffer0 == p0 || p0[-1] == '\n') - && - (buffer1 == p1 || p1[-1] == '\n')); - while (i-- && p0 != end0) - while (*p0++ != '\n') - ; - - p1 += p0 - beg0; - } - - /* Record the suffix. */ - filevec[0].suffix_begin = p0; - filevec[1].suffix_begin = p1; - - /* Calculate number of lines of prefix to save. - - prefix_count == 0 means save the whole prefix; - we need this with for options like -D that output the whole file. - We also need it for options like -F that output some preceding line; - at least we will need to find the last few lines, - but since we don't know how many, it's easiest to find them all. - - Otherwise, prefix_count != 0. Save just prefix_count lines at start - of the line buffer; they'll be moved to the proper location later. - Handle 1 more line than the context says (because we count 1 too many), - rounded up to the next power of 2 to speed index computation. */ - - if (no_diff_means_no_output && ! function_regexp_list) - { - for (prefix_count = 1; prefix_count < context + 1; prefix_count *= 2) - ; - prefix_mask = prefix_count - 1; - alloc_lines0 - = prefix_count - + GUESS_LINES (0, 0, p0 - filevec[0].prefix_end) - + context; - } - else - { - prefix_count = 0; - prefix_mask = ~0; - alloc_lines0 = GUESS_LINES (0, 0, n0); - } - - lines = 0; - linbuf0 = (char const **) xmalloc (alloc_lines0 * sizeof (*linbuf0)); - - /* If the prefix is needed, find the prefix lines. */ - if (! (no_diff_means_no_output - && filevec[0].prefix_end == p0 - && filevec[1].prefix_end == p1)) - { - p0 = buffer0; - end0 = filevec[0].prefix_end; - while (p0 != end0) - { - int l = lines++ & prefix_mask; - if (l == alloc_lines0) - linbuf0 = (char const **) xrealloc (linbuf0, (alloc_lines0 *= 2) - * sizeof(*linbuf0)); - linbuf0[l] = p0; - while (*p0++ != '\n') - ; - } - } - buffered_prefix = prefix_count && context < lines ? context : lines; - - /* Allocate line buffer 1. */ - tem = prefix_count ? filevec[1].suffix_begin - buffer1 : n1; - - alloc_lines1 - = (buffered_prefix - + GUESS_LINES (lines, filevec[1].prefix_end - buffer1, tem) - + context); - linbuf1 = (char const **) xmalloc (alloc_lines1 * sizeof (*linbuf1)); - - if (buffered_prefix != lines) - { - /* Rotate prefix lines to proper location. */ - for (i = 0; i < buffered_prefix; i++) - linbuf1[i] = linbuf0[(lines - context + i) & prefix_mask]; - for (i = 0; i < buffered_prefix; i++) - linbuf0[i] = linbuf1[i]; - } - - /* Initialize line buffer 1 from line buffer 0. */ - for (i = 0; i < buffered_prefix; i++) - linbuf1[i] = linbuf0[i] - buffer0 + buffer1; - - /* Record the line buffer, adjusted so that - linbuf*[0] points at the first differing line. */ - filevec[0].linbuf = linbuf0 + buffered_prefix; - filevec[1].linbuf = linbuf1 + buffered_prefix; - filevec[0].linbuf_base = filevec[1].linbuf_base = - buffered_prefix; - filevec[0].alloc_lines = alloc_lines0 - buffered_prefix; - filevec[1].alloc_lines = alloc_lines1 - buffered_prefix; - filevec[0].prefix_lines = filevec[1].prefix_lines = lines; -} - -/* Largest primes less than some power of two, for nbuckets. Values range - from useful to preposterous. If one of these numbers isn't prime - after all, don't blame it on me, blame it on primes (6) . . . */ -static int const primes[] = -{ - 509, - 1021, - 2039, - 4093, - 8191, - 16381, - 32749, -#if 32767 < INT_MAX - 65521, - 131071, - 262139, - 524287, - 1048573, - 2097143, - 4194301, - 8388593, - 16777213, - 33554393, - 67108859, /* Preposterously large . . . */ - 134217689, - 268435399, - 536870909, - 1073741789, - 2147483647, -#endif - 0 -}; - -/* Given a vector of two file_data objects, read the file associated - with each one, and build the table of equivalence classes. - Return 1 if either file appears to be a binary file. - If PRETEND_BINARY is nonzero, pretend they are binary regardless. */ - -int -read_files (filevec, pretend_binary) - struct file_data filevec[]; - int pretend_binary; -{ - int i; - int skip_test = always_text_flag | pretend_binary; - int appears_binary = pretend_binary | sip (&filevec[0], skip_test); - - if (filevec[0].desc != filevec[1].desc) - appears_binary |= sip (&filevec[1], skip_test | appears_binary); - else - { - filevec[1].buffer = filevec[0].buffer; - filevec[1].bufsize = filevec[0].bufsize; - filevec[1].buffered_chars = filevec[0].buffered_chars; - } - if (appears_binary) - { -#if HAVE_SETMODE - setmode (filevec[0].desc, O_BINARY); - setmode (filevec[1].desc, O_BINARY); -#endif - return 1; - } - - find_identical_ends (filevec); - - equivs_alloc = filevec[0].alloc_lines + filevec[1].alloc_lines + 1; - equivs = (struct equivclass *) xmalloc (equivs_alloc * sizeof (struct equivclass)); - /* Equivalence class 0 is permanently safe for lines that were not - hashed. Real equivalence classes start at 1. */ - equivs_index = 1; - - for (i = 0; primes[i] < equivs_alloc / 3; i++) - if (! primes[i]) - abort (); - nbuckets = primes[i]; - - buckets = (int *) xmalloc ((nbuckets + 1) * sizeof (*buckets)); - bzero (buckets++, (nbuckets + 1) * sizeof (*buckets)); - - for (i = 0; i < 2; i++) - find_and_hash_each_line (&filevec[i]); - - filevec[0].equiv_max = filevec[1].equiv_max = equivs_index; - - free (equivs); - free (buckets - 1); - - return 0; -} diff --git a/contrib/cvs/diff/normal.c b/contrib/cvs/diff/normal.c deleted file mode 100644 index 4d9e23cb72a0..000000000000 --- a/contrib/cvs/diff/normal.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Normal-format output routines for GNU DIFF. - Copyright (C) 1988, 1989, 1993 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - - -#include "diff.h" - -static void print_normal_hunk PARAMS((struct change *)); - -/* Print the edit-script SCRIPT as a normal diff. - INF points to an array of descriptions of the two files. */ - -void -print_normal_script (script) - struct change *script; -{ - print_script (script, find_change, print_normal_hunk); -} - -/* Print a hunk of a normal diff. - This is a contiguous portion of a complete edit script, - describing changes in consecutive lines. */ - -static void -print_normal_hunk (hunk) - struct change *hunk; -{ - int first0, last0, first1, last1, deletes, inserts; - register int i; - - /* Determine range of line numbers involved in each file. */ - analyze_hunk (hunk, &first0, &last0, &first1, &last1, &deletes, &inserts); - if (!deletes && !inserts) - return; - - begin_output (); - - /* Print out the line number header for this hunk */ - print_number_range (',', &files[0], first0, last0); - fprintf (outfile, "%c", change_letter (inserts, deletes)); - print_number_range (',', &files[1], first1, last1); - fprintf (outfile, "\n"); - - /* Print the lines that the first file has. */ - if (deletes) - for (i = first0; i <= last0; i++) - print_1_line ("<", &files[0].linbuf[i]); - - if (inserts && deletes) - fprintf (outfile, "---\n"); - - /* Print the lines that the second file has. */ - if (inserts) - for (i = first1; i <= last1; i++) - print_1_line (">", &files[1].linbuf[i]); -} diff --git a/contrib/cvs/diff/side.c b/contrib/cvs/diff/side.c deleted file mode 100644 index a150b5e705fc..000000000000 --- a/contrib/cvs/diff/side.c +++ /dev/null @@ -1,284 +0,0 @@ -/* sdiff-format output routines for GNU DIFF. - Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. Refer to the GNU DIFF General Public -License for full details. - -Everyone is granted permission to copy, modify and redistribute -GNU DIFF, but only under the conditions described in the -GNU DIFF General Public License. A copy of this license is -supposed to have been given to you along with GNU DIFF so you -can know your rights and responsibilities. It should be in a -file named COPYING. Among other things, the copyright notice -and this notice must be preserved on all copies. */ - - -#include "diff.h" - -static unsigned print_half_line PARAMS((char const * const *, unsigned, unsigned)); -static unsigned tab_from_to PARAMS((unsigned, unsigned)); -static void print_1sdiff_line PARAMS((char const * const *, int, char const * const *)); -static void print_sdiff_common_lines PARAMS((int, int)); -static void print_sdiff_hunk PARAMS((struct change *)); - -/* Next line number to be printed in the two input files. */ -static int next0, next1; - -/* Print the edit-script SCRIPT as a sdiff style output. */ - -void -print_sdiff_script (script) - struct change *script; -{ - begin_output (); - - next0 = next1 = - files[0].prefix_lines; - print_script (script, find_change, print_sdiff_hunk); - - print_sdiff_common_lines (files[0].valid_lines, files[1].valid_lines); -} - -/* Tab from column FROM to column TO, where FROM <= TO. Yield TO. */ - -static unsigned -tab_from_to (from, to) - unsigned from, to; -{ - FILE *out = outfile; - unsigned tab; - - if (! tab_expand_flag) - for (tab = from + TAB_WIDTH - from % TAB_WIDTH; tab <= to; tab += TAB_WIDTH) - { - putc ('\t', out); - from = tab; - } - while (from++ < to) - putc (' ', out); - return to; -} - -/* - * Print the text for half an sdiff line. This means truncate to width - * observing tabs, and trim a trailing newline. Returns the last column - * written (not the number of chars). - */ -static unsigned -print_half_line (line, indent, out_bound) - char const * const *line; - unsigned indent, out_bound; -{ - FILE *out = outfile; - register unsigned in_position = 0, out_position = 0; - register char const - *text_pointer = line[0], - *text_limit = line[1]; - - while (text_pointer < text_limit) - { - register unsigned char c = *text_pointer++; - - switch (c) - { - case '\t': - { - unsigned spaces = TAB_WIDTH - in_position % TAB_WIDTH; - if (in_position == out_position) - { - unsigned tabstop = out_position + spaces; - if (tab_expand_flag) - { - if (out_bound < tabstop) - tabstop = out_bound; - for (; out_position < tabstop; out_position++) - putc (' ', out); - } - else - if (tabstop < out_bound) - { - out_position = tabstop; - putc (c, out); - } - } - in_position += spaces; - } - break; - - case '\r': - { - putc (c, out); - tab_from_to (0, indent); - in_position = out_position = 0; - } - break; - - case '\b': - if (in_position != 0 && --in_position < out_bound) - if (out_position <= in_position) - /* Add spaces to make up for suppressed tab past out_bound. */ - for (; out_position < in_position; out_position++) - putc (' ', out); - else - { - out_position = in_position; - putc (c, out); - } - break; - - case '\f': - case '\v': - control_char: - if (in_position < out_bound) - putc (c, out); - break; - - default: - if (! ISPRINT (c)) - goto control_char; - /* falls through */ - case ' ': - if (in_position++ < out_bound) - { - out_position = in_position; - putc (c, out); - } - break; - - case '\n': - return out_position; - } - } - - return out_position; -} - -/* - * Print side by side lines with a separator in the middle. - * 0 parameters are taken to indicate white space text. - * Blank lines that can easily be caught are reduced to a single newline. - */ - -static void -print_1sdiff_line (left, sep, right) - char const * const *left; - int sep; - char const * const *right; -{ - FILE *out = outfile; - unsigned hw = sdiff_half_width, c2o = sdiff_column2_offset; - unsigned col = 0; - int put_newline = 0; - - if (left) - { - if (left[1][-1] == '\n') - put_newline = 1; - col = print_half_line (left, 0, hw); - } - - if (sep != ' ') - { - col = tab_from_to (col, (hw + c2o - 1) / 2) + 1; - if (sep == '|' && put_newline != (right[1][-1] == '\n')) - sep = put_newline ? '/' : '\\'; - putc (sep, out); - } - - if (right) - { - if (right[1][-1] == '\n') - put_newline = 1; - if (**right != '\n') - { - col = tab_from_to (col, c2o); - print_half_line (right, col, hw); - } - } - - if (put_newline) - putc ('\n', out); -} - -/* Print lines common to both files in side-by-side format. */ -static void -print_sdiff_common_lines (limit0, limit1) - int limit0, limit1; -{ - int i0 = next0, i1 = next1; - - if (! sdiff_skip_common_lines && (i0 != limit0 || i1 != limit1)) - { - if (sdiff_help_sdiff) - fprintf (outfile, "i%d,%d\n", limit0 - i0, limit1 - i1); - - if (! sdiff_left_only) - { - while (i0 != limit0 && i1 != limit1) - print_1sdiff_line (&files[0].linbuf[i0++], ' ', &files[1].linbuf[i1++]); - while (i1 != limit1) - print_1sdiff_line (0, ')', &files[1].linbuf[i1++]); - } - while (i0 != limit0) - print_1sdiff_line (&files[0].linbuf[i0++], '(', 0); - } - - next0 = limit0; - next1 = limit1; -} - -/* Print a hunk of an sdiff diff. - This is a contiguous portion of a complete edit script, - describing changes in consecutive lines. */ - -static void -print_sdiff_hunk (hunk) - struct change *hunk; -{ - int first0, last0, first1, last1, deletes, inserts; - register int i, j; - - /* Determine range of line numbers involved in each file. */ - analyze_hunk (hunk, &first0, &last0, &first1, &last1, &deletes, &inserts); - if (!deletes && !inserts) - return; - - /* Print out lines up to this change. */ - print_sdiff_common_lines (first0, first1); - - if (sdiff_help_sdiff) - fprintf (outfile, "c%d,%d\n", last0 - first0 + 1, last1 - first1 + 1); - - /* Print ``xxx | xxx '' lines */ - if (inserts && deletes) - { - for (i = first0, j = first1; i <= last0 && j <= last1; ++i, ++j) - print_1sdiff_line (&files[0].linbuf[i], '|', &files[1].linbuf[j]); - deletes = i <= last0; - inserts = j <= last1; - next0 = first0 = i; - next1 = first1 = j; - } - - - /* Print `` > xxx '' lines */ - if (inserts) - { - for (j = first1; j <= last1; ++j) - print_1sdiff_line (0, '>', &files[1].linbuf[j]); - next1 = j; - } - - /* Print ``xxx < '' lines */ - if (deletes) - { - for (i = first0; i <= last0; ++i) - print_1sdiff_line (&files[0].linbuf[i], '<', 0); - next0 = i; - } -} diff --git a/contrib/cvs/diff/system.h b/contrib/cvs/diff/system.h deleted file mode 100644 index 7812b7675926..000000000000 --- a/contrib/cvs/diff/system.h +++ /dev/null @@ -1,270 +0,0 @@ -/* System dependent declarations. - Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* We must define `volatile' and `const' first (the latter inside config.h), - so that they're used consistently in all system includes. */ -#if !__STDC__ -#ifndef volatile -#define volatile -#endif -#endif -#include <config.h> - -#include <sys/types.h> -#include <sys/stat.h> - -#if __STDC__ -#define PARAMS(args) args -#define VOID void -#else -#define PARAMS(args) () -#define VOID char -#endif - -#if STAT_MACROS_BROKEN -#undef S_ISBLK -#undef S_ISCHR -#undef S_ISDIR -#undef S_ISFIFO -#undef S_ISREG -#undef S_ISSOCK -#endif -#ifndef S_ISDIR -#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#endif -#ifndef S_ISREG -#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) -#endif -#if !defined(S_ISBLK) && defined(S_IFBLK) -#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) -#endif -#if !defined(S_ISCHR) && defined(S_IFCHR) -#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) -#endif -#if !defined(S_ISFIFO) && defined(S_IFFIFO) -#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFFIFO) -#endif -#if !defined(S_ISSOCK) && defined(S_IFSOCK) -#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) -#endif - -#if HAVE_UNISTD_H -#include <unistd.h> -#endif - -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif -#ifndef SEEK_CUR -#define SEEK_CUR 1 -#endif - -#ifndef STDIN_FILENO -#define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -#define STDOUT_FILENO 1 -#endif -#ifndef STDERR_FILENO -#define STDERR_FILENO 2 -#endif - -/* I believe that all relevant systems have - time.h. It is in ANSI, for example. The - code below looks quite bogus as I don't think - sys/time.h is ever a substitute for time.h; - it is something different. */ -#define HAVE_TIME_H 1 - -#if HAVE_TIME_H -#include <time.h> -#else -#include <sys/time.h> -#endif - -#if HAVE_FCNTL_H -#include <fcntl.h> -#else -#if HAVE_SYS_FILE_H -#include <sys/file.h> -#endif -#endif - -#ifndef O_RDONLY -#define O_RDONLY 0 -#endif - -#if HAVE_SYS_WAIT_H -#include <sys/wait.h> -#endif -#ifndef WEXITSTATUS -#define WEXITSTATUS(stat_val) ((unsigned) (stat_val) >> 8) -#endif -#ifndef WIFEXITED -#define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -#ifndef STAT_BLOCKSIZE -#if HAVE_ST_BLKSIZE -#define STAT_BLOCKSIZE(s) (s).st_blksize -#else -#define STAT_BLOCKSIZE(s) (8 * 1024) -#endif -#endif - -#if HAVE_DIRENT_H -# include <dirent.h> -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) ((dirent)->d_namlen) -# if HAVE_SYS_NDIR_H -# include <sys/ndir.h> -# endif -# if HAVE_SYS_DIR_H -# include <sys/dir.h> -# endif -# if HAVE_NDIR_H -# include <ndir.h> -# endif -#endif - -#if HAVE_VFORK_H -#include <vfork.h> -#endif - -#if HAVE_STDLIB_H || defined(STDC_HEADERS) -#include <stdlib.h> -#else -VOID *malloc (); -VOID *realloc (); -#endif -#ifndef getenv -char *getenv (); -#endif - -#if HAVE_LIMITS_H -#include <limits.h> -#endif -#ifndef INT_MAX -#define INT_MAX 2147483647 -#endif -#ifndef CHAR_BIT -#define CHAR_BIT 8 -#endif - -#if STDC_HEADERS || HAVE_STRING_H -# include <string.h> -# ifndef bzero -# define bzero(s, n) memset (s, 0, n) -# endif -#else -# if !HAVE_STRCHR -# define strchr index -# define strrchr rindex -# endif -char *strchr (), *strrchr (); -# if !HAVE_MEMCHR -# define memcmp(s1, s2, n) bcmp (s1, s2, n) -# define memcpy(d, s, n) bcopy (s, d, n) -void *memchr (); -# endif -#endif - -#include <ctype.h> -/* CTYPE_DOMAIN (C) is nonzero if the unsigned char C can safely be given - as an argument to <ctype.h> macros like `isspace'. */ -#if STDC_HEADERS -#define CTYPE_DOMAIN(c) 1 -#else -#define CTYPE_DOMAIN(c) ((unsigned) (c) <= 0177) -#endif -#ifndef ISPRINT -#define ISPRINT(c) (CTYPE_DOMAIN (c) && isprint (c)) -#endif -#ifndef ISSPACE -#define ISSPACE(c) (CTYPE_DOMAIN (c) && isspace (c)) -#endif -#ifndef ISUPPER -#define ISUPPER(c) (CTYPE_DOMAIN (c) && isupper (c)) -#endif - -#ifndef ISDIGIT -#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) -#endif - -#include <errno.h> -#if !STDC_HEADERS -extern int errno; -#endif - -#ifdef min -#undef min -#endif -#ifdef max -#undef max -#endif -#define min(a,b) ((a) <= (b) ? (a) : (b)) -#define max(a,b) ((a) >= (b) ? (a) : (b)) - -/* This section contains Posix-compliant defaults for macros - that are meant to be overridden by hand in config.h as needed. */ - -#ifndef filename_cmp -#define filename_cmp(a, b) strcmp (a, b) -#endif - -#ifndef filename_lastdirchar -#define filename_lastdirchar(filename) strrchr (filename, '/') -#endif - -#ifndef HAVE_FORK -#define HAVE_FORK 1 -#endif - -#ifndef HAVE_SETMODE -#define HAVE_SETMODE 0 -#endif - -#ifndef initialize_main -#define initialize_main(argcp, argvp) -#endif - -/* Do struct stat *S, *T describe the same file? Answer -1 if unknown. */ -#ifndef same_file -#define same_file(s,t) ((s)->st_ino==(t)->st_ino && (s)->st_dev==(t)->st_dev) -#endif - -/* Place into Q a quoted version of A suitable for `popen' or `system', - incrementing Q and junking A. - Do not increment Q by more than 4 * strlen (A) + 2. */ -#ifndef SYSTEM_QUOTE_ARG -#define SYSTEM_QUOTE_ARG(q, a) \ - { \ - *(q)++ = '\''; \ - for (; *(a); *(q)++ = *(a)++) \ - if (*(a) == '\'') \ - { \ - *(q)++ = '\''; \ - *(q)++ = '\\'; \ - *(q)++ = '\''; \ - } \ - *(q)++ = '\''; \ - } -#endif diff --git a/contrib/cvs/diff/util.c b/contrib/cvs/diff/util.c deleted file mode 100644 index 89cc27417860..000000000000 --- a/contrib/cvs/diff/util.c +++ /dev/null @@ -1,722 +0,0 @@ -/* Support routines for GNU DIFF. - Copyright (C) 1988, 1989, 1992, 1993, 1994, 1997 Free Software Foundation, Inc. - -This file is part of GNU DIFF. - -GNU DIFF is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU DIFF is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU DIFF; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include "diff.h" - -/* Queue up one-line messages to be printed at the end, - when -l is specified. Each message is recorded with a `struct msg'. */ - -struct msg -{ - struct msg *next; - char const *format; - char const *arg1; - char const *arg2; - char const *arg3; - char const *arg4; -}; - -/* Head of the chain of queues messages. */ - -static struct msg *msg_chain; - -/* Tail of the chain of queues messages. */ - -static struct msg **msg_chain_end = &msg_chain; - -/* Use when a system call returns non-zero status. - TEXT should normally be the file name. */ - -void -perror_with_name (text) - char const *text; -{ - int e = errno; - fprintf (stderr, "%s: ", diff_program_name); - errno = e; - perror (text); -} - -/* Use when a system call returns non-zero status and that is fatal. */ - -void -pfatal_with_name (text) - char const *text; -{ - int e = errno; - print_message_queue (); - fprintf (stderr, "%s: ", diff_program_name); - errno = e; - perror (text); - DIFF_ABORT (2); -} - -/* Print an error message from the format-string FORMAT - with args ARG1 and ARG2. */ - -void -diff_error (format, arg, arg1) - char const *format, *arg, *arg1; -{ - fprintf (stderr, "%s: ", diff_program_name); - fprintf (stderr, format, arg, arg1); - fprintf (stderr, "\n"); -} - -/* Print an error message containing the string TEXT, then exit. */ - -void -fatal (m) - char const *m; -{ - print_message_queue (); - diff_error ("%s", m, 0); - DIFF_ABORT (2); -} - -/* Like printf, except if -l in effect then save the message and print later. - This is used for things like "binary files differ" and "Only in ...". */ - -void -message (format, arg1, arg2) - char const *format, *arg1, *arg2; -{ - message5 (format, arg1, arg2, 0, 0); -} - -void -message5 (format, arg1, arg2, arg3, arg4) - char const *format, *arg1, *arg2, *arg3, *arg4; -{ - if (paginate_flag) - { - struct msg *new = (struct msg *) xmalloc (sizeof (struct msg)); - new->format = format; - new->arg1 = concat (arg1, "", ""); - new->arg2 = concat (arg2, "", ""); - new->arg3 = arg3 ? concat (arg3, "", "") : 0; - new->arg4 = arg4 ? concat (arg4, "", "") : 0; - new->next = 0; - *msg_chain_end = new; - msg_chain_end = &new->next; - } - else - { - if (sdiff_help_sdiff) - putc (' ', outfile); - fprintf (outfile, format, arg1, arg2, arg3, arg4); - } -} - -/* Output all the messages that were saved up by calls to `message'. */ - -void -print_message_queue () -{ - struct msg *m; - - for (m = msg_chain; m; m = m->next) - fprintf (outfile, m->format, m->arg1, m->arg2, m->arg3, m->arg4); -} - -/* Call before outputting the results of comparing files NAME0 and NAME1 - to set up OUTFILE, the stdio stream for the output to go to. - - Usually, OUTFILE is just stdout. But when -l was specified - we fork off a `pr' and make OUTFILE a pipe to it. - `pr' then outputs to our stdout. */ - -static char const *current_name0; -static char const *current_name1; -static int current_depth; - -static int output_in_progress = 0; - -void -setup_output (name0, name1, depth) - char const *name0, *name1; - int depth; -{ - current_name0 = name0; - current_name1 = name1; - current_depth = depth; -} - -#if HAVE_FORK && defined (PR_PROGRAM) -static pid_t pr_pid; -#endif - -void -begin_output () -{ - char *name; - - if (output_in_progress) - return; - output_in_progress = 1; - - /* Construct the header of this piece of diff. */ - name = xmalloc (strlen (current_name0) + strlen (current_name1) - + strlen (switch_string) + 7); - /* Posix.2 section 4.17.6.1.1 specifies this format. But there is a - bug in the first printing (IEEE Std 1003.2-1992 p 251 l 3304): - it says that we must print only the last component of the pathnames. - This requirement is silly and does not match historical practice. */ - sprintf (name, "diff%s %s %s", switch_string, current_name0, current_name1); - - if (paginate_flag) - { - /* Make OUTFILE a pipe to a subsidiary `pr'. */ - -#ifdef PR_PROGRAM - -# if HAVE_FORK - int pipes[2]; - - if (pipe (pipes) != 0) - pfatal_with_name ("pipe"); - - fflush (stdout); - - pr_pid = vfork (); - if (pr_pid < 0) - pfatal_with_name ("vfork"); - - if (pr_pid == 0) - { - close (pipes[1]); - if (pipes[0] != STDIN_FILENO) - { - if (dup2 (pipes[0], STDIN_FILENO) < 0) - pfatal_with_name ("dup2"); - close (pipes[0]); - } - - execl (PR_PROGRAM, PR_PROGRAM, "-f", "-h", name, 0); - pfatal_with_name (PR_PROGRAM); - } - else - { - close (pipes[0]); - outfile = fdopen (pipes[1], "w"); - if (!outfile) - pfatal_with_name ("fdopen"); - } -# else /* ! HAVE_FORK */ - char *command = xmalloc (4 * strlen (name) + strlen (PR_PROGRAM) + 10); - char *p; - char const *a = name; - sprintf (command, "%s -f -h ", PR_PROGRAM); - p = command + strlen (command); - SYSTEM_QUOTE_ARG (p, a); - *p = 0; - outfile = popen (command, "w"); - if (!outfile) - pfatal_with_name (command); - free (command); -# endif /* ! HAVE_FORK */ -#else - fatal ("This port does not support the --paginate option to diff."); -#endif - } - else - { - - /* If -l was not specified, output the diff straight to `stdout'. */ - - /* If handling multiple files (because scanning a directory), - print which files the following output is about. */ - if (current_depth > 0) - fprintf (outfile, "%s\n", name); - } - - free (name); - - /* A special header is needed at the beginning of context output. */ - switch (output_style) - { - case OUTPUT_CONTEXT: - print_context_header (files, 0); - break; - - case OUTPUT_UNIFIED: - print_context_header (files, 1); - break; - - default: - break; - } -} - -/* Call after the end of output of diffs for one file. - If -l was given, close OUTFILE and get rid of the `pr' subfork. */ - -void -finish_output () -{ - if (paginate_flag && outfile != 0 && outfile != stdout) - { -#ifdef PR_PROGRAM - int wstatus; - if (ferror (outfile)) - fatal ("write error"); -# if ! HAVE_FORK - wstatus = pclose (outfile); -# else /* HAVE_FORK */ - if (fclose (outfile) != 0) - pfatal_with_name ("write error"); - if (waitpid (pr_pid, &wstatus, 0) < 0) - pfatal_with_name ("waitpid"); -# endif /* HAVE_FORK */ - if (wstatus != 0) - fatal ("subsidiary pr failed"); -#else - fatal ("internal error in finish_output"); -#endif - } - - output_in_progress = 0; -} - -/* Compare two lines (typically one from each input file) - according to the command line options. - For efficiency, this is invoked only when the lines do not match exactly - but an option like -i might cause us to ignore the difference. - Return nonzero if the lines differ. */ - -int -line_cmp (s1, s2) - char const *s1, *s2; -{ - register unsigned char const *t1 = (unsigned char const *) s1; - register unsigned char const *t2 = (unsigned char const *) s2; - - while (1) - { - register unsigned char c1 = *t1++; - register unsigned char c2 = *t2++; - - /* Test for exact char equality first, since it's a common case. */ - if (c1 != c2) - { - /* Ignore horizontal white space if -b or -w is specified. */ - - if (ignore_all_space_flag) - { - /* For -w, just skip past any white space. */ - while (ISSPACE (c1) && c1 != '\n') c1 = *t1++; - while (ISSPACE (c2) && c2 != '\n') c2 = *t2++; - } - else if (ignore_space_change_flag) - { - /* For -b, advance past any sequence of white space in line 1 - and consider it just one Space, or nothing at all - if it is at the end of the line. */ - if (ISSPACE (c1)) - { - while (c1 != '\n') - { - c1 = *t1++; - if (! ISSPACE (c1)) - { - --t1; - c1 = ' '; - break; - } - } - } - - /* Likewise for line 2. */ - if (ISSPACE (c2)) - { - while (c2 != '\n') - { - c2 = *t2++; - if (! ISSPACE (c2)) - { - --t2; - c2 = ' '; - break; - } - } - } - - if (c1 != c2) - { - /* If we went too far when doing the simple test - for equality, go back to the first non-white-space - character in both sides and try again. */ - if (c2 == ' ' && c1 != '\n' - && (unsigned char const *) s1 + 1 < t1 - && ISSPACE(t1[-2])) - { - --t1; - continue; - } - if (c1 == ' ' && c2 != '\n' - && (unsigned char const *) s2 + 1 < t2 - && ISSPACE(t2[-2])) - { - --t2; - continue; - } - } - } - - /* Lowercase all letters if -i is specified. */ - - if (ignore_case_flag) - { - if (ISUPPER (c1)) - c1 = tolower (c1); - if (ISUPPER (c2)) - c2 = tolower (c2); - } - - if (c1 != c2) - break; - } - if (c1 == '\n') - return 0; - } - - return (1); -} - -/* Find the consecutive changes at the start of the script START. - Return the last link before the first gap. */ - -struct change * -find_change (start) - struct change *start; -{ - return start; -} - -struct change * -find_reverse_change (start) - struct change *start; -{ - return start; -} - -/* Divide SCRIPT into pieces by calling HUNKFUN and - print each piece with PRINTFUN. - Both functions take one arg, an edit script. - - HUNKFUN is called with the tail of the script - and returns the last link that belongs together with the start - of the tail. - - PRINTFUN takes a subscript which belongs together (with a null - link at the end) and prints it. */ - -void -print_script (script, hunkfun, printfun) - struct change *script; - struct change * (*hunkfun) PARAMS((struct change *)); - void (*printfun) PARAMS((struct change *)); -{ - struct change *next = script; - - while (next) - { - struct change *this, *end; - - /* Find a set of changes that belong together. */ - this = next; - end = (*hunkfun) (next); - - /* Disconnect them from the rest of the changes, - making them a hunk, and remember the rest for next iteration. */ - next = end->link; - end->link = 0; -#ifdef DEBUG - debug_script (this); -#endif - - /* Print this hunk. */ - (*printfun) (this); - - /* Reconnect the script so it will all be freed properly. */ - end->link = next; - } -} - -/* Print the text of a single line LINE, - flagging it with the characters in LINE_FLAG (which say whether - the line is inserted, deleted, changed, etc.). */ - -void -print_1_line (line_flag, line) - char const *line_flag; - char const * const *line; -{ - char const *text = line[0], *limit = line[1]; /* Help the compiler. */ - FILE *out = outfile; /* Help the compiler some more. */ - char const *flag_format = 0; - - /* If -T was specified, use a Tab between the line-flag and the text. - Otherwise use a Space (as Unix diff does). - Print neither space nor tab if line-flags are empty. */ - - if (line_flag && *line_flag) - { - flag_format = tab_align_flag ? "%s\t" : "%s "; - fprintf (out, flag_format, line_flag); - } - - output_1_line (text, limit, flag_format, line_flag); - - if ((!line_flag || line_flag[0]) && limit[-1] != '\n') - fprintf (out, "\n\\ No newline at end of file\n"); -} - -/* Output a line from TEXT up to LIMIT. Without -t, output verbatim. - With -t, expand white space characters to spaces, and if FLAG_FORMAT - is nonzero, output it with argument LINE_FLAG after every - internal carriage return, so that tab stops continue to line up. */ - -void -output_1_line (text, limit, flag_format, line_flag) - char const *text, *limit, *flag_format, *line_flag; -{ - if (!tab_expand_flag) - fwrite (text, sizeof (char), limit - text, outfile); - else - { - register FILE *out = outfile; - register unsigned char c; - register char const *t = text; - register unsigned column = 0; - - while (t < limit) - switch ((c = *t++)) - { - case '\t': - { - unsigned spaces = TAB_WIDTH - column % TAB_WIDTH; - column += spaces; - do - putc (' ', out); - while (--spaces); - } - break; - - case '\r': - putc (c, out); - if (flag_format && t < limit && *t != '\n') - fprintf (out, flag_format, line_flag); - column = 0; - break; - - case '\b': - if (column == 0) - continue; - column--; - putc (c, out); - break; - - default: - if (ISPRINT (c)) - column++; - putc (c, out); - break; - } - } -} - -int -change_letter (inserts, deletes) - int inserts, deletes; -{ - if (!inserts) - return 'd'; - else if (!deletes) - return 'a'; - else - return 'c'; -} - -/* Translate an internal line number (an index into diff's table of lines) - into an actual line number in the input file. - The internal line number is LNUM. FILE points to the data on the file. - - Internal line numbers count from 0 starting after the prefix. - Actual line numbers count from 1 within the entire file. */ - -int -translate_line_number (file, lnum) - struct file_data const *file; - int lnum; -{ - return lnum + file->prefix_lines + 1; -} - -void -translate_range (file, a, b, aptr, bptr) - struct file_data const *file; - int a, b; - int *aptr, *bptr; -{ - *aptr = translate_line_number (file, a - 1) + 1; - *bptr = translate_line_number (file, b + 1) - 1; -} - -/* Print a pair of line numbers with SEPCHAR, translated for file FILE. - If the two numbers are identical, print just one number. - - Args A and B are internal line numbers. - We print the translated (real) line numbers. */ - -void -print_number_range (sepchar, file, a, b) - int sepchar; - struct file_data *file; - int a, b; -{ - int trans_a, trans_b; - translate_range (file, a, b, &trans_a, &trans_b); - - /* Note: we can have B < A in the case of a range of no lines. - In this case, we should print the line number before the range, - which is B. */ - if (trans_b > trans_a) - fprintf (outfile, "%d%c%d", trans_a, sepchar, trans_b); - else - fprintf (outfile, "%d", trans_b); -} - -/* Look at a hunk of edit script and report the range of lines in each file - that it applies to. HUNK is the start of the hunk, which is a chain - of `struct change'. The first and last line numbers of file 0 are stored in - *FIRST0 and *LAST0, and likewise for file 1 in *FIRST1 and *LAST1. - Note that these are internal line numbers that count from 0. - - If no lines from file 0 are deleted, then FIRST0 is LAST0+1. - - Also set *DELETES nonzero if any lines of file 0 are deleted - and set *INSERTS nonzero if any lines of file 1 are inserted. - If only ignorable lines are inserted or deleted, both are - set to 0. */ - -void -analyze_hunk (hunk, first0, last0, first1, last1, deletes, inserts) - struct change *hunk; - int *first0, *last0, *first1, *last1; - int *deletes, *inserts; -{ - int l0, l1, show_from, show_to; - int i; - int trivial = ignore_blank_lines_flag || ignore_regexp_list; - struct change *next; - - show_from = show_to = 0; - - *first0 = hunk->line0; - *first1 = hunk->line1; - - next = hunk; - do - { - l0 = next->line0 + next->deleted - 1; - l1 = next->line1 + next->inserted - 1; - show_from += next->deleted; - show_to += next->inserted; - - for (i = next->line0; i <= l0 && trivial; i++) - if (!ignore_blank_lines_flag || files[0].linbuf[i][0] != '\n') - { - struct regexp_list *r; - char const *line = files[0].linbuf[i]; - int len = files[0].linbuf[i + 1] - line; - - for (r = ignore_regexp_list; r; r = r->next) - if (0 <= re_search (&r->buf, line, len, 0, len, 0)) - break; /* Found a match. Ignore this line. */ - /* If we got all the way through the regexp list without - finding a match, then it's nontrivial. */ - if (!r) - trivial = 0; - } - - for (i = next->line1; i <= l1 && trivial; i++) - if (!ignore_blank_lines_flag || files[1].linbuf[i][0] != '\n') - { - struct regexp_list *r; - char const *line = files[1].linbuf[i]; - int len = files[1].linbuf[i + 1] - line; - - for (r = ignore_regexp_list; r; r = r->next) - if (0 <= re_search (&r->buf, line, len, 0, len, 0)) - break; /* Found a match. Ignore this line. */ - /* If we got all the way through the regexp list without - finding a match, then it's nontrivial. */ - if (!r) - trivial = 0; - } - } - while ((next = next->link) != 0); - - *last0 = l0; - *last1 = l1; - - /* If all inserted or deleted lines are ignorable, - tell the caller to ignore this hunk. */ - - if (trivial) - show_from = show_to = 0; - - *deletes = show_from; - *inserts = show_to; -} - -/* Concatenate three strings, returning a newly malloc'd string. */ - -char * -concat (s1, s2, s3) - char const *s1, *s2, *s3; -{ - size_t len = strlen (s1) + strlen (s2) + strlen (s3); - char *new = xmalloc (len + 1); - sprintf (new, "%s%s%s", s1, s2, s3); - return new; -} - -/* Yield the newly malloc'd pathname - of the file in DIR whose filename is FILE. */ - -char * -dir_file_pathname (dir, file) - char const *dir, *file; -{ - char const *p = filename_lastdirchar (dir); - return concat (dir, "/" + (p && !p[1]), file); -} - -void -debug_script (sp) - struct change *sp; -{ - fflush (stdout); - for (; sp; sp = sp->link) - fprintf (stderr, "%3d %3d delete %d insert %d\n", - sp->line0, sp->line1, sp->deleted, sp->inserted); - fflush (stderr); -} diff --git a/contrib/cvs/diff/version.c b/contrib/cvs/diff/version.c deleted file mode 100644 index 343a098371cb..000000000000 --- a/contrib/cvs/diff/version.c +++ /dev/null @@ -1,5 +0,0 @@ -/* Version number of GNU diff. */ - -#include <config.h> - -char const diff_version_string[] = "2.7"; diff --git a/contrib/cvs/lib/fncase.c b/contrib/cvs/lib/fncase.c deleted file mode 100644 index 56e7f512bcf9..000000000000 --- a/contrib/cvs/lib/fncase.c +++ /dev/null @@ -1,115 +0,0 @@ -/* fncase.c -- CVS support for case insensitive file systems. - Jim Blandy <jimb@cyclic.com> - - This file is part of GNU CVS. - - GNU CVS is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "system.h" - -/* The equivalence class mapping for filenames. - Windows NT filenames are case-insensitive, but case-preserving. - Both / and \ are path element separators. - Thus, this table maps both upper and lower case to lower case, and - both / and \ to /. */ - -#if 0 -main () -{ - int c; - - for (c = 0; c < 256; c++) - { - int t; - - if (c == '\\') - t = '/'; - else - t = tolower (c); - - if ((c & 0x7) == 0x0) - printf (" "); - printf ("0x%02x,", t); - if ((c & 0x7) == 0x7) - putchar ('\n'); - else if ((c & 0x7) == 0x3) - putchar (' '); - } -} -#endif - -unsigned char -WNT_filename_classes[] = -{ - 0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07, - 0x08,0x09,0x0a,0x0b, 0x0c,0x0d,0x0e,0x0f, - 0x10,0x11,0x12,0x13, 0x14,0x15,0x16,0x17, - 0x18,0x19,0x1a,0x1b, 0x1c,0x1d,0x1e,0x1f, - 0x20,0x21,0x22,0x23, 0x24,0x25,0x26,0x27, - 0x28,0x29,0x2a,0x2b, 0x2c,0x2d,0x2e,0x2f, - 0x30,0x31,0x32,0x33, 0x34,0x35,0x36,0x37, - 0x38,0x39,0x3a,0x3b, 0x3c,0x3d,0x3e,0x3f, - 0x40,0x61,0x62,0x63, 0x64,0x65,0x66,0x67, - 0x68,0x69,0x6a,0x6b, 0x6c,0x6d,0x6e,0x6f, - 0x70,0x71,0x72,0x73, 0x74,0x75,0x76,0x77, - 0x78,0x79,0x7a,0x5b, 0x2f,0x5d,0x5e,0x5f, - 0x60,0x61,0x62,0x63, 0x64,0x65,0x66,0x67, - 0x68,0x69,0x6a,0x6b, 0x6c,0x6d,0x6e,0x6f, - 0x70,0x71,0x72,0x73, 0x74,0x75,0x76,0x77, - 0x78,0x79,0x7a,0x7b, 0x7c,0x7d,0x7e,0x7f, - 0x80,0x81,0x82,0x83, 0x84,0x85,0x86,0x87, - 0x88,0x89,0x8a,0x8b, 0x8c,0x8d,0x8e,0x8f, - 0x90,0x91,0x92,0x93, 0x94,0x95,0x96,0x97, - 0x98,0x99,0x9a,0x9b, 0x9c,0x9d,0x9e,0x9f, - 0xa0,0xa1,0xa2,0xa3, 0xa4,0xa5,0xa6,0xa7, - 0xa8,0xa9,0xaa,0xab, 0xac,0xad,0xae,0xaf, - 0xb0,0xb1,0xb2,0xb3, 0xb4,0xb5,0xb6,0xb7, - 0xb8,0xb9,0xba,0xbb, 0xbc,0xbd,0xbe,0xbf, - 0xc0,0xc1,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7, - 0xc8,0xc9,0xca,0xcb, 0xcc,0xcd,0xce,0xcf, - 0xd0,0xd1,0xd2,0xd3, 0xd4,0xd5,0xd6,0xd7, - 0xd8,0xd9,0xda,0xdb, 0xdc,0xdd,0xde,0xdf, - 0xe0,0xe1,0xe2,0xe3, 0xe4,0xe5,0xe6,0xe7, - 0xe8,0xe9,0xea,0xeb, 0xec,0xed,0xee,0xef, - 0xf0,0xf1,0xf2,0xf3, 0xf4,0xf5,0xf6,0xf7, - 0xf8,0xf9,0xfa,0xfb, 0xfc,0xfd,0xfe,0xff, -}; - -/* Like strcmp, but with the appropriate tweaks for file names. - Under Windows NT, filenames are case-insensitive but case-preserving, - and both \ and / are path element separators. */ -int -fncmp (const char *n1, const char *n2) -{ - while (*n1 && *n2 - && (WNT_filename_classes[(unsigned char) *n1] - == WNT_filename_classes[(unsigned char) *n2])) - n1++, n2++; - return (WNT_filename_classes[(unsigned char) *n1] - - WNT_filename_classes[(unsigned char) *n2]); -} - -/* Fold characters in FILENAME to their canonical forms. - If FOLD_FN_CHAR is not #defined, the system provides a default - definition for this. */ -void -fnfold (char *filename) -{ - while (*filename) - { - *filename = FOLD_FN_CHAR (*filename); - filename++; - } -} diff --git a/contrib/cvs/src/ChangeLog-97 b/contrib/cvs/src/ChangeLog-97 deleted file mode 100644 index ce7180b39d36..000000000000 --- a/contrib/cvs/src/ChangeLog-97 +++ /dev/null @@ -1,3249 +0,0 @@ -1997-12-30 enami tsugutomo <enami@but-b.or.jp> - - * rcs.c (RCS_checkin): Use gmtime() instead of localtime() - (restores behavior from RCS 5.x which was broken with RCS library - -kingdon). - -Mon Dec 29 12:53:00 1997 Ian Lance Taylor <ian@cygnus.com> - - * modules.c (do_module): Check for a request for a file within a - module which is not a directory. - * sanity.sh (modules): Add test 149b1 for above patch. - - * client.c (start_tcp_server): Remove useless assignment, left - behind by Dec 15 patch. - -Sat Dec 27 17:41:11 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c, options.h.in, history.c, import.c, main.c, rcs.c, - update.c: Remove !HAVE_RCS5 code. It had bit-rotted a while ago, - and more to the point is obsolete with the RCS library. - -27 Dec 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * zlib.c, server.h (gunzip_and_write): New function. - * client.c (update_entries): Call it instead of a gunzip subprocess. - * zlib.c, server.h (read_and_gzip): New function. - * client.c (send_modified): Call it instead of a gzip subprocess. - -Sat Dec 27 13:07:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - Decrease RCS_deltas memory usage to what we need (approximately - the size of the file we are patching plus the size of the largest - patch). Previously memory usage had been approximately the size - of the RCS file because we never freed lines until the end. - * rcs.c (linevector_free, linevector_copy, linevector_add, - linevector_delete): - Instead of having all the lines and struct line's in the alloc_* - space, have each line and its struct line in its own malloc'd - space. Use a refcount to deal with curlines vs. headlines - vs. trunklines in RCS_deltas. - (struct allocblock, blocks, block_alloc, block_free): Remove; no - longer used. - (apply_rcs_changes, RCS_deltas): Don't copy lines into allocated - space; linevector_add now does that for us. - (rcs_change_text, RCS_deltas): Don't call block_free. - -Tue Dec 23 08:28:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvsbug.sh: Change bug-cvs address from prep.ai.mit.edu to gnu.org - per email from Martin Hamilton. - -Sun Dec 21 21:49:50 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_checkin): Disable keyword expansion when generating - the change text. - * sanity.sh: Move tests keyword-24 through keyword-27 into - new section keywordlog and expand greatly. Note that CVS 1.9.18 - passes the new tests both local and remote but the current - version failed them both local and remote before this fix. - -Sat Dec 20 19:56:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_delete_revs): Clean up temporary files even if noexec. - Without this fix, basica-o5a in sanity.sh would leave files around. - -Thu Dec 18 13:05:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * run.c: Fix typo in declaration (evecvp -> execvp) (credit to - Erik Walthinsen for reporting this). Only declare it if not - HAVE_UNISTD_H. Move declaration to before the first use. - -Tue Dec 16 12:59:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c: Collapse two identical declarations for join_file. - -Mon Dec 15 16:01:49 1997 Ian Lance Taylor <ian@cygnus.com> - - * client.c (start_tcp_server): Remove calls to htons and add one - call to ntohs (init_sockaddr calls htons on the port argument). - -Mon Dec 15 00:07:02 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (failure_exit): New variable. - (get_server_responses): If it is set, then return - failure. - (updated_seen, updated_fname): New variables. - (update_entries): Use updated_fname if set. In the "move away - foo.c; it is in the way" case print "C" not "U", and set - failure_exit. - (handle_mt): If we get +updated tagged text, stash it away in - updated_fname rather than printing it immediately. - (handle_mt, get_server_responses): If we stashed a filename and - didn't get around to printing it, go ahead and print it. - * sanity.sh (conflicts2-142d2): Adjust to test for fix. Remote is - now like local was in terms of exit status and "C aa.c" message. - -Sun Dec 14 00:27:26 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - Implement tagged text feature: - * update.c (write_letter): Take a single finfo argument rather - than file and update_dir. While we are at it change it to return - void (since the returned value always had been 0). - * update.c: Update callers. - * server.c, cvs.h (cvs_output_tagged): New function. - * client.c (responses): Add "MT" response. - (handle_mt): New function. - * update.c (write_letter): Output via cvs_output_tagged. - -Sun Dec 14 14:13:05 1997 Ian Lance Taylor <ian@cygnus.com> - - * recurse.c (do_dir_proc): Only check for CVS/Repository if - W_LOCAL. - * sanity.sh (devcom-t2, devcom-t3): New tests for above patch. - -Sun Dec 14 00:27:26 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * root.c (parse_cvsroot): Initialize check_hostname (fixes thinko - in GSSAPI changes). - -Sat Dec 13 13:15:35 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c: Use indentation to indicate nesting of #ifdef's. - - * client.c (connect_to_gserver): Reindent (in one place). - -Fri Dec 12 17:38:15 1997 Chris Provenzano <proven@cygnus.com> - and Ian Lance Taylor <ian@cygnus.com> - - * cvs.h (CVSmethod): Add gserver_method. - * root.c (method_names): Add gserver. - (parse_cvsroot): Handle :gserver:. - * client.h (cvsauthenticate): Declare. - (cvs_gssapi_encrypt): Declare if HAVE_GSSAPI and ENCRYPTION. - (cvs_gssapi_wrap_buffer_initialize): Declare if HAVE_GSSAPI. - (connect_to_pserver): Update declaration. - (pserver_authenticate_connection): Declare when HAVE_GSSAPI and - SERVER_SUPPORT is defined in addition to other case. - * client.c: If HAVE_GSSAPI, include GSSAPI header files. - (gcontext): New static variable if HAVE_GSSAPI. - (connect_to_pserver): Add do_gssapi parameter. Change all - callers. Move rejection handling to bottom of function. - (recv_bytes): New static function if HAVE_GSSAPI. - (connect_to_gserver): Likewise. - (start_server): Handle gserver_method. Handle GSSAPI encryption - and authentication. - * server.c: Include <sys/socket.h> if HAVE_GSSAPI, in addition to - existing cases. If HAVE_GSSAPI, include GSSAPI header files. - Include <grp.h> even if AUTH_SERVER_SUPPORT is not defined. - (gcontext, cvs_gssapi_wrapping): New static variables if - HAVE_GSSAPI. - (cvs_gssapi_encrypt): New global variable if HAVE_GSSAPI and - ENCRYPTION. - (serve_gssapi_encrypt): New static function if HAVE_GSSAPI and - ENCRYPTION. - (serve_gssapi_authenticate): New static function if HAVE_GSSAPI. - (requests): Add Gssapi-encrypt if HAVE_GSSAPI and ENCRYPTION. Add - Gssapi-authenticate if HAVE_GSSAPI. - (switch_to_user): Compile if HAVE_GSSAPI, in addition to existing - cases. - (pserver_authenticate_connection): Likewise. Ifdef out part of - the code for AUTH_SERVER_SUPPORT. Handle a GSSAPI request. - (gserver_authenticate_connection): New static function if - HAVE_GSSAPI. - (cvsauthenticate): New global variable. - (struct cvs_gssapi_wrap_data): Define if HAVE_GSSAPI. - (cvs_gssapi_wrap_buffer_initialize): New function if HAVE_GSSAPI. - (cvs_gssapi_wrap_input): New static function if HAVE_GSSAPI. - (cvs_gssapi_wrap_output): Likewise. - * main.c (opt_usage): Mention -a. - (main): Handle -a. Handle pserver if HAVE_GSSAPI, in addition to - existing cases. - * login.c (login): Pass new argument to connect_to_pserver. - -Fri Dec 12 15:33:19 1997 Ian Lance Taylor <ian@cygnus.com> - - * buffer.c (PACKET_SLOP): Define. - (packetizing_buffer_initialize): Use PACKET_SLOP when allocating - holdbuf. - (packetizing_buffer_input): Allow up to PACKET_SLOP bytes in - stackoutbuf. - (packetizing_buffer_output): Use just BUFFER_DATA_SIZE + 2 for - inbuf. Allow PACKET_SLOP + 4 extra bytes in stack_outbuf. - Correct >= to > in test of incoming number of bytes. Use - PACKET_SLOP in other tests. - -Fri Dec 12 10:27:08 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (start_tcp_server): Revise comment to reflect - SOCK_STRERROR and SOCK_ERRNO now being in use. - -Thu Dec 11 15:32:31 1997 Ian Lance Taylor <ian@cygnus.com> - - * client.c (init_sockaddr): Compile if HAVE_KERBEROS, as well as - if AUTH_CLIENT_SUPPORT. Return a pointer to a struct hostent. - (start_tcp_server): Clean up. Use init_sockaddr. Use - SOCK_STRERROR and SOCK_ERRNO. Don't bind the socket. - - Generalize buffering code used by Kerberos encryption routines - into a generic packetizing buffer. The new code in buffer.c is a - modified version of the code removed from server.c. - * buffer.c (struct packetizing_buffer): Define. - (packetizing_buffer_initialize): New function. - (packetizing_buffer_input): New static function. - (packetizing_buffer_output): New static function. - (packetizing_buffer_flush): New static function. - (packetizing_buffer_block): New static function. - (packetizing_buffer_shutdown): New static function. - * buffer.h (packetizing_buffer_initialize): Declare. - * server.c (struct krb_encrypt_data): Rename from - krb_encrypt_buffer, and remove all fields not related to - encryption. - (krb_encrypt_buffer_initialize): Just call - packetizing_buffer_initialize. - (krb_encrypt_input): New static function. - (krb_encrypt_output): New static function. - (krb_encrypt_buffer_input): Remove. - (krb_encrypt_buffer_output): Remove. - (krb_encrypt_buffer_flush): Remove. - (krb_encrypt_buffer_block): Remove. - (krb_encrypt_buffer_shutdown): Remove. - -Wed Dec 10 15:39:44 1997 Ian Lance Taylor <ian@cygnus.com> - - * buffer.c (stdio_buffer_initialize): Correct formatting. - -Sun Dec 7 09:37:19 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb-0d0): New test, for checkout on existing - directory. - -Sat Dec 6 00:25:11 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (binwrap3): Clean up repository too. Clean up working - directory with "rm -r" not "rm -rf". - -Thu Dec 4 17:11:18 1997 Larry Jones <larry.jones@sdrc.com> - - * subr.c (check_numeric): Don't reference argv[1] when argc is 1 - (should be argv[0]). - - * sanity.sh: Fix lines that look like conflict markers but aren't - to prevent problems checking in. - (binwrap3): Remove local CVSROOT when done so that later - tests that expect to create it don't fail. - -Thu Dec 4 18:19:21 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvs.h: Remove mempcpy definition. I think the polite way to - describe my feelings about mempcpy is something like "we don't - have agreement that it is a good idea". - * rcs.c (truncate_revnum): Don't call it. - * sanity.sh: Run multibranch2 test by default. - (multibranch2): Use ${TESTDIR} a few places. - (multibranch2-9): Accept "P file1" as well as "U file1". - - * sanity.sh: Don't add 1997 to the copyright notice. Add GPL - terms. Add discussion of copyright issues. - * rcs.c (truncate_revnum, truncate_revnum_in_place, - compare_truncated_revnums): Reindent. - -1997-12-04 Jim Meyering <meyering@na-net.ornl.gov> - - * subr.c (xstrdup): Use memcpy rather than strcpy. - (compare_revnums): Declare parameters to be `const'. - Remove unnecessary uses of xstrdup and corresponding frees. - (increment_revnum): Declare parameter to be `const'. - Use memcpy rather than strcpy. - (gca): Declare parameters to be `const'. - (check_numeric): Declare REV parameter to be `const'. - (file_has_markers): Declare parameter to be `const'. - (get_file): Declare `char*' parameters to be `const'. - * run.c (run_exec): Declare `char*' parameters to be `const'. - * cvs.h (mempcpy) [! HAVE_MEMPCPY]: Define it. - Add `const' to types in several prototypes. - - * rcs.c (truncate_revnum): New function. - (truncate_revnum_in_place): New function. - (compare_truncated_revnums): New function. - (max_rev): New function. - (RCS_addbranch): Make BRANCH parameter `const'. - Use the above functions rather than open-coding them. - When BRANCH is a revision number, insert it *in order* - in the sorted list of branch numbers, not at the end. - Add assertion that insertion succeeds. - * sanity.sh (multibranch2): Test for this. - (Copyright): Add 1997. - -Dec 1997 Karl Fogel <kfogel@floss.red-bean.com> - - * wrapper.c (wrap_name_has): loop as far as wrap_count + - wrap_temp_count, not wrap_count + wrap_saved_count, otherwise - some wrappers get skipped. - (wrap_matching_entry): same. - * sanity.sh (binwrap3): new test, for import with - CVSROOT/cvswrappers and .cvswrappers specifying -k 'b' options. - -1997-11-30 Jim Meyering <meyering@na-net.ornl.gov> - - * client.c (send_a_repository): Strip trailing slashes from the name - of the update directory. Otherwise, running `cvs update dir/' provokes - this failure `protocol error: illegal directory syntax in dir/' when - running in client/server mode. - - * hash.c (insert_before): New function derived from addnode. - (addnode): Simply return insert_before. - (addnode_at_front): Simply return insert_before. - * hash.h (insert_before): Add prototype. - - * server.c (dirswitch): Compute `strlen(dir)' once and save it, - rather than computing it four times. Also do s/illegal/invalid/ to - this diagnostic: "E protocol error: illegal directory syntax in %s". - -Sun Nov 30 18:03:02 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * admin.c: Fix comment (no longer a front-end to "rcs"). - - * error.c, error.h (rcserror): Remove. - * admin.c, rcs.c: Call error instead of rcserror. This changes - the format of these messages from "rcs: <path>: error" to "cvs - <command>: <path>: error". The former format wasn't quite what - RCS printed anyway (because RCS would sometimes print "ci", "co", - &c, not "rcs"), and preserving RCS's exact output probably is not - a good idea anyway (because it will make people think that the - error was caused by an external program). In two cases, I tidied - up the message in a more drastic fashion ("cannot stat" in - RCS_checkin and "could not diff" in RCS_delete_revs). - - * sanity.sh (basica-o2b, binfiles2-o1, admin-18, admin-22-o10, - admin-22-o17): Look for "cvs <command>" not "rcs". - - * run.c, cvs.h (run_setup): Replace varargs nonsense with a single - argument which gets parsed as the result of the vasprintf - used to. - * client.c, commit.c, logmsg.c, modules.c, rtag.c, tag.c, update.c, - wrapper.c: Update callers, either to do the sprintf themself or to - just call run_arg if it will do the job. - * rcscmds.c: Likewise for call_diff_setup and callers. - - * run.c, cvs.h (run_args): Remove; nowhere used. - -Sat Nov 29 22:15:06 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * options.h.in: Remove declaration of getwd; see lib/ChangeLog for - rationale. - -1997-11-29 Jim Meyering <meyering@na-net.ornl.gov> - - * update.c (checkout_file): Initialize `backup'. - - * diff.c (diff_fileproc): Initialize `tmp' and `fname'. - - * modules.c (do_module): Initialize `server_dir_to_restore'. - (do_module): Initialize `value' in an else clause. - - * rcs.c (RCS_checkin): Initialize `commitpt'. - (RCS_delete_revs): Initialize `revp'. - (RCS_copydeltas): Always initialize `insertbefore'. - - * run.c (run_print): Define `outfn' even in error case. - -Mon Nov 24 17:28:50 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_findlock_or_tip): Prototype. - (RCS_checkin): Fix call to pass correct number of arguments. - -Sun Nov 23 10:34:03 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * recurse.c (do_dir_proc): Move check for CVS/Repository and - CVS/Entries to before where we call the direntproc. - * client.c (send_dirent_proc): Remove code to check for - CVS/Repository, now that recurse.c does it. - * sanity.sh (conflicts3-18 through conflicts3-19): New tests, for this. - -Sat Nov 22 10:54:16 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * recurse.c (do_dir_proc): Check that CVS/Repository and - CVS/Entries exist. - * sanity.sh (conflicts3-14 through conflicts3-17): New tests, for this. - - * client.c (send_fileproc): Send options field from - vers->entdata->options not vers->options. - * cvs.h (struct entnode): Add comment (options and timestamp must - not be NULL). - * sanity.sh (binfiles-9 through binfiles-13, binfiles-sticky5, - keyword-17): Remove kludges for remote; tests for fix. - - * update.c (update_fileproc): Fix comment; direct checkout is - still faster than patches for local but not for quite the - same reasons. - - * add.c (add): Pass SEND_NO_CONTENTS to send_files. - -Wed Nov 19 18:25:03 1997 Mike Glendinning <mikeg@sequent.com> - - * update.c (patch_file_write): Missing cast provided. - -Wed Nov 19 15:57:59 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_deltas): Solve trigraph problem (once and for all, I - hope) with 3 calls to cvs_output. - -Wed Nov 19 01:52:57 1997 Andy Piper <andyp@parallax.co.uk> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * classify.c (Classify_File), cvs.h (struct vers_ts), vers_ts.c - (Version_TS): Clarify NULL versus "" for options in comments. - * vers_ts.c (Version_TS): Treat "" the same way as NULL in options - and vers_ts->options. - * sanity.sh: New tests binfiles-sticky5 through binfiles-17 test - for this. - -1997-11-16 Karl Fogel <kfogel@floss.red-bean.com> - - * client.c (update_entries): parse server-sent entries line even - in the case of "cvs export", because we need to know if -kb option - is set. - Init `options' to NULL like anything else. - -Tue Nov 18 09:20:29 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * version.c: Change version number to 1.9.21. - - * Version 1.9.20. - -Mon Nov 17 14:35:31 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (server_updated): If scratched_file and noexec are set, - clean up so we don't get a "duplicate Scratch_Entry" warning - later. - * sanity.sh: New tests conflicts3-10 to conflicts3-13, for this. - - * sanity.sh (conflicts3): Don't allow "file1 was lost" messages - here; I don't think CVS actually produced them, and they don't - belong. - -Sun Nov 16 23:19:41 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh: Accept either "U file1" or "P file1". - -Fri Nov 14 12:32:05 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c: Add comment about cleaning up ,foo, file on ^C. - -Fri Nov 14 11:56:29 1997 Andy Piper <andyp@parallax.co.uk> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * filesubr.c (unlink_file_dir): Don't print trace message in the - server. - -Fri Nov 14 11:28:55 1997 Jim Meyering and Jim Kingdon - - * rcs.c (RCS_getdatebranch): If the branch we are looking for - doesn't exist, return a revision which matches the date, not - just NULL. - * sanity.sh (tagdate): New test, for this. - -Thu Nov 13 10:11:48 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb-21): Fix comment which described a behavior - which no longer exists. - -Wed Nov 12 16:24:45 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - Clean up infrastructure made unnecessary by RCS library: - * rcscmds.c (diff_exec, diff_execv): Use literal "diff" not DIFF. - * options.h.in (DIFF), rcs.h (RCS, RCS_CI, RCS_DIFF, - RCS_RCSMERGE): Removed; no longer used. - * commit.c (commit), patch.c (patch_fileproc), - rcscmds.c (RCS_exec_rcsdiff), start of rcscmds.c: Update comments - to reflect librarification of RCS. - * options.h.in (RCSBIN_DFLT): Removed. - * main.c, cvs.h (Rcsbin, free_Rcsbin): Removed. - * main.c (main): Don't check RCSBIN environment variable. -b - global option is now a noop. - * cvs.h (RCSBIN_ENV): Removed. - * expand_path.c (expand_variable): $RCSBIN is now an error. - * mkmodules.c (config_contents): Remove RCSBIN. - * parseinfo.c (parse_config): RCSBIN now a noop. - * server.c (server): Don't put Rcsbin in PATH. - -Mon, 10 Nov 1997 Jim Kingdon - - * rcs.c (RCS_checkin): Actually, when we get a change text - for a text file using get_file, we want text mode, although - the reasons are kind of subtle (see comment). - - * rcs.c (RCS_checkin): Pass correct mode to get_file for - binary files. - - * rcscmds.c: Declare vasprintf. - -Mon Nov 10 11:11:17 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - This fixes problems with windows-NT/run.c improperly quoting, and - is cleaner anyway. - * rcscmds.c (call_diff_setup, call_diff_arg, call_diff_add_arg, - call_diff_argv, call_diff_argc, call_diff_argc_allocated): New - functions/variables, lightly adapted from src/run.c. - * cvs.h, run.c (call_diff, call_diff3): Move from here... - * rcscmds.c: ...to here. - -Sun, 9 Nov 1997 Jim Kingdon - - * rcs.c (rcs_internal_unlockfile): Call rename_file not rename. - This makes it work on NT again. - -Sun Nov 9 16:54:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (diffmerge2): Protect keywords against unwanted - expansion. They got clobbered and the testcase stopped working - when I checked it in. - -Fri Nov 7 13:23:38 1997 Karl Fogel <kfogel@floss.red-bean.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (diffmerge1, diffmerge2): new tests, for bugs, or - potential bugs, in ../diff/analyze.c which were fixed by Paul - Eggert's patch. - -Sun Nov 9 10:28:43 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_settag): Reindent. - - * rcs.c (rcs_internal_lockfile): Fix typo (thow -> throw). - -Sat Nov 8 15:58:53 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (cvsadm): Remove most of the tests which tested - CVS/Root. This takes the run time for the cvsadm tests from - about 5 minutes 15 seconds to about 4 minutes 10 seconds with no - significant loss in coverage. - - * rcs.c (rcs_internal_lockfile): Check for errors from system - calls. If open() gives an error, don't muck with stat and errno - (I don't know what the RCS code that this comes from was trying to - do, but it clearly isn't accomplishing anything here). - (RCS_rewrite, RCS_delete_revs): Check for errors from system calls. - -Sat Nov 1 14:21:29 1997 Michael L.H. Brouwer <michael@thi.nl> - - * rcs.c (RCS_checkin): Change type of bufsize from int to size_t. - (RCS_delete_revs): Change type of bufsize and len from int to size_t. - (RCS_getdeltatext): Change type of textlen from int to size_t. - * rcs.h (struct deltatext): Change len from int to size_t to keep - the compiler happy on systems where size_t is unsigned int. - [This goes well beyond keeping the compiler happy; if sizeof - (size_t) != sizeof (int), the old code was quite broken -kingdon] - -Sat Nov 1 14:21:29 1997 Michael L.H. Brouwer <michael@thi.nl> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_checkin): When checking if we were holding the lock - use delta->author instead of user since the latter might have been - clobbered by a call to getcaller. This resulted in the failure of - test basica-7. - [I don't completely follow the scenario where it gets clobbered, - it but sounds vaguely plausible and the replacement seems - cleaner, precisely because it avoids allocation issues -kingdon] - -Wed Nov 5 20:16:12 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * checkin.c, checkout.c, commit.c, cvs.h, import.c, login.c, - main.c, update.c: Change FALSE to 0 and TRUE to 1 and replace - monstrosities like "cvswrite == TRUE" with just "cvswrite". FALSE - and TRUE sometimes conflicted with system headers (NextStep3.3?), - but more to the point, good old 1 and 0 are fine and were used by - most of CVS already. - -Tue Nov 4 12:19:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_checkin, RCS_lock, RCS_unlock): Rename local variable - quiet to checkin_quiet or some such, to avoid confusion with - global variable quiet. - - * lock.c: Update comment to refer to add_rcs_file rather than "rcs - -i". - - * rcs.h (struct rcsnode): Add comments for all fields. - * rcs.c (RCS_delete_revs): Refuse to delete revisions which have - symbolic names. Fix fencepost bug which caused us to sometimes - check one more revision than we should for locks, branches, and - this. - (findtag): New function, to help above code. - - * admin.c (admin): Take out writelocks not readlocks. This has - been a bug "forever", but may become more noticeable with - rcs_internal_lockfile relying on the writelocks. - -Mon Nov 3 10:17:19 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_rewrite): Don't write the file if noexec. - * sanity.sh (basica, branches): Test for this. - -Sat Nov 1 10:01:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.h (struct deltatext): Comment text and log fields. - - * admin.c (admin_fileproc): Call RCS_reparsercsfile not - RCS_fully_parse. Don't muck with ->other field in RCSVers (it - doesn't need to be set). - * rcs.h, rcs.c (RCS_reparsercsfile): No longer static. No point - in having this static when RCS_rewrite and RCS_fully_parse are not. - * rcs.c (getdelta): Remove obsolete comment about not storing the - newphrases from the deltas, since we now do. - -Sat Nov 1 10:01:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - and Paul Eggert - - * rcs.c (rcs_internal_lockfile): Clarify the comments about O_EXCL - and such matters. - -Sat Nov 1 10:01:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_delete_revs): Pass force_tag_match to RCS_settag. - * sanity.sh (basica-o2a, basica-o2b): Test for this. - -1997-11-01 Peter Brandstrom <d91-pbr@nada.kth.se> - - * sanity.sh: Use ${username} more places. - -Sat Nov 1 00:14:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (rcs_internal_lockfile): Add comments about what we are - trying to accomplish here (versus what RCS tries to accomplish). - - * rcs.c (RCS_parsercsfile_i): Clarify/expand comment about - the purpose of having both this and RCS_reparsercsfile. - (RCS_rewrite): Add comment about how this works. - - * admin.c (admin_fileproc): Add comment about call to - RCS_fully_parse not RCS_reparsercsfile. - * rcs.h: Comment on what delta_pos field of struct rcsnode is. - -Fri Oct 31 16:38:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - and Abe Feldman - - * client.c (update_entries): If UTIME_EXPECTS_WRITABLE, if - necessary change the file to be writable temporarily to set its - modification time. - -Thu Oct 30 17:42:59 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * admin.c (admin): Deal with new :: syntax for ranges. - * rcs.c, rcs.h (RCS_delete_revs): New arg inclusive (set for the old - behavior, clear to enable new code). - * admin.c (admin_fileproc): Set it if :, clear it if ::. - * sanity.sh (basica, head, branches, log): Add tests for this feature. - - * admin.c (admin_fileproc): Clean up the error message which - happens if one of the RCS_* functions returns an error status; it - is confusing to say that "rcs" failed now that this is implemented - internally. - * sanity.sh (admin): Update accordingly. - -Wed Oct 29 07:07:36 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (admin-22-o24): New test, tests that admin -o - correctly munged the deltatexts on a branch too. - - * rcs.c (RCS_delete_revs): If we are deleting an entire branch, - delete the node in ->branches rather than setting the ->key to the - bogus value NULL. - * rcs.c (RCS_delete_revs): If "rev1" equals "branchpoint", then set - "before" to the revision on the trunk that we branch from. - * rcs.c (RCS_delete_revs): Don't set rev2 to revp->version (the - code is missing an xstrdup, but it doesn't matter because rev2 - isn't used after this point). - * sanity.sh (binfiles2-o2 to binfiles2-o4): New tests, for this. - -Tue Oct 28 19:30:05 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_delete_revs): Restore code which passes rev2 to - RCS_getbranchpoint if rev1 is NULL; it still makes sense for the - non-trunk case. Fixes admin-22-o22 in testsuite. - - * sanity.sh (admin-18): Adjust to reflect "rcs failed" no longer - being suppressed by global -q option. - - * rcs.c (RCS_delete_revs): If rev1 == NULL and rev2 is on the - trunk, handle it the same way we do everything else--by swapping - the two. This replaces the code which tried to kludge what we - passed to RCS_getbranchpoint (which didn't work). - * sanity.sh (binfiles2-o1 to binfiles2-o4): New tests, for this fix. - * admin.c (admin_fileproc): Don't have -q global option suppress - "rcs failed" message. - -1997-10-28 Jim Kingdon - - * log.c (printlock_proc), rcs.c (putlock_proc): Prototype. - * rcs.c (rcs_internal_lockfile): Only try to call fchmod if - HAVE_FCHMOD is defined. - -Tue Oct 28 10:27:03 1997 Ian Lance Taylor <ian@cygnus.com> - - * rcs.c (RCS_deltas): Don't use \? in string if __STDC__ is not - defined. - - * rcs.c (make_file_label): Remove extraneous `+'. - -Mon Oct 27 14:40:15 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * status.c (status): Don't pass SEND_NO_CONTENTS to send_files. - -Sat Oct 25 00:33:57 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_delete_revs): Use : not - for range in error message. - - * rcs.h: Add comment about '\0' in RCS fields. - - * rcs.c (getdelta): Add comment about branches and next field - being mandatory. - - * rcs.c (RCS_reparsercsfile, RCS_deltas), sanity.sh (reserved): - Reindent sections which were misindented as a result of recent - changes. - -Fri Oct 24 10:22:15 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_findlock_or_tip): Don't worry about file ownership - and nonstrict locking when returning the default branch or head. - The most conspicuous problem with the old code is that in the - error case it would examine rstat.st_uid when it had not been - set. For a discussion of more fundamental reasons, see comment. - - * admin.c (admin_fileproc): In handling -A, don't handle relative - pathnames differently from absolute pathnames. See comment for - rationale. If problem opening the file, give a nice error not a - coredump. - * sanity.sh (admin-19a-admin, admin-19a-log, admin-19a-fix): - New tests, test for traditional "cvs admin -A" behavior with - relative pathnames. - * sanity.sh (admin-19a-nonexist): Test for the core dump fix. - * sanity.sh (admin-22-o1): Look for ${PROG} not cvs. - - * sanity.sh (reserved-16): Remove commitinfo change with "cvs - commit" not "cvs admin -o". In addition to commit being The Right - Thing on general principles, cvs admin -o doesn't work because it - doesn't rebuild the administrative file database. - - * update.c (patch_file): If the first revision does not exist in - the RCS file, fall back to sending entire file. Fixes - admin-22-o15 in make remotecheck. - -1997-10-23 enami tsugutomo <enami@but-b.or.jp> - - * rcs.c (RCS_checkin): Unlink temporary files stored in variable - `tmpfile' and `changefile'. - -Wed Oct 22 12:16:10 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (rcs_lockfilename): Allocate enough memory for terminating - '\0'. - - * admin.c (admin_fileproc): Don't support '-' for ranges in "cvs - admin -o". - (admin): Adjust comment. - - * rcs.h (RCSVers): New field other_delta. - * rcs.c (free_rcsvers_contents): Also free other_delta. - (getdelta): Read newphrases from deltas into other_delta field. - (putdelta): Write those newphrases. - * sanity.sh (rcs-8a): New test, for this fix. - * admin.c (admin_fileproc): If "-b" without argument, then set - branch to NULL, not "" (uncovered by rcs-8a test). - * rcs.c (putrcsfield_proc): Add comment about how we (mis)handle - values in newphrases. - - * sanity.sh (reserved): Instead of looking for rcslock.pl in CVS - distribution, just use our own equivalent. - - * rcs.c (RCS_rewrite): Call ferror before fclose to avoid "Invalid - argument" warnings. - -Mon Oct 20 00:30:16 1997 Tim Pierce <twp@twp.tezcat.com> - - [I removed a ChangeLog entry for a change to sanity.sh (editor), - because the actual change was not made. With this change, CVS no - longer runs RCS. I'll be checking in my cleanups shortly. -kingdon] - - Librarify `ci'. - * rcscmds.c, cvs.h (RCS_checkin): Removed. - * rcs.c, rcs.h (RCS_checkin, RCS_getbranchpoint, RCS_addbranch, - RCS_findlock_or_tip): New functions. RCS_checkin completely - rewritten to eliminate RCS 5.7; change `rcs' parameter from string - to RCSNode, so we can update RCSNode without re-reading from - disk. - * checkin.c (Checkin): Updated RCS_checkin caller, moved RCS_parse - call to before RCS_checkin. - * import.c (add_rev): Updated caller. - * commit.c (remove_file): Updated caller. - (checkaddfile): Updated caller. Parse `rcsfile' after - calling add_rcs_file. Free `rcsfile' instead of asserting it to - be NULL. - - Librarify `rcs'. - * rcscmds.c, cvs.h (RCS_exec_settag, RCS_exec_deltag, - RCS_exec_setbranch, RCS_exec_lock, RCS_exec_unlock): Removed. - - * rcs.c (RCS_settag): Rewritten to eliminate RCS 5.7. - * commit.c (checkaddfile): Call RCS_rewrite after calling RCS_settag. - * import.c (add_tags): Same. - * rtag.c (rtag_fileproc): Same. - * tag.c (tag_fileproc): Same. - - * rcs.c (RCS_deltag): Rewritten to eliminate RCS 5.7. Remove - `quiet' parameter, since this function no longer prints any output. - * commit.c (remove_file): Update caller. Also call RCS_rewrite - after RCS_deltag. - * rtag.c (rtag_delete): Same. - * tag.c (tag_fileproc): Same. - - * rcs.c (RCS_setbranch): Rewritten to eliminate RCS 5.7. - * commit.c (remove_file): Call RCS_rewrite after calling RCS_setbranch. - (fixbranch): Same. - (lock_RCS): Same. - - * rcs.c (RCS_lock): Rewritten to eliminate RCS 5.7. Change third - arg to mean `quiet' and not `noerr', permitting admin_fileproc to - run RCS_lock verbosely. - * commit.c (lock_RCS): Update callers; call - RCS_rewrite after RCS_lock. - (remove_file): Same. Call RCS_lock quietly. - * import.c (add_rev): Same. Do not print `fork failed' error - message, since we're no longer forking. - - * rcs.c (RCS_unlock): Rewritten to eliminate RCS 5.7. Change - `noerr' arg to mean `quiet', permitting admin_fileproc to run - RCS_unlock verbosely. Use notify_do when breaking another user's - lock. Include "edit.h" for notify_do prototype. - * checkin.c (Checkin): Update caller; use RCS_rewrite after RCS_unlock. - * commit.c (unlockrcs): Same. - * import.c (add_rev): Same. - - * rcs.c, rcs.h (RCS_getlocks, RCS_addaccess, RCS_delaccess, - RCS_getaccess, RCS_delete_revs): New functions. - (expand_keywords, RCS_lock, RCS_unlock): Use RCS_getlocks. - * log.c (log_fileproc, log_version): Call RCS_getlocks. Don't add - bogus ";locker" nodes to RCSVers nodes -- walk lock list with - printlock_proc. - (printlock_proc): New function. - - * admin.c (admin_fileproc): Largely rewritten: call internal RCS - library functions instead of forking RCS processes. - (admin, admin_fileproc): Obsolete -V option. - (struct admin_data): Remove `version' member. - * sanity.sh (admin-24): Remove -V test case. - - New functions for reading and writing RCS files. - * rcs.h (struct deltatext, Deltatext): New types. - (struct rcsversnode): New members `text' and `outdated'. - (struct rcsnode): New members `access', `locks', `strict_locks', - `comment', and `desc'. - * rcs.c (RCS_reparsercsfile, expand_keywords): Use new RCSNode members. - (free_rcsnode_contents): Free them. - * log.c (log_fileproc): Use new RCSNode members instead of ->other. - - * rcs.c (getdelta, RCS_getdeltatext, freedeltatext, do_locks, - RCS_putadmin, RCS_putdtree, RCS_putdesc, putdelta, - putrcsfield_proc, putsymbol_proc, RCS_copydeltas, putdeltatext, - RCS_rewrite, getrevnum, rcs_internal_lockfile, - rcs_internal_unlockfile, rcs_lockfilename): New functions. - - (RCS_reparsercsfile): Use getdelta, making sure fp is positioned - correctly before calling it. Skip `head' and `branch' nodes: we - have already parsed them, and they were being added incorrectly to - rcs->other. Do not signal error if the RCS file has an empty - delta tree; this made it impossible for RCS_checkin to perform an - initial checkin. Remove `all' parameter; always store all RCS - fields. - (RCS_fully_parse, RCS_gettag, RCS_getbranch, RCS_getdate, - RCS_getdatebranch, RCS_getrevtime, RCS_symbols, translate_symtag, - RCS_isdead, RCS_getexpand, RCS_checkout, annotate_fileproc): - Update all callers to remove `all' parameter. - - (getrcskey): Do not append trailing whitespace to a value. This - corrupted some log fields and wrecked some sanity.sh test cases. - - (free_rcsvers_contents): New function. - (rcsvers_delproc): Call it. - - * rcs.h (NODELTA): Removed symbol; now obsolete (since RCSNodes - do not go stale). - * import.c (add_rev): Removed NODELTA reference. - * rcs.c (RCS_reparsercsfile, RCS_checkout, RCS_settag, RCS_deltag, - RCS_setbranch, RCS_lock, RCS_unlock, RCS_deltas): Removed NODELTA - references. - - Miscellaneous changes to support RCS librarification and fix some bugs. - * subr.c, cvs.h (line2argv): Add `sepchars' argument. - * modules.c (cat_module, admin_fileproc): Update all callers. - - * subr.c, cvs.h (compare_revnums, increment_revnum): New functions. - (make_message_rcslegal): Strip whitespace from end of - lines and end of string, a la `cleanlogmsg' in RCS 5.7. - (get_file): Terminate buf with \0, extending it if - necessary. Read from stdin if `name' arg is NULL. - * admin.c (admin_fileproc): Call get_file to read -t arg from stdin. - - * error.c, error.h (rcserror): New function, used everywhere. - - * hash.c, hash.h (addnode_at_front): New function. - * rcs.c (RCS_settag, RCS_lock): Call it. - - * import.c, cvs.h (expand_at_signs): Make extern. - * rcs.c (putrcsfield_proc, RCS_putadmin, RCS_putdesc, - putdeltatext): Call it. - - * rcs.c (make_file_label): Use last_component to get file's basename. - - * sanity.sh (srcdir): New variable. - (rcs-7): Remove newphrase warning, no longer produced by CVS. - (rcs-8): Permit random whitespace around newphrase fields. - (admin-22): New test cases for -o options: admin-22-o{1..23}. - (reserved): New test cases for rcslock.pl: reserved-{8..16}. - -Tue Oct 21 16:48:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * tag.c (tag_check_valid): Add comment about locking or lack - thereof. - -1997-10-20 Jim Kingdon <kingdon@harvey.cyclic.com> - - * version.c: Change version number to 1.9.19. - -1997-10-19 Jim Kingdon - - * Version 1.9.18. - -Wed Oct 15 15:21:43 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (username): Add '-' to characters allowed in user name. - - * rcscmds.c (diff_exec): Remove item about external diff - programs. It doesn't really belong here now that diff is - librarified and TODO #191 now mentions this. - - * checkout.c (checkout_proc): Add comment about assuming '/' is - the only path separator. - * options.h.in: Fix thinko (CVS/Repository -> CVS/Root). - -Mon Oct 13 22:46:03 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * commit.c (commit): Add comment about CVS_BADROOT and command - other than "commit". - -1997-10-11 Noel Cragg <noel@swish.red-bean.com> - - * options.h.in: RELATIVE_REPOS has been checked for bitrot -- it - now works again. Change the comment before the #define to say - that we'll be switching to it soon. - - * sanity.sh (basicb-1, basicb-1a): update dotest strings to match - no matter if we're running with RELATIVE_REPOS defined or not. - (basicb-9b, basicb-9c): same. - - * sanity.sh (basicb-9b, basicb-9c): modified tests, since the - checkout.c fix changes the way this test module is checked out. - (basicb-9d, basicb-9e, basicb-9f): new tests, same. - (basicb-18): modify test, same. - (cvsadm): new set of exhaustive tests to check the contents of - CVS/Root and CVS/Repository files under various conditions. As a - side effect, it tests the behavior of the "-d" flags (command line - and modules file). - (modules3-7e through modules3-7h): removed, since these tests were - a small subset of what is tested in the new cvsadm section. - (modules-1b, modules-1c): same. - (modules-2b, modules-2c): same. - (modules-3b, modules-3c, modules-3e, modules-3f): same. - - * create_adm.c (Create_Admin): be a bit more verbose when using - trace mode. - - * checkout.c (checkout_proc): rewrote the code that sets the where - variable and the code that matches directory names with repository - directories. This fixes a long-standing bug in CVS. (It used to - be the case that "cvs co -d foo <mod1> <mod2>" would not properly, - where <mod1> and <mod2> where defined in the modules file. While - the first module would be checked out correctly, the second would - be checked out under the name of the directory to which the module - referred rather than the module name!). This fix also allows us - to check out things into directories that are more than one deep - (e.g. "cvs -d foo/bar/baz co blah" will now work). - (checkout): remove code that performed a CHDIR if the - number of arguments specified was greater than one, since it's no - longer necessary. Also remove the code that prevented us from - doing "cvs co -d <dir1>/<dir2>" without <dir1> existing, since - checkout_proc handles things correctly now. - - * cvs.h: fix typo. - - * rtag.c (rtag): reformat so that we don't run over 80 characters - per line. - (rtag_dirproc): same. - - * sanity.sh: change all old test cases to use pass and fail - functions rather than doing some combination of echo and exit - themselves. - - * commit.c (commit_direntproc): remove the "warm fuzzy" -- this - code never gets called when running in client/server mode, and we - should have CVS' output match as much as possible between the two - modes. Moreover, there is no analogous place to put this same - message when we're running in c/s mode. - (find_direntproc): print the same "fuzzy" as in check_direntproc - so that local and c/s mode have the same messages. - * sanity.sh (187a3): update test case to reflect the above. - -Thu Oct 9 10:57:02 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * parseinfo.c (parse_config): Add comment about compatibility - issues with adding keywords. - -Wed Oct 8 16:40:37 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * recurse.c (do_dir_proc), commit.c (check_direntproc, - commit_direntproc, find_dirent_proc): If this - directory doesn't exist, skip it. - * diff.c (diff_dirproc): Reindent. - * sanity.sh (deep-4b0a, deep-4b0b): Check for this fix. - -Thu Sep 26 16:30:00 1997 Larry Jones <larry.jones@sdrc.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (checkout_file): Don't set timestamp in noexec mode. - * vers_ts.c (Version_TS): Add comment about ignoring errors from - utime. - * sanity.sh (conflicts3): New tests, for this fix. - -Fri Oct 3 09:47:04 1997 Noel Cragg <noel@swish.red-bean.com> - - * sanity.sh (168): use PROG instead of CVSBASE, since they are - equal. - (importb-2): refer to PROG instead of "cvs" in error message. - - * add.c (add): use PROGRAM_NAME in the error message rather than - "cvs". - * classify.c (Classify_File): same. - * commit.c (find_fileproc): same. - * sanity.sh: change all add notification messages to refer to PROG - rather than "cvs". Fixed nasty quoting in several places at the - same time, replacing older "'command'" forms with newer - ".command." for simplicity. - -Sat Sep 27 01:37:10 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (rcslib-merge-8): Accept "P file1" as well as "U file1". - -Fri Sep 26 22:24:10 1997 Noel Cragg <noel@swish.red-bean.com> - - * create_adm.c (Create_Admin): assign our duplicate pointer `cp' - after the xrealloc of `reposcopy' because the latter might have - changed addresses. - -Fri Sep 26 14:25:59 1997 Tim Pierce <twp@twp.tezcat.com> - - * run.c (call_diff): Don't reset optind; this is done by diff_run now. - - Librarify rcsmerge/diff3. - * rcscmds.c, cvs.h (RCS_merge): Rewritten from scratch: check out - selected files and diff3 them. Take new `rcs' and `workfile' - arguments, so we can resolve symbolic tags and manipulate the - working file. - * update.c (merge_file, join_file): Update RCS_merge calls. - * run.c, cvs.h (call_diff3): New function. - - * sanity.sh (rcslib): New tests, rcslib-merge-{1..13}. - -Fri Sep 26 22:59:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * create_adm.c (Create_Admin): Fix thinko in Noel's change: keep - track of the originally allocated "cp" and free it, rather than - calling free on a pointer which may point halfway into the allocation. - * repos.c (Sanitize_Repository_Name): Per HACKING, assert that - repository != NULL, rather than just silently returning if NULL. - Reindent a line. - -Fri Sep 26 15:40:00 1997 Noel Cragg <noel@swish.red-bean.com> - - * sanity.sh (modules): add tests modules-[123]* that make sure the - administrative files get rebuilt in various cases. - - * add.c (combine_dir): removed function, since we no longer need - to worry about stripping the "." path element out. Changed the - two callers to simply concatenate their two arguments. - - * recurse.c (do_dir_proc): don't bother trying to strip off "." in - the repository name since the below changes fix that behavior -- - simply concatenate the repository and directory names together. - - * checkout.c (checkout_proc): sanitize the repository name after - constructing it (we may create "/path/to/repos/.", but we don't - want that to be passed around). Remove the code that tacks on - "/." when constructing top_repository, since the below changes fix - that behavior. Added comments to the part of this function that - builds administrative files. - - * sanity.sh (basicb): now that the below weirdness is fixed, the - extra "." path element in test basicb-0c doesn't appear when a - top-level file is checked out. Remove it from the expect string. - - * create_adm.c (Create_Admin): now that the repository name isn't - floating around with "." as the last path element, make creation - of the top-level administrative files a special case -- save the - repository name as "/path/to/repos/." Why? I considered not - including the "." but didn't know how it would affect the remote - protocol when RELATIVE_REPOS was defined (do we have a way of - sending "" via the protocol?). After I make sure that the - RELATIVE_REPOS patches still work, I'll check the "" possibility - so we don't have to have a this special case. - - * repos.c (Sanitize_Repository_Name): new function that removes - (if present) the trailing slash and "." component from the - repository name. Many routines break if we don't guarantee this. - See the comment before the function for complete information. - (Name_Repository): call Sanitize_Repository_Name before returning - the value. - * cvs.h: add prototype for Sanitize_Repository_Name. - -Fri Sep 26 14:19:25 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvs.h (CVS_CMD_USES_WORK_DIR): Fix comment (the sense of the - flag is not reversed from what it would seem; when I thought so it - was because I was misreading the lookup_command_attribute code). - -Thu Sep 25 23:14:47 1997 Noel Cragg <noel@swish.red-bean.com> - - * parseinfo.c (Parse_Info): fix typo in the trace message. - -Thu Sep 25 14:22:54 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * build_src.com: Also link with diff.olb. - - * main.c (Make_Date): If gmtime returns NULL, try localtime. - -Wed Sep 24 19:18:40 1997 Noel Cragg <noel@swish.red-bean.com> - - * checkout.c (checkout): fix typo in comment. - -Wed Sep 24 08:31:46 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (patch_file): Revise comments about diff -a now that - diff is librarified. - -Sun Sep 21 21:28:26 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * run.c (call_diff): Sleep for a second, in hopes of helping with - out of order bugs. - -Sat Sep 20 07:19:18 1997 Tim Pierce <twp@twp.tezcat.com> - - Integrate diff library into CVS. - * run.c, cvs.h (call_diff): New function. - * rcscmds.c (diff_exec, diff_execv): Get diffs from call_diff - instead of running diff as a subprocess. - * Makefile.in (cvs): Add ../diff/libdiff.a. - - * diff.c (longopts, diff): Use 131 for --ifdef, fixing Jim's thinko - (using 147 for both --side-by-side and --ifdef). - - * sanity.sh (rcslib): Added tests rcslib-diffrgx-*, to test - handling of regex diff options. - -1997-09-21 Jim Kingdon <kingdon@harvey.cyclic.com> - - (Note that this requires that DIFF support -L. I'll be checking - in a fix to that in a moment, but I wanted separate checkins in - case that helps with clarity). - Tweaks to rcsdiff librarification: - * sanity.sh (rcslib): Change "cvs" to "${PROG}" and subcommand - names (e.g. "add") to "[a-z]*". Former should deal with ${testcvs} - being "cvs.old" or something; latter fixes make remotecheck. - * rcs.c (make_file_label): Take into account strlen (rev) when - allocating space. Removes a FIXME and probably fixes a buffer - overrun security hole. - * rcscmds.c (RCS_exec_rcsdiff): Remove #if 0'd code to call - rcsdiff. Tim says he has compared the new code with rcsdiff code - and is confident that the behavior is preserved, so we need to - nuke the comment which says this has not been done. #if 0 isn't - really a very good way to document the way it used to work anyway; - the old code is still in CVS. - * diff.c: Add comment about rcsdiff options that we don't support, - which Tim had sent in email. Remove -T and -y, as the - previous meaning had been very confused. - -1997-09-21 Tim Pierce <twp@xochi.tezcat.com> - - Librarify rcsdiff. - - * diff.c (have_rev1_label, have_rev2_label): New variables. - (diff): Generate file labels with make_file_label if necessary; - pass labels, revisions and working file name to RCS_exec_rcsdiff. - * rcscmds.c, cvs.h (RCS_exec_rcsdiff): Completely revised function - to eliminate rcsdiff dependency, based on patch from JimK. - (diff_execv): New function, to exec diff with explicit -L args. - * rcs.c, rcs.h (make_file_label): New function. - (RCS_output_diff_options): New function. - * sanity.sh (rcslib): New test. - -Fri Sep 19 15:08:08 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_nodeisbranch): Assert that RCS is non-NULL. - * commit.c (remove_file), rcs.c (RCS_getversion), rtag.c - (rtag_fileproc), status.c (status_fileproc, tag_list_proc), tag.c - (tag_fileproc): Call RCS_nodeisbranch not RCS_isbranch - in contexts where we know the RCS argument is non-NULL. - - * commit.c (find_fileproc): Pass tag not NULL to Version_TS for - the tag. - * vers_ts.c (Version_TS): Improve (somewhat) the introductory - comment. - * sanity.sh (editor): New test editor-9 tests for above fix. - Renumber/tweak surrounding tests to fit. - - * log.c (log_version): If p->data is NULL, it is an empty log - message. - * sanity.sh (rcs-14): New test, tests for above fix (previously - this was a coredump). - -Thu Sep 18 08:45:05 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (rcs-7): Fix stupid ${TESTDIR} omission. - -Wed Sep 17 16:27:41 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (rcs): New tests rcs-5 through rcs-13 test for - getdate.y fix (rcs-12 and rcs-13 both failed with the buggy - getdate.y). - -Tue Sep 16 00:07:17 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (editor): Clean up first-dir at end of test. - - * sanity.sh (editor): New tests test do_editor. - - * commit.c (commit): For the client, if we got the log message - from do_editor and there was an error, don't toss the message. - -Mon Sep 15 14:27:54 1997 martin.sjoelin@ubs.com - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (RCS_checkout): fwrite in bite-size pieces, not the whole - file in one fwrite. - -Sun Sep 14 12:23:15 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * commit.c (check_fileproc): If the file has "conflict - indicators", spit a warning and proceed with the checkin. - * sanity.sh (conflicts): Adjust tests conflicts-132, - conflicts-status-3, conflicts-133, and conflicts-status-4 - for new behavior. - -Fri Sep 12 11:12:34 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c, admin.c, checkin.c, checkout.c, classify.c, commit.c, - create_adm.c, cvsrc.c, diff.c, entries.c, find_names.c, hash.c, - import.c, lock.c, log.c, logmsg.c, main.c, modules.c, myndbm.c, - no_diff.c, parseinfo.c, patch.c, rcs.c, rcscmds.c, recurse.c, - remove.c, repos.c, root.c, rtag.c, status.c, subr.c, tag.c, - update.c, vers_ts.c, hash.h, rcs.h, options.h.in: Change "CVS 1.4 - kit" to "CVS source distribution". - - * sanity.sh: Comment out call to "whoami". - -Thu Sep 11 10:09:04 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * commit.c (classify_file_internal): Add comment about saving - quiet vs. saving really_quiet. - - * sanity.sh (newb-123j0): Use two regexps instead of assuming that - expr has "\(", "\|", and "\)". If we want to require the latter, - we should check for it up front, rather than let people get - halfway through and wonder why the test failed. - -Tue Sep 9 19:22:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * expand_path.c (expand_path): If GETPWNAM_MISSING is defined, - just give an error instead of calling getpwnam. - - * subr.c (getcaller): If SYSTEM_GETCALLER is defined, call it - instead of all the getlogin/getpwuid/etc. - * wrapper.c (wrap_setup): Call get_homedir not getpwuid. - -Mon Sep 8 17:54:14 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicc): Change ls -1 to echo *; according to - larry.jones@sdrc.com, ls -1 isn't portable. - -Sun Sep 7 07:45:35 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basic2): In test basic2-64, match usernames with - ${username}. - - * root.c: Reindent a few things. - * root.c, cvs.h (same_directories): Remove. Never used, - portability hassle. - - * add.c (add_directory): When checking for CVSADM, call fncmp not - strcmp. I actually suspect this code doesn't do much these days, - but fncmp clearly will make more sense than strcmp. - - * rtag.c (rtag_usage), tag.c (tag_usage): Reword to hopefully be - clearer that -r takes either numeric or symbolic revision. - - * ignore.c (ign_dir_add, ignore_directory): Reindent. Tweaks to - comments. - - * update.c (checkout_file): Only ignore existence_error from - unlink_file_dir, not all errors. - - * checkout.c (safe_location): Check for errors from xgetwd. - * create_adm.c (Create_Admin): Remove call to xgetwd; it is just - debugging code anyway and it wasn't checking for errors. - - * sanity.sh: Add comment about default value for TESTDIR. - - * server.c (serve_log): Change "cvslog" to "log". This - (accidental, I presume) error had made it impossible for anonymous - users to run "cvs log". - - * classify.c (sticky_ck): Change to take an finfo argument rather - than several arguments taken from there. Cleans up the way the - calling convention had depended on SERVER_SUPPORT. - (Classify_File): Change callers. - - * version.c: Change version number to 1.9.17. - - * Version 1.9.16. - - * recurse.c (do_dir_proc): In combining repository and dir, omit - trailing "/." from repository. - * sanity.sh (modules3): Adjust test modules3-4 so we test for - this fix (this is not just cosmetic; the bug prevented the - "Rebuilding administrative file database" from happening). - modules2 already tests the "co CVSROOT/modules" usage. - - * checkout.c (checkout_proc): When building top-level CVSADM - directory, continue the process of walking up the repository one - more level, rather than putting in the same repository as for the - first-level directory. - * sanity.sh: Adjust tests basicb-1b, basicb-9b, modules3-7f, - toplevel-9, and toplevel-11 to test for this fix. - - (For reference, this takes CVS's text segment from 344460 to - 344140 bytes. I know, this may seem unimportant, but it is so - unusual for programs to shrink and I think it is so cool when they - do without losing functionality/clarity/etc). - * checkout.c, cvs.h (emptydir_name): New function. - * checkout.c (checkout, checkout_proc), modules.c (do_module): - Call it instead of duplicating the code to do that. - - * sanity.sh (basicc): Clean up first-dir at end of test. - -Sat Sep 6 09:48:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (join): Fix cut and paste error in join-28 - (/home/kingdon/... -> ${TESTDIR}). - - * recurse.c (start_recursion): If there is no CVSADM and no - subdirectories, give an error. - * sanity.sh (basicc): New tests, test for this fix. - - * sanity.sh (join): New tests join-25 through join-29 test merging - from one branch to a different branch. - - * release.c: In comment about CVSROOTADM_IGNORE, also mention - comment just added to entries.c. - * entries.c: Expand this comment, especially the part about - CVS/Template. - - Keep track of what revisions CVS/Base correspond to: - * cvs.h (CVSADM_BASEREV, CVSADM_BASEREVTMP): Added. - * entries.c, cvs.h (base_register, base_deregister, base_get, - base_walk): New functions. - * edit.c (edit_fileproc): Call base_register when setting up CVS/Base. - (unedit_fileproc): When taking a file out of CVS/Base, put its - revision back into entries, and base_deregister it. - * sanity.sh (watch4): New tests watch4-10 through watch4-18 test - for above fix. - -Fri Sep 5 09:14:10 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c: Only declare start_rsh_server if we are going to - define it (!NO_EXT_METHOD). - - * subr.c, cvs.h (check_numeric): New function. - * admin.c (admin): Call it. - * sanity.sh (admin): New tests admin-10a and admin-10b test for fix. - -Thu Sep 4 15:55:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (binwrap2): New tests, test for the ability to specify - all files are binary except certain patterns. - - * sanity.sh (modules3): New tests modules3-16 and modules3-17 test - for another behavior involving '/' in a module name. - -Sun Aug 31 12:03:15 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add): Remove checks for '/' in pathnames. - (add): Move code which handles entries and repository inside loop, - since these now might be different for each argument. Add code to - set finfo.update_dir, finfo.file, and finfo.fullname appropriately - even if pathname contains '/'. Replace user variable with - finfo.file or finfo.fullname, depending on which is meant. chdir - into update_dir for each argument. Likewise for the client code - which creates directories. - (add_directory): Replace arguments with a single finfo argument. - Replace dir with finfo->fullname as needed. - (add): Update call to add_directory. - * client.c, client.h (send_a_repository): No longer static. - * sanity.sh (errmsg2): Adjust tests to test for '/' in pathname. - - * sanity.sh (errmsg2): New tests errmsg2-13 through errmsg2-16 - test the status quo with respect to '/' in cvs add argument. - -Sat Aug 30 17:37:29 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * run.c (run_popen): Add comment on return value. - * release.c (release): Check for NULL return from popen. - -Fri Aug 29 17:49:20 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (get_server_responses): Add comment about "ok^M". - -Thu Aug 28 13:35:12 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * edit.c (edit_fileproc): If file doesn't exist, give an error. - * sanity.sh (devcom2): Tests devcom2-12 through devcom2-17 test - for above fix. - -Tue Aug 26 16:42:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * subr.c (xmalloc): Reword error message to clarify that memory, - not disk space or some other resource, is in question. - -Tue Aug 26 01:04:48 1997 Steve Ralston <sralston@ppdpost.ks.symbios.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add_directory): In allocating message, also allocate - enough for tag and date related text. - -Tue Aug 26 01:04:48 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (update_dirent_proc): Use update_dir not dir in "new - directory" message. - * find_names.c (find_dirs): Skip CVSNULLREPOS. - (Find_Directories): Add comment about find_dirs skipping CVSATTIC - and CVSLCK in working directories. - * sanity.sh (basicb): New tests basicb-edir-* test for find_dirs - fix. Change other tests to test that Emptydir is not special in - non-CVSNULLREPOS contexts. - -Sun Aug 17 14:44:57 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * import.c (add_rcs_file): Add comment about -k overriding wrappers. - -Sat Aug 16 18:09:05 1997 Martin Sjoelin <martin.sjoelin@ubs.ch> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * import.c (add_rcs_file): Before opening the input file - when importing, if options is binary, open the file in - binary mode. - -1997-08-16 enami tsugutomo <enami@ba2.so-net.or.jp> - - * sanity.sh (mcopy): Unset CVSWRAPPERS last of all. - -Fri Aug 15 11:11:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add_directory): Copy default file attributes from the - parent directory to the directory we are creating. - * fileattr.h, fileattr.c (fileattr_getall, fileattr_setall): - New functions, in support of above. - * fileattr.c (fileattr_free): Add comment about fileattr_write - maybe not clearing attrs_modified. - * sanity.sh (watch4): New test, tests for above fix. - -Thu Aug 14 11:08:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (merge_file, join_file): If wrap_merge_is_copy, treat - files as nonmergeable (as we had been treating binary files). - (join_file, update_fileproc): Remove previous wrap_merge_is_copy - cruft. - * sanity.sh (mcopy): New tests, test for above fix. - (binfiles2): New tests binfiles2-9a-* correct an oversight. - (binfiles, binfiles2): Adjust to reflect wording change from - "binary file" to "nonmergeable file". - (mwrap): Adjust tests mwrap-8 through mwrap-10 for new behavior. - - * main.c (main): Reword copyright notices to include the latest - year, to refer to "other authors" in addition to the ones listed, - and to be more concisely formatted. - -Wed Aug 13 13:50:00 1997 Larry Jones <larry.jones@sdrc.com> - - * sanity.sh: Replace hard-coded directory with ${TESTDIR}, add - join3 to default tests - -Wed Aug 13 11:42:24 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcscmds.c: Adjust comment to reflect progress on removing RCS - execs outside this file. - -Mon Aug 11 10:14:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * vers_ts.c (Version_TS): If vers_ts->vn_rcs == NULL, skip setting - modification time in server case as well as local case. - * server.c (server_modtime): Add assertion to clarify that caller - must assure that vers_ts->vn_rcs != NULL. - * sanity.sh (join3): Add file "file2" to test for above fix. - - * modules.c (save_d): When parsing -s option, don't assume that - we will hit a space before we hit the '\0'. - (struct sortrec): Document allocation policies (status quo except - status field is now malloc'd). - (cat_module): No longer need to set the '\0' at the end of the - status field back to ' ', as it no longer shares storage with the - rest field. - * sanity.sh (modules): Add "statusmod" to test for above fix. - -Sun Aug 10 12:18:31 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh: Remove TODO item about more keyword expansion tests. - The keyword test and others cover it pretty well, and such an item - isn't useful unless it is specific. - - * sanity.sh (importb): New tests test "cvs import -b". - - * mkmodules.c: Update comment with more reasons why having - CVSROOT/passwd be a regular administrative file would be a Bad - Idea. - - * server.c (switch_to_user): Add comment about checking for errors - from setuid and friends. - -Wed Aug 6 13:48:29 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c (main): Add comment about errors writing CVS/Root in - need_to_create_root code. - -Tue Aug 5 22:05:20 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * entries.c (write_entries): If trouble writing Entries.Backup, - make it a warning not an error. - -Wed Jul 30 08:42:04 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * parseinfo.c (parse_config): If AUTH_SERVER_SUPPORT is not - defined, don't set system_auth. - - * version.c: Change version number to 1.9.15. - - * Version 1.9.14. - - * create_adm.c, cvs.h (Create_Admin): If new argument WARN is set, - then make creating the CVS directory itself a warning not a fatal - error. New return value indicates whether we did this. - * checkout.c (build_one_dir), client.c (call_in_directory): - Pass WARN as one. - * add.c, client.c, checkout.c, modules.c, update.c: Pass WARN as - zero for all other Create_Admin callers. - * sanity.sh (toplevel): New test toplevel-12 tests for this fix. - * filesubr.c (mkdir_if_needed): Also check EACCES/isdir. Needed - to make toplevel-12 test work. - - * sanity.sh (toplevel): New test toplevel-11 and friends test for - another variation of the toplevel-9 bug. - -Tue Jul 29 12:11:16 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * login.c (construct_cvspass_filename): Revert this change. The - main reason is procedural; Karl is not a current CVS developer. - The other thing is that the new text doesn't say anything about - HOMEDRIVE and HOMEPATH. - -Tue Jul 29 11:36:22 1997 Karl Fogel <kfogel@harvey.cyclic.com> - - * login.c (construct_cvspass_filename): error message informs user - she may need to set HOME environment variable by hand. - -Sun Jul 27 15:36:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * admin.c (admin): Remove comment "XXX send -ko too with i = 0". - It turns out to be a description of a bugfix which was applied on - 8 Oct 1995, and never should have been in a comment in the first - place. - - * admin.c (admin, admin_fileproc): Parse options ourself rather - than blindly passing them to RCS. - Accordingly, add struct admin_data and function arg_add, and delete - global variables ac and av. - * sanity.sh (admin): Change admin-3 test to reflect cvs admin -i - now being an error. - (basicb): Change basicb-21 test to relect the improved error - message here. - -Sat Jul 26 11:34:51 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (join3): New tests, test a new branch topology and - greatest common ancestor. - -Fri Jul 25 09:51:49 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (serve_directory): Repository must start with - CVSroot_directory rather than some random pathname. - - * remove.c (remove_fileproc): If there is a numeric sticky tag, - don't allow the remove. - * commit.c (check_fileproc): Add comment about this case. - * sanity.sh (sticky): New tests sticky-15 through sticky-23 - test for this behavior and the analogous behavior with - non-branch sticky tags (which is unchanged). - - * client.c (update_entries): Clear the stored mode, modtime, and - checksum even on an error. - * sanity.sh (contents2-142d*): Also test cvs status. Also test - the case in which the contents of the file are unchanged. Also - test running diff to see the conflict, and resolving the conflict. - Without the fix above, the new contents2-142d2 test would get a - "duplicate Mod-time" warning. - -Thu Jul 24 13:29:15 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (pserver_authenticate_connection): Call parse_config - here too. - * parseinfo.c (parse_config): If we are called several times, the - times beyond the first do nothing. - * cvs.h, parseinfo.c (parse_config): New argument cvsroot. - * server.c, main.c: Update callers. - * server.c, server.h (system_auth): New variable. - * parseinfo.c (parse_config): Parse new keyword SystemAuth. - * mkmodules.c (config_contents): Add comments for SystemAuth. - * server.c (check_password): If !system_auth, then skip the check - for a system username/password. - - * main.c (main): No fatal error if parse_config returned an error. - * server.c (serve_root): Likewise. - * error.c (error): Add comment about calling from the server. - * parseinfo.c, cvs.h (parse_config): Remove NOERR crock. - Closer reading of server.c makes it seem like calling error - here is OK after all. - * sanity.sh (config): New test, tests for above fix. - - * server.c (serve_root): Fix typo ("doign" -> "doing"). - -Wed Jul 23 13:55:09 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * vers_ts.c (Version_TS): If entdata is for a directory, don't set - vn_user and friends. - * server.c (dirswitch): Add comment about why Subdir_Register is - sometimes a noop here. - * cvs.h (struct vers_ts): Fix comments about NULL vs. "" in vn_user. - * sanity.sh (errmsg2): New tests errmsg2-10 through errmsg2-12 test - for above fix. - * add.c (add_directory): Call cvs_output not printf. This fixes - an out-of-order bug which was showing up in the testcase. - -21 Jul 1997 Jim Kingdon - - * subr.c (get_file): Put st_size into an unsigned variable to - avoid signed/unsigned warnings. - -Mon Jul 21 00:19:30 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * version.c: Change version number to 1.9.13. - - * Version 1.9.12. - - * sanity.sh (toplevel, head): Delete our files from the repository - when done with them. - -Sun Jul 20 15:53:08 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (admin, reserved): New tests, test most cvs admin - behaviors. - (log2): New tests log2-5 through log2-10 test setting the - description via cvs admin. - -Thu Jul 17 12:39:27 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (socket_buffer_input, socket_buffer_output): Add - comment regarding size of of buffer we pass to send and recv. - -Sat Jul 12 15:21:24 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * import.c, rcs.h (add_rcs_file): New argument key_opt replaces - access to global variable keyword_opt. New arguments desctext and - desclen allow one to set the description. If add_vhead is NULL, - then omit a revision, like rcs -i. - * import.c (process_import_file), mkmodules.c (init): Change - callers. - * subr.c, cvs.h (get_file): New function, adapted from code in - update_entries. - * client.c (update_entries): Call it. - * commit.c (checkaddfile): Create new RCS files with add_rcs_file - rather than rcs -i. - -Fri Jul 11 12:14:54 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (join_file): Handle binary files ourself rather than - passing them to RCS_merge (which sort of tries to handle binary - files, but does so badly). - * sanity.sh (binfile2): New "brmod", "brmod-trmod", and - "brmod-wdmod" tests test for this fix. - - * add.c (add): Exit status is now nonzero if any of the arguments - failed (already was mostly true, make it true for the new sanity - check). Move check for '/' (now ISDIRSEP) up to sanity check, so - the client does it too. - * sanity.sh (errmsg2): Test for this fix. - -Thu Jul 10 00:02:54 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add): Check for CVSADM, ".", and "..", and skip any - attempt to add them. - * sanity.sh (errmsg2): New tests, tests for above fix. - - * main.c (main): In text printed upon --version, also refer - people to --help. - - * rcscmds.c (RCS_exec_rcsdiff): Add comment about timezones. - - * server.c, cvs.h (cvs_output_binary): New function. - * rcs.c (RCS_checkout): For a binary file, call cvs_output_binary - rather than cvs_output. - * client.c (handle_mbinary): New function. - (responses): Add "Mbinary". - -Tue Jul 8 12:18:16 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * filesubr.c (get_homedir): Add comment about root vs. user - directory in pserver server. - -Mon Jul 7 14:39:33 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (big): Also test Rcs-diff case. - - * client.c (update_entries): Reindent a line. - - * sanity.sh (death2): Add comment about Sun diff. Thanks to - Warren Jones <wjones@TC.FLUKE.COM> for reporting this. - - * client.c (update_entries): If DONT_USE_PATCH, then just treat a - Patched response as an indication to try again with complete files. - * update.c (update): Remove DONT_USE_PATCH ifdefs, since a CVS - with DONT_USE_PATCH defined can still handle Rcs-diff. - * sanity.sh (serverpatch): Add comment about this coming up in - real life if the user modifies the file while CVS is running. - - * client.c (start_server): Add comment about logfiles if there are - several connections to the server. - (log_buffer_shutdown): Close the logfile after shutting down the - underlying buffer. This way at least we get the last set of - logfiles rather than a bizarre mishmash. - -1997-07-06 enami tsugutomo <enami@but-b.or.jp> - - * logmsg.c (do_verify): Unlink temporary file before call error(). - Remove unneeded `return' statement. Fix comment. - -Sun Jul 6 13:36:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * diff.c (diff_fileproc): Change message from "during rcsdiff of" - to "while diffing". For a while now, that message might be - printed after a call to DIFF instead of rcsdiff. - - * diff.c (diff_fileproc): Call cvs_output not printf. Remove - calls to fflush (should be handled now by call to cvs_outflush in - recurse.c). - * patch.c (patch_fileproc): Likewise. - - * rcscmds.c, cvs.h (diff_exec): New function. - * diff.c (diff_fileproc), patch.c (patch_fileproc), - update.c (patch_file): Call it. - - * rcscmds.c: Adjust comments concerning diff library to point to - new, expanded comments at diff_exec. Remove comments concerning - patch library; Rcs-diff should be adequate. - - * client.c (update_entries): Add comment about GNU patch usage (-b - option and so on). - -Sat Jul 5 04:13:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcscmds.c, cvs.h (RCS_exec_rcsdiff): New function. - * diff.c (diff_fileproc): Call it. - -Thu Jul 3 09:50:07 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c (main): Add comment about how long we should keep the - deprecated "cvs rlog" alias. - - * server.c (cvs_output): Add comment about whether to fflush. - -Wed Jul 2 18:57:29 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (join2): New tests join2-19 and friends test for a - case that we can't readily get right (see comments). - -Tue Jul 1 09:52:09 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c (cmd_usage): Say "specify" --help rather than the vague - "use". - (opt_usage, cmd_synonyms): Mention --help here too. - * add.c, admin.c, checkout.c, commit.c, diff.c, edit.c, import.c, - log.c, login.c, mkmodules.c, patch.c, rcs.c, release.c, remove.c, - rtag.c, status.c, tag.c, update.c, watch.c: Likewise, for all the - other help messages. - - * sanity.sh (join2): New tests. - - * repos.c (Name_Repository): Check for errors from fclose. - -Fri Jun 27 10:27:48 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * scramble.c, login.c: Reindent. - - * client.c (connect_to_pserver): Check for errors from send(). - If socket() fails, include SOCK_STRERROR (SOCK_ERRNO) in message. - -Wed Jun 25 11:21:52 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c: New option --help-options, with much of the text - from --help. Fix a few capitalization and punctuation problems. - Rewrite text for --help to be an intro to all the --help-* - options. - - * sanity.sh (head): New tests, concerning meaning of HEAD. - -Tue Jun 24 10:14:18 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (recv_line): New function. - (connect_to_pserver): Call it, and rewrite accordingly. Also - accept new "E" and "error" responses. Change \n to \012. - * server.c (pserver_authenticate_connection): Adjust comment - accordingly, concerning sending I HATE YOU not "error". - -Sun, 22 Jun 1997 Jim Kingdon - - * main.c (main): Move setting of server_active inside #ifdef - SERVER_SUPPORT; otherwise the variable doesn't exist. - * main.c (main): Call return after exit to shut up warning. - -Fri Jun 20 22:56:34 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (connect_to_pserver): On "I HATE YOU", give - "authorization failed" fatal error regardless of verify_only. - * login.c (login): Don't print that "incorrect password" message; - it now is possible with an --allow-root failure as well as an - incorrect password. cvsclient.texi doesn't really specify what I - HATE YOU means in any detail, and it seems a little silly for - login to give different messages than the other commands. - * client.c, client.h (connect_to_pserver): Return type now void. - -Thu Jun 19 12:16:10 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (serve_root): Give error on duplicate Root request. - Call parse_config. - * parseinfo.c, cvs.h (parse_config): New function. - * cvs.h (CVSROOTADM_CONFIG): Added. - * main.c (main): Set server_active here... - * server.c (server): ...not here. That seems cleaner than - strcmp's between command_name and "server" in main.c. - * main.c (main): Call parse_config. - * main.c, cvs.h (free_Rcsbin): Make global. - * mkmodules.c (filelist): Add CVSROOTADM_CONFIG. - -Wed Jun 18 11:24:31 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * version.c: Change version number to 1.9.11. - - * Version 1.9.10. - -Tue Jun 17 22:48:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c (main): Add --allow-root=ROOT argument; call - root_allow_add for each time it is specified. Call - root_allow_free before exiting. - * root.c, cvs.h (root_allow_add, root_allow_free, root_allow_ok): - New function. - * server.c (pserver_authenticate_connection): If root_allow_ok - doesn't like the CVSROOT directory, don't allow access. - -Tue Jun 17 14:30:14 1997 Jim Kingdon (unknown@beezley) - - * client.c: Add "copyright" notice. If NO_EXT_METHOD, omit - start_rsh_method. - * client.c (update_entries): Cast argument to MD5Update from - char * to unsigned char *. - -Mon Jun 16 16:46:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * run.c (piped_child, filter_stream_through_program): - If USE_SETMODE_BINARY, then put the pipes into binary mode. - * find_names.c, ignore.c, lock.c, wrapper.c: Change fnmatch to - CVS_FNMATCH. - * client.c (start_server): If NO_EXT_METHOD, then give a fatal - error on any use of :ext:. - -Sun Jun 15 22:30:27 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (toplevel): Match U CVSROOT/* lines with DOTSTAR in - test toplevel-9. - -Thu Jun 12 10:27:51 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (toplevel): Remove Emptydir before starting. - - * sanity.sh: Change "rm -rf" to "rm -r" when deleting working - directories (except a few watches cases). Helps detect cases - where the testsuite has cd'd to somewhere other than where we - think it has. - (basic2): Remove "rm -r first-dir" between tests 49 and 50. The - directory was already deleted in test 45.5. - (rcs): Add "cd .." at end of tests. - (stamps): No longer cd to TESTDIR; shouldn't be necessary with - fix to "rcs" test. - -Wed Jun 11 22:28:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb): Also remove CVSROOT/Emptydir at end of - test. Otherwise it affects the toplevel-9 test for remote. - -Tue Jun 10 14:03:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (toplevel): Change "update" and "checkout" to "[a-z]*" - as these read "server" instead for "make remotecheck". Change - expect strings for toplevel-9 to accept the behavior of remote CVS - (see comments for more discussion). - - * sanity.sh: New tests stamps-9 through stamps-11 test timestamp - behavior on cvs update. - -Mon Jun 9 22:42:50 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh: Remove "#! /bin/zsh" line at end. I assume it was - added accidentally. - -Tue Jun 10 03:08:46 1997 Norbert Kiesel <nk@psycho.de> - - * sanity.sh: new tests "toplevel" for the new toplevel CVS - directory creation (including one test which shows an error in - this area). - -Sun Jun 8 20:52:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.c (getrcsrev): Before printing error, check whether it was - feof or ferror. - - * rcs.h, import.c (add_rcs_file): No longer static. New arguments - add_vbranch, add_vhead, and add_logfp replace access to static - variables vbranch, vhead, and logfp. - * mkmodules.c: Call it instead of RCS_CI. - * import.c (process_import_file): Adjust call to add_rcs_file. - -Tue Jun 3 10:18:33 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb): Match "." with "\." not ".". - -Tue Jun 3 13:02:37 1997 Norbert Kiesel <nk@cosa.de> - - * checkout.c (checkout): Removed restriction of not sending -k in - remote export (I think this was introduced while the -k handling - was still broken in remote mode). Give better error texts - regarding -c and -s options. Use error() instead of usage() for - reporting errors in all places. Reindented some lines. Free - xmalloc'd space of options. - -Thu May 29 16:32:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcscmds.c (RCS_checkin), mkmodules.c (init): Pass -w option to - "ci", specifying getcaller (). - * server.h, server.c (CVS_Username): Now extern. - * subr.c (getcaller): Return CVS_Username if it is set. - -Wed May 28 22:31:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (update_fileproc): If wrap_merge_is_copy and we would - like to do a merge, give a fatal error. See comment for why. - * sanity.sh (mwrap): New tests, tests for above fix. - -Tue May 27 21:59:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (stamps): cd to ${TESTDIR} before starting. - -Mon May 26 15:31:30 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (handle_mod_time): New function. - (responses): Add "Mod-time". - (stored_modtime_valid, stored_modtime): New variables. - (update_entries): If it is set, change the file's modtime. - * server.c, server.h (server_modtime): New function. - * vers_ts.c (Version_TS): Call it. - * patch.c (patch_fileproc): Add comment about why we don't. - * sanity.sh (stamps): Added, tests for above fix. - -Fri May 16 13:14:30 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * subr.c (free_names): Update documentation to reflect fact that - free_names is now called to free vectors allocated by expand_wild - as well as by line2argv. - - * main.c (main): Use "xstrdup (foo)" not "xstrdup(foo)" as - specified in HACKING. - -Fri May 16 15:10:37 1997 Norbert Kiesel <nk@cosa.de> - - * modules.c (do_module): initialize optind to 0. use local copies - of optarg's (because they might me freed within free_names). - -Thu May 15 11:50:15 1997 Norbert Kiesel <nk@cosa.de> - - * main.c (main): initialize optind to 0. use local copies of - optarg's (because they might me freed within read_cvsrc). - - * cvsrc.c (read_cvsrc): free old argv after constructing a new - one. This fixes a memory leak. - - * recurse.c (start_recursion): use free_names() instead of - reimplementing it - - * rcs.c (RCS_deltas): free branchversion (memory leak). - - * parseinfo.c (Parse_Info): free some vars (3 memory leaks). - - * logmsg.c (logfile_write): free str_list_format (memory leak). - - * watch.c (watch_addremove), (watchers), update.c (update), tag.c - (cvstag), status.c (status), rtag.c (rtag), remove.c (cvsremove), - release.c (release), patch.c (patch), log.c (cvslog), import.c - (import), history.c (history), edit.c (watch_onoff), (edit), - (unedit), (editors), diff.c (diff), commit.c (commit), checkout.c - (checkout), add.c (add): initialize optind to 0 - - * diff.c (diff_fileproc): cosmetic change (whitespace added). - - * checkout.c (checkout): move local variable definition into the - block where the variable is used. - - * client.c (update_entries): initialize some local variables to shut up - gcc -O -Wall. - - * buffer.c (buf_read_line): initialize a local variable to shut up - gcc -O -Wall. - - -Wed May 14 16:29:50 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * admin.c (admin): When sending options to server, don't try to - send av[ac]. It may contain one of the names that we'll send in - send_file_names (which caused tests like keyword-6 to work, - sort of accidentally), or it may contain NULL (which would tend to - cause a coredump). - * sanity.sh (basicb): New test basicb-21 tests for above fix. - -Mon May 12 16:22:00 1997 Larry Jones <larry.jones@sdrc.com> - - * add.c (add): Free message and repository in client code. - * checkout.c (checkout): Don't free repository unless allocated. - * client.c (start_rsh_server): Free command. - -Sun May 11 11:43:54 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c: Remove all references to USE_DIRECT_TCP; see - ../ChangeLog for rationale. - -Fri May 9 22:19:36 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c (main): Add comment explaining why we call exit. Pass 0 - not EXIT_SUCCESS, because lib/system.h has portability cruft for - EXIT_FAILURE but not EXIT_SUCCESS. - -Fri May 9 17:25:00 1997 Larry Jones <larry.jones@sdrc.com> - - Fix miscellaneous memory allocation problems: - * add.c (add): Free repository. - * client.c (notified_a_file): Free getline buffer. - * edit.c (notify_check): Free getline buffer. - * hash.c (dellist): Free header node when not caching. - * login.c (login): Don't continually free & allocate getline - buffer, use xstrdup instead of xmalloc/strcpy, free getline - buffer before returning. - * main.c (main): Call exit instead of returning so tools like - Purify won't consider permanently allocated memory as leaks. - * mkmodules.c (mkmodules): Free getline buffer. - * modules.c (cat_module): Call close_module. - * rcs.c (rcsvers_delproc): Free state. - * recurse.c (start_recursion): Free files_by_dir. - (unroll_files_proc): NULL out p->data after using it to set - filelist to avoid multiple frees. - * server.c (check_command_legal_p): Don't continually free & - allocate getline buffer, free getline buffer before returning. - (check_repository_password): Ditto, use xstrdup instead of - xmalloc/strcpy. - * wrapper.c (wrap_add_file): Free getline buffer. - -Thu May 8 14:21:00 1997 Larry Jones <larry.jones@sdrc.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * checkout.c (checkout_proc): Free finfo.rcs (memory leak). - -8 May 1997 Larry Jones <larry.jones@sdrc.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * hash.c: Add #ifdef's to disable caching. This makes it easier - to track down memory allocation problems. - -Thu May 8 11:40:39 1997 Larry Jones <larry.jones@sdrc.com> - - * sanity.sh: In setting "tests" use a number of statements rather - than one very long line. - -Thu May 8 11:40:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvsbug.sh: Remove $Id; we decided to get rid of these some time - ago. - -Thu May 8 11:34:02 1997 Larry Jones <larry.jones@sdrc.com> - - * cvsbug.sh: Put separate statements on separate lines, so it - works if awk is AT&T nawk. - -Tue May 6 16:56:00 1997 Larry Jones <larry.jones@sdrc.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvsrc.c (read_cvsrc): Fix various memory allocation problems: - rearrange code to avoid leaks, use xrealloc instead of xmalloc/ - copy/free, make sure there's room for the remaining args before - appending them. - -Tue May 6 14:20:00 1997 Larry Jones <larry.jones@sdrc.com> - - * edit.c (watch_onoff, edit, unedit, editors): Add -R like - other things with -l. - * watch.c (watch_addremove, watchers): Ditto. - -Mon May 5 18:10:37 1997 larry.jones@sdrc.com - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh: Change all /tmp/cvs-sanity to TESTDIR. If TESTDIR - environment variable is set, use it instead of /tmp/cvs-sanity. - * sanity.sh: Make TMPPWD the pwd equivalent of TESTDIR, not of /tmp. - -4 May 1997 Larry jones <larry.jones@sdrc.com> - and Jim Kingdon - - * checkout.c, diff.c, patch.c, rcs.c: Update usage messages. - * rcs.c (annotate): Add -R like other things with -l. - -Sat May 3 14:57:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basic1): Rewrite test (use dotest, unroll the loops - which IMHO makes the test a zillion times more understandable, and - only do the variant which tests for 4 files at a time--we test one - file at a time lots of places). - -2 May 1997 Ziv Gigus <ziv@rest.home.net> - and Jim Kingdon - - * client.c, client.h (client_process_import_file): New argument - all_files_binary means treat all files as binary. - * import.c (import_descend): Pass it if -kb is specified. - * client.c (client_process_import_file): In the - non-all_files_binary case, call wrap_rcsoption to determine - whether the file is binary. - -Thu May 1 13:44:51 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (binfiles2): New tests, for update -j and binary files. - -Wed Apr 30 11:18:36 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * recurse.c (start_recursion): Also free reposfile. - Don't look in repository if client_active (latter bug reported by Paul - Sanders <p.sanders@dial.pipex.com>). - -Mon Apr 28 22:36:39 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * diff.c (diff_file_nodiff): Remove SERVER_SUPPORT ifdefs. They - were not based on server_active, which doesn't really make any - sense (it meant that compiling --disable-server could affect the - behavior of the non-client/server CVS). This affected the output - in tests death2-diff-11 and death2-diff-12 in the testsuite. - * sanity.sh (newb-123j0): Also accept "Needs Checkout", for a - --disable-server CVS. - - * main.c (cmd_usage): Change "run diffs" to "show differences"; - the former is jargon. - * edit.c (edit_usage): Fix typo ("." -> ","). - * edit.c (editors_usage), watch.c (watchers_usage): Mention -l. - * checkout.c (export_usage): Say what -P does. - * history.c (history_usg): Add comment about message wording. - -Mon Apr 28 14:47:45 1997 Norbert Kiesel <nk@cosa.de> - - * checkin.c (Checkin): use filename without path when calling - wrapper (bug found by Michal Schmitz <ms@cosa.de>). - -Fri Apr 25 13:28:55 1997 Ian Lance Taylor <ian@cygnus.com> - - * client.c (update_entries): In UPDATE_ENTRIES_RCS_DIFF case, - write to a temporary file and then rename it. - -Thu Apr 24 11:35:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * subr.c, cvs.h (pathname_levels): New function, from a piece of - send_file_names. - * client.c (send_file_names): Call pathname_levels in place of the - code which was moved there. - * server.c, server.h (server_pathname_check): New function. - * recurse.c (start_recursion): Call it. - * sanity.sh (modules3): New test modules3-11b tests for above fix. - - * filesubr.c: Do not define L_tmpnam. It is in ANSI and SunOS4, - so I don't think there will be a problem with it being missing. - Defining it too small can cause memory corruption. - (cvs_temp_name): Do not use L_tmpnam in the mktemp code; this - could cause a buffer overflow if the -T global option was in use. - -Thu Apr 24 13:21:15 1997 Norbert Kiesel <nk@cosa.de> - - * filesubr.c (cvs_temp_name): Use tempnam if available, else - mktemp, else tmpnam. See the comment for rationale. - - * sanity.sh: use "tar cf - ." instead of "tar cf - *" for - directory copies. - -Wed Apr 23 23:41:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (serve_update_prog): If in readonly mode, give an error. - -Wed Apr 23 19:07:41 1997 Norbert Kiesel <nk@cosa.de> - - * subr.c (line2argv): Allocate at least 4 slots for argv. - - * checkout.c (checkout_proc): Add a comment which says why the - above change was necessary to avoid writing to unallocated memory. - -Wed Apr 23 11:20:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * entries.c (ParseTag): Always set *NONBRANCHP. - -21 Apr 1997 Jim Kingdon - - * client.c (update_entries), rcs.c (expand_keywords): Rewrite - test to avoid signed/unsigned warning. - -Mon Apr 21 09:02:22 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (patch_file): Add comment about whether auto-detecting - features of the DIFF program is a good idea. - -Mon Apr 21 00:03:34 1997 Ian Lance Taylor <ian@cygnus.com> - - Don't require the patch program: - * client.c (struct update_entries_data): Add - UPDATE_ENTRIES_RCS_DIFF to contents enum. - (update_entries): Handle UPDATE_ENTRIES_RCS_DIFF. - (handle_rcs_diff): New static function. - (responses): Add "Rcs-diff". - * server.c (server_updated): Handle SERVER_RCS_DIFF. - (server_use_rcs_diff): New function. - * server.h (enum server_updated_arg4): Add SERVER_RCS_DIFF. - (server_use_rcs_diff): Declare. - * update.c (rcs_diff_patches): New static variable. - (update): Set rcs_diff_patches. - (update_fileproc): If rcs_diff_patches, pass SERVER_RCS_DIFF - rather than SERVER_PATCHED to server_updated. - (patch_file): Correct initial comment to say diff rather than - rcsdiff. If rcs_diff_options, pass -n to diff rather than -c. - * rcs.c (rcs_change_text): New function. - * rcs.h (rcs_change_text): Declare. - -Mon Apr 21 00:08:59 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * diff.c (diff_fileproc): Add comment concerning updating the - client timestamp. - -Sun Apr 20 23:20:37 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * commit.c (commit): Add comment regarding SEND_FORCE rationale. - -Sat Apr 19 17:10:36 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (dirswitch): If directory ends in '/', complain. - -Fri Apr 18 18:09:57 1997 Ian Lance Taylor <ian@cygnus.com> - - * rcs.c (apply_rcs_changes): New static function, broken out of - RCS_deltas. - (RCS_deltas): Call it. - (linevector_add): Change return type to int. Return an indication - of an error for an invalid add, rather than calling error. - -Fri Apr 18 11:24:26 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * version.c: Change version number to 1.9.9. - - * version.c: Version 1.9.8. - - * commit.c (struct find_data): Add field force. - (find_fileproc, commit): Use it instead of force_ci to decide - whether to send files to server. - (commit): Set it if either -f or -r is specified. - * sanity.sh (basica): Add tests basica-8a0, basica-8a1, and - basica-8a2; tests for above fix. - -Wed Apr 16 11:50:59 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * zlib.c: Remove paragraph with Free Software Foundation address. - See 2 Jan 1997 entry in ../ChangeLog for rationale. - -Tue Apr 15 00:36:23 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (patch_file_write): Always assign to final_nl, so that - it ends up reflecting whether the data from the last call had a - newline, not whether the data from any of the calls ended in a - newline. Doesn't matter with the current RCS_checkout - implementation, but it will if RCS_checkout is changed to pass - less than the entire file. - - * rcs.c (RCS_cmp_file): Change NULL to RUN_TTY in passing sout to - RCS_checkout, for clarity. - - * import.c (update_rcs_file): Remove unused variable ierrno. - - * add.c, checkout.c, commit.c, diff.c, edit.c, import.c, - history.c, log.c, main.c, patch.c, release.c, remove.c, rtag.c, - status.c, tag.c, update.c, watch.c: Pass "+" to all calls to - getopt. This ensures that we maintain existing behavior even with - glibc2. - - * filesubr.c (fopen_case): Don't set *PATHP if we return an - error. Since the 9 Apr 1997 change, the behavior has been to - sometimes set it and sometimes not. - * rcs.c (RCS_parse): Adjust callers to not free it. Without this - change, they could call free() on an uninitialized variable. - - * checkout.c (checkout): Add comment about export -k. - - * root.c (check_root_consistent): Add comment about wording of - message. - -Mon Apr 14 11:51:49 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (call_in_directory): If rdirp reaches the end of - reposdirname, then just set it to NULL. If server does not create - directories one at a time, give a warning. - * sanity.sh (modules3): Enable tests modules3-8 through - modules3-11 for remote; tests for above fix. - - * client.c (call_in_directory): Don't set short_pathname to - pathname for a while; just use pathname itself (cleans up a relic - of the old "Repository" (not "Directory") code). Add comment - explaining short_pathname. - -Sun Apr 13 18:07:50 1997 Ian Lance Taylor <ian@cygnus.com> - - * rcs.c (RCS_checkout): Add pfn and callerdat parameters. Change - all callers. Move setting of expand after retrieval of file - data. - (struct cmp_file_data): Define. - (RCS_cmp_file): New function. - (cmp_file_buffer): New static function. - * rcs.h (RCSCHECKOUTPROC): Define type. - (RCS_checkout): Update declaration. - (RCS_cmp_file): Define. - * diff.c (diff_file_nodiff): Call RCS_cmp_file rather than - RCS_checkout and xcmp. - * import.c (update_rcs_file): Likewise. - * no_diff.c (No_Difference): Likewise. - * update.c (struct patch_file_data): Define. - (patch_file): Just return if noexec, or if binary file. Pass - patch_file_write to RCS_checkout. Don't check for newlines or - compute checksums here. Stat RCS file to set modes. - (patch_file_write): New static function. - - * update.c (patch_file): Checkout directly to file2, rather than - to finfo->file followed by rename. Remove check for whether - result of checkout is readable; that was for an old, obsolete, - form of death support. - -Sun Apr 13 13:16:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * checkout.c (build_one_dir): New function. - (struct dir_to_build): New structure. - (build_dirs_and_chir): Rewritten to accept a linked list of struct - dir_to_build rather than the silly string processing we had been - doing before. - (checkout_proc): Rewrite code that calls build_dirs_and_chdir - accordingly. - * sanity.sh: Enable tests modules3-10 and modules3-11 for local CVS; - tests for above fix. - - * rcs.h (RCS_CO): Removed; no longer used. - -Sun Apr 13 00:04:34 1997 Ian Lance Taylor <ian@cygnus.com> - - Expand RCS keywords internally; never call co: - * rcs.h (struct rcsversnode): Add state field. - * rcs.c (kflags): Move out of RCS_check_kflag, and make file - static. - (enum kflag): Define. - (RCS_reparsercsfile): Always save lock information. Save state in - new state field, rather than other field. - (struct rcs_keyword): Define. - (keywords): New static variable. - (enum keyword): Define. - (printable_date, escape_keyword_value): New static functions. - (expand_keywords): New static function. - (RCS_checkout): Call expand_keywords. Don't call - RCS_exec_checkout. - (RCS_deltas): Add log and loglen parameters. Change all callers. - * log.c (log_version_requested): Use new state field. - (log_version): Likewise. - * cvs.h (RCS_exec_checkout): Don't declare. - * rcscmds.c (RCS_exec_checkout): Remove. - -Sat Apr 12 17:32:59 1997 Ian Lance Taylor <ian@cygnus.com> - - * sanity.sh (modules3): Remove second-dir at end of tests. - (sticky): Correct removal of directories at end of tests. - - * sanity.sh (keyword): New tests for RCS keyword expansion. - -Sat Apr 12 16:47:13 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb): New tests basicb-1b, basicb-1c, basicb-9b, - basic-9c test current build_dirs_and_chdir behavior. - -Fri Apr 11 23:54:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (modules3): New tests modules3-7* test for ability to - supply a path in -d in modules. Similar to modules3-8 through - modules3-11 except because the nesting is different, these ones - work. - -Thu Apr 10 00:14:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (modules3): New tests modules3-12 through modules3-15 - test use of a module name which contains a slash. - - * sanity.sh (basicb): New tests basicb-14 to basicb-20 test use of - co -d with two or more arguments. - - * rcscmds.c: Refer to doc/RCSFILES in comment. - -Wed Apr 9 09:49:17 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb): New tests basicb-11 through basicb-13 test - ability to specify several directory levels in co -d (commented - out). - - * filesubr.c (fopen_case): If CVS_OPENDIR gives an - existence_error, return it to the caller instead of giving a fatal - error. - - * client.c (update_entries): Fix typo in call to error (1 -> errno). - -Tue Apr 8 23:02:22 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * error.h, error.c: Test for #ifdef __STDC__, not #if __STDC__. - This is consistent with other parts of CVS; it means that the - declaration for fperror will match the definition even if __STDC__ - is defined to 0 as the SunPro 4.0 compiler does. Reported by - Richard Smith <rjsmith@cisco.com>. - -2 Apr 1997 Jim Kingdon - - * entries.c (ParseTag): Add "break;" after "default:" to avoid - error from Visual C++. - -Wed Apr 2 12:06:44 1997 Vince Del Vecchio <vdelvecc@spd.analog.com> - and Jim Kingdon - - * client.c: In reporting errors from socket calls, use - SOCK_STRERROR and SOCK_ERRNO since strerror(errno) doesn't work - for Win32. - -Tue Apr 8 10:45:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (modules3): Add tests modules3-8 to modules3-11, to - test for ability to supply a path to -d in modules. Mostly - commented out as CVS is buggy in this area. - -Mon Apr 7 12:41:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add): Add comment about SEND_NO_CONTENTS. - -Sun Apr 6 21:46:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (update): Add comment about noexec and SEND_NO_CONTENTS. - -Sun Apr 6 17:34:08 1997 Robert Bihlmeyer <robbe@orcus.priv.at> - - * Pass +f not f to getopt_long to prevent options from being - permuted with glibc 2.0.1. - -Sun Mar 30 00:07:05 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvs.h (struct vers_ts): Adjust comment regarding ts_user. - * server.c (serve_is_modified): New function. Set entries to show - that the file is modified but we don't know the contents. - * server.c (requests): Add "Is-modified" request. - * vers_ts.c (time_stamp_server): If the timestamp in entdata is - "M" or "D", just copy that over into ts_user. - * vers_ts.c (Version_TS): If timestamp is "D", use the entries - line for the sole purpose of passing it to time_stamp_server. - * no_diff.c (No_Difference): If ts_user is "M", conclude the files - are different. - * client.h, client.c (send_files): Replace arguments build_dirs - and force with argument flags. Add flag SEND_NO_CONTENTS and add - to struct send_data. - (send_fileproc): If no_contents, then send Is-modified instead of - Modified. - * add.c, admin.c, client.c, commit.c, diff.c, edit.c, log.c, - rcs.c, remove.c, status.c, tag.c, update.c, watch.c: Change all - send_files callers. - -Fri Mar 28 22:32:25 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (requests): Change "Repository" to rq_optional. I'm - not sure whether I overlooked this when I removed support for - Repository, or whether I was thinking that servers would need to - support it anyway, for CVS 1.5 to 1.9 clients, but making it - optional doesn't prevent the server from supporting it and it - seems silly for the client to complain about absence of a request - that it never will use. - -Fri Mar 28 10:06:59 1997 Steven Miller <Miller@wingra.com> - - * entries.c (Subdirs_Known): Don't create Entries.Log if noexec. - -Thu Mar 27 18:14:12 1997 Ian Lance Taylor <ian@cygnus.com> - - * sanity.sh (death2): Remove commented out test death2-21. It - would now pass, but it duplicates the new test sticky-11. - -Thu Mar 27 10:21:19 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (dotest_internal): Write test output to logfile even - if test succeeds. This was the behavior prior to 30 Sep 1996. - See the comment for rationale. - -Tue Mar 25 13:26:52 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * cvs.h, entries.c (WriteTag): Add arguments nonbranch, - update_dir, and repository. Move the server_set_sticky call from - callers to here. - * cvs.h, create_adm.c (Create_Admin): New argument nonbranch. - * cvs.h, entries.c (ParseTag): Add argument nonbranchp. - * cvs.h (struct stickydirtag): Add field nonbranch. - * entries.c (Entries_Open): Set it. - * cvs.h (Vers_TS): Add field nonbranch. - * vers_ts.c (Version_TS): Copy it from struct stickydirtag. - * server.c, server.h (server_set_sticky): Add argument nonbranch. - * add.c, client.c, checkout.c, modules.c, update.c, create_adm.c, - commit.c: Update callers. - * add.c (add): If nonbranch, don't add the file on that "branch". - * commit.c (write_dirnonbranch): New variable. - (commit_fileproc, commit): Set it. - (commit_dirleaveproc): Pass it to WriteTag. - * update.c (rewrite_tag, nonbranch): New variables. - (update, update_dirent_proc, update_fileproc): Set them. - (update_filesdoneproc): If rewrite_tag, call WriteTag. - * sanity.sh (sticky): New tests, test for above fix. - - * version.c: Change version number to 1.9.7. - - * version.c: Version 1.9.6. - -Mon Mar 24 13:02:04 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * entries.c (ParseTag): Add comment about unrecognized characters - in CVS/Tag file. - - * classify.c (Classify_File): Add comment about how specifying a - tag (bogusly?) suppresses certain messages. - -Fri Mar 21 13:37:46 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * rcs.h (struct rcsnode): Add comment about case of PATH. - * rcs.c (RCS_parse): If ign_case, then try opening the file with - fopen_case. - * ignore.c (ign_case): Adjust comment. - * cvs.h, filesubr.c (cvs_casecmp, fopen_case): New functions. - -20 Mar 1997 Jim Kingdon - - * client.c (send_repository): When sending Directory request, - send any ISDIRSEP character as '/'. Fixes - "cvs log foo\bar\baz.c" on NT & friends. - - * client.c (send_file_names): Don't try to read Entries file if - CVSADM directory does not exist. Fixes fairly serious regression - (warning on all fresh checkouts) introduced by 1997-01-08 change. - -Tue Mar 18 13:03:33 1997 Jim Meyering <meyering@totoro.cyclic.com> - - * sanity.sh (RCSINIT): Define to be empty and export, to hide any - existing value that might cause spurious failures. - - * Makefile.in: (install): Depend on installdirs. - Remove `CYGNUS LOCAL' comment saying not to. - -Tue Mar 18 09:36:26 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * recurse.c (struct recursion_frame): Reindent. - (do_dir_proc): Print message if we try to recurse into a CVSADM - directory. - * sanity.sh (basicb): New test basicb-4a tests for above fix. - -Sun Mar 16 10:18:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (death2): Replace regexp matching temporary file name - with new variable ${tempname}. For most of the tests this is a - cosmetic change, but death2-diff-6 had been missing _ which caused - it to fail on Solaris (at least sometimes). - - * sanity.sh (modes): Don't use export -n; it doesn't seem - to be sufficiently portable. - - * version.c: Change version number to 1.9.5. - - * version.c: Version 1.9.4. - - * rcscmds.c (RCS_checkin): Preserve the mode of the rcsfile. - RCS_CI usually, but not always, does this for us. - * commit.c (fix_rcs_modes): Replace algorithm with a more - CVSUMASK-friendly one. - * sanity.sh (modes): Update tests modes-5, modes-7, modes-10, and - modes-15 so they test that CVSUMASK is honored. - -Sun Mar 16 10:18:28 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (modes): New tests modes-7a and modes-7b test behavior - if one manually changes the modes in the repository. - - * server.c (server): Revise code which checks for errors creating - temporary directory. This won't solve the intermittent - can't create temporary directory - Unknown error -1 - but it will mean (a) the right message based on errno gets - printed, instead of "unknown error -1", and (b) the message says - that it happened in chmod instead of mkdir_p. - -Sat Mar 15 16:47:12 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (modes): New tests. Note that (for now) these are - just testing how CVS already behaves; I want to record that before - I move on to changing CVS's behavior with modes of RCS files. - -13 Mar 1997 Jim Kingdon - - * subr.c (line2argv): Change argv_allocated from size_t to int. - -Wed Mar 12 22:16:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add_directory): If repository has an extraneous "." - directory at the end, strip it off. This fixes a bug which was - introduced when strip_path was nuked (this fix is much more - limited in scope than strip_path was; I _think_ that is a good - thing). - (add): Likewise, for client. - (combine_dir): New function, helps with above. - * sanity.sh (modules3): Reenable tests for this behavior. - (basica-0b, basicb-0e): Adjust test to reflect "foo/bar" instead - of "foo/./bar" in message. As with the rest of this, I believe - this is just restoring the behavior prior to the strip_path nuking - (I tried it with CVS 1.9). - -Sun Mar 9 10:06:29 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * root.c (parse_cvsroot), server.c (serve_root, serve_init): - If CVSroot_directory is not an absolute pathname, give a fatal error. - * sanity.sh (crerepos): New tests crerepos-6* test for above fixes. - -Sat Mar 8 22:06:17 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - This cleans up the last known code which can overflow its buffers - (except the Mac client). I've skimmed through much of CVS looking - for other such places; but I didn't read everything. If I missed - any please report it to bug-cvs. - * logmsg.c (logfile_write, title_proc): Realloc str_list as - needed; don't assume MAXLISTLEN is enough. - * cvs.h (MAXLISTLEN, MAXFILEPERDIR): Removed; no longer used. - * add.c, myndbm.c, parseinfo.c, update.c: Nuke MAXLINELEN limit. - * parseinfo.c, update.c, mkmodules.c: Check for errors reading file. - * cvs.h (MAXLINELEN): Removed; no longer used. - * logmsg (MAXHOSTNAMELEN): Removed; not used. - * main.c (cmd_synonyms): Allocate based on fullname, nick1, and - nick2, just in case someone makes those big enough so that 100 - bytes is not enough. - (Make_Date): Use MAXDATELEN rather than our own fixed size. - * mkmodules.c (mkmodules): Nuke arbitrary limit on line length. - * rcs.c (ALLOCINCR): Remove; not used. - (RCS_check_kflag): Add comment concerning karg size. - * run.c: Allocate run_prog to the needed size, rather than - allocating a fixed size buffer. - -Fri Mar 7 22:39:08 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * logmsg.c (logfile_write): Allocate prog to needed length rather - than assuming MAXPROGLEN is enough. - * cvs.h (MAXPROGLEN): Removed; no longer used. - * subr.c (MIN_INCR): Update comment to reflect MAXPROGLEN's demise. - - * subr.c (free_names): Fix comment: this function is not used to - free memory allocated by Find_Names (at least it hasn't for a long - time). - * subr.c, cvs.h (line2argv): Change calling convention so that we - allocate argv array rather than the caller. The previous one had - no way of checking whether we overflowed the passed-in buffer. - * subr.c (free_names): Free the argv array too. - * modules.c (do_module, cat_module): Update callers. - -Thu Mar 6 12:44:42 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * import.c: Allocate vhead and vbranch dynamically; removes - arbitrary limit. - * history.c: Likewise (since_rev, since_tag, backto, rec_types). - * ignore.c: Likewise (line). Also check for errors from getline - and add 'copyright' notice to top of file. - * wrapper.c (wrap_add_file): Likewise (line). Also check for - errors from various calls and add 'copyright' notice to top of file. - -Tue Mar 4 17:39:15 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (update_entries): Add comment about "move away <file>" - message. - -Mon Mar 3 21:51:40 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb): Clean up topfile,v at end of test. Fixes - failure in modules-155b. - -Sun Mar 2 18:11:09 1997 Dan Wilder <dan@gasboy.com> - and Jim Kingdon - - * admin.c (admin): Arrange to perform recursion if "cvs admin" - is passed only options. - -Sun Mar 2 18:11:09 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (basicb): New tests basicb-0* test for files at top - level. - - * error.c (error): Add newline to "out of memory" message. I think - that its omission probably could cause the message to be lost in - the bowels of server.c and never passed to the user. - - * client.c (start_rsh_server): Add comment about "remsh" vs. "rsh". - - * cvs.h: Move copyright notice to top of file. - -Sun Mar 2 13:44:36 1997 Ian Lance Taylor <ian@cygnus.com> - - * sanity.sh: Use -n when testing whether rsh works. - - * server.c (serve_root): Free path. - -Sun Mar 2 13:12:46 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - The following are things that I noticed in the process of trying - to track down: - can't create temporary directory - Unknown error -1 - FAIL: test 28 - from nightly testing. I'm not sure that either item explains that - message however. - * server.c (server): Allocate pending_error_text; - print_pending_error will try to free it so - pending_error_text = "foo" - won't work. - (mkdir_p): Don't assume that isdir will leave errno unmolested. - -Thu Feb 27 15:29:58 1997 Ian Lance Taylor <ian@cygnus.com> - - * remove.c (cvsremove): When forcing removal in client mode, use - start_recursion rather than calling CVS_UNLINK on each argument. - (remove_force_fileproc): New static function. - * sanity.sh (deep): Add tests deep-rm7 through deep-rm10 for above - patch. - - * sanity.sh (death): Enable death-76a0 and death-76a1 tests for - remote, since they now work. - -Wed Feb 26 16:13:26 1997 Ian Lance Taylor <ian@cygnus.com> - - * client.c (add_prune_candidate): Skip adding this directory if - it is the same as the first directory already on the list. - -Mon Feb 24 21:36:43 1997 Noel Cragg <noel@gargle.rain.org> - - * main.c (lookup_command_attribute): Add the "init" command to the - list of commands that don't use the current working directory. - -Sun Feb 23 09:54:49 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (devcom3): Clean up at end of test. - - * sanity.sh (basicb): Add commented out test basicb-8a0, for - whether CVS can print an error on bad numeric revision to diff. - Commented out until we get around to fixing CVS. - * diff.c (diff_file_nodiff): Add comment about this case. - - * fileattr.c (fileattr_read): If a filename is duplicated, - continue to ignore subsequent lines but free the node so that we - don't leak memory. - * sanity.sh (devcom3): New tests devcom3-8 and devcom3-9 test for - behavior on duplicated filenames. - - * fileattr.h: Add comment about unrecognized ENT-TYPE and order of - lines in fileattr file. - * fileattr.c (struct unrecog, unrecog_head): New variables, to - record unrecognized lines. - (fileattr_startdir): Assert that unrecog_head == NULL. - (fileattr_read): Record unrecognized lines in unrecog_head linked - list rather than ignoring them. - (fileattr_write): Also write out unrecognized lines, if any. - * sanity.sh (devcom3): New tests, test for above fix. - - * fileattr.h (fileattr_modify): Fix example in comment. - -Sat Feb 22 08:30:27 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh: Add variable username. - (basica rdiff multibranch log log2): Use it instead of our own - (inconsistent) ways of matching an author name. - - * filesubr.c, root.c, rtag.c, server.c, subr.c, update.c, - wrapper.c: Nuke PATH_MAX. - * cvs.h, wrapper.c (wrap_fromcvs_process_file): Now returns void - (return value had been unused). - * cvs.h: Adjust comment to reflect the fact that PATH_MAX is - gone, at least from src/*.c (except safe_location, as noted). - -22 Feb 1997 patch by Tom Hageman <tom@basil.icce.rug.nl> (4 Jun 1996) - updated and commented by Jim Kingdon <kingdon@harvey.cyclic.com> - - * update.c (checkout_file): Call unlink_file_dir on backup, not - unlink_file. - -Fri Feb 21 16:40:03 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in (DISTFILES): Remove NOTES. - - * NOTES: Removed. bcopy->memcpy is done. "static buffers" I - assume refers to what is covered by reentrancy text in HACKING. - Obstack idea moved to comment in hash.c (at nodecache). Checking - system calls for error returns largely done, and isn't a very - helpful suggestion unless you know where the bogus calls are - anyway. Sizing limits--we're in the progress of removing them - (assuming it meant things like PATH_MAX and earlier, already - nuked, limits). Removed various items about changes which were - done a long time ago (I realize that the ChangeLog's probably - aren't reliable that far back, but I'm not convinced anyone cares - anymore). CONFIRM_DIRECTORY_ADDS: I assume this is a - reference to the #if 0'd code in add_directory which asks for - confirmation--a better way of making it harder to accidentally add - directories would be to have to add and commit directories like - for files. I don't know what FORCE_MESSAGE_ON_ADD meant. - - * rcs.c (RCS_getrevtime): Fix documentation (in particular, the - size of the array that DATE must point to, but many other things - too). - * patch.c, recurse.c, release.c, remove.c, repos.c: Nuke PATH_MAX. - (patch_fileproc): Use MAXDATELEN not hardcoded 50. - -Sun Feb 16 12:00:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (client_process_import_file): New variable fullname; - pass it to send_modified. This finishes the job of untangling the - old short_pathname variable into update_dir vs. fullname. - - * client.c (client_process_import_file): Nuke first_time. If - toplevel_repos were ever NULL here, the code would dump core in - strncmp a few lines down. And client_import_setup ensures - toplevel_repos is not NULL. - -Sun Feb 16 08:16:48 1997 Ian Lance Taylor <ian@cygnus.com> - - * client.c (client_process_import_file): Rename short_pathname to - update_dir (to reflect its function) and make sure that it doesn't - point to uninitialized memory if repository and toplevel_repos - contain the same string. - -Sun Feb 16 08:16:48 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (start_rsh_server): Nuke comment about weirdnesses with - pre-1.5 versions of CVS and .bashrc/.cshrc. The remote protocol - is interoperable only back to 1.5, and people who need to know are - unlikely to see this comment anyway. - -Sun Dec 15 13:12:30 1996 Michael Douglass <mikedoug@texas.net> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * main.c (cmds): Added an entry for new logout command. - (cmd_usage): Added an entry for new logout command. - (lookup_command_attribute): Added 'logout' to list of commands - that set need_to_crate_root to 1. - * login.c, cvs.h (logout): New command for removing entries from - the .cvspass file. - (logout_usage): Usage information on the logout command. - -Wed Feb 12 11:19:42 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (struct send_data): Fix indentation. - -Wed Feb 12 08:48:04 1997 Greg A. Woods <woods@most.weird.com> - - * mkmodules.c (loginfo_contents): add missing comma in - initializer statement (caused syntax error on SunOS-4). - -Tue Feb 11 21:14:28 1997 Ian Lance Taylor <ian@cygnus.com> - - * commit.c (find_fileproc): If force_ci is set, set the status to - T_MODIFIED even if the file hasn't changed. - (commit): Pass force_ci to send_files as new force argument. - * client.c (struct send_data): Define. - (send_fileproc): The callerdat parameter now points to a send_data - struct. If force is set, always call send_modified. - (send_dirent_proc): The callerdat parameter now points to a - send_data struct. - (send_files): Add force parameter. Change all callers. Set up a - send_data struct and pass it to start_recursion as callerdat. - * client.h (send_files): Update declaration. - * sanity.sh (basica): Add a simple test for the above patch. - -Sun Feb 9 12:58:59 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * tag.c (cvstag), rtag.c (rtag): Pass -f to server if specified in - the client. I haven't tried to come up with a test case because - the fix seems obvious. - - * import.c (add_rcs_file): Change size of altdate1 and altdate2 to - MAXDATELEN. - * cvs.h (MAXDATELEN): Fix comments; describe what this is for. - - * diff.c (diff_usage): Document --ifdef and try to briefly say - what "rcsdiff-options" means. - - * update.c (update): If update had a nonzero status and we haven't - yet tried to fetch unpatchable files, go ahead and try it again. - The previous behavior was to quit, which meant that updates would - keep failing until you hacked around the problem. Patch and bug - report by Ian; comment, ChangeLog entry, and willingness to take - the flak if checking it is premature by Jim. - - * server.c (alloc_pending): New function. - * server.c: Call it. Fixes places where we had neglected to - check for NULL return from malloc. - - * sanity.sh (binwrap): Add test binwrap-0, tests for import.c fix - below. - -Sun, 9 Feb 1997 (submitted 19 Jul 1996) John Polstra <jdp@polstra.com> - - * import.c (import): Give error if the same tag is specified more - than once. The previous behavior was to write an RCS file which - had the same tag listed twice, once pointing to each revision, - which is not legal. - -Sun Feb 9 12:37:09 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * checkin.c (Checkin): Use cvs_output to print message (should - make out of order bugs no worse, as it merely substitues a - protocol_pipe vs. stderr_pipe race instead of a stdout_pipe - vs. stderr_pipe race). Add comment about stdout vs. stderr. - -Fri Feb 7 08:29:52 1997 Josef Nelissen <josef.nelissen@munich.ixos.de> - - * server.c (check_command_legal_p): Don't use ANSI-style definition. - -Thu Feb 6 10:55:37 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * patch.c (patch): Give a fatal error for -V option (see comment - for rationale). - - * diff.c (diff): Also send "options" to server. Pretty much the - patch submitted independently by josef.nelissen@munich.ixos.de and - Ronald Khoo <ronald@demon.net>. - -Wed Feb 5 18:57:14 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * modules.c (do_module): Fix typo in 30 Jan 97 PATH_MAX nuking - (free -> free_cwd). Testsuite test 151 gets credit for catching - this one. - -Mon Feb 3 16:14:54 1997 Ian Lance Taylor <ian@cygnus.com> - - * main.c (lookup_command_attribute): Don't use an ANSI prototype - when defining the function. - -Fri Jan 31 12:49:02 1997 Ian Lance Taylor <ian@cygnus.com> - - * modules.c (do_module): Actually goto found if is_found is set - (fixes thinko in PATH_MAX nuking of 30 Jan 97). - -Fri Jan 31 12:49:02 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh: Add modules3 and big to list of tests to run - by default; they were omitted by accident. - -Thu Jan 30 11:46:33 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * logmsg.c, main.c, mkmodules.c, modules.c, parseinfo.c, patch.c: - Nuke more PATH_MAX. - - * server.c (server_updated): After we send Created or - Update-existing for a file, mark it as unchanged, in case we - process it again. - * sanity.sh (modules3): New tests, test for above fix. - - * logmsg.c (do_verify): Error return from fopen is NULL, not -1. - Pass errno to error(). - - * login.c [_CRAY]: Don't declare getpass. - -Mon Jan 27 17:25:27 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * import.c (process_import_file): Fix freeing of rcs (Don't free - it before we are done using it, and don't free it twice). - - * modules.c (cat_module): Allocate line right before we use - it. The previous code was wrong because the length of the - s_h->rest changes between the time we allocate line and the time we - sprintf s_h->rest into it. - -Sun Jan 26 21:58:16 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * expand_path.c (expand_path): Revise to call expand_string as - needed. Nuke PATH_MAX. - * find_names.c (find_dirs): Likewise. - * import.c, lock.c: Nuke more PATH_MAX. - - * server.c (mkdir_p): Set retval to 0 at start of function. - Previously it had been uninitialized for some cases. Thanks are - due to nightly testing for catching this one. - -Sat Jan 25 21:34:19 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * subr.c, cvs.h (expand_string): New function. - * rcs.c (getrcskey, getrcsrev): Call it. This greatly reduces the - number of calls to realloc if there is a very large file in the - RCS file. Credit goes to Mike Heath <mike@pswtech.com> for - pointing out the problem and the basic solution (MIN_INCR, - MAX_INCR); I adapted it into the separate function expand_string. - * sanity.sh (big): New test helps insure this hasn't broken - anything obvious. - -Wed Jan 22 10:06:13 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * status.c (status_fileproc): Change message which is printed for - T_MODIFIED and ts_conflict set, so that it doesn't say "unresolved - confict". This message occurs whether the conflict is resolved or - not. - * sanity.sh (conflicts): Add tests conflicts-status-* to test - output of "cvs status" in the context of conflicts. Tests for - above fix. - - * rtag.c (rtag): Send -n if run_module_prog is NOT true. - -Thu Jan 16 00:06:00 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * version.c: Change version number to 1.9.3. - - * version.c: Version 1.9.2. - -Wed Jan 15 09:14:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * client.c (call_in_directory): Take code that creates CVSADM at - top level, move it before the CVS_CHDIR (dir_name) call, and do it - regardless of whether dir_name is ".". Pass "." not dir_name to - Create_Admin (when the code was written they were always the - same). Don't add reposdirname to the repository we pass to - Create_Admin (when the code was written, I think reposdirname - probably would always be "."). Don't create CVSADM if - reposdirname_absolute. - * sanity.sh (basicb): Enable tests basicb-1a and basicb-9a for - remote; tests for above fix. - (basic1): Do entire test within a "1" directory to deal with - creation of CVS directories at top level. Support --keep. - (conflicts): In test conflicts-136, only update first-dir. - (basica): Uncomment the part that tests "cvs co -l .". That tests - the existing functionality which I might have (but hopefully did not) - perturbed with the call_in_directory changes. - -Mon Jan 13 11:04:32 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server.c (check_command_legal_p): Do not call error (1, ...) - here; that will always cause a protocol violation by shutting down - the connection prematurely. Remove croak_on_illegal arg. - (do_cvs_command): Move call to check_command_legal_p until after - the call to print_pending_error. Print the error message ourself. - - * mkmodules.c (filelist): Add readers and writers. Add comment - about why passwd is not included. Add comment about meaning of - NULL contents field. - -Fri Jan 10 13:23:09 1997 Norbert Kiesel <nk@col.sw-ley.de> - - * release.c (release): Initialize delete_flag before reading it - (found by running purify) - - * logmsg.c (do_verify): Fix reading unallocated memory (found by - running purify) - -Thu Jan 9 16:32:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * checkout.c (build_dirs_and_chdir): Partially revert 3 Jan - change--move call to Subdir_Register back above the CVS_CHDIR call - (we need to register in the old, not the new, directory). Instead - of calling CVS_MKDIR and ignoring errors, call mkdir_if_needed; - this is an effort to catch errors there rather than catching them - in the CVS_CHDIR. This makes test 27-add-add in sanity.sh work - again. - - * find_names.c (Find_Directories): Remove code inside - #ifdef ATTIC_DIR_SUPPORT and replace it with a comment explaining - why we don't look in the attic. ATTIC_DIR_SUPPORT was never defined. - - * find_names.c (find_dirs): Add comment about tmp being unset. - - * commit.c (checkaddfile): Report errors with errno and specific - error messages. - - * rcs.c, commit.c, create_adm.c, entries.c, find_names.c, - ignore.c, history.c: Nuke PATH_MAX arbitrary limits. - -Wed Jan 8 23:07:41 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * add.c (add): Reindent a portion which needed it. - -1997-01-08 Jim Kingdon - - * client.c (send_file_names): When looking name up in Entries, - call Entries_Open and Entries_Close. This has two effects: - (1) we look at Entries.Log, and (2) we don't skip 'D' entries, - both of which are needed to make us get the right (command - line) name for a directory we are adding. - -Wed Jan 8 14:50:47 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in, cvs.h, hash.h, myndbm.h, rcs.h: Remove CVSid; we - decided to get rid of these some time ago. - -Tue Jan 7 12:56:10 1997 Karl Fogel <kfogel@ynu38.ynu.edu.cn> - - * root.c (check_root_consistent): new func, compares below new - global var with CVSroot_directory, assuming both set. - (set_local_cvsroot): use above new func for security check. - (parse_cvsroot): same. - But do all of above only #ifdef AUTH_SERVER_SUPPORT. - - * server.c: (Pserver_Repos): new global var, init to NULL. - (pserver_authenticate_connection): set above new global. - (check_repository_password): be a good scout and use - CVSROOTADM and CVSROOTADM_PASSWD, now that they are the standard. - Make sure all of above is in #ifdef AUTH_SERVER_SUPPORT. - (check_command_legal_p): wrap most of body in #ifdef - AUTH_SERVER_SUPPORT. - Everywhere: wrap all references to CVS_Username in #ifdef - AUTH_SERVER_SUPPORT. - - * cvs.h (Pserver_Repos): new var, used in consistency [security] - check. Defined only #ifdef AUTH_SERVER_SUPPORT. - (CVSROOTADM_PASSWD): new #define, trying to get with the program. - -Fri Jan 3 18:10:39 1997 Ian Lance Taylor <ian@cygnus.com> - - * checkout.c (build_dirs_and_chdir): Move call to Subdir_Register - until after we know that the directory exists. - -Thu Jan 2 13:30:56 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in, cvsbug.sh, edit.c, edit.h, error.c, error.h, - fileattr.c, fileattr.h, filesubr.c, run.c, update.h, watch.c, - watch.h: Remove "675" paragraph; see ../ChangeLog for rationale. - -Thu Jan 2 12:27:46 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * sanity.sh (info): New test info-cleanup-verifymsg gets rid of - verifymsg when we are done with it. - - * sanity.sh (basicb): Skip tests basicb-1a and basicb-9a for remote. - * sanity.sh (modules-155a4): It is OK if a CVS directory exists. - * sanity.sh (ignore): Do everything inside a "1" directory. The - change to create CVS directories at top-level causes messages such as - "? home" otherwise. In test 191, specify -I CVS so that new CVS - directory is ignored. - * sanity.sh (crerepos): Manually remove CVS directory which had not - existed before. - -Thu Jan 2 09:06:20 1997 Karl Fogel <kfogel@ynu38.ynu.edu.cn> - - * server.c: Changes for pserver read-only repository access: - (check_command_legal_p): new func. Right now, just checks if - repository modification is permitted, and that only if pserver is - active. - (do_cvs_command): take new parameter `cmd_name', a string. All - callers changed. Pass it on to new func check_command_legal_p() - before executing the command. - (CVS_Username): new global, init to NULL. Used by - check_command_legal_p(), set in check_password(). - (check_password): set above new global CVS_Username; reorganized a - bit to facilitate this. - (check_repository_password): give *host_user_ptr permanent - storage iff success. - - * main.c: Changes for pserver read-only repository access: - (lookup_command_attribute): new func. - (main): use new func lookup_command_attribute() to establish if - CVS_CMD_IGNORE_ADMROOT and CVS_CMD_USES_WORK_DIR. - - * cvs.h: Changes for pserver read-only repository access: - (CVSROOTADM_READERS, CVSROOTADM_WRITERS): new #defines. - Prototype lookup_command_attribute(). - (CVS_CMD_IGNORE_ADMROOT, CVS_CMD_USES_WORK_DIR, - CVS_CMD_MODIFIES_REPOSITORY): new #defines for - lookup_command_attribute() and its callers. - -Wed Jan 1 19:50:38 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * options.h.in: Reword comment for TMPDIR_DFLT to make it clear - that this isn't specific to the pserver server. - - * modules.c (do_module): Give an error message if one tries to - specify -a together with another option. - * sanity.sh (modules2): New tests modules2-a* test for above fix. - - * sanity.sh (devcom): Add tests devcom-a-nonexist and - devcom-t-nonexist for "cvs watchers" on nonexistent argument. - -1997-01-01 Fred Fish <fnf@ninemoons.com> - - * run.c (piped_child, filter_stream_through_program): Actually - install these HAVE_VFORK patches that got missed. - (There was a log entry for these changes for 29 Nov 1996 but it - seems I accidentally forgot to actually check them in -kingdon). - -Wed Jan 1 18:32:44 1997 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in: Add ChangeLog-96. - * ChangeLog-96: New file, contains former contents of ChangeLog. - * ChangeLog: Now just contains 1997 changes. - - -For older changes see ChangeLog-96. diff --git a/contrib/cvs/src/hardlink.c b/contrib/cvs/src/hardlink.c deleted file mode 100644 index 51bd2a60567b..000000000000 --- a/contrib/cvs/src/hardlink.c +++ /dev/null @@ -1,298 +0,0 @@ -/* This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. */ - -/* Collect and manage hardlink info associated with a particular file. */ - -#include "cvs.h" -#include "hardlink.h" - -/* The structure currently used to manage hardlink info is a list. - Therefore, most of the functions which manipulate hardlink data - are walklist procedures. This is not a very efficient implementation; - if someone decides to use a real hash table (for instance), then - much of this code can be rewritten to be a little less arcane. - - Each element of `hardlist' represents an inode. It is keyed on the - inode number, and points to a list of files. This is to make it - easy to find out what files are linked to a given file FOO: find - FOO's inode, look it up in hardlist, and retrieve the list of files - associated with that inode. - - Each file node, in turn, is represented by a `hardlink_info' struct, - which includes `status' and `links' fields. The `status' field should - be used by a procedure like commit_fileproc or update_fileproc to - record each file's status; that way, after all file links have been - recorded, CVS can check the linkage of files which are in doubt - (i.e. T_NEEDS_MERGE files). - - TODO: a diagram of an example hardlist would help here. */ - -/* TODO: change this to something with a marginal degree of - efficiency, like maybe a hash table. Yeah. */ - -List *hardlist; /* Record hardlink information for working files */ -char *working_dir; /* The top-level working directory, used for - constructing full pathnames. */ - -/* For check_link_proc: list all of the files named in an inode list. */ -static int -list_files_proc (node, vstrp) - Node *node; - void *vstrp; -{ - char **strp, *file; - int len; - - /* Get the file's basename. This is because -- VERY IMPORTANT -- - the `hardlinks' field is presently defined only to include links - within a directory. So the hardlinks field might be `foo' or - `mumble grump flink', but not `foo bar com/baz' or `wham ../bam - ../thank/you'. Someday it would be nice to extend this to - permit cross-directory links, but the issues involved are - hideous. */ - - file = strrchr (node->key, '/'); - if (file) - ++file; - else - file = node->key; - - /* Is it safe to cast vstrp to (char **) here, and then play with - the contents? I think so, since vstrp will have started out - a char ** to begin with, so we should not have alignment bugs. */ - strp = (char **) vstrp; - len = (*strp == NULL ? 0 : strlen (*strp)); - *strp = (char *) xrealloc (*strp, len + strlen (file) + 2); - if (*strp == NULL) - { - error (0, errno, "could not allocate memory"); - return 1; - } - if (sprintf (*strp + len, "%s ", file) < 0) - { - error (0, errno, "could not compile file list"); - return 1; - } - - return 0; -} - -/* Set the link field of each hardlink_info node to `data', which is a - list of linked files. */ -static int -set_hardlink_field_proc (node, data) - Node *node; - void *data; -{ - struct hardlink_info *hlinfo = (struct hardlink_info *) node->data; - hlinfo->links = xstrdup ((char *) data); - - return 0; -} - -/* For each file being checked in, compile a list of the files linked - to it, and cache the list in the file's hardlink_info field. */ -int -cache_hardlinks_proc (node, data) - Node *node; - void *data; -{ - List *inode_links; - char *p, *linked_files = NULL; - int err; - - inode_links = (List *) node->data; - - /* inode->data is a list of hardlink_info structures: all the - files linked to this inode. We compile a string of each file - named in this list, in alphabetical order, separated by spaces. - Then store this string in the `links' field of each - hardlink_info structure, so that RCS_checkin can easily add - it to the `hardlinks' field of a new delta node. */ - - sortlist (inode_links, fsortcmp); - err = walklist (inode_links, list_files_proc, &linked_files); - if (err) - return err; - - /* Trim trailing whitespace. */ - p = linked_files + strlen(linked_files) - 1; - while (p > linked_files && isspace (*p)) - *p-- = '\0'; - - err = walklist (inode_links, set_hardlink_field_proc, linked_files); - return err; -} - -/* Return a pointer to FILEPATH's node in the hardlist. This means - looking up its inode, retrieving the list of files linked to that - inode, and then looking up FILE in that list. If the file doesn't - seem to exist, return NULL. */ -Node * -lookup_file_by_inode (filepath) - const char *filepath; -{ - char *inodestr, *file; - struct stat sb; - Node *hp, *p; - - /* Get file's basename, so that we can stat it. */ - file = strrchr (filepath, '/'); - if (file) - ++file; - else - file = (char *) filepath; - - /* inodestr contains the hexadecimal representation of an - inode, so it requires two bytes of text to represent - each byte of the inode number. */ - inodestr = (char *) xmalloc (2*sizeof(ino_t)*sizeof(char) + 1); - if (stat (file, &sb) < 0) - { - if (errno == ENOENT) - { - /* The file doesn't exist; we may be doing an update on a - file that's been removed. A nonexistent file has no - link information, so return without changing hardlist. */ - free (inodestr); - return NULL; - } - error (1, errno, "cannot stat %s", file); - } - - sprintf (inodestr, "%lx", (unsigned long) sb.st_ino); - - /* Find out if this inode is already in the hardlist, adding - a new entry to the list if not. */ - hp = findnode (hardlist, inodestr); - if (hp == NULL) - { - hp = getnode (); - hp->type = UNKNOWN; - hp->key = inodestr; - hp->data = (char *) getlist(); - hp->delproc = dellist; - (void) addnode (hardlist, hp); - } - else - { - free (inodestr); - } - - p = findnode ((List *) hp->data, filepath); - if (p == NULL) - { - p = getnode(); - p->type = UNKNOWN; - p->key = xstrdup (filepath); - p->data = NULL; - (void) addnode ((List *) hp->data, p); - } - - return p; -} - -/* After a file has been checked out, add a node for it to the hardlist - (if necessary) and mark it as checked out. */ -void -update_hardlink_info (file) - const char *file; -{ - char *path; - Node *n; - struct hardlink_info *hlinfo; - - if (file[0] == '/') - { - path = xstrdup (file); - } - else - { - /* file is a relative pathname; assume it's from the current - working directory. */ - char *dir = xgetwd(); - path = xmalloc (sizeof(char) * (strlen(dir) + strlen(file) + 2)); - sprintf (path, "%s/%s", dir, file); - free (dir); - } - - n = lookup_file_by_inode (path); - if (n == NULL) - { - /* Something is *really* wrong if the file doesn't exist here; - update_hardlink_info should be called only when a file has - just been checked out to a working directory. */ - error (1, 0, "lost hardlink info for %s", file); - } - - if (n->data == NULL) - n->data = (char *) xmalloc (sizeof (struct hardlink_info)); - hlinfo = (struct hardlink_info *) n->data; - hlinfo->status = T_UPTODATE; - hlinfo->checked_out = 1; - hlinfo->links = NULL; -} - -/* Return a string listing all the files known to be linked to FILE in - the working directory. Used by special_file_mismatch, to determine - whether it is safe to merge two files. */ -char * -list_files_linked_to (file) - const char *file; -{ - char *inodestr, *filelist, *path; - struct stat sb; - Node *n; - int err; - - /* If hardlist is NULL, we have not been doing an operation that - would permit us to know anything about the file's hardlinks - (cvs update, cvs commit, etc). Return an empty string. */ - if (hardlist == NULL) - return xstrdup (""); - - /* Get the full pathname of file (assuming the working directory) */ - if (file[0] == '/') - path = xstrdup (file); - else - { - char *dir = xgetwd(); - path = (char *) xmalloc (sizeof(char) * - (strlen(dir) + strlen(file) + 2)); - sprintf (path, "%s/%s", dir, file); - free (dir); - } - - /* We do an extra lookup_file here just to make sure that there - is a node for `path' in the hardlist. If that were not so, - comparing the working directory linkage against the repository - linkage for a file would always fail. */ - (void) lookup_file_by_inode (path); - - if (stat (path, &sb) < 0) - error (1, errno, "cannot stat %s", file); - /* inodestr contains the hexadecimal representation of an - inode, so it requires two bytes of text to represent - each byte of the inode number. */ - inodestr = (char *) xmalloc (2*sizeof(ino_t)*sizeof(char) + 1); - sprintf (inodestr, "%lx", (unsigned long) sb.st_ino); - - /* Make sure the files linked to this inode are sorted. */ - n = findnode (hardlist, inodestr); - sortlist ((List *) n->data, fsortcmp); - - filelist = NULL; - err = walklist ((List *) n->data, list_files_proc, &filelist); - if (err) - error (1, 0, "cannot get list of hardlinks for %s", file); - - free (inodestr); - return filelist; -} diff --git a/contrib/cvs/src/hardlink.h b/contrib/cvs/src/hardlink.h deleted file mode 100644 index cce3f33a265e..000000000000 --- a/contrib/cvs/src/hardlink.h +++ /dev/null @@ -1,33 +0,0 @@ -/* This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. */ - -/* Data type definitions and declarations for hardlink management. */ - -/* This file should be #included in CVS source files after cvs.h - since it relies on types and macros defined there. */ - -/* The `checked_out' member of a hardlink_info struct is used only - when files are being checked out or updated. It is used only when - hardlinked files are being checked out. */ - -struct hardlink_info -{ - Ctype status; /* as returned from Classify_File() */ - int checked_out; /* has this file been checked out lately? */ - char *links; /* contents of `hardlinks' RCS field */ -}; - -extern List *hardlist; -extern char *working_dir; - -int cache_hardlinks_proc PROTO ((Node *, void *)); -Node *lookup_file_by_inode PROTO ((const char *)); -void update_hardlink_info PROTO ((const char *)); -char *list_files_linked_to PROTO ((const char *)); diff --git a/gnu/usr.bin/cvs/libdiff/Makefile b/gnu/usr.bin/cvs/libdiff/Makefile deleted file mode 100644 index 826446f3e30b..000000000000 --- a/gnu/usr.bin/cvs/libdiff/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# $Id: Makefile,v 1.14 1997/05/15 23:00:07 peter Exp $ - -.include "${.CURDIR}/../Makefile.inc" - -.PATH: ${CVSDIR}/diff - -LIB= diff - -NOPROFILE= yes -NOPIC= yes - -CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../lib -I${CVSDIR}/lib -DHAVE_CONFIG_H - -SRCS = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c context.c ed.c \ - normal.c ifdef.c util.c dir.c version.c diff.h side.c - -install: - @echo -n - -.include <bsd.lib.mk> diff --git a/lib/libc/sys/__error.c b/lib/libc/sys/__error.c deleted file mode 100644 index 9b0c25f2fae3..000000000000 --- a/lib/libc/sys/__error.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 1997 John Birrell <jb@cimlogic.com.au>. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by John Birrell. - * 4. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include <sys/cdefs.h> - -extern int errno; - -/* - * Declare a weak reference in case the application is not linked - * with libpthread. - */ -#pragma weak __error=__error_unthreaded - -int * __error_unthreaded() -{ - return(&errno); -} diff --git a/release/floppies/bin/Makefile b/release/floppies/bin/Makefile deleted file mode 100644 index 15f5ebff4c19..000000000000 --- a/release/floppies/bin/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# $Id: Makefile,v 1.1 1997/07/16 12:24:18 julian Exp $ -# -SUBDIR= write_mfs_in_kernel dumpnlist - -.include <bsd.subdir.mk> - - diff --git a/release/floppies/bin/doFS.sh b/release/floppies/bin/doFS.sh deleted file mode 100644 index f0c2f2b189a3..000000000000 --- a/release/floppies/bin/doFS.sh +++ /dev/null @@ -1,71 +0,0 @@ -: -#set -ex - -VNDEVICE=vn0 -export BLOCKSIZE=512 - -BOOTBLKDIR=$1 ; shift -MNT=$1 ; shift -FSSIZE=$1 ; shift -FSPROTO=$1 ; shift -FSINODE=$1 ; shift -FSLABEL=$1 ; shift - -deadlock=20 - -while true -do - rm -f fs-image - - if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then - ( cd /dev && sh MAKEDEV ${VNDEVICE} ) - fi - - umount /dev/${VNDEVICE} 2>/dev/null || true - - umount ${MNT} 2>/dev/null || true - - vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true - - dd of=fs-image if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null - # this suppresses the `invalid primary partition table: no magic' - awk 'BEGIN {printf "%c%c", 85, 170}' |\ - dd of=fs-image obs=1 seek=510 conv=notrunc 2>/dev/null - - vnconfig -s labels -c /dev/r${VNDEVICE} fs-image - - disklabel -Brw \ - -b ${BOOTBLKDIR}/boot1 \ - -s ${BOOTBLKDIR}/boot2 \ - /dev/r${VNDEVICE} minimum - - TPC=1 - CPD=1 - SPT=$(( 2 * $FSSIZE / 2)) - newfs -u ${SPT} -t ${TPC} -s $(( ${FSSIZE} * 2 )) -i ${FSINODE} -m 0 -o space /dev/r${VNDEVICE}c - - mount /dev/${VNDEVICE}c ${MNT} - - ( set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT} ) - - df -ki /mnt - - set `df -ki /mnt | tail -1` - - umount ${MNT} - - fsck -p /dev/r${VNDEVICE}c < /dev/null - - vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true - - if [ $FSLABEL != "minimum" ] ; then - echo ${FSSIZE} > fs-image.size - break - fi - - echo ">>> Filesystem is ${FSSIZE} K, $4 left" - echo ">>> ${FSINODE} bytes/inode, $7 left" - echo ">>> `expr ${FSSIZE} \* 1024 / ${FSINODE}`" - echo ${FSSIZE} > fs-image.size - break; -done diff --git a/release/floppies/bin/dumpnlist/Makefile b/release/floppies/bin/dumpnlist/Makefile deleted file mode 100644 index 1149cadbbeb6..000000000000 --- a/release/floppies/bin/dumpnlist/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $Id: Makefile,v 1.1 1997/07/16 12:24:19 julian Exp $ -# -PROG=dumpnlist -NOMAN=yes - -.include <bsd.prog.mk> - - diff --git a/release/floppies/bin/dumpnlist/dumpnlist.c b/release/floppies/bin/dumpnlist/dumpnlist.c deleted file mode 100644 index 31f25c15879b..000000000000 --- a/release/floppies/bin/dumpnlist/dumpnlist.c +++ /dev/null @@ -1,44 +0,0 @@ -#include <sys/types.h> -#include <sys/fcntl.h> -#include <unistd.h> -#include <stdlib.h> -#include <nlist.h> -#include <stdio.h> - -struct nlist nl[] = { - {"_isa_devtab_bio"}, - {"_isa_devtab_tty"}, - {"_isa_devtab_net"}, - {"_isa_devtab_null"}, - {"_isa_biotab_wdc"}, - {"_isa_biotab_fdc"}, - {"_eisadriver_set"}, - {"_eisa_dev_list"}, - {"_pcidevice_set"}, - {"_device_list"}, - {"_scbusses"}, - {"_scsi_cinit"}, - {"_scsi_dinit"}, - {"_scsi_tinit"}, - {""}, -}; - -int -main(int ac, char **av) -{ - int i; - - i = nlist(av[1], nl); - if (i == -1) { - fprintf(stderr, "nlist returns error for %s\n", av[1]); - perror("nlist"); - return 1; - } - printf("%d\n", sizeof(nl) / sizeof(struct nlist)); - for (i = 0; nl[i].n_name; i++) { - printf("%s\n", nl[i].n_name); - printf("%d %d %d %ld\n", - nl[i].n_type, nl[i].n_other, nl[i].n_desc, nl[i].n_value); - } - return 0; -} diff --git a/release/floppies/bin/write_mfs_in_kernel/Makefile b/release/floppies/bin/write_mfs_in_kernel/Makefile deleted file mode 100644 index cd65a8e75249..000000000000 --- a/release/floppies/bin/write_mfs_in_kernel/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $Id: Makefile,v 1.1 1997/07/16 12:24:20 julian Exp $ -# -PROG=write_mfs_in_kernel -NOMAN=yes - -.include <bsd.prog.mk> - - diff --git a/release/floppies/bin/write_mfs_in_kernel/write_mfs_in_kernel.c b/release/floppies/bin/write_mfs_in_kernel/write_mfs_in_kernel.c deleted file mode 100644 index b624ed6387d4..000000000000 --- a/release/floppies/bin/write_mfs_in_kernel/write_mfs_in_kernel.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * $Id: write_mfs_in_kernel.c,v 1.1 1997/07/16 12:24:21 julian Exp $ - * - * This program patches a filesystem into a kernel made with MFS_ROOT - * option. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/types.h> -#include <sys/param.h> -#include <sys/stat.h> -#include <ufs/ffs/fs.h> - -main(int argc, char **argv) -{ - unsigned char *buf_kernel, *buf_fs, *p,*q; - int fd_kernel, fd_fs; - struct stat st_kernel, st_fs; - u_long l; - - if (argc < 3) { - fprintf(stderr,"Usage:\n\t%s kernel fs\n"); - exit(2); - } - fd_kernel = open(argv[1],O_RDWR); - if (fd_kernel < 0) { perror(argv[1]); exit(2); } - fstat(fd_kernel,&st_kernel); - fd_fs = open(argv[2],O_RDONLY); - if (fd_fs < 0) { perror(argv[2]); exit(2); } - fstat(fd_fs,&st_fs); - buf_kernel = malloc(st_kernel.st_size); - if (!buf_kernel) { perror("malloc"); exit(2); } - buf_fs = malloc(st_fs.st_size); - if (!buf_fs) { perror("malloc"); exit(2); } - if (st_kernel.st_size != read(fd_kernel,buf_kernel,st_kernel.st_size)) - { perror(argv[1]); exit(2); } - if (st_fs.st_size != read(fd_fs,buf_fs,st_fs.st_size)) - { perror(argv[2]); exit(2); } - for(l=0,p=buf_kernel; l < st_kernel.st_size - st_fs.st_size ; l++,p++ ) - if(*p == 'M' && !strcmp(p,"MFS Filesystem goes here")) - goto found; - fprintf(stderr,"MFS filesystem signature not found in %s\n",argv[1]); - exit(1); - found: - for(l=0,q= p + SBOFF; l < st_fs.st_size - SBOFF ; l++,q++ ) - if (*q) - goto fail; - memcpy(p+SBOFF,buf_fs+SBOFF,st_fs.st_size-SBOFF); - lseek(fd_kernel,0L,SEEK_SET); - if (st_kernel.st_size != write(fd_kernel,buf_kernel,st_kernel.st_size)) - { perror(argv[1]); exit(2); } - exit(0); - fail: - l += SBOFF; - fprintf(stderr,"Obstruction in kernel after %ld bytes (%ld Kbyte)\n", - l, l/1024); - fprintf(stderr,"Filesystem is %ld bytes (%ld Kbyte)\n", - (u_long)st_fs.st_size, (u_long)st_fs.st_size/1024); - exit(1); -} diff --git a/release/floppies/mk/crunch_fs.mk b/release/floppies/mk/crunch_fs.mk deleted file mode 100644 index c6d51d19bf8e..000000000000 --- a/release/floppies/mk/crunch_fs.mk +++ /dev/null @@ -1,108 +0,0 @@ -### -# $Id: crunch_fs.mk,v 1.1 1997/07/16 12:24:29 julian Exp $ -# -# This is included to make a floppy that includes a crunch file -# -# Variables that control this mk include file. -# TOP specifies where the top of the FreeBSD source tree is.. (*) -# FS_DIRS directories to make on the fs (*) -# STANDLINKS added symlinks to /stand on the fs -# VERBATIM a directory that contains tree to be copied to the fs -# FSSIZE defaults to 1440 -# FSLABEL defaults to fd1440 -# FSINODE defaults to 4000 -# FS_DEVICES devices to make on the fs (using MAKEDEV) (default = all) -# ZIP decides if the installed cruch will also be gzip'd(def=true) -# (*) = Mandatory -### - -# If we weren't told, default to nothing -.if ! defined( TOP ) -# define TOP! -xxx -.endif - -# mountpoint for filesystems. -MNT= /mnt - -# other floppy parameters. -FSSIZE?= 1440 -FSLABEL?= fd1440 -FSINODE?= 2000 -FS_DEVICES?= all -ZIP?=true - -# Things which will get you into trouble if you change them -TREE= tree -LABELDIR= ${OBJTOP}/sys/i386/boot/biosboot - -clean: - rm -rf tree fs-image fs-image.size step[0-9] - -.include <bsd.prog.mk> - - -# -# --==## Create a filesystem image ##==-- -# - -fs_image: ${TREE} step2 step3 step4 fs-image - -${TREE}: ${.CURDIR}/Makefile - rm -rf ${TREE} - mkdir -p ${TREE} - cd ${TREE} && mkdir ${FS_DIRS} - cd ${TREE} ; for i in ${STANDLINKS} ; \ - do \ - ln -s /stand $${i} ; \ - done - -step2: ${.CURDIR}/${CRUNCHDIRS} ${.CURDIR}/Makefile -.if defined(CRUNCHDIRS) - @cd ${.CURDIR} && $(MAKE) installCRUNCH DIR=${TREE}/stand ZIP=${ZIP} -.endif - touch step2 - -step3: step2 -.if defined (FS_DEVICES) - ( cd tree/dev && \ - cp ${TOP}/etc/etc.i386/MAKEDEV . && sh MAKEDEV ${FS_DEVICES} ) -.endif - touch step3 - -step4: step3 -.if defined(VERBATIM) - A=`pwd`;cd ${.CURDIR}/${VERBATIM}; \ - find . \! \( -name CVS -and -prune \) -print |cpio -pdmuv $$A/tree -.endif - true || cp ${TOP}/etc/spwd.db tree/etc - touch step4 - -fs-image: step4 - sh -e ${SCRIPTDIR}/doFS.sh ${LABELDIR} ${MNT} ${FSSIZE} tree \ - ${FSINODE} ${FSLABEL} - cp fs-image.size ${.CURDIR} - - -.if defined(CRUNCHDIRS) -installCRUNCH: -.if !defined(DIR) - @echo "DIR undefined in installCRUNCH" && exit 1 -.endif -.if !defined(ZIP) - @echo "ZIP undefined in installCRUNCH" && exit 1 -.endif -.for CRUNCHDIR in ${CRUNCHDIRS} - if ${ZIP} ; then \ - gzip -9 < ${CRUNCHDIR}/crunch > ${DIR}/.crunch ; \ - else \ - ln -f ${CRUNCHDIR}/crunch ${DIR}/.crunch ; \ - fi - chmod 555 ${DIR}/.crunch - for i in `crunchgen -l ${.CURDIR}/${CRUNCHDIR}/crunch.conf` ; do \ - ln -f ${DIR}/.crunch ${DIR}/$$i ; \ - done - rm -f ${DIR}/.crunch -.endfor -.endif - diff --git a/release/floppies/mk/makecrunch.mk b/release/floppies/mk/makecrunch.mk deleted file mode 100644 index 8f2d3e70afe1..000000000000 --- a/release/floppies/mk/makecrunch.mk +++ /dev/null @@ -1,25 +0,0 @@ - - -SYSINSTALL= ${OBJTOP}/release/sysinstall/sysinstall - -NOCRYPT?= yes - -all: crunch - -crunch: - -crunchgen ${.CURDIR}/crunch.conf - ${MAKE} -f crunch.mk all NOCRYP=${NOCRYPT} \ - "CFLAGS=${CFLAGS} -DCRUNCHED_BINARY" - -clean: - rm -f *.o *.stub *.lo *_stub.c *.mk \ - crunch.cache \ - crunch.mk \ - crunch.c \ - crunch \ - .tmp_* - -install: - @echo " No idea what to do to install yet" - -.include <bsd.prog.mk> diff --git a/sbin/i386/mount_msdos/koi2dos b/sbin/i386/mount_msdos/koi2dos deleted file mode 100644 index 0db136b49ac4..000000000000 --- a/sbin/i386/mount_msdos/koi2dos +++ /dev/null @@ -1,50 +0,0 @@ -0x2500 0x2502 0x250c 0x2510 0x2514 0x2518 0x251c 0x2524 -0x252c 0x2534 0x253c 0x2580 0x2584 0x2588 0x258c 0x2590 -0x2591 0x2592 0x2593 0x2320 0x25a0 0x2219 0x221a 0x2248 -0x2264 0x2265 0x00a0 0x2321 0x00b0 0x00b2 0x00b7 0x00f7 -0x2550 0x2551 0x2552 0x0451 0x2553 0x2554 0x2555 0x2556 -0x2557 0x2558 0x2559 0x255a 0x255b 0x255c 0x255d 0x255e -0x255f 0x2560 0x2561 0x0401 0x2562 0x2563 0x2564 0x2565 -0x2566 0x2567 0x2568 0x2569 0x256a 0x256b 0x256c 0x00a9 -0x044e 0x0430 0x0431 0x0446 0x0434 0x0435 0x0444 0x0433 -0x0445 0x0438 0x0439 0x043a 0x043b 0x043c 0x043d 0x043e -0x043f 0x044f 0x0440 0x0441 0x0442 0x0443 0x0436 0x0432 -0x044c 0x044b 0x0437 0x0448 0x044d 0x0449 0x0447 0x044a -0x042e 0x0410 0x0411 0x0426 0x0414 0x0415 0x0424 0x0413 -0x0425 0x0418 0x0419 0x041a 0x041b 0x041c 0x041d 0x041e -0x041f 0x042f 0x0420 0x0421 0x0422 0x0423 0x0416 0x0412 -0x042c 0x042b 0x0417 0x0428 0x042d 0x0429 0x0427 0x042a - -0xe1 0xe2 0xf7 0xe7 0xe4 0xe5 0xf6 0xfa -0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0 -0xf2 0xf3 0xf4 0xf5 0xe6 0xe8 0xe3 0xfe -0xfb 0xfd 0xff 0xf9 0xf8 0xfc 0xe0 0xf1 -0xc1 0xc2 0xd7 0xc7 0xc4 0xc5 0xd6 0xda -0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf 0xd0 -0x90 0x91 0x92 0x81 0x87 0xb2 0xb4 0xa7 -0xa6 0xb5 0xa1 0xa8 0xae 0xad 0xac 0x83 -0x84 0x89 0x88 0x86 0x80 0x8a 0xaf 0xb0 -0xab 0xa5 0xbb 0xb8 0xb1 0xa0 0xbe 0xb9 -0xba 0xb6 0xb7 0xaa 0xa9 0xa2 0xa4 0xbd -0xbc 0x85 0x82 0x8d 0x8c 0x8e 0x8f 0x8b -0xd2 0xd3 0xd4 0xd5 0xc6 0xc8 0xc3 0xde -0xdb 0xdd 0xdf 0xd9 0xd8 0xdc 0xc0 0xd1 -0xb3 0xa3 229 197 73 105 245 213 -0x9c 0x95 0x9e 0x96 78 210 0x94 0x9a - -0xc4 0xb3 0xda 0xbf 0xc0 0xd9 0xc3 0xb4 -0xc2 0xc1 0xc5 0xdf 0xdc 0xdb 0xdd 0xde -0xb0 0xb1 0xb2 179 0xfe 0xf9 0xfb 61 - 60 62 0xff 179 0xf8 50 0xfa 58 -0xcd 0xba 0xd5 0xf1 0xd6 0xc9 0xb8 0xb7 -0xbb 0xd4 0xd3 0xc8 0xbe 0xbd 0xbc 0xc6 -0xc7 0xcc 0xb5 0xf0 0xb6 0xb9 0xd1 0xd2 -0xcb 0xcf 0xd0 0xca 0xd8 0xd7 0xce 99 -0xee 0xa0 0xa1 0xe6 0xa4 0xa5 0xe4 0xa3 -0xe5 0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae -0xaf 0xef 0xe0 0xe1 0xe2 0xe3 0xa6 0xa2 -0xec 0xeb 0xa7 0xe8 0xed 0xe9 0xe7 0xea -0x9e 0x80 0x81 0x96 0x84 0x85 0x94 0x83 -0x95 0x88 0x89 0x8a 0x8b 0x8c 0x8d 0x8e -0x8f 0x9f 0x90 0x91 0x92 0x93 0x86 0x82 -0x9c 0x9b 0x87 0x98 0x9d 0x99 0x97 0x9a diff --git a/sys/i386/eisa/dpt_eisa.c b/sys/i386/eisa/dpt_eisa.c deleted file mode 100644 index e933ad6f1407..000000000000 --- a/sys/i386/eisa/dpt_eisa.c +++ /dev/null @@ -1,500 +0,0 @@ -/** - * Copyright (c) 1997 by Matthew N. Dodd <winter@jurai.net> - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* Credits: Based on and part of the DPT driver for FreeBSD written and - * maintained by Simon Shapiro <shimon@simon-shapiro.org> - */ - -/* - * $Id$ - */ - -#include "opt_dpt.h" - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/malloc.h> -#include <sys/buf.h> -#include <sys/proc.h> -#include <sys/kernel.h> - -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#include <i386/eisa/eisaconf.h> - -#include <sys/dpt.h> -#include <i386/eisa/dpt_eisa.h> - -#include <machine/clock.h> - -#include <vm/vm.h> -#include <vm/vm_param.h> -#include <vm/pmap.h> - -/* Function Prototypes */ - -int dpt_eisa_probe(void); -int dpt_eisa_attach(struct eisa_device*); -int dpt_eisa_shutdown(int); - -static const char *dpt_eisa_match(eisa_id_t); - -static struct eisa_driver dpt_eisa_driver = -{ - "dpt", - dpt_eisa_probe, - dpt_eisa_attach, - dpt_eisa_shutdown, - &dpt_unit -}; - -DATA_SET (eisadriver_set, dpt_eisa_driver); - -int -dpt_eisa_probe(void) -{ - static int already_announced = 0; - u_int32_t io_base; - u_int32_t irq; - struct eisa_device *e_dev = NULL; - dpt_conf_t *config; - dpt_softc_t *dpt; - int count = 0; - - if ( !already_announced ) { - printf("DPT: EISA SCSI HBA Driver, version %d.%d.%d\n", - DPT_RELEASE, DPT_VERSION, DPT_PATCH); - ++already_announced; - } - - if ((dpt = (dpt_softc_t *) malloc(sizeof(dpt_softc_t), - M_DEVBUF, M_NOWAIT)) == NULL) { - printf("dpt_eisa_probe() : Failed to allocate %d bytes for a DPT softc\n", sizeof(dpt_softc_t)); - return -1; - } - - bzero(dpt, sizeof(dpt_softc_t)); - - TAILQ_INIT(&dpt->free_ccbs); - TAILQ_INIT(&dpt->waiting_ccbs); - TAILQ_INIT(&dpt->submitted_ccbs); - TAILQ_INIT(&dpt->completed_ccbs); - - dpt->queue_status = DPT_QUEUES_NONE_ACTIVE; - dpt->commands_processed = 0; - dpt->handle_interrupts = 0; - dpt->v_membase = NULL; - dpt->p_membase = NULL; - - dpt->unit = -1; - - while ((e_dev = eisa_match_dev(e_dev, dpt_eisa_match))) { - io_base = (e_dev->ioconf.slot * EISA_SLOT_SIZE) - + DPT_EISA_SLOT_OFFSET; - - eisa_add_iospace(e_dev, io_base, - DPT_EISA_IOSIZE, RESVADDR_NONE); - - dpt->io_base = io_base; - - if ((config = dpt_get_conf(dpt, 0xc1, 7, - sizeof(dpt_conf_t), 1)) == NULL) { -#ifdef DPT_DEBUG_ERROR - printf("eisa0:%d dpt_eisa_probe() : Failed to get board configuration.\n", - e_dev->ioconf.slot); -#endif - continue; - } - - irq = config->IRQ; - - eisa_add_intr(e_dev, irq); - eisa_registerdev(e_dev, &dpt_eisa_driver); - - count++; - - } - - free(dpt, M_DEVBUF); - return count; -} - -int -dpt_eisa_attach(e_dev) - struct eisa_device *e_dev; -{ - int result; - int ndx; - - dpt_conf_t *config; - dpt_softc_t *dpt; - - int unit = e_dev->unit; - int irq; - resvaddr_t *io_space; - - if (TAILQ_FIRST(&e_dev->ioconf.irqs) == NULL) { -#ifdef DPT_DEBUG_ERROR - printf("dpt%d: Can't retrieve irq from EISA config struct.\n", - unit); -#endif - return -1; - } - - irq = TAILQ_FIRST(&e_dev->ioconf.irqs)->irq_no; - io_space = e_dev->ioconf.ioaddrs.lh_first; - - if (!io_space) { -#ifdef DPT_DEBUG_ERROR - printf("dpt%d: No I/O space?!\n", unit); -#endif - return -1; - } - - if ( dpt_controllers_present >= DPT_MAX_ADAPTERS ){ - printf("dpt%d: More than %d Adapters found! Adapter rejected\n", - unit, DPT_MAX_ADAPTERS); - return -1; - } - - if ((dpt = (dpt_softc_t *) malloc(sizeof(dpt_softc_t), - M_DEVBUF, M_NOWAIT)) == NULL) { - printf("dpt%d: Failed to allocate %d bytes for a DPT softc\n", - unit, sizeof(dpt_softc_t)); - return -1; - } - - /* - * Initialize the queues. See dpt.h for details. We do this here, - * as we may get hit with interrupts at any moment and we want to - * have a minimal structure in place to handle them. We also want to - * register interrupts correctly. To do so, we need a valid dpt - * structure. To have that, we need this minimal setup here. - */ - - bzero(dpt, sizeof(dpt_softc_t)); - - TAILQ_INIT(&dpt->free_ccbs); - TAILQ_INIT(&dpt->waiting_ccbs); - TAILQ_INIT(&dpt->submitted_ccbs); - TAILQ_INIT(&dpt->completed_ccbs); - - if (TAILQ_EMPTY(&dpt_softc_list)) { - TAILQ_INIT(&dpt_softc_list); - } - - TAILQ_INSERT_TAIL(&dpt_softc_list, dpt, links); - dpt->queue_status = DPT_QUEUES_NONE_ACTIVE; - dpt->commands_processed = 0; - -#ifdef DPT_MEASURE_PERFORMANCE - /* Zero out all command counters */ - bzero((void *)&dpt->performance, sizeof(dpt_perf_t)); -#endif /* DPT_MEASURE_PERFORMANCE */ - - dpt->handle_interrupts = 0; /* - * Do not set to 1 until all - * initialization is done - */ - dpt->v_membase = NULL; - dpt->p_membase = NULL; - - dpt->unit = unit; - dpt->io_base = (e_dev->ioconf.slot * EISA_SLOT_SIZE) - + DPT_EISA_SLOT_OFFSET; - - eisa_reg_start(e_dev); - - if (eisa_reg_iospace(e_dev, io_space)) { -#ifdef DPT_DEBUG_ERROR - printf("dpt%d: eisa_reg_iospace() failed.\n", unit); -#endif - free(dpt, M_DEVBUF); - return -1; - } - - /* reset the card? */ - - /* If the DPT is mapped as an IDE controller, let it be IDE controller */ - if (dpt->io_base == ISA_PRIMARY_WD_ADDRESS) { -#ifdef DPT_DEBUG_WARN - printf("dpt%d: Mapped as an IDE controller. " - "Disabling SCSI setup\n", unit); -#endif - free(dpt, M_DEVBUF); - return -1; - } else { - if ((config = dpt_get_conf(dpt, 0xc1, 7, - sizeof(dpt_conf_t), 1)) == NULL) { -#ifdef DPT_DEBUG_ERROR - printf("dpt%d: Failed to get board configuration (%x)\n", - unit, BaseRegister(dpt)); -#endif - free(dpt, M_DEVBUF); - return -1; - } - } - - if(eisa_reg_intr(e_dev, irq, dpt_intr, (void *)dpt, &cam_imask, - /* shared == */ config->IRQ_TR)) { -#ifdef DPT_DEBUG_ERROR - printf("dpt%d: eisa_reg_intr() failed.\n", unit); -#endif - free(dpt, M_DEVBUF); - return -1; - } - eisa_reg_end(e_dev); - - /* Enable our interrupt handler. */ - if (eisa_enable_intr(e_dev, irq)) { -#ifdef DPT_DEBUG_ERROR - printf("dpt%d: eisa_enable_intr() failed.\n", unit); -#endif - free(dpt, M_DEVBUF); - eisa_release_intr(e_dev, irq, dpt_intr); - return -1; - } - - dpt->max_id = config->MAX_ID; - dpt->max_lun = config->MAX_LUN; - dpt->irq = config->IRQ; - dpt->channels = config->MAX_CHAN; - dpt->dma_channel = (8 - config->DMA_channel) & 7; - -#ifdef DPT_DEBUG_SETUP - printf("dpt%d: max_id = %d, max_chan = %d, max_lun = %d\n", - dpt->unit, dpt->max_id, dpt->channels, dpt->max_lun); -#endif - - if (result = dpt_setup(dpt, config)) { - free(config, M_TEMP); - free(dpt, M_DEVBUF); - printf("dpt%d: dpt_setup failed (%d). Driver Disabled :-(\n", - dpt->unit, result); - } else { - /* clean up the informational data, and display */ - char clean_vendor[9]; - char clean_model[17]; - char clean_firmware[5]; - char clean_protocol[5]; - char clean_other[7]; - - int ndx; - - strncpy(clean_other, dpt->board_data.otherData, 8); - clean_other[6] = '\0'; - for (ndx = 5; ndx >= 0; ndx--) { - if (clean_other[ndx] == ' ') { - clean_other[ndx] = '\0'; - } else { - break; - } - } - - strncpy(dpt->board_data.otherData, clean_other, 6); - - strncpy(clean_vendor, dpt->board_data.vendor, 8); - clean_vendor[8] = '\0'; - - for (ndx = 7; ndx >= 0; ndx--) { - if (clean_vendor[ndx] == ' ') { - clean_vendor[ndx] = '\0'; - } else { - break; - } - } - - strncpy(dpt->board_data.vendor, clean_vendor, 8); - - strncpy(clean_model, dpt->board_data.modelNum, 16); - clean_model[16] = '\0'; - - for (ndx = 15; ndx >= 0; ndx--) { - if (clean_model[ndx] == ' ') { - clean_model[ndx] = '\0'; - } else { - break; - } - } - - strncpy(dpt->board_data.modelNum, clean_model, 16); - - strncpy(clean_firmware, dpt->board_data.firmware, 4); - clean_firmware[4] = '\0'; - - for (ndx = 3; ndx >= 0; ndx--) { - if (clean_firmware[ndx] == ' ') - clean_firmware[ndx] = '\0'; - else - break; - } - - strncpy(dpt->board_data.firmware, clean_firmware, 4); - - strncpy(clean_protocol, dpt->board_data.protocol, 4); - clean_protocol[4] = '\0'; - - for (ndx = 3; ndx >= 0; ndx--) { - if (clean_protocol[ndx] == ' ') - clean_protocol[ndx] = '\0'; - else - break; - } - - strncpy(dpt->board_data.protocol, clean_protocol, 4); - - dpt_detect_cache(dpt); - - printf("dpt%d: %s type %x, model %s firmware %s, Protocol %s \n" - " on port %x with %dMB %s cache. LED = %s\n", - dpt->unit, clean_vendor, dpt->board_data.deviceType, - clean_model, clean_firmware, clean_protocol, dpt->io_base, - dpt->cache_size, - (dpt->cache_type == DPT_NO_CACHE) - ? "Disabled" - : (dpt->cache_type == DPT_CACHE_WRITETHROUGH) - ? "Write-Through" - : "Write-Back", - i2bin(dpt_blinking_led(dpt), 8)); - - printf("dpt%d: Enabled Options:\n", dpt->unit); - -#ifdef DPT_VERIFY_HINTR - printf(" Verify Lost Transactions\n"); -#endif -#ifdef DPT_RESTRICTED_FREELIST - printf(" Restrict the Freelist Size\n"); -#endif -#ifdef DPT_TRACK_CCB_STATES - printf(" Precisely Track State Transitions\n"); -#endif -#ifdef DPT_MEASURE_PERFORMANCE - printf(" Collect Metrics\n"); -#endif -#ifdef DPT_FREELIST_IS_STACK - printf(" Optimize CPU Cache\n"); -#endif -#ifdef DPT_HANDLE_TIMEOUTS - printf(" Handle Timeouts\n"); -#endif -#ifdef DPT_ALLOW_MEMIO - printf(" Allow I/O to be Memeory Mapped\n"); -#endif -#ifdef DPT_HINTR_CHECK_SOFTC - printf(" Validate SoftC at Interrupt\n"); -#endif - - /* register shutdown handlers */ - result = at_shutdown((bootlist_fn)dpt_shutdown, (void *)dpt, - SHUTDOWN_POST_SYNC); - switch ( result ) { - case 0: -#ifdef DPT_DEBUG_SHUTDOWN - printf("dpt%d: Shutdown handler registered\n", dpt->unit); -#endif - break; - default: -#ifdef DPT_DEBUG_WARN - printf("dpt%d: Failed to register shutdown handler (%d)\n", - dpt->unit, result); -#endif - break; - } - - dpt_attach(dpt); - } - - ++dpt_controllers_present; - - return 0; -} - -int -dpt_eisa_shutdown(foo) - int foo; -{ -#ifdef DPT_DEBUG_WARN - printf("dpt_pci_shutdown(%x)\n", foo); -#endif - return (0); -} - -static const char * -dpt_eisa_match(type) - eisa_id_t type; -{ - switch (type) { - case DPT_EISA_DPT2402 : - return ("DPT PM2012A/9X"); - break; - case DPT_EISA_DPTA401 : - return ("DPT PM2012B/9X"); - break; - case DPT_EISA_DPTA402 : - return ("DPT PM2012B2/9X"); - break; - case DPT_EISA_DPTA410 : - return ("DPT PM2x22A/9X"); - break; - case DPT_EISA_DPTA411 : - return ("DPT Spectre"); - break; - case DPT_EISA_DPTA412 : - return ("DPT PM2021A/9X"); - break; - case DPT_EISA_DPTA420 : - return ("DPT Smart Cache IV (PM2042)"); - break; - case DPT_EISA_DPTA501 : - return ("DPT PM2012B1/9X"); - break; - case DPT_EISA_DPTA502 : - return ("DPT PM2012Bx/9X"); - break; - case DPT_EISA_DPTA701 : - return ("DPT PM2011B1/9X"); - break; - case DPT_EISA_DPTBC01 : - return ("DPT PM3011/7X ESDI"); - break; - case DPT_EISA_NEC8200 : - return ("NEC EATA SCSI"); - break; - case DPT_EISA_ATT2408 : - return ("ATT EATA SCSI"); - break; - default: - break; - } - - return (NULL); -} - diff --git a/sys/i386/eisa/dpt_eisa.h b/sys/i386/eisa/dpt_eisa.h deleted file mode 100644 index 3cd9c015ddb8..000000000000 --- a/sys/i386/eisa/dpt_eisa.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Copyright (c) 1997 by Matthew N. Dodd <winter@jurai.net> - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* Credits: Based on and part of the DPT driver for FreeBSD written and - * maintained by Simon Shapiro <shimon@simon-shapiro.org> - */ - -/* - * $Id: dpt_eisa.h,v 1.1 1998/03/10 21:31:06 ShimonR Exp ShimonR $ - */ - -#define DPT_EISA_SLOT_OFFSET 0xc88 /* 8 */ -#define DPT_EISA_IOSIZE sizeof(eata_reg_t) - -#define ISA_PRIMARY_WD_ADDRESS 0x1f8 - -#define DPT_EISA_DPT2402 0x12142402 -#define DPT_EISA_DPTA401 0x1214A401 -#define DPT_EISA_DPTA402 0x1214A402 -#define DPT_EISA_DPTA410 0x1214A410 -#define DPT_EISA_DPTA411 0x1214A411 -#define DPT_EISA_DPTA412 0x1214A412 -#define DPT_EISA_DPTA420 0x1214A420 -#define DPT_EISA_DPTA501 0x1214A501 -#define DPT_EISA_DPTA502 0x1214A502 -#define DPT_EISA_DPTA701 0x1214A701 -#define DPT_EISA_DPTBC01 0x1214BC01 -#define DPT_EISA_NEC8200 0x12148200 -#define DPT_EISA_ATT2408 0x12142408 - diff --git a/sys/i386/include/bus_memio.h b/sys/i386/include/bus_memio.h deleted file mode 100644 index ee58d5a24ef2..000000000000 --- a/sys/i386/include/bus_memio.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 1997 Justin Gibbs. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id$ - */ - -#ifndef _I386_BUS_MEMIO_H_ -#define _I386_BUS_MEMIO_H_ -#endif /* _I386_BUS_MEMIO_H_ */ diff --git a/sys/i386/include/bus_pio.h b/sys/i386/include/bus_pio.h deleted file mode 100644 index 4eb051e18190..000000000000 --- a/sys/i386/include/bus_pio.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 1997 Justin Gibbs. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id$ - */ - -#ifndef _I386_BUS_PIO_H_ -#define _I386_BUS_PIO_H_ -#endif /* _I386_BUS_PIO_H_ */ diff --git a/sys/net/zlib.h b/sys/net/zlib.h deleted file mode 100644 index 13fe524f91a4..000000000000 --- a/sys/net/zlib.h +++ /dev/null @@ -1,1013 +0,0 @@ -/* $Id: zlib.h,v 1.3 1997/08/19 14:10:50 peter Exp $ */ - -/* - * This file is derived from zlib.h and zconf.h from the zlib-1.0.4 - * distribution by Jean-loup Gailly and Mark Adler, with some additions - * by Paul Mackerras to aid in implementing Deflate compression and - * decompression for PPP packets. - */ - -/* - * ==FILEVERSION 971127== - * - * This marker is used by the Linux installation script to determine - * whether an up-to-date version of this file is already installed. - */ - - -/* +++ zlib.h */ -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.0.4, Jul 24th, 1996. - - Copyright (C) 1995-1996 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - gzip@prep.ai.mit.edu madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ - -#ifndef _ZLIB_H -#define _ZLIB_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* +++ zconf.h */ -/* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-1996 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* From: zconf.h,v 1.20 1996/07/02 15:09:28 me Exp $ */ - -#ifndef _ZCONF_H -#define _ZCONF_H - -/* - * If you *really* need a unique prefix for all types and library functions, - * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. - */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ -# define deflate z_deflate -# define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd -# define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset -# define deflateParams z_deflateParams -# define inflateInit2_ z_inflateInit2_ -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateReset z_inflateReset -# define compress z_compress -# define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table - -# define Byte z_Byte -# define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf -# define uIntf z_uIntf -# define uLongf z_uLongf -# define voidpf z_voidpf -# define voidp z_voidp -#endif - -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) -# define WIN32 -#endif -#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386) -# ifndef __32BIT__ -# define __32BIT__ -# endif -#endif -#if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS -#endif - -/* - * Compile with -DMAXSEG_64K if the alloc function cannot allocate more - * than 64k bytes at a time (needed on systems with 16-bit int). - */ -#if defined(MSDOS) && !defined(__32BIT__) -# define MAXSEG_64K -#endif -#ifdef MSDOS -# define UNALIGNED_OK -#endif - -#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC) -# define STDC -#endif -#if (defined(__STDC__) || defined(__cplusplus)) && !defined(STDC) -# define STDC -#endif - -#ifndef STDC -# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ -# define const -# endif -#endif - -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__) -# define NO_DUMMY_DECL -#endif - -/* Maximum value for memLevel in deflateInit2 */ -#ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif -#endif - -/* Maximum value for windowBits in deflateInit2 and inflateInit2 */ -#ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ -#endif - -/* The memory requirements for deflate are (in bytes): - 1 << (windowBits+2) + 1 << (memLevel+9) - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) - plus a few kilobytes for small objects. For example, if you want to reduce - the default memory requirements from 256K to 128K, compile with - make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" - Of course this will generally degrade compression (there's no free lunch). - - The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes - for small objects. -*/ - - /* Type declarations */ - -#ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif -#endif - -/* The following definitions for FAR are needed only for MSDOS mixed - * model programming (small or medium model with some far allocations). - * This was tested only with MSC; for other MSDOS compilers you may have - * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, - * just define FAR to be empty. - */ -#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR __far -# else -# define FAR far -# endif -#endif -#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) -# ifndef __32BIT__ -# define SMALL_MEDIUM -# define FAR __far -# endif -#endif -#ifndef FAR -# define FAR -#endif - -typedef unsigned char Byte; /* 8 bits */ -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ - -#if defined(__BORLANDC__) && defined(SMALL_MEDIUM) - /* Borland C/C++ ignores FAR inside typedef */ -# define Bytef Byte FAR -#else - typedef Byte FAR Bytef; -#endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; -typedef uLong FAR uLongf; - -#ifdef STDC - typedef void FAR *voidpf; - typedef void *voidp; -#else - typedef Byte FAR *voidpf; - typedef Byte *voidp; -#endif - - -/* Compile with -DZLIB_DLL for Windows DLL support */ -#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL) -# include <windows.h> -# define EXPORT WINAPI -#else -# define EXPORT -#endif - -#endif /* _ZCONF_H */ -/* --- zconf.h */ - -#define ZLIB_VERSION "1.0.4P" - -/* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms may be added later and will have the same - stream interface. - - For compression the application must provide the output buffer and - may optionally provide the input buffer for optimization. For decompression, - the application must provide the input buffer and may optionally provide - the output buffer for optimization. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - - The library does not install any signal handler. It is recommended to - add at least a handler for SIGSEGV when decompressing; the library checks - the consistency of the input data whenever possible but may go nuts - for some forms of corrupted input. -*/ - -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); - -struct internal_state; - -typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ - - Bytef *next_out; /* next output byte should be put there */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ - - char *msg; /* last error message, NULL if no error */ - struct internal_state FAR *state; /* not visible by applications */ - - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ - - int data_type; /* best guess about the data type: ascii or binary */ - uLong adler; /* adler32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ -} z_stream; - -typedef z_stream FAR *z_streamp; - -/* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the - opaque value. - - zalloc must return Z_NULL if there is not enough memory for the object. - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). -*/ - - /* constants */ - -#define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 -#define Z_PACKET_FLUSH 2 -#define Z_SYNC_FLUSH 3 -#define Z_FULL_FLUSH 4 -#define Z_FINISH 5 -/* Allowed flush values; see deflate() below for details */ - -#define Z_OK 0 -#define Z_STREAM_END 1 -#define Z_NEED_DICT 2 -#define Z_ERRNO (-1) -#define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) -#define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -#define Z_NO_COMPRESSION 0 -#define Z_BEST_SPEED 1 -#define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) -/* compression levels */ - -#define Z_FILTERED 1 -#define Z_HUFFMAN_ONLY 2 -#define Z_DEFAULT_STRATEGY 0 -/* compression strategy; see deflateInit2() below for details */ - -#define Z_BINARY 0 -#define Z_ASCII 1 -#define Z_UNKNOWN 2 -/* Possible values of the data_type field */ - -#define Z_DEFLATED 8 -/* The deflate compression method (the only one supported in this version) */ - -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ - -#define zlib_version zlibVersion() -/* for compatibility with versions < 1.0.2 */ - - /* basic functions */ - -extern const char * EXPORT zlibVersion OF((void)); -/* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. - */ - -/* -extern int EXPORT deflateInit OF((z_streamp strm, int level)); - - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. - - The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). - - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, - Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). -*/ - - -extern int EXPORT deflate OF((z_streamp strm, int flush)); -/* - Performs one or both of the following actions: - - - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in and avail_in are updated and - processing will resume at this point for the next call of deflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. - - If the parameter flush is set to Z_PARTIAL_FLUSH, the current compression - block is terminated and flushed to the output buffer so that the - decompressor can get all input data available so far. For method 9, a future - variant on method 8, the current block will be flushed but not terminated. - Z_SYNC_FLUSH has the same effect as partial flush except that the compressed - output is byte aligned (the compressor can clear its internal bit buffer) - and the current block is always terminated; this can be useful if the - compressor has to be restarted from scratch after an interruption (in which - case the internal state of the compressor may be lost). - If flush is set to Z_FULL_FLUSH, the compression block is terminated, a - special marker is output and the compression dictionary is discarded; this - is useful to allow the decompressor to synchronize if one compressed block - has been damaged (see inflateSync below). Flushing degrades compression and - so should be used only when necessary. Using Z_FULL_FLUSH too often can - seriously degrade the compression. If deflate returns with avail_out == 0, - this function must be called again with the same value of the flush - parameter and more output space (updated avail_out), until the flush is - complete (deflate returns with non-zero avail_out). - - If the parameter flush is set to Z_PACKET_FLUSH, the compression - block is terminated, and a zero-length stored block is output, - omitting the length bytes (the effect of this is that the 3-bit type - code 000 for a stored block is output, and the output is then - byte-aligned). This is designed for use at the end of a PPP packet. - - If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - 0.1% larger than avail_in plus 12 bytes. If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() may update data_type if it can make a good guess about - the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - - deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible. -*/ - - -extern int EXPORT deflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the - stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be - deallocated). -*/ - - -/* -extern int EXPORT inflateInit OF((z_streamp strm)); - - Initializes the internal stream state for decompression. The fields - zalloc, zfree and opaque must be initialized before by the caller. If - zalloc and zfree are set to Z_NULL, inflateInit updates them to use default - allocation functions. - - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_VERSION_ERROR if the zlib library version is incompatible - with the version assumed by the caller. msg is set to null if there is no - error message. inflateInit does not perform any decompression: this will be - done by inflate(). -*/ - -#if defined(__FreeBSD__) && (defined(KERNEL) || defined(_KERNEL)) -#define inflate inflate_ppp /* FreeBSD already has an inflate :-( */ -#endif - -extern int EXPORT inflate OF((z_streamp strm, int flush)); -/* - Performs one or both of the following actions: - - - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - If the parameter flush is set to Z_PARTIAL_FLUSH or Z_PACKET_FLUSH, - inflate flushes as much output as possible to the output buffer. The - flushing behavior of inflate is not specified for values of the flush - parameter other than Z_PARTIAL_FLUSH, Z_PACKET_FLUSH or Z_FINISH, but the - current implementation actually flushes as much output as possible - anyway. For Z_PACKET_FLUSH, inflate checks that once all the input data - has been consumed, it is expecting to see the length field of a stored - block; if not, it returns Z_DATA_ERROR. - - inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster routine - may be used for the single inflate() call. - - inflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if the end of the - compressed data has been reached and all uncompressed output has been - produced, Z_NEED_DICT if a preset dictionary is needed at this point (see - inflateSetDictionary below), Z_DATA_ERROR if the input data was corrupted, - Z_STREAM_ERROR if the stream structure was inconsistent (for example if - next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in - the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, the - application may then call inflateSync to look for a good compression block. - In the Z_NEED_DICT case, strm->adler is set to the Adler32 value of the - dictionary chosen by the compressor. -*/ - - -extern int EXPORT inflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). -*/ - - /* Advanced functions */ - -/* - The following functions are needed only in some special applications. -*/ - -/* -extern int EXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); - - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. - - The method parameter is the compression method. It must be Z_DEFLATED in - this version of the library. (Method 9 will allow a 64K history buffer and - partial block flushes.) - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library (the value 16 will be allowed for method 9). Larger - values of this parameter result in better compression at the expense of - memory usage. The default value is 15 if deflateInit is used instead. - - The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. - - The strategy parameter is used to tune the compression algorithm. Use the - value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match). Filtered data consists mostly of small values with a - somewhat random distribution. In this case, the compression algorithm is - tuned to compress them better. The effect of Z_FILTERED is to force more - Huffman coding and less string matching; it is somewhat intermediate - between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects - the compression ratio but not the correctness of the compressed output even - if it is not set appropriately. - - If next_in is not null, the library will use this buffer to hold also - some history information; the buffer must either hold the entire input - data, or have at least 1<<(windowBits+1) bytes and be writable. If next_in - is null, the library will allocate its own history buffer (and leave next_in - null). next_out need not be provided here but must be provided by the - application for the next call of deflate(). - - If the history buffer is provided by the application, next_in must - must never be changed by the application since the compressor maintains - information inside this buffer from call to call; the application - must provide more input only by increasing avail_in. next_in is always - reset by the library in this case. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was - not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as - an invalid method). msg is set to null if there is no error message. - deflateInit2 does not perform any compression: this will be done by - deflate(). -*/ - -extern int EXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the compression dictionary (history buffer) from the given - byte sequence without producing any compressed output. This function must - be called immediately after deflateInit or deflateInit2, before any call - of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and - can be predicted with good accuracy; the data can then be compressed better - than with the default empty dictionary. In this version of the library, - only the last 32K bytes of the dictionary are used. - Upon return of this function, strm->adler is set to the Adler32 value - of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The Adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.) - - deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state - is inconsistent (for example if deflate has already been called for this - stream). deflateSetDictionary does not perform any compression: this will - be done by deflate(). -*/ - -extern int EXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. If - the source stream is using an application-supplied history buffer, a new - buffer is allocated for the destination stream. The compressed output - buffer is always application-supplied. It's the responsibility of the - application to provide the correct values of next_out and avail_out for the - next call of deflate. - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. - - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -extern int EXPORT deflateReset OF((z_streamp strm)); -/* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. - - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy)); -/* - Dynamically update the compression level and compression strategy. - This can be used to switch between compression and straight copy of - the input data, or to switch to a different kind of input data requiring - a different strategy. If the compression level is changed, the input - available so far is compressed with the old level (and may be flushed); - the new level will take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. -*/ - -extern int EXPORT deflateOutputPending OF((z_streamp strm)); -/* - Returns the number of bytes of output which are immediately - available from the compressor (i.e. without any further input - or flush). -*/ - -/* -extern int EXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); - - This is another version of inflateInit with more compression options. The - fields next_out, zalloc, zfree and opaque must be initialized before by - the caller. - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library (the value 16 will be allowed soon). The - default value is 15 if inflateInit is used instead. If a compressed stream - with a larger window size is given as input, inflate() will return with - the error code Z_DATA_ERROR instead of trying to allocate a larger window. - - If next_out is not null, the library will use this buffer for the history - buffer; the buffer must either be large enough to hold the entire output - data, or have at least 1<<windowBits bytes. If next_out is null, the - library will allocate its own buffer (and leave next_out null). next_in - need not be provided here but must be provided by the application for the - next call of inflate(). - - If the history buffer is provided by the application, next_out must - never be changed by the application since the decompressor maintains - history information inside this buffer from call to call; the application - can only reset next_out to the beginning of the history buffer when - avail_out is zero and all output has been consumed. - - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was - not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as - windowBits < 8). msg is set to null if there is no error message. - inflateInit2 does not perform any decompression: this will be done by - inflate(). -*/ - -extern int EXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the decompression dictionary (history buffer) from the given - uncompressed byte sequence. This function must be called immediately after - a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen - by the compressor can be determined from the Adler32 value returned by this - call of inflate. The compressor and decompressor must use exactly the same - dictionary (see deflateSetDictionary). - - inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect Adler32 value). inflateSetDictionary does not - perform any decompression: this will be done by subsequent calls of - inflate(). -*/ - -extern int EXPORT inflateSync OF((z_streamp strm)); -/* - Skips invalid compressed data until the special marker (see deflate() - above) can be found, or until all available input is skipped. No output - is provided. - - inflateSync returns Z_OK if the special marker has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no marker has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -extern int EXPORT inflateReset OF((z_streamp strm)); -/* - This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. - - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -extern int inflateIncomp OF((z_stream *strm)); -/* - This function adds the data at next_in (avail_in bytes) to the output - history without performing any output. There must be no pending output, - and the decompressor must be expecting to see the start of a block. - Calling this function is equivalent to decompressing a stored block - containing the data at next_in (except that the data is not output). -*/ - - /* utility functions */ - -/* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level, window size, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -*/ - -extern int EXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least 0.1% larger than - sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. - compress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer. -*/ - -extern int EXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted. -*/ - - -typedef voidp gzFile; - -extern gzFile EXPORT gzopen OF((const char *path, const char *mode)); -/* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9"). gzopen can be used to read a file which is not in gzip format; - in this case gzread will directly read from the file without decompression. - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). -*/ - -extern gzFile EXPORT gzdopen OF((int fd, const char *mode)); -/* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. -*/ - -extern int EXPORT gzread OF((gzFile file, voidp buf, unsigned len)); -/* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ - -extern int EXPORT gzwrite OF((gzFile file, const voidp buf, unsigned len)); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). -*/ - -extern int EXPORT gzflush OF((gzFile file, int flush)); -/* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. -*/ - -extern int EXPORT gzclose OF((gzFile file)); -/* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). -*/ - -extern const char * EXPORT gzerror OF((gzFile file, int *errnum)); -/* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ - - /* checksum functions */ - -/* - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -*/ - -extern uLong EXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); - -/* - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - - uLong adler = adler32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - adler = adler32(adler, buffer, length); - } - if (adler != original_adler) error(); -*/ - -extern uLong EXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); -/* - Update a running crc with the bytes buf[0..len-1] and return the updated - crc. If buf is NULL, this function returns the required initial value - for the crc. Pre- and post-conditioning (one's complement) is performed - within this function so it shouldn't be done by the application. - Usage example: - - uLong crc = crc32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = crc32(crc, buffer, length); - } - if (crc != original_crc) error(); -*/ - - - /* various hacks, don't look :) */ - -/* deflateInit and inflateInit are macros to allow checking the zlib version - * and the compiler's view of z_stream: - */ -extern int EXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -extern int EXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -extern int EXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, int strategy, - const char *version, int stream_size)); -extern int EXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) - -#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ -#endif - -uLongf *get_crc_table OF((void)); /* can be used by asm versions of crc32() */ - -#ifdef __cplusplus -} -#endif - -#endif /* _ZLIB_H */ -/* --- zlib.h */ diff --git a/sys/pccard/cardinfo.h b/sys/pccard/cardinfo.h deleted file mode 100644 index 3fef4f429d80..000000000000 --- a/sys/pccard/cardinfo.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Include file for PCMCIA user process interface - * - *------------------------------------------------------------------------- - * - * Copyright (c) 1995 Andrew McRae. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef _PCCARD_CARDINFO_H_ -#define _PCCARD_CARDINFO_H_ - -#ifndef KERNEL -#include <sys/types.h> -#endif -#include <sys/ioccom.h> - -#define PIOCGSTATE _IOR('P', 1, struct slotstate) /* Get slot state */ -#define PIOCGMEM _IOWR('P', 2, struct mem_desc) /* Get memory map */ -#define PIOCSMEM _IOW('P', 3, struct mem_desc) /* Set memory map */ -#define PIOCGIO _IOWR('P', 4, struct io_desc) /* Get I/O map */ -#define PIOCSIO _IOW('P', 5, struct io_desc) /* Set I/O map */ -#define PIOCSDRV _IOW('P', 6, struct dev_desc) /* Set driver */ -#define PIOCRWFLAG _IOW('P', 7, int) /* Set flags for drv use */ -#define PIOCRWMEM _IOWR('P', 8, unsigned long) /* Set mem for drv use */ -#define PIOCSPOW _IOW('P', 9, struct power) /* Set power structure */ -/* - * Debug codes. - */ -#define PIOCGREG _IOWR('P',100, struct pcic_reg) /* get reg */ -#define PIOCSREG _IOW('P', 101, struct pcic_reg) /* Set reg */ - -/* - * Slot states for PIOCGSTATE - */ -enum cardstate { noslot, empty, suspend, filled }; - -/* - * Descriptor structure for memory map. - */ -struct mem_desc { - int window; /* Memory map window number (0-4) */ - int flags; /* Flags - see below */ - caddr_t start; /* System memory start */ - int size; /* Size of memory area */ - unsigned long card; /* Card memory address */ -}; - -#define MDF_16BITS 0x01 /* Memory is 16 bits wide */ -#define MDF_ZEROWS 0x02 /* Set no wait states for memory */ -#define MDF_WS0 0x04 /* Wait state flags */ -#define MDF_WS1 0x08 -#define MDF_ATTR 0x10 /* Memory is attribute memory */ -#define MDF_WP 0x20 /* Write protect memory */ -#define MDF_ACTIVE 0x40 /* Context active (read-only) */ - -/* - * Descriptor structure for I/O map - */ -struct io_desc { - int window; /* I/O map number (0-1) */ - int flags; /* Flags - see below */ - int start; /* I/O port start */ - int size; /* Number of port addresses */ -}; - -#define IODF_WS 0x01 /* Set wait states for 16 bit I/O access */ -#define IODF_16BIT 0x02 /* I/O access are 16 bit */ -#define IODF_CS16 0x04 /* Allow card selection of 16 bit access */ -#define IODF_ZEROWS 0x08 /* No wait states for 8 bit I/O */ -#define IODF_ACTIVE 0x10 /* Context active (read-only) */ - -/* - * Device descriptor for allocation of driver. - */ -struct dev_desc { - char name[16]; /* Driver name */ - int unit; /* Driver unit number */ - unsigned long mem; /* Memory address of driver */ - int memsize; /* Memory size (if used) */ - int iobase; /* base of I/O ports */ - int irqmask; /* Interrupt number(s) to allocate */ - int flags; /* Device flags */ - u_char misc[128]; /* For any random info */ -}; - -struct pcic_reg { - unsigned char reg; - unsigned char value; -}; - -/* - * Slot information. Used to read current status of slot. - */ -struct slotstate { - enum cardstate state; /* Current state of slot */ - int maxmem; /* Max allowed memory windows */ - int maxio; /* Max allowed I/O windows */ - int irqs; /* Bitmap of IRQs allowed */ - int flags; /* Capability flags */ -}; - -/* - * The power values are in volts * 10, e.g. 5V is 50, 3.3V is 33. - */ -struct power { - int vcc; - int vpp; -}; - -/* - * Other system limits - */ -#define MAXSLOT 16 -#define NUM_MEM_WINDOWS 10 -#define NUM_IO_WINDOWS 6 -#define CARD_DEVICE "/dev/card%d" /* String for sprintf */ - -#endif /* !_PCCARD_CARDINFO_H_ */ diff --git a/usr.bin/shar/shar.sh b/usr.bin/shar/shar.sh index 08db22c97a0e..bf541c0d0c97 100644 --- a/usr.bin/shar/shar.sh +++ b/usr.bin/shar/shar.sh @@ -35,10 +35,18 @@ # if [ $# -eq 0 ]; then - echo 'usage: shar file ...' - exit 1 + echo 'usage: shar file ...' 1>&2 + exit 64 # EX_USAGE fi +for i +do + if [ ! \( -d $i -o -r $i \) ]; then + echo "$i inaccessible or not exist" 1>&2 + exit 66 # EX_NOINPUT + fi +done + cat << EOF # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may @@ -64,7 +72,7 @@ do else echo "echo x - $i" echo "sed 's/^X//' >$i << 'END-of-$i'" - sed 's/^/X/' $i + sed 's/^/X/' $i || exit echo "END-of-$i" fi done diff --git a/usr.sbin/dpt/Makefile b/usr.sbin/dpt/Makefile deleted file mode 100644 index 63b2ffb0fa93..000000000000 --- a/usr.sbin/dpt/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# $Id: Makefile,v 1.2 1998/01/21 07:46:46 ShimonR Exp ShimonR $ - -SUBDIR= dpt_ctlinfo dpt_ctls dpt_dm dpt_led dpt_sig dpt_softc dpt_sysinfo - -.include <bsd.subdir.mk> diff --git a/usr.sbin/dpt/dpt_ctlinfo/Makefile b/usr.sbin/dpt/dpt_ctlinfo/Makefile deleted file mode 100644 index 690ed8e81e60..000000000000 --- a/usr.sbin/dpt/dpt_ctlinfo/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.1 1998/01/22 23:32:27 ShimonR Exp ShimonR $ - -PROG= dpt_ctlinfo -SRCS= dpt_ctlinfo.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_ctlinfo.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_ctlinfo/dpt_ctlinfo.8 b/usr.sbin/dpt/dpt_ctlinfo/dpt_ctlinfo.8 deleted file mode 100644 index f9d15301394b..000000000000 --- a/usr.sbin/dpt/dpt_ctlinfo/dpt_ctlinfo.8 +++ /dev/null @@ -1,3 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch diff --git a/usr.sbin/dpt/dpt_ctlinfo/dpt_ctlinfo.c b/usr.sbin/dpt/dpt_ctlinfo/dpt_ctlinfo.c deleted file mode 100644 index 63073e869dd0..000000000000 --- a/usr.sbin/dpt/dpt_ctlinfo/dpt_ctlinfo.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_ctlinfo.c: Dunp a DPT HBA Information Block */ - -#ident "$Id: dpt_ctlinfo.c,v 1.1 1998/01/22 23:32:27 ShimonR Exp ShimonR $" - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#define DPT_MEASURE_PERFORMANCE - -#include <sys/dpt.h> - - -int -main(int argc, char **argv, char **argp) -{ - eata_pt_t pass_thru; - dpt_compat_ha_t compat_softc; - - int result; - int fd; - int ndx; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - pass_thru.eataID[0] = 'E'; - pass_thru.eataID[1] = 'A'; - pass_thru.eataID[2] = 'T'; - pass_thru.eataID[3] = 'A'; - pass_thru.command = DPT_CTRLINFO; - pass_thru.command_buffer = (u_int8_t *)&compat_softc; - - if ( (result = ioctl(fd, DPT_IOCTL_SEND, &pass_thru)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_SEND, - strerror(errno)); - exit(1); - } - - (void)fprintf(stdout, "%x:", compat_softc.ha_state); - - for (ndx = 0; ndx < MAX_CHANNELS; ndx++) - (void)fprintf(stdout, (ndx == (MAX_CHANNELS - 1)) ? "%d:" : "%d,", - compat_softc.ha_id[ndx]); - - (void)fprintf(stdout, "%d:", compat_softc.ha_vect); - (void)fprintf(stdout, "%x:", compat_softc.ha_base); - (void)fprintf(stdout, "%d:", compat_softc.ha_max_jobs); - - switch (compat_softc.ha_cache) { - case DPT_NO_CACHE: - (void)fprintf(stdout, "No Cache:"); - break; - case DPT_CACHE_WRITETHROUGH: - (void)fprintf(stdout, "WriteThrough:"); - break; - case DPT_CACHE_WRITEBACK: - (void)fprintf(stdout, "WriteBack:"); - break; - default: - (void)fprintf(stdout, "UnKnown (%d):", compat_softc.ha_cache); - } - - (void)fprintf(stdout, "%d:", compat_softc.ha_cachesize); - (void)fprintf(stdout, "%d:", compat_softc.ha_nbus); - (void)fprintf(stdout, "%d:", compat_softc.ha_ntargets); - (void)fprintf(stdout, "%d:", compat_softc.ha_nluns); - (void)fprintf(stdout, "%d:", compat_softc.ha_tshift); - (void)fprintf(stdout, "%d:", compat_softc.ha_bshift); - - (void)fprintf(stdout, "%d:", compat_softc.ha_npend); - (void)fprintf(stdout, "%d:", compat_softc.ha_active_jobs); - - (void)fprintf(stdout, "%s\n", compat_softc.ha_fw_version); - - - - return(0); -} diff --git a/usr.sbin/dpt/dpt_ctls/Makefile b/usr.sbin/dpt/dpt_ctls/Makefile deleted file mode 100644 index 7c2d150980cb..000000000000 --- a/usr.sbin/dpt/dpt_ctls/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.1 1998/01/22 22:07:22 ShimonR Exp ShimonR $ - -PROG= dpt_ctls -SRCS= dpt_ctls.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_ctls.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_ctls/dpt_ctls.8 b/usr.sbin/dpt/dpt_ctls/dpt_ctls.8 deleted file mode 100644 index f9d15301394b..000000000000 --- a/usr.sbin/dpt/dpt_ctls/dpt_ctls.8 +++ /dev/null @@ -1,3 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch diff --git a/usr.sbin/dpt/dpt_ctls/dpt_ctls.c b/usr.sbin/dpt/dpt_ctls/dpt_ctls.c deleted file mode 100644 index d5ef550db106..000000000000 --- a/usr.sbin/dpt/dpt_ctls/dpt_ctls.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_ctls.c: Dunp a the number of configured DPT HBAs */ - -#ident "$Id: dpt_ctls.c,v 1.1 1998/01/22 22:07:22 ShimonR Exp ShimonR $" - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#include <sys/dpt.h> - -int -main(int argc, char **argv, char **argp) -{ - eata_pt_t pass_thru; - int controllers_present; - - int result; - int fd; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - pass_thru.eataID[0] = 'E'; - pass_thru.eataID[1] = 'A'; - pass_thru.eataID[2] = 'T'; - pass_thru.eataID[3] = 'A'; - pass_thru.command = DPT_NUMCTRLS; - pass_thru.command_buffer = (u_int8_t *)&controllers_present; - - if ( (result = ioctl(fd, DPT_IOCTL_SEND, &pass_thru)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_SEND, - strerror(errno)); - exit(1); - } - - (void)fprintf(stdout, "%d\n", controllers_present); - return(0); -} diff --git a/usr.sbin/dpt/dpt_dm/Makefile b/usr.sbin/dpt/dpt_dm/Makefile deleted file mode 100644 index bc7b53f349da..000000000000 --- a/usr.sbin/dpt/dpt_dm/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.4 1998/01/21 17:38:32 ShimonR Exp ShimonR $ - -PROG= dpt_dm -SRCS= dpt_dm.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_dm.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_dm/dpt_dm.8 b/usr.sbin/dpt/dpt_dm/dpt_dm.8 deleted file mode 100644 index d04a43e36ea4..000000000000 --- a/usr.sbin/dpt/dpt_dm/dpt_dm.8 +++ /dev/null @@ -1,6 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch diff --git a/usr.sbin/dpt/dpt_dm/dpt_dm.c b/usr.sbin/dpt/dpt_dm/dpt_dm.c deleted file mode 100644 index 869007b632a9..000000000000 --- a/usr.sbin/dpt/dpt_dm/dpt_dm.c +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_dm.c: Dump a DPT metrics structure */ - -#ident "$Id: dpt_dm.c,v 1.8 1998/01/21 17:38:32 ShimonR Exp ShimonR $" - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#define DPT_MEASURE_PERFORMANCE - -#include <sys/dpt.h> - -char * -scsi_cmd_name(u_int8_t cmd) -{ - switch (cmd) { - case 0x40: - return ("Change Definition [7.1]"); - break; - case 0x39: - return ("Compare [7,2]"); - break; - case 0x18: - return ("Copy [7.3]"); - break; - case 0x3a: - return ("Copy and Verify [7.4]"); - break; - case 0x04: - return ("Format Unit [6.1.1]"); - break; - case 0x12: - return ("Inquiry [7.5]"); - break; - case 0x36: - return ("lock/Unlock Cache [6.1.2]"); - break; - case 0x4c: - return ("Log Select [7.6]"); - break; - case 0x4d: - return ("Log Sense [7.7]"); - break; - case 0x15: - return ("Mode select (6) [7.8]"); - break; - case 0x55: - return ("Mode Select (10) [7.9]"); - break; - case 0x1a: - return ("Mode Sense (6) [7.10]"); - break; - case 0x5a: - return ("Mode Sense (10) [7.11]"); - break; - case 0xa7: - return ("Move Medium Attached [SMC]"); - break; - case 0x5e: - return ("Persistent Reserve In [7.12]"); - break; - case 0x5f: - return ("Persistent Reserve Out [7.13]"); - break; - case 0x1e: - return ("Prevent/Allow Medium Removal [7.14]"); - break; - case 0x08: - return ("Read, Receive (6) [6.1.5]"); - break; - case 0x28: - return ("Read (10) [6.1.5]"); - break; - case 0xa8: - return ("Read (12) [6.1.5]"); - break; - case 0x3c: - return ("Read Buffer [7.15]"); - break; - case 0x25: - return ("Read Capacity [6.1.6]"); - break; - case 0x37: - return ("Read Defect Data (10) [6.1.7]"); - break; - case 0xb7: - return ("Read Defect Data (12) [6.2.5]"); - break; - case 0xb4: - return ("Read Element Status Attached [SMC]"); - break; - case 0x3e: - return ("Read Long [6.1.8]"); - break; - case 0x07: - return ("Reassign Blocks [6.1.9]"); - break; - case 0x81: - return ("Rebuild [6.1.10]"); - break; - case 0x1c: - return ("Receive Diagnostics Result [7.16]"); - break; - case 0x82: - return ("Regenerate [6.1.11]"); - break; - case 0x17: - return ("Release(6) [7.17]"); - break; - case 0x57: - return ("Release(10) [7.18]"); - break; - case 0xa0: - return ("Report LUNs [7.19]"); - break; - case 0x03: - return ("Request Sense [7.20]"); - break; - case 0x16: - return ("Resereve (6) [7.21]"); - break; - case 0x56: - return ("Reserve(10) [7.22]"); - break; - case 0x2b: - return ("Reserve(10) [6.1.12]"); - break; - case 0x1d: - return ("Send Disagnostics [7.23]"); - break; - case 0x33: - return ("Set Limit (10) [6.1.13]"); - break; - case 0xb3: - return ("Set Limit (12) [6.2.8]"); - break; - case 0x1b: - return ("Start/Stop Unit [6.1.14]"); - break; - case 0x35: - return ("Synchronize Cache [6.1.15]"); - break; - case 0x00: - return ("Test Unit Ready [7.24]"); - break; - case 0x3d: - return ("Update Block (6.2.9"); - break; - case 0x2f: - return ("Verify (10) [6.1.16, 6.2.10]"); - break; - case 0xaf: - return ("Verify (12) [6.2.11]"); - break; - case 0x0a: - return ("Write, Send (6) [6.1.17, 9.2]"); - break; - case 0x2a: - return ("Write (10) [6.1.18]"); - break; - case 0xaa: - return ("Write (12) [6.2.13]"); - break; - case 0x2e: - return ("Write and Verify (10) [6.1.19, 6.2.14]"); - break; - case 0xae: - return ("Write and Verify (12) [6.1.19, 6.2.15]"); - break; - case 0x03b: - return ("Write Buffer [7.25]"); - break; - case 0x03f: - return ("Write Long [6.1.20]"); - break; - case 0x041: - return ("Write Same [6.1.21]"); - break; - case 0x052: - return ("XD Read [6.1.22]"); - break; - case 0x050: - return ("XD Write [6.1.22]"); - break; - case 0x080: - return ("XD Write Extended [6.1.22]"); - break; - case 0x051: - return ("XO Write [6.1.22]"); - break; - default: - return ("Unknown SCSI Command"); - } -} - -int -main(int argc, char **argv, char **argp) -{ - dpt_perf_t metrics; - int result; - int fd; - int ndx; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - if ( (result = ioctl(fd, DPT_IOCTL_INTERNAL_METRICS, &metrics)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_INTERNAL_METRICS, - strerror(errno)); - exit(2); - } - - /* Interrupt related measurements */ - (void)fprintf(stdout, "Interrupts:%d:%d:%d:%d\n\nCommands:\n", - metrics.aborted_interrupts, - metrics.spurious_interrupts, - metrics.min_intr_time, - metrics.max_intr_time); - - /* SCSI Commands, can be no more than 256 of them */ - for (ndx = 0; ndx < 256; ndx++) { - if (metrics.command_count[ndx] != 0) { - (void)fprintf(stdout, "%d:%s:%d:%d:%d\n", - ndx, - scsi_cmd_name((u_int8_t)ndx), - metrics.command_count[ndx], - metrics.min_command_time[ndx], - metrics.max_command_time[ndx]); - } - } - - (void)fprintf(stdout, "\nREAD by size:\n"); - - /* READ/WRITE statistics, per block size */ - - for ( ndx = 0; ndx < 10; ndx++) { - if (metrics.read_by_size_count[ndx] != 0) { - char* block_size; - - switch ( ndx ) { - case SIZE_512: - block_size = "512"; - break; - case SIZE_1K: - block_size = "1K"; - break; - case SIZE_2K: - block_size = "2K"; - break; - case SIZE_4K: - block_size = "4K"; - break; - case SIZE_8K: - block_size = "8K"; - break; - case SIZE_16K: - block_size = "16K"; - break; - case SIZE_32K: - block_size = "32K"; - break; - case SIZE_64K: - block_size = "64K"; - break; - case SIZE_BIGGER: - block_size = "BIGGER"; - break; - case SIZE_OTHER: - block_size = "OTHER"; - break; - default: - block_size = "Gcc, shut up!"; - } - - (void)fprintf(stdout, "%s:%u:%u:%u\n", block_size, - metrics.read_by_size_count[ndx], - metrics.read_by_size_min_time[ndx], - metrics.read_by_size_max_time[ndx]); - } - } - - (void)fprintf(stdout, "\nWRITE by size:\n"); - - for ( ndx = 0; ndx < 10; ndx++) { - if (metrics.write_by_size_count[ndx] != 0) { - char* block_size; - - switch ( ndx ) { - case SIZE_512: - block_size = "512"; - break; - case SIZE_1K: - block_size = "1K"; - break; - case SIZE_2K: - block_size = "2K"; - break; - case SIZE_4K: - block_size = "4K"; - break; - case SIZE_8K: - block_size = "8K"; - break; - case SIZE_16K: - block_size = "16K"; - break; - case SIZE_32K: - block_size = "32K"; - break; - case SIZE_64K: - block_size = "64K"; - break; - case SIZE_BIGGER: - block_size = "BIGGER"; - break; - case SIZE_OTHER: - block_size = "OTHER"; - break; - default: - block_size = "Gcc, shut up!"; - } - - (void)fprintf(stdout, "%s:%u:%u:%u\n", block_size, - metrics.write_by_size_count[ndx], - metrics.write_by_size_min_time[ndx], - metrics.write_by_size_max_time[ndx]); - } - - } - - (void)fprintf(stdout, "\nQueues:%u:%u:%u:%u:%u:%u:%u:%u:%u\n", - metrics.max_waiting_count, - metrics.min_waiting_time, - metrics.max_waiting_time, - metrics.max_submit_count, - metrics.min_submit_time, - metrics.max_submit_time, - metrics.max_complete_count, - metrics.min_complete_time, - metrics.max_complete_time); - - (void)fprintf(stdout, "Hardware Ports:%u:%u:%u:%u\n", - metrics.command_collisions, - metrics.command_too_busy, - metrics.max_eata_tries, - metrics.min_eata_tries); - - return(0); -} diff --git a/usr.sbin/dpt/dpt_led/Makefile b/usr.sbin/dpt/dpt_led/Makefile deleted file mode 100644 index 43a2c2a7ae9a..000000000000 --- a/usr.sbin/dpt/dpt_led/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.1 1998/01/23 02:45:53 ShimonR Exp ShimonR $ - -PROG= dpt_led -SRCS= dpt_led.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_led.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_led/dpt_led.8 b/usr.sbin/dpt/dpt_led/dpt_led.8 deleted file mode 100644 index f9d15301394b..000000000000 --- a/usr.sbin/dpt/dpt_led/dpt_led.8 +++ /dev/null @@ -1,3 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch diff --git a/usr.sbin/dpt/dpt_led/dpt_led.c b/usr.sbin/dpt/dpt_led/dpt_led.c deleted file mode 100644 index 70480e4c6884..000000000000 --- a/usr.sbin/dpt/dpt_led/dpt_led.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_led.c: Show the blinking LED array status of a DPT HBAs */ - -#ident "$Id: dpt_led.c,v 1.1 1998/01/23 02:45:53 ShimonR Exp ShimonR $" - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#include <sys/dpt.h> - -int -main(int argc, char **argv, char **argp) -{ - eata_pt_t pass_thru; - int led; - - int result; - int fd; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - pass_thru.eataID[0] = 'E'; - pass_thru.eataID[1] = 'A'; - pass_thru.eataID[2] = 'T'; - pass_thru.eataID[3] = 'A'; - pass_thru.command = DPT_BLINKLED; - pass_thru.command_buffer = (u_int8_t *)&led; - - if ( (result = ioctl(fd, DPT_IOCTL_SEND, &pass_thru)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_SEND, - strerror(errno)); - exit(1); - } - - (void)fprintf(stdout, "%s\n", i2bin((unsigned int)led, 16)); - return(0); -} - -/* - * and this one presents an integer as ones and zeros - */ -static char i2bin_bitmap[48]; /* Used for binary dump of registers */ - -char * -i2bin(unsigned int no, int length) -{ - int ndx, rind; - - for (ndx = 0, rind = 0; ndx < 32; ndx++, rind++) { - i2bin_bitmap[rind] = (((no << ndx) & 0x80000000) ? '1' : '0'); - - if (((ndx % 4) == 3)) - i2bin_bitmap[++rind] = ' '; - } - - if ((ndx % 4) == 3) - i2bin_bitmap[rind - 1] = '\0'; - else - i2bin_bitmap[rind] = '\0'; - - switch (length) { - case 8: - return (i2bin_bitmap + 30); - break; - case 16: - return (i2bin_bitmap + 20); - break; - case 24: - return (i2bin_bitmap + 10); - break; - case 32: - return (i2bin_bitmap); - default: - return ("i2bin: Invalid length Specs"); - break; - } -} - diff --git a/usr.sbin/dpt/dpt_sig/Makefile b/usr.sbin/dpt/dpt_sig/Makefile deleted file mode 100644 index 3f504864083b..000000000000 --- a/usr.sbin/dpt/dpt_sig/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.4 1998/01/21 17:41:39 ShimonR Exp $ - -PROG= dpt_sig -SRCS= dpt_sig.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_sig.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_sig/dpt_sig.8 b/usr.sbin/dpt/dpt_sig/dpt_sig.8 deleted file mode 100644 index f9d15301394b..000000000000 --- a/usr.sbin/dpt/dpt_sig/dpt_sig.8 +++ /dev/null @@ -1,3 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch diff --git a/usr.sbin/dpt/dpt_sig/dpt_sig.c b/usr.sbin/dpt/dpt_sig/dpt_sig.c deleted file mode 100644 index 340b9249b55b..000000000000 --- a/usr.sbin/dpt/dpt_sig/dpt_sig.c +++ /dev/null @@ -1,596 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_sig.c: Dunp a DPT Signature */ - -#ident "$Id: dpt_sig.c,v 1.6 1998/01/22 22:06:30 ShimonR Exp ShimonR $" - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#define DPT_MEASURE_PERFORMANCE - -#include <sys/dpt.h> - -/* A primitive subset of isgraph. Used by hex_dump below */ -#define IsGraph(val) ( (((val) >= ' ') && ((val) <= '~')) ) - -/* - * This function dumps bytes to the screen in hex format. - */ -void -hex_dump(u_int8_t * data, int length, char *name, int no) -{ - int line, column, ndx; - - (void)fprintf(stdout, "Kernel Hex Dump for %s-%d at %p (%d bytes)\n", - name, no, data, length); - - /* Zero out all the counters and repeat for as many bytes as we have */ - for (ndx = 0, column = 0, line = 0; ndx < length; ndx++) { - /* Print relative offset at the beginning of every line */ - if (column == 0) - (void)fprintf(stdout, "%04x ", ndx); - - /* Print the byte as two hex digits, followed by a space */ - (void)fprintf(stdout, "%02x ", data[ndx]); - - /* Split the row of 16 bytes in half */ - if (++column == 8) { - (void)fprintf(stdout, " "); - } - /* St the end of each row of 16 bytes, put a space ... */ - if (column == 16) { - (void)fprintf(stdout, " "); - - /* ... and then print the ASCII-visible on a line. */ - for (column = 0; column < 16; column++) { - int ascii_pos = ndx - 15 + column; - - /* - * Non-printable and non-ASCII are just a - * dot. ;-( - */ - if (IsGraph(data[ascii_pos])) - (void)fprintf(stdout, "%c", data[ascii_pos]); - else - (void)fprintf(stdout, "."); - } - - /* Each line ends with a new line */ - (void)fprintf(stdout, "\n"); - column = 0; - - /* - * Every 256 bytes (16 lines of 16 bytes each) have - * an empty line, separating them from the next - * ``page''. Yes, I programmed on a Z-80, where a - * page was 256 bytes :-) - */ - if (++line > 15) { - (void)fprintf(stdout, "\n"); - line = 0; - } - } - } - - /* - * We are basically done. We do want, however, to handle the ASCII - * translation of fractional lines. - */ - if ((ndx == length) && (column != 0)) { - int modulus = 16 - column, spaces = modulus * 3, skip; - - /* - * Skip to the right, as many spaces as there are bytes - * ``missing'' ... - */ - for (skip = 0; skip < spaces; skip++) - (void)fprintf(stdout, " "); - - /* ... And the gap separating the hex dump from the ASCII */ - (void)fprintf(stdout, " "); - - /* - * Do not forget the extra space that splits the hex dump - * vertically - */ - if (column < 8) - (void)fprintf(stdout, " "); - - for (column = 0; column < (16 - modulus); column++) { - int ascii_pos = ndx - (16 - modulus) + column; - - if (IsGraph(data[ascii_pos])) - (void)fprintf(stdout, "%c", data[ascii_pos]); - else - (void)fprintf(stdout, "."); - } - (void)fprintf(stdout, "\n"); - } -} - - -int -main(int argc, char **argv, char **argp) -{ - eata_pt_t pass_thru; - dpt_sig_t signature; - char *sp1; - char *sp2; - - int result; - int fd; - int ndx; - - /* If we do not do that, gcc complains about uninitialized usage (?) */ - sp1 = "Unknown"; - sp2 = "Unknown"; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - pass_thru.eataID[0] = 'E'; - pass_thru.eataID[1] = 'A'; - pass_thru.eataID[2] = 'T'; - pass_thru.eataID[3] = 'A'; - pass_thru.command = DPT_SIGNATURE; - pass_thru.command_buffer = (u_int8_t *)&signature; - - if ( (result = ioctl(fd, DPT_IOCTL_SEND, &pass_thru)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_SEND, - strerror(errno)); - exit(1); - } - - /* dsSignature is not null terminated! */ - for (ndx = 0; ndx < sizeof(signature.dsSignature); ndx++) - (void)fputc(signature.dsSignature[ndx], stdout); - - (void)fprintf(stdout, ":%x:", signature.SigVersion); - - switch (signature.ProcessorFamily) { - case PROC_INTEL: - sp1 = "Intel"; - switch ( signature.Processor ) { - case PROC_8086: - sp2 = "8086"; - break; - case PROC_286: - sp2 = "80286"; - break; - case PROC_386: - sp2 = "386"; - break; - case PROC_486: - sp2 = "486"; - break; - case PROC_PENTIUM: - sp2 = "Pentium"; - break; - case PROC_P6: - sp2 = "PentiumPro"; - break; - default: - sp2 = "Unknown Processor"; - break; - } - break; - case PROC_MOTOROLA: - sp1 = "Motorola"; - switch ( signature.Processor ) { - case PROC_68000: - sp2 = "68000"; - break; - case PROC_68020: - sp2 = "68020"; - break; - case PROC_68030: - sp2 = "68030"; - break; - case PROC_68040: - sp2 = "68040"; - break; - default: - sp2 = "Unknown Processor"; - break; - } - break; - case PROC_MIPS4000: - sp1 = "MIPS/SGI"; - break; - case PROC_ALPHA: - sp1 = "DEC Alpha"; - break; - default: - sp1 = "Unknown Processor Family"; - break; - } - - (void)fprintf(stdout, "%s:%s:", sp1, sp2); - - switch ( signature.Filetype ) { - case FT_EXECUTABLE: - sp1 = "Executable"; - break; - case FT_SCRIPT: - sp1 = "Script"; - break; - case FT_HBADRVR: - sp1 = "HBA Driver"; - break; - case FT_OTHERDRVR: - sp1 = "Other Driver"; - break; - case FT_IFS: - sp1 = "Installable FileSystem"; - break; - case FT_ENGINE: - sp1 = "DPT Engine"; - break; - case FT_COMPDRVR: - sp1 = "Compressed Driver"; - break; - case FT_LANGUAGE: - sp1 = "Language File"; - break; - case FT_FIRMWARE: - sp1 = "DownLoadable Firmware"; - break; - case FT_COMMMODL: - sp1 = "Communications Module"; - break; - case FT_INT13: - sp1 = "INT13 Type HBA Driver"; - break; - case FT_HELPFILE: - sp1 = "Help File"; - break; - case FT_LOGGER: - sp1 = "Event Logger"; - break; - case FT_INSTALL: - sp1 = "Installation Procedure"; - break; - case FT_LIBRARY: - sp1 = "Storage Manager Real-Mode Call"; - break; - case FT_RESOURCE: - sp1 = "Storage Manager Resource File"; - break; - case FT_MODEM_DB: - sp1 = "Storage Manager Modem Database"; - break; - default: - sp1 = "Unknown File Type"; - break; - } - - switch ( signature.FiletypeFlags ) { - case FTF_DLL: - sp2 = "Dynamically Linked Library"; - break; - case FTF_NLM: - sp2 = "NetWare Loadable Module"; - break; - case FTF_OVERLAYS: - sp2 = "Uses Overlays"; - break; - case FTF_DEBUG: - sp2 = "Debug Version"; - break; - case FTF_TSR: - sp2 = "DOS Terminate-n-Stay Resident Thing"; - break; - case FTF_SYS: - sp2 = "DOS Loadable Driver"; - break; - case FTF_PROTECTED: - sp2 = "Runs in Protected Mode"; - break; - case FTF_APP_SPEC: - sp2 = "Application Specific"; - break; - default: - sp2 = "Unknown File Type Flag"; - break; - } - - (void)fprintf(stdout, "%s:%s:", sp1, sp2); - - switch ( signature.OEM ) { - case OEM_DPT: - sp1 = "DPT"; - break; - case OEM_ATT: - sp1 = "AT&T"; - break; - case OEM_NEC: - sp1 = "NEC"; - break; - case OEM_ALPHA: - sp1 = "Alphatronix"; - break; - case OEM_AST: - sp1 = "AST"; - break; - case OEM_OLIVETTI: - sp1 = "Olivetti"; - break; - case OEM_SNI: - sp1 = "Siemens/Nixdorf"; - break; - default: - sp1 = "Unknown OEM"; - break; - } - - switch ( signature.OS ) { - case OS_DOS: - sp2 = "DOS"; - break; - case OS_WINDOWS: - sp2 = "Microsoft Windows 3.x"; - break; - case OS_WINDOWS_NT: - sp2 = "Microsoft Windows NT"; - break; - case OS_OS2M: - sp2 = "OS/2 1.2.x,MS 1.3.0,IBM 1.3.x"; - break; - case OS_OS2L: - sp2 = "Microsoft OS/2 1.301 - LADDR"; - break; - case OS_OS22x: - sp2 = "IBM OS/2 2.x"; - break; - case OS_NW286: - sp2 = "Novell NetWare 286"; - break; - case OS_NW386: - sp2 = "Novell NetWare 386"; - break; - case OS_GEN_UNIX: - sp2 = "Generic Unix"; - break; - case OS_SCO_UNIX: - sp2 = "SCO Unix"; - break; - case OS_ATT_UNIX: - sp2 = "AT&T Unix"; - break; - case OS_UNIXWARE: - sp2 = "UnixWare Unix"; - break; - case OS_INT_UNIX: - sp2 = "Interactive Unix"; - break; - case OS_SOLARIS: - sp2 = "SunSoft Solaris"; - break; - case OS_QNX: - sp2 = "QNX for Tom Moch"; - break; - case OS_NEXTSTEP: - sp2 = "NeXTSTEP"; - break; - case OS_BANYAN: - sp2 = "Banyan Vines"; - break; - case OS_OLIVETTI_UNIX: - sp2 = "Olivetti Unix"; - break; - case OS_FREEBSD: - sp2 = "FreeBSD 2.2 and later"; - break; - case OS_OTHER: - sp2 = "Other"; - break; - default: - sp2 = "Unknown O/S"; - break; - } - - (void)fprintf(stdout, "%s:%s:\n", sp1, sp2); - - if ( signature.Capabilities & CAP_RAID0 ) - (void)fprintf(stdout, "RAID-0:"); - - if ( signature.Capabilities & CAP_RAID1 ) - (void)fprintf(stdout, "RAID-1:"); - - if ( signature.Capabilities & CAP_RAID3 ) - (void)fprintf(stdout, "RAID-3:"); - - if ( signature.Capabilities & CAP_RAID5 ) - (void)fprintf(stdout, "RAID-5:"); - - if ( signature.Capabilities & CAP_SPAN ) - (void)fprintf(stdout, "SPAN:"); - - if ( signature.Capabilities & CAP_PASS ) - (void)fprintf(stdout, "PASS:"); - - if ( signature.Capabilities & CAP_OVERLAP ) - (void)fprintf(stdout, "OVERLAP:"); - - if ( signature.Capabilities & CAP_ASPI ) - (void)fprintf(stdout, "ASPI:"); - - if ( signature.Capabilities & CAP_ABOVE16MB ) - (void)fprintf(stdout, "ISA16MB:"); - - if ( signature.Capabilities & CAP_EXTEND ) - (void)fprintf(stdout, "ISA16MB:"); - - (void)fprintf(stdout, "\n"); - - if ( signature.DeviceSupp & DEV_DASD ) - (void)fprintf(stdout, "DASD:"); - - if ( signature.DeviceSupp & DEV_TAPE ) - (void)fprintf(stdout, "Tape:"); - - if ( signature.DeviceSupp & DEV_PRINTER ) - (void)fprintf(stdout, "Printer:"); - - if ( signature.DeviceSupp & DEV_PROC ) - (void)fprintf(stdout, "CPU:"); - - if ( signature.DeviceSupp & DEV_WORM ) - (void)fprintf(stdout, "WORM:"); - - if ( signature.DeviceSupp & DEV_CDROM ) - (void)fprintf(stdout, "CDROM:"); - - if ( signature.DeviceSupp & DEV_SCANNER ) - (void)fprintf(stdout, "Scanner:"); - - if ( signature.DeviceSupp & DEV_OPTICAL ) - (void)fprintf(stdout, "Optical:"); - - if ( signature.DeviceSupp & DEV_JUKEBOX ) - (void)fprintf(stdout, "Jukebox:"); - - if ( signature.DeviceSupp & DEV_COMM ) - (void)fprintf(stdout, "Comm:"); - - if ( signature.DeviceSupp & DEV_OTHER ) - (void)fprintf(stdout, "Other:"); - - if ( signature.DeviceSupp & DEV_ALL ) - (void)fprintf(stdout, "All:"); - - (void)fprintf(stdout, "\n"); - - if ( signature.AdapterSupp & ADF_2001 ) - (void)fprintf(stdout, "PM2001:"); - - if ( signature.AdapterSupp & ADF_2012A ) - (void)fprintf(stdout, "PM2012A:"); - - if ( signature.AdapterSupp & ADF_PLUS_ISA ) - (void)fprintf(stdout, "PM2011+PM2021:"); - - if ( signature.AdapterSupp & ADF_PLUS_EISA ) - (void)fprintf(stdout, "PM2012B+PM2022:"); - - if ( signature.AdapterSupp & ADF_SC3_ISA ) - (void)fprintf(stdout, "PM2021:"); - - if ( signature.AdapterSupp & ADF_SC3_EISA ) - (void)fprintf(stdout, "PM2022+PM2122:"); - - if ( signature.AdapterSupp & ADF_SC3_PCI ) - (void)fprintf(stdout, "SmartCache III PCI:"); - - if ( signature.AdapterSupp & ADF_SC4_ISA ) - (void)fprintf(stdout, "SmartCache IV ISA:"); - - if ( signature.AdapterSupp & ADF_SC4_EISA ) - (void)fprintf(stdout, "SmartCache IV EISA:"); - - if ( signature.AdapterSupp & ADF_SC4_PCI ) - (void)fprintf(stdout, "SmartCache IV PCI:"); - - if ( signature.AdapterSupp & ADF_ALL_MASTER ) - (void)fprintf(stdout, "All Bus Mastering:"); - - if ( signature.AdapterSupp & ADF_ALL_CACHE ) - (void)fprintf(stdout, "All Caching:"); - - if ( signature.AdapterSupp & ADF_ALL ) - (void)fprintf(stdout, "All HBAs:"); - - (void)fprintf(stdout, "\n"); - - if ( signature.Application & APP_DPTMGR ) - (void)fprintf(stdout, "DPTMGR:"); - - if ( signature.Application & APP_ENGINE ) - (void)fprintf(stdout, "Engine:"); - - if ( signature.Application & APP_SYTOS ) - (void)fprintf(stdout, "Systron Sytos Plus:"); - - if ( signature.Application & APP_CHEYENNE ) - (void)fprintf(stdout, "Cheyenne ARCServe + ARCSolo:"); - - if ( signature.Application & APP_MSCDEX ) - (void)fprintf(stdout, "Microsoft CD-ROM extensions:"); - - if ( signature.Application & APP_NOVABACK ) - (void)fprintf(stdout, "NovaStor Novaback:"); - - if ( signature.Application & APP_AIM ) - (void)fprintf(stdout, "Archive Information Manager:"); - - (void)fprintf(stdout, "\n"); - - if ( signature.Requirements & REQ_SMARTROM ) - (void)fprintf(stdout, "SmartROM:"); - - if ( signature.Requirements & REQ_DPTDDL ) - (void)fprintf(stdout, "DPTDDL.SYS:"); - - if ( signature.Requirements & REQ_HBA_DRIVER ) - (void)fprintf(stdout, "HBA Driver:"); - - if ( signature.Requirements & REQ_ASPI_TRAN ) - (void)fprintf(stdout, "ASPI Transport Modules:"); - - if ( signature.Requirements & REQ_ENGINE ) - (void)fprintf(stdout, "DPT Engine:"); - - if ( signature.Requirements & REQ_COMM_ENG ) - (void)fprintf(stdout, "DPT Comm Engine:"); - - (void)fprintf(stdout, "\n"); - - (void)fprintf(stdout, "%x.%x.%x:%d.%d.%d\n", - signature.Version, signature.Revision, - signature.SubRevision, - signature.Month, signature.Day, signature.Year + 1980); - - return(0); -} diff --git a/usr.sbin/dpt/dpt_softc/Makefile b/usr.sbin/dpt/dpt_softc/Makefile deleted file mode 100644 index 9977e478ee1d..000000000000 --- a/usr.sbin/dpt/dpt_softc/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.3 1998/01/21 07:50:38 ShimonR Exp ShimonR $ - -PROG= dpt_softc -SRCS= dpt_softc.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_softc.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_softc/dpt_softc.8 b/usr.sbin/dpt/dpt_softc/dpt_softc.8 deleted file mode 100644 index 6dfeb0f44bd4..000000000000 --- a/usr.sbin/dpt/dpt_softc/dpt_softc.8 +++ /dev/null @@ -1,4 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch - diff --git a/usr.sbin/dpt/dpt_softc/dpt_softc.c b/usr.sbin/dpt/dpt_softc/dpt_softc.c deleted file mode 100644 index 6f1726f5afc4..000000000000 --- a/usr.sbin/dpt/dpt_softc/dpt_softc.c +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_softc.c: Dunp a DPT control structure */ - -#ident "$Id: dpt_softc.c,v 1.7 1998/01/22 21:37:40 ShimonR Exp $" - -#include <stdlib.h> -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -/* - * The following two defines alter the size and composition of dpt_softc_t. - * If useland does not match the kenel, disaster will ensue. - * Since we do not know how to pick up kernel options from here, - * and since we always use these options, we will enable them here. - * - * If you build a kernel without these options, edit here and recompile. - */ -#define DPT_MEASURE_PERFORMANCE -#define DEVFS - -#include <sys/dpt.h> - -static char i2bin_bitmap[48]; /* Used for binary dump of registers */ - -char * -i2bin(unsigned int no, int length) -{ - int ndx, rind; - - for (ndx = 0, rind = 0; ndx < 32; ndx++, rind++) { - i2bin_bitmap[rind] = (((no << ndx) & 0x80000000) ? '1' : '0'); - - if (((ndx % 4) == 3)) - i2bin_bitmap[++rind] = ' '; - } - - if ((ndx % 4) == 3) - i2bin_bitmap[rind - 1] = '\0'; - else - i2bin_bitmap[rind] = '\0'; - - switch (length) { - case 8: - return (i2bin_bitmap + 30); - break; - case 16: - return (i2bin_bitmap + 20); - break; - case 24: - return (i2bin_bitmap + 10); - break; - case 32: - return (i2bin_bitmap); - default: - return ("i2bin: Invalid length Specs"); - break; - } -} -int -main(int argc, char **argv, char **argp) -{ - dpt_user_softc_t udpt; - int result; - int fd; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - if ( (result = ioctl(fd, DPT_IOCTL_SOFTC, &udpt)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_SOFTC, - strerror(errno)); - exit(2); - } - - (void)fprintf(stdout, "Counters:%d:%d:%d:%d:%d:%d:%d\n", - udpt.total_ccbs_count, - udpt.free_ccbs_count, - udpt.waiting_ccbs_count, - udpt.submitted_ccbs_count, - udpt.completed_ccbs_count, - udpt.commands_processed, - udpt.lost_interrupts); - - (void)fprintf(stdout, "Queue Status:%s\n", - i2bin(udpt.queue_status, sizeof(udpt.queue_status) * 8)); - - (void)fprintf(stdout, "Free lock:%s\n", - i2bin(udpt.free_lock, sizeof(udpt.free_lock) * 8)); - - (void)fprintf(stdout, "Waiting lock:%s\n", - i2bin(udpt.waiting_lock, sizeof(udpt.waiting_lock) * 8)); - - (void)fprintf(stdout, "Submitted lock:%s\n", - i2bin(udpt.submitted_lock, sizeof(udpt.submitted_lock) * 8)); - - (void)fprintf(stdout, "Completed lock:%s\n", - i2bin(udpt.completed_lock, sizeof(udpt.completed_lock) * 8)); - - (void)fprintf(stdout, "Configuration:%s:%d:%d:%d:%x:%d:%d\n", - udpt.handle_interrupts ? "Yes" : "No", - udpt.max_id, - udpt.max_lun, - udpt.channels, - udpt.io_base, - udpt.irq, - udpt.dma_channel); - - (void)fprintf(stdout, "ID:%x:%x:%s:%s:%s:%s:%x\n", - udpt.board_data.deviceType, - udpt.board_data.rm_dtq, - udpt.board_data.vendor, - udpt.board_data.modelNum, - udpt.board_data.firmware, - udpt.board_data.protocol, - udpt.EATA_revision); - - (void)fprintf(stdout,"Capabilities:%x:%d:%s:%s:%s:%s:%s\n", - udpt.bustype, - udpt.channels, - i2bin((u_int32_t)udpt.state, sizeof(udpt.state) * 8), - udpt.primary ? "Yes" : "No", - udpt.more_support ? "Yes" : "No", - udpt.immediate_support ? "Yes" : "No", - udpt.broken_INQUIRY ? "Yes" : "No"); - - (void)fprintf(stdout,"More Config:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d\n", - udpt.resetlevel[0], - udpt.resetlevel[1], - udpt.resetlevel[2], - udpt.cplen, - udpt.cppadlen, - udpt.queuesize, - udpt.sgsize, - udpt.hostid[0], - udpt.hostid[1], - udpt.hostid[2]); - - (void)fprintf(stdout,"Cache:%s:%d\n", - (udpt.cache_type == DPT_NO_CACHE) - ? "None" - : (udpt.cache_type == DPT_CACHE_WRITETHROUGH) - ? "Write-Through" : "Write-Back", - udpt.cache_size); - - return(0); -} diff --git a/usr.sbin/dpt/dpt_sysinfo/Makefile b/usr.sbin/dpt/dpt_sysinfo/Makefile deleted file mode 100644 index f5d570ab61b9..000000000000 --- a/usr.sbin/dpt/dpt_sysinfo/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 5/31/93 -# $Id: Makefile,v 1.1 1998/01/22 23:32:27 ShimonR Exp ShimonR $ - -PROG= dpt_sysinfo -SRCS= dpt_sysinfo.c - -CFLAGS+=-Wall -I../../../sys -I/usr/src/sys -BINMODE=500 -BINOWN= root -MAN8= dpt_sysinfo.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/dpt/dpt_sysinfo/dpt_sysinfo.8 b/usr.sbin/dpt/dpt_sysinfo/dpt_sysinfo.8 deleted file mode 100644 index f9d15301394b..000000000000 --- a/usr.sbin/dpt/dpt_sysinfo/dpt_sysinfo.8 +++ /dev/null @@ -1,3 +0,0 @@ -.\" Copyright (c) 1997 Simon Shapiro. All rights reserved. -.\" -.\" There is nothing here yet, but an empty file will not patch diff --git a/usr.sbin/dpt/dpt_sysinfo/dpt_sysinfo.c b/usr.sbin/dpt/dpt_sysinfo/dpt_sysinfo.c deleted file mode 100644 index 13cfef7880db..000000000000 --- a/usr.sbin/dpt/dpt_sysinfo/dpt_sysinfo.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (c) 1997 by Simon Shapiro - * All Rights Reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification, immediately at the beginning of the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* dpt_ctlinfo.c: Dunp a DPT HBA Information Block */ - -#ident "$Id: dpt_ctlinfo.c,v 1.1 1998/01/22 23:32:27 ShimonR Exp ShimonR $" - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <sys/time.h> -#include <sys/stat.h> -#include <sys/queue.h> -#include <sys/ioctl.h> -#include <scsi/scsi_all.h> -#include <scsi/scsi_message.h> -#include <scsi/scsiconf.h> - -#define DPT_MEASURE_PERFORMANCE - -#include <sys/dpt.h> - - -int -main(int argc, char **argv, char **argp) -{ - eata_pt_t pass_thru; - dpt_sysinfo_t sysinfo; - - int result; - int fd; - int ndx; - - if ( (fd = open(argv[1], O_RDWR, S_IRUSR | S_IWUSR)) == -1 ) { - (void)fprintf(stderr, "%s ERROR: Failed to open \"%s\" - %s\n", - argv[0], argv[1], strerror(errno)); - exit(1); - } - - pass_thru.eataID[0] = 'E'; - pass_thru.eataID[1] = 'A'; - pass_thru.eataID[2] = 'T'; - pass_thru.eataID[3] = 'A'; - pass_thru.command = DPT_SYSINFO; - pass_thru.command_buffer = (u_int8_t *)&sysinfo; - - if ( (result = ioctl(fd, DPT_IOCTL_SEND, &pass_thru)) != 0 ) { - (void)fprintf(stderr, "%s ERROR: Failed to send IOCTL %x - %s\n", - argv[0], DPT_IOCTL_SEND, - strerror(errno)); - exit(1); - } - - (void)fprintf(stdout, "%x:%x:%d:", - sysinfo.drive0CMOS, sysinfo.drive1CMOS, sysinfo.numDrives); - - switch (sysinfo.processorFamily) { - case PROC_INTEL: - (void)fprintf(stdout, "Intel:"); - switch (sysinfo.processorType) { - case PROC_8086: - (void)fprintf(stdout, "8086:"); - break; - case PROC_286: - (void)fprintf(stdout, "80286:"); - break; - case PROC_386: - (void)fprintf(stdout, "i386:"); - break; - case PROC_486: - (void)fprintf(stdout, "80486:"); - break; - case PROC_PENTIUM: - (void)fprintf(stdout, "Pentium:"); - break; - case PROC_P6: - (void)fprintf(stdout, "Pentium-Pro:"); - break; - default: - (void)fprintf(stdout, "Unknown (%d):", sysinfo.processorType); - } - break; - case PROC_MOTOROLA: - (void)fprintf(stdout, "Motorola:"); - switch (sysinfo.processorType) { - case PROC_68000: - (void)fprintf(stdout, "M68000"); - break; - case PROC_68020: - (void)fprintf(stdout, "M68020"); - break; - case PROC_68030: - (void)fprintf(stdout, "M68030"); - break; - case PROC_68040: - (void)fprintf(stdout, "M68040"); - break; - default: - (void)fprintf(stdout, "Unknown (%d):", sysinfo.processorType); - } - break; - case PROC_MIPS4000: - (void)fprintf(stdout, "MIPS:Any:"); - break; - case PROC_ALPHA: - (void)fprintf(stdout, "Alpha:Any:"); - break; - default: - (void)fprintf(stdout, "Unknown (%d):Any:", sysinfo.processorFamily); - } - - (void)fprintf(stdout, "%d.%d.%d:", - sysinfo.smartROMMajorVersion, - sysinfo.smartROMMinorVersion, - sysinfo.smartROMRevision); - - (void)fprintf(stdout, "%c%c%c%c%c%c%c%c%c%c%c:", - (sysinfo.flags & SI_CMOS_Valid) ? '+' : '-', - (sysinfo.flags & SI_NumDrivesValid) ? '+' : '-', - (sysinfo.flags & SI_ProcessorValid) ? '+' : '-', - (sysinfo.flags & SI_MemorySizeValid) ? '+' : '-', - (sysinfo.flags & SI_DriveParamsValid) ? '+' : '-', - (sysinfo.flags & SI_SmartROMverValid) ? '+' : '-', - (sysinfo.flags & SI_OSversionValid) ? '+' : '-', - (sysinfo.flags & SI_OSspecificValid) ? '+' : '-', - (sysinfo.flags & SI_BusTypeValid) ? '+' : '-', - (sysinfo.flags & SI_ALL_VALID) ? '+' : '-', - (sysinfo.flags & SI_NO_SmartROM) ? '+' : '-'); - - (void)fprintf(stdout, "%d:", sysinfo.conventionalMemSize); - (void)fprintf(stdout, "%d:", sysinfo.extendedMemSize); - - switch (sysinfo.osType) { - case OS_DOS: - (void)fprintf(stdout, "DOS:"); - break; - case OS_WINDOWS: - (void)fprintf(stdout, "Win3.1:"); - break; - case OS_WINDOWS_NT: - (void)fprintf(stdout, "NT:"); - break; - case OS_OS2M: - (void)fprintf(stdout, "OS/2-std:"); - break; - case OS_OS2L: - (void)fprintf(stdout, "OS/2-LADDR:"); - break; - case OS_OS22x: - (void)fprintf(stdout, "OS/2-2.x:"); - break; - case OS_NW286: - (void)fprintf(stdout, "NetWare-286:"); - break; - case OS_NW386: - (void)fprintf(stdout, "NetWare-386:"); - break; - case OS_GEN_UNIX: - (void)fprintf(stdout, "Unix:"); - break; - case OS_SCO_UNIX: - (void)fprintf(stdout, "SCO Unix:"); - break; - case OS_ATT_UNIX: - (void)fprintf(stdout, "AT&T Unix:"); - break; - case OS_UNIXWARE: - (void)fprintf(stdout, "UnixWare:"); - break; - case OS_INT_UNIX: - (void)fprintf(stdout, "IAC Unix:"); - break; - case OS_SOLARIS: - (void)fprintf(stdout, "Solaris:"); - break; - case OS_QNX: - (void)fprintf(stdout, "Qnx:"); - break; - case OS_NEXTSTEP: - (void)fprintf(stdout, "NextStep:"); - break; - case OS_BANYAN: - (void)fprintf(stdout, "Banyan:"); - break; - case OS_OLIVETTI_UNIX: - (void)fprintf(stdout, "Olivetti Unix:"); - break; - case OS_FREEBSD: - (void)fprintf(stdout, "FreeBSD:"); - break; - case OS_OTHER: - (void)fprintf(stdout, "Other (%d):", sysinfo.osType); - break; - default: - (void)fprintf(stdout, "Unknown (%d):", sysinfo.osType); - } - - (void)fprintf(stdout, "%d.%d.%d.%d:", sysinfo.osMajorVersion, - sysinfo.osMinorVersion, sysinfo.osRevision, - sysinfo.osSubRevision); - - switch (sysinfo.busType) { - case HBA_BUS_ISA: - (void)fprintf(stdout, "ISA:"); - break; - case HBA_BUS_EISA: - (void)fprintf(stdout, "EISA:"); - break; - case HBA_BUS_PCI: - (void)fprintf(stdout, "PCI:"); - break; - default: - (void)fprintf(stdout, "Unknown (%d):", sysinfo.busType); - } - - for (ndx = 0; ndx < 16; ndx++) { - if (sysinfo.drives[ndx].cylinders == 0) - continue; - (void)fprintf(stdout, "d%dc%dh%ds%d:", ndx, - sysinfo.drives[ndx].cylinders, - sysinfo.drives[ndx].heads, - sysinfo.drives[ndx].sectors); - } - - (void)fprintf(stdout, "\n"); - - return(0); -} diff --git a/usr.sbin/pccard/pccardc/rdattr.c b/usr.sbin/pccard/pccardc/rdattr.c deleted file mode 100644 index 8d28ed788a9d..000000000000 --- a/usr.sbin/pccard/pccardc/rdattr.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 1995 Andrew McRae. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <pccard/cardinfo.h> - -int -rdattr_main(argc, argv) - int argc; - char *argv[]; -{ - int i, reg, length; - char name[64]; - u_char *buf; - int fd; - off_t offs; - - if (argc != 4) { - fprintf(stderr, "usage: %s rdattr slot offs length\n", argv[0]); - exit(1); - } - sprintf(name, CARD_DEVICE, atoi(argv[1])); - fd = open(name, O_RDONLY); - if (fd < 0) { - perror(name); - exit(1); - } - reg = MDF_ATTR; - if (ioctl(fd, PIOCRWFLAG, ®)) { - perror("ioctl (PIOCRWFLAG)"); - exit(1); - } - if (sscanf(argv[2], "%x", ®) != 1 || - sscanf(argv[3], "%x", &length) != 1) { - fprintf(stderr, "arg error\n"); - exit(1); - } - offs = reg; - if ((buf = malloc(length)) == 0) { - perror(name); - exit(1); - } - lseek(fd, offs, SEEK_SET); - if (read(fd, buf, length) != length) { - perror(name); - exit(1); - } - for (i = 0; i < length; i++) { - if (i % 16 == 0) { - printf("%04x: ", (int) offs + i); - } - printf("%02x ", buf[i]); - if (i % 16 == 15) { - printf("\n"); - } - } - if (i % 16 != 0) { - printf("\n"); - } - return 0; -} diff --git a/usr.sbin/pccard/pccardd/pccardd.c b/usr.sbin/pccard/pccardd/pccardd.c deleted file mode 100644 index 3525fac9822a..000000000000 --- a/usr.sbin/pccard/pccardd/pccardd.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 1995 Andrew McRae. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static const char rcsid[] = - "$Id: pccardd.c,v 1.1 1998/02/27 08:19:25 hosokawa Exp $"; -#endif /* not lint */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <fcntl.h> -#include <unistd.h> -#define EXTERN -#include "cardd.h" - -char *config_file = "/etc/pccard.conf"; - -/* - * mainline code for cardd - */ -int -main(int argc, char *argv[]) -{ - struct slot *slots, *sp; - int count, dodebug = 0; - int doverbose = 0; - - while ((count = getopt(argc, argv, ":dvf:")) != -1) { - switch (count) { - case 'd': - setbuf(stdout, 0); - setbuf(stderr, 0); - dodebug = 1; - break; - case 'v': - doverbose = 1; - break; - case 'f': - config_file = optarg; - break; - case ':': - die("no config file argument"); - break; - case '?': - die("illegal option"); - break; - } - } -#ifdef DEBUG - dodebug = 1; -#endif - io_avail = bit_alloc(IOPORTS); /* Only supports ISA ports */ - - /* Mem allocation done in MEMUNIT units. */ - mem_avail = bit_alloc(MEMBLKS); - readfile(config_file); - if (doverbose) - dump_config_file(); - log_setup(); - if (!dodebug) - if (daemon(0, 0)) - die("fork failed"); - slots = readslots(); - if (slots == 0) - die("no PC-CARD slots"); - logmsg("pccardd started", NULL); - for (;;) { - fd_set mask; - FD_ZERO(&mask); - for (sp = slots; sp; sp = sp->next) - FD_SET(sp->fd, &mask); - count = select(32, 0, 0, &mask, 0); - if (count == -1) { - logerr("select"); - continue; - } - if (count) - for (sp = slots; sp; sp = sp->next) - if (FD_ISSET(sp->fd, &mask)) - slot_change(sp); - } -} diff --git a/usr.sbin/pppd/cbcp.c b/usr.sbin/pppd/cbcp.c deleted file mode 100644 index db939baa6317..000000000000 --- a/usr.sbin/pppd/cbcp.c +++ /dev/null @@ -1,430 +0,0 @@ -/* - * cbcp - Call Back Configuration Protocol. - * - * Copyright (c) 1995 Pedro Roque Marques - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by Pedro Roque Marques. The name of the author may not be used to - * endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -static char rcsid[] = "$Id$"; -#endif - -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <sys/time.h> -#include <syslog.h> - -#include "pppd.h" -#include "cbcp.h" -#include "fsm.h" -#include "lcp.h" -#include "ipcp.h" - -/* - * Protocol entry points. - */ -static void cbcp_init __P((int unit)); -static void cbcp_open __P((int unit)); -static void cbcp_lowerup __P((int unit)); -static void cbcp_input __P((int unit, u_char *pkt, int len)); -static void cbcp_protrej __P((int unit)); -static int cbcp_printpkt __P((u_char *pkt, int len, - void (*printer) __P((void *, char *, ...)), - void *arg)); - -struct protent cbcp_protent = { - PPP_CBCP, - cbcp_init, - cbcp_input, - cbcp_protrej, - cbcp_lowerup, - NULL, - cbcp_open, - NULL, - cbcp_printpkt, - NULL, - 0, - "CBCP", - NULL, - NULL, - NULL -}; - -cbcp_state cbcp[NUM_PPP]; - -/* internal prototypes */ - -static void cbcp_recvreq __P((cbcp_state *us, char *pckt, int len)); -static void cbcp_resp __P((cbcp_state *us)); -static void cbcp_up __P((cbcp_state *us)); -static void cbcp_recvack __P((cbcp_state *us, char *pckt, int len)); -static void cbcp_send __P((cbcp_state *us, u_char code, u_char *buf, int len)); - -/* init state */ -static void -cbcp_init(iface) - int iface; -{ - cbcp_state *us; - - us = &cbcp[iface]; - memset(us, 0, sizeof(cbcp_state)); - us->us_unit = iface; - us->us_type |= (1 << CB_CONF_NO); -} - -/* lower layer is up */ -static void -cbcp_lowerup(iface) - int iface; -{ - cbcp_state *us = &cbcp[iface]; - - syslog(LOG_DEBUG, "cbcp_lowerup"); - syslog(LOG_DEBUG, "want: %d", us->us_type); - - if (us->us_type == CB_CONF_USER) - syslog(LOG_DEBUG, "phone no: %s", us->us_number); -} - -static void -cbcp_open(unit) - int unit; -{ - syslog(LOG_DEBUG, "cbcp_open"); -} - -/* process an incomming packet */ -static void -cbcp_input(unit, inpacket, pktlen) - int unit; - u_char *inpacket; - int pktlen; -{ - u_char *inp; - u_char code, id; - u_short len; - - cbcp_state *us = &cbcp[unit]; - - inp = inpacket; - - if (pktlen < CBCP_MINLEN) { - syslog(LOG_ERR, "CBCP packet is too small"); - return; - } - - GETCHAR(code, inp); - GETCHAR(id, inp); - GETSHORT(len, inp); - -#if 0 - if (len > pktlen) { - syslog(LOG_ERR, "CBCP packet: invalid length"); - return; - } -#endif - - len -= CBCP_MINLEN; - - switch(code) { - case CBCP_REQ: - us->us_id = id; - cbcp_recvreq(us, inp, len); - break; - - case CBCP_RESP: - syslog(LOG_DEBUG, "CBCP_RESP received"); - break; - - case CBCP_ACK: - if (id != us->us_id) - syslog(LOG_DEBUG, "id doesn't match: expected %d recv %d", - us->us_id, id); - - cbcp_recvack(us, inp, len); - break; - - default: - break; - } -} - -/* protocol was rejected by foe */ -void cbcp_protrej(int iface) -{ -} - -char *cbcp_codenames[] = { - "Request", "Response", "Ack" -}; - -char *cbcp_optionnames[] = { - "NoCallback", - "UserDefined", - "AdminDefined", - "List" -}; - -/* pretty print a packet */ -static int -cbcp_printpkt(p, plen, printer, arg) - u_char *p; - int plen; - void (*printer) __P((void *, char *, ...)); - void *arg; -{ - int code, opt, id, len, olen, delay; - u_char *pstart; - - if (plen < HEADERLEN) - return 0; - pstart = p; - GETCHAR(code, p); - GETCHAR(id, p); - GETSHORT(len, p); - if (len < HEADERLEN || len > plen) - return 0; - - if (code >= 1 && code <= sizeof(cbcp_codenames) / sizeof(char *)) - printer(arg, " %s", cbcp_codenames[code-1]); - else - printer(arg, " code=0x%x", code); - - printer(arg, " id=0x%x", id); - len -= HEADERLEN; - - switch (code) { - case CBCP_REQ: - case CBCP_RESP: - case CBCP_ACK: - while(len >= 2) { - GETCHAR(opt, p); - GETCHAR(olen, p); - - if (olen < 2 || olen > len) { - break; - } - - printer(arg, " <"); - len -= olen; - - if (opt >= 1 && opt <= sizeof(cbcp_optionnames) / sizeof(char *)) - printer(arg, " %s", cbcp_optionnames[opt-1]); - else - printer(arg, " option=0x%x", opt); - - if (olen > 2) { - GETCHAR(delay, p); - printer(arg, " delay = %d", delay); - } - - if (olen > 3) { - int addrt; - char str[256]; - - GETCHAR(addrt, p); - memcpy(str, p, olen - 4); - str[olen - 4] = 0; - printer(arg, " number = %s", str); - } - printer(arg, ">"); - break; - } - - default: - break; - } - - for (; len > 0; --len) { - GETCHAR(code, p); - printer(arg, " %.2x", code); - } - - return p - pstart; -} - -/* received CBCP request */ -static void -cbcp_recvreq(us, pckt, pcktlen) - cbcp_state *us; - char *pckt; - int pcktlen; -{ - u_char type, opt_len, delay, addr_type; - char address[256]; - int len = pcktlen; - - address[0] = 0; - - while (len) { - syslog(LOG_DEBUG, "length: %d", len); - - GETCHAR(type, pckt); - GETCHAR(opt_len, pckt); - - if (opt_len > 2) - GETCHAR(delay, pckt); - - us->us_allowed |= (1 << type); - - switch(type) { - case CB_CONF_NO: - syslog(LOG_DEBUG, "no callback allowed"); - break; - - case CB_CONF_USER: - syslog(LOG_DEBUG, "user callback allowed"); - if (opt_len > 4) { - GETCHAR(addr_type, pckt); - memcpy(address, pckt, opt_len - 4); - address[opt_len - 4] = 0; - if (address[0]) - syslog(LOG_DEBUG, "address: %s", address); - } - break; - - case CB_CONF_ADMIN: - syslog(LOG_DEBUG, "user admin defined allowed"); - break; - - case CB_CONF_LIST: - break; - } - len -= opt_len; - } - - cbcp_resp(us); -} - -static void -cbcp_resp(us) - cbcp_state *us; -{ - u_char cb_type; - u_char buf[256]; - u_char *bufp = buf; - int len = 0; - - cb_type = us->us_allowed & us->us_type; - syslog(LOG_DEBUG, "cbcp_resp cb_type=%d", cb_type); - -#if 0 - if (!cb_type) - lcp_down(us->us_unit); -#endif - - if (cb_type & ( 1 << CB_CONF_USER ) ) { - syslog(LOG_DEBUG, "cbcp_resp CONF_USER"); - PUTCHAR(CB_CONF_USER, bufp); - len = 3 + 1 + strlen(us->us_number) + 1; - PUTCHAR(len , bufp); - PUTCHAR(5, bufp); /* delay */ - PUTCHAR(1, bufp); - BCOPY(us->us_number, bufp, strlen(us->us_number) + 1); - cbcp_send(us, CBCP_RESP, buf, len); - return; - } - - if (cb_type & ( 1 << CB_CONF_ADMIN ) ) { - syslog(LOG_DEBUG, "cbcp_resp CONF_ADMIN"); - PUTCHAR(CB_CONF_ADMIN, bufp); - len = 3 + 1; - PUTCHAR(len , bufp); - PUTCHAR(5, bufp); /* delay */ - PUTCHAR(0, bufp); - cbcp_send(us, CBCP_RESP, buf, len); - return; - } - - if (cb_type & ( 1 << CB_CONF_NO ) ) { - syslog(LOG_DEBUG, "cbcp_resp CONF_NO"); - PUTCHAR(CB_CONF_NO, bufp); - len = 3; - PUTCHAR(len , bufp); - PUTCHAR(0, bufp); - cbcp_send(us, CBCP_RESP, buf, len); - (*ipcp_protent.open)(us->us_unit); - return; - } -} - -static void -cbcp_send(us, code, buf, len) - cbcp_state *us; - u_char code; - u_char *buf; - int len; -{ - u_char *outp; - int outlen; - - outp = outpacket_buf; - - outlen = 4 + len; - - MAKEHEADER(outp, PPP_CBCP); - - PUTCHAR(code, outp); - PUTCHAR(us->us_id, outp); - PUTSHORT(outlen, outp); - - if (len) - BCOPY(buf, outp, len); - - output(us->us_unit, outpacket_buf, outlen + PPP_HDRLEN); -} - -static void -cbcp_recvack(us, pckt, len) - cbcp_state *us; - char *pckt; - int len; -{ - u_char type, delay, addr_type; - int opt_len; - char address[256]; - - if (len) { - GETCHAR(type, pckt); - GETCHAR(opt_len, pckt); - - if (opt_len > 2) - GETCHAR(delay, pckt); - - if (opt_len > 4) { - GETCHAR(addr_type, pckt); - memcpy(address, pckt, opt_len - 4); - address[opt_len - 4] = 0; - if (address[0]) - syslog(LOG_DEBUG, "peer will call: %s", address); - } - } - - cbcp_up(us); -} - -extern int persist; - -/* ok peer will do callback */ -static void -cbcp_up(us) - cbcp_state *us; -{ - persist = 0; - lcp_close(0, "Call me back, please"); -} diff --git a/usr.sbin/pppd/cbcp.h b/usr.sbin/pppd/cbcp.h deleted file mode 100644 index c2ab3f68991f..000000000000 --- a/usr.sbin/pppd/cbcp.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef CBCP_H -#define CBCP_H - -typedef struct cbcp_state { - int us_unit; /* Interface unit number */ - u_char us_id; /* Current id */ - u_char us_allowed; - int us_type; - char *us_number; /* Telefone Number */ -} cbcp_state; - -extern cbcp_state cbcp[]; - -extern struct protent cbcp_protent; - -#define CBCP_MINLEN 4 - -#define CBCP_REQ 1 -#define CBCP_RESP 2 -#define CBCP_ACK 3 - -#define CB_CONF_NO 1 -#define CB_CONF_USER 2 -#define CB_CONF_ADMIN 3 -#define CB_CONF_LIST 4 -#endif diff --git a/usr.sbin/pppd/chap_ms.h b/usr.sbin/pppd/chap_ms.h deleted file mode 100644 index 2fa7c93dc304..000000000000 --- a/usr.sbin/pppd/chap_ms.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * chap.h - Challenge Handshake Authentication Protocol definitions. - * - * Copyright (c) 1995 Eric Rosenquist, Strata Software Limited. - * http://www.strataware.com/ - * - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by Eric Rosenquist. The name of the author may not be used to - * endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * $Id: chap_ms.h,v 1.3 1997/08/19 17:52:35 peter Exp $ - */ - -#ifndef __CHAPMS_INCLUDE__ - -#define MD4_SIGNATURE_SIZE 16 /* 16 bytes in a MD4 message digest */ -#define MAX_NT_PASSWORD 256 /* Maximum number of (Unicode) chars in an NT password */ - -void ChapMS __P((chap_state *, char *, int, char *, int)); - -#define __CHAPMS_INCLUDE__ -#endif /* __CHAPMS_INCLUDE__ */ diff --git a/usr.sbin/pppd/demand.c b/usr.sbin/pppd/demand.c deleted file mode 100644 index af1a8bbc46c0..000000000000 --- a/usr.sbin/pppd/demand.c +++ /dev/null @@ -1,348 +0,0 @@ -/* - * demand.c - Support routines for demand-dialling. - * - * Copyright (c) 1993 The Australian National University. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the Australian National University. The name of the University - * may not be used to endorse or promote products derived from this - * software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - */ - -#ifndef lint -static char rcsid[] = "$Id: demand.c,v 1.3 1997/08/19 17:52:36 peter Exp $"; -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <errno.h> -#include <fcntl.h> -#include <syslog.h> -#include <netdb.h> -#include <sys/param.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/time.h> -#include <sys/resource.h> -#include <sys/stat.h> -#include <sys/socket.h> -#ifdef PPP_FILTER -#include <net/if.h> -#include <net/bpf.h> -#include <pcap.h> -#endif - -#include "pppd.h" -#include "fsm.h" -#include "ipcp.h" -#include "lcp.h" - -char *frame; -int framelen; -int framemax; -int escape_flag; -int flush_flag; -int fcs; - -struct packet { - int length; - struct packet *next; - unsigned char data[1]; -}; - -struct packet *pend_q; -struct packet *pend_qtail; - -static int active_packet __P((unsigned char *, int)); - -/* - * demand_conf - configure the interface for doing dial-on-demand. - */ -void -demand_conf() -{ - int i; - struct protent *protp; - -/* framemax = lcp_allowoptions[0].mru; - if (framemax < PPP_MRU) */ - framemax = PPP_MRU; - framemax += PPP_HDRLEN + PPP_FCSLEN; - frame = malloc(framemax); - if (frame == NULL) - novm("demand frame"); - framelen = 0; - pend_q = NULL; - escape_flag = 0; - flush_flag = 0; - fcs = PPP_INITFCS; - - ppp_send_config(0, PPP_MRU, (u_int32_t) 0, 0, 0); - ppp_recv_config(0, PPP_MRU, (u_int32_t) 0, 0, 0); - -#ifdef PPP_FILTER - set_filters(&pass_filter, &active_filter); -#endif - - /* - * Call the demand_conf procedure for each protocol that's got one. - */ - for (i = 0; (protp = protocols[i]) != NULL; ++i) - if (protp->enabled_flag && protp->demand_conf != NULL) - if (!((*protp->demand_conf)(0))) - die(1); -} - - -/* - * demand_block - set each network protocol to block further packets. - */ -void -demand_block() -{ - int i; - struct protent *protp; - - for (i = 0; (protp = protocols[i]) != NULL; ++i) - if (protp->enabled_flag && protp->demand_conf != NULL) - sifnpmode(0, protp->protocol & ~0x8000, NPMODE_QUEUE); - get_loop_output(); -} - -/* - * demand_discard - set each network protocol to discard packets - * with an error. - */ -void -demand_discard() -{ - struct packet *pkt, *nextpkt; - int i; - struct protent *protp; - - for (i = 0; (protp = protocols[i]) != NULL; ++i) - if (protp->enabled_flag && protp->demand_conf != NULL) - sifnpmode(0, protp->protocol & ~0x8000, NPMODE_ERROR); - get_loop_output(); - - /* discard all saved packets */ - for (pkt = pend_q; pkt != NULL; pkt = nextpkt) { - nextpkt = pkt->next; - free(pkt); - } - pend_q = NULL; - framelen = 0; - flush_flag = 0; - escape_flag = 0; - fcs = PPP_INITFCS; -} - -/* - * demand_unblock - set each enabled network protocol to pass packets. - */ -void -demand_unblock() -{ - int i; - struct protent *protp; - - for (i = 0; (protp = protocols[i]) != NULL; ++i) - if (protp->enabled_flag && protp->demand_conf != NULL) - sifnpmode(0, protp->protocol & ~0x8000, NPMODE_PASS); -} - -/* - * FCS lookup table as calculated by genfcstab. - */ -static u_short fcstab[256] = { - 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, - 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, - 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, - 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, - 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, - 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, - 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, - 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, - 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, - 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, - 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, - 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, - 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, - 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, - 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, - 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, - 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, - 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, - 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, - 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, - 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, - 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, - 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, - 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, - 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, - 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, - 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, - 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, - 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, - 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, - 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, - 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 -}; - -/* - * loop_chars - process characters received from the loopback. - * Calls loop_frame when a complete frame has been accumulated. - * Return value is 1 if we need to bring up the link, 0 otherwise. - */ -int -loop_chars(p, n) - unsigned char *p; - int n; -{ - int c, rv; - - rv = 0; - for (; n > 0; --n) { - c = *p++; - if (c == PPP_FLAG) { - if (!escape_flag && !flush_flag - && framelen > 2 && fcs == PPP_GOODFCS) { - framelen -= 2; - if (loop_frame(frame, framelen)) - rv = 1; - } - framelen = 0; - flush_flag = 0; - escape_flag = 0; - fcs = PPP_INITFCS; - continue; - } - if (flush_flag) - continue; - if (escape_flag) { - c ^= PPP_TRANS; - escape_flag = 0; - } else if (c == PPP_ESCAPE) { - escape_flag = 1; - continue; - } - if (framelen >= framemax) { - flush_flag = 1; - continue; - } - frame[framelen++] = c; - fcs = PPP_FCS(fcs, c); - } - return rv; -} - -/* - * loop_frame - given a frame obtained from the loopback, - * decide whether to bring up the link or not, and, if we want - * to transmit this frame later, put it on the pending queue. - * Return value is 1 if we need to bring up the link, 0 otherwise. - * We assume that the kernel driver has already applied the - * pass_filter, so we won't get packets it rejected. - * We apply the active_filter to see if we want this packet to - * bring up the link. - */ -int -loop_frame(frame, len) - unsigned char *frame; - int len; -{ - struct packet *pkt; - - /* log_packet(frame, len, "from loop: ", LOG_DEBUG); */ - if (len < PPP_HDRLEN) - return 0; - if ((PPP_PROTOCOL(frame) & 0x8000) != 0) - return 0; /* shouldn't get any of these anyway */ - if (!active_packet(frame, len)) - return 0; - - pkt = (struct packet *) malloc(sizeof(struct packet) + len); - if (pkt != NULL) { - pkt->length = len; - pkt->next = NULL; - memcpy(pkt->data, frame, len); - if (pend_q == NULL) - pend_q = pkt; - else - pend_qtail->next = pkt; - pend_qtail = pkt; - } - return 1; -} - -/* - * demand_rexmit - Resend all those frames which we got via the - * loopback, now that the real serial link is up. - */ -void -demand_rexmit(proto) - int proto; -{ - struct packet *pkt, *prev, *nextpkt; - - prev = NULL; - pkt = pend_q; - pend_q = NULL; - for (; pkt != NULL; pkt = nextpkt) { - nextpkt = pkt->next; - if (PPP_PROTOCOL(pkt->data) == proto) { - output(0, pkt->data, pkt->length); - free(pkt); - } else { - if (prev == NULL) - pend_q = pkt; - else - prev->next = pkt; - prev = pkt; - } - } - pend_qtail = prev; - if (prev != NULL) - prev->next = NULL; -} - -/* - * Scan a packet to decide whether it is an "active" packet, - * that is, whether it is worth bringing up the link for. - */ -static int -active_packet(p, len) - unsigned char *p; - int len; -{ - int proto, i; - struct protent *protp; - - if (len < PPP_HDRLEN) - return 0; - proto = PPP_PROTOCOL(p); -#ifdef PPP_FILTER - if (active_filter.bf_len != 0 - && bpf_filter(active_filter.bf_insns, frame, len, len) == 0) - return 0; -#endif - for (i = 0; (protp = protocols[i]) != NULL; ++i) { - if (protp->protocol < 0xC000 && (protp->protocol & ~0x8000) == proto) { - if (!protp->enabled_flag) - return 0; - if (protp->active_pkt == NULL) - return 1; - return (*protp->active_pkt)(p, len); - } - } - return 0; /* not a supported protocol !!?? */ -} diff --git a/usr.sbin/pppd/ipxcp.h b/usr.sbin/pppd/ipxcp.h deleted file mode 100644 index 139a7260b300..000000000000 --- a/usr.sbin/pppd/ipxcp.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * ipxcp.h - IPX Control Protocol definitions. - * - * Copyright (c) 1989 Carnegie Mellon University. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by Carnegie Mellon University. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * $Id$ - */ - -/* - * Options. - */ -#define IPX_NETWORK_NUMBER 1 /* IPX Network Number */ -#define IPX_NODE_NUMBER 2 -#define IPX_COMPRESSION_PROTOCOL 3 -#define IPX_ROUTER_PROTOCOL 4 -#define IPX_ROUTER_NAME 5 -#define IPX_COMPLETE 6 - -/* Values for the router protocol */ -#define IPX_NONE 0 -#define RIP_SAP 2 -#define NLSP 4 - -typedef struct ipxcp_options { - int neg_node : 1; /* Negotiate IPX node number? */ - int req_node : 1; /* Ask peer to send IPX node number? */ - - int neg_nn : 1; /* Negotiate IPX network number? */ - int req_nn : 1; /* Ask peer to send IPX network number */ - - int neg_name : 1; /* Negotiate IPX router name */ - int neg_complete : 1; /* Negotiate completion */ - int neg_router : 1; /* Negotiate IPX router number */ - - int accept_local : 1; /* accept peer's value for ournode */ - int accept_remote : 1; /* accept peer's value for hisnode */ - int accept_network : 1; /* accept network number */ - - int tried_nlsp : 1; /* I have suggested NLSP already */ - int tried_rip : 1; /* I have suggested RIP/SAP already */ - - u_int32_t his_network; /* base network number */ - u_int32_t our_network; /* our value for network number */ - u_int32_t network; /* the final network number */ - - u_char his_node[6]; /* peer's node number */ - u_char our_node[6]; /* our node number */ - u_char name [48]; /* name of the router */ - int router; /* routing protocol */ -} ipxcp_options; - -extern fsm ipxcp_fsm[]; -extern ipxcp_options ipxcp_wantoptions[]; -extern ipxcp_options ipxcp_gotoptions[]; -extern ipxcp_options ipxcp_allowoptions[]; -extern ipxcp_options ipxcp_hisoptions[]; - -extern struct protent ipxcp_protent; diff --git a/usr.sbin/vidcontrol/decode.h b/usr.sbin/vidcontrol/decode.h deleted file mode 100644 index b939af4f369e..000000000000 --- a/usr.sbin/vidcontrol/decode.h +++ /dev/null @@ -1 +0,0 @@ -int decode(FILE *fd, char *buffer); |