亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vhd-util-read.c

?? xen source 推出最新的VHD操作工具VHD-UTIL 實現源碼,超強
?? C
?? 第 1 頁 / 共 2 頁
字號:
	for (i = 0; i < count; i++) {
		cur    = block + i;
		offset = vhd->bat.bat[cur];

		printf("block: %s: ", conv(hex, cur));
		printf("offset: %s\n",
		       (offset == DD_BLK_UNUSED ? "not allocated" :
			conv(hex, vhd_sectors_to_bytes(offset))));
	}

	return 0;
}

static int
vhd_print_bitmap(vhd_context_t *vhd, uint64_t block, int count, int hex)
{
	char *buf;
	int i, err;
	uint64_t cur;

	if (check_block_range(vhd, block + count, hex))
		return -ERANGE;

	for (i = 0; i < count; i++) {
		cur = block + i;

		if (vhd->bat.bat[cur] == DD_BLK_UNUSED) {
			printf("block %s not allocated\n", conv(hex, cur));
			continue;
		}

		err = vhd_read_bitmap(vhd, cur, &buf);
		if (err)
			goto out;

		write(STDOUT_FILENO, buf, vhd_sectors_to_bytes(vhd->bm_secs));
		free(buf);
	}

	err = 0;
out:
	return err;
}

static int
vhd_test_bitmap(vhd_context_t *vhd, uint64_t sector, int count, int hex)
{
	char *buf;
	uint64_t cur;
	int i, err, bit;
	uint32_t blk, bm_blk, sec;

	if (vhd_sectors_to_bytes(sector + count) > vhd->footer.curr_size) {
		printf("sector %s past end of file\n", conv(hex, sector));
		return -ERANGE;
	}

	bm_blk = -1;
	buf    = NULL;

	for (i = 0; i < count; i++) {
		cur = sector + i;
		blk = cur / vhd->spb;
		sec = cur % vhd->spb;

		if (blk != bm_blk) {
			bm_blk = blk;
			free(buf);
			buf = NULL;

			if (vhd->bat.bat[blk] != DD_BLK_UNUSED) {
				err = vhd_read_bitmap(vhd, blk, &buf);
				if (err)
					goto out;
			}
		}

		if (vhd->bat.bat[blk] == DD_BLK_UNUSED)
			bit = 0;
		else
			bit = vhd_bitmap_test(vhd, buf, blk);

	print:
		printf("block %s: ", conv(hex, blk));
		printf("sec: %s: %d\n", conv(hex, sec), bit);
	}

	err = 0;
 out:
	free(buf);
	return err;
}

static int
vhd_print_batmap(vhd_context_t *vhd)
{
	int err;
	size_t size;

	err = vhd_get_batmap(vhd);
	if (err) {
		printf("failed to read batmap: %d\n", err);
		return err;
	}

	size = vhd_sectors_to_bytes(vhd->batmap.header.batmap_size);
	write(STDOUT_FILENO, vhd->batmap.map, size);

	return 0;
}

static int
vhd_test_batmap(vhd_context_t *vhd, uint64_t block, int count, int hex)
{
	int i, err;
	uint64_t cur;

	if (check_block_range(vhd, block + count, hex))
		return -ERANGE;

	err = vhd_get_batmap(vhd);
	if (err) {
		fprintf(stderr, "failed to get batmap\n");
		return err;
	}

	for (i = 0; i < count; i++) {
		cur = block + i;
		fprintf(stderr, "batmap for block %s: %d\n", conv(hex, cur),
			vhd_batmap_test(vhd, &vhd->batmap, cur));
	}

	return 0;
}

static int
vhd_print_data(vhd_context_t *vhd, uint64_t block, int count, int hex)
{
	char *buf;
	int i, err;
	uint64_t cur;

	err = 0;

	if (check_block_range(vhd, block + count, hex))
		return -ERANGE;

	for (i = 0; i < count; i++) {
		cur = block + i;

		if (vhd->bat.bat[cur] == DD_BLK_UNUSED) {
			printf("block %s not allocated\n", conv(hex, cur));
			continue;
		}

		err = vhd_read_block(vhd, cur, &buf);
		if (err)
			break;

		write(STDOUT_FILENO, buf, vhd->header.block_size);
		free(buf);
	}

	return err;
}

static int
vhd_read_data(vhd_context_t *vhd, uint64_t sec, int count, int hex)
{
	char *buf;
	uint64_t cur;
	int err, max, secs;

	if (vhd_sectors_to_bytes(sec + count) > vhd->footer.curr_size)
		return -ERANGE;

	max = MIN(vhd_sectors_to_bytes(count), VHD_BLOCK_SIZE);
	err = posix_memalign((void **)&buf, VHD_SECTOR_SIZE, max);
	if (err)
		return -err;

	cur = sec;
	while (count) {
		secs = MIN((max >> VHD_SECTOR_SHIFT), count);
		err  = vhd_io_read(vhd, buf, cur, secs);
		if (err)
			break;

		write(STDOUT_FILENO, buf, vhd_sectors_to_bytes(secs));

		cur   += secs;
		count -= secs;
	}

	free(buf);
	return err;
}

int
vhd_util_read(int argc, char **argv)
{
	char *name;
	vhd_context_t vhd;
	int c, err, headers, hex;
	uint64_t bat, bitmap, tbitmap, batmap, tbatmap, data, lsec, count, read;

	err     = 0;
	hex     = 0;
	headers = 0;
	count   = 1;
	bat     = -1;
	bitmap  = -1;
	tbitmap = -1;
	batmap  = -1;
	tbatmap = -1;
	data    = -1;
	lsec    = -1;
	read    = -1;
	name    = NULL;

	if (!argc || !argv)
		goto usage;

	optind = 0;
	while ((c = getopt(argc, argv, "n:pt:b:m:i:aj:d:c:r:xh")) != -1) {
		switch(c) {
		case 'n':
			name = optarg;
			break;
		case 'p':
			headers = 1;
			break;
		case 't':
			lsec = strtoul(optarg, NULL, 10);
			break;
		case 'b':
			bat = strtoull(optarg, NULL, 10);
			break;
		case 'm':
			bitmap = strtoull(optarg, NULL, 10);
			break;
		case 'i':
			tbitmap = strtoul(optarg, NULL, 10);
			break;
		case 'a':
			batmap = 1;
			break;
		case 'j':
			tbatmap = strtoull(optarg, NULL, 10);
			break;
		case 'd':
			data = strtoull(optarg, NULL, 10);
			break;
		case 'r':
			read = strtoull(optarg, NULL, 10);
			break;
		case 'c':
			count = strtoul(optarg, NULL, 10);
			break;
		case 'x':
			hex = 1;
			break;
		case 'h':
		default:
			goto usage;
		}
	}

	if (!name || optind != argc)
		goto usage;

	err = vhd_open(&vhd, name, VHD_OPEN_RDONLY | VHD_OPEN_IGNORE_DISABLED);
	if (err) {
		printf("Failed to open %s: %d\n", name, err);
		vhd_dump_headers(name, hex);
		return err;
	}

	err = vhd_get_bat(&vhd);
	if (err) {
		printf("Failed to get bat for %s: %d\n", name, err);
		goto out;
	}

	if (headers)
		vhd_print_headers(&vhd, hex);

	if (lsec != -1) {
		err = vhd_print_logical_to_physical(&vhd, lsec, count, hex);
		if (err)
			goto out;
	}

	if (bat != -1) {
		err = vhd_print_bat(&vhd, bat, count, hex);
		if (err)
			goto out;
	}

	if (bitmap != -1) {
		err = vhd_print_bitmap(&vhd, bitmap, count, hex);
		if (err)
			goto out;
	}

	if (tbitmap != -1) {
		err = vhd_test_bitmap(&vhd, tbitmap, count, hex);
		if (err)
			goto out;
	}

	if (batmap != -1) {
		err = vhd_print_batmap(&vhd);
		if (err)
			goto out;
	}

	if (tbatmap != -1) {
		err = vhd_test_batmap(&vhd, tbatmap, count, hex);
		if (err)
			goto out;
	}

	if (data != -1) {
		err = vhd_print_data(&vhd, data, count, hex);
		if (err)
			goto out;
	}

	if (read != -1) {
		err = vhd_read_data(&vhd, read, count, hex);
		if (err)
			goto out;
	}

	err = 0;

 out:
	vhd_close(&vhd);
	return err;

 usage:
	printf("options:\n"
	       "-h          help\n"
	       "-n          name\n"
	       "-p          print VHD headers\n"
	       "-t sec      translate logical sector to VHD location\n"
	       "-b blk      print bat entry\n"
	       "-m blk      print bitmap\n"
	       "-i sec      test bitmap for logical sector\n"
	       "-a          print batmap\n"
	       "-j blk      test batmap for block\n"
	       "-d blk      print data\n"
	       "-c num      num units\n"
	       "-r sec      read num sectors at sec\n"
	       "-x          print in hex\n");
	return EINVAL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av福利| 久久亚洲精品小早川怜子| 日韩精品国产精品| 精品国产精品一区二区夜夜嗨| 亚洲第一精品在线| 日韩一二三四区| 国产乱人伦偷精品视频免下载| 久久综合色之久久综合| 国产精品一区二区不卡| 国产精品乱人伦一区二区| 色综合天天做天天爱| 亚洲成人自拍一区| 2021国产精品久久精品| 91亚洲国产成人精品一区二区三| 一区二区三区中文字幕在线观看| 777奇米成人网| zzijzzij亚洲日本少妇熟睡| 天天做天天摸天天爽国产一区| 欧美va天堂va视频va在线| av资源站一区| 国产成人精品免费网站| 国产精品白丝在线| 日韩精品一区二区三区在线播放| 国产精品自产自拍| 五月婷婷激情综合网| 亚洲私人黄色宅男| 久久人人爽爽爽人久久久| 色综合天天综合网国产成人综合天| 日本伊人精品一区二区三区观看方式| 国产网站一区二区| 欧美一区二区三区思思人| 色av综合在线| 色综合天天综合狠狠| 国产电影一区二区三区| 麻豆精品视频在线观看视频| 一区二区三区加勒比av| 国产精品理论片| 日本一区二区三区视频视频| 精品区一区二区| 日韩午夜在线影院| 日韩一区二区三区精品视频| 91国偷自产一区二区三区观看 | 国产午夜精品一区二区三区视频| 欧美三级电影精品| 精品视频123区在线观看| 在线观看三级视频欧美| 欧美午夜精品久久久久久孕妇| 91麻豆免费看片| 在线观看亚洲a| 精品美女一区二区三区| 欧美日韩国产电影| 欧美一区二区三区电影| 精品不卡在线视频| 久久精品人人爽人人爽| 自拍偷拍亚洲欧美日韩| 一区二区三区高清在线| 日韩精品欧美精品| 成人免费视频网站在线观看| 99久久综合色| 欧美精品v国产精品v日韩精品| 日韩一区二区三区免费看 | 这里是久久伊人| 日本一区二区视频在线| 日韩国产高清在线| 亚洲成av人**亚洲成av**| 亚洲国产高清在线| 日韩精品一区二区三区四区| 国产精品剧情在线亚洲| 国产一区三区三区| 中文字幕一区二区三区精华液| 亚洲欧洲日韩女同| 日日夜夜免费精品视频| jiyouzz国产精品久久| 日韩视频在线你懂得| 亚洲老妇xxxxxx| 国产精品一级在线| 制服丝袜成人动漫| 亚洲免费伊人电影| 国产精品亚洲а∨天堂免在线| 这里是久久伊人| 亚洲三级在线观看| 99视频国产精品| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲品质自拍视频网站| 狠狠色丁香久久婷婷综| 欧美久久久久免费| 亚洲午夜精品17c| 欧美日韩中文国产| 国产精品久久毛片a| 成人18精品视频| 日本一区二区成人在线| 麻豆久久久久久| 欧美大肚乱孕交hd孕妇| 久久精品国产久精国产| 精品国免费一区二区三区| 亚洲乱码精品一二三四区日韩在线| 精品一区免费av| 精品国产成人系列| 国产成a人无v码亚洲福利| 亚洲伦理在线免费看| 制服丝袜中文字幕一区| 国产精品一区三区| 亚洲成人精品在线观看| 久久老女人爱爱| 欧美探花视频资源| 国产盗摄精品一区二区三区在线 | 一本久久综合亚洲鲁鲁五月天| 综合欧美亚洲日本| 欧美视频中文一区二区三区在线观看| 亚洲欧美激情插| 日韩一区二区三区电影| 成人永久免费视频| 亚洲国产成人tv| 精品成人在线观看| 欧美亚洲综合久久| 国产综合色精品一区二区三区| 国产精品麻豆99久久久久久| 色8久久精品久久久久久蜜| 久久精品国产久精国产| 亚洲免费成人av| 国产亚洲欧洲997久久综合| 91精品办公室少妇高潮对白| 久草热8精品视频在线观看| 中文字幕综合网| 欧美一区日韩一区| 在线国产亚洲欧美| 色综合久久88色综合天天| 国产精品一区二区三区乱码| 亚洲国产视频一区二区| 国产精品乱码人人做人人爱| 日韩欧美国产成人一区二区| 欧美日韩黄色一区二区| 成人黄色一级视频| 国产精品99精品久久免费| 国内一区二区视频| 激情久久久久久久久久久久久久久久| 水野朝阳av一区二区三区| 一区二区三区成人| 亚洲精品国产精品乱码不99 | √…a在线天堂一区| 欧美国产激情二区三区 | 日韩欧美一级二级三级| 欧美一区二区精美| 亚洲精品在线免费播放| 91精品国产全国免费观看| 91麻豆精品国产91久久久久久久久 | 亚洲午夜久久久久中文字幕久| 18涩涩午夜精品.www| 亚洲美女屁股眼交3| 亚洲午夜激情av| 男女性色大片免费观看一区二区| 日韩av在线播放中文字幕| 狠狠色综合日日| 99视频精品在线| 欧美挠脚心视频网站| 欧美精品一区二区在线观看| 国产精品久久久久久久久久久免费看 | 久久久国产精品午夜一区ai换脸| 精品久久久久久久久久久久久久久久久| 欧美一区二区三区小说| 欧美成人综合网站| 国产精品日韩精品欧美在线| 亚洲少妇最新在线视频| 午夜精品福利一区二区三区蜜桃| 久久er99热精品一区二区| 成人免费av资源| 日韩美女一区二区三区| 亚洲精品中文在线影院| 爽好久久久欧美精品| 99热99精品| 久久久91精品国产一区二区精品 | 韩国成人福利片在线播放| 蜜臀国产一区二区三区在线播放| 国产一区欧美一区| 欧美视频日韩视频| 国产精品久久久久aaaa樱花 | 日本欧洲一区二区| 国产精品1区2区| 91精品国产91热久久久做人人| 综合av第一页| 成人精品视频一区二区三区| 91精品久久久久久久99蜜桃| 夜夜操天天操亚洲| 91论坛在线播放| 国产精品网曝门| 成人黄色网址在线观看| 国产亚洲精品资源在线26u| 激情图片小说一区| 久久久久久久久久看片| 国产永久精品大片wwwapp| 久久久久国产精品麻豆 | ...av二区三区久久精品| 国产盗摄女厕一区二区三区 | 欧美日韩视频一区二区| 亚洲一区成人在线| 国产精品18久久久久久久久久久久| 69av一区二区三区| 国产真实乱子伦精品视频| 精品国产91亚洲一区二区三区婷婷| 久久99精品久久久久久国产越南 |