diff options
author | Thorsten Lockert <tholo@cvs.openbsd.org> | 1999-09-10 05:21:34 +0000 |
---|---|---|
committer | Thorsten Lockert <tholo@cvs.openbsd.org> | 1999-09-10 05:21:34 +0000 |
commit | 266781f9b0960e70692e00339adb15dbb50d8071 (patch) | |
tree | b04cdee1e040fbea0fd52fdbf3bc13c5ba0e5c40 /gnu/usr.bin/cvs | |
parent | 9c8d611dcb7b2503e40f35cdee447fd422c8d895 (diff) |
Integrate local changes
Diffstat (limited to 'gnu/usr.bin/cvs')
34 files changed, 345 insertions, 3404 deletions
diff --git a/gnu/usr.bin/cvs/Makefile.in b/gnu/usr.bin/cvs/Makefile.in index 970a5196745..7822dfeb0fa 100644 --- a/gnu/usr.bin/cvs/Makefile.in +++ b/gnu/usr.bin/cvs/Makefile.in @@ -89,7 +89,7 @@ DISTFILES = \ ChangeLog NEWS ChangeLog.zoo \ configure configure.in stamp-h.in config.h.in Makefile.in acconfig.h \ cvs-format.el mkinstalldirs install-sh \ - cvsnt.mak cvsnt.dsp \ + cvsnt.mak cvsnt.dsp cvsnt.dsw \ .cvsignore cvs.spec ### Subdirectories to run make in for the primary targets. @@ -99,7 +99,7 @@ USOURCE_SUBDIRS = lib @ZLIBSUBDIRS@ diff src INSTALL_MAN=man # All other subdirs: SUBDIRS = ${USOURCE_SUBDIRS} ${INSTALL_MAN} doc contrib tools \ - windows-NT os2 emx macintosh vms + windows-NT os2 emx vms # Only make TAGS/tags files in these directories. TSUBDIRS= src lib diff --git a/gnu/usr.bin/cvs/configure b/gnu/usr.bin/cvs/configure index 808d939b694..775d6b3c540 100644 --- a/gnu/usr.bin/cvs/configure +++ b/gnu/usr.bin/cvs/configure @@ -3731,7 +3731,7 @@ trap 'rm -fr `echo "Makefile lib/Makefile src/Makefile zlib/Makefile diff/Makefi man/Makefile tools/Makefile \ contrib/Makefile \ windows-NT/Makefile windows-NT/SCC/Makefile \ - os2/Makefile emx/Makefile macintosh/Makefile vms/Makefile \ + os2/Makefile emx/Makefile vms/Makefile \ stamp-h config.h src/options.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <<EOF @@ -3824,7 +3824,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile lib/Makefile src/Makefile zlib/Makefile d man/Makefile tools/Makefile \ contrib/Makefile \ windows-NT/Makefile windows-NT/SCC/Makefile \ - os2/Makefile emx/Makefile macintosh/Makefile vms/Makefile \ + os2/Makefile emx/Makefile vms/Makefile \ stamp-h"} EOF cat >> $CONFIG_STATUS <<\EOF diff --git a/gnu/usr.bin/cvs/configure.in b/gnu/usr.bin/cvs/configure.in index e1550fed466..83ecf1033e2 100644 --- a/gnu/usr.bin/cvs/configure.in +++ b/gnu/usr.bin/cvs/configure.in @@ -402,5 +402,5 @@ AC_OUTPUT(Makefile lib/Makefile src/Makefile zlib/Makefile diff/Makefile doc/Mak man/Makefile tools/Makefile \ contrib/Makefile \ windows-NT/Makefile windows-NT/SCC/Makefile \ - os2/Makefile emx/Makefile macintosh/Makefile vms/Makefile \ + os2/Makefile emx/Makefile vms/Makefile \ stamp-h) diff --git a/gnu/usr.bin/cvs/diff/Makefile.in b/gnu/usr.bin/cvs/diff/Makefile.in index effc1cdbfd2..c4d253aca22 100644 --- a/gnu/usr.bin/cvs/diff/Makefile.in +++ b/gnu/usr.bin/cvs/diff/Makefile.in @@ -43,7 +43,8 @@ SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c context.c ed.c \ diffrun.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 diagmeet.note +DISTFILES = $(SOURCES) ChangeLog build_diff.com Makefile.in diagmeet.note \ + libdiff.dsp .cvsignore all: libdiff.a diff --git a/gnu/usr.bin/cvs/macintosh/AE_example.pl b/gnu/usr.bin/cvs/macintosh/AE_example.pl deleted file mode 100644 index 4fa4ccf69e9..00000000000 --- a/gnu/usr.bin/cvs/macintosh/AE_example.pl +++ /dev/null @@ -1,95 +0,0 @@ -# -# This fragment illustrates how to invoke MacCVS via AppleEvents and pass environment -# variables to MacCVS. Not all CVS environment variables make sense for MacOS. This -# fragment also illustrates the default result handling mode, which is to put the info on -# a SIOUX console. -# - -&MacPerl'DoAppleScript(<<ENDIT); -tell application "Data:Mike:Projects:cvs-1.8.6:macintosh:MacCVS" - do script { "status" } environment { "CVSROOT", "ladwig\@manic:/projects/sdt/repository/eM2" } -end tell -ENDIT - -exit(0); - - - -# -# This fragment illustrates how to invoke MacCVS change its directory prior to executing -# the CVS command. This is akin to being in a directory when you invoke CVS. -# - -&MacPerl'DoAppleScript(<<ENDIT); -tell application "Data:Mike:Projects:cvs-1.8.6:macintosh:MacCVS" - do script { "status" } environment { "CVSROOT", "ladwig\@manic:/projects/sdt/repository/eM2" } pathway "OS:Workspace:eM:src:daemon" -end tell -ENDIT - -exit(0); - - - -# -# This fragment illustrates how to get MacCVS to return results via AppleEvents. -# Note: If you add "NoLineBuffer True" after the "Mode AE", each individual line -# of results will be returned in a separate AppleEvent. -# - -use Mac::AppleEvents; - -AEInstallEventHandler("MCVS", "DATA", "MacCVSData", 0); - -&MacPerl'DoAppleScript(<<ENDIT); -tell application "Data:Mike:Projects:cvs-1.8.6:macintosh:MacCVS.PPC" - do script { "-help add" } environment { "CVSROOT", "ladwig\@manic:/projects/sdt/repository/sdt" } Mode AE -end tell -ENDIT - -$done = 0; -$in = 0; -while( $done = 0 ) { sleep(1);} -print "QUITTING!\n"; - -AERemoveEventHandler ("MCVS", "DATA"); -exit(0); - -sub MacCVSData { - my($event) = @_; - - print "**** MCVS/Data Handler called\n"; - - $rDesc = AEGetParamDesc($event, "----"); - if( $rDesc ) - { - $data = AEPrint($rDesc); - chop $data; $data = substr($data, 1); - print "---- data = <$data> \n"; - } - AEDisposeDesc($rDesc); - - $rDesc = AEGetParamDesc($event, "DONE"); - if( $rDesc ) - { print "!!!! DONE\n"; $done = 1; AEDisposeDesc($rDesc); } - - print "Exiting MCVS/Data Handler ****\n"; - return 0; -} - - - - - -# -# This fragment illustrates how to have MacCVS save the results to a file in your MacOS -# filesystem. -# - -&MacPerl'DoAppleScript(<<ENDIT); -tell application "Data:Projects:cvs-1.8.6:macintosh:MacCVS" - do script { "-d ladwig\@manic:/projects/sdt/repository/eM2", "status" } mode file filename "os:out.file" -end tell -ENDIT - -exit(0); - diff --git a/gnu/usr.bin/cvs/macintosh/ChangeLog b/gnu/usr.bin/cvs/macintosh/ChangeLog deleted file mode 100644 index 22c25d6cfdf..00000000000 --- a/gnu/usr.bin/cvs/macintosh/ChangeLog +++ /dev/null @@ -1,190 +0,0 @@ -Mon Sept 30 13:17:07 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * ae_if.c (DoScript): Fixed bug cutting off the last character of - the path in the 'SPWD' AE Parameter. - -Tue Sep 24 14:39:40 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * options.h: Add TMPDIR_DFLT. - -Wed Sep 4 13:40:35 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in (Makefile): New rule. - -Mon Aug 26 12:46:10 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * filesubr.c (mkdir_if_needed): Added. - -Fri Aug 16 16:04:26 1996 Norbert Kiesel <nk@col.sw-ley.de> - - * Makefile.in (installdirs): new (empty) target - -Wed Aug 14 12:01:39 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * MacCVS68k.sit.hqx, MacCVSPPC.sit.hqx: New copies of these files - from Mike Ladwig (gets rid of alloca.c; presumably adds - mac_config.h; not sure if there are other changes). - -Tue Aug 13 15:02:15 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * ae_if.c: Part of the 9 Aug change didn't get checked in. Fix it. - -Fri Aug 9 14:53:01 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * ae_if.c: Include 'mac_config.h" to get macintosh configuration - values. Reworked application I/O code (many routines) to make - MacCVS either a "pure" faceless application (AE or file output) _OR_ - a SIOUX console application. This decision is made at compilation - time by defining (or not) AE_IO_HANDLERS. - * mac_config.h: Added, moving many configuration parameters from the - maccvs.pch header file here. This makes it possible to change - macintosh build -specific parameters without recompiling all CVS and - Mac port code. - * mac_init.c: Include 'mac_config.h" to get macintosh configuration - values. Removed unnecessary toolbox initialization code. Made - AE/Console choice at buildtime. - * maccvs.pch: Moved most configuration parmeters to 'mac_config.h" - * filesubr.c, macos_filesys.c, pwd.c, rcmd.c, run.c server_if.c: - Include 'mac_config.h" to get macintosh configuration values. - -Wed Jul 31 11:41:55 1996 Mike Ladwig <mike@twinpeaks.prc.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * server_if.c (macos_start_server): If getservbyname returns NULL, - use port 514 rather than giving an error. - -Wed Jul 31 11:41:55 1996 Mike Ladwig <mike@twinpeaks.prc.com> - and Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in (DISTFILES): Add maccvs.r. - -Mon Jul 29 14:48:45 1996 Jim Blandy <jimb@totoro.cyclic.com> - - * Makefile.in (DISTFILES): Fix capitalization of MacCVS68k.sit.hqx. - -Fri Jul 26 16:17:48 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * README.MacCVS: Change CVS version number from 1.86 to 1.8.6. - They are not the same and the latter is what is intended. - - * run.c: Remove Popen; it has been replaced by run_popen. - - * options.h: Remove RM and SORT; CVS no longer uses them (this - restores some changes which were wiped out by Ladwig's 26 Jul 96 - submission). - - * config.h: Remove alloca cruft. CVS no longer uses alloca. - * Makefile.in (SOURCES): Remove alloca.c. - * alloca.c: Removed. - -Fri Jul 26 16:17:48 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server_if.c: Revert to version before Ladwig's 26 Jul 96 - submission. In particular, this is to pick up the following - changes: - - Tue Mar 19 17:51:52 1996 Norbert Kiesel <nk@col.sw-ley.de> - - * server_if.c (macos_start_server): Added support for - CVS_RCMD_PORT (and thus made consistent with WindowsNT and VMS) - - Wed Feb 28 11:31:11 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * server_if.c (macos_start_server): Don't use alloca. - -Fri Jul 26 16:17:48 1996 Jim Kingdon <kingdon@harvey.cyclic.com> - - * Makefile.in (HEADERS): Remove SIOUX*.h. - (SOURCES): Remove SIOUX.c. These files are copyright by - metrowerks and therefore we cannot distribute them. - -Fri Jul 19 14:23:01 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * Added support for zlib (and Gzip-stream compression) to both the PPC and - 68k ports. - -Mon Jul 15 11:53:41 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * For the 68k port, setup memory allocation differently in order to keep the - heap and stack from colliding in large recursive operations. The 68k and PPC - versions now both allocate 128k to the stack. - -Tues Jun 25 09:26:32 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * Removed the requirement for the 'services' file; it only needs to be there - if you want to use a non-standard port. - -Mon Jun 24 10:12:17 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * Fixed bug in NoLineBuffer that sent an AE for every character in certain CVS - modes (e.g. help). - * Fixed bug in 68K port that didn't set the HLE flag in the size resource - -Thurs Jun 7 18:11:43 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * MacCVS fixes inserted into the "mainstream" CVS sources - thanks, Jim! - * Fixed bug with reading log information from a file - -Thurs Jun 6 16:09:03 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * Improved MacCVS builds by moving the maccvs.rsrc information to maccvs.r - * Fixed bug where MacCVS would crash if an error was encountered and - output was going to AppleEvents or a file - -Thurs Jun 6 12:38:54 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * Fixed bug keeping CRLF conversion code from getting called - * Modified "file results" code to use an intermediate file, and to - rename that file to the requested filename when complete. - -Tue Jun 4 13:58:01 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * CVS Code base updated to cvs-1.8.2 (5/27/96 snapshot) - * Updated to CodeWarrier 9. The SIOUX redirection stuff is broken under - CW9. Using MSL seems promising, but MSL's ccommand is broken. - * Redid the 680x0 port. - -Fri May 16 14:54:21 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * CVS Code base updated to cvs-1.8.2 (5/16/96 snapshot) - * Bugs in macos_filesys.c related to relative pathnames fixed - -Fri May 1 15:58:41 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * Added AppleEvents support (undocumented) - -Fri Feb 9 11:26:32 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * CVS Code base updated to cvs-1.7 - -Wed Jan 10 11:40:32 1996 Mike Ladwig <mike@twinpeaks.prc.com> - - * CVS Code base updated to cvs-1.6.5 1/8/95 snapshot - -Fri Dec 27 14:20:12 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Cleanup of rcmd code, removing inappropriate tests - * CVS Code base updated to cvs-1.6.3 12/27/95 snapshot - * Again fixed(?) binary/text file handling. - * OT problem traced to GUSI - OT bug. Corresponding with Matthias. - -Fri Dec 08 12:39:22 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Fixed problem with 'stat' emulation - * Used better GUSI resource template so file type/creator was available - -Thurs Dec 07 16:13:09 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Port cleanup for inclusion into main cvs distribution - * Fixed(?) binary file handling - * Better SIOUX feedback - * Updates only via whole files (no '-u' to update) - -Wed Nov 29 09:33:16 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Initial port of CVS 1.6.1 snapshot 11/14/95 - * Requires CW GUSI 1.6.4 and CodeWarrier 7 - * 68k version is essentially untested, due to lack of a 68k machine - * 'release' doesn't work, due to cvs implementation approach - * Tons of obvious "TODOs", but at least the heavy stuff is done - diff --git a/gnu/usr.bin/cvs/macintosh/MacCVS68k.sit.hqx b/gnu/usr.bin/cvs/macintosh/MacCVS68k.sit.hqx deleted file mode 100644 index 7b260948dac..00000000000 --- a/gnu/usr.bin/cvs/macintosh/MacCVS68k.sit.hqx +++ /dev/null @@ -1,179 +0,0 @@ -(This file must be converted with BinHex 4.0) -:%%eKBd0@8bif1'XZY5jcDA3!8dP84&0*9#%!N!3K%!#3"'Zc8dP8)3!"!!!K%(* --BA8#r`#3!aErr`d0$%eKBd0@8bif1'XZY9"`&!"$UBS!N!1!!*!%!eJmC#D(!*! -Drj!%68e38N0A588"!+dX5cQZ-2[8!!!ZC`!!fMB!!!Sj!!!@86j(Rqm!N!BBS`h -!q#r,DmdZ"d8h*I5ikfCRYfPRC'8VMpfQK2*edcVk-Spl[TZYc1GkfjL%DE*e-if -[qAZe,MR0c3JMR"c[k(kk'D(E#0Z%FR+F((-cXJNEE'N4YSr`YpJqZNp#YjIZCdF -fhBb`*)cXBa(ZEF)MarB46MCKj$Nj&Me#Yb[`eAGpYeN1cH0Vj2DaFe01EKmMqmK -S(pN[RQaJ[!%"D'BA!!F!f5X"&Z%Tc%%3+SZU+c9'Rk1H`!ZKXpSGPV89aTcF4ih -2'hLmBEADbLe9UiSi#'+mKbZa9IlIYlMdIS"Ij3!B0a+I+S0PL58lfe#GLeFZ"Q@ -PHJK'[q25p9$-3"j9,Nqjj9B5$)h4lDSlIb8@0+3"TF#J!8i1`RQ)BVH'8f"NAX# -[4b))Q%K!PBhNkm3EYr2I#KjCa+S!X&#LK#S5C6GkQ`*M@I+CKZ3IqIpKVT1,i6H -2jPN@UXcY1LYCNK&Cc,r'03Y$i!CB@J)3EmGl*Y"52e(5"B-KIGiE9YC66`%m'+5 -2AD'+aQLYASrGi4e[#C!!"E&F(lmep(qT1#PY%*@![@peK5%RYp43j[)mk[4IC#* -RX0NXec+N&GKXC4p+Y4E2!Tm2pD%'`-0U,5Z-j0'AZHS-UaTpARq!5RXPKp9@9U` -5`+2+XN)GS+lP&C0@i#mm*1p49qrilSami,qr%QDr!29"rM'Hm+5Mr8(J1h5&GVI -Ekr8B9MVG2Xb*Gr[ap0&pBDQTQlJ3$piiEQ''[G"eG5MHc*'GV3V!3c!kaJ[b!3m -UZcT!AAfhL%ccF,B`(YcaBpd0h3h`EG1,SdR+RDdA%lqaq5cllcl6%pEVC3FmABq -%%)paH8!FmV$C4BIGIE1`XLHhLfS"2+jiqkQk+TjF5cc'1Y%8$plSpl*'&0EVbb0 -jK('pRQ`2ke8Flp0D,%1"f-Mk01@mh+HV,DXRI8`#*5QHF$)E[)kQ#)p)N!$rm)X -6FimT(Q+pqm,Bilh3fiVHVbVb#$5T"2#Jd"K4*IqZUifd'2(N+L#1'dYl*FGGahf -$KfU!iejG@'+BV)I99K@TKpU(FlpHeE[1IB,(Y(1Ij(((Z8r@pBjcMr!)1rHrL[d -rc[eU2IlTh'm8pZr12F,MMR1r5Z-IcRf#KhU!FpFB4HG'863ahHZh2"I+&IZ%e!H -3!%H*[CNQ`D(J-Nj,i[ceFMD)9[p`h,K4F5A(AFGpR3H&5S$MaM@,T4mhY16QA(2 -F-Apc6&Ih2X+GBFSa6I#BGMU6pEMMG#)mTMVja&l-G#GAFGL[1GqTKLF5f%,'H(M -V'Qla@&hA%1%aNbc$Y5E&)Sl0KSbY,Pr'kC[Hie+-H)r3E%J9J)I&,BTJG,MYBei -S'T9id`[GTk0I0Y04"DJ(Qm@S!["3CM&Xp[+r@8b8X3'VIl-HIpD(l&eG[M'GNAH -0m(KNPFh`S6lSPhPA93#G-HqU#X#$3UX+d)HN6Ui'S!rd(eQiTHI'A5hDeH-iXcN -pP'cSQEGJb0Z!j`r`2!C$5mUiHErY![MQA%MDXhr-4+JiK,3CbCETEJ5ViG#"-f( -mG(FQD1EQGap[iGB!Tc@Ed@UCcAc[Z5`m1r#d8Dq%P&HUki2RmX2iUj@c+k&d4a[ -I5lKP49%aP`2FB3b&'prlMJlcqD#djK&)q@QZG1IF9TBrBlZ#RcTA"k8`QpX$4BH -kG&XN2RK[Mjbr2aK-ANEmq5mr5Icl&Ik-C+pZ#m0R&"Z!ImG0I2Mf@DRm%qY`me6 -U#(MUq(DpKQq2DmGr(prqRAjF#P`QekJ@CI-6aKr[F%0-!pMac'DU+8N%-P,UT*S --S#B'8"-$YYFaU#Df6#JPA+N*Pd-+'0(!`"#HYINlN!"(5!-$c(mJa,B#qGl"Ce% -2+m+D'$Jef-TiGFRjAe)dL"UJ1XMiUjAm$c(KZV1-6kMQT!RL)H2%KfRJ+f[5830 -jI([mXI-D',5&0&#kSjpkBE6Ch%U03(McGl@J2G`5l2[5!m'q,lEKZC0XM2$QllF -KPKlXqpUlH"jPrDI2N!!Fl2YP@bCef36q3'iRIq$q3PJM#*Nq38K+$IEp`XFIqCa -0f,A[&0h"A0XJZZXX(2ad[b$--T'Q+$$r'Y$X`V(3Mr0dAKUE8PrE@IXZ,3EcFfS -a9cHr-A8ZT1h9)AB)V')qRU&p$%(ib$H%[I9RK,fZ4PEI)mY6q50j0[j)mdX-2f4 -pQR3Y#)QTQ+X6S#FCFmc!-`&2$CikVK+i4$2fJ+U((UjBCACj(1kQ$Fk,H%Mhm@d -U$,d`i9qpF"EfJF4Dl!-Gild3Vm5ET9@BLLBI68A-+LbH#2f!2Y`(F-jN0MX#iJJ -qkJIdbHS,IZ$VqbrkJ4U6kEBIb1R#(P#0RZMYF6q3!$HU!HD0)#114ikRZ*jGpAJ -HaV06d8"8,T356[F[Di$VfCf(plY(0)$iITC2eJ$Qq!0NG,b0*p-PiSEG"aQ[%e, -qh5$aHk@DDaRdKA(N5aXE0GXCIbi3Jrd*SdI5J))6(p)!ekSpc$Ark$QZ05U6fl6 -H"($2ir,pcV!'pU0[i(@J9DISF+S,`DN#[$'J&K,*S%&$bY3J[4SJ#b1@2FZ!*m2 -e%)d)1q3-,e-IL3frH,&`)CkP4V35(j!!Em6NdJjLe-PUjQVr'`pLK-!UH)ZEaEG -4Y6kk#!IDLA3TkZ5&P-YJKSc%1TT&A"M!BTEH@-3+4bbq-4&Z*mIT(BXrY4JeS&L -rAJcBrEFHh9!r#-j%6hRJfamiU&@ld5V0qdX+eKBJP+bmkU,B"cR)8i4[SB2S8`I -T%-RX&4`eQMK)R90(`jCLPpYCk43$aZGY&R+)`aD4(*[N!!@FN!$35@-ZG3!['*( -YX&HN9hTiIM-eTHdi8hhXm`JBQErM4ecHqi6`E559'0e,LKPp1HVm1eU#CqH*P%r -KPA6Z"H"pIZGR)325I'YT%iel[++bI"lqEp--6f+MH)M$AceKpld)mr%hNc"(#h` -#IpQmce%%Y+ZrMV!eIf6VQ'bc,5N12S0mf03V23[`A5fFLQ1N[3'E%1XJc2SXI!' -aEa%@EB'[)RD#X*UI`j0Bd!@%a5`"I%2TRPf%jEB!rXpKq`)"%qc$#F0[#%Zd`[F -3'b3XhJBr!jM,TJY@2lb'@"VVH&[J0')XAq"T`(hIHHaHG4rJM(GH&Z0pP1SeRbQ -TaXdP!5aJDhaY24bq3VD!Y!1cjk-hK3@XhJm8Fjm%q"M64-2V(#iLCZ849VkE@id -BUdIc-acQ@VLB#HS3cC-AQ@9jTH"j,`(#@AD2k8PRmhXER)k!`HS5(G'&IZmQdHQ -29bkK@%@Aea-[EfCAfIdHPfHMU'GlN!!'LlI4KchI2j-fB5hH$Fk(R*lBm&BXZbB -c84JS+I8+`k+@J0mZDSXfZ!*H[kEBk`PS+qhqMFk!VX$KF)SL,S8(k[%q5c16(VQ -3!)NQ%,E#*H+#PV1a$LR&KPr!B(PNKRTTpc0%A)+95QSYa9C-TQ0lNR,'QI4iPF+ -5X&'@iCHYSJR#Y@1@6mkYNajB`DTjR'iGlXq&L2mI!*!$$X$i@$TXd-$Vc2`Z&Z9 -HAV4a)pr,kr2Xj%FE0,#M'dmpkFYG*aarACGY"jDGCjBAffalRB1mc*([@DAAT22 --2JH,,R`jIS[T`TH"&bHr%"lK4rJ92mYC+A!A-&jkhIVX1Y8qVRKQRlG)&R*m)C2 -GNB8-1!3J%*JH(RJ&kVcXFJH$2J"3m2p!J(rm*Ijr&A19q2mJr0N`b),4i)*KH4@ -UHel9N!$+S"iH8K@-k'i0m[!2FPG"'H3M'SA,KAL!H+8,U`KS*[lU2[c06$LGm'E -[`-YRH(1m0EUU0fN'abZ%!B4hj!kmh(-XY)mq!1M4!hmc"2rJS6H`BdI[`#ZBXD" -UPJ8*VNhiQpliCpEAT`d2Hmh`"[DTDM,#QTm3[CV4$V%YA2crIr@$8D[5YIUP%#B -+a1p@rqfpVY8[V+)dr[l[TZ*[0[0Xd36mlId[i1rISYq2GUeqmB92R[bRGCmmqFm -&RccjqhpM[bFH!qDhQ,qam(Um3[@#Dq@UYq"+Z+Hp&JA+RQ0mEq[4[0PqV"daAr` -kiGr'm&dVqNehVHJc%Q!NpN[Jimp"QBTU89$"@9D-4#LH1,QGj#+LcC0djE++bMR -P,!1ZUFL6bFrPFQdTpRPV1LJ@hE$j"N,&$24JU*0FKD@9[SM"rRFJ4cGXQQZKETS -,"c(8L5mA9XfDYq!XeKl@TNp40cjc++&L"RSbe"0lp+ZF8aA@[B'kmNM!E46Aq5, -DYU,AhP4a1D*@c#PK'FMLIIe0[`SeA)p9BV&$KShhMTVX'EkYD1cQfk+[Ed1f@@[ -HI*4NK$'+Jc[Cd$+VF,1bI&l*k80B"R)ikX$XFUp2-iVVECPU1AVjCPJq[qbXq6b -65kMcQd+GU0(SJ,8Q+XrN68Ae+TL6ir(U@L#FJQeqrZR&*LV2j,0D6aQ4EB3phQ# -QeLQYIk"D@DE!V$@leKd)qp+Sc4m1HC0UCCP#%cAID$*'DESH50EEr2a6EeNG`N` -[Xd-jf#&NGDVBH)GkQl8@X&SM!5q#ld4ZI[kC`keD-G1R[80ZMeDEC"mbClhJd(V -Sba@Pj*!!DA1VCT@V+#E$5cr6X1L'e`j9PTZ+mYUKF,#*fTp3jijLZ#0'**!!SaY -lh%@SQ)&$fMX86ZY$miG($lDBKjP$fe%cR'hT1E!rk4$,(%EDi'D&IUi0E`[Q[3h -p605XX0HI!8h`YEpJ192b!b`rR%ei[G8m[qTf0aM&)AF(EQ[4Q"N+4f8C1-*N3bp -%VIF'Y&&U`2"q@[(D,5pFDYE+-`0-e0i@DT*pDdjVq,@*bM0(%SHD'P4ITjC[q2Y -Ce&H@'8KDlJlk3fTDbe[k$[dAiL[,(0A1FQr3EE1mZ93pM,5"C3DCU(N-e3LRUQf -jjFCDUT9P"TXcbL'P`B$('rB'!kS2"d8p'1paG2#@UG4APKPLSZD80H#)NUC$(29 -S%cArM)MA[F5MUie*pDSC3+JmF`bK9RLADTk+S#FT4Y'Ua64lmFcA606HSYEjfY* -2+4'If)DDU,RcUKD%[@QH4cImqQ5,jCJjPYK3SIQ$HP1DjE&DLkL[dd)KRcCIp5e -*XL''HTb*fUYdIJPV%9*fjqJ34ae'IChZ9Ah"ZP4IikM$,CEVHP$r6jBI6e0[K4C -!eq$!V$c#4-e$(3VV`46eiUJMUDq,[!&2X$(GejLLR%#e-NNS3pAlSYCLBPj9@!e -i90h$[)"ZjSfL@LY9pa+e,Q8$a&&(QkJ&PC@Pc+JS#5lGL4Y((G-q!@5Q0Tb3!(2 -&V*`,BpXRE#2SAU*em!%Rj&q*@IPA-)j3!eSBKkM`+'qJ!rApkkd*QfA'QkMCL1K -*@`#`jY+4#fMfBTN*0%@C(N!+GYfI0VjVS[,-4%,0Z!Dm3aYA$+-1XF`N%l@204e -U1"DT1fTHihr[61S3bda'G`jkpmqY$IM9X,Zqf*h8SEmCmAYcIQ8C1*&3kj!!$@T -BXe'MMcaACk+b$*c8KZV$$U93*m!@3X8-R'bLjL"U-"5f35%kkBi2#48cF%TEVBJ -kaSCYl[R)85BUbm#T*QSfSMCk8U8Q8%mc8A[k2425Q"aeN!"!(346U&CGUp1@TR' -M[pRm'[89-c#9qQUS$CSlh52%HPfJ[Jl6604m`eYAMc-!b[p1h'MIqJ#KBJC+,&4 -d4%,S!L69SFAliGZN$CL"8K1eJ+-D2YASJ%8XBMR,`(5UY8%e3ZLrK'Z6(BVeYBb -dBHNZ`VE-Z)p3@3E+LAQi5B!1B*Tj*r5R[V)-c$#G(R4%!VAHY$r81VLCDQ8CQ'Q -UFKCh[M0H921a$p-NbM+cb,2*H*3FG8VV&Z&&EF(pLCL@*h&4I3E5h-!bXrrF9a1 -9CqD3!&ZQ'SDQTrfKk*6eMeJG`Na&6-Y6Nde-AqF5+Nj4Z(14VM@Q$I1S3ck[hp[ -Tp%aTI8G`k"fST$N[XXXmA22(NmMjjTNcfLH!0-N6%m#CfbD!&#jL(503Mi'Uq!4 -J1chM5iiJ0Q!'jV0pRGiHTLK"2H0Yh,aU*LNPCQ#"jBPkkp"H1m#KK@eqZDTh1UR -V(aADm#JX-P&cUhI"V[[Vh[p!Xc,,R'AfYDIUbFaVU&i$Y$G)P6%$Ca-E9)mIarm -8EQYZLBp3-32RQ+LjlRV0[550fhV`4GB%J"Nied60ikM"L$h"Y[Dld+S9-l$B3X8 -"b[$@0Rf"HTk*QZ2fHGN'KYhBeN(Rd*c(-R#qK4VdSe5Q8@-FUMC4#pbkKKC!09* -T*c*Um9Y#PGq#Va2cd#cAhCRCDr%eIb48c)"USQCj[,A*`G$Xd*%2qUP$Q)%D3Y@ -B8jC"c5d*#TB(`8dX4`+aaDl-K'e0KjJ"ccCp65Z+Djh&)Fb!CU)@DNY$1*CAfc0 -fke%j0#Zc$0550Y5LMkH'`hDjU$j@VCL"1YT8B+K'T#D&@M5'R"k@JATLH5hkP08 -"eCmN423r20EXK4R`%[2UlHQI8(h9la!UCZ!#BPipfPl-MNlVkjZLVfr#%P)[(&' -#HXT8JZLV(iHT9Xb!cd,eKh"RX92c,$CJ"[c89aqkMCf+-ZJF5e%`!`'D8G$!rRa -'LHP3N!!8"9%lCa48RhH&$Vd,)HSVS[U0G,Ra[PjSSZElPrL$RJME&1Y`Aelp1#) -i&!'Gq2Sj*ZpV523e"!Ceb0m8m04dc!c8erG%Apq$-08D#&Ch$J(4Malr!k&L"L, -8ej!!UKZD0e#EG([LY6B3me#1dilSpVif%XYeh!$XC2R"&eR-```XTEiLUY[[5A- -SKYTNS@VZ#(BfKAT8$ZNVbm!bJBTc3aS91I#qB-2lm!hLUiil)JeTI881A#MBF#& -F4"c5Y4"Zj+3jG15$eL5+'ELBp&82"MXRYRL(,V&3`fUR`-BlG#Re&IfV"LdpXU' -#kd,,G9KZSH+H%Lk*C0KJS@)',U-1CHBZhYH,,ep'IF8-I*-8C9GE'BFX(F)-A%i -GLS3kVAR@9d2deB"[N6BJ&3cFT8STLR+fa9I-`,IE8D[4C%ZVXZA0B`DZ)'eSh+f -[@cPd*GADU+ZK8*U`VBF0*LeR'9K"(',,H4PR$UFJDkE%$&aPcXUjD&)L'9,)k)4 -D%cCQB+@*fM18GZ9-jVed+MQT,(2eePNj$4ZGdG#$1)3Cq%j-[@aFj0X(JRNI`$8 -aImK'MIY$emBQYP5YVYpC,-F-I0Id+E-DeG5H%SZ@$FImUiR+-V#UIBV+F#MkqVr -62-3bm,fBjU8k"02r4+LBJG8*(k8$0qihI(qVUj6Kkk3lXkP@c-"emGfA*($,Jdp -F3'c!$&br65R6VZhl9ep#U*L"(jJka2C%JdBephZD2YAQeU+a"eP1cpL$i)IYkY8 -jE450l503qm!0*QU@MY0Vjqa90,Dr31d20e+Y1Lj&lDU9pJ"B"Qib8I00cD[f*Pd -!a"SU8)I#cArH(L!hQQ9qa1m"2&Z)+k8c0G@$mmh1N`9i1k!A,+qS+*h*-lI3hSC -j45#pYq&j)iYUCCPE59(mDUI4Nh#9INcUCEKee9pMVr4!Y1RDMdQ(-!1hdEB(l5[ -Vk4PPJPAV5a2J*kb[*ee&p`"X8&Ml9hG209&C"Qih8I2`9NBRm0SKVeUSQ)%l604 -H*DV2&``'E13ikTdQDYpTC3Y3(ZCVZRmRm0TI[SrA%6JUCZ!Z%c9r@YQmQJXd0dk -`1eZdGS4ZeBSCZ0Y%,CK@GUC@KeiP@T@I`FBlG-r8RVKCXY,F"%T4#*U2lhZFLFS -bX)Df&4RUQ@LC9eGfE#XH[r"@#hAKVE$@V$AAV"9KNl8q9S3Z1rXpbm#kYPhfDQm -JjCQh&Tfhb0,AmaC"-meH0C(DfX`NfPSidCUL-!-Y-G585a&$MC+@ibSl@V!Te*C -RVU1Y#*D"9Y,ACHak3dCIHkf`I"6-`(T!$[94FP9FPp2(M8hj$38VDF*Q'EMA4-e -MHr1kCYL@5"ceTbCUYPYhTb[GMRSIG3M242Jb9NmFGB1*QP@h$-pYC0J33pe)I88 -6Y5EMIL-@H3!X!rHhSETarch$KUfS$e"I%E9@09*'B"ce`6E8,MCX4AfSV80KA6[ -3SBIEDX9&-Grq@Rp',1mXG!IUckP@2#h$0#96kdF#p50iK'TGeYQIlDL2dJ5!Sb& -HXNKHk@%6`1**H"%%Tek@J8fN+&aIdij)[0E(V!kaaF-dE"aeFeccNVKapATm'aX -1e2T%3[15rP#-VdmQ&'8IkLm55VN2pDQi$UACX"AekELqIS(kM+N0fDU@FPj-E9M -dSM8G,RS4RQ8hThUV"@bQc'bBYKDGDqh-B3CGLa"Z91&P-%6R0kYBZ(M'ZE3LiR$ -kASJlJ[`'9D`1TimLRU([4lR@+I!Xlj!!JUiSZmD9PkM,F9C%h%EIGh&23B'lZ8Z -J`*hFQ9$J$XVI`hd!"GEb'9f"0Ac#9q"fq[e2Z0HL+,p9AX&UaLIkiEL!)Rj!hdA -m)S-#!rP&&`8'mpXB#XcQHlm+M+$I(dII`qJlMepc8Q!ii3fKl`*qH8Q"(-+Cb6H -F&CM(Gd891),IYP&J%Vp(S-!!IV9'J@-*lhMk2SCI4e&J2,qXS-!iITG"JD(mNSN -#S`KR0(dIc5pQ+2!ebKI6Gckrfk0!,rVZ6pppq#8P"3Vjc5F&$Z8AL"3iLYqS8@! -X[akK`#"qI8D"-I`'K3+(m2Y'#NcJYaX8k-h[1#P`-rF4&6L"kZj(GHEb@eN+614 -A'a5Sj"[%#SbNIKh*lqmS#Ee4cPIBYE@KRqPKTeXMBPdA[bdq@cbfq*[JlBqidjR -QEB+I#9lH`Mh2EKlq2rlCI%[b#eeBTXJ&#AijIVL)(p+ha3Z,$b[jPNHkheErV(l -Cr(p*H4QV'jISMq1mLlLKLrm*A6q-hp,k2hfA&qLkaDH%[LqJH8+qS211[RITZMe -(1VX4)Qj-kNkLrrYeaPAVBS0e@D)IcYD&L*ZN!6ScLpqdk0DEdrN9#jR#A#RId"p -l[Vb'lhBT-)2QqK9mmke0$m`,%!T8m"XF#Pc0pmlDGBY[H5P`&Gpp8f!9hm45i%a -qT8+"lr#0-`AQdKcm2EjcTF"hqCjAQml`LkIYZYGeb8%%FhANCMVMk%X9[f[5V62 -RZjK[-MfK-mlY$a&R5ppdaY'AJ)YG6Lj2k)Zcf55L*Di[FrLP**Q9cM6c663*KGi -i9iP%R#-0QfHqcrI+fh4Q0Gp1Pa(S6A*qGZjCL6KAHMFrTr4Peq8c%BZPGrTbL@X -jUX2-lIj-eidm%HG*Xr6PJ#q6Q*Z[ijG@GZM1'Ia'T`a!IaTF5e%pq2ABQ2lXZVB -SiRcTQ9pMkiqdB+jflR@+U*EHcGA*r5hRXUX)HMZ+4%aIT!YcM(-,@)3Ukr-(RD[ -4)UahXNMhr"QiRYpU6-h4c[ea%GE[jAGcG(*[d,PB,m)MMG'CKIbe#M)-[9R%hmF -JSGMVFYik)%+6h[NfbEdDje8-)QVMqL+rfVXrS$2bJlfDT&rM[+Y#4*hdE+k4"pa -(X[HhZPlL)F)kMbRGfppbhQ`L`LXYQjqP#6kJmmSA%4G)lqDBT,iilm%4X86@0bF -l,`F5`Gj2+RI6PkrZ9$T[64,KPrA0bFkVT%3%C(ecX[0q,4(@FfEPGh[-YKr6pH) -a%IbG`e)mRE(pQ+jA'SQi9GBh,cY[X"0aS6629lE[bhbK-S#[r*2PkBcp$S+ZGak -+X*l3,KrE*j8Zq$21#b&&K'9pqc,1@c*&4+4pqc*GV`i9d5$lfjGahUNUSP&DjXY -)%h6'HGQX#(E06BkR-mQlImjEH%8d5F2QCRR!qfHqZXrJ[+CBa$*CRprX[,YCa$G -NIIVL[0"Da%@b2Reah[)YiQ*jRljd2BrFLNYNIIVL[+pDa)qPGrTbVBZpmr2dlIj -Her[c49`UhGU2qGrhD-N6hTeLqme'@!e(pKL#l08dFMkrCZmE'9KF*Vh6&hZ[HEm -G#0q8[ZR,JEdrqrefNC!!*r2-q,DiA$UhErU92j1,CU(K$ADIS2b@V-qIiIT5(Hi -f!,mY[G1Aj0bFhEMr[Y%9dX'jZ9&A3k%pLcCA5ZrQ'[ZpJ-YmhTUpaR1VY'b25eU -J0r"BDm(+Mr"lNrQY2+dmLqSa"RV%jj[DJ(rIC$hjbrRQJ0lB1L-[d*H%VXJRp#5 -K)jCZN!"H+*Z8cFM#dGYjA+H&pbd@R#J0Q&0Y(NYpq1[c"VVjHp,q1A!feHhSXMb -(aehmc8(q"N0l,TDFr08F*Hh4A@ZqlY4Ij1qBh33q4IV%hjH8Pj&pia,mc8Eq0RV -f''QR5JIiQr$,j!NqQIb#clB[PZ!eq9Hf,[IdHbEXfmXp6GUNbr6HFGYIa$YaGGV -523bH)R[bT5aIfCk[FJfe3A2[QE#Q5JYmBR[1NYI`fGSVS(eejEI++mM+m3PHja[ -HZRTm@1[Z3eA6T#9cXhaMVm5HRap3(N*fMYV"Eh`1FQMhUfN"5Q40ml20f`,1@m1 -hqe@9TG)QhLERj*`'eBG2VqXf2+,5+Kmbk@2P0kK'52F'`Xi,BDC,4r4B2[&ZDIZ -pdJPp6[SG18[h,`U8GI(i`(l9IrYCmKUphZphC$GT4X"jB`f,FQR6[X$j`1iX()4 -r-ApC43Y5(cGf0h2AdlG96hc2fDi[cahdKh60f(fJjYkre*IYeYelZJI`dklkVS! -9M!lEqH(4DRelph[[Sqq%$L4dG$2@brE(%r8r[UX2@AA,[([P&6E3Yke,LAlBIEJ -9EX-U#VEc'Cp59,2hMCXEpr2K#DbAlG[rJVkIT1qRk0[Zcpf`"UXVr+`rlU#Rqk& -Nprp2Ijk@"I3T&rY8UaVGLkX25"2kC1XIpQQIrMhiCCqql!2MG9MAZRR0TY1pIE" -imDAq-6j%`PlIEMim,$h3[b42X[H4"10RdS"jaCiV)`%qqHhZa-rr-TGP,p[(3S" -(T!(c8$R-l2%lr1iCkd2"M!99XiVRi#fCLC0RGrD"Sf&BG@6&kZJrE@l9V(*ef0a -4ilh$5dH-B1@`XVEAFI#Z1JkK1PJ9U4TBp0e94fk&kTjA9Ba(FVViCGh95GC4@&V -TLaMXIeFYPTq8V+0IjC`Uh-`)e*@MX"M&GEk)eP'3!-A2C"ejmi0"(h,#+,BH-*U --l+kq9XfDYq#XcaPQKU9EGPmVF%8)+m"#KL"T4dhf$1mS51!L93*h()lik+3G2lU -bh-GIBYFMF$[kVL2aP9R4818F`hSY'kZ61H1ZbLUYlT02a)m'iNq'XGm`AIVr!!# -b#J!!: diff --git a/gnu/usr.bin/cvs/macintosh/MacCVSPPC.sit.hqx b/gnu/usr.bin/cvs/macintosh/MacCVSPPC.sit.hqx deleted file mode 100644 index b9cdc9b60db..00000000000 --- a/gnu/usr.bin/cvs/macintosh/MacCVSPPC.sit.hqx +++ /dev/null @@ -1,209 +0,0 @@ -(This file must be converted with BinHex 4.0) -:%%eKBd0@8bj38%-ZY5jcDA3!8dP84&0*9#%!N!3Qf!#3"2bm8dP8)3!"!!!Qf(* --BA8#r`#3!aErr`d0$%eKBd0@8bj38%-ZY9"`&!"$UBS!N!1!!*!%!eJmC"@&!*! -Drj!%68e38N0A588"!+Z[LaLZ-2[+!!#9(J!!fEJ!!"!j!!!@'AGNSHF!N!BXQJl -!q,j"RTaQEaIPElqb`5DEGC5hERD%dfj6[[+*RYNe81l+U6ABIZc%Xr@N,lXeIkq -$11@88m,1"RNVfrV4YZGYeX52FMmkUD0EZjbNQd@j[9eD*YPRZ[8fB3h)*V`MM($ -#pNQ1CclK&,J'e,kchpl#1VmcFTc`@mJQl(,NCB-)$CKXJ28%6Mrl!$J!Q,-1S"6 -re5N6RhbRF""HbXCE,&E#`D#N(M#`1&+pG-TVG4pUcEc01-+UYeL-qJGe+XaL0PX -bM5-(QcLS`l-YVT`5qE[U[K[M!GBq$$$h()LmT8IG`1)&[3U6*N&5M4fk*@''8Je -dCYr&#hX9&NrT99LMJHi+*mAC%If6*d0N5JPNP203K(QkeNb%EZ@6S(ML'am8eLb -%q*TciFcYqEUA6)6Z%eHp8jLd#%Q9lq0434Kq4B%Qa"9S-FV*4iU,Rr@RpjEiMK- -1+NbNCU6LepFjGad9SSJL!&#``lJB`Vl#H,dli0qCD5$l%-@"(r,hF+k8kk#k[M( -0Z"a%`d%b`mBY4DC!NmVlqIm$Y5cXJHL89"B*pSY*#6LFpN'#dc2BC4F+$j-Cr%R -eRIr-b6+0bM*EV$V8#&0FTbe*)V&d@35[Xcqb&-Y`!dc2"iKi%-Ar02*e-D2,B(D --&``@VhZFB22l$(*+RG8Gm0S%h5VP3Rp$-fFGS"c+q4`2)X+MKRLi#(i-!CJ,#cT -QQIZ0k@mGBh6iE1ia@FDYp'Q+!J(R6RTh#8Q6Mi4pUaDj+R0Ff9k94U8kI(k[Bfc -![apZ5+8jj51'[GHZdKrY8fNMCc5(3KI[9HKT-ZekNI8@KHD@PicZhDj3`ck&EZD --jY"Sq9k0aLTmThRG,VrJXKr5D&lP'rf'Y@[ddKD0KMJM8'STkh1)R1HKa6Y55L( -SU,lcY8IDGAT4LdiPcLL9@QVKEH2jA-&h5+2M+YpIQddde0)3Cc5(6KIYe@N(KI- -@6bTL',qXrpeRYHYd3)Y15442fNRKfZS4E)iFKqeJ)3hQhr1Xlj3R[Da&Rb(1D!k -G9Zl9D@HCmbc"jpGEE9k(CeIEpQ1GZLSbhP[IVY2,MqLdL6-#aI'JK-B,13jR@kF -8-44@pVLQT&fTrIFV9H'-jY$R[SQ$MScVKXTd@*rAPEppASpfI9jb8*q0R&%S%`G -Q`@X,q"eZ[DfYLKC9TNkY*KBQ$KSj)e88QYHQd1XVjVem2Y@J815-3&&SY0Q5E"V -ZGcKpE88d1)%%U+&*hbUdJ60D4D&(LfK`BX@m2m@3!!d+cD04ZJA)pSJXUpmVm2P -kfq&aN!"J#GE39G4#Yf!,C`5+5Q1D'$p55S16X)lf*"DQ5*Xj)e*UUFIM&%`&JX[ -IiNQ$Nl'@,U-ADQN6Cr5+5JmAdq!8V+AaT)0+U44IQX)lR@khbkFILi($+TeD&Ij -U)EQJdXfFN5L6T#('@`IJJMFXkaYh!l8`5GV%'BR5alBBd`IVHH(iES0TjA0A1DL -&2RB$Cc5(3KIX9@L%a(EE)!M$-,dbqqDlfa@DH&LK*%S2@kkIq6LKe+E1B"@AYja -NU*m5Ch4+r6`fJBdBCP3ZA$@6C+LI9-F%pS%C%'3kfC4PDP0Sm-BUc[d+Z6!$%Z+ --4ZRL',%EiRB+,3-J$-0-%Q!'j%!ATj%c)U@+bRbh69,0)J%Q3!j@dAV15*5jH%Z -UeqdjdFB*cXBUqLYUB5kqRM-DTB)bVTf#rjJ2,DfXHL+IA+LJ)FjS&"pUXMY`HKN -lmke90$J(+qK$j))2EH5-@0&SUa%0rKapk!9dJdE*MMR%rEX5,DC#h'AR3mCE[8l -`jXUU9HG5#lX5QcLM8ES&DEL2jQ5hB#jkR9-lq!jd#a61#"9pYZhq3!ccd1F-S"R -d5D0i(25KDEL`-b29P0E@+rK&GHqP$j!!#ckdN6-DC@Y"QKXPN!$KjZfYN`A"qHK -aRL)AYKCXjSa'kBZQ1pdiVhamLmkYU0*(bB@qD)Jc@N@KEE-IYe9XA(&UKf@E3UQ -8f3qf,[pN0qGfV+'2N3[G!S8c3N@I*lSjGf!hCbM0S%qbSjYc3*pQhZ%k@6r[*"R -UTm)CSD,2%r9c!GE2,*T"Rf6+jLQ,9mJ4[),,*V4ZRPU)pI0aFQ&EcQE1k"@9(YN -mY3LVk'M53D98bZBTLdm)f0h5V-Z4MBKhN3"Gki-UEH+-4TNYD'#mC50L'FQ`%A% -cCc4+hb$6jl@Gl"[FMChV*mQ&[S(#'BfL6bYIm0d8iQ,d1L[)"AdUR"%UqMa42jH -Jbr(4$2UN86D3!10Z-1RG$mHhq#r&q[NEFQ%h@)Jc8N@KalEihi-9Y*KU8#MC882 -h[rc$NL9imadZYp1GHpf42CA"FK*J2qAqPhpXjia'kB`fXRjiXd5`DPNLr`pbS61 -kQ6-5j88kPZrHa)!BUY'6VU3@AU46caQPSXpM6ChJ-R5NdiN'I9)Gmam(1JBM(5k -lqpVM2CelXAl@NJXGJa"RT)T#Mr9dlU[BZ'STeD"3XU1RXfmMEhLQ+6R9E$UU6RC -QG#RR*VlEVY!,pbP8iBa#f5FK-De2YPJbMUScV[cY2YF4#rXN'MQM8"b1c$BZ)@k -VRefVZ#QRYS0pkh!D1508&'T1hNEJ0`VY9Xk9k'N'KBUF%5S+Y@BH8qMTk(+SKFQ -24XiSP"PHUq"RY)m3['cYia'&aPFXIhd@X6$$fm`CKI+k!ZYeq4N1erLM4C5Tp)c -blKGF55bmVN$KM1*3Cf,p'eLrIP'VNL81)rh8Yh%[Dhi*b0U&3`!k-REk3MKlV@` -)CIflAmq42YQjp9D!bq[B6lc#hXlD)GcXG[%fpblXDZJ$89bYUU6qHcXjRHk(-2D -Da@&@(6kX9XGN+AJYFJ)GV2XEUKh8FSB"582P$-e3iXA1caqRkEQSSKT326B)1[r -lcIVEACk)qe3J88@Ea-"[!a[CUfMC3fTS!"aQFdB+k1eZfdiF-4Q1XEV"q4khemq -ShB,$m4ll0&XbdSJ!(#10U63!Vm05KZLqj!1lfA[ib'3QPJ6JJrN'YAjXRXhRNh" -dQh4,#-FkdD9Sj4Hpk0M',2QUkTFj)Jje[`f,f$I$SG,EG[1U0Br8'ApS6%LSCh8 -EV`b(4Qp,5#!"F+Me0KXCJ-0$!q"!AMdH)J#(8,J,aalGKr5DpadIc&T)I(KXH5G -`-'2$F)3c(!N*"!!1PGkl'iFk8bK5kZXfI66Uc#INlUb,J$L'm!8mUi[+e9"Gh#M -@4Dcd!@MA+k[6APbD332Jm18jam)A1SZaQ0,fq!qI2d!%i'"(mi8IfX-VXlYE2A" -c3XAKVL!$(#i"J11!`d9U2eE3!BIl+3l*i4)![-V1P!$!368i8d8GTjcTjcMqkdb -ra2'0-rf5efqFi"iFp))crB523mld%ab(R1RR11J!CkV5qhEAaA#N)GQA,pC&j@T -cA4aP()DqiA-qBPQ5HJmRFG[-"rhKF(IiS3-1G`F1GQJ!KaXYYKSq-EIL18edZ-A -GrS*+rkaRXIddpLcU(5i*J-2Sp2P!Eh2b1bY9"&E1chSS8U85R5N*`)IS6%N!()S -chBAMrjeTQ(iFX[mCMUrd)6X,KfHRcTLcf)2MUX%@l%dAlFEa&4qL)b!"G#Bk!K) -!KqL)5)!k*&9b#N!I1)l6"c3i[D(",h`I2QF`m!QV1Ilm&k(,+eV)$0-#2#mHb1` -"#4C)rAiCP+4l6HPLmJJiJq-6rQbcXmIRilN(lK,I6ar*AXdI1Y,Pfr[B4h$m"BX -j3fq)M+KlfTi)F(%0XaIXpLdV9F`ULhB$-C9#Yp'TN!!CMNrF"rL)2G%ImH-pY"q -U6IMGGqdLMJIGTPJ,3b!H"2UdI34Fq9'fL2+LIr89r`d2[FMaLCMc"`b&CJYf#6$ -QN51SJA#$`HNBDc"3'"VJZUpI$lU01Z5[QL$3!&Bm5N-$EfdL"c5!Ia%'3a%V"1T -R(XQ'm1F,kfTRA&CA1ldBrmYB#98rmqKXM(@[Ujhc%Ikr*'+[eFA9eIkqf1A@pEK -8Ch)(r,UaJSd2U0@p2@TePrLkfYpj9'YqDP%[AED"hF&FXb&LrLCik2&0DR@R[Z[ -PSr-lmN'c&&PqmK+YQmh*-I@8CBX+8*fEMEN@UA,MHm+C&9U-V3DcEb$qedrjUp9 -Rc&0Aj,fPVN!F,1@D5q09DbkaU0B8L(9IYGTm"k0CVHiFMlP+!DVM-%FNrXIL[`E -rYD`1G$BB$-D4kF1YJ`d1PmdCX!X'!e94"lV(-Mr`e`hNJ"p)"e9(0Qf)$AeV`-1 -k+iC"!Qr(S9"$IECdmlYFqK8IiRGjb2RGe4-k&`hFi3YTKm-81&QYL%[KEhiKidr -K8)V2$q*r+DX$-D%kJ2elJf'r(bMQ8+bdJKpiXj3Fm!0mN`C%Em3'8a[L!lRUaDA -3jD80d2@CV-KU'&VMj+TCh)M231%'!#HU48&@[53$mpA!8-p9d2AC*1R1iT9LrV0 -R[LARd#dZJk(3$9p#2RM&4Zd%#3rQH8[+[b3@BNqI$&fI'X89rRZ4'*IaLb#VY42 -%H'5D$P4,UKNHVZ$aeCbr`hbC"MD"UZ@+`NCa44&6ZD*`#hIY''3F-8Ri&c(YL2M -&1bSYK%1deC'2$jA5T3K#ka[5#*!!Jj@-JK'"H1,%hT%XLSB6KE@De@[T9Ja%B%6 -mNr1X`MS#BE`HrI&am*IMN6EEF#@MYNiNYq+T$`lR5VN1UZZh#,mCC5*%+ScE#Rc -BS0GMkleql'*Vf@M3"r-FbVfAa6Rj(EN)Rc0QM-r2Hdm8'!,JF(faVmVU($CUU4Z -YXRlrN!$N%FNBLQ298(3,XRf3!!rc&#&6J3lL14UN3X5"h#)KCmkMV(*'BH201-, -+609jjfe2NSqA*3FBYNlk"h4SSeC5#,*Ym)VrFBTkdGqT'PhH&i!dC)cPNa36&HS -V5&ji$QUl&2r9+@TAfCYGVm!VhERR31h"*f[!fG$6JfYk-022dU`Ql(eamkaCQEh -`Zda6`hVRV0X!N!"DJ*QB[m#6kiA[i@G[&V[L3qL2RpMj!aJr%pMXc$8XPY-4f," -E$SXP&X$9q2NqLdfm#3S`drdXP[3U6-2BheQXm!AF0J01NF&"EX$qZR-!Ld9HM9e -`F%jPX6jr`$de-%(X(A[,!(IH6"2aGEXGISflF"!AjSk'e4LEc@,4-f!YaK!,32B -i`'Qpi,dX&R%@i"c2$$&Ijq@!RG3CiMh0"e`-aK!,jPl1G3@iFCk)fm6e"*JT@UB -aicJpaPjRX9'c1+aM-m@C)'dLKlYNCMh-BTN",K0JpSXX0M+0'`e`NmK(4LU(qi& -ZNLVXDYE",AfK@F,Ac)&Fe*lBS99[%R-JRlLP4PlRSj0A+QQ9Z"NAmd5NH0hAqJ4 -[4`[[Xr&1h8MHkh+iFRdaZ%`cdkJcZ[-pq*B+Eh4KdJ!-fS9d`4A&BY)3SRK0KK1 -cH9Q3!!*)34#MS-CAb(PjAcKl-*lEUf([p3V2iVfjJPqEE--AN!$iG"EHRiIha66 -4E&q0M$Z@a9)G2TcK%[,()U5Sd$)E-Bp#K$5'@`pF#L[%KK[6c*K-+djSb4QMfFi -!"5@,0D%-,45)B#'Fpa6cbEQedT`YXZB5R&Sf[+X!ram!N!-1`0(1-rXQACkG[5H -hTpcY`-lVE1cE41l*PHXek1hSaP221MahIH2iVmZf!m[1R'A[p@DkfAB5ZqL!GhV -E3GV&kMa[0q$,J1adiC&EI-PJmG+&AqPRRVGG21!ZB2c4kr3U6fh!9@DIYdJ@FR` -KNjeNa"F!XJ$3``1[3*fA"h!"A3m$!-2rK`2mC!lqEm*D$IiIM$mE"d9`-K6!Z** -U*6#hYVa'0kbec!rP2cQB4I'AJ2p2K3Ri6DHJ32aUA%RPJYVb@MeZ"05ecNpKFm% -X&ReZ84GD&eiTajZM04L+d3T[3SASEb,qFL,fGmSf22mP$YVQG`!'$F,IP1%I22% -U6Qa),plKC62ReeBjN!#UUCTEKV"e)(Cr`fYE68Z0%++QQZ80VH@mKi*H22lr[qF -"PH@ePQ*THK64f)D#%pK'mAm*Qffq[)4ahX&b0M[q-K6'EG#a&pq"[eh*CP[$UBe -2X0R0-9E#EQ8P"4VqEa@r,m9DD8'V0eU#a[rcDZG9E[XPlqrI"Hq4!ri*lm*mGKZ -lU1!Uj+"rd'@$@kBS4T5G)C!!iU)fflT$c'X3X-Nim61H+UZ+@US48J)UNZ'phY[ -R2MLCA@GDm3CHJ3+"HVH[@V'DqJ"Ye,qrB6fL0S8EH!8'FG66IMkdHQ(P[(M8dL, -Uq1hJ(@ZHq9GfAAA0R"Qm!S2YASI8e&6@SHBKSMPHIkrAUL(Bkk,+Z60i"3VYZIT -UV@"PEN),EhIQLK8S%UJh$Teb)@T1jAKXZ@p#D`qE5"2##[JimiB&#j9JF(`J`pr -18HUVE'AGp%9e[!,&0UT2#8DdD!Dhdcme6+KB!Eq0kJmdUB%P'Gc1!kjkK9#a!L8 -fDSP!eH0@#VEci#ZGAV%#T3jU@$&0,G6k!@UCM9SF#'YUe1X888GI%L98V+$5%US -HL@KCe"i1$E94b`+'UPKU29*T"h,(6pIraNEP&4K'c!XdQdBJ`lb1aEHp5kKBJH% -fDP&3#i@b01mml2%)63JV-),iLP6JbiJ(M(0jhCh3kh!!68Je$0h)DN2"``iEX!) -(fUK$e+8a*4UXMk%iEmIZ2+,i$8,&#Rb-1"65%$1U4&*$k[M2)#N+Vm""a)BQaGc -4T)-DVRq68,%#"a-EQM66dJe28,Kk[HDUefX`NV4"DicUKTVZYZ-A[lHS9kc!)3j -U*)DlEdj4IZdUbUrK8*TV@!mXbE&mp#@kUeikM+)0)+`h[Vm"q+FkU&L"`iMPL*V -E!&!4hR+ei5hFpZd*4C3FD(*#4a$c)RS`(XlS%-iPjNiS"U1*3j(@D,#K6eYT3Vp -c*r3l'%1p4[AkR&KfE(lfYi5+&5Lh88YMLQ'U@M5Npq%QHMf51)4L&mJ+8@+ZBiQ -[4L$0"0)K4aZ`!NI4A"%e%!PQ105$HV5$UJEL10NdkK(&T*5m!XF3m``eSMGR0!q -RHD8lebZKJYKJU$%p1eRF6*cG#bY`,#Q+SHXCR46-HpYPhYX`cN'eP*cS*5EdFCU -VL8C+2$-La$*F9!11Sel0H%0f(B+1UkpI4K2##Ka2,0mj)-i'4aZ`!LI3K1+a)1k -8ZIh9G2A9K"1*jFfUBD*"P'BjZpKK(PCJI$GU[CAC$MFrZmP9bNe`%U'f'%SXTUB -*dAR3'&*+AK&Z)!a6r(U-1eMQH1i@ENFGdqEXP&K"Ke#JiPiH$@Q0(LK(GI`'V+$ -[K$l+X*(q4YA+NDKMhGmddPbaJQkKLaV@SKR858$l+kqJbbK3La%94j[C88krhq% -39Q"59kq)1X'$E5YFGi50bLY`QShU3p5@V0H63$hG4Lf-"#IPG!La4VZSSq%-kY9 -3'p@Plfq([h*9q9G`TSeDDQU06@J#K&-XkKM44$V%+h!@F@MTcX'fchb8@-iVF$C -0#'hCD'TE%lfH10,a0V!#jj!!+U2lNTB6VLLM9-F$`!UFbjfjFilhQ9C3dc1i(HG -hrKEXARRP2%*YE9E#f@ile[a6&D(bb[Q68I2+jT5DVHC*k-$JE(FJYlh`r'pX9&' -CE2H+Qdd`V$@NQde-D)VGDh%mLTC)-)hDY[E'FG3VVdcYRP!JU)C5XfelBF-McS5 -`8YQ0DVA'd!AS3pedj"K#jC9T0ZV3L"*S3P8q5BQDfR[!UpriKfYY9&'CEU-1Fe" -6rDikVrR(0UUSc,!j9&6([H'-1#3i002ZYBc20FZMYKFf(Z+`!5ZcE035`BC-[iM -PGe(p81@bh0#LQAdS-D%,D0X)452#TdM"SZiI6VhbbQa5V`!RcrZDplVEkqX`apl -B#Q-Sj$Pp(IhLZ6DUU&3lFd@663RRj[UQfqZEF#&0++Z5K2U'LrS'c+9Y!jQ(5Be --VcpGlcL1@)'DEVjbpb#&fhl[h5'l9e'jL%rSc--2V05M38e%0m)BL$(3(GN+hc( -QMFNd)9kC4f`)DfK'CaD(""YUl3RjiPNjiCVhlPQV5I0iTBj33i'SP5%HUR,jDii -UBf9qYjCRNGX,$ap*E1#9"E4Y"$@$Hr2TEH1&$B[G[@%a,0cLp@C9H@Ec)1)V9Q# -4ir5S"YSE'3jYI[BGepYi"blZ53qNrBDHp-!P26jPZYH#AcSH!&EJdUdEGSCjKH[ -'ZR[j@&MFicHN1G6M!9aQSaDe+*KZb(#SIFhBRp1'M4@i[0ZRc'Tjab[r3BiMVd$ -pe[4!'VIpRMYQ8DpB`AM49YmVc5'BpJIU&5ZJG(XEf3NP[)f'K0163Qjrr2YAd)5 -`!J&5C8bMU1MSCe6jNA@1+Q-PD'YH%Fq!jG5VlCJR#C9A9&*+c+1JYCc'E4pap,q -3!,lb5UKEP68pi+Pb@k9b%1NVVc6D1iU[,V16L`PeM++p395DE06LkFdSP0NGT@H -cdDMA'4T2!@5diFMPkfQZ[(+&M9Sk*4B,Uh9+H%PUfqK"A@+M$UfXQcVIdX+iIZe -S1B%DYP&,DT6!%U8a2D3%DX4',D18f&5p6p!6U0&Zjm$%a)IDah6FJRlNlN-r!Te -3SkU&iQ@GK$Q-(DK[hq@i,l`5Scd2%B-CH`K@AA[#I0S1HH9+dL(EfdM$2[b(Y@r -CU+*Lf+M$(IG&aH9AfBDq+[+lHG3VVjKG$TCLj,b04jjfpI9TX'a8Ire1f)IrGYJ -rdi4i*IiRApP'&C9QHfmSiqj,c-4B@PrNSehE4!iaVd",cbDDGI5Gc!&@B+RMT2* -H[5b9k*AF69k"9T&aI'P)EGAFqB[5!8*-%'jFa*EE#F+0Lf#CcBC5Hd,e@LScdeN -am@LD%&EJNcCUNB&TP&`#Sf,L5"Ge*&`e'GP39LebYA`iI%JlpU&a*p#%X!*A%iF -`Ua3a-h'+4*VUQS6[PB*Yrl[M#C9Ai&Sh-40@P8aL*T&(@GlYHqA5(K86KlYX'!l -AfDMFTp60qK$ILPVIbf%JeQ!AG6"mLRSe8**hpNSH!+r!pBk(VHRaV0r3%AbeL25 -99cjYpeU#%q+@H5c3"paC-@'QdqZ%QI!CbQlbL5U@jGN!LD6G$6CUNBTH@@jA2[d -"Rj1PH-!(Rl94I5djEa0Cr[BYea$,X3)hENA0*EHf*)&ZfM+Kpe0(@j*f0bICd)H --((#b,eL"@i5@rh!)'SDc9#@)'CdG8SNTjD0JHA9ej5a4ZCAf9h3F,802a`i5QqK -YK&UR,V@QCpLA3,hG4[8[a1bQhT,HjpXE4T%()#UI)e8fP@BeN!"aL6Y1RASSX4` -VF!IPmb*,hXm3B[BblUB`ir"jBTiC-*4)JaG(JBl@fhp2U&L",p$ZeDbB-I6CVG3 -qP(#)[dJZa89a,E!ND#JY+CHLK`eh%QUeYP309Z["P"[98EZBQ#FUGpQS`paH1A' -h)5IiqLALkpaDESLNqGUajXGR8kqmmQ8EYEJDXi!BQNel86fpIS9kRDBTZ,4PY+% -(p@l(9H,HiAqj5Pqe8Ah9DK4$IIYGTAYXe+&iU8)8VB-Jpk3'r+'[r5Np3"2LPA[ -*Ek!Yb[$fKY%[6R)mJ"FR`3SqSE0Z)QI1!iA9IrA3C"Z99q$V0QS*hN54!ejGrJX -(&5Z`dNBG1P8*Kh8pkL%R8,pKSikB-RdqQJGeUK(C!EckVppH6kKBJIYXe0)TdqF -fA+%'d$lF-D,9aaY1VeL"qfh8XLR6jkQ0',0",GS1QjM3!j-,d@qifICIda5#YZ0 -'('ZMmJSm5"iE4jf(-IhkQMk2lEJ&+ac8"5[J)EYA[pdV`UCkr9l&Zf`jrcf[`$F -6qe$'EpLbEDbL[9ai"TPF+QlMML1#&9MGYFhADp(d$YYCFGP#"r@bKI!`Z5m0m9! -Sjf!01HdeYPbJBJADHP$6(PX2DM[T+dEQ-!5IlV9pijeK'j9A-"CJcaA&&4f+P+F -N(*(6d&A#ACPAS"13!+r$Q9r"S+*abN5[fFkbQpqK#@%&(V&45lJhEkLQ&jY0S(l -,4[8&M%#Qdel8Ep1%-'3AcLCC%kL2fUK&MFX`V*Ke+AT3ep"F-IcHN!#pI`#a0VQ -SQf"Y&fS!YpFX'lDJISIQLUJKa8aE+3R8alT3qpQ`"IAaVJPCKVTr3NpdpBU"U[# -qATmNPZFDhBEkAHSe(K@DNZeeXiZk'CkLATIPjY1,ZSkdB9NZ*GU,qV66+cI--l! -*e'F5kTA#6HM3plE1GAq[H1G1MhVe!5HBpfa5'rDLIMqTHAY4Ij!!8*3-'lDJ2TG -3bJp3RbHI8V!mZ`%-[6&'U&L"$IB@j928G!C!S&BXr%G#a3TXj,H!$92+q%kCc90 -d9PckLS0kk5Zicik$!-c#(c+1Ejm#8FPlcHlj0(d[`,3IATk9l#-r4rGXS1m1X48 -bf#JQa!T#"A`!dh[RdlpcZfF9I9mKR#-'UNKT-EK)Z&B-EUAI,D([f5*"bq!V9&m -JmSm-,K5j93Ch%fi6IGYC6!BDi9dJFVX-JL*$aQ#Hb)8bQ#Bbd3`-NE0K-&fNR4P -mQA#r5Yph#Qq438aNIaMS)MR%i%[#"f33*T`)IFm4f9d'Aa41*S1lk(I9e2Fp9$p -AT*!!'8bQlbVkRLTbi3c1&`Pf"[0&5T4"5165'%4&hSP"MFM5-TJP-Y!-+N8bR-' -9)Qh%B+C)9$1iMIUG3IdeLU3DJbNLYFkJ9L4H'Ga1mcT2j1dCA#a5R!`QL*32Jh0 -%jTqjHP![%SS-&SXX*B1&)Q(UkJ4F)[+F$%i@GeB`Z&cN)"PF+K+E$"D*E#Q$ZF+ -jBI!*N9eNF*P)@H)md0e'@8RU60iYG-qpp(fIm-NBh#qF,`EI%'iEJj98Id"i@`` -H%Vi6J`H&DmAJkr6l&F)rC1abaLpl1hUl,ZGF)rHXlYFp4qmFIA2dc0%a4lpZ%BQ -'M(iPG5UT6pH,"-Z!r[bIlRKkiqK,BUpJ2f-[)cY16I)VR`*bchApr)U6MLAhLq4 -HNGmRj!Pl4(*rN!![l!eI)ehqbrk3!1!hV)#9b-kb*,rcf6$h,+G[Kfm1cjapbq1 -&-epRITlq[-KH`Zj15FiRRq4ccbHP!A[YI[f4aqb[HGe*lC(jR+"l2TA5RH6mpqQ --jjrNFkEZ@5E,mdpFRA([f#AGklm4e6dqkCR1j2APFb*K1U!cPaG`AfaD8QIbGqL -kTeMkTM0jIBN@a&!GCL6e*CqlFmr$#Ad*L"YSC&BkdbB5Ma)+[FRIlZdH[c4XRlP -"h+24T61I%EGab!Md*V8rjqq&Gdq*p'jr6Z[,cKF%Z+G8HUF[ea6`C-kXARqQrkd -*lX&hA8Lbp'@r,j2FQa[%2C(EG%F4Ydl+!25RZ@!TUXI-EIUcmp85lR(H%b)[mfX -mrC%@l0AjGfqiCkMdEUp1jEIb,b4acc$TQ,j)&rDBr*YDh11mSNHkj`rQE`Yecdf -b2Rm'2LYZY%h[dIRArlKRK$4[MdlP"[2[4A,2!G)BR6(&$IBb$,faa*hj%STF9rk -P8Hij8(VRfk4b0IRlfYecFd*Ij&Hjqrdk)fr)eI5rKF`p(j2ej@VbVfCccd(5XVe -'QV$(j0pCjjk$TAGl6%TImLrbFmp)@GqHR(qlSAX1NElTbdIh"qCIqqLH3f9pHh, -qACMZ'5AVfj2c,`Kecf(5[(bTjmId[rl+29G,mh6'mf2khcEV(RcjY*a[AmkrBFX -pr$8(FMaIfE[hi`19!AbGX5a2ClclkI[IjqbHdG+b2+Pd`Cr*[qcD2@0NIAQCr"[ -!h9-ZlF[,p,m@h6e(b[lb-[RhaEYRV,6-Pj%Qk%cq4IVZ18UDTc1TqpM`4ED"1$S -cZh6QD'RBhL`2H*I+4rFcj&m#l*jVCAeqFl'",kYYhRf2d6'b2Rh"&mE(m-Aj!dj -JKDa2AiS-AGrl[S&MjAhkBLPl,c!D*q[6PrcV`0hcHHQG[YaH`'rXZ+$Ahl2I1cQ -``E4)Yr)aIhNRP$cK25#HhfaDLS82CGqP4aqAp[NeHpl'c-padMYpmA,0qqa!1&l -kTLrlFhrHZpVLX@$fQI&Gj`6TA0ld)hr'MfDKUHN$9e#H+1[cCi5qe&X$"Z"ikCf -qT2CQAmZqqieZP!lZc5f'%S[Y$YUF*,hEDlahh#d,D`elM1IRT@8j,QQ"hX$6R@8 -hEmE[GIBhfm"qL1Sa!3BPpTY30,*hXllQ`reQ[pji1L-[d*HNVXJRp#5T)ijZN!" -HX'IBHQ6KbEdmEP5Y[F'#LG+!2GAMXG5([f%Y1X$I8rEYJA(U1kr,mK`Hpr1h'2Q -VahEI@(,U4hZ8Y%GhRIdkTlr)h`Ql#$a*qX6I&pP,BJY+m0H(r'd*lME56T-1m$I -TPmN6I$,j"CmpAbc*Dr+[2&dZM!3RlFhPRLjYdQ9kKlER,q)pFBhUdYd-2N2fj%X -j[V+hArP0T9N0l0k`[LNYm)Qp28YH`fFR9d"jGIBcpV*`Ra+m,M@eaLCmm1LZLkV -1P*EXcI+0A)Qh2cr'RK!TY&jqic0pBlYHX`V!8jG5T[hCiffCi+dCh[@UbQCT%fp -6Hh*aXa,'TpF0'"lYdLSI-Z9MP6BVCXc3SPEqK6"IN!#1k,&miMh*hMZ5NrUFmMZ -+Pqi,#Tc9cq2pqDVrmE2N0AUpcqr`YDTQ02r''Rl1PMEP"5i(IXr#B2cVmCF9Y## -08bEZBQiRI6[p*(,1ARmP!6d5-e4ce`8eMrbj2er!#1bH(X#hq[Zl3GaJiZrP4e! -0KIINHlp0hdNG51VS-pJ[cimRqrrHcMN805l6pXJV2%VIRLiPjq(0B3@Xa#l+H[Q --6bPUf22'c6Alq,!Hqq9jqqr6pl2dr32kpZEc%+c#lSCXRdp!$`imP'cYrmlR19R -!R2`iTj!!BJi%9lmM6CL6ThmiTlhkppL(FrT`$TcAPU%1m2VaIA0`H2'KrR%qa#d -Y[)X2I%Z@'qKILLHq[56"mk3dB&rapXTi9'aqZbEah6r[CEjPHeN)m*3dB"qD!E- -'r4+r#h[Q8$CcIQh9q$PiPda06@9Z$PI4Yp0(88mI3kGF@&Y9AXQli0eNqR"`8hd --UDfD1hr43"[3ZV-2Akd9V0cCJAdF2U6k++Z+@US48J*UIc-#,6Z2DSc5l*Q(Fmq -2al2UKCAciP&,LkJl#H,i@al2N!"KGESHaKl-mATf(UjZB8[4qi1)2`-[ipjF-b0 -XfVqjlpr`dY(*+)$MDZDB9[FJTr'2QPUemBprG(q%Vj3X'-Gr`rRbr`#3!e0a!!!: diff --git a/gnu/usr.bin/cvs/macintosh/Makefile.in b/gnu/usr.bin/cvs/macintosh/Makefile.in deleted file mode 100644 index 8843a248d00..00000000000 --- a/gnu/usr.bin/cvs/macintosh/Makefile.in +++ /dev/null @@ -1,66 +0,0 @@ -#### Under MacOS and CodeWarrier, we use project files, not -#### this makefile. However, we need this file in order for 'make -#### dist' to work properly on Unix machines. - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -cvs_srcdir = @top_srcdir@/src -VPATH = @srcdir@ - -SHELL = /bin/sh - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - - -HEADERS = \ - config.h \ - options.h \ - maccvs.pch - -SOURCES = \ - macos_filesys.c \ - pwd.c \ - rcmd.c \ - run.c \ - server_if.c - -DISTFILES = \ - ${HEADERS} \ - ${SOURCES} \ - README.MacCVS \ - Makefile.in \ - services \ - maccvs.rsrc.sit.hqx \ - maccvs165.patch \ - maccvs.projects.sit.hqx - -all: - -.PHONY: all install uninstall -all install uninstall: - -.PHONY: tags TAGS -tags TAGS: - -.PHONY: ls -ls: - @echo ${DISTFILES} - -.PHONY: clean distclean realclean mostlyclean -clean distclean realclean mostlyclean: - -.PHONY: lint -lint: - -.PHONY: dist-dir -dist-dir: - mkdir ${DISTDIR} - for i in ${DISTFILES}; do \ - ln $(srcdir)/$${i} ${DISTDIR}; \ - done - ln Makefile ${DISTDIR} - -clean: - @echo make clean does nothing in macintosh subdir - diff --git a/gnu/usr.bin/cvs/macintosh/README.MacCVS b/gnu/usr.bin/cvs/macintosh/README.MacCVS deleted file mode 100644 index 7adddd571b9..00000000000 --- a/gnu/usr.bin/cvs/macintosh/README.MacCVS +++ /dev/null @@ -1,125 +0,0 @@ -NOTE: this port is still in progress and should not be considered a - finished product. Use at your own risk. - -__________________________________ -MacOS / Concurrent Versions System (CVS) -Current Mac port version: d5 - -Mike Ladwig <mike@twinpeaks.prc.com> -__________________________________ - -This is a port of the CVS client (1.6.5 ) to MacOS. - -1. Setup - -In order to use this, you must be willing to consider the Macintosh -a trusted host to the UN*X box where the CVS 1.6.3 server resides. -This is a really dumb thing to do if you have any security concerns. -I don't, so I can live with the problem. - -For the following example, "twinpeaks" is the repository host, and -"cicily" is the Macintosh client. "maggie" is the login account on -twinpeaks - -* 'twinpeaks' must have a login account which trusts 'cicily'. For -me this is 'maggie', and 'maggie' has a .rhosts file that contains -the line 'cicily joel'. - -* 'cicily' must have the Sharing Setup control panel configured -to have "Owner Name" set to "joel" and "Macintosh Name" set to -'cicily'. - -* 'cicily' must have the 'services' file (included) located in -the "Preferences" folder. You must rename this file to be -'sys/services'. - - -2. Usage - -Well, the interface is about as ugly as it could be. When you launch -MacCVS, it allows you to enter the command line and redirect the -output of CVS to the screen or to a file. If you send it to the screen, -you can choose to save it to a file when you quit. - -I've been keeping the basic command line -("-d maggie@twinpeaks:/projects/repository/eM2") in the Mac Note -Pad, and just cut-n-pasting it into MacCVS, then adding the command --specific ("checkout commonFiles") stuff manually. - -On "checkin" or "commit" operations, use the '-m <log message>' -command line option. - -Due to the strange way it is implemented in CVS, the 'release' -command does not work. Tell me if fixing this should be a priority. - -To change the file type and creator of files that MacCVS creates, you -need ResEdit 2.1.3. Edit the MacCVS file, and open the GUZ(sp)I resource -and make the changes you want. - - -3. Building MacCVS - -I have included the the two MacCVS project files as a binhex stuffit -archive ('maccvs.projects.sit.hqx'). You will also have to extract the -MacCVS resource file (maccvs.rsrc.sit.hqx). - -**** Note for the intrim release (pre- cvs baseline integration): You must apply -**** the maccvs-165.patch file to the base cvs 1.6.5 distribution with GNU patch. -**** Hopefully this patch will be applied and part of the base distribution soon, -**** it has not yet been accepted by the cvs maintainers. - -If you are building MacCVS for an Open Transport system, you will need to -work around a problem between OT and GUSI: - -Open the project file for GUSI (GUSI.PPC.µ). In the file "GUSITCP.cp", find the ~TCPSocket (destructor) method. Change the line: - - pb->csCode = TCPClose; -to: - pb->csCode = TCPAbort; - -Recompile GUSI. - -You may also have to fiddle with the access paths. I have a "Projects" folder, -where I have the cvs-x.y.z folder and the CWGUSI folder. - - -4. Feedback - -Please tell me how this works for you (criticism, praise, flames, etc.). -Any ideas for improvements, stuff for the 'README.MacOS' file, or -anything else would be appreciated. - - -5. Pre mainstream distribution MacCVS History - -Wed Jan 10 11:40:32 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * CVS Code base updated to cvs-1.6.5 1/8/95 snapshot - -Fri Dec 27 14:20:12 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Cleanup of rcmd code, removing inappropriate tests - * CVS Code base updated to cvs-1.6.3 12/27/95 snapshot - * Again fixed(?) binary/text file handling. - * OT problem traced to GUSI - OT bug. Corresponding with Matthias. - -Fri Dec 08 12:39:22 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Fixed problem with 'stat' emulation - * Used better GUSI resource template so file type/creator was available - -Thurs Dec 07 16:13:09 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Port cleanup for inclusion into main cvs distribution - * Fixed(?) binary file handling - * Better SIOUX feedback - * Updates only via whole files (no '-u' to update) - -Wed Nov 29 09:33:16 1995 Mike Ladwig <mike@twinpeaks.prc.com> - - * Initial port of CVS 1.6.1 snapshot 11/14/95 - * Requires CW GUSI 1.6.4 and CodeWarrier 7 - * 68k version is essentially untested, due to lack of a 68k machine - * 'release' doesn't work, due to cvs implementation approach - * Tons of obvious "TODOs", but at least the heavy stuff is done - diff --git a/gnu/usr.bin/cvs/macintosh/ae_if.c b/gnu/usr.bin/cvs/macintosh/ae_if.c deleted file mode 100644 index b0a73d308f6..00000000000 --- a/gnu/usr.bin/cvs/macintosh/ae_if.c +++ /dev/null @@ -1,423 +0,0 @@ -/* - * aeLink.c - * UNIX environment handling stuff for macos - * - * These routines make MacCVS able to accept a standard UNIX command line, - * environment, output redirection, and startup directory via AppleEvents - * and redirect all output to AppleEvents, a file, or the SIOUX tty window. - * - * Michael Ladwig <mike@twinpeaks.prc.com> --- April 1996 - */ -#include "mac_config.h" -#ifdef AE_IO_HANDLERS -#ifdef __POWERPC__ -#include <MacHeadersPPC> -#else -#include <MacHeaders68K> -#endif - -#include <AppleEvents.h> -#include <AERegistry.h> -#include <stdio.h> -#include <string.h> -#include <console.h> -#include <sys/fcntl.h> - -extern char *xmalloc (size_t bytes); - -enum { outToAE, outToFile }; - -static int outputMode = outToAE; -static char tempOutputFileName[256], outputFileName[256]; -static int outputFile; -static int noLineBuffer; - -AppleEvent gResponseEvent = {'null', nil}; -AppleEvent gResponseReplyEvent = {'null', nil}; -AEAddressDesc gResponseAddress; - -static char aeCmdIn = 0; -static char aeLinkDone = 0; - -char **Args; -char **EnvVars, **EnvVals; -int ArgC = 1; -int EnvC = 1; - -char * CopyInfo(Handle info) -{ - if( info ) - { - char * retarg = xmalloc(GetHandleSize(info) + 1); - - if (retarg) - { - memcpy(retarg, *info, GetHandleSize(info) ); - retarg[GetHandleSize(info)] = 0; - } - - return retarg; - } - else - return nil; -} - -void MakeEnvironment(const AppleEvent *event) -{ - AEDesc args; - long i, argCount; - - if (AEGetParamDesc(event, 'ENVT', typeAEList, &args) || AECountItems(&args, &argCount) || !argCount) - { - EnvVars[EnvC] = nil; - EnvVals[EnvC] = nil; - return; - } - - for (i = 0; i++<argCount;) - { - AEKeyword key; - AEDesc arg; - - EnvC++; - - // Variable - - if (!AEGetNthDesc(&args, i, typeChar, &key, &arg)) - { - HLock(arg.dataHandle); - EnvVars[EnvC-1] = CopyInfo(arg.dataHandle); - AEDisposeDesc(&arg); - } - - // Value - - i++; - if (!AEGetNthDesc(&args, i, typeChar, &key, &arg)) - { - HLock(arg.dataHandle); - EnvVals[EnvC-1] = CopyInfo(arg.dataHandle); - AEDisposeDesc(&arg); - } - } - AEDisposeDesc(&args); - - EnvVars[EnvC] = nil; - EnvVals[EnvC] = nil; -} - -pascal OSErr DoScript(const AppleEvent *event, AppleEvent *reply, long refCon) -{ - OSType mode; - DescType typeCode; - Size size; - AEDesc args; - long i, argCount, addrSize; - AEDesc env; - char *argString, *anArg, startPWD[1024]; - TargetID requestAddr; - DescType requestAddrType; - Boolean flag; - - if (AEGetParamDesc(event, '----', typeAEList, &args) || AECountItems(&args, &argCount) || !argCount) - return errAEEventFailed; - - // Get the address of the requesting app to we can send information back - - AEGetAttributePtr(event, - keyAddressAttr, - typeWildCard, - &requestAddrType, - (Ptr) &requestAddr, - sizeof(requestAddr), - &addrSize); - AECreateDesc( typeTargetID, &requestAddr, sizeof(requestAddr), &gResponseAddress ); - - // Pull the command line from the event - - for (i = 0; i++<argCount;) - { - AEKeyword key; - AEDesc arg; - - if (!AEGetNthDesc(&args, i, typeChar, &key, &arg)) - { - HLock(arg.dataHandle); - argString = CopyInfo(arg.dataHandle); - AEDisposeDesc(&arg); - anArg = strtok( argString, " " ); - Args[ArgC] = anArg; - ArgC++; - while( (anArg = strtok(NULL, " ")) != NULL ) - { - Args[ArgC] = anArg; - ArgC++; - } - } - } - AEDisposeDesc(&args); - Args[ArgC] = nil; - - // Pull the environment variables from the event - - MakeEnvironment( event ); - - // Figure out what mode should be used to return results - - if (AEGetParamPtr(event, 'MODE', typeEnumerated, &typeCode, &mode, 4, &size)) - outputMode = outToAE; - else - { - switch (mode) { - - // Batch (return results via Apple Events) - - case 'TOAE': - outputMode = outToAE; - break; - - // File (return results via a file) - case 'FILE': - outputMode = outToFile; - if (AEGetParamPtr(event, 'FILE', typeChar, &typeCode, &outputFileName, sizeof(outputFileName)-1, &size)) - { - outputMode = outToAE; - fprintf(stderr, "MacCVS Error: No filename parameter\n" ); - } - else - { - outputFileName[size] = 0; - strcpy( tempOutputFileName, outputFileName ); - strcat( tempOutputFileName, ".TMP"); - if( (outputFile = open(tempOutputFileName, O_WRONLY | O_CREAT | O_TRUNC)) == 1 ) - { - outputMode = outToAE; - fprintf(stderr, "MacCVS Error: Unable to open '%s'\n", tempOutputFileName); - } - } - break; - } - } - - // Check to see if there is a starting pathname for this invokation - - if ( ! AEGetParamPtr(event, 'SPWD', typeChar, &typeCode, &startPWD, sizeof(startPWD)-1, &size) ) - { - startPWD[size] = 0; - chdir(startPWD); - } - - // Check to see if we should not line buffer results in AE return mode - - if (AEGetParamPtr(event, 'LBUF', typeBoolean, &typeCode, (Ptr) &flag, 1, &size)) - noLineBuffer = 0; - else - noLineBuffer = flag; - - // All Done - - aeLinkDone = 1; - - return noErr; -} - -void GetUnixCommandEnvironment( char *name ) -{ - long timeOutTicks; - EventRecord theEvent; - -#ifdef __POWERPC__ - AEInstallEventHandler( kAEMiscStandards, kAEDoScript, NewAEEventHandlerProc(DoScript), 0, false); -#else - AEInstallEventHandler( kAEMiscStandards, kAEDoScript, DoScript, 0, false); -#endif - - // Allocate some storage for the command line and the environment - - Args = (char **) xmalloc(ArgMax * sizeof(char *)); - EnvVars = (char **) xmalloc(EnvMax * sizeof(char *)); - EnvVals = (char **) xmalloc(EnvMax * sizeof(char *)); - - // Initialize the first arg to the process name - - Args[0] = xmalloc(strlen(name)+1); - strcpy( Args[0], name ); - - // Defaults - - ArgC = 1; - EnvC = 0; - outputMode = outToAE; - - // Wait for the command line and environment - - timeOutTicks = TickCount() + (60*AE_TIMEOUT_SECONDS); // Timeout seconds set in maccvs.pch - while( (TickCount() < timeOutTicks) && (!aeLinkDone) ) - { - if (WaitNextEvent(everyEvent, &theEvent, 60, nil)) - { - if( ! (SIOUXHandleOneEvent(&theEvent)) ) - { - switch (theEvent.what) - { - case kHighLevelEvent: - AEProcessAppleEvent(&theEvent); - break; - } - } - } - } -} - -char * -getenv( const char *var ) -{ - int i; - - // Look it up in the environment - - for( i=0; i<EnvC; i++ ) - { - if( strcmp(EnvVars[i], var) == 0 ) return( EnvVals[i] ); - } - - return NULL; -} - -/* Free the allocated memory */ - -void CleanUpArgsAndEnv( void ) -{ - int i; - - // Clean up the args - - for( i=0; i<ArgC; i++ ) - free( Args[i] ); - - free( Args ); - - // Clean up the environment - - for( i=0; i<EnvC; i++ ) - { free( EnvVars[i] ); free( EnvVals[i] ); } - - free( EnvVars ); - free( EnvVals ); -} - -/* - * The following blocks of code are related to the redirection of output to - * AppleEvents. - */ - -static char outBuf[AE_OUTBUF_SIZE]; -static int outBufLen = -1; - -void InitOutBuffer( void ) -{ - outBufLen = 0; -} - -void SendOutBuffer( char outputDone ) -{ - if( outBufLen ) - { - AEPutParamPtr( - &gResponseEvent, - keyDirectObject, - typeChar, - outBuf, - outBufLen); - } - if( outputDone ) - { - AEPutParamPtr( - &gResponseEvent, - 'DONE', - typeChar, - "DONE", - 4); - } - AESend( - &gResponseEvent, - &gResponseReplyEvent, - kAEWaitReply+kAENeverInteract, - kAENormalPriority, - kNoTimeOut, - nil, nil); -} - -/* - * The following three routines override the "real thing" from the CW - * SIOUX library in order to divert output to AppleEvents. - */ - -short -InstallConsole(short fd) -{ - if (outputMode == outToFile) - return 0; - - AECreateAppleEvent ('MCVS', 'DATA', - &gResponseAddress, - kAutoGenerateReturnID, - kAnyTransactionID, - &gResponseEvent); - - return 0; -} - -long WriteCharsToConsole( char *buf, long length ) -{ - char *tCh; - - if( outputMode == outToFile ) - { - write( outputFile, buf, length ); - return length; - } - - if( outBufLen == -1 ) InitOutBuffer(); - - if( (length + outBufLen) > AE_OUTBUF_SIZE ) - { - SendOutBuffer( FALSE ); - InitOutBuffer(); - } - - for( tCh = buf; tCh < (char *) (buf+length); tCh++ ) - { - if( *tCh == '\012' ) *tCh = '\015'; - - outBuf[outBufLen] = *tCh; - outBufLen++; - } - - if( noLineBuffer && ( *(buf+length) == '\015') ) - { - SendOutBuffer( FALSE ); - InitOutBuffer(); - } - - return length; -} - -void RemoveConsole( void ) -{ - CleanUpArgsAndEnv(); - - if( outputMode == outToFile ) - { - close(outputFile); - if( rename(tempOutputFileName, outputFileName) != 0 ) - SysBeep( 100 ); - return; - } - - SendOutBuffer( TRUE ); - - AEDisposeDesc( &gResponseEvent ); - AEDisposeDesc( &gResponseAddress ); -} -#endif // AE_IO_HANDLERS diff --git a/gnu/usr.bin/cvs/macintosh/config.h b/gnu/usr.bin/cvs/macintosh/config.h deleted file mode 100644 index aaa6f5ed963..00000000000 --- a/gnu/usr.bin/cvs/macintosh/config.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * config.h --- configuration file for MacOS - * Handbuilt for MetroWerks CodeWarrier 7 and GUSI 1.6.4 - * - * MDLadwig <mike@twinpeaks.prc.com> --- Nov 1995 - */ - -/* This file lives in the CVSHOME/macos directory */ - -#include <GUSI.h> -#include <compat.h> -#include <sys/errno.h> - -/* MetroWerks provides alloca, but only for PPC Macs - try CVS 'alloca' */ - -#if !__POWERPC__ -#undef REGEX_MALLOC -#undef HAVE_ALLOCA -#undef ALLOCA_IN_STDLIB -#undef HAVE_ALLOCA_H -#else -#undef REGEX_MALLOC -#define HAVE_ALLOCA 1 -#undef ALLOCA_IN_STDLIB -#define HAVE_ALLOCA_H 1 -#endif - -/* Define if files are crlf terminated. */ -#define LINES_CRLF_TERMINATED 1 - -/* Define if you support file names longer than 14 characters. */ -#define HAVE_LONG_FILE_NAMES 1 - -/* Define if utime(file, NULL) sets file's timestamp to the present. */ -#define HAVE_UTIME_NULL 1 - -/* Define as the return type of signal handlers (int or void). */ -#define RETSIGTYPE void - -/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ -#define STAT_MACROS_BROKEN 1 - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define if you want CVS to be able to be a remote repository client. */ -#define CLIENT_SUPPORT 1 - -/* The number of bytes in a int. */ -#define SIZEOF_INT 4 - -/* The number of bytes in a long. */ -#define SIZEOF_LONG 4 - -/* Define if you have the connect function. */ -#define HAVE_CONNECT - -/* Define if you have the ftime function. */ -#define HAVE_FTIME 1 - -/* Define if you have the ftruncate function. */ -#undef HAVE_FTRUNCATE - -/* Define if you have the setvbuf function. */ -#define HAVE_SETVBUF 1 - -/* Define if you have the vprintf function. */ -#define HAVE_VPRINTF 1 - -/* Define if you have the <dirent.h> header file. */ -#define HAVE_DIRENT_H 1 - -/* Define if you have the <fcntl.h> header file. */ -#define HAVE_FCNTL_H 1 - -/* Define if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define if you have the <utime.h> header file. */ -#define HAVE_UTIME_H 1 - -/* GUSI filesystem stuff doesn't take the last parameter (permissions). */ -#define CVS_MKDIR macos_mkdir -#define CVS_OPEN macos_open -#define CVS_CREAT macos_creat -#define CVS_FOPEN macos_fopen -#define CVS_CHDIR macos_chdir -#define CVS_ACCESS macos_access -#define CVS_OPENDIR macos_opendir -#define CVS_STAT macos_stat -#define CVS_RENAME macos_rename -#define CVS_UNLINK macos_unlink -#define CVS_CHMOD macos_chmod - -extern int macos_rename (const char *, const char *); -extern int macos_stat (const char *, struct stat *); -extern DIR * macos_opendir (const char *); -extern int macos_access(const char *, int); -extern int macos_chdir( const char *path ); -extern FILE * macos_fopen( const char *path, const char *mode ); -extern int macos_creat( const char *path, mode_t mode ); -extern int macos_open( const char *path, int oflag, ... ); -extern int macos_mkdir( const char *path, int oflag ); -extern int macos_unlink (const char *); -extern int macos_chmod( const char *path, mode_t mode ); - -/* Kludges from pwd.c */ -extern struct passwd *getpwnam (char *name); -extern pid_t getpid (void); - -/* We have prototypes. */ -#define USE_PROTOTYPES 1 - -/* Compare filenames */ -#define fncmp strcmp - -/* Don't use rsh */ -#define RSH_NOT_TRANSPARENT 1 - -#define START_SERVER macos_start_server -#define SHUTDOWN_SERVER macos_shutdown_server - -extern void macos_start_server (int *tofd, int *fromfd, - char *client_user, - char *server_user, - char *server_host, - char *server_cvsroot); -extern void macos_shutdown_server (int to); - - diff --git a/gnu/usr.bin/cvs/macintosh/filesubr.c b/gnu/usr.bin/cvs/macintosh/filesubr.c deleted file mode 100644 index 5ec82998b69..00000000000 --- a/gnu/usr.bin/cvs/macintosh/filesubr.c +++ /dev/null @@ -1,707 +0,0 @@ -/* filesubr.c --- subroutines for dealing with files - 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. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* These functions were moved out of subr.c because they need different - definitions under operating systems (like, say, Windows NT) with different - file system semantics. */ - -#include "mac_config.h" -#include "cvs.h" - -/* - * I don't know of a convenient way to test this at configure time, or else - * I'd certainly do it there. - */ -#if defined(NeXT) -#define LOSING_TMPNAM_FUNCTION -#endif - -static int deep_remove_dir PROTO((const char *path)); - -/* - * Copies "from" to "to". - */ -void -copy_file (from, to) - const char *from; - const char *to; -{ - struct stat sb; - struct utimbuf t; - int fdin, fdout; - - if (trace) -#ifdef SERVER_SUPPORT - (void) fprintf (stderr, "%c-> copy(%s,%s)\n", - (server_active) ? 'S' : ' ', from, to); -#else - (void) fprintf (stderr, "-> copy(%s,%s)\n", from, to); -#endif - if (noexec) - return; - - if ((fdin = CVS_OPEN (from, O_RDONLY)) < 0) - error (1, errno, "cannot open %s for copying", from); - if (fstat (fdin, &sb) < 0) - error (1, errno, "cannot fstat %s", from); - if ((fdout = CVS_CREAT (to, (int) sb.st_mode & 07777)) < 0) - error (1, errno, "cannot create %s for copying", to); - if (sb.st_size > 0) - { - char buf[BUFSIZ]; - int n; - - for (;;) - { - n = read (fdin, buf, sizeof(buf)); - if (n == -1) - { -#ifdef EINTR - if (errno == EINTR) - continue; -#endif - error (1, errno, "cannot read file %s for copying", from); - } - else if (n == 0) - break; - - if (write(fdout, buf, n) != n) { - error (1, errno, "cannot write file %s for copying", to); - } - } - -#ifdef HAVE_FSYNC - if (fsync (fdout)) - error (1, errno, "cannot fsync file %s after copying", to); -#endif - } - - if (close (fdin) < 0) - error (0, errno, "cannot close %s", from); - if (close (fdout) < 0) - error (1, errno, "cannot close %s", to); - - /* now, set the times for the copied file to match those of the original */ - memset ((char *) &t, 0, sizeof (t)); - t.actime = sb.st_atime; - t.modtime = sb.st_mtime; - (void) utime (to, &t); -} - -/* FIXME-krp: these functions would benefit from caching the char * & - stat buf. */ - -/* - * Returns non-zero if the argument file is a directory, or is a symbolic - * link which points to a directory. - */ -int -isdir (file) - const char *file; -{ - struct stat sb; - - if ( CVS_STAT (file, &sb) < 0) - return (0); - return (S_ISDIR (sb.st_mode)); -} - -/* - * Returns non-zero if the argument file is a symbolic link. - */ -int -islink (file) - const char *file; -{ -#ifdef S_ISLNK - struct stat sb; - - if (lstat (file, &sb) < 0) - return (0); - return (S_ISLNK (sb.st_mode)); -#else - return (0); -#endif -} - -/* - * Returns non-zero if the argument file exists. - */ -int -isfile (file) - const char *file; -{ - return isaccessible(file, F_OK); -} - -/* - * Returns non-zero if the argument file is readable. - */ -int -isreadable (file) - const char *file; -{ - return isaccessible(file, R_OK); -} - -/* - * Returns non-zero if the argument file is writable. - */ -int -iswritable (file) - const char *file; -{ - return isaccessible(file, W_OK); -} - -/* - * Returns non-zero if the argument file is accessable according to - * mode. If compiled with SETXID_SUPPORT also works if cvs has setxid - * bits set. - */ -int -isaccessible (file, mode) - const char *file; - const int mode; -{ -#ifdef SETXID_SUPPORT - struct stat sb; - int umask = 0; - int gmask = 0; - int omask = 0; - int uid; - - if ( CVS_STAT (file, &sb) == -1) - return 0; - if (mode == F_OK) - return 1; - - uid = geteuid(); - if (uid == 0) /* superuser */ - { - if (mode & X_OK) - return sb.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH); - else - return 1; - } - - if (mode & R_OK) - { - umask |= S_IRUSR; - gmask |= S_IRGRP; - omask |= S_IROTH; - } - if (mode & W_OK) - { - umask |= S_IWUSR; - gmask |= S_IWGRP; - omask |= S_IWOTH; - } - if (mode & X_OK) - { - umask |= S_IXUSR; - gmask |= S_IXGRP; - omask |= S_IXOTH; - } - - if (sb.st_uid == uid) - return (sb.st_mode & umask) == umask; - else if (sb.st_gid == getegid()) - return (sb.st_mode & gmask) == gmask; - else - return (sb.st_mode & omask) == omask; -#else - return CVS_ACCESS (file, mode) == 0; -#endif -} - -/* - * Open a file and die if it fails - */ -FILE * -open_file (name, mode) - const char *name; - const char *mode; -{ - FILE *fp; - - if ((fp = CVS_FOPEN (name, mode)) == NULL) - error (1, errno, "cannot open %s", name); - return (fp); -} - -/* - * Make a directory and die if it fails - */ -void -make_directory (name) - const char *name; -{ - struct stat sb; - - if ( CVS_STAT (name, &sb) == 0 && (!S_ISDIR (sb.st_mode))) - error (0, 0, "%s already exists but is not a directory", name); - if (!noexec && CVS_MKDIR (name, 0777) < 0) - error (1, errno, "cannot make directory %s", name); -} - -/* - * Make a path to the argument directory, printing a message if something - * goes wrong. - */ -void -make_directories (name) - const char *name; -{ - char *cp; - - if (noexec) - return; - - if ( CVS_MKDIR (name, 0777) == 0 || errno == EEXIST) - return; - if (! existence_error (errno)) - { - error (0, errno, "cannot make path to %s", name); - return; - } - if ((cp = strrchr (name, '/')) == NULL) - return; - *cp = '\0'; - make_directories (name); - *cp++ = '/'; - if (*cp == '\0') - return; - (void) CVS_MKDIR (name, 0777); -} - -/* Create directory NAME if it does not already exist; fatal error for - other errors. Returns 0 if directory was created; 1 if it already - existed. */ -int -mkdir_if_needed (name) - char *name; -{ - if (CVS_MKDIR (name, 0777) < 0) - { - if (errno != EEXIST -#ifdef EACCESS - /* This was copied over from the OS/2 code; I would guess it - isn't needed here but that has not been verified. */ - && errno != EACCESS -#endif - ) - error (1, errno, "cannot make directory %s", name); - return 1; - } - return 0; -} - -/* - * Change the mode of a file, either adding write permissions, or removing - * all write permissions. Either change honors the current umask setting. - */ -void -xchmod (fname, writable) - char *fname; - int writable; -{ - struct stat sb; - mode_t mode, oumask; - - if ( CVS_STAT (fname, &sb) < 0) - { - if (!noexec) - error (0, errno, "cannot stat %s", fname); - return; - } - oumask = umask (0); - (void) umask (oumask); - if (writable) - { - mode = sb.st_mode | (~oumask - & (((sb.st_mode & S_IRUSR) ? S_IWUSR : 0) - | ((sb.st_mode & S_IRGRP) ? S_IWGRP : 0) - | ((sb.st_mode & S_IROTH) ? S_IWOTH : 0))); - } - else - { - mode = sb.st_mode & ~(S_IWRITE | S_IWGRP | S_IWOTH) & ~oumask; - } - - if (trace) -#ifdef SERVER_SUPPORT - (void) fprintf (stderr, "%c-> chmod(%s,%o)\n", - (server_active) ? 'S' : ' ', fname, - (unsigned int) mode); -#else - (void) fprintf (stderr, "-> chmod(%s,%o)\n", fname, - (unsigned int) mode); -#endif - if (noexec) - return; - - if (chmod (fname, mode) < 0) - error (0, errno, "cannot change mode of file %s", fname); -} - -/* - * Rename a file and die if it fails - */ -void -rename_file (from, to) - const char *from; - const char *to; -{ - if (trace) -#ifdef SERVER_SUPPORT - (void) fprintf (stderr, "%c-> rename(%s,%s)\n", - (server_active) ? 'S' : ' ', from, to); -#else - (void) fprintf (stderr, "-> rename(%s,%s)\n", from, to); -#endif - if (noexec) - return; - - if ( CVS_RENAME (from, to) < 0) - error (1, errno, "cannot rename file %s to %s", from, to); -} - -/* - * link a file, if possible. Warning: the Windows NT version of this - * function just copies the file, so only use this function in ways - * that can deal with either a link or a copy. - */ -int -link_file (from, to) - const char *from; - const char *to; -{ - if (trace) -#ifdef SERVER_SUPPORT - (void) fprintf (stderr, "%c-> link(%s,%s)\n", - (server_active) ? 'S' : ' ', from, to); -#else - (void) fprintf (stderr, "-> link(%s,%s)\n", from, to); -#endif - if (noexec) - return (0); - -#ifdef macintosh - return (symlink ( (char *)macos_fixpath(from), (char *)macos_fixpath(to))); -#else - return (link (from, to)); -#endif -} - -/* - * unlink a file, if possible. - */ -int -unlink_file (f) - const char *f; -{ - if (trace) -#ifdef SERVER_SUPPORT - (void) fprintf (stderr, "%c-> unlink(%s)\n", - (server_active) ? 'S' : ' ', f); -#else - (void) fprintf (stderr, "-> unlink(%s)\n", f); -#endif - if (noexec) - return (0); - - return ( CVS_UNLINK (f)); -} - -/* - * Unlink a file or dir, if possible. If it is a directory do a deep - * removal of all of the files in the directory. Return -1 on error - * (in which case errno is set). - */ -int -unlink_file_dir (f) - const char *f; -{ - if (trace) -#ifdef SERVER_SUPPORT - (void) fprintf (stderr, "%c-> unlink_file_dir(%s)\n", - (server_active) ? 'S' : ' ', f); -#else - (void) fprintf (stderr, "-> unlink_file_dir(%s)\n", f); -#endif - if (noexec) - return (0); - - /* For at least some unices, if root tries to unlink() a directory, - instead of doing something rational like returning EISDIR, - the system will gleefully go ahead and corrupt the filesystem. - So we first call isdir() to see if it is OK to call unlink(). This - doesn't quite work--if someone creates a directory between the - call to isdir() and the call to unlink(), we'll still corrupt - the filesystem. Where is the Unix Haters Handbook when you need - it? */ - if (isdir(f)) - return deep_remove_dir(f); - else - { - if ( CVS_UNLINK (f) != 0) - return -1; - } - /* We were able to remove the file from the disk */ - return 0; -} - -/* Remove a directory and everything it contains. Returns 0 for - * success, -1 for failure (in which case errno is set). - */ - -static int -deep_remove_dir (path) - const char *path; -{ - DIR *dirp; - struct dirent *dp; - char buf[PATH_MAX]; - - if (CVS_RMDIR (path) != 0 && (errno == ENOTEMPTY || errno == EEXIST)) - { - if ((dirp = CVS_OPENDIR (path)) == NULL) - /* If unable to open the directory return - * an error - */ - return -1; - - while ((dp = readdir (dirp)) != NULL) - { - if (strcmp (dp->d_name, ".") == 0 || - strcmp (dp->d_name, "..") == 0) - continue; - - sprintf (buf, "%s/%s", path, dp->d_name); - - /* See comment in unlink_file_dir explanation of why we use - isdir instead of just calling unlink and checking the - status. */ - if (isdir(buf)) - { - if (deep_remove_dir(buf)) - { - closedir(dirp); - return -1; - } - } - else - { - if (CVS_UNLINK (buf) != 0) - { - closedir(dirp); - return -1; - } - } - } - closedir (dirp); - return CVS_RMDIR (path); - } - - /* Was able to remove the directory return 0 */ - return 0; -} - -/* Read NCHARS bytes from descriptor FD into BUF. - Return the number of characters successfully read. - The number returned is always NCHARS unless end-of-file or error. */ -static size_t -block_read (fd, buf, nchars) - int fd; - char *buf; - size_t nchars; -{ - char *bp = buf; - size_t nread; - - do - { - nread = read (fd, bp, nchars); - if (nread == (size_t)-1) - { -#ifdef EINTR - if (errno == EINTR) - continue; -#endif - return (size_t)-1; - } - - if (nread == 0) - break; - - bp += nread; - nchars -= nread; - } while (nchars != 0); - - return bp - buf; -} - - -/* - * Compare "file1" to "file2". Return non-zero if they don't compare exactly. - */ -int -xcmp (file1, file2) - const char *file1; - const char *file2; -{ - char *buf1, *buf2; - struct stat sb1, sb2; - int fd1, fd2; - int ret; - - if ((fd1 = CVS_OPEN (file1, O_RDONLY)) < 0) - error (1, errno, "cannot open file %s for comparing", file1); - if ((fd2 = CVS_OPEN (file2, O_RDONLY)) < 0) - error (1, errno, "cannot open file %s for comparing", file2); - if (fstat (fd1, &sb1) < 0) - error (1, errno, "cannot fstat %s", file1); - if (fstat (fd2, &sb2) < 0) - error (1, errno, "cannot fstat %s", file2); - - /* A generic file compare routine might compare st_dev & st_ino here - to see if the two files being compared are actually the same file. - But that won't happen in CVS, so we won't bother. */ - - if (sb1.st_size != sb2.st_size) - ret = 1; - else if (sb1.st_size == 0) - ret = 0; - else - { - /* FIXME: compute the optimal buffer size by computing the least - common multiple of the files st_blocks field */ - size_t buf_size = 8 * 1024; - size_t read1; - size_t read2; - - buf1 = xmalloc (buf_size); - buf2 = xmalloc (buf_size); - - do - { - read1 = block_read (fd1, buf1, buf_size); - if (read1 == (size_t)-1) - error (1, errno, "cannot read file %s for comparing", file1); - - read2 = block_read (fd2, buf2, buf_size); - if (read2 == (size_t)-1) - error (1, errno, "cannot read file %s for comparing", file2); - - /* assert (read1 == read2); */ - - ret = memcmp(buf1, buf2, read1); - } while (ret == 0 && read1 == buf_size); - - free (buf1); - free (buf2); - } - - (void) close (fd1); - (void) close (fd2); - return (ret); -} - -/* Just in case this implementation does not define this. */ -#ifndef L_tmpnam -#define L_tmpnam 50 -#endif - -#ifdef LOSING_TMPNAM_FUNCTION -char * -cvs_temp_name () -{ - char value[L_tmpnam + 1]; - - /* FIXME: Should be using TMPDIR. */ - strcpy (value, "/tmp/cvsXXXXXX"); - mktemp (value); - return xstrdup (value); -} -#else -/* Generate a unique temporary filename. Returns a pointer to a newly - malloc'd string containing the name. Returns successfully or not at - all. */ -char * -cvs_temp_name () -{ - char value[L_tmpnam + 1]; - char *retval; - - /* FIXME: should be using TMPDIR, perhaps by using tempnam on systems - which have it. */ - retval = tmpnam (value); - if (retval == NULL) - error (1, errno, "cannot generate temporary filename"); - return xstrdup (retval); -} -#endif - -/* Return non-zero iff FILENAME is absolute. - Trivial under Unix, but more complicated under other systems. */ -int -isabsolute (filename) - const char *filename; -{ - return filename[0] == '/'; -} - - -/* Return a pointer into PATH's last component. */ -char * -last_component (path) - char *path; -{ - char *last = strrchr (path, '/'); - - if (last) - return last + 1; - else - return path; -} - -/* Return the home directory. Returns a pointer to storage - managed by this function or its callees (currently getenv). */ -char * -get_homedir () -{ - return getenv ("HOME"); -} - -/* See cvs.h for description. On unix this does nothing, because the - shell expands the wildcards. */ -void -expand_wild (argc, argv, pargc, pargv) - int argc; - char **argv; - int *pargc; - char ***pargv; -{ - int i; - *pargc = argc; - *pargv = (char **) xmalloc (argc * sizeof (char *)); - for (i = 0; i < argc; ++i) - (*pargv)[i] = xstrdup (argv[i]); -} diff --git a/gnu/usr.bin/cvs/macintosh/mac_config.h b/gnu/usr.bin/cvs/macintosh/mac_config.h deleted file mode 100644 index 241a5dda64f..00000000000 --- a/gnu/usr.bin/cvs/macintosh/mac_config.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * mac_config.h - Macintosh-specific definitions and configuration settings - * - * MDLadwig <mike@twinpeaks.prc.com> --- July 1996 - */ -// MacCVS with AppleEvent IO and no console support. If this is not defined then IO will be -// via the SIOUX console -//#define AE_IO_HANDLERS -// Setup includes to use MSL instead of Plum-Hall ANSI library -//#define MSL_LIBRARY -#define AE_OUTBUF_SIZE 32000 // Maximum size of output Apple Events -#define AE_TIMEOUT_SECONDS 30 // Timeout for AppleEvents command recipt -#define ArgMax 512 // Maximum number of Args passed via AE command -#define EnvMax 512 // Maximum number of Env Vars passed via AE command -#define STACK_SIZE_68K 98305 // Stack size for 68k version (PPC set in CW prefs) diff --git a/gnu/usr.bin/cvs/macintosh/mac_init.c b/gnu/usr.bin/cvs/macintosh/mac_init.c deleted file mode 100644 index 69f355b6e52..00000000000 --- a/gnu/usr.bin/cvs/macintosh/mac_init.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * mac_init.c --- routines to initialize and cleanup macintosh behavior - * - * MDLadwig <mike@twinpeaks.prc.com> --- June 1996 - */ -#include "mac_config.h" - -#ifdef __POWERPC__ -#include <MacHeadersPPC> -#else -#include <MacHeaders68K> -#endif - -#include <sioux.h> -#include <GUSI.h> - -extern char **Args; -extern char **EnvVars, **EnvVals; -extern int ArgC; -extern int EnvC; - -extern int argc; -extern char **argv; - -void -macos_error_cleanup( void ) -{ - Lock_Cleanup(); - RemoveConsole(); // FIXME - Ugly, but necessary until MW fixes _exit -} - -void -InitializeMacToolbox( void ) -{ - #ifndef __POWERPC__ - SetApplLimit(GetApplLimit() - STACK_SIZE_68K); - #endif - - MaxApplZone(); - MoreMasters(); -} - -void -MacOS_Initialize( int *argc, char ***argv ) -{ - InitializeMacToolbox(); - - GUSISetup(GUSIwithSIOUXSockets); - GUSISetup(GUSIwithUnixSockets); - - SIOUXSettings.showstatusline = TRUE; - SIOUXSettings.autocloseonquit = FALSE; - SIOUXSettings.asktosaveonclose = TRUE; - - #ifdef AE_IO_HANDLERS - GetUnixCommandEnvironment( "cvs" ); - *argc = ArgC; - *argv = Args; - #else - *argc = ccommand(argv); - #endif - - error_set_cleanup (macos_error_cleanup); -} - -void -MacOS_Cleanup ( void ) -{ - RemoveConsole(); // FIXME - Ugly, but necessary until MW fixes _exit -} - diff --git a/gnu/usr.bin/cvs/macintosh/maccvs.pch b/gnu/usr.bin/cvs/macintosh/maccvs.pch deleted file mode 100644 index fe5b5c06bb9..00000000000 --- a/gnu/usr.bin/cvs/macintosh/maccvs.pch +++ /dev/null @@ -1,7 +0,0 @@ -#ifdef __POWERPC__ -#include <MacHeadersPPC> -#else -#include <MacHeaders68K> -#endif - -#define HAVE_CONFIG_H
\ No newline at end of file diff --git a/gnu/usr.bin/cvs/macintosh/maccvs.r b/gnu/usr.bin/cvs/macintosh/maccvs.r deleted file mode 100644 index 0e5c7e46f5f..00000000000 --- a/gnu/usr.bin/cvs/macintosh/maccvs.r +++ /dev/null @@ -1,52 +0,0 @@ -#define SystemSevenOrLater 1 - -#include "Types.r" -#include "SysTypes.r" -#include "BalloonTypes.r" -#include "AEUserTermTypes.r" -#include "AERegistry.r" -#include "AEObjects.r" - -#define __kPrefSize 512 -#define __kMinSize 512 - -#define GUSI_PREF_VERSION '0150' - -#include "GUSI.r" - -resource 'GU·I' (GUSIRsrcID) { - 'TEXT', 'CWIE', noAutoSpin, useChdir, approxStat, - noTCPDaemon, noUDPDaemon, - noConsole, - {}; -}; - -resource 'aete' (0, "MacCVS Suite") { - 0x01, 0x00, english, roman, - { - "MacCVS Suite", "Custom events", 'MCVS', 1, 1, - { - "Do Command", "Execute a CVS command", 'misc', 'dosc', - 'null', "", replyOptional, singleItem, notEnumerated, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - 'TEXT', "Command to execute", directParamRequired, singleItem, notEnumerated, - changesState, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - { - "Mode", 'MODE', 'MODE', "Mode (AE, File).", optional, singleItem, enumerated, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - "Environment", 'ENVT', 'TEXT', "Environment variables.", optional, listOfItems, notEnumerated, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - "Filename", 'FILE', 'TEXT', "Output file path.", optional, singleItem, notEnumerated, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - "Pathway", 'SPWD', 'TEXT', "Starting pathway.", optional, singleItem, notEnumerated, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - "NoLineBuffer", 'LBUF', 'bool', "if true, send each result line as separate AE.", optional, singleItem, notEnumerated, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, reserved, - } - }, - {}, - {}, - { - 'MODE', - { - "AE", 'TOAE', "Redirect standard output to apple events", - "File", 'FILE', "Redirect standard output to a file", - }, - }, - } -}; - diff --git a/gnu/usr.bin/cvs/macintosh/macos_filesys.c b/gnu/usr.bin/cvs/macintosh/macos_filesys.c deleted file mode 100644 index 26a93847c81..00000000000 --- a/gnu/usr.bin/cvs/macintosh/macos_filesys.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * macos_filesys.c - * Filesystem handling stuff for macos - * - * Some of this stuff is not "regular", but there are a number of weird - * conditions that a plain filepath translation didn't seem to handle. - * For now, this seems to work. - * - * Michael Ladwig <mike@twinpeaks.prc.com> --- November 1995 - */ - -#include <cvs.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -static char *macos_fixpath (const char *path); -static char scratchPath[1024]; - -int -macos_mkdir( const char *path, int oflag ) -{ - char macPath[1024], *sepCh; - - strcpy( macPath, ":" ); - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - return mkdir(macPath); -} - -int -macos_open( const char *path, int oflag, ... ) -{ - char macPath[1024], *sepCh; - - strcpy( macPath, ":" ); - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - return open(macPath, oflag); -} - -int -macos_chmod( const char *path, mode_t mode ) -{ - char macPath[1024], *sepCh; - - strcpy( macPath, ":" ); - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - return chmod(macPath, mode); -} - -int -macos_creat( const char *path, mode_t mode ) -{ - char macPath[1024], *sepCh; - - strcpy( macPath, ":" ); - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - return creat(macPath); -} - -FILE * -macos_fopen( const char *path, const char *mode ) -{ - FILE *fp; - char macPath[1024], *sepCh; - - strcpy( macPath, ":" ); - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - fp = fopen(macPath, mode); - - /* Don't know why I'm getting ENOTDIR, but it should be ENOENT */ - - if( (fp == NULL) && (errno == ENOTDIR) ) errno = ENOENT; - - return fp; -} - -int -macos_chdir( const char *path ) -{ - char macPath[1024], *sepCh; - int r; - - strcpy( macPath, ":" ); - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - r = chdir(macPath+1); - if( r < 0 ) - return chdir(macPath); - - return r; -} - -int -macos_access(const char *path, int amode) -{ - return access( macos_fixpath(path), amode ); -} - -DIR * -macos_opendir(const char *path) -{ - FILE *fp; - char macPath[1024], *sepCh; - - strcpy( macPath, ":" ); - - if( strcmp(path, ".") != 0 ) - strcat( macPath, path ); - while( (sepCh = strchr(macPath, '/')) != NULL ) - *sepCh = ':'; - - return opendir( macPath ); -} - -int -macos_stat (const char *path, struct stat *ststr) -{ - return stat( macos_fixpath(path), ststr ); -} - -int -macos_rename (const char *path, const char *newpath) -{ - char macPath_from[1024], macPath_to[1024]; - - strcpy( macPath_from, macos_fixpath(path) ); - strcpy( macPath_to, macos_fixpath(newpath) ); - - return rename( macPath_from, macPath_to ); -} - -int -macos_unlink (const char *path) -{ - return unlink( macos_fixpath(path) ); -} - -char * -macos_fixpath (const char *path) -{ - char *sepCh; - - strcpy( scratchPath, ":" ); - - if( (*path == '.') && (*(path+1) == '/') ) - strcat( scratchPath, path+2 ); - else - strcat( scratchPath, path ); - while( (sepCh = strchr(scratchPath, '/')) != NULL ) - *sepCh = ':'; - - return scratchPath; -} - -/* Shamelessly stolen from the OS2 port. Oddly, only the fopen calls - seem to respect the binary-text distinction, so I have rewritten - the code to use fopen, fread, fwrite, and fclose instead of open. */ - -void -convert_file (char *infile, int inflags, - char *outfile, int outflags) -{ - FILE *infd, *outfd; - char buf[8192]; - int len; - char iflags[10], oflags[10]; - - if( inflags & OPEN_BINARY ) - strcpy( iflags, "rb" ); - else - strcpy( iflags, "r" ); - - if( outflags & OPEN_BINARY ) - strcpy( oflags, "wb" ); - else - strcpy( oflags, "w" ); - - if ((infd = CVS_FOPEN (infile, iflags)) == NULL) - error (1, errno, "couldn't read %s", infile); - if ((outfd = CVS_FOPEN (outfile, oflags)) == NULL) - error (1, errno, "couldn't write %s", outfile); - - while ((len = fread (buf, sizeof (char), sizeof (buf), infd)) > 0) - if (fwrite (buf, sizeof (char), len, outfd) < 0) - error (1, errno, "error writing %s", outfile); - if (len < 0) - error (1, errno, "error reading %s", infile); - - if (fclose (outfd) < 0) - error (0, errno, "warning: couldn't close %s", outfile); - if (fclose (infd) < 0) - error (0, errno, "warning: couldn't close %s", infile); -}
\ No newline at end of file diff --git a/gnu/usr.bin/cvs/macintosh/options.h b/gnu/usr.bin/cvs/macintosh/options.h deleted file mode 100644 index fe0820f5f31..00000000000 --- a/gnu/usr.bin/cvs/macintosh/options.h +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (c) 1992, Brian Berliner and Jeff Polk - * Copyright (c) 1989-1992, Brian Berliner - * - * You may distribute under the terms of the GNU General Public License as - * specified in the README file that comes with the CVS 1.4 kit. - * - * This file holds (most of) the configuration tweaks that can be made to - * customize CVS for your site. CVS comes configured for a typical SunOS 4.x - * environment. The comments for each configurable item are intended to be - * self-explanatory. All #defines are tested first to see if an over-riding - * option was specified on the "make" command line. - * - * If special libraries are needed, you will have to edit the Makefile.in file - * or the configure script directly. Sorry. - */ - -/* - * CVS provides the most features when used in conjunction with the Version-5 - * release of RCS. Thus, it is the default. This also assumes that GNU diff - * Version-1.15 is being used as well -- you will have to configure your RCS - * V5 release separately to make this the case. If you do not have RCS V5 and - * GNU diff V1.15, comment out this define. You should not try mixing and - * matching other combinations of these tools. - */ -#ifndef HAVE_RCS5 -#define HAVE_RCS5 -#endif - -/* - * If, before installing this version of CVS, you were running RCS V4 AND you - * are installing this CVS and RCS V5 and GNU diff 1.15 all at the same time, - * you should turn on the following define. It only exists to try to do - * reasonable things with your existing checked out files when you upgrade to - * RCS V5, since the keyword expansion formats have changed with RCS V5. - * - * If you already have been running with RCS5, or haven't been running with CVS - * yet at all, or are sticking with RCS V4 for now, leave the commented out. - */ -#ifndef HAD_RCS4 -/* #define HAD_RCS4 */ -#endif - -/* - * For portability and heterogeneity reasons, CVS is shipped by default using - * my own text-file version of the ndbm database library in the src/myndbm.c - * file. If you want better performance and are not concerned about - * heterogeneous hosts accessing your modules file, turn this option off. - */ -#ifndef MY_NDBM -#define MY_NDBM -#endif - -/* - * The "diff" program to execute when creating patch output. This "diff" - * must support the "-c" option for context diffing. Specify a full - * pathname if your site wants to use a particular diff. If you are - * using the GNU version of diff (version 1.15 or later), this should - * be "diff -a". - * - * NOTE: this program is only used for the ``patch'' sub-command (and - * for ``update'' if you are using the server). The other commands - * use rcsdiff which will use whatever version of diff was specified - * when rcsdiff was built on your system. - */ - -#ifndef DIFF -#define DIFF "@gdiff_path@" -#endif - -/* - * The "grep" program to execute when checking to see if a merged file had - * any conflicts. This "grep" must support the "-s" option and a standard - * regular expression as an argument. Specify a full pathname if your site - * wants to use a particular grep. - */ - -#ifndef GREP -#define GREP "@ggrep_path@" -#endif - -/* - * The "rm" program to execute when pruning directories that are not part of - * a release. This "rm" must support the "-fr" options. Specify a full - * pathname if your site wants to use a particular rm. - */ -#ifndef RM -#define RM "rm" -#endif - -/* - * The "sort" program to execute when displaying the module database. Specify - * a full pathname if your site wants to use a particular sort. - */ -#ifndef SORT -#define SORT "sort" -#endif - -/* - * The "patch" program to run when using the CVS server and accepting - * patches across the network. Specify a full pathname if your site - * wants to use a particular patch. - */ -#ifndef PATCH_PROGRAM -#define PATCH_PROGRAM "patch" -#endif - -/* - * By default, RCS programs are executed with the shell or through execlp(), - * so the user's PATH environment variable is searched. If you'd like to - * bind all RCS programs to a certain directory (perhaps one not in most - * people's PATH) then set the default in RCSBIN_DFLT. Note that setting - * this here will cause all RCS programs to be executed from this directory, - * unless the user overrides the default with the RCSBIN environment variable - * or the "-b" option to CVS. - * - * This define should be either the empty string ("") or a full pathname to the - * directory containing all the installed programs from the RCS distribution. - */ -#ifndef RCSBIN_DFLT -#define RCSBIN_DFLT "" -#endif - -/* - * The default editor to use, if one does not specify the "-e" option to cvs, - * or does not have an EDITOR environment variable. I set this to just "vi", - * and use the shell to find where "vi" actually is. This allows sites with - * /usr/bin/vi or /usr/ucb/vi to work equally well (assuming that your PATH - * is reasonable). - * - * The notepad program seems to be Windows NT's bare-bones text editor. - */ -#ifndef EDITOR_DFLT -#define EDITOR_DFLT "notepad" -#endif - -/* - * The default umask to use when creating or otherwise setting file or - * directory permissions in the repository. Must be a value in the - * range of 0 through 0777. For example, a value of 002 allows group - * rwx access and world rx access; a value of 007 allows group rwx - * access but no world access. This value is overridden by the value - * of the CVSUMASK environment variable, which is interpreted as an - * octal number. - */ -#ifndef UMASK_DFLT -#define UMASK_DFLT 002 -#endif - -/* - * The cvs admin command is restricted to the members of the group - * CVS_ADMIN_GROUP. If this group does not exist, all users are - * allowed to run cvs admin. To disable the cvs admin for all users, - * create an empty group CVS_ADMIN_GROUP. To disable access control for - * cvs admin, comment out the define below. - * - * Under Windows NT and OS/2, this must not be used because it tries - * to include <grp.h>. - */ -#ifdef CVS_ADMIN_GROUP -/* #define CVS_ADMIN_GROUP "cvsadmin" */ -#endif - -/* - * The Repository file holds the path to the directory within the source - * repository that contains the RCS ,v files for each CVS working directory. - * This path is either a full-path or a path relative to CVSROOT. - * - * The only advantage that I can see to having a relative path is that One can - * change the physical location of the master source repository, change one's - * CVSROOT environment variable, and CVS will work without problems. I - * recommend using full-paths. - */ -#ifndef RELATIVE_REPOS -/* #define RELATIVE_REPOS */ -#endif - -/* - * When committing or importing files, you must enter a log message. - * Normally, you can do this either via the -m flag on the command line or an - * editor will be started for you. If you like to use logging templates (the - * rcsinfo file within the $CVSROOT/CVSROOT directory), you might want to - * force people to use the editor even if they specify a message with -m. - * Enabling FORCE_USE_EDITOR will cause the -m message to be appended to the - * temp file when the editor is started. - */ -#ifndef FORCE_USE_EDITOR -/* #define FORCE_USE_EDITOR */ -#endif - -/* - * When locking the repository, some sites like to remove locks and assume - * the program that created them went away if the lock has existed for a long - * time. This used to be the default for previous versions of CVS. CVS now - * attempts to be much more robust, so lock files should not be left around - * by mistake. The new behaviour will never remove old locks (they must now - * be removed by hand). Enabling CVS_FUDGELOCKS will cause CVS to remove - * locks that are older than CVSLCKAGE seconds. - * Use of this option is NOT recommended. - */ -#ifndef CVS_FUDGELOCKS -/* #define CVS_FUDGELOCKS */ -#endif - -/* - * When committing a permanent change, CVS and RCS make a log entry of - * who committed the change. If you are committing the change logged in - * as "root" (not under "su" or other root-priv giving program), CVS/RCS - * cannot determine who is actually making the change. - * - * As such, by default, CVS disallows changes to be committed by users - * logged in as "root". You can disable this option by commenting - * out the lines below. - * - * Under Windows NT, privileges are associated with groups, not users, - * so the case in which someone has logged in as root does not occur. - * Thus, there is no need for this hack. - * - * todo: I don't know about OS/2 yet. -kff - */ -#undef CVS_BADROOT - -/* - * The "cvs admin" command allows people to get around most of the logging - * and info procedures within CVS. For exmaple, "cvs tag tagname filename" - * will perform some validity checks on the tag, while "cvs admin -Ntagname" - * will not perform those checks. For this reason, some sites may wish to - * disable the admin function completely. - * - * To disable the admin function, uncomment the lines below. - */ -#ifndef CVS_NOADMIN -/* #define CVS_NOADMIN */ -#endif - -/* - * The "cvs diff" command accepts all the single-character options that GNU - * diff (1.15) accepts. Except -D. GNU diff uses -D as a way to put - * cpp-style #define's around the output differences. CVS, by default, uses - * -D to specify a free-form date (like "cvs diff -D '1 week ago'"). If - * you would prefer that the -D option of "cvs diff" work like the GNU diff - * option, then comment out this define. - */ -#ifndef CVS_DIFFDATE -#define CVS_DIFFDATE -#endif - -/* - * define this to enable the SETXID support (see FAQ 4D.13) - * [ We have no such thing under OS/2, so far as I know. ] - */ -#undef SETXID_SUPPORT - -/* - * "cvs login" is under construction. Don't define this unless you're - * testing it, in which case you're me and you already know that. - */ -/* #define CVS_LOGIN */ - -/* End of CVS configuration section */ - -/* - * Externs that are included in libc, but are used frequently enough to - * warrant defining here. - */ -#ifndef STDC_HEADERS -extern void exit (); -#endif - -#ifndef getwd -extern char *getwd (); -#endif - diff --git a/gnu/usr.bin/cvs/macintosh/pwd.c b/gnu/usr.bin/cvs/macintosh/pwd.c deleted file mode 100644 index 7bcc30fd995..00000000000 --- a/gnu/usr.bin/cvs/macintosh/pwd.c +++ /dev/null @@ -1,65 +0,0 @@ -/* pwd.c - Try to approximate UN*X's getuser...() functions under MS-DOS. - Copyright (C) 1990 by Thorsten Ohl, td12@ddagsi3.bitnet - - 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 1, 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. - - $Header: /cvs/OpenBSD/src/gnu/usr.bin/cvs/macintosh/Attic/pwd.c,v 1.1 1996/01/30 00:19:39 tholo Exp $ -*/ - -/* This 'implementation' is conjectured from the use of this functions in - the RCS and BASH distributions. Of course these functions don't do too - much useful things under MS-DOS, but using them avoids many "#ifdef - MSDOS" in ported UN*X code ... */ - -/* Stripped out stuff - MDLadwig <mike@twinpeaks.prc.com> --- Nov 1995 */ - -#include <cvs.h> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -static char *home_dir = "."; /* we feel (no|every)where at home */ -static struct passwd pw; /* should we return a malloc()'d structure */ -static struct group gr; /* instead of pointers to static structures? */ - -#if !__POWERPC__ -pid_t getpid( void ) { return 0; } /* getpid */ -#endif - -pid_t waitpid(pid_t, int *, int) { return 0; } /* waitpid */ - -mode_t umask(mode_t) { return 0; } /* Umask */ - -/* return something like a username in a (butchered!) passwd structure. */ - -struct passwd * -getpwuid (int uid) -{ - pw.pw_name = NULL; /* getlogin (); */ - pw.pw_dir = home_dir; - pw.pw_shell = NULL; - pw.pw_uid = 0; - - return &pw; -} - -/* Misc uid stuff */ - -struct passwd * getpwnam (char *name) { return (struct passwd *) 0; } -int getuid () { return 0; } -int geteuid () { return 0; } -int getegid () { return 0; } - diff --git a/gnu/usr.bin/cvs/macintosh/pwd.h b/gnu/usr.bin/cvs/macintosh/pwd.h deleted file mode 100644 index d451dbc0e4d..00000000000 --- a/gnu/usr.bin/cvs/macintosh/pwd.h +++ /dev/null @@ -1,37 +0,0 @@ -/********************************************************************* -Project : GUSI - Grand Unified Socket Interface -File : pwd.h - Provide mission header ioctl.h for CodeWarrior -Author : Matthias Neeracher -Language : MPW C/C++ -$Log: pwd.h,v $ -Revision 1.1 1996/10/18 03:36:59 tholo -Initial revision - -Revision 1.1 1996/07/26 20:08:29 kingdon -Check in new macintosh directory from Mike Ladwig. I believe that this -checkin contains exactly the tarfile he sent to me, with the exception -of the files SIOUX.c SIOUXGlobals.h SIOUXMenus.h SIOUXWindows.h which -are copyright Metrowerks and which we therefore cannot distribute. - -*********************************************************************/ - -#include <sys/types.h> - -struct group { /* see getgrent(3) */ - char *gr_name; - char *gr_passwd; - gid_t gr_gid; - char **gr_mem; -}; - -struct passwd { - char *pw_name; - char *pw_passwd; - uid_t pw_uid; - gid_t pw_gid; - char *pw_age; - char *pw_comment; - char *pw_gecos; - char *pw_dir; - char *pw_shell; -};
\ No newline at end of file diff --git a/gnu/usr.bin/cvs/macintosh/rcmd.c b/gnu/usr.bin/cvs/macintosh/rcmd.c deleted file mode 100644 index 877be42a2bc..00000000000 --- a/gnu/usr.bin/cvs/macintosh/rcmd.c +++ /dev/null @@ -1,247 +0,0 @@ -/* $NetBSD: rcmd.c,v 1.12 1995/06/03 22:33:34 mycroft Exp $ */ - -/* - * Copyright (c) 1983, 1993, 1994 - * The Regents of the University of California. 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 the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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. - */ - -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)rcmd.c 8.3 (Berkeley) 3/26/94"; -#else -static char *rcsid = "$NetBSD: rcmd.c,v 1.12 1995/06/03 22:33:34 mycroft Exp $"; -#endif -#endif /* LIBC_SCCS and not lint */ - -#define MAXPATHLEN 1024 -#ifndef MAXHOSTNAMELEN -#define MAXHOSTNAMELEN 256 -#endif - -#include <GUSI.h> -#include <sys/errno.h> -#include <sys/socket.h> -#include <sys/stat.h> - -#include <netinet/in.h> - -#include <signal.h> -#include <fcntl.h> -#include <netdb.h> -#include <unistd.h> -#include <pwd.h> -#include <errno.h> -#include <stdio.h> -#include <ctype.h> -#include <string.h> - -int -rcmd(ahost, rport, locuser, remuser, cmd, fd2p) - char **ahost; - u_short rport; - const char *locuser, *remuser, *cmd; - int *fd2p; -{ - struct hostent *hp; - struct sockaddr_in sin, from; - fd_set reads; - long oldmask; - pid_t pid; - int s, lport, timo; - char c; - - pid = getpid(); - hp = gethostbyname(*ahost); - if (hp == NULL) { - /*herror(*ahost);*/ - (void)fprintf(stderr, - "rcmd: socket: gethostbyname failed for %s\n", *ahost); - return (-1); - } - *ahost = hp->h_name; - /* oldmask = sigblock(sigmask(SIGURG)); */ - for (timo = 1, lport = IPPORT_RESERVED - 1;;) { - s = rresvport(&lport); - if (s < 0) { - if (errno == EDEADLK) /* EDEADLK */ - (void)fprintf(stderr, - "rcmd: socket: All ports in use\n"); - else - (void)fprintf(stderr, "rcmd: socket: %s\n", - strerror(errno)); - /* sigsetmask(oldmask); */ - return (-1); - } - fcntl(s, F_SETOWN, pid); - sin.sin_len = sizeof(struct sockaddr_in); - sin.sin_family = hp->h_addrtype; - sin.sin_port = rport; - bcopy(hp->h_addr_list[0], &sin.sin_addr, hp->h_length); - if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0) - break; - (void)close(s); - if (errno == EADDRINUSE) { - lport--; - continue; - } - if (errno == ECONNREFUSED && timo <= 16) { - (void)sleep(timo); - timo *= 2; - continue; - } - if (hp->h_addr_list[1] != NULL) { - int oerrno = errno; - - (void)fprintf(stderr, "connect to address %s: ", - inet_ntoa(sin.sin_addr)); - errno = oerrno; - perror(0); - hp->h_addr_list++; - bcopy(hp->h_addr_list[0], &sin.sin_addr, hp->h_length); - (void)fprintf(stderr, "Trying %s...\n", - inet_ntoa(sin.sin_addr)); - continue; - } - (void)fprintf(stderr, "%s: %s\n", hp->h_name, strerror(errno)); - /* sigsetmask(oldmask); */ - return (-1); - } - lport--; - if (fd2p == 0) { - write(s, "", 1); - lport = 0; - } else { - char num[8]; - int s2 = rresvport(&lport), s3; - int len = sizeof(from); - if (s2 < 0) - goto bad; - listen(s2, 1); - /*(void)snprintf(num, sizeof(num), "%d", lport);*/ - sprintf(num,"%d", lport); - if (write(s, num, strlen(num)+1) != strlen(num)+1) { - (void)fprintf(stderr, - "rcmd: write (setting up stderr): %s\n", - strerror(errno)); - (void)close(s2); - goto bad; - } - FD_ZERO(&reads); - FD_SET(s, &reads); - FD_SET(s2, &reads); - errno = 0; - if (select(MAX(s, s2) + 1, &reads, 0, 0, 0) < 1 || - !FD_ISSET(s2, &reads)) { - if (errno != 0) - (void)fprintf(stderr, - "rcmd: select (setting up stderr): %s\n", - strerror(errno)); - else - (void)fprintf(stderr, - "select: protocol failure in circuit setup\n"); - (void)close(s2); - goto bad; - } - s3 = accept(s2, (struct sockaddr *)&from, &len); - (void)close(s2); - if (s3 < 0) { - (void)fprintf(stderr, - "rcmd: accept: %s\n", strerror(errno)); - lport = 0; - goto bad; - } - *fd2p = s3; - from.sin_port = ntohs(from.sin_port); - if (from.sin_family != AF_INET || - from.sin_port >= IPPORT_RESERVED || - from.sin_port < IPPORT_RESERVED / 2) { - (void)fprintf(stderr, - "socket: protocol failure in circuit setup.\n"); - goto bad2; - } - } - (void)write(s, locuser, strlen(locuser)+1); - (void)write(s, remuser, strlen(remuser)+1); - (void)write(s, cmd, strlen(cmd)+1); - if (read(s, &c, 1) != 1) { - (void)fprintf(stderr, - "rcmd: %s: %s\n", *ahost, strerror(errno)); - goto bad2; - } - if (c != 0) { - while (read(s, &c, 1) == 1) { - (void)write(STDERR_FILENO, &c, 1); - if (c == '\n') - break; - } - goto bad2; - } - /* sigsetmask(oldmask); */ - return (s); -bad2: - if (lport) - (void)close(*fd2p); -bad: - (void)close(s); - /* sigsetmask(oldmask); */ - return (-1); -} - -int -rresvport(alport) - int *alport; -{ - struct sockaddr_in sin; - int s; - - sin.sin_len = sizeof(struct sockaddr_in); - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = INADDR_ANY; - s = socket(AF_INET, SOCK_STREAM, 0); - if (s < 0) - return (-1); - for (;;) { - sin.sin_port = htons((u_short)*alport); - if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) >= 0) - return (s); - if (errno != EADDRINUSE) { - (void)close(s); - return (-1); - } - (*alport)--; - if (*alport == IPPORT_RESERVED/2) { - (void)close(s); - errno = EDEADLK; /* close */ - return (-1); - } - } -} - diff --git a/gnu/usr.bin/cvs/macintosh/run.c b/gnu/usr.bin/cvs/macintosh/run.c deleted file mode 100644 index bdc59160398..00000000000 --- a/gnu/usr.bin/cvs/macintosh/run.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * run.c --- stubs for unused cvs functions in 'src/run.c' - * - * MDLadwig <mike@twinpeaks.prc.com> --- Nov 1995 - */ - -#include <cvs.h> -#include <stdio.h> - -void run_arg (const char *s) { } -void run_print (FILE * fp) { } -void run_setup (const char *fmt,...) { } -void run_args (const char *fmt,...) { } -int run_exec (char *stin, char *stout, char *sterr, int flags) { return 0; } -FILE * Popen (const char *, const char *) { return NULL; } -int pclose(FILE *fp) { return 0; } -int piped_child (char **, int *, int *) { return 0; } -void close_on_exec (int) { } -int filter_stream_through_program (int, int, char **, pid_t *) { return 0; } diff --git a/gnu/usr.bin/cvs/macintosh/server_if.c b/gnu/usr.bin/cvs/macintosh/server_if.c deleted file mode 100644 index 8b676d57e9b..00000000000 --- a/gnu/usr.bin/cvs/macintosh/server_if.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * server_if.c - * Open connection to the CVS server under MacOS - * - * Michael Ladwig <mike@twinpeaks.prc.com> --- November 1995 - */ - -#include "cvs.h" - -#include <GUSI.h> -#include <sys/socket.h> - -static int read_fd, write_fd; - -void -macos_start_server (int *tofd, int *fromfd, - char *client_user, - char *server_user, - char *server_host, - char *server_cvsroot) -{ - char *cvs_server; - char *command; - struct servent *s; - unsigned short port; - - if (! (cvs_server = getenv ("CVS_SERVER"))) - cvs_server = "cvs"; - command = alloca (strlen (cvs_server) - + strlen (server_cvsroot) - + 50); - sprintf (command, "%s -d %s server", cvs_server, server_cvsroot); - - if ((s = getservbyname("shell", "tcp")) == NULL) - error (1, errno, "cannot getservbyname for shell, tcp"); - - else - port = s->s_port; - - read_fd = rcmd (&server_host, - port, - client_user, - (server_user ? server_user : client_user), - command, - 0); - if (read_fd < 0) - error (1, errno, "cannot start server via rcmd"); - - /* Split the socket into a reading and a writing half. */ - if ((write_fd = dup (read_fd)) < 0) - error (1, errno, "duplicating server connection"); - - *tofd = write_fd; - *fromfd = read_fd; -} - - -void -macos_shutdown_server (int to_server) -{ - if( close (read_fd) != 0 ) perror( "close on read_fd"); - if( close (write_fd) != 0 ) perror( "close on write_fd"); -} diff --git a/gnu/usr.bin/cvs/macintosh/services b/gnu/usr.bin/cvs/macintosh/services deleted file mode 100644 index 60013751f99..00000000000 --- a/gnu/usr.bin/cvs/macintosh/services +++ /dev/null @@ -1,91 +0,0 @@ -# -# Network services, Internet style -# -# @(#)services 8.1 (Berkeley) 6/9/93 -# -tcpmux 1/tcp # TCP port multiplexer (RFC1078) -echo 7/tcp -echo 7/udp -discard 9/tcp sink null -discard 9/udp sink null -systat 11/tcp users -daytime 13/tcp -daytime 13/udp -netstat 15/tcp -qotd 17/tcp quote -chargen 19/tcp ttytst source -chargen 19/udp ttytst source -ftp 21/tcp -telnet 23/tcp -smtp 25/tcp mail -time 37/tcp timserver -time 37/udp timserver -rlp 39/udp resource # resource location -nameserver 42/tcp name # IEN 116 -whois 43/tcp nicname -domain 53/tcp nameserver # name-domain server -domain 53/udp nameserver -mtp 57/tcp # deprecated -# Bootp experimental (sellgren@vangogh) -bootp 67/udp # bootp server -#bootpc 68/udp # bootp client -# -tftp 69/udp -rje 77/tcp netrjs -finger 79/tcp -link 87/tcp ttylink -supdup 95/tcp -hostnames 101/tcp hostname # usually from sri-nic -tsap 102/tcp # part of ISODE. -#csnet-cs 105/? -pop 110/tcp postoffice # POP3 -sunrpc 111/tcp -sunrpc 111/udp -auth 113/tcp authentication -sftp 115/tcp -uucp-path 117/tcp -nntp 119/tcp readnews untp # USENET News Transfer Protocol -ntp 123/udp -snmp 161/udp -snmp-trap 162/udp -portmap 211/tcp # port mapper -portmap 211/udp # port mapper -# -# UNIX specific services -# -exec 512/tcp -biff 512/udp comsat -login 513/tcp -who 513/udp whod -shell 514/tcp cmd # no passwords used -syslog 514/udp -printer 515/tcp spooler # line printer spooler -talk 517/udp -ntalk 518/udp -route 520/udp router routed -timed 525/udp timeserver -tempo 526/tcp newdate -courier 530/tcp rpc -conference 531/tcp chat -netnews 532/tcp readnews -netwall 533/udp # -for emergency broadcasts -uucp 540/tcp uucpd # uucp daemon -rdist 541/tcp rdistd # rdist daemon -remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem -supfilesrv 871/tcp supserver # Software upgrade protocol - -ingreslock 1524/tcp -# -# Kerberos (Project Athena/MIT) services -# -kerberos 750/udp kdc # Kerberos (server) udp -kerberos 750/tcp kdc # Kerberos (server) tcp -krbupdate 760/tcp kreg # Kerberos registration -kpasswd 761/tcp kpwd # Kerberos "passwd" -klogin 543/tcp # Kerberos rlogin -eklogin 2105/tcp # Kerberos encrypted rlogin -kshell 544/tcp krcmd # Kerberos remote shell -* -* MachTen tcptraffic socket -* -tcptraffic 4002/tcp diff --git a/gnu/usr.bin/cvs/src/commit.c b/gnu/usr.bin/cvs/src/commit.c index 61e25de9e2e..c4cbd24f18e 100644 --- a/gnu/usr.bin/cvs/src/commit.c +++ b/gnu/usr.bin/cvs/src/commit.c @@ -676,9 +676,10 @@ commit (argc, argv) { time_t now; - (void) time (&now); - if (now == last_register_time) + for (;;) { + (void) time (&now); + if (now != last_register_time) break; sleep (1); /* to avoid time-stamp races */ } } diff --git a/gnu/usr.bin/cvs/src/cvs.h b/gnu/usr.bin/cvs/src/cvs.h index 1c543ae0fd5..1ffa7d91ae6 100644 --- a/gnu/usr.bin/cvs/src/cvs.h +++ b/gnu/usr.bin/cvs/src/cvs.h @@ -465,7 +465,7 @@ extern void check_numeric PROTO ((const char *, int, char **)); char *getcaller PROTO((void)); char *time_stamp PROTO((char *file)); -char *xmalloc PROTO((size_t bytes)); +void *xmalloc PROTO((size_t bytes)); void *xrealloc PROTO((void *ptr, size_t bytes)); void expand_string PROTO ((char **, size_t *, size_t)); char *xstrdup PROTO((const char *str)); diff --git a/gnu/usr.bin/cvs/src/import.c b/gnu/usr.bin/cvs/src/import.c index dcb35d4b818..911ef930d19 100644 --- a/gnu/usr.bin/cvs/src/import.c +++ b/gnu/usr.bin/cvs/src/import.c @@ -168,7 +168,8 @@ import (argc, argv) } /* XXX - this should be a module, not just a pathname */ - if (! isabsolute (argv[0])) + if (! isabsolute (argv[0]) + && pathname_levels (argv[0]) == 0) { if (CVSroot_directory == NULL) { @@ -183,9 +184,11 @@ import (argc, argv) } else { - repository = xmalloc (strlen (argv[0]) + 5); - (void) strcpy (repository, argv[0]); - repos_len = 0; + /* It is somewhere between a security hole and "unexpected" to + let the client start mucking around outside the cvsroot + (wouldn't get the right CVSROOT configuration, &c). */ + error (1, 0, "directory %s not relative within the repository", + argv[0]); } /* diff --git a/gnu/usr.bin/cvs/src/main.c b/gnu/usr.bin/cvs/src/main.c index beed6e4e4a2..4d75df46a80 100644 --- a/gnu/usr.bin/cvs/src/main.c +++ b/gnu/usr.bin/cvs/src/main.c @@ -222,6 +222,7 @@ static const char *const cmd_usage[] = static const char *const opt_usage[] = { + /* Omit -b because it is just for compatibility. */ "CVS global options (specified before the command name) are:\n", " -H Displays usage information for command.\n", " -Q Cause CVS to be really quiet.\n", @@ -232,7 +233,6 @@ static const char *const opt_usage[] = " -n Do not execute anything that will change the disk.\n", " -t Show trace of program execution -- try with -n.\n", " -v CVS version and copyright.\n", - " -b bindir Find RCS programs in 'bindir'.\n", " -T tmpdir Use 'tmpdir' for temporary files.\n", " -e editor Use 'editor' for editing log information.\n", " -d CVS_root Overrides $CVSROOT as the root of the CVS tree.\n", diff --git a/gnu/usr.bin/cvs/src/mkmodules.c b/gnu/usr.bin/cvs/src/mkmodules.c index a5a87cf7ab8..cf2ae7a0585 100644 --- a/gnu/usr.bin/cvs/src/mkmodules.c +++ b/gnu/usr.bin/cvs/src/mkmodules.c @@ -362,7 +362,7 @@ static const struct admin_file filelist[] = { {CVSROOTADM_CONFIG, "a %s file configures various behaviors", config_contents}, - {NULL, NULL} + {NULL, NULL, NULL} }; /* Rebuild the checked out administrative files in directory DIR. */ diff --git a/gnu/usr.bin/cvs/src/rcs.c b/gnu/usr.bin/cvs/src/rcs.c index 571ae2a300e..e8c64749d0a 100644 --- a/gnu/usr.bin/cvs/src/rcs.c +++ b/gnu/usr.bin/cvs/src/rcs.c @@ -153,6 +153,8 @@ static const char spacetab[] = { #define whitespace(c) (spacetab[(unsigned char)c] != 0) +static char *rcs_lockfile; + /* A few generic thoughts on error handling, in particular the printing of unexpected characters that we find in the RCS file (that is, why we use '\x%x' rather than %c or some such). @@ -2520,6 +2522,16 @@ RCS_tag2rev (rcs, tag) } } + /* Try for a real (that is, exists in the RCS deltas) branch + (RCS_exist_rev just checks for real revisions and revisions + which have tags pointing to them). */ + pa = RCS_getbranch (rcs, rev, 1); + if (pa != NULL) + { + free (pa); + return rev; + } + /* Tag is branch, but does not exist, try corresponding * magic branch tag. * @@ -2543,7 +2555,7 @@ RCS_tag2rev (rcs, tag) RCS_check_tag (tag); /* exit if not a valid tag */ /* If tag is "HEAD", special case to get head RCS revision */ - if (tag && (strcmp (tag, TAG_HEAD) == 0)) + if (tag && STREQ (tag, TAG_HEAD)) return (RCS_head (rcs)); /* If valid tag let translate_symtag say yea or nay. */ @@ -4591,9 +4603,9 @@ RCS_checkout (rcs, workfile, rev, nametag, options, sout, pfn, callerdat) error (1, 0, "%s:%s has bad `special' newphrase %s", workfile, vers->version, info->data); devnum = devnum_long; - if (strcmp (devtype, "character") == 0) + if (STREQ (devtype, "character")) special_file = S_IFCHR; - else if (strcmp (devtype, "block") == 0) + else if (STREQ (devtype, "block")) special_file = S_IFBLK; else error (0, 0, "%s is a special file of unsupported type `%s'", @@ -5154,6 +5166,9 @@ RCS_checkin (rcs, workfile, message, rev, flags) struct tm *ftm; time_t modtime; int adding_branch = 0; +#ifdef PRESERVE_PERMISSIONS_SUPPORT + struct stat sb; +#endif commitpt = NULL; @@ -5227,7 +5242,6 @@ RCS_checkin (rcs, workfile, message, rev, flags) if (preserve_perms) { Node *np; - struct stat sb; char buf[64]; /* static buffer should be safe: see usage. -twp */ delta->other_delta = getlist(); @@ -5326,6 +5340,12 @@ RCS_checkin (rcs, workfile, message, rev, flags) dtext->version = xstrdup (newrev); bufsize = 0; +#ifdef PRESERVE_PERMISSIONS_SUPPORT + if (preserve_perms && !S_ISREG (sb.st_mode)) + /* Pretend file is empty. */ + bufsize = 0; + else +#endif get_file (workfile, workfile, rcs->expand != NULL && STREQ (rcs->expand, "b") ? "rb" : "r", &dtext->text, &bufsize, &dtext->len); @@ -5563,6 +5583,12 @@ RCS_checkin (rcs, workfile, message, rev, flags) /* If this revision is being inserted on the trunk, the change text for the new delta should be the contents of the working file ... */ bufsize = 0; +#ifdef PRESERVE_PERMISSIONS_SUPPORT + if (preserve_perms && !S_ISREG (sb.st_mode)) + /* Pretend file is empty. */ + ; + else +#endif get_file (workfile, workfile, rcs->expand != NULL && STREQ (rcs->expand, "b") ? "rb" : "r", &dtext->text, &bufsize, &dtext->len); @@ -6637,8 +6663,23 @@ RCS_delete_revs (rcs, tag1, tag2, inclusive) char *diffbuf; size_t bufsize, len; +#if defined (__CYGWIN32__) || defined (_WIN32) + /* FIXME: This is an awful kludge, but at least until I have + time to work on it a little more and test it, I'd rather + give a fatal error than corrupt the file. I think that we + need to use "-kb" and "--binary" and "rb" to get_file + (probably can do it always, not just for binary files, if + we are consistent between the RCS_checkout and the diff). */ + { + char *expand = RCS_getexpand (rcs); + if (expand != NULL && STREQ (expand, "b")) + error (1, 0, + "admin -o not implemented yet for binary on this system"); + } +#endif + afterfile = cvs_temp_name(); - status = RCS_checkout (rcs, NULL, after, NULL, NULL, afterfile, + status = RCS_checkout (rcs, NULL, after, NULL, "-ko", afterfile, (RCSCHECKOUTPROC)0, NULL); if (status > 0) goto delrev_done; @@ -6666,7 +6707,7 @@ RCS_delete_revs (rcs, tag1, tag2, inclusive) else { beforefile = cvs_temp_name(); - status = RCS_checkout (rcs, NULL, before, NULL, NULL, beforefile, + status = RCS_checkout (rcs, NULL, before, NULL, "-ko", beforefile, (RCSCHECKOUTPROC)0, NULL); if (status > 0) goto delrev_done; @@ -7122,7 +7163,7 @@ apply_rcs_changes (lines, diffbuf, difflen, name, addvers, delvers) we define a deltafrag as an add or a delete) need to be applied in reverse order. So we stick them into a linked list. */ struct deltafrag { - enum {ADD, DELETE} type; + enum {FRAG_ADD, FRAG_DELETE} type; unsigned long pos; unsigned long nlines; const char *new_lines; @@ -7162,7 +7203,7 @@ apply_rcs_changes (lines, diffbuf, difflen, name, addvers, delvers) { unsigned int i; - df->type = ADD; + df->type = FRAG_ADD; i = df->nlines; /* The text we want is the number of lines specified, or until the end of the value, whichever comes first (it @@ -7192,7 +7233,7 @@ apply_rcs_changes (lines, diffbuf, difflen, name, addvers, delvers) --df->pos; assert (op == 'd'); - df->type = DELETE; + df->type = FRAG_DELETE; } } @@ -7202,12 +7243,12 @@ apply_rcs_changes (lines, diffbuf, difflen, name, addvers, delvers) switch (df->type) { - case ADD: + case FRAG_ADD: if (! linevector_add (lines, df->new_lines, df->len, addvers, df->pos)) return 0; break; - case DELETE: + case FRAG_DELETE: if (df->pos > lines->nlines || df->pos + df->nlines > lines->nlines) return 0; @@ -8436,6 +8477,30 @@ count_delta_actions (np, ignore) return 0; } +/* + * Clean up temporary files + */ +static RETSIGTYPE +rcs_cleanup () +{ + /* Note that the checks for existence_error are because we are + called from a signal handler, so we don't know whether the + files got created. */ + + /* FIXME: Do not perform buffered I/O from an interrupt handler like + this (via error). However, I'm leaving the error-calling code there + in the hope that on the rare occasion the error call is actually made + (e.g., a fluky I/O error or permissions problem prevents the deletion + of a just-created file) reentrancy won't be an issue. */ + if (rcs_lockfile != NULL) + { + if (unlink_file (rcs_lockfile) < 0 + && !existence_error (errno)) + error (0, errno, "cannot remove %s", rcs_lockfile); + } + rcs_lockfile = NULL; +} + /* RCS_internal_lockfile and RCS_internal_unlockfile perform RCS-style locking on the specified RCSFILE: for a file called `foo,v', open for writing a file called `,foo,'. @@ -8460,10 +8525,6 @@ count_delta_actions (np, ignore) processes from stomping all over each other's laundry. Hence, they are `internal' locking functions. - Note that we don't clean up the ,foo, file on ^C. We probably should. - I'm not completely sure whether RCS does or not (I looked at the code - a little, and didn't find it). - If there is an error, give a fatal error; if we return we always return a non-NULL value. */ @@ -8471,13 +8532,35 @@ static FILE * rcs_internal_lockfile (rcsfile) char *rcsfile; { - char *lockfile; int fd; struct stat rstat; FILE *fp; + static int first_call = 1; + + if (first_call) + { + first_call = 0; + /* clean up if we get a signal */ +#ifdef SIGHUP + (void) SIG_register (SIGHUP, rcs_cleanup); +#endif +#ifdef SIGINT + (void) SIG_register (SIGINT, rcs_cleanup); +#endif +#ifdef SIGQUIT + (void) SIG_register (SIGQUIT, rcs_cleanup); +#endif +#ifdef SIGPIPE + (void) SIG_register (SIGPIPE, rcs_cleanup); +#endif +#ifdef SIGTERM + (void) SIG_register (SIGTERM, rcs_cleanup); +#endif + } /* Get the lock file name: `,file,' for RCS file `file,v'. */ - lockfile = rcs_lockfilename (rcsfile); + assert (rcs_lockfile == NULL); + rcs_lockfile = rcs_lockfilename (rcsfile); /* Use the existing RCS file mode, or read-only if this is a new file. (Really, this is a lie -- if this is a new file, @@ -8503,12 +8586,13 @@ rcs_internal_lockfile (rcsfile) rely on O_EXCL these days. This might be true for unix (I don't really know), but I am still pretty skeptical in the case of the non-unix systems. */ - fd = open (lockfile, OPEN_BINARY | O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, + fd = open (rcs_lockfile, + OPEN_BINARY | O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH); if (fd < 0) { - error (1, errno, "could not open lock file `%s'", lockfile); + error (1, errno, "could not open lock file `%s'", rcs_lockfile); } /* Force the file permissions, and return a stream object. */ @@ -8516,13 +8600,11 @@ rcs_internal_lockfile (rcsfile) this in the non-HAVE_FCHMOD case. */ #ifdef HAVE_FCHMOD if (fchmod (fd, rstat.st_mode) < 0) - error (1, errno, "cannot change mode for %s", lockfile); + error (1, errno, "cannot change mode for %s", rcs_lockfile); #endif fp = fdopen (fd, FOPEN_BINARY_WRITE); if (fp == NULL) - error (1, errno, "cannot fdopen %s", lockfile); - - free (lockfile); + error (1, errno, "cannot fdopen %s", rcs_lockfile); return fp; } @@ -8532,10 +8614,7 @@ rcs_internal_unlockfile (fp, rcsfile) FILE *fp; char *rcsfile; { - char *lockfile; - - /* Get the lock file name: `,file,' for RCS file `file,v'. */ - lockfile = rcs_lockfilename (rcsfile); + assert (rcs_lockfile != NULL); /* Abort if we could not write everything successfully to LOCKFILE. This is not a great error-handling mechanism, but should prevent @@ -8548,12 +8627,21 @@ rcs_internal_unlockfile (fp, rcsfile) fragile even if it happens to sometimes be true. The real solution is to check each call to fprintf rather than waiting until the end like this. */ - error (1, 0, "error writing to lock file %s", lockfile); + error (1, 0, "error writing to lock file %s", rcs_lockfile); if (fclose (fp) == EOF) - error (1, errno, "error closing lock file %s", lockfile); + error (1, errno, "error closing lock file %s", rcs_lockfile); + + rename_file (rcs_lockfile, rcsfile); - rename_file (lockfile, rcsfile); - free (lockfile); + { + /* Use a temporary to make sure there's no interval + (after rcs_lockfile has been freed but before it's set to NULL) + during which the signal handler's use of rcs_lockfile would + reference freed memory. */ + char *tmp = rcs_lockfile; + rcs_lockfile = NULL; + free (tmp); + } } static char * @@ -8677,8 +8765,8 @@ annotate_fileproc (callerdat, finfo) cvs_outerr (finfo->fullname, 0); cvs_outerr ("\n***************\n", 0); - RCS_deltas (finfo->rcs, fp, rcsbufp, version, RCS_ANNOTATE, (char **) NULL, - (size_t) NULL, (char **) NULL, (size_t *) NULL); + RCS_deltas (finfo->rcs, fp, rcsbufp, version, RCS_ANNOTATE, NULL, + NULL, NULL, NULL); free (version); return 0; } diff --git a/gnu/usr.bin/cvs/src/recurse.c b/gnu/usr.bin/cvs/src/recurse.c index 6ac91bffb45..e93afbf39cd 100644 --- a/gnu/usr.bin/cvs/src/recurse.c +++ b/gnu/usr.bin/cvs/src/recurse.c @@ -160,7 +160,7 @@ start_recursion (fileproc, filesdoneproc, direntproc, dirleaveproc, callerdat, && client_active) { char *root = Name_Root (NULL, update_dir); - if (root == NULL || strcmp (root, current_root) != 0) + if (root && strcmp (root, current_root) != 0) /* We're skipping this directory because it is for a different root. Therefore, we just want to do the subdirectories only. Processing files would @@ -565,9 +565,7 @@ do_recursion (frame) directories, since we're guaranteed to have only one CVSROOT -- our own. */ -#ifdef SERVER_SUPPORT - if (! server_active - + if ( /* If -d was specified, it should override CVS/Root. In the single-repository case, it is long-standing CVS behavior @@ -577,8 +575,12 @@ do_recursion (frame) In the multiple-repository case, -d overrides all CVS/Root files. That is the only plausible generalization I can think of. */ - && CVSroot_cmdline == NULL) + CVSroot_cmdline == NULL + +#ifdef SERVER_SUPPORT + && ! server_active #endif + ) { char *this_root = Name_Root ((char *) NULL, update_dir); if (this_root != NULL) @@ -988,9 +990,7 @@ but CVS uses %s for its own purposes; skipping %s directory", /* Only process this directory if the root matches. This nearly duplicates code in do_recursion. */ -#ifdef SERVER_SUPPORT - if (! server_active - + if ( /* If -d was specified, it should override CVS/Root. In the single-repository case, it is long-standing CVS behavior @@ -1000,8 +1000,12 @@ but CVS uses %s for its own purposes; skipping %s directory", In the multiple-repository case, -d overrides all CVS/Root files. That is the only plausible generalization I can think of. */ - && CVSroot_cmdline == NULL) + CVSroot_cmdline == NULL + +#ifdef SERVER_SUPPORT + && ! server_active #endif + ) { char *this_root = Name_Root (dir, update_dir); if (this_root != NULL) diff --git a/gnu/usr.bin/cvs/src/server.c b/gnu/usr.bin/cvs/src/server.c index 0aafa586e5d..da9ea2b5fd7 100644 --- a/gnu/usr.bin/cvs/src/server.c +++ b/gnu/usr.bin/cvs/src/server.c @@ -751,9 +751,7 @@ serve_root (arg) return; } - /* Sending "Root" twice is illegal. It would also be nice to - check for the other case, in which there is no Root request - prior to a request which requires one. + /* Sending "Root" twice is illegal. The other way to handle a duplicate Root requests would be as a request to clear out all state and start over as if it was a @@ -874,6 +872,73 @@ server_pathname_check (path) } } +static int outside_root PROTO ((char *)); + +/* Is file or directory REPOS an absolute pathname within the + CVSroot_directory? If yes, return 0. If no, set pending_error + and return 1. */ +static int +outside_root (repos) + char *repos; +{ + size_t repos_len = strlen (repos); + size_t root_len = strlen (CVSroot_directory); + + /* I think isabsolute (repos) should always be true, and that + any RELATIVE_REPOS stuff should only be in CVS/Repository + files, not the protocol (for compatibility), but I'm putting + in the isabsolute check just in case. */ + if (!isabsolute (repos)) + { + if (alloc_pending (repos_len + 80)) + sprintf (pending_error_text, "\ +E protocol error: %s is not absolute", repos); + return 1; + } + + if (repos_len < root_len + || strncmp (CVSroot_directory, repos, root_len) != 0) + { + not_within: + if (alloc_pending (strlen (CVSroot_directory) + + strlen (repos) + + 80)) + sprintf (pending_error_text, "\ +E protocol error: directory '%s' not within root '%s'", + repos, CVSroot_directory); + return 1; + } + if (repos_len > root_len) + { + if (repos[root_len] != '/') + goto not_within; + if (pathname_levels (repos + root_len + 1) > 0) + goto not_within; + } + return 0; +} + +static int outside_dir PROTO ((char *)); + +/* Is file or directory FILE outside the current directory (that is, does + it contain '/')? If no, return 0. If yes, set pending_error + and return 1. */ +static int +outside_dir (file) + char *file; +{ + if (strchr (file, '/') != NULL) + { + if (alloc_pending (strlen (file) + + 80)) + sprintf (pending_error_text, "\ +E protocol error: directory '%s' not within current directory", + file); + return 1; + } + return 0; +} + /* * Add as many directories to the temp directory as the client tells us it * will use "..", so we never try to access something outside the temp @@ -919,6 +984,25 @@ dirswitch (dir, repos) if (error_pending()) return; + /* Check for bad directory name. + + FIXME: could/should unify these checks with server_pathname_check + except they need to report errors differently. */ + if (isabsolute (dir)) + { + if (alloc_pending (80 + strlen (dir))) + sprintf (pending_error_text, + "E absolute pathname `%s' illegal for server", dir); + return; + } + if (pathname_levels (dir) > max_dotdot_limit) + { + if (alloc_pending (80 + strlen (dir))) + sprintf (pending_error_text, + "E protocol error: `%s' has too many ..", dir); + return; + } + if (dir_name != NULL) free (dir_name); @@ -1074,24 +1158,8 @@ serve_directory (arg) status = buf_read_line (buf_from_net, &repos, (int *) NULL); if (status == 0) { - /* I think isabsolute (repos) should always be true, and that - any RELATIVE_REPOS stuff should only be in CVS/Repository - files, not the protocol (for compatibility), but I'm putting - in the in isabsolute check just in case. */ - if (isabsolute (repos) - && strncmp (CVSroot_directory, - repos, - strlen (CVSroot_directory)) != 0) - { - if (alloc_pending (strlen (CVSroot_directory) - + strlen (repos) - + 80)) - sprintf (pending_error_text, "\ -E protocol error: directory '%s' not within root '%s'", - repos, CVSroot_directory); + if (outside_root (repos)) return; - } - dirswitch (arg, repos); free (repos); } @@ -1478,6 +1546,9 @@ serve_modified (arg) return; } + if (outside_dir (arg)) + return; + if (size >= 0) { receive_file (size, arg, gzipped); @@ -1550,6 +1621,9 @@ serve_unchanged (arg) if (error_pending ()) return; + if (outside_dir (arg)) + return; + /* Rewrite entries file to have `=' in timestamp field. */ for (p = entries; p != NULL; p = p->next) { @@ -1590,6 +1664,9 @@ serve_is_modified (arg) if (error_pending ()) return; + if (outside_dir (arg)) + return; + /* Rewrite entries file to have `M' in timestamp field. */ found = 0; for (p = entries; p != NULL; p = p->next) @@ -1840,6 +1917,9 @@ serve_notify (arg) if (error_pending ()) return; + if (outside_dir (arg)) + return; + new = (struct notify_note *) malloc (sizeof (struct notify_note)); if (new == NULL) { @@ -1891,6 +1971,9 @@ serve_notify (arg) { char *cp; + if (strchr (data, '+')) + goto error; + new->type = data; if (data[1] != '\t') goto error; @@ -1930,7 +2013,7 @@ serve_notify (arg) } return; error: - pending_error_text = malloc (40); + pending_error_text = malloc (80); if (pending_error_text) strcpy (pending_error_text, "E Protocol error; misformed Notify request"); @@ -1991,6 +2074,8 @@ server_notify () Lock_Cleanup (); } + last_node = NULL; + /* The code used to call fflush (stdout) here, but that is no longer necessary. The data is now buffered in buf_to_net, which will be flushed by the caller, do_cvs_command. */ @@ -2236,6 +2321,9 @@ serve_questionable (arg) return; } + if (outside_dir (arg)) + return; + if (!ign_name (arg)) { char *update_dir; @@ -4934,6 +5022,21 @@ error ENOMEM Virtual memory exhausted.\n"); if (!(rq->flags & RQ_ROOTLESS) && CVSroot_directory == NULL) { + /* For commands which change the way in which data + is sent and received, for example Gzip-stream, + this does the wrong thing. Since the client + assumes that everything is being compressed, + unconditionally, there is no way to give this + error to the client without turning on + compression. The obvious fix would be to make + Gzip-stream RQ_ROOTLESS (with the corresponding + change to the spec), and that might be a good + idea but then again I can see some settings in + CVSROOT about what compression level to allow. + I suppose a more baroque answer would be to + turn on compression (say, at level 1), just + enough to give the "Root request missing" + error. For now we just lose. */ if (alloc_pending (80)) sprintf (pending_error_text, "E Protocol error: Root request missing"); @@ -4971,48 +5074,74 @@ switch_to_user (username) pw = getpwnam (username); if (pw == NULL) { + /* Normally this won't be reached; check_password contains + a similar check. */ + printf ("E Fatal error, aborting.\n\ error 0 %s: no such user\n", username); - /* I'm doing this manually rather than via error_exit () - because I'm not sure whether we want to call server_cleanup. - Needs more investigation.... */ - -#ifdef SYSTEM_CLEANUP - /* Hook for OS-specific behavior, for example socket subsystems on - NT and OS2 or dealing with windows and arguments on Mac. */ - SYSTEM_CLEANUP (); -#endif - - exit (EXIT_FAILURE); + /* Don't worry about server_cleanup; server_active isn't set yet. */ + error_exit (); } - /* FIXME? We don't check for errors from initgroups, setuid, &c. - I think this mainly would come up if someone is trying to run - the server as a non-root user. I think we should be checking for - errors and aborting (as with the error above from getpwnam) if - there is an error (presumably EPERM). That means that pserver - should continue to work right if all of the "system usernames" - in CVSROOT/passwd match the user which the server is being run - as (in inetd.conf), but fail otherwise. */ - #if HAVE_INITGROUPS - initgroups (pw->pw_name, pw->pw_gid); + if (initgroups (pw->pw_name, pw->pw_gid) < 0 +# ifdef EPERM + /* At least on the system I tried, initgroups() only works as root. + But we do still want to report ENOMEM and whatever other + errors initgroups() might dish up. */ + && errno != EPERM +# endif + ) + { + /* This could be a warning, but I'm not sure I see the point + in doing that instead of an error given that it would happen + on every connection. We could log it somewhere and not tell + the user. But at least for now make it an error. */ + printf ("error 0 initgroups failed: %s\n", strerror (errno)); + /* Don't worry about server_cleanup; server_active isn't set yet. */ + error_exit (); + } #endif /* HAVE_INITGROUPS */ #ifdef SETXID_SUPPORT /* honor the setgid bit iff set*/ if (getgid() != getegid()) { - setgid (getegid ()); + if (setgid (getegid ()) < 0) + { + /* See comments at setuid call below for more discussion. */ + printf ("error 0 setuid failed: %s\n", strerror (errno)); + /* Don't worry about server_cleanup; + server_active isn't set yet. */ + error_exit (); + } } else -#else +#endif { - setgid (pw->pw_gid); + if (setgid (pw->pw_gid) < 0) + { + /* See comments at setuid call below for more discussion. */ + printf ("error 0 setuid failed: %s\n", strerror (errno)); + /* Don't worry about server_cleanup; + server_active isn't set yet. */ + error_exit (); + } } -#endif - setuid (pw->pw_uid); + if (setuid (pw->pw_uid) < 0) + { + /* Note that this means that if run as a non-root user, + CVSROOT/passwd must contain the user we are running as + (e.g. "joe:FsEfVcu:cvs" if run as "cvs" user). This seems + cleaner than ignoring the error like CVS 1.10 and older but + it does mean that some people might need to update their + CVSROOT/passwd file. */ + printf ("error 0 setuid failed: %s\n", strerror (errno)); + /* Don't worry about server_cleanup; server_active isn't set yet. */ + error_exit (); + } + /* We don't want our umask to change file modes. The modes should be set by the modes used in the repository, and by the umask of the client. */ @@ -5417,32 +5546,23 @@ pserver_authenticate_connection () host_user = check_password (username, descrambled_password, repository); memset (descrambled_password, 0, strlen (descrambled_password)); free (descrambled_password); - if (host_user) - { - printf ("I LOVE YOU\n"); - fflush (stdout); - } - else + if (host_user == NULL) { i_hate_you: printf ("I HATE YOU\n"); fflush (stdout); - /* I'm doing this manually rather than via error_exit () - because I'm not sure whether we want to call server_cleanup. - Needs more investigation.... */ - -#ifdef SYSTEM_CLEANUP - /* Hook for OS-specific behavior, for example socket subsystems on - NT and OS2 or dealing with windows and arguments on Mac. */ - SYSTEM_CLEANUP (); -#endif - exit (EXIT_FAILURE); + /* Don't worry about server_cleanup, server_active isn't set + yet. */ + error_exit (); } /* Don't go any farther if we're just responding to "cvs login". */ if (verify_and_exit) { + printf ("I LOVE YOU\n"); + fflush (stdout); + #ifdef SYSTEM_CLEANUP /* Hook for OS-specific behavior, for example socket subsystems on NT and OS2 or dealing with windows and arguments on Mac. */ @@ -5464,6 +5584,8 @@ pserver_authenticate_connection () free (username); free (password); + printf ("I LOVE YOU\n"); + fflush (stdout); #endif /* AUTH_SERVER_SUPPORT */ } diff --git a/gnu/usr.bin/cvs/src/update.c b/gnu/usr.bin/cvs/src/update.c index d661dc1dad1..62f54209bc6 100644 --- a/gnu/usr.bin/cvs/src/update.c +++ b/gnu/usr.bin/cvs/src/update.c @@ -489,9 +489,12 @@ do_update (argc, argv, xoptions, xtag, xdate, xforce, local, xbuild, xaflag, { time_t now; - (void) time (&now); - if (now == last_register_time) + for (;;) + { + (void) time (&now); + if (now != last_register_time) break; sleep (1); /* to avoid time-stamp races */ + } } return (err); @@ -1645,7 +1648,7 @@ patch_file (finfo, vers_ts, docheckout, file_info, checksum) cvs_MD5Init (&data.context); retcode = RCS_checkout (vers_ts->srcfile, (char *) NULL, - vers_ts->vn_rcs, (char *) NULL, + vers_ts->vn_rcs, vers_ts->vn_tag, vers_ts->options, RUN_TTY, patch_file_write, (void *) &data); |