]> git.saurik.com Git - apple/hfs.git/blobdiff - CopyHFSMeta/DeviceWrapper.c
hfs-407.1.3.tar.gz
[apple/hfs.git] / CopyHFSMeta / DeviceWrapper.c
index e9bf6be2147d7438439aa579ce85c5fa7456d80b..74dd4b606fe05d1945d6f19b2789bd9f6bfb9b9a 100644 (file)
@@ -96,7 +96,7 @@ SetProgress(struct IOWrapper *context, off_t progr)
 struct IOWrapper *
 InitDeviceWrapper(const char *path, DeviceInfo_t *devp)
 {
-       struct DeviceWrapperContext ctx = { 0 };
+       struct DeviceWrapperContext ctx = { .fd = -1 };
        struct DeviceWrapperContext *retctx = NULL;
        IOWrapper_t *retval = NULL;
        struct stat sb;
@@ -119,8 +119,6 @@ InitDeviceWrapper(const char *path, DeviceInfo_t *devp)
                goto done;
        }
 
-       ctx.pathname = strdup(rawname);
-
        ctx.fd = open(rawname, O_RDWR);
        if (ctx.fd == -1) {
                warn("Cannot open device %s for reading and writing", rawname);
@@ -161,5 +159,12 @@ InitDeviceWrapper(const char *path, DeviceInfo_t *devp)
        retval->cleanup = &noClean;
 
 done:
+       if (!retval) {
+               free(ctx.pathname);
+               free(retctx);
+               if (ctx.fd >= 0)
+                       close(ctx.fd);
+       }
+
        return retval;
 }