When editing a disk image, fdisk wants to ask the kernel to reread the
partition table which is useless and provokes an error, a wrong exit
code and some waiting. This annoys me as I can't check the return code
in my script and because I have to wait a few seconds each time.

This trivial patch makes it only do the ioctl on block devices.

diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c
index dac14c2..2db6d27 100644
--- a/fdisk/fdisk.c
+++ b/fdisk/fdisk.c
@@ -2250,30 +2250,35 @@ void
 reread_partition_table(int leave) {
        int error = 0;
        int i;
+       struct stat statbuf;
 
-       printf(_("Calling ioctl() to re-read partition table.\n"));
-       sync();
-       sleep(2);
-       if ((i = ioctl(fd, BLKRRPART)) != 0) {
-                error = errno;
-        } else {
-                /* some kernel versions (1.2.x) seem to have trouble
-                   rereading the partition table, but if asked to do it
-                  twice, the second time works. - [EMAIL PROTECTED] */
-                sync();
-                sleep(2);
-                if ((i = ioctl(fd, BLKRRPART)) != 0)
-                        error = errno;
-        }
+       fstat(fd, &statbuf);
 
-       if (i) {
-               printf(_("\nWARNING: Re-reading the partition table "
-                        "failed with error %d: %s.\n"
-                        "The kernel still uses the old table.\n"
-                        "The new table will be used "
-                        "at the next reboot.\n"),
-                       error, strerror(error));
-       }
+       if(S_ISBLK(statbuf.st_mode)) { /* block device */
+               printf(_("Calling ioctl() to re-read partition table.\n"));
+               sync();
+               sleep(2);
+               if ((i = ioctl(fd, BLKRRPART)) != 0) {
+                       error = errno;
+               } else {
+                       /* some kernel versions (1.2.x) seem to have trouble
+                          rereading the partition table, but if asked to do it
+                          twice, the second time works. - [EMAIL PROTECTED] */
+                       sync();
+                       sleep(2);
+                       if ((i = ioctl(fd, BLKRRPART)) != 0)
+                               error = errno;
+               }
+
+               if (i) {
+                       printf(_("\nWARNING: Re-reading the partition table "
+                                "failed with error %d: %s.\n"
+                                "The kernel still uses the old table.\n"
+                                "The new table will be used "
+                                "at the next reboot.\n"),
+                               error, strerror(error));
+               }
+       } /* block device */
 
        if (dos_changed)
            printf(

-
To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to