diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile index 3ebfa0548f4e..5dc056390ca5 100644 --- a/usr.sbin/Makefile +++ b/usr.sbin/Makefile @@ -1,10 +1,10 @@ # From: @(#)Makefile 5.20 (Berkeley) 6/12/93 -# $Id: Makefile,v 1.120 1998/05/03 05:17:28 peter Exp $ +# $Id: Makefile,v 1.121 1998/05/24 15:07:04 des Exp $ # XXX MISSING: mkproto SUBDIR= ac accton adduser amd arp bootparamd cdcontrol chkgrp chown chroot \ ckdist cron ctm dev_mkdb diskpart edquota inetd kernbb keyadmin \ - keyserv lpr manctl mkdosfs mrouted mtest mtree \ + keyserv lpr manctl mrouted mtest mtree \ named named.reload named.restart ndc newsyslog nslookup nsupdate \ pccard pciconf periodic pkg_install portmap \ ppp pppctl pppd pppstats procctl pw pwd_mkdb quot quotaon rarpd \ diff --git a/usr.sbin/mkdosfs/Makefile b/usr.sbin/mkdosfs/Makefile deleted file mode 100644 index 6a4663e594e8..000000000000 --- a/usr.sbin/mkdosfs/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -# $Id: Makefile,v 1.4 1997/12/19 23:56:18 bde Exp $ - -PROG= mkdosfs - -CFLAGS+= -Wall - -################################################################### -# -# Everything below is solely intented for maintenance. -# As you can see, it requires as86/ld86 from the ``bcc'' package. - -# Uncomment this for maintenance. -# Warning: doing this may result in the distribution copy of bootcode.h -# being rebuilt if an objects are built in the current directory. -# -#MKDOSFS_MAINTENANCE= yes - -.if defined(MKDOSFS_MAINTENANCE) -SRCS= mkdosfs.c bootcode.h -CFLAGS+= -I. -CLEANFILES+= bootcode.h - -AS86= as86 -LD86= ld86 -AS86FLAGS= -0 -LD86FLAGS= -0 -s - -CLEANFILES+= *.obj *.bin *.com - -.SUFFIXES: .asm .obj .bin .com - -.asm.obj: - ${AS86} ${AS86FLAGS} -o ${.TARGET} ${.IMPSRC} - -.obj.bin: - ${LD86} ${LD86FLAGS} -T 0x7c00 -o ${.PREFIX}.tmp ${.IMPSRC} - dd bs=32 skip=1 of=${.TARGET} if=${.PREFIX}.tmp - rm -f ${.PREFIX}.tmp - -# .com file is just for testing -.obj.com: - ${LD86} ${LD86FLAGS} -T 0x100 -o ${.PREFIX}.tmp ${.IMPSRC} - dd bs=32 skip=1 of=${.TARGET} if=${.PREFIX}.tmp - rm -f ${.PREFIX}.tmp - -bootcode.h: bootcode.bin - @echo converting ${.TARGET} into ${.TARGET}... - @perl -e 'if(read(STDIN,$$buf,512)<512) { \ - die "Read error on .bin file\n"; \ - } \ - @arr = unpack("C*",$$buf); \ - print "#ifndef BOOTCODE_H\n"; \ - print "#define BOOTCODE_H 1\n\n"; \ - print "/*\n * This file has been generated\n"; \ - print " * automatically. Do not edit.\n */\n\n"; \ - print "static unsigned char bootcode[512] = {\n"; \ - for($$i=0; $$i<512; $$i++) { \ - printf "0x%02x, ",$$arr[$$i]; \ - if($$i % 12 == 11) {print "\n";} \ - } \ - print "};\n\n"; \ - print "#endif /* BOOTCODE_H */\n";' \ - < ${.ALLSRC} > ${.TARGET} -.endif - -.include diff --git a/usr.sbin/mkdosfs/bootcode.asm b/usr.sbin/mkdosfs/bootcode.asm deleted file mode 100644 index 7e5d42902cd9..000000000000 --- a/usr.sbin/mkdosfs/bootcode.asm +++ /dev/null @@ -1,101 +0,0 @@ -;;; Hello emacs, this looks like -*- asm -*- code, doesn't it? -;;; -;;; This forms a simple dummy boot program for use with a tool to -;;; format DOS floppies. All it does is displaying a message, and -;;; recover gracefully by re-initializing the CPU. -;;; -;;; Written by Joerg Wunsch, Dresden. Placed in the public domain. -;;; This software is provided as is, neither kind of warranty applies. -;;; Use at your own risk. -;;; -;;; (This is written in as86 syntax. as86 is part of Bruce Evans' -;;; bcc package.) -;;; -;;; $Id: bootcode.asm,v 1.4 1997/11/07 00:12:54 joerg Exp $ -;;; -;;; This code must be linked to address 0x7c00 in order to function -;;; correctly (the BIOS boot address). -;;; -;;; It's 16-bit code, and we don't care for a data segment. - use16 - .text - - entry _begin -_begin: jmp init ; jump to boot prog - nop ; historical baggage ;-) -;;; -;;; Reserve space for the "BIOS parameter block". -;;; This will be overwritten by the actual formatting routine. -;;; -bpb: .ascii "BSD 4.4" ; "OEM" name - .word 512 ; sector size - .byte 2 ; cluster size - .word 1 ; reserved sectors (just the boot sector) - .byte 2 ; FAT count - .word 112 ; # of entries in root dir - .word 1440 ; total number of sectors, MSDOS 3.3 or below - .byte 0xf9 ; "media descriptor" - .word 3 ; FAT size (sectors) - .word 9 ; sectors per track - .word 2 ; heads per cylinder - .word 0 ; hidden sectors - ;; MSDOS 4.0++ -- only valid iff total number of sectors == 0 - .word 0 ; unused - .long 0 ; total number of sectors - .short 0 ; physical drive (0, 1, ..., 0x80) %-) - .byte 0 ; "extented boot signature" - .long 0 ; volume serial number (i.e., garbage :) - .ascii " " ; label -- same as vol label in root dir - .ascii "FAT12 " ; file system ID -;;; -;;; Executable code starts here. -;;; -init: - ;; First, display our message. - mov si, *message -lp1: seg cs - movb al, [si] - inc si - testb al, al - jz lp2 ; null-terminated string - movb bl, *7 ; display with regular attribute - movb ah, *0x0e ; int 0x10, fnc 0x0e -- emulate tty - int 0x10 - jmp lp1 -lp2: xorb ah, ah ; int 0x16, fnc 0x00 -- wait for keystroke - int 0x16 - mov ax, *0x40 ; write 0x1234 to address 0x472 -- - push ax ; tell the BIOS that this is a warm boot - pop ds - mov 0x72, *0x1234 - int 0x19 ; jump to CPU initialization code - -message: - .byte 7 - .byte 0xc9 - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xbb, 13, 10, 0xba - .ascii " Sorry, this disc does actually not contain " - .byte 0xba, 13, 10, 0xba - .ascii " a bootable system. " - .byte 0xba, 13, 10, 0xba - .ascii " Press any key to reboot. " - .byte 0xba, 13, 10, 0xc8 - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xcd,0xcd,0xcd,0xcd,0xcd,0xcd - .byte 0xbc, 13,10 - .byte 0 - - ;; Adjust the value below after changing the length of - ;; the code above! - .space 0x1fe-0x15e ; pad to 512 bytes - - .byte 0x55, 0xaa ; yes, we are bootable (cheating :) - end diff --git a/usr.sbin/mkdosfs/bootcode.h b/usr.sbin/mkdosfs/bootcode.h deleted file mode 100644 index 70cd4b85f198..000000000000 --- a/usr.sbin/mkdosfs/bootcode.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef BOOTCODE_H -#define BOOTCODE_H 1 - -/* - * This file has been generated - * automatically. Do not edit. - */ - -static unsigned char bootcode[512] = { -0xeb, 0x3c, 0x90, 0x42, 0x53, 0x44, 0x20, 0x20, 0x34, 0x2e, 0x34, 0x00, -0x02, 0x02, 0x01, 0x00, 0x02, 0x70, 0x00, 0xa0, 0x05, 0xf9, 0x03, 0x00, -0x09, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, -0x20, 0x20, 0xbe, 0x62, 0x7c, 0x2e, 0x8a, 0x04, 0x46, 0x84, 0xc0, 0x74, -0x08, 0xb3, 0x07, 0xb4, 0x0e, 0xcd, 0x10, 0xeb, 0xf0, 0x30, 0xe4, 0xcd, -0x16, 0xb8, 0x40, 0x00, 0x50, 0x1f, 0xc7, 0x06, 0x72, 0x00, 0x34, 0x12, -0xcd, 0x19, 0x07, 0xc9, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xbb, 0x0d, 0x0a, 0xba, 0x20, 0x20, 0x53, 0x6f, 0x72, 0x72, -0x79, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x69, 0x73, 0x63, -0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, -0x6c, 0x79, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, -0x69, 0x6e, 0x20, 0x20, 0xba, 0x0d, 0x0a, 0xba, 0x20, 0x20, 0x61, 0x20, -0x62, 0x6f, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x79, 0x73, -0x74, 0x65, 0x6d, 0x2e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xba, 0x0d, 0x0a, 0xba, 0x20, 0x20, -0x50, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6b, 0x65, -0x79, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x2e, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xba, 0x0d, 0x0a, 0xc8, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, -0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xbc, 0x0d, -0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa, }; - -#endif /* BOOTCODE_H */ diff --git a/usr.sbin/mkdosfs/dosfs.h b/usr.sbin/mkdosfs/dosfs.h deleted file mode 100644 index 08afd4c76485..000000000000 --- a/usr.sbin/mkdosfs/dosfs.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 1995 Joerg Wunsch - * - * All rights reserved. - * - * This program is free software. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * MS-DOS (FAT) file system structure definitions. - * - * $Id$ - */ - -#ifndef DOSFS_H -#define DOSFS_H 1 - -typedef u_char Long[4]; -typedef u_char Short[2]; - -union bootsector -{ - unsigned char raw[512]; - struct bsec - { - u_char jump_boot[3]; /* jump code to boot-up partition */ - char oem_name[8]; /* OEM company name & version */ - Short sectsiz; /* bytes per sector */ - u_char clustsiz; /* sectors per cluster */ - Short ressecs; /* reserved sectors [before 1st FAT] */ - u_char fatcnt; /* # of FAT's */ - Short rootsiz; /* number of root dir entries */ - Short totsecs; /* total # of sectors */ - u_char media; /* media descriptor */ - Short fatsize; /* # of sectors per FAT */ - Short trksecs; /* sectors per track (cylinder) */ - Short headcnt; /* # of r/w heads */ - Short hidnsec; /* hidden sectors */ - union - { - /* case totsecs != 0: */ - /* This is a partition of MS-DOS 3.3 format (< 32 MB) */ - u_char bootprogram[480]; - - /* case totsecs == 0: */ - /* partition of MS-DOS 4.0+ format, or > 32 MB */ - struct - { - Short unused; - Long totsecs; /* total # of sectors, as a 32-bit */ - Short physdrv; /* physical drive # [0x80...] */ - u_char extboot; /* extended boot signature??? */ - Long serial; /* volume serial number */ - char label[11]; /* same as volume label in root dir */ - char fsysid[8]; /* some like `FAT16' */ - u_char bootprogram[448]; - } extended; - } variable_part; - u_char signature[2]; /* always {0x55, 0xaa} */ - } bsec; -}; - -struct fat -{ - u_char media; /* the media descriptor again */ - u_char padded; /* alway 0xff */ - u_char contents[1]; /* the `1' is a placeholder only */ -}; - -/* DOS file attributes */ -#define FA_RONLY 1 /* read/only */ -#define FA_HIDDEN 2 /* hidden */ -#define FA_SYSTEM 4 /* system */ -#define FA_VOLLABEL 8 /* this is the volume label */ -#define FA_SUBDIR 0x10 /* sub-directory */ -#define FA_ARCH 0x20 /* archive - file hasn't been backed up */ - -struct dosftime -{ - u_char time[2]; /* [0] & 0x1f - seconds div 2 - * ([1] & 7) * 8 + ([0] >> 5) - minutes - * [1] >> 3 - hours - */ - u_char date[2]; /* [0] & 0x1f - day - * ([1] & 1) * 8 + ([0] >> 5) - month - * [1] >> 1 - year - 1980 - */ -}; - -#define dosft_hour(dft) ((dft).time[1] >> 3) -#define dosft_minute(dft) (((dft).time[1] & 7) * 8 + ((dft).time[0] >> 5)) -#define dosft_second(dft) (((dft).time[0] & 0x1f) * 2) -#define dosft_year(dft) (((dft).date[1] >> 1) + 1980) -#define dosft_month(dft) (((dft).date[1] & 1) * 8 + ((dft).date[0] >> 5)) -#define dosft_day(dft) ((dft).date[0] & 0x1f) - - -struct direntry -{ - char name[8]; /* file name portion */ - char ext[3]; /* file extension */ - u_char attr; /* file attribute as above */ - char reserved[10]; - struct dosftime fdate; /* time created/last modified */ - Short startclstr; /* starting cluster number */ - Long filesiz; /* file size in bytes */ -}; - -/* handle endiannes: */ -#define s_to_little_s(dst, src) dst[0]=(src)&0xff; dst[1]=((src)&0xff00)>>8 -#define l_to_little_l(dst, src) \ -dst[0]=(src)&0xff; dst[1]=((src)&0xff00)>>8; \ -dst[2]=((src)&0xff0000)>>16; dst[3]=((src)&0xff000000)>>24 - -#endif /* DOSFS_H */ diff --git a/usr.sbin/mkdosfs/mkdosfs.1 b/usr.sbin/mkdosfs/mkdosfs.1 deleted file mode 100644 index 2714e56e9844..000000000000 --- a/usr.sbin/mkdosfs/mkdosfs.1 +++ /dev/null @@ -1,135 +0,0 @@ -.\" -.\" Copyright (c) 1995, 1996 Joerg Wunsch -.\" -.\" All rights reserved. -.\" -.\" This program is free software. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, -.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $Id: mkdosfs.1,v 1.5 1997/02/22 16:06:38 peter Exp $ -.\" -.Dd November 5, 1995 -.Os -.Dt MKDOSFS 1 -.Sh NAME -.Nm mkdosfs -.Nd create an MS-DOS (FAT) file system -.Sh SYNOPSIS -.Nm mkdosfs -.Bq Fl f Ar capacity -.Bq Fl L Ar vollabel -.Ar device -.Sh DESCRIPTION -.Nm Mkdosfs -establishes a file system structure on -.Ar device -that is understood by -.Xr mount_msdos -and some ancient program loader. -.Ar Device -will typically be the character device node for a floppy disk drive, -.Pq e.\ g. Pa /dev/rfd0 , -although any existing writable file or device is acceptable. In case -of a regular file it is treated as a dumped image of an MS-DOS file -system; only the file system structure will be written to it, and it -won't be truncated. -.Pp -The options are as follows: -.Bl -tag -width 10n -offset indent -.It Fl f Ar capacity -Use defaults for a typical file system with -.Ar capacity -kilobytes. Currently, the values 360, 720, 1200, and 1440 are -recognized. -.Pp -If this option is not specified, -.Nm -attempts to determine the size of the -.Ar device . -This is not reliably possible in all cases, but is believed to work -for the more common situations. -.It Fl L Ar vollabel -Use -.Ar vollabel -to describe the file system, instead of the default -.Ql 4.4BSD . -.El -.Pp -The file system structure consists of three major areas: -.Bl -tag -width 10n -offset indent -.It Em The bootsector -This is the very first (512-byte) sector. It contains executable -code that normally would bootstrap an operating system when loaded. -Since it's beyond the scope of -.Nm -to install an operating system on the medium, this boot code will only -print a message that the disk does not contain a bootable system. -Inside the -.Em bootsector -is the -.Em BIOS parameter block (BPB) , -where several statistical parameters of the file system are being -held. -.It Em The file allocation table(s) (FAT) -Sectors next to the -.Em bootsector -hold the FAT, which is used to register file system allocation, -as well as keeping pointer chains for the chunks constituting -one file. There are usually two identical copies of the FAT. -.It Em The root directory -The final structure is the root directory for this medium. It is -merely a space reservation, padded with 0's, and unfortunately fixed -in its size. -.Nm mkdosfs -initializes it to empty, and enters a volume label record into the -very first directory slot. -.Sh DIAGNOSTICS -An exit status of 0 is returned upon successful operation. Exit status -1 is returned on any errors during file system creation, and an exit status -of 2 reflects invalid arguments given to the program (along with an -appropriate information written to diagnostic output). -.Sh SEE ALSO -.Xr fdformat 1 , -.Xr mount_msdos 8 , -.Xr newfs 8 . -.Sh BUGS -There is currently no way to specify obscure file system parameters. -Thus, only media with one of the supported capacity values can be -formatted. For the same reason, it's not possible to handle hard disk -partitions. More options should be added to allow this. More entries -should be added to the table of known formats, too. -.Pp -No attempt is made to handle media defects. However, this is beyond -the scope of -.Nm mkdosfs -and should better be handled by the (nonexistent) -.Xr dosfsck 1 -utility. -.Sh HISTORY -.Nm Mkdosfs -appeared in -.Fx 2.2 . -.Sh AUTHORS -The program has been contributed by -.if n Joerg Wunsch, -.if t J\(:org Wunsch, -Dresden. diff --git a/usr.sbin/mkdosfs/mkdosfs.c b/usr.sbin/mkdosfs/mkdosfs.c deleted file mode 100644 index f52a29c4abdd..000000000000 --- a/usr.sbin/mkdosfs/mkdosfs.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c) 1995, 1996 Joerg Wunsch - * - * All rights reserved. - * - * This program is free software. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * Create an MS-DOS (FAT) file system. - */ - -#ifndef lint -static const char rcsid[] = - "$Id$"; -#endif /* not lint */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "bootcode.h" -#include "dosfs.h" - -struct descrip -{ - /* our database key */ - unsigned kilobytes; - /* MSDOS 3.3 BPB fields */ - u_short sectsiz; - u_char clustsiz; - u_short ressecs; - u_char fatcnt; - u_short rootsiz; - u_short totsecs; - u_char media; - u_short fatsize; - u_short trksecs; - u_short headcnt; - u_short hidnsec; - /* MSDOS 4 BPB extensions */ - u_long ext_totsecs; - u_short ext_physdrv; - u_char ext_extboot; - char ext_label[11]; - char ext_fsysid[8]; -}; - -static struct descrip -table[] = -{ - /* NB: must be sorted, starting with the largest format! */ - /* - * kilobytes - * sec cls res fat rot tot med fsz spt hds hid - * tot phs ebt label fsysid - */ - {1440, - 512, 1, 1, 2, 224, 2880, 0xf0, 9, 18, 2, 0, - 0, 0, 0, "4.4BSD ", "FAT12 "}, - {1200, - 512, 1, 1, 2, 224, 2400, 0xf9, 7, 15, 2, 0, - 0, 0, 0, "4.4BSD ", "FAT12 "}, - { 720, - 512, 2, 1, 2, 112, 1440, 0xf9, 3, 9, 2, 0, - 0, 0, 0, "4.4BSD ", "FAT12 "}, - { 360, - 512, 2, 1, 2, 112, 720, 0xfd, 2, 9, 2, 0, - 0, 0, 0, "4.4BSD ", "FAT12 "}, -}; - -static void -usage(void) -{ - fprintf(stderr, "usage: mkdosfs [-f kbytes] [-L label] device\n"); - exit(2); -} - -unsigned -findformat(int fd) -{ - struct stat sb; - - /* - * This is a bit tricky. If the argument is a regular file, we can - * lseek() to its end and get the size reported. If it's a device - * however, lseeking doesn't report us any useful number. Instead, - * we try to seek just to the end of the device and try reading a - * block there. In the case where we've hit exactly the device - * boundary, we get a zero read, and thus have found the size. - * Since our knowledge of distinct formats is limited anyway, this - * is not a big deal at all. - */ - - if(fstat(fd, &sb) == -1) - err(1, "huh? cannot fstat()"); /* Cannot happen */ - if(S_ISREG(sb.st_mode)) - { - off_t o; - if(lseek(fd, (off_t)0, SEEK_END) == -1 || - (o = lseek(fd, (off_t)0, SEEK_CUR)) == -1) - /* Hmm, hmm. Hard luck. */ - return 0; - return (int)(o / 1024); - } - else if(S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode)) - { - char b[512]; - int i, rv; - struct descrip *dp; - - for(i = 0, dp = table; - i < sizeof table / sizeof(struct descrip); - i++, dp++) - { - if(lseek(fd, (off_t)(dp->kilobytes * 1024), SEEK_SET) == 1) - /* Uh-oh, lseek() is not supposed to fail. */ - return 0; - if((rv = read(fd, b, 512)) == 0) - break; - /* XXX The ENOSPC is for the bogus fd(4) driver return value. */ - if(rv == -1 && errno != EINVAL && errno != ENOSPC) - return 0; - /* else: continue */ - } - if(i == sizeof table / sizeof(struct descrip)) - return 0; - (void)lseek(fd, (off_t)0, SEEK_SET); - return dp->kilobytes; - } - else - /* Outta luck. */ - return 0; -} - - -void -setup_boot_sector_from_template(union bootsector *bs, struct descrip *dp) -{ - memcpy((void *)bs->raw, (void *)bootcode, 512); - - /* historical part of BPB */ - s_to_little_s(bs->bsec.sectsiz, dp->sectsiz); - bs->bsec.clustsiz = dp->clustsiz; - s_to_little_s(bs->bsec.ressecs, dp->ressecs); - bs->bsec.fatcnt = dp->fatcnt; - s_to_little_s(bs->bsec.rootsiz, dp->rootsiz); - s_to_little_s(bs->bsec.totsecs, dp->totsecs); - bs->bsec.media = dp->media; - s_to_little_s(bs->bsec.fatsize, dp->fatsize); - s_to_little_s(bs->bsec.trksecs, dp->trksecs); - s_to_little_s(bs->bsec.headcnt, dp->headcnt); - s_to_little_s(bs->bsec.hidnsec, dp->hidnsec); - - /* MSDOS 4 extensions */ - l_to_little_l(bs->bsec.variable_part.extended.totsecs, dp->ext_totsecs); - s_to_little_s(bs->bsec.variable_part.extended.physdrv, dp->ext_physdrv); - bs->bsec.variable_part.extended.extboot = dp->ext_extboot; - - /* assign a "serial number" :) */ - srandom((unsigned)time((time_t)0)); - l_to_little_l(bs->bsec.variable_part.extended.serial, random()); - - memcpy((void *)bs->bsec.variable_part.extended.label, - (void *)dp->ext_label, 11); - memcpy((void *)bs->bsec.variable_part.extended.fsysid, - (void *)dp->ext_fsysid, 8); -} - -#define roundup(dst, limit) dst = (((dst) | ((limit) - 1)) & ~(limit)) + 1 - -int -main(int argc, char **argv) -{ - union bootsector bs; - struct descrip *dp; - struct fat *fat; - struct direntry *rootdir; - struct tm *tp; - time_t now; - - int c, i, fd, format = 0, rootdirsize; - const char *label = 0; - - while((c = getopt(argc, argv, "f:L:")) != -1) - switch(c) - { - case 'f': - format = atoi(optarg); - break; - - case 'L': - label = optarg; - break; - - case '?': - default: - usage(); - } - argc -= optind; - argv += optind; - - if(argc != 1) - usage(); - - if((fd = open(argv[0], O_RDWR|O_EXCL, 0)) == -1) - err(1, "open(%s)", argv[0]); - - if(format == 0) - { - /* - * No format specified, try to figure it out. - */ - if((format = findformat(fd)) == 0) - errx(1, "cannot determine size, must use -f format"); - } - - for(i = 0, dp = table; i < sizeof table / sizeof(struct descrip); i++, dp++) - if(dp->kilobytes == format) - break; - if(i == sizeof table / sizeof(struct descrip)) - errx(1, "cannot find format description for %d KB", format); - - /* prepare and write the boot sector */ - setup_boot_sector_from_template(&bs, dp); - - /* if we've got an explicit label, use it */ - if(label) - strncpy(bs.bsec.variable_part.extended.label, label, 11); - - if(write(fd, (char *)bs.raw, sizeof bs) != sizeof bs) - err(1, "boot sector write()"); - - /* now, go on with the FATs */ - if((fat = (struct fat *)malloc(dp->sectsiz * dp->fatsize)) == 0) - abort(); - memset((void *)fat, 0, dp->sectsiz * dp->fatsize); - - fat->media = dp->media; - fat->padded = 0xff; - fat->contents[0] = 0xff; - if(dp->totsecs > 20740 || (dp->totsecs == 0 && dp->ext_totsecs > 20740)) - /* 16-bit FAT */ - fat->contents[1] = 0xff; - - for(i = 0; i < dp->fatcnt; i++) - if(write(fd, (char *)fat, dp->sectsiz * dp->fatsize) - != dp->sectsiz * dp->fatsize) - err(1, "FAT write()"); - - free((void *)fat); - - /* finally, build the root dir */ - rootdirsize = dp->rootsiz * sizeof(struct direntry); - roundup(rootdirsize, dp->clustsiz * dp->sectsiz); - - if((rootdir = (struct direntry *)malloc(rootdirsize)) == 0) - abort(); - memset((void *)fat, 0, rootdirsize); - - /* set up a volume label inside the root dir :) */ - if(label) - strncpy(rootdir[0].name, label, 11); - else - memcpy(rootdir[0].name, dp->ext_label, 11); - rootdir[0].attr = FA_VOLLABEL; - now = time((time_t)0); - tp = localtime(&now); - rootdir[0].fdate.time[0] = tp->tm_sec / 2; - rootdir[0].fdate.time[0] |= (tp->tm_min & 7) << 5; - rootdir[0].fdate.time[1] = ((tp->tm_min >> 3) & 7); - rootdir[0].fdate.time[1] |= tp->tm_hour << 3; - rootdir[0].fdate.date[0] = tp->tm_mday; - rootdir[0].fdate.date[0] |= ((tp->tm_mon + 1) & 7) << 5; - rootdir[0].fdate.date[1] = ((tp->tm_mon + 1) >> 3) & 1; - rootdir[0].fdate.date[1] |= (tp->tm_year - 80) << 1; - - if(write(fd, (char *)rootdir, rootdirsize) != rootdirsize) - err(1, "root dir write()"); - - (void)close(fd); - - return 0; -} -