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

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

?? libvhd.h

?? xen source 推出最新的VHD操作工具VHD-UTIL 實現源碼,超強
?? H
字號:
/* Copyright (c) 2008, XenSource Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of XenSource Inc. nor the names of its contributors
 *       may be used to endorse or promote products derived from this software
 *       without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _VHD_LIB_H_
#define _VHD_LIB_H_

#include <string.h>
#include <endian.h>
#include <byteswap.h>
#include <uuid/uuid.h>

#include "vhd.h"

#if BYTE_ORDER == LITTLE_ENDIAN
  #define BE16_IN(foo)             (*(foo)) = bswap_16(*(foo))
  #define BE32_IN(foo)             (*(foo)) = bswap_32(*(foo))
  #define BE64_IN(foo)             (*(foo)) = bswap_64(*(foo))
  #define BE16_OUT(foo)            (*(foo)) = bswap_16(*(foo))
  #define BE32_OUT(foo)            (*(foo)) = bswap_32(*(foo))
  #define BE64_OUT(foo)            (*(foo)) = bswap_64(*(foo))
#else
  #define BE16_IN(foo)
  #define BE32_IN(foo)
  #define BE64_IN(foo)
  #define BE32_OUT(foo)
  #define BE32_OUT(foo)
  #define BE64_OUT(foo)
#endif

#define MIN(a, b)                  (((a) < (b)) ? (a) : (b))
#define MAX(a, b)                  (((a) > (b)) ? (a) : (b))

#define VHD_MAX_NAME_LEN           1024

#define VHD_BLOCK_SHIFT            21
#define VHD_BLOCK_SIZE             (1ULL << VHD_BLOCK_SHIFT)

#define UTF_16                     "UTF-16"
#define UTF_16LE                   "UTF-16LE"
#define UTF_16BE                   "UTF-16BE"

#define VHD_OPEN_RDONLY            0x00001
#define VHD_OPEN_RDWR              0x00002
#define VHD_OPEN_FAST              0x00004
#define VHD_OPEN_STRICT            0x00008
#define VHD_OPEN_IGNORE_DISABLED   0x00010

#define VHD_FLAG_CREAT_PARENT_RAW        0x00001

#define vhd_flag_set(word, flag)         ((word) |= (flag))
#define vhd_flag_clear(word, flag)       ((word) &= ~(flag))
#define vhd_flag_test(word, flag)        ((word) & (flag))


#define ENABLE_FAILURE_TESTING
#define FAIL_REPARENT_BEGIN        0
#define FAIL_REPARENT_LOCATOR      1
#define FAIL_REPARENT_END          2
#define FAIL_RESIZE_BEGIN          3
#define FAIL_RESIZE_DATA_MOVED     4
#define FAIL_RESIZE_METADATA_MOVED 5
#define FAIL_RESIZE_END            6
#define NUM_FAIL_TESTS             7

#ifdef ENABLE_FAILURE_TESTING
#define TEST_FAIL_AT(point) \
	if (TEST_FAIL[point]) { \
		printf("Failing at %s\n", ENV_VAR_FAIL[point]); exit(EINVAL); }
#define TEST_FAIL_EXTERN_VARS              \
	extern const char* ENV_VAR_FAIL[]; \
	extern int TEST_FAIL[];
#else
#define TEST_FAIL_AT(point)
#define TEST_FAIL_EXTERN_VARS
#endif // ENABLE_FAILURE_TESTING


static const char                  VHD_POISON_COOKIE[] = "v_poison";

typedef struct hd_ftr              vhd_footer_t;
typedef struct dd_hdr              vhd_header_t;
typedef struct vhd_bat             vhd_bat_t;
typedef struct vhd_batmap          vhd_batmap_t;
typedef struct dd_batmap_hdr       vhd_batmap_header_t;
typedef struct prt_loc             vhd_parent_locator_t;
typedef struct vhd_context         vhd_context_t;
typedef uint32_t                   vhd_flag_creat_t;

struct vhd_bat {
	uint32_t                   spb;
	uint32_t                   entries;
	uint32_t                  *bat;
};

struct vhd_batmap {
	vhd_batmap_header_t        header;
	char                      *map;
};

struct vhd_context {
	int                        fd;
	char                      *file;
	int                        oflags;
	int                        is_block;

	uint32_t                   spb;
	uint32_t                   bm_secs;

	vhd_header_t               header;
	vhd_footer_t               footer;
	vhd_bat_t                  bat;
	vhd_batmap_t               batmap;
};

static inline uint32_t
secs_round_up(uint64_t bytes)
{
	return ((bytes + (VHD_SECTOR_SIZE - 1)) >> VHD_SECTOR_SHIFT);
}

static inline uint32_t
secs_round_up_no_zero(uint64_t bytes)
{
	return (secs_round_up(bytes) ? : 1);
}

static inline uint64_t
vhd_sectors_to_bytes(uint64_t sectors)
{
	return sectors << VHD_SECTOR_SHIFT;
}

static inline uint64_t
vhd_bytes_padded(uint64_t bytes)
{
	return vhd_sectors_to_bytes(secs_round_up_no_zero(bytes));
}

static inline int
vhd_type_dynamic(vhd_context_t *ctx)
{
	return (ctx->footer.type == HD_TYPE_DYNAMIC ||
		ctx->footer.type == HD_TYPE_DIFF);
}

static inline int
vhd_creator_tapdisk(vhd_context_t *ctx)
{
	return !strncmp(ctx->footer.crtr_app, "tap", 3);
}

static inline int
vhd_disabled(vhd_context_t *ctx)
{
	return (!memcmp(ctx->footer.cookie,
			VHD_POISON_COOKIE, sizeof(ctx->footer.cookie)));
}

static inline size_t
vhd_parent_locator_size(vhd_parent_locator_t *loc)
{
	/*
	 * MICROSOFT_COMPAT
	 * data_space *should* be in sectors,
	 * but sometimes we find it in bytes
	 */
	if (loc->data_space < 512)
		return vhd_sectors_to_bytes(loc->data_space);
	else if (loc->data_space % 512 == 0)
		return loc->data_space;
	else
		return 0;
}

static inline int
vhd_parent_raw(vhd_context_t *ctx)
{
	return uuid_is_null(ctx->header.prt_uuid);
}

void libvhd_set_log_level(int);

int vhd_test_file_fixed(const char *, int *);

uint32_t vhd_time(time_t time);
size_t vhd_time_to_string(uint32_t timestamp, char *target);
uint32_t vhd_chs(uint64_t size);

uint32_t vhd_checksum_footer(vhd_footer_t *);
uint32_t vhd_checksum_header(vhd_header_t *);
uint32_t vhd_checksum_batmap(vhd_batmap_t *);

void vhd_footer_in(vhd_footer_t *);
void vhd_footer_out(vhd_footer_t *);
void vhd_header_in(vhd_header_t *);
void vhd_header_out(vhd_header_t *);
void vhd_bat_in(vhd_bat_t *);
void vhd_bat_out(vhd_bat_t *);
void vhd_batmap_header_in(vhd_batmap_t *);
void vhd_batmap_header_out(vhd_batmap_t *);

int vhd_validate_footer(vhd_footer_t *footer);
int vhd_validate_header(vhd_header_t *header);
int vhd_validate_batmap_header(vhd_batmap_t *batmap);
int vhd_validate_batmap(vhd_batmap_t *batmap);
int vhd_validate_platform_code(uint32_t code);

int vhd_open(vhd_context_t *, const char *file, int flags);
void vhd_close(vhd_context_t *);
int vhd_create(const char *name, uint64_t bytes, int type, vhd_flag_creat_t);
/* vhd_snapshot: the bytes parameter is optional and can be 0 if the snapshot 
 * is to have the same size as the (first non-empty) parent */
int vhd_snapshot(const char *snapshot, uint64_t bytes, const char *parent,
		vhd_flag_creat_t);

int vhd_hidden(vhd_context_t *, int *);
int vhd_chain_depth(vhd_context_t *, int *);

off64_t vhd_position(vhd_context_t *);
int vhd_seek(vhd_context_t *, off64_t, int);
int vhd_read(vhd_context_t *, void *, size_t);
int vhd_write(vhd_context_t *, void *, size_t);

int vhd_offset(vhd_context_t *, uint32_t, uint32_t *);

int vhd_end_of_headers(vhd_context_t *ctx, off64_t *off);
int vhd_end_of_data(vhd_context_t *ctx, off64_t *off);
int vhd_batmap_header_offset(vhd_context_t *ctx, off64_t *off);

int vhd_get_header(vhd_context_t *);
int vhd_get_footer(vhd_context_t *);
int vhd_get_bat(vhd_context_t *);
int vhd_get_batmap(vhd_context_t *);

void vhd_put_header(vhd_context_t *);
void vhd_put_footer(vhd_context_t *);
void vhd_put_bat(vhd_context_t *);
void vhd_put_batmap(vhd_context_t *);

int vhd_has_batmap(vhd_context_t *);
int vhd_batmap_test(vhd_context_t *, vhd_batmap_t *, uint32_t);
void vhd_batmap_set(vhd_context_t *, vhd_batmap_t *, uint32_t);
void vhd_batmap_clear(vhd_context_t *, vhd_batmap_t *, uint32_t);

int vhd_get_phys_size(vhd_context_t *, off64_t *);
int vhd_set_phys_size(vhd_context_t *, off64_t);

int vhd_bitmap_test(vhd_context_t *, char *, uint32_t);
void vhd_bitmap_set(vhd_context_t *, char *, uint32_t);
void vhd_bitmap_clear(vhd_context_t *, char *, uint32_t);

int vhd_parent_locator_count(vhd_context_t *);
int vhd_parent_locator_get(vhd_context_t *, char **);
int vhd_parent_locator_read(vhd_context_t *, vhd_parent_locator_t *, char **);
int vhd_find_parent(vhd_context_t *, const char *, char **);
int vhd_parent_locator_write_at(vhd_context_t *, const char *,
				off64_t, uint32_t, size_t,
				vhd_parent_locator_t *);

int vhd_header_decode_parent(vhd_context_t *, vhd_header_t *, char **);
int vhd_change_parent(vhd_context_t *, char *parent_path, int raw);

int vhd_read_footer(vhd_context_t *, vhd_footer_t *);
int vhd_read_footer_at(vhd_context_t *, vhd_footer_t *, off64_t);
int vhd_read_footer_strict(vhd_context_t *, vhd_footer_t *);
int vhd_read_header(vhd_context_t *, vhd_header_t *);
int vhd_read_header_at(vhd_context_t *, vhd_header_t *, off64_t);
int vhd_read_bat(vhd_context_t *, vhd_bat_t *);
int vhd_read_batmap(vhd_context_t *, vhd_batmap_t *);
int vhd_read_bitmap(vhd_context_t *, uint32_t block, char **bufp);
int vhd_read_block(vhd_context_t *, uint32_t block, char **bufp);

int vhd_write_footer(vhd_context_t *, vhd_footer_t *);
int vhd_write_footer_at(vhd_context_t *, vhd_footer_t *, off64_t);
int vhd_write_header(vhd_context_t *, vhd_header_t *);
int vhd_write_header_at(vhd_context_t *, vhd_header_t *, off64_t);
int vhd_write_bat(vhd_context_t *, vhd_bat_t *);
int vhd_write_batmap(vhd_context_t *, vhd_batmap_t *);
int vhd_write_bitmap(vhd_context_t *, uint32_t block, char *bitmap);
int vhd_write_block(vhd_context_t *, uint32_t block, char *data);

int vhd_io_read(vhd_context_t *, char *, uint64_t, uint32_t);
int vhd_io_write(vhd_context_t *, char *, uint64_t, uint32_t);

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品久久只有精品| 3751色影院一区二区三区| 色综合视频在线观看| 欧美二区三区91| 国产精品毛片高清在线完整版| 亚洲444eee在线观看| 国产成人99久久亚洲综合精品| 欧美日韩一级二级| 欧美激情在线观看视频免费| 五月婷婷激情综合| www.日韩av| xf在线a精品一区二区视频网站| 国产精品国产三级国产普通话三级 | 成人精品免费视频| 制服丝袜av成人在线看| 亚洲欧美激情在线| 成人网男人的天堂| 337p日本欧洲亚洲大胆精品 | 欧美久久久久中文字幕| 亚洲啪啪综合av一区二区三区| 韩国在线一区二区| 91精品国产综合久久精品图片| 亚洲欧美日韩人成在线播放| 成人在线视频一区| 欧美一区二区视频在线观看 | 成人听书哪个软件好| 欧美一区二区大片| 日精品一区二区| 欧美日韩久久久久久| 亚洲最大色网站| 97国产一区二区| 亚洲桃色在线一区| 一本大道久久a久久综合婷婷| 中文字幕一区二区三区四区不卡| 国产成人精品一区二区三区四区 | 国产欧美一区二区在线| 国产成人精品免费一区二区| 国产欧美日韩久久| 99久久久无码国产精品| 亚洲精品亚洲人成人网 | 国产91色综合久久免费分享| 欧美国产丝袜视频| 91一区二区三区在线观看| 亚洲狠狠丁香婷婷综合久久久| 91成人在线精品| 亚洲国产成人精品视频| 欧美一区二区三区喷汁尤物| 国产在线一区观看| 中文字幕免费不卡在线| 91丝袜呻吟高潮美腿白嫩在线观看| 综合久久给合久久狠狠狠97色| 一本大道av一区二区在线播放| 一区二区视频免费在线观看| 欧美三级日韩三级国产三级| 亚洲一区二区3| 日韩视频在线你懂得| 国产精品资源在线看| 亚洲欧美日韩成人高清在线一区| 欧美久久久久久久久中文字幕| 美女爽到高潮91| 亚洲欧洲美洲综合色网| 欧美日韩三级一区二区| 看电影不卡的网站| 中文字幕一区二区三区四区不卡| 欧美视频在线一区二区三区| 日韩成人av影视| 国产精品蜜臀在线观看| 欧美三级电影一区| 韩国精品在线观看| 亚洲日本一区二区| 欧美一级国产精品| www.日韩大片| 久久国产精品免费| 一区二区三区高清| 久久久亚洲高清| 欧美三级在线视频| 福利一区二区在线| 亚洲mv在线观看| 一区二区三区免费在线观看| 亚洲专区一二三| 国产日韩精品一区| 国产伦精品一区二区三区免费迷 | 99精品视频中文字幕| 91精品婷婷国产综合久久性色| 国产一区免费电影| 中文字幕一区二区三区av| 91精品1区2区| 国产精品亚洲人在线观看| 婷婷亚洲久悠悠色悠在线播放 | 午夜精品一区二区三区电影天堂 | 亚洲成av人片观看| 国产精品高潮久久久久无| 欧美电影免费观看完整版| 色婷婷久久久综合中文字幕 | 久久在线免费观看| 欧美日韩国产免费一区二区| 一本色道久久综合狠狠躁的推荐| 精品一区二区三区欧美| 午夜激情久久久| 亚洲色图19p| 欧美激情一区二区三区不卡| 精品久久久久久久久久久久久久久 | 性做久久久久久久久| 亚洲精选视频免费看| 国产精品三级电影| 久久精品无码一区二区三区| 精品国产一区二区三区不卡 | 欧美二区三区91| 欧美日韩黄色一区二区| 91麻豆精品在线观看| 波多野结衣中文字幕一区 | 福利电影一区二区三区| 国产在线精品视频| 九色|91porny| 精品午夜久久福利影院| 美国十次综合导航| 看电影不卡的网站| 激情欧美一区二区| 国产精品自在欧美一区| 国产.精品.日韩.另类.中文.在线.播放 | 97久久超碰国产精品| 99精品久久99久久久久| 91极品美女在线| 欧美日韩激情一区| 91麻豆精品国产91久久久 | 国产毛片精品一区| 成人综合在线网站| 91网站视频在线观看| 欧美三级午夜理伦三级中视频| 在线不卡的av| 欧美精品一区二区三区一线天视频| 久久免费看少妇高潮| 国产精品久久777777| 亚洲一区二区在线播放相泽| 日本中文一区二区三区| 激情亚洲综合在线| 成人动漫av在线| 欧美日韩国产区一| 精品国产成人在线影院| 国产精品久线在线观看| 亚洲一区二区三区美女| 久国产精品韩国三级视频| 成人激情黄色小说| 欧美男同性恋视频网站| 国产偷v国产偷v亚洲高清| 亚洲天天做日日做天天谢日日欢 | 亚洲福利视频导航| 九九精品一区二区| 99久久久无码国产精品| 日韩一级欧美一级| 中文字幕在线观看不卡| 日韩国产欧美在线观看| 岛国av在线一区| 欧洲一区二区三区在线| 精品国产欧美一区二区| 亚洲色欲色欲www| 青草国产精品久久久久久| 大桥未久av一区二区三区中文| 欧美精品日韩综合在线| 国产精品丝袜久久久久久app| 亚洲国产精品人人做人人爽| 国产成人精品一区二| 欧美精品精品一区| 国产精品久久久久影院老司| 久草中文综合在线| 精品视频色一区| 欧美国产激情一区二区三区蜜月 | 欧美不卡123| 亚洲综合在线五月| 国产精品69毛片高清亚洲| 欧美日韩高清一区| 自拍偷拍亚洲激情| 国产91清纯白嫩初高中在线观看| 日韩一级片在线观看| 亚洲综合在线电影| av一本久道久久综合久久鬼色| 欧美精品一区二区三区四区| 日韩中文字幕av电影| 日本高清不卡视频| 国产精品视频一二| 国产精品66部| 日韩女优电影在线观看| 亚洲18女电影在线观看| 色妹子一区二区| 国产精品美日韩| 成人午夜视频在线观看| 精品国产污污免费网站入口| 蜜乳av一区二区三区| 欧美日韩国产成人在线免费| 亚洲大片在线观看| 欧美亚洲综合在线| 亚洲精品中文字幕在线观看| 91美女精品福利| 亚洲精选视频免费看| 日本韩国一区二区| 亚洲激情图片qvod| 欧美午夜理伦三级在线观看| 一区二区三区中文字幕精品精品 | 日韩精品乱码免费| 欧美精选在线播放|