Author: luigi
Date: Wed Nov 26 21:05:03 2008
New Revision: 185345
URL: http://svn.freebsd.org/changeset/base/185345

Log:
  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

Modified:
  head/sbin/newfs_msdos/newfs_msdos.c

Modified: head/sbin/newfs_msdos/newfs_msdos.c
==============================================================================
--- head/sbin/newfs_msdos/newfs_msdos.c Wed Nov 26 20:52:26 2008        
(r185344)
+++ head/sbin/newfs_msdos/newfs_msdos.c Wed Nov 26 21:05:03 2008        
(r185345)
@@ -725,9 +725,20 @@ getdiskinfo(int fd, const char *fname, c
 
     /* 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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to