diff --git a/ntfsprogs/ntfsfix.c b/ntfsprogs/ntfsfix.c index 0c114327..587e8e24 100644 --- a/ntfsprogs/ntfsfix.c +++ b/ntfsprogs/ntfsfix.c @@ -56,6 +56,7 @@ #include "attrib.h" #include "mft.h" #include "disk_io.h" +#include "device.h" #include "logfile.h" /** @@ -69,6 +70,7 @@ int main(int argc, char **argv) const char *FAILED = "FAILED"; unsigned char *m = NULL, *m2 = NULL; ntfs_volume *vol; + struct ntfs_device *dev; unsigned long mnt_flags; int i; u16 flags; @@ -122,13 +124,21 @@ int main(int argc, char **argv) } puts(FAILED); - puts("Attempting to correct errors."); + printf("Attempting to correct errors... "); - vol = ntfs_volume_startup(argv[1], 0); + dev = ntfs_device_alloc(argv[1], 0, &ntfs_device_disk_io_ops, NULL); + if (!dev) { + puts(FAILED); + perror("Failed to allocate device"); + goto error_exit; + } + + vol = ntfs_volume_startup(dev, 0); if (!vol) { puts(FAILED); perror("Failed to startup volume"); fprintf(stderr, "Volume is corrupt. You should run chkdsk."); + ntfs_device_free(dev); goto error_exit; } @@ -245,6 +255,7 @@ int main(int argc, char **argv) m = m2 = NULL; printf("Processing of $MFT and $MFTMirr completed successfully.\n\n"); + /* ntfs_umount() will invoke ntfs_device_free() for us. */ if (ntfs_umount(vol, 0)) ntfs_umount(vol, 1); vol = ntfs_mount(argv[1], 0); @@ -300,7 +311,7 @@ mount_ok: /* That's all for now! */ printf("NTFS partition %s was processed successfully.\n", - vol->dev_name); + vol->dev->d_name); /* Set return code to 0. */ i = 0; final_exit: diff --git a/ntfsprogs/ntfstruncate.c b/ntfsprogs/ntfstruncate.c index 409f17a7..db3ec59b 100644 --- a/ntfsprogs/ntfstruncate.c +++ b/ntfsprogs/ntfstruncate.c @@ -42,7 +42,6 @@ #ifdef HAVE_ERRNO_H # include #endif -#include #include #ifdef HAVE_GETOPT_H # include @@ -80,8 +79,6 @@ ntfs_volume *vol; ntfs_inode *ni; ntfs_attr *na = NULL; -struct flock flk; - ATTR_DEF *attr_defs; struct { @@ -701,12 +698,6 @@ void ntfstruncate_exit(void) fprintf(stderr, "Warning: Failed to close inode %Li: %s\n", (long long)inode, strerror(errno)); } - /* Unlock the device. */ - flk.l_type = F_UNLCK; - err = fcntl(vol->fd, F_SETLK, &flk); - if (err == -1) - fprintf(stderr, "Warning: Could not unlock %s: %s\n", dev_name, - strerror(errno)); /* Unmount the volume. */ err = ntfs_umount(vol, 0); if (err == -1) @@ -761,26 +752,6 @@ int main(int argc, char **argv) if (!vol) err_exit("Failed to mount %s: %s\n", dev_name, strerror(errno)); - /* Acquire exlusive (mandatory) lock on the whole device. */ - memset(&flk, 0, sizeof(flk)); - if (opts.no_action) - flk.l_type = F_RDLCK; - else - flk.l_type = F_WRLCK; - flk.l_whence = SEEK_SET; - flk.l_start = flk.l_len = 0LL; - err = fcntl(vol->fd, F_SETLK, &flk); - if (err == -1) { - Eprintf("Could not lock %s for %s: %s\n", dev_name, - opts.no_action ? "reading" : "writing", - strerror(errno)); - err = ntfs_umount(vol, 0); - if (err == -1) - Eprintf("Warning: Could not umount %s: %s\n", - dev_name, strerror(errno)); - exit(1); - } - /* Register our exit function which will unlock and close the device. */ err = atexit(&ntfstruncate_exit); if (err == -1) { @@ -830,13 +801,6 @@ int main(int argc, char **argv) err_exit("Failed to close inode %Li: %s\n", (long long)inode, strerror(errno)); - /* Unlock the device. */ - flk.l_type = F_UNLCK; - err = fcntl(vol->fd, F_SETLK, &flk); - if (err == -1) - fprintf(stderr, "Warning: Failed to unlock %s: %s\n", dev_name, - strerror(errno)); - /* Unmount the volume. */ err = ntfs_umount(vol, 0); if (err == -1)