Patch #4 to Mtools v2.0
Emmet P. Gray
egray at osiris.cso.uiuc.edu
Tue Apr 16 13:10:08 AEST 1991
This is patch #4 to the Mtools v2.0 distribution package. 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.
Mtools was posted to the unix-pc.sources news group (and mailed to Rich
Salz, the moderator of comp.sources.unix) on the 17th of September 1990.
Since then, patches 1-3 have been posted to unix-pc.sources,
comp.sources.bugs, and emailed to Rich Salz.
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
uploaded the files to the ~ftp/tmp/mtools directory on uunet.uu.net.
Emmet P. Gray US Army, HQ III Corps & Fort Hood
...!uunet!uiucuxc!fthood!egray Attn: AFZF-DE-ENV
fthood!egray at uxc.cso.uiuc.edu Directorate of Engineering & Housing
Environmental Management Office
Fort Hood, TX 76544-5057
-----------------------------------------------------------------------------
Prereq: 2.0.3
*** old/patchlevel.h Thu Apr 11 19:09:32 1991
--- patchlevel.h Thu Apr 11 19:21:42 1991
***************
*** 1 ****
! #define VERSION 2.0.3
--- 1,17 ----
! #define VERSION "2.0.4"
! #define DATE "11 Apr 91"
!
! /*
! * Version 1.0 13 Oct 86
! * Version 1.1 11 Jan 87
! * Version 1.2 11 Jun 87
! * Version 1.3 15 Jun 88
! * Version 1.4 28 Sep 88
! * Version 1.5 9 Oct 88
! * Version 1.6 3 May 89
! * Version 2.0 8 Sep 90
! * patch #1 12 Oct 90
! * patch #2 21 Nov 90
! * patch #3 28 Nov 90
! * patch #4 11 Apr 91
! */
*** old/Configure Thu Apr 11 19:09:31 1991
--- Configure Sun Apr 14 14:14:03 1991
***************
*** 21,26 ****
2) The Makefile and msdos.h files
! The following pre-processor variables are used throughout
! Mtools:
BSD for systems without System V style strings functions
--- 21,26 ----
2) The Makefile and msdos.h files
! The following pre-processor variables are used in Mtools. They
! should be set with "-Dvariable" in CFLAGS in the Makefile.
BSD for systems without System V style strings functions
***************
*** 27,35 ****
and System V style utime().
! UNIXPC for users of AT&T Unix PC 7300/3B1
! There are a few more pre-processor variables in devices.c to select
! some standard device options.
There is a variable in msdos.h called SIG_TYPE which should be
configured to the "base" return type of signal();
--- 27,36 ----
and System V style utime().
! ISC default devices for ISC's Unix V.
! UNIXPC default devices for AT&T Unix PC 7300/3B1
+ SPARC default devices for SunOS 4.1 on a SPARCstation
+
There is a variable in msdos.h called SIG_TYPE which should be
configured to the "base" return type of signal();
***************
*** 37,40 ****
--- 38,45 ----
3) The devices "database" in devices.c
+ WARNING: The devices.c file, as distributed, has *NO* devices
+ defined. You *MUST* select from one of the examples or edit the
+ devices database yourself.
+
struct device {
char drive; /* the drive letter */
***************
*** 79,86 ****
! If a device supports more than one disk capacity (1.2m and
! 360k), then you should place the most frequently used capacity
! first. You may get an error message from the device driver when
! the disk capacity doesn't match the device, but these can be
safely ignored.
--- 84,91 ----
! If a device supports more than one disk capacity (1.2m and
! 360k), then you should place the most frequently used capacity
! first. You may get an error message from the device driver when
! the disk capacity doesn't match the device, but these can be
safely ignored.
***************
*** 121,125 ****
{'\0', (char *) NULL, 0L, 0, 0, (int (*)()) 0, 0, 0, 0}
! Note that the two devices are actually the same physical
! device, and that only the number of sectors are
! different.
--- 126,130 ----
{'\0', (char *) NULL, 0L, 0, 0, (int (*)()) 0, 0, 0, 0}
! Note that the two devices are actually the same physical
! device, and that only the number of sectors are
! different.
*** old/Makefile Thu Apr 11 19:10:27 1991
--- Makefile Thu Apr 11 19:21:42 1991
***************
*** 178,193 ****
init.o: msdos.h
is_dir.o: msdos.h
! mattrib.o: msdos.h
! mcd.o: msdos.h
! mdel.o: msdos.h
! mdir.o: msdos.h
! mformat.o: msdos.h
! mlabel.o: msdos.h
! mmd.o: msdos.h
! mrd.o: msdos.h
! mread.o: msdos.h
! mren.o: msdos.h
! mtype.o: msdos.h
! mwrite.o: msdos.h
parse.o: msdos.h
subdir.o: msdos.h
--- 178,194 ----
init.o: msdos.h
is_dir.o: msdos.h
! mattrib.o: msdos.h patchlevel.h
! mcd.o: msdos.h patchlevel.h
! mcopy.o: patchlevel.h
! mdel.o: msdos.h patchlevel.h
! mdir.o: msdos.h patchlevel.h
! mformat.o: msdos.h patchlevel.h
! mlabel.o: msdos.h patchlevel.h
! mmd.o: msdos.h patchlevel.h
! mrd.o: msdos.h patchlevel.h
! mread.o: msdos.h patchlevel.h
! mren.o: msdos.h patchlevel.h
! mtype.o: msdos.h patchlevel.h
! mwrite.o: msdos.h patchlevel.h
parse.o: msdos.h
subdir.o: msdos.h
*** old/Mformat.1 Thu Apr 11 19:09:31 1991
--- Mformat.1 Thu Apr 11 19:21:43 1991
***************
*** 31,34 ****
--- 31,38 ----
.B l
An optional volume label.
+ .PP
+ To format a diskette at a density other than the default, you must supply
+ (at least) those command line parameters that are different from the
+ default.
.SH SEE ALSO
mlabel(1)
*** old/Mformat.out Thu Apr 11 19:09:31 1991
--- Mformat.out Thu Apr 11 19:21:43 1991
***************
*** 29,32 ****
--- 29,36 ----
l An optional volume label.
+ To format a diskette at a density other than the default,
+ you must supply (at least) those command line parameters
+ that are different from the the default.
+
SEE ALSO
mlabel(1)
*** old/Readme Thu Apr 11 19:09:31 1991
--- Readme Thu Apr 11 19:34:36 1991
***************
*** 1,4 ****
MTOOLS
! version 2.0.0 - 8 Sep 90
Mtools is a public domain collection of programs to allow Unix systems
--- 1,4 ----
MTOOLS
! version 2.0
Mtools is a public domain collection of programs to allow Unix systems
*** old/Release.notes Thu Apr 11 19:09:31 1991
--- Release.notes Sun Apr 14 14:12:39 1991
***************
*** 1,5 ****
New in the v2.0 release....
! 1) Support for multiple devices. Mtools now supports:
multiple floppy disks (A:, B:, etc)
DOS partitions on a hard disk
--- 1,5 ----
New in the v2.0 release....
! 1) Support for multiple devices. Mtools now supports:
multiple floppy disks (A:, B:, etc)
DOS partitions on a hard disk
***************
*** 20,25 ****
get clobbered by MSDOS file name restrictions.
! 7) The mkdfs program of the "fast-mtools" release for the Sun
SparcStation can be replaced with mformat.
Many thanks to Viktor Dukhovni (viktor at math.princeton.edu) for
--- 20,28 ----
get clobbered by MSDOS file name restrictions.
! 7) The mkdfs program of the "fast-mtools" release for the Sun
SparcStation can be replaced with mformat.
+
+ 8) The Configure file has been included to help those who must add
+ devices to the devices.c file.
Many thanks to Viktor Dukhovni (viktor at math.princeton.edu) for
*** old/buf_write.c Thu Apr 11 19:09:31 1991
--- buf_write.c Thu Apr 11 19:43:51 1991
***************
*** 11,14 ****
--- 11,15 ----
extern long disk_offset, disk_current;
extern unsigned char *disk_buf;
+ static int blank_cyl();
void
*** old/dir_make.c Thu Apr 11 19:09:31 1991
--- dir_make.c Thu Apr 11 19:55:24 1991
***************
*** 29,32 ****
--- 29,33 ----
return(1);
+ /* CONSTCOND */
while (1) {
next = fat_decode(fat);
*** old/dir_read.c Thu Apr 11 19:09:31 1991
--- dir_read.c Thu Apr 11 19:46:34 1991
***************
*** 42,45 ****
--- 42,46 ----
length = 0;
+ /* CONSTCOND */
while (1) {
dir_chain[length] = (long) (num - 2) * clus_size + dir_start + dir_len;
***************
*** 96,100 ****
register int i;
char *malloc();
! void free(), disk_read(), dir_flush();
if (dir_dirty)
--- 97,101 ----
register int i;
char *malloc();
! void free(), disk_read(), dir_flush(), exit(), perror();
if (dir_dirty)
*** old/dir_write.c Thu Apr 11 19:09:31 1991
--- dir_write.c Thu Apr 11 19:21:44 1991
***************
*** 66,70 ****
char *s, buf[MAX_PATH], *name, *ext, *strcpy(), *strpbrk(), *strrchr();
static unsigned char ans[13];
! int dot, modified;
register int i;
--- 66,70 ----
char *s, buf[MAX_PATH], *name, *ext, *strcpy(), *strpbrk(), *strrchr();
static unsigned char ans[13];
! int dot, modified, len;
register int i;
***************
*** 82,93 ****
ext = "";
dot = 0;
! for (i = strlen(buf) - 1; i >= 0; i--) {
! if (buf[i] == '.' && !dot) {
dot = 1;
! buf[i] = '\0';
! ext = &buf[i + 1];
}
! if (islower(buf[i]))
! buf[i] = toupper(buf[i]);
}
if (*name == '\0') {
--- 82,95 ----
ext = "";
dot = 0;
! len = strlen(name);
! for (i = 0; i < len; i++) {
! s = name + len -i -1;
! if (*s == '.' && !dot) {
dot = 1;
! *s = '\0';
! ext = s +1;
}
! if (islower(*s))
! *s = toupper(*s);
}
if (*name == '\0') {
*** old/fat_free.c Thu Apr 11 19:09:31 1991
--- fat_free.c Thu Apr 11 19:54:25 1991
***************
*** 16,20 ****
--- 16,24 ----
{
unsigned int next, fat_decode();
+ /* a zero length file? */
+ if (fat == 0)
+ return(0);
+ /* CONSTCOND */
while (1) {
/* get next cluster number */
*** old/file_read.c Thu Apr 11 19:09:31 1991
--- file_read.c Thu Apr 11 19:57:00 1991
***************
*** 21,29 ****
long current, start;
unsigned char in_buf[MAX_CLUSTER], out_buf[MAX_CLUSTER];
! void disk_read();
current = 0L;
in_len = clus_size * MSECTOR_SIZE;
while (1) {
start = (long) (fat - 2) * clus_size + dir_start + dir_len;
--- 21,33 ----
long current, start;
unsigned char in_buf[MAX_CLUSTER], out_buf[MAX_CLUSTER];
! void disk_read(), perror();
current = 0L;
in_len = clus_size * MSECTOR_SIZE;
+ /* a zero length file? */
+ if (fat == 0)
+ return(0);
+ /* CONSTCOND */
while (1) {
start = (long) (fat - 2) * clus_size + dir_start + dir_len;
***************
*** 47,51 ****
}
/* write it */
! fwrite((char *) out_buf, sizeof(*out_buf), out_len, fp);
}
/* much easier... */
--- 51,58 ----
}
/* write it */
! if (fwrite((char *) out_buf, sizeof(*out_buf), out_len, fp) == 0) {
! perror("file_write: fwrite");
! return(-1);
! }
}
/* much easier... */
***************
*** 52,56 ****
else {
out_len = (size - current > in_len) ? in_len : size - current;
! fwrite((char *) in_buf, sizeof(*in_buf), out_len, fp);
current += out_len;
--- 59,66 ----
else {
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);
! }
current += out_len;
*** old/file_write.c Thu Apr 11 19:09:31 1991
--- file_write.c Sun Apr 14 19:39:19 1991
***************
*** 5,9 ****
extern unsigned end_fat;
! static int need_nl;
/*
--- 5,9 ----
extern unsigned end_fat;
! static int need_nl, put_cluster();
/*
***************
*** 28,31 ****
--- 28,32 ----
size = 0L;
+ /* CONSTCOND */
while (1) {
if ((i = put_cluster(fp, fat, &filesize, textmode)) < 0) {
***************
*** 104,108 ****
}
}
! tbuf[i++] = c;
}
}
--- 105,109 ----
}
}
! tbuf[i++] = (unsigned char) c;
}
}
*** old/init.c Thu Apr 11 19:09:31 1991
--- init.c Sun Apr 14 13:59:58 1991
***************
*** 9,12 ****
--- 9,13 ----
#include "msdos.h"
+ #define FULL_CYL
#define WORD(x) ((boot->x)[0] + ((boot->x)[1] << 8))
***************
*** 22,25 ****
--- 23,27 ----
extern unsigned char *fat_buf, *disk_buf, *dir_buf;
extern struct device devices[];
+ static struct bootsector *read_boot();
int
***************
*** 31,35 ****
char *malloc(), *name, *expand();
void perror(), exit(), reset_chain(), free(), fat_read();
! struct bootsector *boot, *read_boot();
struct device *dev;
--- 33,37 ----
char *malloc(), *name, *expand();
void perror(), exit(), reset_chain(), free(), fat_read();
! struct bootsector *boot;
struct device *dev;
***************
*** 74,78 ****
sectors = WORD(nsect);
if (heads && sectors)
! tracks = WORD(psect) / (heads * sectors);
/* sanity checking */
--- 76,80 ----
sectors = WORD(nsect);
if (heads && sectors)
! tracks = WORD(psect) / (unsigned) (heads * sectors);
/* sanity checking */
***************
*** 175,179 ****
fat_len = WORD(fatlen);
dir_start = fat_start + (boot->nfat * fat_len);
! dir_len = WORD(dirents) * MDIR_SIZE / MSECTOR_SIZE;
num_clus = (unsigned int) (WORD(psect) - dir_start - dir_len) / clus_size;
num_fat = boot->nfat;
--- 177,181 ----
fat_len = WORD(fatlen);
dir_start = fat_start + (boot->nfat * fat_len);
! dir_len = WORD(dirents) * MDIR_SIZE / (unsigned) MSECTOR_SIZE;
num_clus = (unsigned int) (WORD(psect) - dir_start - dir_len) / clus_size;
num_fat = boot->nfat;
***************
*** 194,198 ****
--- 196,205 ----
}
/* full cylinder buffering */
+ #ifdef FULL_CYL
disk_size = (dev->tracks) ? (sectors * heads) : 1;
+ #else /* FULL_CYL */
+ disk_size = (dev->tracks) ? sectors : 1;
+ #endif /* FULL_CYL */
+
disk_buf = (unsigned char *) malloc((unsigned int) disk_size * MSECTOR_SIZE);
if (disk_buf == NULL) {
***************
*** 223,227 ****
FILE *fp;
char *s, *strcpy(), *strcat(), *mcwd_path, *getenv(), *strncpy();
! char buf[BUFSIZ], *memset();
static char ans[MAX_PATH];
--- 230,234 ----
FILE *fp;
char *s, *strcpy(), *strcat(), *mcwd_path, *getenv(), *strncpy();
! char buf[BUFSIZ], *expand();
static char ans[MAX_PATH];
*** old/mattrib.c Thu Apr 11 19:09:31 1991
--- mattrib.c Thu Apr 11 19:21:45 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 15,18 ****
--- 11,15 ----
#include <stdio.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 86,89 ****
--- 83,87 ----
}
if (argc < 3 || argv[fargn][0] == '\0' || oops) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-a|+a] [-h|+h] [-r|+r] [-s|+s] msdosfile [msdosfiles...]\n", argv[0]);
exit(1);
*** old/mcd.c Thu Apr 11 19:09:31 1991
--- mcd.c Thu Apr 11 19:21:45 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 15,18 ****
--- 11,15 ----
#include <stdio.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 35,38 ****
--- 32,36 ----
if (argc > 2) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s: msdosdirectory\n", argv[0]);
exit(1);
***************
*** 58,63 ****
* search to see if filename is also a directory.
*/
! if (subdir(drive, pathname))
exit(1);
/* is filename really a subdirectory? */
strcpy(newpath, pathname);
--- 56,63 ----
* search to see if filename is also a directory.
*/
! if (subdir(drive, pathname)) {
! fprintf(stderr, "%s: Directory not found\n", argv[0]);
exit(1);
+ }
/* is filename really a subdirectory? */
strcpy(newpath, pathname);
***************
*** 68,73 ****
/* move to real subdirectory */
! if (subdir(drive, newpath))
exit(1);
}
/* it checked out ok, so save it */
--- 68,75 ----
/* move to real subdirectory */
! if (subdir(drive, newpath)) {
! fprintf(stderr, "%s: Directory not found\n", argv[0]);
exit(1);
+ }
}
/* it checked out ok, so save it */
***************
*** 77,81 ****
if (!(fp = fopen(expand(mcwd_path), "w"))) {
! fprintf(stderr, "Can't open '%s' for write\n", expand(mcwd_path));
exit(1);
}
--- 79,83 ----
if (!(fp = fopen(expand(mcwd_path), "w"))) {
! fprintf(stderr, "%s: Can't open '%s' for write\n", argv[0], expand(mcwd_path));
exit(1);
}
*** old/mcopy.c Thu Apr 11 19:09:31 1991
--- mcopy.c Sun Apr 14 19:41:55 1991
***************
*** 7,17 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
#include <stdio.h>
#define NONE 0
--- 7,14 ----
* Environmental Management Office
* Fort Hood, TX 76544-5057
*/
#include <stdio.h>
+ #include "patchlevel.h"
#define NONE 0
***************
*** 26,30 ****
extern char *optarg;
int i, oops, msdos_args, unix_args, destination;
! char **nargv, *strcpy(), *malloc();
void exit();
/* get command line options */
--- 23,27 ----
extern char *optarg;
int i, oops, msdos_args, unix_args, destination;
! char **nargv, **malloc();
void exit();
/* get command line options */
***************
*** 46,49 ****
--- 43,47 ----
if (oops || (argc - optind) < 2) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-tnvm] msdosfile unixfile\n", argv[0]);
fprintf(stderr, " %s [-tnvm] msdosfile [msdosfiles...] unixdirectory\n", argv[0]);
***************
*** 62,66 ****
if (destination == NONE) {
! fprintf(stderr, "%s: no drive letter designation specified\n", argv[0]);
exit(1);
}
--- 60,64 ----
if (destination == NONE) {
! fprintf(stderr, "%s: No drive letter designation specified\n", argv[0]);
exit(1);
}
***************
*** 74,82 ****
/* sanity checking */
if (!msdos_args || !unix_args) {
! fprintf(stderr, "%s: unresolved destination\n", argv[0]);
exit(1);
}
if ((destination == MWRITE && msdos_args > 1) || (destination == MREAD && unix_args > 1)) {
! fprintf(stderr, "%s: duplicate destination files\n", argv[0]);
exit(1);
}
--- 72,80 ----
/* sanity checking */
if (!msdos_args || !unix_args) {
! fprintf(stderr, "%s: Unresolved destination\n", argv[0]);
exit(1);
}
if ((destination == MWRITE && msdos_args > 1) || (destination == MREAD && unix_args > 1)) {
! fprintf(stderr, "%s: Duplicate destination files\n", argv[0]);
exit(1);
}
*** old/mdel.c Thu Apr 11 19:09:31 1991
--- mdel.c Thu Apr 11 19:52:17 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 16,19 ****
--- 12,16 ----
#include <signal.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 25,28 ****
--- 22,27 ----
int fat_error; /* FAT error detected? */
+ static int got_signal();
+
main(argc, argv)
int argc;
***************
*** 29,33 ****
char *argv[];
{
! int i, ismatch, entry, nogo, verbose, fargn, got_signal();
unsigned int start;
char *filename, *newfile, *get_name(), *unix_name(), *get_path();
--- 28,32 ----
char *argv[];
{
! int i, ismatch, entry, nogo, verbose, fargn;
unsigned int start;
char *filename, *newfile, *get_name(), *unix_name(), *get_path();
***************
*** 49,52 ****
--- 48,52 ----
}
if (argc < 2 || (argv[1][0] == '-' && !verbose)) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-v] msdosfile [msdosfiles...]\n", argv[0]);
exit(1);
*** old/mdir.c Thu Apr 11 19:09:31 1991
--- mdir.c Thu Apr 11 21:31:35 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 15,18 ****
--- 11,15 ----
#include <stdio.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 24,27 ****
--- 21,27 ----
int fat_error; /* FAT error detected? */
+ static long getfree();
+ static char *conv_date(), *conv_time();
+
main(argc, argv)
int argc;
***************
*** 29,34 ****
{
int i, entry, files, fargn, wide, faked;
! long size, blocks, getfree();
! char *date, *time, *conv_date(), *conv_time(), last_drive, *fix_mcwd();
char *strncpy(), newpath[MAX_PATH], *get_name(), *get_path(), *pathname;
char *newfile, *filename, *unix_name(), volume[12], drive, *strpbrk();
--- 29,34 ----
{
int i, entry, files, fargn, wide, faked;
! long size, blocks;
! char *date, *time, last_drive, *fix_mcwd();
char *strncpy(), newpath[MAX_PATH], *get_name(), *get_path(), *pathname;
char *newfile, *filename, *unix_name(), volume[12], drive, *strpbrk();
***************
*** 47,50 ****
--- 47,52 ----
}
if (argv[1][0] == '-' && !wide) {
+ fprintf(stderr, "%s: illegal option -- %c\n", argv[0], argv[1][1]);
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s: [-w] msdosdirectory\n", argv[0]);
fprintf(stderr, " %s: [-w] msdosfile [msdosfiles...]\n", argv[0]);
***************
*** 185,189 ****
printf("%-8.8s %-3.3s ", dir->name, dir->ext);
else
! printf("%-8.8s %-3.3s %8d %s %s\n", dir->name, dir->ext, size, date, time);
}
if (argc > 2)
--- 187,191 ----
printf("%-8.8s %-3.3s ", dir->name, dir->ext);
else
! printf("%-8.8s %-3.3s %8ld %s %s\n", dir->name, dir->ext, size, date, time);
}
if (argc > 2)
*** old/mformat.c Thu Apr 11 19:09:31 1991
--- mformat.c Sun Apr 14 19:36:27 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 16,19 ****
--- 12,16 ----
#include <ctype.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd, dir_dirty, dir_entries;
***************
*** 32,38 ****
int tot_sectors, num_clus, fat_guess;
long time(), now, lseek();
! char drive, *name, *expand(), tname[9], text[4];
char *strncpy(), *memset(), *memcpy();
! unsigned char media, *label, *dos_name(), buf[MSECTOR_SIZE];
struct device *dev;
struct directory *dir, *mk_entry();
--- 29,35 ----
int tot_sectors, num_clus, fat_guess;
long time(), now, lseek();
! char drive, *name, *expand();
char *strncpy(), *memset(), *memcpy();
! unsigned char media, label[12], buf[MSECTOR_SIZE];
struct device *dev;
struct directory *dir, *mk_entry();
***************
*** 43,47 ****
heads = 0;
sectors = 0;
! label = NULL;
/* get command line options */
while ((c = getopt(argc, argv, "t:h:s:l:")) != EOF) {
--- 40,44 ----
heads = 0;
sectors = 0;
! label[0] = '\0';
/* get command line options */
while ((c = getopt(argc, argv, "t:h:s:l:")) != EOF) {
***************
*** 57,70 ****
break;
case 'l':
! if (strlen(optarg) > 8) {
! strncpy(tname, optarg, 8);
! tname[8] = '\0';
! strncpy(text, optarg + 8, 3);
! text[3] = '\0';
! sprintf((char *) buf, "%s.%s", tname, text);
! label = dos_name((char *) buf, 0);
! }
! else
! label = dos_name(optarg, 0);
break;
default:
--- 54,58 ----
break;
case 'l':
! sprintf((char *) label, "%-11.11s", optarg);
break;
default:
***************
*** 75,78 ****
--- 63,67 ----
if (oops || (argc - optind) != 1) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-t tracks] [-h heads] [-s sectors] [-l label] device\n", argv[0]);
exit(1);
***************
*** 110,114 ****
exit(1);
}
! /* open the port */
name = expand(dev->name);
if ((fd = open(name, 2 | dev->mode)) < 0) {
--- 99,103 ----
exit(1);
}
! /* open the device */
name = expand(dev->name);
if ((fd = open(name, 2 | dev->mode)) < 0) {
***************
*** 206,210 ****
boot.secsiz[0] = 512 % 0x100;
boot.secsiz[1] = 512 / 0x100;
! boot.clsiz = clus_size;
boot.nrsvsect[0] = 1;
boot.nrsvsect[1] = 0;
--- 195,199 ----
boot.secsiz[0] = 512 % 0x100;
boot.secsiz[1] = 512 / 0x100;
! boot.clsiz = (unsigned char) clus_size;
boot.nrsvsect[0] = 1;
boot.nrsvsect[1] = 0;
***************
*** 243,247 ****
write(fd, (char *) buf, MSECTOR_SIZE);
/* the root directory */
! if (label != NULL && *label != '\0') {
time(&now);
dir = mk_entry(label, 0x08, 0, 0L, now);
--- 232,236 ----
write(fd, (char *) buf, MSECTOR_SIZE);
/* the root directory */
! if (label[0] != '\0') {
time(&now);
dir = mk_entry(label, 0x08, 0, 0L, now);
*** old/mkmanifest.c Thu Apr 11 19:09:32 1991
--- mkmanifest.c Thu Apr 11 21:28:28 1991
***************
*** 48,52 ****
static char *dev[9] = {"con", "aux", "com1", "com2", "lpt1", "prn",
"lpt2", "lpt3", "nul"};
! char *s, *temp, *ext, *malloc(), *strcpy(), *strpbrk(), *strcat();
char buf[15];
int i, dot;
--- 48,52 ----
static char *dev[9] = {"con", "aux", "com1", "com2", "lpt1", "prn",
"lpt2", "lpt3", "nul"};
! char *s, *temp, *ext, *strcpy(), *strpbrk(), *strcat();
char buf[15];
int i, dot;
*** old/mlabel.c Thu Apr 11 19:09:32 1991
--- mlabel.c Sun Apr 14 14:35:16 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 16,19 ****
--- 12,16 ----
#include <ctype.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 30,36 ****
{
int entry, slot, fargn, verbose, oops;
! char filename[13], *strncpy(), drive, ans[10], vol[13], *strncat();
! char tname[9], text[4], *fix_mcwd();
! unsigned char *fixed, *dos_name();
void exit(), dir_write(), dir_flush(), disk_flush();
struct directory *dir, *dir_read(), *mk_entry();
--- 27,33 ----
{
int entry, slot, fargn, verbose, oops;
! char filename[30], *strncpy(), drive, ans[10], *strncat();
! char *strcpy(), *fix_mcwd();
! unsigned char fixed[12], vol[12];
void exit(), dir_write(), dir_flush(), disk_flush();
struct directory *dir, *dir_read(), *mk_entry();
***************
*** 49,52 ****
--- 46,50 ----
}
if (argc < 2 || argv[fargn][1] != ':' || oops) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-v] drive:\n", argv[0]);
exit(1);
***************
*** 84,90 ****
slot = entry;
! strncpy(vol, (char *) dir->name, 8);
vol[8] = '\0';
! strncat(vol, (char *) dir->ext, 3);
vol[11] = '\0';
--- 82,88 ----
slot = entry;
! strncpy((char *) vol, (char *) dir->name, 8);
vol[8] = '\0';
! strncat((char *) vol, (char *) dir->ext, 3);
vol[11] = '\0';
***************
*** 103,115 ****
gets(filename);
if (filename[0] != '\0') {
! /* add a '.' at column 9 */
! if (strlen(filename) > 8) {
! strncpy(tname, filename, 8);
! tname[8] = '\0';
! strncpy(text, &filename[8], 3);
! text[3] = '\0';
! sprintf(filename, "%s.%s", tname, text);
! }
! fixed = dos_name(filename, verbose);
}
else {
--- 101,107 ----
gets(filename);
if (filename[0] != '\0') {
! sprintf((char *) fixed, "%-11.11s", filename);
! if (strlen(filename) > 11 && verbose)
! printf("New label is \"%s\"\n", fixed);
}
else {
***************
*** 120,125 ****
gets(ans);
if (ans[0] == 'y' || ans[0] == 'Y') {
! fixed = (unsigned char *) vol;
! *fixed = 0xe5;
}
else
--- 112,117 ----
gets(ans);
if (ans[0] == 'y' || ans[0] == 'Y') {
! strcpy((char *) fixed, (char *) vol);
! fixed[0] = 0xe5;
}
else
*** old/mmd.c Thu Apr 11 19:09:32 1991
--- mmd.c Thu Apr 11 20:04:46 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 16,19 ****
--- 12,16 ----
#include <signal.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 25,28 ****
--- 22,28 ----
int fat_error; /* FAT error detected? */
+ static int got_signal();
+ static void empty_dir();
+
main(argc, argv)
int argc;
***************
*** 29,33 ****
char *argv[];
{
! int i, entry, slot, fargn, verbose, oops, got_signal();
extern unsigned int end_fat;
unsigned int fat, dot, next_fat();
--- 29,33 ----
char *argv[];
{
! int i, entry, slot, fargn, verbose, oops;
extern unsigned int end_fat;
unsigned int fat, dot, next_fat();
***************
*** 35,40 ****
char *strcpy(), *fix_mcwd(), *pathname, *unix_name(), last_drive;
unsigned char *fixed, *dos_name();
! void exit(), fat_write(), empty_dir(), dir_write(), disk_flush();
! void dir_flush();
struct directory *dir, *dir_read(), *mk_entry();
long time(), now;
--- 35,39 ----
char *strcpy(), *fix_mcwd(), *pathname, *unix_name(), last_drive;
unsigned char *fixed, *dos_name();
! void exit(), fat_write(), dir_write(), disk_flush(), dir_flush();
struct directory *dir, *dir_read(), *mk_entry();
long time(), now;
***************
*** 55,59 ****
oops++;
}
! if (!argc || oops) {
fprintf(stderr, "Usage: %s [-v] msdosdirectory [msdosdirectories...]\n", argv[0]);
exit(1);
--- 54,59 ----
oops++;
}
! if (argc == 1 || oops) {
! fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-v] msdosdirectory [msdosdirectories...]\n", argv[0]);
exit(1);
*** old/mrd.c Thu Apr 11 19:09:32 1991
--- mrd.c Thu Apr 11 21:26:03 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 16,19 ****
--- 12,16 ----
#include <signal.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 25,28 ****
--- 22,27 ----
int fat_error; /* FAT error detected? */
+ static int got_signal(), is_empty();
+
main(argc, argv)
int argc;
***************
*** 29,33 ****
char *argv[];
{
! int i, ismatch, entry, oops, empty, got_signal();
unsigned int start;
char *filename, *newfile, *get_name(), drive, *pathname, *get_path();
--- 28,32 ----
char *argv[];
{
! int i, ismatch, entry, oops, empty;
unsigned int start;
char *filename, *newfile, *get_name(), drive, *pathname, *get_path();
***************
*** 40,44 ****
signal(SIGQUIT, (SIG_TYPE(*) ()) got_signal);
! if (argc == 0) {
fprintf(stderr, "Usage: %s mdsosdirectory [msdosdirectories...]\n", argv[0]);
exit(1);
--- 39,44 ----
signal(SIGQUIT, (SIG_TYPE(*) ()) got_signal);
! if (argc == 1) {
! fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s mdsosdirectory [msdosdirectories...]\n", argv[0]);
exit(1);
***************
*** 138,141 ****
--- 138,142 ----
void disk_read();
+ /* CONSTCOND */
while (1) {
sector = (long) (fat - 2) * clus_size + dir_start + dir_len;
*** old/mread.c Thu Apr 11 19:09:32 1991
--- mread.c Thu Apr 11 21:27:29 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 25,28 ****
--- 21,25 ----
#endif /* BSD */
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 34,37 ****
--- 31,38 ----
int fat_error; /* FAT error detected? */
+ static void set_mtime();
+ static FILE *open_file();
+ static long conv_stamp();
+
main(argc, argv)
int argc;
***************
*** 38,42 ****
char *argv[];
{
! FILE *fp, *open_file();
extern int optind;
extern char *optarg;
--- 39,43 ----
char *argv[];
{
! FILE *fp;
extern int optind;
extern char *optarg;
***************
*** 43,51 ****
int i, ismatch, entry, single, c, oops, preserve, nowarn, textmode;
unsigned int fat;
! long size, mtime, conv_stamp();
char *filename, *newfile, *get_name(), *unix_name(), *pathname;
char *get_path(), *target, tmp[MAX_PATH], *strcat(), *strcpy(), drive;
char get_drive(), last_drive, *fix_mcwd(), *s;
! void exit(), set_mtime();
struct directory *dir, *dir_read();
struct stat stbuf;
--- 44,52 ----
int i, ismatch, entry, single, c, oops, preserve, nowarn, textmode;
unsigned int fat;
! long size, mtime;
char *filename, *newfile, *get_name(), *unix_name(), *pathname;
char *get_path(), *target, tmp[MAX_PATH], *strcat(), *strcpy(), drive;
char get_drive(), last_drive, *fix_mcwd(), *s;
! void exit();
struct directory *dir, *dir_read();
struct stat stbuf;
***************
*** 74,77 ****
--- 75,79 ----
if (oops || (argc - optind) < 2) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-tnm] msdosfile unixfile\n", argv[0]);
fprintf(stderr, " %s [-tnm] msdosfile [msdosfiles...] unixdirectory\n", argv[0]);
***************
*** 90,94 ****
/* too many arguments */
if (single && (argc - optind) != 2) {
! fprintf(stderr, "%s: too many arguments or destination directory omitted\n", argv[0]);
exit(1);
}
--- 92,96 ----
/* too many arguments */
if (single && (argc - optind) != 2) {
! fprintf(stderr, "%s: Too many arguments or destination directory omitted\n", argv[0]);
exit(1);
}
***************
*** 202,205 ****
--- 204,208 ----
if (!nowarn) {
if (!access(target, 0)) {
+ /* CONSTCOND */
while (1) {
printf("File \"%s\" exists, overwrite (y/n) ? ", target);
***************
*** 240,243 ****
--- 243,247 ----
#else /* BSD */
extern long timezone;
+ void tzset();
#endif /* BSD */
struct tm *tmbuf, *localtime();
*** old/mren.c Thu Apr 11 19:09:32 1991
--- mren.c Thu Apr 11 19:21:49 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 15,18 ****
--- 11,15 ----
#include <stdio.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 45,48 ****
--- 42,46 ----
}
if (argc != fargn + 2) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-v] sourcefile targetfile\n", argv[0]);
exit(1);
*** old/mtype.c Thu Apr 11 19:09:32 1991
--- mtype.c Thu Apr 11 19:21:49 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 15,18 ****
--- 11,15 ----
#include <stdio.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 57,60 ****
--- 54,58 ----
if (oops || (argc - optind) < 1) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-st] msdosfile [msdosfiles...]\n", argv[0]);
exit(1);
*** old/mwrite.c Thu Apr 11 19:09:32 1991
--- mwrite.c Thu Apr 11 21:25:17 1991
***************
*** 7,14 ****
* Environmental Management Office
* Fort Hood, TX 76544-5057
- * Version 2.0.0 8 Sep 90
- * patch #1 12 Oct 90
- * patch #2 21 Nov 90
- * patch #3 28 Nov 90
*/
--- 7,10 ----
***************
*** 18,21 ****
--- 14,18 ----
#include <sys/stat.h>
#include "msdos.h"
+ #include "patchlevel.h"
int fd = -1; /* the file descriptor for the device */
***************
*** 30,33 ****
--- 27,33 ----
int textmode = 0;
int nowarn = 0;
+ static int got_signal();
+ static struct directory *writeit();
+ static long free_space();
main(argc, argv)
***************
*** 38,42 ****
extern char *optarg;
int i, entry, ismatch, nogo, slot, single;
! int c, oops, verbose, first, mod_time, got_signal();
unsigned int dot, start;
char *filename, *newfile, *get_name(), get_drive();
--- 38,42 ----
extern char *optarg;
int i, entry, ismatch, nogo, slot, single;
! int c, oops, verbose, first, mod_time;
unsigned int dot, start;
char *filename, *newfile, *get_name(), get_drive();
***************
*** 45,49 ****
unsigned char *fixed, *dos_name();
void exit(), fat_write(), dir_write(), disk_flush(), dir_flush();
! struct directory *dir, *dir_read(), *writeit();
/* catch signals */
signal(SIGINT, (SIG_TYPE(*) ()) got_signal);
--- 45,49 ----
unsigned char *fixed, *dos_name();
void exit(), fat_write(), dir_write(), disk_flush(), dir_flush();
! struct directory *dir, *dir_read();
/* catch signals */
signal(SIGINT, (SIG_TYPE(*) ()) got_signal);
***************
*** 75,78 ****
--- 75,79 ----
if (oops || (argc - optind) < 2) {
+ fprintf(stderr, "Mtools version %s, dated %s\n", VERSION, DATE);
fprintf(stderr, "Usage: %s [-tnvm] unixfile msdosfile\n", argv[0]);
fprintf(stderr, " %s [-tnvm] unixfile [unixfiles...] msdosdirectory\n", argv[0]);
***************
*** 113,117 ****
/* too many arguments */
if ((argc - optind) != 2) {
! fprintf(stderr, "%s: too many arguments or destination directory omitted\n", argv[0]);
exit(1);
}
--- 114,118 ----
/* too many arguments */
if ((argc - optind) != 2) {
! fprintf(stderr, "%s: Too many arguments or destination directory omitted\n", argv[0]);
exit(1);
}
***************
*** 172,175 ****
--- 173,177 ----
}
else {
+ /* CONSTCOND */
while (1) {
printf("File \"%s\" exists, overwrite (y/n) ? ", target);
***************
*** 213,225 ****
slot = entry;
}
- if (!single)
- printf("Copying %s\n", target);
-
/* write the file */
! if (dir = writeit(fixed, argv[i], verbose, mod_time))
dir_write(slot, dir);
if (full) {
! fprintf(stderr, "%s: Disk Full\n", argv[0]);
break;
}
--- 215,224 ----
slot = entry;
}
/* write the file */
! if (dir = writeit(fixed, argv[i], verbose, mod_time, single, target))
dir_write(slot, dir);
if (full) {
! fprintf(stderr, "%s: Disk full\n", argv[0]);
break;
}
***************
*** 241,252 ****
static struct directory *
! writeit(fixed, path, verbose, mod_time)
unsigned char *fixed;
char *path;
! int verbose, mod_time;
{
FILE *fp;
unsigned int fat, next_fat();
! long filesize, file_write(), size, time(), now, free_space();
struct directory *dir, *mk_entry();
struct stat stbuf;
--- 240,252 ----
static struct directory *
! writeit(fixed, path, verbose, mod_time, single, target)
unsigned char *fixed;
char *path;
! int verbose, mod_time, single;
! char *target;
{
FILE *fp;
unsigned int fat, next_fat();
! long filesize, file_write(), size, time(), now;
struct directory *dir, *mk_entry();
struct stat stbuf;
***************
*** 264,270 ****
if ((stbuf.st_mode & S_IFREG) != S_IFREG) {
! fprintf(stderr, "\"%s\" is not a regular file\n", path);
return(NULL);
}
/* will it fit? */
filesize = stbuf.st_size;
--- 264,280 ----
if ((stbuf.st_mode & S_IFREG) != S_IFREG) {
! if (verbose)
! fprintf(stderr, "\"%s\" is not a regular file\n", path);
return(NULL);
}
+
+ if (!(fp = fopen(path, "r"))) {
+ fprintf(stderr, "Can't open \"%s\" for read\n", path);
+ return(NULL);
+ }
+
+ if (!single)
+ printf("Copying %s\n", target);
+
/* will it fit? */
filesize = stbuf.st_size;
***************
*** 279,285 ****
time(&now);
! if (!(fp = fopen(path, "r"))) {
! fprintf(stderr, "Can't open \"%s\" for read\n", path);
! return(NULL);
}
--- 289,296 ----
time(&now);
! /* if a zero length file */
! if (filesize == 0L) {
! dir = mk_entry(fixed, 0x20, 0, 0L, now);
! return(dir);
}
*** old/subdir.c Thu Apr 11 19:09:32 1991
--- subdir.c Thu Apr 11 19:48:31 1991
***************
*** 3,6 ****
--- 3,7 ----
extern int dir_entries;
+ static int descend();
/*
***************
*** 14,18 ****
char *pathname;
{
! char *s, *tmp, tbuf[MAX_PATH], *path, *strcpy(), *strcat();
static char last_drive, lastpath[MAX_PATH];
int code;
--- 15,19 ----
char *pathname;
{
! char *s, *tmp, tbuf[MAX_PATH], *path, *strcpy();
static char last_drive, lastpath[MAX_PATH];
int code;
End of Patch
More information about the Comp.sources.bugs
mailing list