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

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

?? libvhd-journal.c

?? xen source 推出最新的VHD操作工具VHD-UTIL 實現源碼,超強
?? C
?? 第 1 頁 / 共 2 頁
字號:

fail:
	if (_locators) {
		for (n = 0; n < _locs; n++)
			free(_locators[n]);
		free(_locators);
	}
	return err;
}

static int
vhd_journal_read_bat(vhd_journal_t *j, vhd_bat_t *bat)
{
	int err;
	size_t size;
	vhd_context_t *vhd;
	vhd_journal_entry_t entry;

	vhd  = &j->vhd;

	size = vhd_bytes_padded(vhd->header.max_bat_size * sizeof(uint32_t));

	err  = vhd_journal_read_entry(j, &entry);
	if (err)
		return err;

	if (entry.type != VHD_JOURNAL_ENTRY_TYPE_BAT)
		return -EINVAL;

	if (entry.size != size)
		return -EINVAL;

	if (entry.offset != vhd->header.table_offset)
		return -EINVAL;

	err = posix_memalign((void **)&bat->bat, VHD_SECTOR_SIZE, size);
	if (err)
		return -err;

	err = vhd_journal_read(j, bat->bat, entry.size);
	if (err)
		goto fail;

	bat->spb     = vhd->header.block_size >> VHD_SECTOR_SHIFT;
	bat->entries = vhd->header.max_bat_size;
	vhd_bat_in(bat);

	return 0;

fail:
	free(bat->bat);
	bat->bat = NULL;
	return err;
}

static int
vhd_journal_read_batmap_header(vhd_journal_t *j, vhd_batmap_t *batmap)
{
	int err;
	char *buf;
	size_t size;
	vhd_journal_entry_t entry;

	size = vhd_bytes_padded(sizeof(struct dd_batmap_hdr));

	err  = vhd_journal_read_entry(j, &entry);
	if (err)
		return err;

	if (entry.type != VHD_JOURNAL_ENTRY_TYPE_BATMAP_H)
		return -EINVAL;

	if (entry.size != size)
		return -EINVAL;

	err = posix_memalign((void **)&buf, VHD_SECTOR_SIZE, size);
	if (err)
		return err;

	err = vhd_journal_read(j, buf, entry.size);
	if (err) {
		free(buf);
		return err;
	}

	memcpy(&batmap->header, buf, sizeof(batmap->header));

	vhd_batmap_header_in(batmap);
	return vhd_validate_batmap_header(batmap);
}

static int
vhd_journal_read_batmap_map(vhd_journal_t *j, vhd_batmap_t *batmap)
{
	int err;
	vhd_journal_entry_t entry;

	err  = vhd_journal_read_entry(j, &entry);
	if (err)
		return err;

	if (entry.type != VHD_JOURNAL_ENTRY_TYPE_BATMAP_M)
		return -EINVAL;

	if (entry.size != vhd_sectors_to_bytes(batmap->header.batmap_size))
		return -EINVAL;

	if (entry.offset != batmap->header.batmap_offset)
		return -EINVAL;

	err = posix_memalign((void **)&batmap->map,
			     VHD_SECTOR_SIZE, entry.size);
	if (err)
		return -err;

	err = vhd_journal_read(j, batmap->map, entry.size);
	if (err) {
		free(batmap->map);
		batmap->map = NULL;
		return err;
	}

	return 0;
}

static int
vhd_journal_read_batmap(vhd_journal_t *j, vhd_batmap_t *batmap)
{
	int err;

	err = vhd_journal_read_batmap_header(j, batmap);
	if (err)
		return err;

	err = vhd_journal_read_batmap_map(j, batmap);
	if (err)
		return err;

	err = vhd_validate_batmap(batmap);
	if (err) {
		free(batmap->map);
		batmap->map = NULL;
		return err;
	}

	return 0;
}

static int
vhd_journal_restore_footer(vhd_journal_t *j, vhd_footer_t *footer)
{
	return vhd_write_footer_at(&j->vhd, footer,
				   j->header.vhd_footer_offset);
}

static int
vhd_journal_restore_footer_copy(vhd_journal_t *j, vhd_footer_t *footer)
{
	return vhd_write_footer_at(&j->vhd, footer, 0);
}

static int
vhd_journal_restore_header(vhd_journal_t *j, vhd_header_t *header)
{
	off64_t off;
	vhd_context_t *vhd;

	vhd = &j->vhd;
	off = vhd->footer.data_offset;

	return vhd_write_header_at(&j->vhd, header, off);
}

static int
vhd_journal_restore_locators(vhd_journal_t *j, char **locators, int locs)
{
	size_t size;
	vhd_context_t *vhd;
	int i, n, lidx, err;
	vhd_parent_locator_t *loc;

	lidx = 0;
	vhd  = &j->vhd;

	n = sizeof(vhd->header.loc) / sizeof(vhd_parent_locator_t);

	for (i = 0; i < n && lidx < locs; i++) {
		loc  = vhd->header.loc + i;
		if (loc->code == PLAT_CODE_NONE)
			continue;

		err  = vhd_seek(vhd, loc->data_offset, SEEK_SET);
		if (err)
			return err;

		size = vhd_parent_locator_size(loc);
		err  = vhd_write(vhd, locators[lidx++], size);
		if (err)
			return err;
	}

	return 0;
}

static int
vhd_journal_restore_bat(vhd_journal_t *j, vhd_bat_t *bat)
{
	return vhd_write_bat(&j->vhd, bat);
}

static int
vhd_journal_restore_batmap(vhd_journal_t *j, vhd_batmap_t *batmap)
{
	return vhd_write_batmap(&j->vhd, batmap);
}

static int
vhd_journal_restore_metadata(vhd_journal_t *j)
{
	off64_t off;
	char **locators;
	vhd_footer_t copy;
	vhd_context_t *vhd;
	int i, locs, hlocs, err;

	vhd      = &j->vhd;
	locs     = 0;
	hlocs    = 0;
	locators = NULL;

	err = vhd_journal_seek(j, sizeof(vhd_journal_header_t), SEEK_SET);
	if (err)
		return err;

	err  = vhd_journal_read_footer(j, &vhd->footer);
	if (err)
		return err;

	if (!vhd_type_dynamic(vhd))
		goto restore;

	err  = vhd_journal_read_footer_copy(j, &copy);
	if (err)
		return err;

	err  = vhd_journal_read_header(j, &vhd->header);
	if (err)
		return err;

	for (hlocs = 0, i = 0; i < vhd_parent_locator_count(vhd); i++) {
		if (vhd_validate_platform_code(vhd->header.loc[i].code))
			return err;

		if (vhd->header.loc[i].code != PLAT_CODE_NONE)
			hlocs++;
	}

	if (hlocs) {
		err  = vhd_journal_read_locators(j, &locators, &locs);
		if (err)
			return err;

		if (hlocs != locs) {
			err = -EINVAL;
			goto out;
		}
	}

	err  = vhd_journal_read_bat(j, &vhd->bat);
	if (err)
		goto out;

	if (vhd_has_batmap(vhd)) {
		err  = vhd_journal_read_batmap(j, &vhd->batmap);
		if (err)
			goto out;
	}

restore:
	off  = vhd_journal_position(j);
	if (off == (off64_t)-1)
		return -errno;

	if (j->header.journal_data_offset != off)
		return -EINVAL;

	err  = vhd_journal_restore_footer(j, &vhd->footer);
	if (err)
		goto out;

	if (!vhd_type_dynamic(vhd))
		goto out;

	err  = vhd_journal_restore_footer_copy(j, &copy);
	if (err)
		goto out;

	err  = vhd_journal_restore_header(j, &vhd->header);
	if (err)
		goto out;

	if (locs) {
		err = vhd_journal_restore_locators(j, locators, locs);
		if (err)
			goto out;
	}

	err  = vhd_journal_restore_bat(j, &vhd->bat);
	if (err)
		goto out;

	if (vhd_has_batmap(vhd)) {
		err  = vhd_journal_restore_batmap(j, &vhd->batmap);
		if (err)
			goto out;
	}

	err = 0;

out:
	if (locators) {
		for (i = 0; i < locs; i++)
			free(locators[i]);
		free(locators);
	}

	if (!err && !vhd->is_block)
		err = ftruncate(vhd->fd,
			  j->header.vhd_footer_offset +
			  sizeof(vhd_footer_t));

	return err;
}

static int
vhd_journal_disable_vhd(vhd_journal_t *j)
{
	int err;
	vhd_context_t *vhd;

	vhd = &j->vhd;

	err = vhd_get_footer(vhd);
	if (err)
		return err;

	memcpy(&vhd->footer.cookie,
	       VHD_POISON_COOKIE, sizeof(vhd->footer.cookie));
	vhd->footer.checksum = vhd_checksum_footer(&vhd->footer);

	err = vhd_write_footer(vhd, &vhd->footer);
	if (err)
		return err;

	return 0;
}

static int
vhd_journal_enable_vhd(vhd_journal_t *j)
{
	int err;
	vhd_context_t *vhd;

	vhd = &j->vhd;

	err = vhd_get_footer(vhd);
	if (err)
		return err;

	if (!vhd_disabled(vhd))
		return 0;

	memcpy(&vhd->footer.cookie, HD_COOKIE, sizeof(vhd->footer.cookie));
	vhd->footer.checksum = vhd_checksum_footer(&vhd->footer);

	err = vhd_write_footer(vhd, &vhd->footer);
	if (err)
		return err;

	return 0;
}

int
vhd_journal_close(vhd_journal_t *j)
{
	if (j->jfd)
		close(j->jfd);

	vhd_close(&j->vhd);
	free(j->jname);

	return 0;
}

int
vhd_journal_remove(vhd_journal_t *j)
{
	int err;

	err = vhd_journal_enable_vhd(j);
	if (err)
		return err;

	if (j->jfd) {
		close(j->jfd);
		if (!j->is_block)
			unlink(j->jname);
	}

	vhd_close(&j->vhd);
	free(j->jname);

	return 0;
}

int
vhd_journal_open(vhd_journal_t *j, const char *file, const char *jfile)
{
	int err;
	vhd_context_t *vhd;

	memset(j, 0, sizeof(vhd_journal_t));

	j->jfd = -1;
	vhd    = &j->vhd;

	j->jname = strdup(jfile);
	if (j->jname == NULL)
		return -ENOMEM;

	j->jfd = open(j->jname, O_LARGEFILE | O_RDWR);
	if (j->jfd == -1) {
		err = -errno;
		goto fail;
	}

	err = vhd_test_file_fixed(j->jname, &j->is_block);
	if (err)
		goto fail;

	vhd->fd = open(file, O_LARGEFILE | O_RDWR | O_DIRECT);
	if (vhd->fd == -1) {
		err = -errno;
		goto fail;
	}

	err = vhd_test_file_fixed(file, &vhd->is_block);
	if (err)
		goto fail;

	err = vhd_journal_read_journal_header(j, &j->header);
	if (err)
		goto fail;

	err = vhd_journal_restore_metadata(j);
	if (err)
		goto fail;

	close(vhd->fd);
	free(vhd->bat.bat);
	free(vhd->batmap.map);

	err = vhd_open(vhd, file, VHD_OPEN_RDWR);
	if (err)
		goto fail;

	err = vhd_get_bat(vhd);
	if (err)
		goto fail;

	if (vhd_has_batmap(vhd)) {
		err = vhd_get_batmap(vhd);
		if (err)
			goto fail;
	}

	err = vhd_journal_disable_vhd(j);
	if (err)
		goto fail;

	return 0;

fail:
	vhd_journal_close(j);
	return err;
}

int
vhd_journal_create(vhd_journal_t *j, const char *file, const char *jfile)
{
	char *buf;
	int i, err;
	size_t size;
	off64_t off;
	struct stat stats;

	memset(j, 0, sizeof(vhd_journal_t));
	j->jfd = -1;

	j->jname = strdup(jfile);
	if (j->jname == NULL) {
		err = -ENOMEM;
		goto fail1;
	}

	if (access(j->jname, F_OK) == 0) {
		err = vhd_test_file_fixed(j->jname, &j->is_block);
		if (err)
			goto fail1;

		if (!j->is_block) {
			err = -EEXIST;
			goto fail1;
		}
	}

	if (j->is_block)
		j->jfd = open(j->jname, O_LARGEFILE | O_RDWR, 0644);
	else
		j->jfd = open(j->jname,
			      O_CREAT | O_TRUNC | O_LARGEFILE | O_RDWR, 0644);
	if (j->jfd == -1) {
		err = -errno;
		goto fail1;
	}

	err = vhd_open(&j->vhd, file, VHD_OPEN_RDWR | VHD_OPEN_STRICT);
	if (err)
		goto fail1;

	err = vhd_get_bat(&j->vhd);
	if (err)
		goto fail2;

	if (vhd_has_batmap(&j->vhd)) {
		err = vhd_get_batmap(&j->vhd);
		if (err)
			goto fail2;
	}

	err = vhd_journal_add_journal_header(j);
	if (err)
		goto fail2;

	err = vhd_journal_add_metadata(j);
	if (err)
		goto fail2;

	err = vhd_journal_disable_vhd(j);
	if (err)
		goto fail2;

	err = vhd_journal_sync(j);
	if (err)
		goto fail2;

	return 0;

fail1:
	if (j->jfd != -1) {
		close(j->jfd);
		if (!j->is_block)
			unlink(j->jname);
	}
	free(j->jname);
	memset(j, 0, sizeof(vhd_journal_t));

	return err;

fail2:
	vhd_journal_remove(j);
	return err;
}

int
vhd_journal_add_block(vhd_journal_t *j, uint32_t block, char mode)
{
	int err;
	char *buf;
	off64_t off;
	size_t size;
	uint64_t blk;
	vhd_context_t *vhd;

	buf = NULL;
	vhd = &j->vhd;

	if (!vhd_type_dynamic(vhd))
		return -EINVAL;

	err = vhd_get_bat(vhd);
	if (err)
		return err;

	if (block >= vhd->bat.entries)
		return -ERANGE;

	blk = vhd->bat.bat[block];
	if (blk == DD_BLK_UNUSED)
		return 0;

	off = vhd_sectors_to_bytes(blk);

	if (mode & VHD_JOURNAL_METADATA) {
		size = vhd_sectors_to_bytes(vhd->bm_secs);

		err  = vhd_read_bitmap(vhd, block, &buf);
		if (err)
			return err;

		err  = vhd_journal_update(j, off, buf, size,
					  VHD_JOURNAL_ENTRY_TYPE_DATA);

		free(buf);

		if (err)
			return err;
	}

	if (mode & VHD_JOURNAL_DATA) {
		off += vhd_sectors_to_bytes(vhd->bm_secs);
		size = vhd_sectors_to_bytes(vhd->spb);

		err  = vhd_read_block(vhd, block, &buf);
		if (err)
			return err;

		err  = vhd_journal_update(j, off, buf, size,
					  VHD_JOURNAL_ENTRY_TYPE_DATA);
		free(buf);

		if (err)
			return err;
	}

	return vhd_journal_sync(j);
}

/*
 * commit indicates the transaction completed 
 * successfully and we can remove the undo log
 */
int
vhd_journal_commit(vhd_journal_t *j)
{
	int err;

	j->header.journal_data_entries     = 0;
	j->header.journal_metadata_entries = 0;
	j->header.journal_data_offset      = 0;
	j->header.journal_metadata_offset  = 0;

	err = vhd_journal_write_header(j, &j->header);
	if (err)
		return err;

	if (!j->is_block)
		err = vhd_journal_truncate(j, sizeof(vhd_journal_header_t));
	if (err)
		return -errno;

	return 0;
}

/*
 * revert indicates the transaction failed
 * and we should revert any changes via the undo log
 */
int
vhd_journal_revert(vhd_journal_t *j)
{
	int i, err;
	char *buf, *file;
	vhd_context_t *vhd;
	vhd_journal_entry_t entry;

	err  = 0;
	vhd  = &j->vhd;
	buf  = NULL;

	file = strdup(vhd->file);
	if (!file)
		return -ENOMEM;

	vhd_close(&j->vhd);
	j->vhd.fd = open(file, O_RDWR | O_DIRECT | O_LARGEFILE);
	if (j->vhd.fd == -1) {
		free(file);
		return -errno;
	}

	err = vhd_test_file_fixed(file, &vhd->is_block);
	if (err) {
		free(file);
		return err;
	}

	err  = vhd_journal_restore_metadata(j);
	if (err) {
		free(file);
		return err;
	}

	close(vhd->fd);
	free(vhd->bat.bat);
	free(vhd->batmap.map);

	err = vhd_open(vhd, file, VHD_OPEN_RDWR);
	free(file);
	if (err)
		return err;

	err = vhd_journal_seek(j, j->header.journal_data_offset, SEEK_SET);
	if (err)
		return err;

	for (i = 0; i < j->header.journal_data_entries; i++) {
		err = vhd_journal_read_entry(j, &entry);
		if (err)
			goto end;

		err = posix_memalign((void **)&buf,
				     VHD_SECTOR_SIZE, entry.size);
		if (err) {
			err = -err;
			buf = NULL;
			goto end;
		}

		err = vhd_journal_read(j, buf, entry.size);
		if (err)
			goto end;

		err = vhd_journal_validate_entry_data(&entry, buf);
		if (err)
			goto end;

		err = vhd_seek(vhd, entry.offset, SEEK_SET);
		if (err)
			goto end;

		err = vhd_write(vhd, buf, entry.size);
		if (err)
			goto end;

		err = 0;

	end:
		free(buf);
		buf = NULL;
		if (err)
			break;
	}

	if (err)
		return err;

	if (!vhd->is_block) {
		err = ftruncate(vhd->fd, j->header.vhd_footer_offset +
				sizeof(vhd_footer_t));
		if (err)
			return -errno;
	}

	return vhd_journal_sync(j);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久日本蜜臀| 午夜久久福利影院| 亚洲一区二区三区在线| 蜜臀va亚洲va欧美va天堂| 国产成人高清在线| 欧美午夜精品理论片a级按摩| 精品国产乱码久久久久久免费 | 欧美精品一区二区三区很污很色的| 中文字幕一区二区三区不卡在线| 秋霞午夜鲁丝一区二区老狼| 色综合久久久久久久久| 国产拍揄自揄精品视频麻豆| 日本成人在线视频网站| 在线观看亚洲精品视频| 国产精品五月天| 国产精品一区二区x88av| 3d动漫精品啪啪| 亚洲午夜激情网站| 一本高清dvd不卡在线观看 | 日韩精品一区二| 日韩中文字幕av电影| 欧美色图一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 国产成人啪免费观看软件| 日韩欧美一区二区久久婷婷| 日韩av网站在线观看| 欧美日韩不卡一区二区| 一区二区三区欧美视频| 91尤物视频在线观看| 国产亚洲女人久久久久毛片| 国产麻豆视频精品| 久久久久久久av麻豆果冻| 国模一区二区三区白浆| 日韩精品在线网站| 国产美女一区二区三区| 国产亚洲欧美中文| 成人h版在线观看| 亚洲四区在线观看| 91女厕偷拍女厕偷拍高清| 最新国产の精品合集bt伙计| 91色视频在线| 亚洲va中文字幕| 欧美一区二区三区的| 日韩高清不卡一区二区| 欧美大片在线观看一区二区| 狠狠色狠狠色综合| 国产三级欧美三级日产三级99| 国产米奇在线777精品观看| 日本一区二区三区在线观看| jlzzjlzz亚洲女人18| 一区二区三区国产精品| 欧美一区二区免费观在线| 国产综合一区二区| 国产精品久久久久9999吃药| 在线视频国内自拍亚洲视频| 婷婷丁香久久五月婷婷| 精品国产乱码久久久久久久久 | 蜜桃视频在线观看一区二区| 久久综合久久综合久久| 国产mv日韩mv欧美| 一区二区三区欧美视频| 精品国产一区二区三区四区四| 成人精品小蝌蚪| 午夜精品爽啪视频| 国产日韩欧美一区二区三区乱码| 99久久精品免费观看| 午夜视频久久久久久| 国产女主播一区| 欧美日韩国产成人在线91| 国产精品中文字幕日韩精品 | 5月丁香婷婷综合| 国产福利91精品一区| 无吗不卡中文字幕| 国产午夜亚洲精品羞羞网站| 欧美日韩精品欧美日韩精品一| 国产成人久久精品77777最新版本| 亚洲精品日产精品乱码不卡| 精品国产免费视频| 欧美日韩在线直播| 成a人片国产精品| 狠狠色丁香久久婷婷综合_中| 亚洲乱码国产乱码精品精可以看| 日韩欧美国产一区二区三区| 色女孩综合影院| 国产一区二区网址| 日韩精品国产精品| 亚洲特级片在线| 国产亚洲欧美中文| 精品久久久三级丝袜| 欧美日韩精品福利| 色视频一区二区| 91在线观看免费视频| 国产乱国产乱300精品| 肉色丝袜一区二区| 亚洲图片有声小说| 亚洲三级在线观看| 国产精品久久久久久久久免费桃花| 欧美一级黄色大片| 欧美精品亚洲一区二区在线播放| 91一区二区在线观看| 高清beeg欧美| 国产福利一区二区三区在线视频| 奇米精品一区二区三区在线观看一| 亚洲码国产岛国毛片在线| 国产日产精品一区| 26uuu国产日韩综合| 日韩一区二区高清| 欧美一级一级性生活免费录像| 欧美三级中文字| 欧美性受xxxx黑人xyx性爽| 91社区在线播放| 99久久精品免费| 91在线高清观看| 日本高清无吗v一区| 91麻豆免费看片| 一本色道久久加勒比精品| 色婷婷av一区二区三区软件| 日本高清成人免费播放| 色94色欧美sute亚洲线路二| 色国产精品一区在线观看| 91在线国产观看| 在线免费一区三区| 4438x亚洲最大成人网| 欧美一区二区网站| 精品少妇一区二区三区在线视频 | 欧美日韩视频第一区| 欧美亚洲丝袜传媒另类| 欧美精品aⅴ在线视频| 制服丝袜国产精品| 欧美电影免费观看高清完整版在线观看 | 欧美亚洲动漫精品| 欧美日韩精品一区二区三区| 日韩欧美在线1卡| 久久九九久精品国产免费直播| 中文字幕欧美激情| 一区二区三区日本| 美女mm1313爽爽久久久蜜臀| 黄一区二区三区| 91一区一区三区| 欧美一区二区视频网站| 久久久久久久久97黄色工厂| 最新成人av在线| 奇米影视一区二区三区小说| 国产99一区视频免费| 色噜噜久久综合| 精品国产污污免费网站入口 | 亚洲制服丝袜一区| 免播放器亚洲一区| 成人h动漫精品一区二区| 欧美午夜一区二区| 国产午夜亚洲精品羞羞网站| 亚洲欧美日韩国产综合在线| 日日夜夜精品视频天天综合网| 国产一区激情在线| 在线精品视频免费播放| 日韩免费一区二区三区在线播放| 欧美国产精品久久| 日本一区中文字幕| www.欧美色图| 欧美一级二级三级乱码| 中文字幕一区二区三区在线播放| 午夜激情久久久| 国产ts人妖一区二区| 欧美福利一区二区| 中文字幕制服丝袜成人av| 日韩精品亚洲一区| 91在线你懂得| 久久免费的精品国产v∧| 偷拍自拍另类欧美| 91在线视频播放| 国产女人18水真多18精品一级做| 亚洲h动漫在线| 成年人国产精品| 久久久精品蜜桃| 免费成人在线观看视频| 欧美性xxxxxxxx| 亚洲日本中文字幕区| 国产盗摄一区二区三区| 日韩欧美在线一区二区三区| 亚洲成人在线网站| 日本精品一区二区三区高清 | 亚洲成人一二三| www.日韩大片| 国产精品污污网站在线观看| 国产在线不卡一卡二卡三卡四卡| 欧美一区二区三区小说| 亚洲第一成人在线| 欧美视频一区二区三区在线观看| 中文字幕在线观看不卡视频| 国产91色综合久久免费分享| 久久人人爽爽爽人久久久| 热久久久久久久| 欧美成人高清电影在线| 日本欧美一区二区三区乱码| 欧美区一区二区三区| 亚洲成人福利片| 正在播放亚洲一区| 美腿丝袜亚洲色图| 欧美一卡2卡三卡4卡5免费| 日韩精品亚洲专区|