home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-08-22 | 52.1 KB | 2,046 lines |
- Newsgroups: comp.sources.bugs
- Path: sparky!uunet!zaphod.mps.ohio-state.edu!moe.ksu.ksu.edu!ux1.cso.uiuc.edu!news.cso.uiuc.edu!osiris.cso.uiuc.edu!egray
- From: egray@osiris.cso.uiuc.edu (Emmet P. Gray)
- Subject: Patch #6 to Mtools v2.0
- Message-ID: <BtF49C.89q@news.cso.uiuc.edu>
- Sender: usenet@news.cso.uiuc.edu (Net Noise owner)
- Organization: US Army Corps of Engineers - Construction Eng Research Lab
- Date: Sun, 23 Aug 1992 03:55:59 GMT
- Lines: 2035
-
- This is patch #6 to the Mtools v2.0 distribution package. This patch
- will add the following features:
-
- 1) Mtools commands now use advisory locks to preclude two
- processes from writing to the same DOS filesystem. You must
- edit the Makefile to choose one of the 3 lock methods:
- -DLOCKF, -DFLOCK, or -DFCNTL.
- See the Configure file for more details.
-
- 2) An error detection routine has been added to determine if the
- FAT encoding scheme in the devices.c file is correct.
-
- 3) Mtools commands now return exit codes with the following
- meaning:
- 0 = success
- 1 = utter failure
- 2 = partial sucess/failure. (at least one successful
- operation, but at least one failure)
-
- It also corrects a bug when Mtools is used on machines that have 16 bit
- integers. However, machines with 16 bit integers are limited to FAT
- tables that are less than 64k in length.
-
- Mtools v2.0.5 was posted to the comp.sources.unix news group the 2nd week
- of January 92 as v25i097 thru v25i099.
-
- The "always current" version of Mtools and all the patches are available
- via anonymous ftp from cerl.cecer.army.mil (129.229.1.101). I've also
- placed the code in the /tmp/mtools directory on ftp.uu.net, but I can't
- say how long it will stay there.
-
- Emmet P. Gray US Army, HQ III Corps & Fort Hood
- ...!uunet!uiucuxc!fthood!egray Attn: AFZF-DE-ENV
- fthood!egray@uxc.cso.uiuc.edu Directorate of Engineering & Housing
- Environmental Management Office
- Fort Hood, TX 76544-5057
-
- -------------------------------------------------------------------------------
- Prereq: "2.0.5"
- *** old/patchlevel.h Mon Aug 17 17:40:40 1992
- --- patchlevel.h Wed Aug 19 18:08:36 1992
- ***************
- *** 1,4 ****
- ! #define VERSION "2.0.5"
- ! #define DATE "25 Aug 91"
-
- /*
- --- 1,4 ----
- ! #define VERSION "2.0.6"
- ! #define DATE "21 Aug 92"
-
- /*
- ***************
- *** 16,18 ****
- --- 16,19 ----
- * patch #4 11 Apr 91
- * patch #5 25 Aug 91
- + * patch #6 21 Aug 92
-
- *** old/Configure Mon Aug 17 17:40:35 1992
- --- Configure Sat Aug 22 13:48:45 1992
- ***************
- *** 25,32 ****
-
- BSD for systems without System V style strings functions
- ! and System V style utime().
-
- ! ISC default devices for ISC's Unix V.
-
- UNIXPC default devices for AT&T Unix PC 7300/3B1
-
- --- 25,49 ----
-
- BSD for systems without System V style strings functions
- ! or System V style utime().
-
- ! INT16 Machines with 16 bit integers such as XENIX 286.
-
- + Pick one of the 3 following lock methods (if you have multiple
- + methods at your disposal, pick one in the following order). If
- + a method is not chosen, record locking will not be performed.
- +
- + LOCKF XENIX3 and SVR3.2 lock method
- +
- + FLOCK Berkeley lock method
- +
- + FCNTL Alternate Berkeley lock method (may not work
- + on devices)
- +
- + The folowing are pre-proccessor variables for the default device
- + setups for various flavors of Unix. Pick one of the these, or
- + create a new entry in the devices.c file.
- +
- + ISC default devices for ISC's SVR3.2
- +
- UNIXPC default devices for AT&T Unix PC 7300/3B1
-
- ***************
- *** 33,36 ****
- --- 50,63 ----
- SPARC default devices for SunOS 4.1 on a SPARCstation
-
- + DELL default devices for Dell's SVR4 and Merge
- +
- + XENIX default devices for Xenix systems.
- +
- + SUN386 default devices for Sun's i386 machine
- +
- + RT_ACIS default devices for IBM's BSD clone.
- +
- + SPARC_ODD for reading odd-ball disks on a Sparc
- +
- There is a variable in msdos.h called SIG_TYPE which should be
- configured to the "base" return type of signal();
- ***************
- *** 64,68 ****
-
- fat_bits The encoding scheme for the File Allocation Table. Currently
- ! supports only 12 and 16 bit FATs.
-
- mode any special open() mode flags (not normally used, except
- --- 91,96 ----
-
- fat_bits The encoding scheme for the File Allocation Table. Currently
- ! supports only 12 and 16 bit FATs. Hard disks usually use
- ! 16 bit FATs, while all diskettes use 12 bit FATs.
-
- mode any special open() mode flags (not normally used, except
- ***************
- *** 90,94 ****
- safely ignored.
-
- ! 4) Examples devices
-
- for Interactive 386ix 2.0.2 with:
- --- 118,122 ----
- safely ignored.
-
- ! 4) Some example devices
-
- for Interactive 386ix 2.0.2 with:
- ***************
- *** 115,119 ****
-
- {'A', "/dev/rfp020", 0L, 12, O_NDELAY, init_unixpc, 40, 2, 9},
- ! {'C', "/usr/bin/DOS/dvd000", 0L, 12, 0, (int (*)()) 0, 0, 0, 0}
- {'\0', (char *) NULL, 0L, 0, 0, (int (*)()) 0, 0, 0, 0}
-
- --- 143,147 ----
-
- {'A', "/dev/rfp020", 0L, 12, O_NDELAY, init_unixpc, 40, 2, 9},
- ! {'C', "/usr/bin/DOS/dvd000", 0L, 12, 0, (int (*)()) 0, 0, 0, 0},
- {'\0', (char *) NULL, 0L, 0, 0, (int (*)()) 0, 0, 0, 0}
-
- ***************
- *** 129,130 ****
- --- 157,171 ----
- device, and that only the number of sectors are
- different.
- +
- + for Dell's SVR4 with:
- + 5.25" 1.2m, 360k and 320k as a:
- + 3.5" 1.44m, 720k as b:
- + dos partition as c:
- +
- + {'A', "/dev/rdsk/f0q15dt", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15},
- + {'A', "/dev/rdsk/f0d9dt", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},
- + {'A', "/dev/rdsk/f0d8dt", 0L, 12, 0, (int (*) ()) 0, 40, 2, 8},
- + {'B', "/dev/rdsk/f13ht", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18},
- + {'B', "/dev/rdsk/f13dt", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},
- + {'C', "/dev/rdsk/dos", 0L, 16, 0, (int (*) ()) 0, 0, 0, 0},
- + {'\0', (char *) NULL, 0L, 0, 0, (int (*)()) 0, 0, 0, 0}
- *** old/Makefile Sat Aug 22 10:09:04 1992
- --- Makefile Sat Aug 22 14:06:57 1992
- ***************
- *** 3,7 ****
- #
- # check the Configure file for some examples of device-specific setups
- ! # Berkeley flavors of Unix should include -DBSD in the CFLAGS
-
- CFLAGS = -O
- --- 3,17 ----
- #
- # check the Configure file for some examples of device-specific setups
- ! # Berkeley flavors of Unix should include -DBSD in the CFLAGS. Pick
- ! # a lock method... either -DLOCKF, -DFLOCK, or -DFCNTL and put that
- ! # string in the CFLAGS line below.
- !
- ! # for Dell
- ! #CFLAGS = -O -DDELL -DLOCKF
- ! # for Sparc
- ! #CFLAGS = -O -DSPARC -DBSD -DFLOCK
- ! # for Xenix
- ! #CFLAGS = -O -M2e -DINT16 -DXENIX -DLOCKF
- ! #LDFLAGS = -s -M2e -i -f 5000
-
- CFLAGS = -O
- *** old/Mattrib.1 Mon Aug 17 17:40:36 1992
- --- Mattrib.1 Sat Aug 22 14:13:13 1992
- ***************
- *** 43,48 ****
- is more cunning.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 43,48 ----
- is more cunning.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 51,56 ****
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- .SH SEE ALSO
- mcd(1)
- .SH BUGS
- ! Most versions of ATTRIB don't allow this many options.
- --- 51,59 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mattrib
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1)
- .SH BUGS
- ! Most MSDOS versions of ATTRIB don't allow this many options.
- *** old/Mcd.1 Mon Aug 17 17:40:36 1992
- --- Mcd.1 Sat Aug 22 14:13:19 1992
- ***************
- *** 18,28 ****
- more than 6 hours old.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- directory name to be enclosed in quotes to protect it from the shell.
- .SH SEE ALSO
- mdir(1)
- .SH BUGS
- ! MSDOS doesn't use CD to change to another device.
- .PP
- It may be wise to remove old .mcwd files at logout.
- --- 18,33 ----
- more than 6 hours old.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- directory name to be enclosed in quotes to protect it from the shell.
- + .PP
- + .I Mcd
- + returns 0 on success or 1 on failure.
- .SH SEE ALSO
- mdir(1)
- .SH BUGS
- ! Unlike MSDOS versions of CD,
- ! .I mcd
- ! can be used to change to another device.
- .PP
- It may be wise to remove old .mcwd files at logout.
- *** old/Mcopy.1 Mon Aug 17 17:40:36 1992
- --- Mcopy.1 Sat Aug 22 14:13:24 1992
- ***************
- *** 48,53 ****
- asks whether or not to overwrite the file.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 48,53 ----
- asks whether or not to overwrite the file.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 56,59 ****
- --- 56,62 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mcopy
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1), mread(1), mwrite(1)
- *** old/Mdel.1 Mon Aug 17 17:40:36 1992
- --- Mdel.1 Sat Aug 22 14:13:31 1992
- ***************
- *** 20,25 ****
- will ask for verification prior to removing a read\-only file.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 20,25 ----
- will ask for verification prior to removing a read\-only file.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 28,31 ****
- --- 28,34 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mdel
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1)
- *** old/Mdir.1 Mon Aug 17 17:40:36 1992
- --- Mdir.1 Sat Aug 22 14:13:37 1992
- ***************
- *** 25,30 ****
- An error occurs if a component of the path is not a directory.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 25,30 ----
- An error occurs if a component of the path is not a directory.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 33,36 ****
- --- 33,39 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mdir
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1)
- *** old/Mformat.1 Mon Aug 17 17:40:36 1992
- --- Mformat.1 Thu Aug 20 14:25:50 1992
- ***************
- *** 35,38 ****
- --- 35,41 ----
- (at least) those command line parameters that are different from the
- default.
- + .PP
- + .I Mformat
- + returns 0 on success or 1 on failure.
- .SH SEE ALSO
- mlabel(1)
- *** old/Mlabel.1 Mon Aug 17 17:40:37 1992
- --- Mlabel.1 Thu Aug 20 14:26:06 1992
- ***************
- *** 25,28 ****
- --- 25,31 ----
- will change the label (and display the new label if the verbose mode is
- set).
- + .PP
- + .I Mlabel
- + returns 0 on success or 1 on failure.
- .SH SEE ALSO
- mformat(1)
- *** old/Mmd.1 Mon Aug 17 17:40:37 1992
- --- Mmd.1 Sat Aug 22 14:13:48 1992
- ***************
- *** 26,31 ****
- An error occurs if the directory already exists.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- directory name to be enclosed in quotes to protect it from the shell.
- .PP
- --- 26,31 ----
- An error occurs if the directory already exists.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- directory name to be enclosed in quotes to protect it from the shell.
- .PP
- ***************
- *** 34,37 ****
- --- 34,40 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mmd
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1), mrd(1)
- *** old/Mrd.1 Mon Aug 17 17:40:37 1992
- --- Mrd.1 Sat Aug 22 14:13:53 1992
- ***************
- *** 11,16 ****
- An error occurs if the directory is not empty.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- directory name to be enclosed in quotes to protect it from the shell.
- .PP
- --- 11,16 ----
- An error occurs if the directory is not empty.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- directory name to be enclosed in quotes to protect it from the shell.
- .PP
- ***************
- *** 19,22 ****
- --- 19,25 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mrd
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1), mmd(1)
- *** old/Mread.1 Mon Aug 17 17:40:37 1992
- --- Mread.1 Sat Aug 22 14:14:00 1992
- ***************
- *** 40,45 ****
- asks whether or not to overwrite the file.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 40,45 ----
- asks whether or not to overwrite the file.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 48,51 ****
- --- 48,54 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mread
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1), mcopy(1), mtype(1), mwrite(1)
- *** old/Mren.1 Mon Aug 17 17:40:37 1992
- --- Mren.1 Sat Aug 22 14:14:07 1992
- ***************
- *** 32,37 ****
- may be used to rename directories.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 32,37 ----
- may be used to rename directories.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 40,45 ****
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- .SH SEE ALSO
- mcd(1)
- .SH BUGS
- ! MSDOS can't use REN to rename directories.
- --- 40,50 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mread
- + returns 0 on success or 1 on failure.
- .SH SEE ALSO
- mcd(1)
- .SH BUGS
- ! Unlike the MSDOS version of REN,
- ! .I mren
- ! can be used to rename directories.
- *** old/Mtools.1 Mon Aug 17 17:40:37 1992
- --- Mtools.1 Sat Aug 22 14:14:12 1992
- ***************
- *** 26,30 ****
- MSDOS filenames are optionally composed of a drive letter followed by a
- colon, a subdirectory, and a filename. Subdirectory names can use either
- ! the '/' or '\e\' separator. The use of the '\e\' separator or wildcards
- will require the names to be enclosed in quotes to protect them from the
- shell.
- --- 26,30 ----
- MSDOS filenames are optionally composed of a drive letter followed by a
- colon, a subdirectory, and a filename. Subdirectory names can use either
- ! the '/' or '\e' separator. The use of the '\e' separator or wildcards
- will require the names to be enclosed in quotes to protect them from the
- shell.
- ***************
- *** 42,45 ****
- --- 42,48 ----
- directory (relative to the MSDOS filesystem), otherwise the default is
- assumed to be A:/.
- + .PP
- + All the Mtools commands return 0 on success, 1 on utter failure, or 2
- + on partial failure.
- .SH SEE ALSO
- mattrib(1), mcd(1), mdel(1), mformat(1), mrd(1), mren(1), mtype(1),
- *** old/Mtype.1 Mon Aug 17 17:40:37 1992
- --- Mtype.1 Sat Aug 22 14:14:17 1992
- ***************
- *** 24,29 ****
- will strip the high bit from the data.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 24,29 ----
- will strip the high bit from the data.
- .PP
- ! MSDOS subdirectory names are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 32,35 ****
- --- 32,38 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mtype
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1), mread(1)
- *** old/Mwrite.1 Mon Aug 17 17:40:37 1992
- --- Mwrite.1 Sat Aug 22 14:14:23 1992
- ***************
- *** 50,55 ****
- set).
- .PP
- ! MSDOS subdirectory names are are supported with either the '/' or '\e\'
- ! separator. The use of the '\e\' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- --- 50,55 ----
- set).
- .PP
- ! MSDOS subdirectory names are are supported with either the '/' or '\e'
- ! separator. The use of the '\e' separator or wildcards will require the
- names to be enclosed in quotes to protect them from the shell.
- .PP
- ***************
- *** 58,61 ****
- --- 58,64 ----
- command may be used to establish the device and the current working
- directory (relative to MSDOS), otherwise the default is A:/.
- + .PP
- + .I Mwrite
- + returns 0 on success, 1 on utter failure, or 2 on partial failure.
- .SH SEE ALSO
- mcd(1), mcopy(1), mread(1)
- *** old/Readme Mon Aug 17 17:40:37 1992
- --- Readme Fri Aug 21 12:09:28 1992
- ***************
- *** 62,65 ****
- --- 62,68 ----
- Mcopy is really a front-end to the low level Mread and Mwrite commands.
-
- + Please *DO* read the Configure file and the Release.notes (that's why
- + they're there...).
- +
- Emmet P. Gray US Army, HQ III Corps & Fort Hood
- ...!uunet!uiucuxc!fthood!egray Attn: AFZF-DE-ENV
- *** old/Release.notes Mon Aug 17 17:40:38 1992
- --- Release.notes Sat Aug 22 13:31:07 1992
- ***************
- *** 1,2 ****
- --- 1,70 ----
- + Patch #6, 21 Aug 92
- +
- + This patch will add the following features:
- +
- + 1) Mtools commands now use advisory locks to preclude two
- + processes from writing to the same DOS filesystem. You must
- + edit the Makefile to choose one of the 3 lock methods:
- + -DLOCKF, -DFLOCK, or -DFCNTL.
- + See the Configure file for more details.
- +
- + 2) An error detection routine has been added to determine if the
- + FAT encoding scheme in the devices.c file is correct.
- +
- + 3) Mtools commands now return exit codes with the following
- + meaning:
- + 0 = success
- + 1 = utter failure
- + 2 = partial sucess/failure. (at least one successful
- + operation, but at least one failure)
- +
- + It also corrects a bug when Mtools is used on machines that have 16 bit
- + integers. However, machines with 16 bit integers are limited to FAT
- + tables that are less than 64k in length.
- + -------------------------------------------------------------------------------
- + Patch #5, 25 Aug 91
- +
- + This patch will add a few new features:
- +
- + 1) Mtools will now work properly on MSDOS partitions that are
- + greater than 32M.
- +
- + 2) If the "current working directory" information (contained in
- + the $HOME/.mcwd file) is more than 6 hours old, Mtools will
- + issue a warning and ignore the old information.
- +
- + 3) The mcopy command will now copy files between 2 MSDOS file
- + systems (such as mcopy "a:*" b:).
- +
- + -------------------------------------------------------------------------------
- + Patch #4, 11 Apr 91
- +
- + This patch will fix a bug in the mmd command where directories
- + inherited the file name extension of the parent directory. It
- + also adds a feature that will allow the copying of zero length
- + files.
- +
- + -------------------------------------------------------------------------------
- + Patch #3, 28 Nov 90
- +
- + This patch will fix a bug where Mtools sometimes bypasses the
- + disk "cache" and reads/writes to the disk directly.
- +
- + -------------------------------------------------------------------------------
- + Patch #2, 21 Nov 90
- +
- + This patch will fix a bug in the folding of MSDOS filenames to
- + lower case, and will fix a bug that could prevent the detection
- + of a full disk.
- +
- + -------------------------------------------------------------------------------
- + Patch #1, 12 Oct 90
- +
- + This patch will fix a few problems on Berkekely flavors of Unix,
- + and will fix the floating point exception bug when Mtools is
- + used with diskettes that have been formatted under very old DOS
- + (or formatted by some other non-DOS system).
- +
- + -------------------------------------------------------------------------------
- New in the v2.0 release....
-
- *** old/buf_write.c Mon Aug 17 17:40:38 1992
- --- buf_write.c Mon Aug 17 17:37:34 1992
- ***************
- *** 11,15 ****
- extern long disk_offset, disk_current;
- extern unsigned char *disk_buf;
- ! static int blank_cyl();
-
- void
- --- 11,15 ----
- extern long disk_offset, disk_current;
- extern unsigned char *disk_buf;
- ! static int read_cyl();
-
- void
- ***************
- *** 49,52 ****
- --- 49,53 ----
- disk_flush();
-
- + disk_current = (i / disk_size) * disk_size;
- /*
- * If there is something on the new cylinder that
- ***************
- *** 54,61 ****
- * before writing.
- */
- ! if (blank_cyl(i))
- ! disk_current = (i / disk_size) * disk_size;
- ! else {
- ! disk_current = (i / disk_size) * disk_size;
- where = (disk_current * MSECTOR_SIZE) + disk_offset;
- length = disk_size * MSECTOR_SIZE;
- --- 55,59 ----
- * before writing.
- */
- ! if (read_cyl(disk_current)) {
- where = (disk_current * MSECTOR_SIZE) + disk_offset;
- length = disk_size * MSECTOR_SIZE;
- ***************
- *** 114,131 ****
- /*
- * Determine if the cylinder has some useful information on it. Returns a 1
- ! * if it is blank.
- */
-
- static int
- ! blank_cyl(num)
- ! long num;
- {
- register unsigned int i;
- unsigned int start, end, fat_decode();
- - long sector;
-
- - sector = (num / disk_size) * disk_size;
- if (!sector)
- ! return(0);
-
- start = ((sector - dir_start - dir_len) / clus_size) + 2;
- --- 112,127 ----
- /*
- * Determine if the cylinder has some useful information on it. Returns a 1
- ! * if it needs to be read.
- */
-
- static int
- ! read_cyl(sector)
- ! long sector;
- {
- register unsigned int i;
- unsigned int start, end, fat_decode();
-
- if (!sector)
- ! return(1);
-
- start = ((sector - dir_start - dir_len) / clus_size) + 2;
- ***************
- *** 135,140 ****
- /* if fat_decode returns non-zero */
- if (fat_decode(i))
- ! return(0);
- }
- ! return(1);
- }
- --- 131,136 ----
- /* if fat_decode returns non-zero */
- if (fat_decode(i))
- ! return(1);
- }
- ! return(0);
- }
- *** old/devices.c Sat Aug 22 10:08:38 1992
- --- devices.c Sat Aug 22 13:55:13 1992
- ***************
- *** 32,42 ****
- #endif /* ISC */
-
- - #ifdef MASSCOMP
- - struct device devices[] = {
- - {'A', "/dev/rflp", 0L, 12, 0, (int (*) ()) 0, 80, 2, 8},
- - {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- - };
- - #endif /* MASSCOMP */
- -
- #ifdef SPARC
- struct device devices[] = {
- --- 32,35 ----
- ***************
- *** 86,87 ****
- --- 79,167 ----
- }
- #endif /* UNIXPC */
- +
- + #ifdef RT_ACIS
- + struct device devices[] = {
- + {'A', "/dev/rfd0", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15},
- + {'A', "/dev/rfd0", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},
- + {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- + };
- + #endif /* RT_ACIS */
- +
- + #ifdef SUN386
- + struct device devices[] = {
- + {'A', "/dev/rfdl0c", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},
- + {'A', "/dev/rfd0c", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18},
- + {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- + };
- + #endif /* SUN386 */
- +
- +
- + #ifdef SPARC_ODD
- + #include <sys/types.h>
- + #include <sun/dkio.h>
- + #include <fcntl.h>
- +
- + int init_sparc();
- +
- + struct device devices[] = {
- + {'A', "/dev/rfd0c", 0L, 12, 0, init_sparc, 80, 2, 0},
- + {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- + };
- +
- + /*
- + * Stuffing back the floppy parameters into the driver allows for gems
- + * like 10 sector or single sided floppies from Atari ST systems.
- + *
- + * Martin Schulz, Universite de Moncton, N.B., Canada, March 11, 1991.
- + */
- +
- + int
- + init_sparc(fd, ntracks, nheads, nsect)
- + int fd, ntracks, nheads, nsect;
- + {
- + struct fdk_char dkbuf;
- + struct dk_map dkmap;
- +
- + if (ioctl(fd, FDKIOGCHAR, &dkbuf) != 0) {
- + ioctl(fd, FDKEJECT, NULL);
- + return(1);
- + }
- +
- + if (ioctl(fd, DKIOCGPART, &dkmap) != 0) {
- + ioctl(fd, FDKEJECT, NULL);
- + return(1);
- + }
- +
- + if (ntracks && nheads)
- + dkbuf.ncyl = ntracks * nheads;
- + if (nheads)
- + dkbuf.nhead = nheads;
- + if (nsect)
- + dkbuf.secptrack = nsect;
- +
- + if (ntracks && nheads && nsect )
- + dkmap.dkl_nblk = ntracks * nheads * nsect;
- +
- + if (ioctl(fd, FDKIOSCHAR, &dkbuf) != 0) {
- + ioctl(fd, FDKEJECT, NULL);
- + return(1);
- + }
- +
- + if (ioctl(fd, DKIOCSPART, &dkmap) != 0) {
- + ioctl(fd, FDKEJECT, NULL);
- + return(1);
- + }
- + return(0);
- + }
- + #endif /* SPARC_ODD */
- +
- + #ifdef XENIX
- + struct device devices[] = {
- + {'A', "/dev/fd096ds15", 0L, 12, 0, (int (*) ()) 0, 80, 2, 15},
- + {'A', "/dev/fd048ds9", 0L, 12, 0, (int (*) ()) 0, 40, 2, 9},
- + {'B', "/dev/fd1135ds18", 0L, 12, 0, (int (*) ()) 0, 80, 2, 18},
- + {'B', "/dev/fd1135ds9", 0L, 12, 0, (int (*) ()) 0, 80, 2, 9},
- + {'C', "/dev/hd0d", 0L, 16, 0, (int (*) ()) 0, 0, 0, 0},
- + {'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}
- + };
- + #endif /* XENIX */
- *** old/dir_make.c Mon Aug 17 17:40:38 1992
- --- dir_make.c Sun Sep 22 10:52:04 1991
- ***************
- *** 63,67 ****
- dir_buf = (unsigned char *) realloc((char *) dir_buf, (unsigned int) new * MSECTOR_SIZE);
- if (dir_buf == NULL) {
- ! perror("dir_grow: malloc");
- exit(1);
- }
- --- 63,67 ----
- dir_buf = (unsigned char *) realloc((char *) dir_buf, (unsigned int) new * MSECTOR_SIZE);
- if (dir_buf == NULL) {
- ! perror("dir_grow: realloc");
- exit(1);
- }
- *** old/dir_read.c Mon Aug 17 17:40:38 1992
- --- dir_read.c Sun Sep 22 11:08:00 1991
- ***************
- *** 38,43 ****
- unsigned int next, fat_decode();
- unsigned char *offset;
- ! char *malloc();
- ! void free(), perror(), exit(), disk_read(), dir_flush();
-
- length = 0;
- --- 38,43 ----
- unsigned int next, fat_decode();
- unsigned char *offset;
- ! char *realloc();
- ! void perror(), exit(), disk_read(), dir_flush();
-
- length = 0;
- ***************
- *** 71,78 ****
- dir_flush();
- /* fill the dir_buf */
- ! free((char *) dir_buf);
- ! dir_buf = (unsigned char *) malloc((unsigned int) length * MSECTOR_SIZE);
- if (dir_buf == NULL) {
- ! perror("fill_chain: malloc");
- exit(1);
- }
- --- 71,77 ----
- dir_flush();
- /* fill the dir_buf */
- ! dir_buf = (unsigned char *) realloc(dir_buf, (unsigned int) length * MSECTOR_SIZE);
- if (dir_buf == NULL) {
- ! perror("fill_chain: realloc");
- exit(1);
- }
- ***************
- *** 96,101 ****
- {
- register int i;
- ! char *malloc();
- ! void free(), disk_read(), dir_flush(), exit(), perror();
-
- if (dir_dirty)
- --- 95,100 ----
- {
- register int i;
- ! char *malloc(), *realloc();
- ! void disk_read(), dir_flush(), exit(), perror();
-
- if (dir_dirty)
- ***************
- *** 106,112 ****
-
- if (code == OLD)
- ! free((char *) dir_buf);
- !
- ! dir_buf = (unsigned char *) malloc((unsigned int) dir_len * MSECTOR_SIZE);
- if (dir_buf == NULL) {
- perror("reset_chain: malloc");
- --- 105,111 ----
-
- if (code == OLD)
- ! dir_buf = (unsigned char *) realloc(dir_buf, (unsigned int) dir_len * MSECTOR_SIZE);
- ! else
- ! dir_buf = (unsigned char *) malloc((unsigned int) dir_len * MSECTOR_SIZE);
- if (dir_buf == NULL) {
- perror("reset_chain: malloc");
- *** old/fat_read.c Mon Aug 17 17:40:38 1992
- --- fat_read.c Sat Aug 22 13:46:35 1992
- ***************
- *** 18,23 ****
- unsigned int num;
- {
- ! unsigned int fat, fat_hi, fat_low, byte_1, byte_2;
- ! int start;
-
- if (fat_bits == 12) {
- --- 18,22 ----
- unsigned int num;
- {
- ! unsigned int fat, fat_hi, fat_low, byte_1, byte_2, start;
-
- if (fat_bits == 12) {
- ***************
- *** 70,74 ****
-
- /*
- ! * Read the entire FAT table into memory.
- */
-
- --- 69,74 ----
-
- /*
- ! * Read the entire FAT table into memory. Crude error detection on wrong
- ! * FAT encoding scheme.
- */
-
- ***************
- *** 77,86 ****
- int start;
- {
- ! int buflen;
- char *malloc();
- void perror(), exit(), disk_read();
- /* only the first copy of the FAT */
- buflen = fat_len * MSECTOR_SIZE;
- ! fat_buf = (unsigned char *) malloc((unsigned int) buflen);
- if (fat_buf == NULL) {
- perror("fat_read: malloc");
- --- 77,97 ----
- int start;
- {
- ! int i;
- ! unsigned int buflen;
- char *malloc();
- void perror(), exit(), disk_read();
- +
- + #ifdef INT16
- + long junk;
- + junk = (long) fat_len * MSECTOR_SIZE;
- +
- + if (junk > 65535L) {
- + fprintf(stderr, "fat_read: FAT table is too large\n");
- + exit(1);
- + }
- + #endif /* INT16 */
- /* only the first copy of the FAT */
- buflen = fat_len * MSECTOR_SIZE;
- ! fat_buf = (unsigned char *) malloc(buflen);
- if (fat_buf == NULL) {
- perror("fat_read: malloc");
- ***************
- *** 88,92 ****
- }
- /* read the FAT sectors */
- ! disk_read((long) start, fat_buf, buflen);
-
- /* the encoding scheme */
- --- 99,104 ----
- }
- /* read the FAT sectors */
- ! for (i=start; i<start+fat_len; i++)
- ! disk_read((long) i, &fat_buf[(i-start)*MSECTOR_SIZE], MSECTOR_SIZE);
-
- /* the encoding scheme */
- ***************
- *** 94,97 ****
- --- 106,113 ----
- end_fat = 0xfff;
- last_fat = 0xff8;
- + if (fat_buf[3] == 0xff) {
- + fprintf(stderr, "fat_read: wrong FAT encoding\n");
- + exit(1);
- + }
- }
- else {
- ***************
- *** 98,101 ****
- --- 114,121 ----
- end_fat = 0xffff;
- last_fat = 0xfff8;
- + if (fat_buf[3] != 0xff) {
- + fprintf(stderr, "fat_read: wrong FAT encoding\n");
- + exit(1);
- + }
- }
- return;
- *** old/fat_write.c Mon Aug 17 17:40:38 1992
- --- fat_write.c Sat Aug 22 13:17:03 1992
- ***************
- *** 15,19 ****
- unsigned int code;
- {
- ! int start;
-
- if (fat_bits == 12) {
- --- 15,19 ----
- unsigned int code;
- {
- ! unsigned int start;
-
- if (fat_bits == 12) {
- ***************
- *** 71,75 ****
- fat_write()
- {
- ! int fat_start, buflen, dups;
- void disk_write();
-
- --- 71,75 ----
- fat_write()
- {
- ! int i, start, dups;
- void disk_write();
-
- ***************
- *** 77,84 ****
- return;
-
- ! fat_start = dir_start - (fat_len * num_fat);
- ! buflen = fat_len * MSECTOR_SIZE;
-
- ! disk_write((long) fat_start, fat_buf, buflen);
-
- /*
- --- 77,84 ----
- return;
-
- ! start = dir_start - (fat_len * num_fat);
-
- ! for (i=start; i<start+fat_len; i++)
- ! disk_write((long) i, &fat_buf[(i-start)*MSECTOR_SIZE], MSECTOR_SIZE);
-
- /*
- ***************
- *** 88,93 ****
- dups = num_fat - 1;
- while (dups--) {
- ! fat_start += fat_len;
- ! disk_write((long) fat_start, fat_buf, buflen);
- }
- }
- --- 88,94 ----
- dups = num_fat - 1;
- while (dups--) {
- ! start += fat_len;
- ! for (i=start; i<start+fat_len; i++)
- ! disk_write((long) i, &fat_buf[(i-start)*MSECTOR_SIZE], MSECTOR_SIZE);
- }
- }
- *** old/file_read.c Mon Aug 17 17:40:38 1992
- --- file_read.c Sun Sep 22 10:04:24 1991
- ***************
- *** 52,56 ****
- /* write it */
- if (fwrite((char *) out_buf, sizeof(*out_buf), out_len, fp) == 0) {
- ! perror("file_write: fwrite");
- return(-1);
- }
- --- 52,56 ----
- /* write it */
- if (fwrite((char *) out_buf, sizeof(*out_buf), out_len, fp) == 0) {
- ! perror("file_read: fwrite");
- return(-1);
- }
- ***************
- *** 60,64 ****
- out_len = (size - current > in_len) ? in_len : size - current;
- if (fwrite((char *) in_buf, sizeof(*in_buf), out_len, fp) == 0) {
- ! perror("file_write: fwrite");
- return(-1);
- }
- --- 60,64 ----
- out_len = (size - current > in_len) ? in_len : size - current;
- if (fwrite((char *) in_buf, sizeof(*in_buf), out_len, fp) == 0) {
- ! perror("file_read: fwrite");
- return(-1);
- }
- *** old/file_write.c Mon Aug 17 17:40:38 1992
- --- file_write.c Sun Sep 22 10:04:36 1991
- ***************
- *** 111,115 ****
- else {
- if ((i = fread((char *) tbuf, sizeof(*tbuf), buflen, fp)) <= 0) {
- ! perror("putcluster: fread");
- return(-1);
- }
- --- 111,115 ----
- else {
- if ((i = fread((char *) tbuf, sizeof(*tbuf), buflen, fp)) <= 0) {
- ! perror("put_cluster: fread");
- return(-1);
- }
- *** old/init.c Mon Aug 17 17:40:38 1992
- --- init.c Fri Aug 21 13:20:30 1992
- ***************
- *** 34,38 ****
- {
- int fat_start, tracks, heads, sectors, old_dos;
- ! char *malloc(), *name, *expand();
- void perror(), exit(), reset_chain(), free(), fat_read();
- struct bootsector *boot;
- --- 34,38 ----
- {
- int fat_start, tracks, heads, sectors, old_dos;
- ! char buf[256], *malloc(), *name, *expand();
- void perror(), exit(), reset_chain(), free(), fat_read();
- struct bootsector *boot;
- ***************
- *** 63,69 ****
- name = expand(dev->name);
- if ((fd = open(name, mode | dev->mode)) < 0) {
- ! perror("init: open");
- exit(1);
- }
- /* set default parameters, if needed */
- if (dev->gioctl) {
- --- 63,75 ----
- name = expand(dev->name);
- if ((fd = open(name, mode | dev->mode)) < 0) {
- ! sprintf(buf, "init: open \"%s\"", name);
- ! perror(buf);
- exit(1);
- }
- + /* lock the device on writes */
- + if (mode == 2 && lock_dev(fd)) {
- + fprintf(stderr, "Device \"%s\" is busy\n", dev->name);
- + exit(1);
- + }
- /* set default parameters, if needed */
- if (dev->gioctl) {
- ***************
- *** 210,220 ****
- #endif /* FULL_CYL */
-
- - /*
- - * The driver in Dell's SVR4 v2.01 is unreliable with large writes.
- - */
- - #ifdef DELL
- - disk_size = 1;
- - #endif /* DELL */
- -
- disk_buf = (unsigned char *) malloc((unsigned int) disk_size * MSECTOR_SIZE);
- if (disk_buf == NULL) {
- --- 216,219 ----
- ***************
- *** 323,325 ****
- --- 322,363 ----
-
- return(&boot);
- + }
- +
- + /*
- + * Create an advisory lock on the device to prevent concurrent writes.
- + * Uses either lockf, flock, or fcntl locking methods. See the Makefile
- + * and the Configure files for how to specify the proper method.
- + */
- +
- + static int
- + lock_dev(fd)
- + int fd;
- + {
- + #ifdef LOCKF
- + #include <unistd.h>
- +
- + if (lockf(fd, F_TLOCK, 0) < 0)
- + return(1);
- + #endif /* LOCKF */
- +
- + #ifdef FLOCK
- + #include <sys/file.h>
- +
- + if (flock(fd, LOCK_EX|LOCK_NB) < 0)
- + return(1);
- + #endif /* FLOCK */
- +
- + #ifdef FCNTL
- + #include <fcntl.h>
- + struct flock flk;
- +
- + flk.l_type = F_WRLCK;
- + flk.l_whence = 0;
- + flk.l_start = 0L;
- + flk.l_len = 0L;
- +
- + if (fcntl(fd, F_SETLK, &flk) < 0)
- + return(1);
- + #endif /* FCNTL */
- + return(0);
- }
- *** old/mattrib.c Mon Aug 17 17:40:39 1992
- --- mattrib.c Wed Aug 19 12:22:42 1992
- ***************
- *** 30,34 ****
- {
- int entry, ismatch, oops, fargn, read_only, hidden, sys, archive;
- ! int i, action;
- char *filename, *newfile, *unix_name(), drive, get_drive();
- char *get_path(), *pathname, *get_name(), *fix_mcwd(), last_drive;
- --- 30,34 ----
- {
- int entry, ismatch, oops, fargn, read_only, hidden, sys, archive;
- ! int i, action, got_one, missed_one;
- char *filename, *newfile, *unix_name(), drive, get_drive();
- char *get_path(), *pathname, *get_name(), *fix_mcwd(), last_drive;
- ***************
- *** 38,41 ****
- --- 38,43 ----
- oops = 0;
- fargn = -1;
- + got_one = 0;
- + missed_one = 0;
- archive = LEAVE;
- hidden = LEAVE;
- ***************
- *** 95,98 ****
- --- 97,101 ----
- if (init(drive, 2)) {
- fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
- + missed_one++;
- continue;
- }
- ***************
- *** 101,106 ****
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname))
- continue;
-
- /* see if exists and do it */
- --- 104,111 ----
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname)) {
- ! missed_one++;
- continue;
- + }
-
- /* see if exists and do it */
- ***************
- *** 140,147 ****
- dir_write(entry, dir);
- ismatch++;
- }
- }
- ! if (!ismatch)
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- }
- dir_flush();
- --- 145,155 ----
- dir_write(entry, dir);
- ismatch++;
- + got_one++;
- }
- }
- ! if (!ismatch) {
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- + missed_one++;
- + }
- }
- dir_flush();
- ***************
- *** 148,151 ****
- --- 156,163 ----
- disk_flush();
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- *** old/mcopy.c Mon Aug 17 17:40:39 1992
- --- mcopy.c Fri Aug 21 13:35:22 1992
- ***************
- *** 11,14 ****
- --- 11,16 ----
- #include <stdio.h>
- #include <ctype.h>
- + #include <sys/types.h>
- + #include <sys/wait.h>
- #include "patchlevel.h"
-
- ***************
- *** 18,21 ****
- --- 20,27 ----
- #define MKDIR
-
- + #ifndef WEXITSTATUS
- + #define WEXITSTATUS(x) (((x)>>8)&0xff)
- + #endif /* WEXITSTATUS */
- +
- main(argc, argv)
- int argc;
- ***************
- *** 25,29 ****
- extern char *optarg;
- int i, oops, msdos_args, unix_args, destination;
- ! char **nargv, **malloc();
- void exit();
- /* get command line options */
- --- 31,35 ----
- extern char *optarg;
- int i, oops, msdos_args, unix_args, destination;
- ! char **nargv, *malloc();
- void exit();
- /* get command line options */
- ***************
- *** 93,98 ****
- {
- extern int optind;
- ! int i, j, pid, status;
- ! char *tmpdir, *mktemp(), **nargv, **malloc(), buf[256], *strcpy();
- char *unixname(), *realloc();
- void exit();
- --- 99,104 ----
- {
- extern int optind;
- ! int i, j, pid, status_read, status_write;
- ! char *tmpdir, *mktemp(), **nargv, *malloc(), buf[256], *strcpy();
- char *unixname(), *realloc();
- void exit();
- ***************
- *** 109,114 ****
- /* create a temp directory */
- tmpdir = mktemp("/tmp/mtoolsXXXXXX");
- ! if (mkdir(tmpdir, 0777) < 0)
- perror("mkdir");
-
- nargv[j++] = tmpdir;
- --- 115,122 ----
- /* create a temp directory */
- tmpdir = mktemp("/tmp/mtoolsXXXXXX");
- ! if (mkdir(tmpdir, 0777) < 0) {
- perror("mkdir");
- + exit(1);
- + }
-
- nargv[j++] = tmpdir;
- ***************
- *** 119,124 ****
- execvp("mread", nargv);
-
- ! while (wait(&status) != pid)
- ;
- /* reconstruct the argv[] */
- nargv[0] = "sh";
- --- 127,135 ----
- execvp("mread", nargv);
-
- ! while (wait(&status_read) != pid)
- ;
- + /* we blew it... */
- + if (WEXITSTATUS(status_read) == 1)
- + exit(1);
- /* reconstruct the argv[] */
- nargv[0] = "sh";
- ***************
- *** 154,158 ****
- execvp("sh", nargv);
-
- ! while (wait(&status) != pid)
- ;
- /* clobber the directory */
- --- 165,169 ----
- execvp("sh", nargv);
-
- ! while (wait(&status_write) != pid)
- ;
- /* clobber the directory */
- ***************
- *** 159,163 ****
- sprintf(buf, "rm -fr %s", tmpdir);
- system(buf);
- ! exit(0);
- }
-
- --- 170,174 ----
- sprintf(buf, "rm -fr %s", tmpdir);
- system(buf);
- ! exit(WEXITSTATUS(status_write));
- }
-
- ***************
- *** 190,193 ****
- --- 201,205 ----
-
- #ifdef MKDIR
- + /* ARGSUSED */
- mkdir(path, mode)
- char *path;
- *** old/mdel.c Mon Aug 17 17:40:39 1992
- --- mdel.c Tue Aug 18 13:39:28 1992
- ***************
- *** 28,32 ****
- char *argv[];
- {
- ! int i, ismatch, entry, nogo, verbose, fargn;
- unsigned int start;
- char *filename, *newfile, *get_name(), *unix_name(), *get_path();
- --- 28,32 ----
- char *argv[];
- {
- ! int i, ismatch, entry, nogo, verbose, fargn, got_one, missed_one;
- unsigned int start;
- char *filename, *newfile, *get_name(), *unix_name(), *get_path();
- ***************
- *** 39,42 ****
- --- 39,45 ----
- signal(SIGQUIT, (SIG_TYPE(*) ()) got_signal);
-
- + got_one = 0;
- + missed_one = 0;
- +
- if (argc > 1 && !strcmp(argv[1], "-v")) {
- verbose = 1;
- ***************
- *** 66,69 ****
- --- 69,73 ----
- if (init(drive, 2)) {
- fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
- + missed_one++;
- continue;
- }
- ***************
- *** 72,77 ****
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname))
- continue;
-
- nogo = 0;
- --- 76,83 ----
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname)) {
- ! missed_one++;
- continue;
- + }
-
- nogo = 0;
- ***************
- *** 112,122 ****
- dir->name[0] = 0xe5;
- dir_write(entry, dir);
- }
- }
- ! if (fat_error)
- break;
-
- ! if (!ismatch)
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- }
- /* write the FAT, flush the buffers */
- --- 118,133 ----
- dir->name[0] = 0xe5;
- dir_write(entry, dir);
- + got_one++;
- }
- }
- ! if (fat_error) {
- ! missed_one++;
- break;
- + }
-
- ! if (!ismatch) {
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- + missed_one++;
- + }
- }
- /* write the FAT, flush the buffers */
- ***************
- *** 125,128 ****
- --- 136,143 ----
- disk_flush();
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- *** old/mmd.c Mon Aug 17 17:40:39 1992
- --- mmd.c Tue Aug 18 14:03:24 1992
- ***************
- *** 29,33 ****
- char *argv[];
- {
- ! int i, entry, slot, fargn, verbose, oops;
- extern unsigned int end_fat;
- unsigned int fat, dot, next_fat();
- --- 29,33 ----
- char *argv[];
- {
- ! int i, entry, slot, fargn, verbose, oops, got_one, missed_one;
- extern unsigned int end_fat;
- unsigned int fat, dot, next_fat();
- ***************
- *** 46,49 ****
- --- 46,51 ----
- verbose = 0;
- oops = 0;
- + got_one = 0;
- + missed_one = 0;
- if (argc > 1) {
- if (!strcmp(argv[1], "-v")) {
- ***************
- *** 73,76 ****
- --- 75,79 ----
- if (init(drive, 2)) {
- fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
- + missed_one++;
- continue;
- }
- ***************
- *** 83,88 ****
- pathname = get_path(argv[i]);
-
- ! if (subdir(drive, pathname))
- continue;
- /* see if exists and get slot */
- slot = -1;
- --- 86,93 ----
- pathname = get_path(argv[i]);
-
- ! if (subdir(drive, pathname)) {
- ! missed_one++;
- continue;
- + }
- /* see if exists and get slot */
- slot = -1;
- ***************
- *** 119,127 ****
- }
- }
- ! if (oops)
- continue;
- /* no '.' entry means root directory */
- if (dot == 0 && slot < 0) {
- fprintf(stderr, "%s: No directory slots\n", argv[0]);
- continue;
- }
- --- 124,135 ----
- }
- }
- ! if (oops) {
- ! missed_one++;
- continue;
- + }
- /* no '.' entry means root directory */
- if (dot == 0 && slot < 0) {
- fprintf(stderr, "%s: No directory slots\n", argv[0]);
- + missed_one++;
- continue;
- }
- ***************
- *** 130,133 ****
- --- 138,142 ----
- if (dir_grow(dot)) {
- fprintf(stderr, "%s: Disk full\n", argv[0]);
- + missed_one++;
- continue;
- }
- ***************
- *** 138,141 ****
- --- 147,151 ----
- if ((fat = next_fat(0)) == 1) {
- fprintf(stderr, "%s: Disk full\n", argv[0]);
- + missed_one++;
- continue;
- }
- ***************
- *** 147,150 ****
- --- 157,161 ----
- empty_dir(fat, dot);
- fat_encode(fat, end_fat);
- + got_one++;
- }
- /* write the FAT, flush the buffers */
- ***************
- *** 153,156 ****
- --- 164,171 ----
- disk_flush();
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- *** old/mrd.c Mon Aug 17 17:40:39 1992
- --- mrd.c Tue Aug 18 14:05:06 1992
- ***************
- *** 28,32 ****
- char *argv[];
- {
- ! int i, ismatch, entry, oops, empty;
- unsigned int start;
- char *filename, *newfile, *get_name(), drive, *pathname, *get_path();
- --- 28,32 ----
- char *argv[];
- {
- ! int i, ismatch, entry, oops, empty, got_one, missed_one;
- unsigned int start;
- char *filename, *newfile, *get_name(), drive, *pathname, *get_path();
- ***************
- *** 45,48 ****
- --- 45,50 ----
- }
-
- + got_one = 0;
- + missed_one = 0;
- last_drive = 'x';
- mcwd = fix_mcwd();
- ***************
- *** 59,62 ****
- --- 61,65 ----
- if (init(drive, 2)) {
- fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
- + missed_one++;
- continue;
- }
- ***************
- *** 66,71 ****
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname))
- continue;
-
- oops = 0;
- --- 69,76 ----
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname)) {
- ! missed_one++;
- continue;
- + }
-
- oops = 0;
- ***************
- *** 103,116 ****
- dir_write(entry, dir);
- ismatch = 1;
- }
- }
- ! if (fat_error)
- break;
-
- ! if (oops)
- continue;
-
- ! if (!ismatch)
- fprintf(stderr, "%s: Directory \"%s\" not found\n", argv[0], filename);
- }
- /* write the FAT, flush the buffers */
- --- 108,128 ----
- dir_write(entry, dir);
- ismatch = 1;
- + got_one++;
- }
- }
- ! if (fat_error) {
- ! missed_one++;
- break;
- + }
-
- ! if (oops) {
- ! missed_one++;
- continue;
- + }
-
- ! if (!ismatch) {
- fprintf(stderr, "%s: Directory \"%s\" not found\n", argv[0], filename);
- + missed_one++;
- + }
- }
- /* write the FAT, flush the buffers */
- ***************
- *** 119,122 ****
- --- 131,138 ----
- disk_flush();
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- *** old/mread.c Mon Aug 17 17:40:39 1992
- --- mread.c Tue Aug 18 13:53:24 1992
- ***************
- *** 43,46 ****
- --- 43,47 ----
- extern char *optarg;
- int i, ismatch, entry, single, c, oops, preserve, nowarn, textmode;
- + int got_one, missed_one;
- unsigned int fat;
- long size, mtime;
- ***************
- *** 57,60 ****
- --- 58,63 ----
- nowarn = 0;
- textmode = 0;
- + got_one = 0;
- + missed_one = 0;
- while ((c = getopt(argc, argv, "tnmv")) != EOF) {
- switch (c) {
- ***************
- *** 103,106 ****
- --- 106,110 ----
- if (init(drive, 0)) {
- fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
- + missed_one++;
- continue;
- }
- ***************
- *** 109,114 ****
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname))
- continue;
-
- ismatch = 0;
- --- 113,120 ----
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname)) {
- ! missed_one++;
- continue;
- + }
-
- ismatch = 0;
- ***************
- *** 139,142 ****
- --- 145,149 ----
- if (file_read(fp, fat, textmode, 0, size)) {
- fclose(fp);
- + missed_one++;
- break;
- }
- ***************
- *** 143,148 ****
- fclose(fp);
- set_mtime(target, mtime);
- }
- ! ismatch = 1;
- break;
- }
- --- 150,158 ----
- fclose(fp);
- set_mtime(target, mtime);
- + ismatch = 1;
- + got_one++;
- }
- ! else
- ! missed_one++;
- break;
- }
- ***************
- *** 172,175 ****
- --- 182,186 ----
- if (file_read(fp, fat, textmode, 0, size)) {
- fclose(fp);
- + missed_one++;
- break;
- }
- ***************
- *** 176,191 ****
- fclose(fp);
- set_mtime(tmp, mtime);
- }
- ! ismatch = 1;
- }
- }
- }
- ! if (fat_error)
- break;
-
- ! if (!ismatch)
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- }
- close(fd);
- exit(0);
- }
- --- 187,213 ----
- fclose(fp);
- set_mtime(tmp, mtime);
- + ismatch = 1;
- + got_one++;
- }
- ! else
- ! missed_one++;
- }
- }
- }
- ! if (fat_error) {
- ! missed_one++;
- break;
- + }
-
- ! if (!ismatch) {
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- + missed_one++;
- + }
- }
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- *** old/mtype.c Mon Aug 17 17:40:39 1992
- --- mtype.c Tue Aug 18 14:08:20 1992
- ***************
- *** 27,31 ****
- extern int optind;
- extern char *optarg;
- ! int i, ismatch, entry, c, oops, textmode, stripmode;
- unsigned int fat;
- long size;
- --- 27,32 ----
- extern int optind;
- extern char *optarg;
- ! int i, ismatch, entry, c, oops, textmode, stripmode, got_one;
- ! int missed_one;
- unsigned int fat;
- long size;
- ***************
- *** 39,42 ****
- --- 40,45 ----
- stripmode = 0;
- textmode = 0;
- + got_one = 0;
- + missed_one = 0;
- while ((c = getopt(argc, argv, "st")) != EOF) {
- switch (c) {
- ***************
- *** 66,69 ****
- --- 69,73 ----
- if (init(drive, 0)) {
- fprintf(stderr, "%s: Cannot initialize '%c:'\n", argv[0], drive);
- + missed_one++;
- continue;
- }
- ***************
- *** 72,77 ****
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname))
- continue;
-
- ismatch = 0;
- --- 76,83 ----
- filename = get_name(argv[i]);
- pathname = get_path(argv[i]);
- ! if (subdir(drive, pathname)) {
- ! missed_one++;
- continue;
- + }
-
- ismatch = 0;
- ***************
- *** 97,109 ****
- break;
- ismatch = 1;
- }
- }
- ! if (fat_error)
- break;
-
- ! if (!ismatch)
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- }
- close(fd);
- exit(0);
- }
- --- 103,124 ----
- break;
- ismatch = 1;
- + got_one++;
- }
- }
- ! if (fat_error) {
- ! missed_one++;
- break;
- + }
-
- ! if (!ismatch) {
- fprintf(stderr, "%s: File \"%s\" not found\n", argv[0], filename);
- + missed_one++;
- + }
- }
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- *** old/mwrite.c Mon Aug 17 17:40:40 1992
- --- mwrite.c Fri Aug 21 14:19:50 1992
- ***************
- *** 37,41 ****
- extern int optind;
- extern char *optarg;
- ! int i, entry, ismatch, nogo, slot, single;
- int c, oops, verbose, first, mod_time;
- unsigned int dot, start;
- --- 37,41 ----
- extern int optind;
- extern char *optarg;
- ! int i, entry, ismatch, nogo, slot, single, got_one, missed_one;
- int c, oops, verbose, first, mod_time;
- unsigned int dot, start;
- ***************
- *** 54,57 ****
- --- 54,59 ----
- verbose = 0;
- mod_time = 0;
- + got_one = 0;
- + missed_one = 0;
- while ((c = getopt(argc, argv, "tnvm")) != EOF) {
- switch (c) {
- ***************
- *** 196,201 ****
- break;
- }
- ! if (fat_error)
- break;
-
- if (nogo) /* chickened out... */
- --- 198,205 ----
- break;
- }
- ! if (fat_error) {
- ! missed_one++;
- break;
- + }
-
- if (nogo) /* chickened out... */
- ***************
- *** 204,207 ****
- --- 208,212 ----
- if (dot == 0 && slot < 0) {
- fprintf(stderr, "%s: No directory slots\n", argv[0]);
- + missed_one++;
- break;
- }
- ***************
- *** 210,213 ****
- --- 215,219 ----
- if (dir_grow(dot)) {
- fprintf(stderr, "%s: Disk full\n", argv[0]);
- + missed_one++;
- break;
- }
- ***************
- *** 216,221 ****
- }
- /* write the file */
- ! if (dir = writeit(fixed, argv[i], verbose, mod_time, single, target))
- dir_write(slot, dir);
-
- if (full) {
- --- 222,231 ----
- }
- /* write the file */
- ! if (dir = writeit(fixed, argv[i], verbose, mod_time, single, target)) {
- dir_write(slot, dir);
- + got_one++;
- + }
- + else
- + missed_one++;
-
- if (full) {
- ***************
- *** 231,234 ****
- --- 241,248 ----
- disk_flush();
- close(fd);
- + if (got_one && missed_one)
- + exit(2);
- + if (missed_one)
- + exit(1);
- exit(0);
- }
- End of Patch
-