From 2ac095726f087c9cec2cf3a601c69bfa46f77ac6 Mon Sep 17 00:00:00 2001 From: ache Date: Thu, 10 Feb 1994 01:15:01 +0000 Subject: Add interleave > 1 support by Poul-Henning Kamp. Chack valid range of sectors per track. --- usr.sbin/fdformat/fdformat.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'usr.sbin/fdformat/fdformat.c') diff --git a/usr.sbin/fdformat/fdformat.c b/usr.sbin/fdformat/fdformat.c index f29013d..dc8fba8 100644 --- a/usr.sbin/fdformat/fdformat.c +++ b/usr.sbin/fdformat/fdformat.c @@ -51,10 +51,18 @@ static void format_track(int fd, int cyl, int secs, int head, int rate, - int gaplen, int secsize, int fill) + int gaplen, int secsize, int fill,int interleave) { struct fd_formb f; - register int i; + register int i,j; + int il[FD_MAX_NSEC]; + + memset(il,0,sizeof il); + for(j = 0, i = 1; i <= secs; i++) { + while(il[(j%secs)+1]) j++; + il[(j%secs)+1] = i; + j += interleave; + } f.format_version = FD_FORMAT_VERSION; f.head = head; @@ -68,7 +76,7 @@ format_track(int fd, int cyl, int secs, int head, int rate, for(i = 0; i < secs; i++) { f.fd_formb_cylno(i) = cyl; f.fd_formb_headno(i) = head; - f.fd_formb_secno(i) = i + 1; + f.fd_formb_secno(i) = il[i+1]; f.fd_formb_secsize(i) = secsize; } if(ioctl(fd, FD_FORM, (caddr_t)&f) < 0) { @@ -274,15 +282,15 @@ main(int argc, char **argv) if (cyls >= 0) fdt.tracks = cyls; if (secs >= 0) fdt.sectrac = secs; + if (fdt.sectrac > FD_MAX_NSEC) { + fprintf(stderr, "fdformat: too many sectors per track, max value is %d\n", FD_MAX_NSEC); + exit(2); + } if (heads >= 0) fdt.heads = heads; if (gaplen >= 0) fdt.f_gap = gaplen; if (secsize >= 0) fdt.secsize = secsize; if (steps >= 0) fdt.steptrac = steps; if (intleave >= 0) fdt.f_inter = intleave; - if (fdt.f_inter != 1) { - fprintf(stderr, "fdformat: can't format with interleave != 1 yet\n"); - exit(2); - } bytes_per_track = fdt.sectrac * (1<