Ejemplo n.º 1
0
static
int ploop_get_spec_path(const char *dd_path, struct ploop_spec *spec)
{
	struct ploop_disk_images_data *di;
	int rc;

	if ((rc = ploop_open_dd(&di, dd_path))) {
		rc = putErr(MIG_ERR_PLOOP, "ploop_read_diskdescriptor(%s) : %s [%d]",
				dd_path, ploop_get_last_error(), rc);
		goto cleanup;
	}
	memset((void *)spec, 0, sizeof(*spec));
	if ((rc = ploop_get_spec(di, spec))) {
		rc = putErr(MIG_ERR_PLOOP,
			"ploop_get_spec() : %s [%d]", ploop_get_last_error(), rc);
		goto cleanup;
	}

cleanup:
	if (di != NULL)
		ploop_close_dd(di);

	return rc;
}
Ejemplo n.º 2
0
static int plooptool_info(int argc, char **argv)
{
	int ret, i;
	int spec = 0;
	int device = 0;
	struct ploop_info info = {};

	while ((i = getopt(argc, argv, "sd")) != EOF) {
		switch (i) {
		case 's':
			spec = 1;
			break;
		case 'd':
			device = 1;
			break;
		default:
			usage_info();
			return SYSEXIT_PARAM;
		}
	}

	argc -= optind;
	argv += optind;

	if (argc != 1 || !is_xml_fname(argv[0])) {
		usage_info();
		return SYSEXIT_PARAM;
	}

	if (spec || device) {
		struct ploop_disk_images_data *di;

		ret = ploop_open_dd(&di, argv[0]);
		if (ret)
			return ret;

		if (spec) {
			struct ploop_spec spec = {};

			ret = ploop_get_spec(di, &spec);
			if (ret)
				goto exit;

			printf("size:\t\t%llu\nblocksize:\t%d\nfmt_version:\t%d\n",
					(unsigned long long)spec.size,
					spec.blocksize,
					spec.fmt_version);
		}

		if (device) {
			char dev[PATH_MAX] = {};

			if (ploop_get_dev(di, dev, sizeof(dev)) == -1) {
				ret = SYSEXIT_SYS;
				goto exit;
			}

			printf("device:\t\t%s\n", dev);
		}

exit:
		ploop_close_dd(di);
	} else {
		ret = ploop_get_info_by_descr(argv[0], &info);
		if (ret == 0)
			print_info(&info);
	}

	return ret;
}