/* * Deletes loop device */ int mnt_context_delete_loopdev(struct libmnt_context *cxt) { const char *src; int rc; assert(cxt); assert(cxt->fs); if (!cxt) return -EINVAL; src = mnt_fs_get_srcpath(cxt->fs); if (!src) return -EINVAL; if (cxt->loopdev_fd > -1) close(cxt->loopdev_fd); rc = loopdev_delete(src); cxt->flags &= ~MNT_FL_LOOPDEV_READY; cxt->loopdev_fd = -1; DBG(CXT, ul_debugobj(cxt, "loopdev deleted [rc=%d]", rc)); return rc; }
int main(int argc, char *argv[]) { int dbg; if (argc < 2) goto usage; dbg = getenv("LOOPDEV_DEBUG") == NULL ? 0 : 1; if (argc == 3 && strcmp(argv[1], "--info") == 0) { printf("---sysfs & ioctl:---\n"); test_loop_info(argv[2], 0, dbg); printf("---sysfs only:---\n"); test_loop_info(argv[2], LOOPDEV_FL_NOIOCTL, dbg); printf("---ioctl only:---\n"); test_loop_info(argv[2], LOOPDEV_FL_NOSYSFS, dbg); } else if (argc == 2 && strcmp(argv[1], "--used") == 0) { printf("---all used devices---\n"); test_loop_scan(LOOPITER_FL_USED, dbg); } else if (argc == 2 && strcmp(argv[1], "--free") == 0) { printf("---all free devices---\n"); test_loop_scan(LOOPITER_FL_FREE, dbg); } else if (argc >= 3 && strcmp(argv[1], "--setup") == 0) { test_loop_setup(argv[2], argv[3], dbg); } else if (argc == 3 && strcmp(argv[1], "--delete") == 0) { if (loopdev_delete(argv[2])) errx(EXIT_FAILURE, "failed to deinitialize device %s", argv[2]); } else goto usage; return EXIT_SUCCESS; usage: errx(EXIT_FAILURE, "usage: \n" " %1$s --info <device>\n" " %1$s --free\n" " %1$s --used\n" " %1$s --setup <filename> [<device>]\n" " %1$s --delete\n", argv[0]); }