Create a fake geometry (16 heads, 64 sectors) when dealing with
a plain file and a geometry is not explicitly supplied through command line or disktab entry. This way you can a FAT image on a file as simply as this: newfs_msdos ./some/file (right now you need a much longer command newfs_msdos -h 32 -u 64 -S 512 -s $total_blocks -o 0 ./some/file Will be merged after 7.1 and 6.4 are released. See also the related PR which suggests a similar change. PR: bin/121182 MFC after: 4 weeks
This commit is contained in:
parent
0206cdb846
commit
045651ec1e
@ -725,9 +725,20 @@ getdiskinfo(int fd, const char *fname, const char *dtype, __unused int oflag,
|
||||
|
||||
/* Maybe it's a floppy drive */
|
||||
if (lp == NULL) {
|
||||
if (ioctl(fd, DIOCGMEDIASIZE, &ms) == -1)
|
||||
errx(1, "Cannot get disk size, %s", strerror(errno));
|
||||
if (ioctl(fd, FD_GTYPE, &type) != -1) {
|
||||
if (ioctl(fd, DIOCGMEDIASIZE, &ms) == -1) {
|
||||
struct stat st;
|
||||
|
||||
bzero(&st, sizeof(st));
|
||||
if (fstat(fd, &st))
|
||||
err(1, "Cannot get disk size");
|
||||
/* create a fake geometry for a file image */
|
||||
ms = st.st_size;
|
||||
dlp.d_secsize = 512;
|
||||
dlp.d_nsectors = 64;
|
||||
dlp.d_ntracks = 32;
|
||||
dlp.d_secperunit = ms / dlp.d_secsize;
|
||||
lp = &dlp;
|
||||
} else if (ioctl(fd, FD_GTYPE, &type) != -1) {
|
||||
dlp.d_secsize = 128 << type.secsize;
|
||||
dlp.d_nsectors = type.sectrac;
|
||||
dlp.d_ntracks = type.heads;
|
||||
|
Loading…
Reference in New Issue
Block a user