[comp.sources.amiga] v90i134: rcs patch - unofficial patch to revision control system diff, Part01/01

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (04/11/90)

Submitted-by: acs@pccuts.pcc.amdahl.com (Tony Sumrall)
Posting-number: Volume 90, Issue 134
Archive-name: unix/rcs/upatch01/part01

[ The original sources were posted in 1989.  Check a comp.sources.amiga
  archive site if you need them.  ...tad ]

This shell archive contains patches for the diff program associated with
RCS for the Amiga (Fish disk 281, comp.sources.amiga postings v89i216
through v89i229) and address 2 problems:

1) an attempt to compare a file with a non-existent file would elicit an
   error message with null text
2) if one or more of the arguments to diff was a device or an assigned
   name, diff would use a / to separate filename components instead of
   using a :.

To apply these patches:

* remove all lines above the first line beginning with #,
* run through /bin/sh or a suitable unshar program,
* copy the 2 resulting files to a directory containing the source for
  diff,
* using patch from Fish disk # 296 or patch version 2.0 from Fish disk
  # 129, say:

       patch < amiga1.c.diffs           and then
       patch < diff.c.diffs

* compile the new diff following the instructions which were packaged with
  the original version.

I've been using diff with these patches applied for quite some time with
no ill effects.
--
Tony Sumrall   responsible for VT100 2.9A (and 2.9 and 2.8a and 2.8 and...)
acs@pccuts.pcc.amdahl.com <=> amdahl!pccuts!acs

[ Opinions expressed herein are the author's and should not be construed
  to reflect the views of Amdahl Corp. ]

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  amiga1.c.diffs diff.c.diffs
# Wrapped by tadguy@xanth on Tue Apr 10 17:54:34 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'amiga1.c.diffs' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'amiga1.c.diffs'\"
else
echo shar: Extracting \"'amiga1.c.diffs'\" \(592 characters\)
sed "s/^X//" >'amiga1.c.diffs' <<'END_OF_FILE'
XIndex: amiga1.c
X*** Oamiga1.c	Thu Mar 22 09:24:29 1990
X--- amiga1.c	Thu Mar  8 21:52:50 1990
X***************
X*** 47,54 ****
X  	long l;
X  	struct FileInfoBlock *fp,*malloc();
X  
X! 	if ((l=Lock(name, ACCESS_READ)) == 0)
X  		return(-1);
X  	fp = malloc(sizeof(struct FileInfoBlock));
X  	Examine(l, fp);
X  	buf->st_attr = fp->fib_Protection;
X--- 47,56 ----
X  	long l;
X  	struct FileInfoBlock *fp,*malloc();
X  
X! 	if ((l=Lock(name, ACCESS_READ)) == 0) {
X! 		errno = ENOENT;
X  		return(-1);
X+ 	}
X  	fp = malloc(sizeof(struct FileInfoBlock));
X  	Examine(l, fp);
X  	buf->st_attr = fp->fib_Protection;
END_OF_FILE
if test 592 -ne `wc -c <'amiga1.c.diffs'`; then
    echo shar: \"'amiga1.c.diffs'\" unpacked with wrong size!
fi
# end of 'amiga1.c.diffs'
fi
if test -f 'diff.c.diffs' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'diff.c.diffs'\"
else
echo shar: Extracting \"'diff.c.diffs'\" \(3571 characters\)
sed "s/^X//" >'diff.c.diffs' <<'END_OF_FILE'
XIndex: diff.c
X*** Odiff.c	Thu Mar 22 09:24:29 1990
X--- diff.c	Sun Mar 11 12:01:14 1990
X***************
X*** 378,386 ****
X    if (name1 == 0)
X      name1 = name0;
X  
X!   inf[0].name = dir0 == 0 ? name0 : concat (dir0, "/", name0);
X!   inf[1].name = dir1 == 0 ? name1 : concat (dir1, "/", name1);
X  
X    /* Stat the files.  Record whether they are directories.
X       Record in stat_result whether stat fails.  */
X  
X--- 378,413 ----
X    if (name1 == 0)
X      name1 = name0;
X  
X!   if(dir0 == 0)
X!     inf[0].name = name0;
X!   else
X!     {
X!       if(strrchr(dir0, '/'))
X! 	inf[0].name = concat(dir0, "/", name0);
X!       else
X! 	{
X! 	  if(*(dir0 + strlen(dir0) - 1) == ':')
X! 	    inf[0].name = concat(dir0, "", name0);
X! 	  else
X! 	    inf[0].name = concat(dir0, "/", name0);
X! 	}
X!     }
X  
X+   if(dir1 == 0)
X+     inf[1].name = name1;
X+   else
X+     {
X+       if(strrchr(dir1, '/'))
X+ 	inf[1].name = concat(dir1, "/", name1);
X+       else
X+ 	{
X+ 	  if(*(dir1 + strlen(dir1) - 1) == ':')
X+ 	    inf[1].name = concat(dir1, "", name1);
X+ 	  else
X+ 	    inf[1].name = concat(dir1, "/", name1);
X+ 	}
X+     }
X+ 
X    /* Stat the files.  Record whether they are directories.
X       Record in stat_result whether stat fails.  */
X  
X***************
X*** 402,413 ****
X  	      perror_with_name (filename);
X  	      errorcount = 1;
X  	    }
X! 	  else
X  #ifdef AMIGA
X  	    inf[i].dir_p = (inf[i].stat.st_type > 0);
X  #else
X  	    inf[i].dir_p = (S_IFDIR == (inf[i].stat.st_mode & S_IFMT));
X  #endif
X  	}
X      }
X  
X--- 429,441 ----
X  	      perror_with_name (filename);
X  	      errorcount = 1;
X  	    }
X! 	  else {
X  #ifdef AMIGA
X  	    inf[i].dir_p = (inf[i].stat.st_type > 0);
X  #else
X  	    inf[i].dir_p = (S_IFDIR == (inf[i].stat.st_mode & S_IFMT));
X  #endif
X+ 	  }
X  	}
X      }
X  
X***************
X*** 427,432 ****
X--- 455,461 ----
X  
X    if (name0 == 0)
X      inf[0].dir_p = inf[1].dir_p;
X+ 
X    if (name1 == 0)
X      inf[1].dir_p = inf[0].dir_p;
X  
X***************
X*** 495,504 ****
X        int dir_arg = (inf[0].dir_p ? 0 : 1);
X        int fnm_arg = (inf[0].dir_p ? 1 : 0);
X        char *p = strrchr(inf[fnm_arg].name, '/');
X!       char *filename = concat (inf[dir_arg].name,  "/",
X! 			       (p ? p+1 : inf[fnm_arg].name));
X  
X  #ifdef AMIGA
X        inf[dir_arg].dir_p = (getfa(filename) == 1);
X        if (!inf[dir_arg].dir_p)
X          {
X--- 524,549 ----
X        int dir_arg = (inf[0].dir_p ? 0 : 1);
X        int fnm_arg = (inf[0].dir_p ? 1 : 0);
X        char *p = strrchr(inf[fnm_arg].name, '/');
X!       char *filename;
X  
X  #ifdef AMIGA
X+       char *tp = inf[dir_arg].name;
X+       int term = (*(tp + strlen(tp) - 1) == ':' ? 1 : 0);
X+ 
X+       if(!p) {
X+ 	  /* inf[dir_arg].name ends with a ':', a '/' or neither.  If it
X+ 	  ** ends with ':' then simply concat otherwise separate with a '/'.
X+ 	  ** Note that we also have to find out if there is a separator in the
X+ 	  ** filename, too so we know where to copy FROM when we create the new
X+ 	  ** filename.
X+ 	  */
X+ 	  char *p1 = strrchr(inf[fnm_arg].name, ':');
X+ 
X+ 	  filename = concat(inf[dir_arg].name, term ? "" : "/",
X+ 				p1 ? p1+1 : inf[fnm_arg].name);
X+       } else
X+ 	  filename = concat (inf[dir_arg].name,  term ? "" : "/", p+1);
X+ 			
X        inf[dir_arg].dir_p = (getfa(filename) == 1);
X        if (!inf[dir_arg].dir_p)
X          {
X***************
X*** 521,526 ****
X--- 566,573 ----
X  	  val = 2;
X  	}
X  #else
X+       filename = concat (inf[dir_arg].name,  "/",
X+ 			 (p ? p+1 : inf[fnm_arg].name));
X        inf[dir_arg].desc = open (filename, O_RDONLY, 0);
X  
X        if (0 > inf[dir_arg].desc)
END_OF_FILE
if test 3571 -ne `wc -c <'diff.c.diffs'`; then
    echo shar: \"'diff.c.diffs'\" unpacked with wrong size!
fi
# end of 'diff.c.diffs'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.