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

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

?? lvm-util.c

?? xen source 推出最新的VHD操作工具VHD-UTIL 實現源碼,超強
?? C
字號:
/* 
 * 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.
 */
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

#include "lvm-util.h"

#define _NAME "%255s"
static char line[1024];

static inline int
lvm_read_line(FILE *scan)
{
	memset(line, 0, sizeof(line));
	return (fscanf(scan, "%1023[^\n]", line) != 1);
}

static inline int
lvm_next_line(FILE *scan)
{
	return (fscanf(scan, "%1023[\n]", line) != 1);
}

static int
lvm_copy_name(char *dst, const char *src, size_t size)
{
	if (strnlen(src, size) == size)
		return -ENAMETOOLONG;

	strcpy(dst, src);
	return 0;
}

static int
lvm_parse_pv(struct vg *vg, const char *name, int pvs, uint64_t start)
{
	int i, err;
	struct pv *pv;

	pv = NULL;

	if (!vg->pvs) {
		vg->pvs = calloc(pvs, sizeof(struct pv));
		if (!vg->pvs)
			return -ENOMEM;
	}

	for (i = 0; i < pvs; i++) {
		pv = vg->pvs + i;

		if (!pv->name[0])
			break;

		if (!strcmp(pv->name, name))
			return -EEXIST;
	}

	if (!pv)
		return -ENOENT;

	if (i == pvs)
		return -ENOMEM;

	err = lvm_copy_name(pv->name, name, sizeof(pv->name) - 1);
	if (err)
		return err;

	pv->start = start;
	return 0;
}

static int
lvm_open_vg(const char *vgname, struct vg *vg)
{
	FILE *scan;
	int i, err, pvs, lvs;
	char *cmd, pvname[256];
	uint64_t size, pv_start;

	memset(vg, 0, sizeof(*vg));

	err = asprintf(&cmd, "/usr/sbin/vgs %s --noheadings --nosuffix --units=b "
		       "--options=vg_name,vg_extent_size,lv_count,pv_count,"
		       "pv_name,pe_start --unbuffered 2> /dev/null", vgname);
	if (err == -1)
		return -ENOMEM;

	errno = 0;
	scan  = popen(cmd, "r");
	if (!scan) {
		err = (errno ? -errno : ENOMEM);
		goto out;
	}

	for (;;) {
		if (lvm_read_line(scan))
			break;

		err = -EINVAL;
                if (sscanf(line, _NAME" %"SCNu64" %d %d "_NAME" %"SCNu64,
			   vg->name, &size, &lvs, &pvs, pvname, &pv_start) != 6)
			goto out;

		if (strcmp(vg->name, vgname))
			goto out;

		err = lvm_parse_pv(vg, pvname, pvs, pv_start);
		if (err)
			goto out;

		if (lvm_next_line(scan))
			break;
	}

	err = -EINVAL;
	if (strcmp(vg->name, vgname))
		goto out;

	for (i = 0; i < pvs; i++)
		if (!vg->pvs[i].name[0])
			goto out;

	err = -ENOMEM;
	vg->lvs = calloc(lvs, sizeof(struct lv));
	if (!vg->lvs)
		goto out;

	err             = 0;
	vg->lv_cnt      = lvs;
	vg->pv_cnt      = pvs;
	vg->extent_size = size;

out:
	if (scan)
		pclose(scan);
	if (err)
		lvm_free_vg(vg);
	free(cmd);
	return err;
}

static int
lvm_parse_lv_devices(struct vg *vg, struct lv_segment *seg, char *devices)
{
	int i;
	uint64_t start, pe_start;

	for (i = 0; i < strlen(devices); i++)
		if (strchr(",()", devices[i]))
			devices[i] = ' ';

        if (sscanf(devices, _NAME" %"SCNu64, seg->device, &start) != 2)
		return -EINVAL;

	pe_start = -1;
	for (i = 0; i < vg->pv_cnt; i++)
		if (!strcmp(vg->pvs[i].name, seg->device)) {
			pe_start = vg->pvs[i].start;
			break;
		}

	if (pe_start == -1)
		return -EINVAL;

	seg->pe_start = (start * vg->extent_size) + pe_start;
	return 0;
}

static int
lvm_scan_lvs(struct vg *vg)
{
	char *cmd;
	FILE *scan;
	int i, err;

	err = asprintf(&cmd, "/usr/sbin/lvs %s --noheadings --nosuffix --units=b "
		       "--options=lv_name,lv_size,segtype,seg_count,seg_start,"
		       "seg_size,devices --unbuffered 2> /dev/null", vg->name);
	if (err == -1)
		return -ENOMEM;

	errno = 0;
	scan  = popen(cmd, "r");
	if (!scan) {
		err = (errno ? -errno : -ENOMEM);
		goto out;
	}

	for (i = 0;;) {
		int segs;
		struct lv *lv;
		struct lv_segment seg;
		uint64_t size, seg_start;
		char type[32], name[256], dev[256], devices[1024];

		if (i >= vg->lv_cnt)
			break;

		if (lvm_read_line(scan)) {
			vg->lv_cnt = i;
			break;
		}

		err = -EINVAL;
		lv  = vg->lvs + i;

                if (sscanf(line, _NAME" %"SCNu64" %31s %u %"SCNu64" %"SCNu64" %1023s",
			   name, &size, type, &segs, &seg_start,
			   &seg.pe_size, devices) != 7)
			goto out;

		if (seg_start)
			goto next;

		if (!strcmp(type, "linear"))
			seg.type = LVM_SEG_TYPE_LINEAR;
		else
			seg.type = LVM_SEG_TYPE_UNKNOWN;

		if (lvm_parse_lv_devices(vg, &seg, devices))
			goto out;

		i++;
		lv->size          = size;
		lv->segments      = segs;
		lv->first_segment = seg;

		err = lvm_copy_name(lv->name, name, sizeof(lv->name) - 1);
		if (err)
			goto out;
		err = -EINVAL;

	next:
		if (lvm_next_line(scan))
			goto out;
	}

	err = 0;

out:
	if (scan)
		pclose(scan);
	free(cmd);
	return err;
}

void
lvm_free_vg(struct vg *vg)
{
	free(vg->lvs);
	free(vg->pvs);
	memset(vg, 0, sizeof(*vg));
}

int
lvm_scan_vg(const char *vg_name, struct vg *vg)
{
	int err;

	memset(vg, 0, sizeof(*vg));

	err = lvm_open_vg(vg_name, vg);
	if (err)
		return err;

	err = lvm_scan_lvs(vg);
	if (err) {
		lvm_free_vg(vg);
		return err;
	}

	return 0;
}

#ifdef LVM_UTIL
static int
usage(void)
{
	printf("usage: lvm-util <vgname>\n");
	exit(EINVAL);
}

int
main(int argc, char **argv)
{
	int i, err;
	struct vg vg;
	struct pv *pv;
	struct lv *lv;
	struct lv_segment *seg;

	if (argc != 2)
		usage();

	err = lvm_scan_vg(argv[1], &vg);
	if (err) {
		printf("scan failed: %d\n", err);
		return (err >= 0 ? err : -err);
	}

	
        printf("vg %s: extent_size: %"PRIu64", pvs: %d, lvs: %d\n",
	       vg.name, vg.extent_size, vg.pv_cnt, vg.lv_cnt);

	for (i = 0; i < vg.pv_cnt; i++) {
		pv = vg.pvs + i;
                printf("pv %s: start %"PRIu64"\n", pv->name, pv->start);
	}

	for (i = 0; i < vg.lv_cnt; i++) {
		lv  = vg.lvs + i;
		seg = &lv->first_segment;                
                printf("lv %s: size: %"PRIu64", segments: %u, type: %u, "
                       "dev: %s, pe_start: %"PRIu64", pe_size: %"PRIu64"\n",
		       lv->name, lv->size, lv->segments, seg->type,
		       seg->device, seg->pe_start, seg->pe_size);
	}

	lvm_free_vg(&vg);
	return 0;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久av蜜臀妖精| 色av成人天堂桃色av| 成人h动漫精品一区二区| 色综合久久久久网| 日韩三级视频中文字幕| 国产精品日韩成人| 成人免费观看男女羞羞视频| 欧美自拍偷拍午夜视频| 中文字幕第一区二区| 久久99精品一区二区三区| 欧美日韩和欧美的一区二区| 国产精品久久久久影院亚瑟| 狠狠色丁香婷婷综合| 欧美三级韩国三级日本一级| 国产日韩欧美精品一区| 日本va欧美va欧美va精品| 91在线小视频| 久久久www成人免费毛片麻豆| 午夜欧美电影在线观看| 91影视在线播放| 精品久久久久久综合日本欧美| 亚洲午夜电影网| 欧美怡红院视频| 亚洲欧美日韩精品久久久久| 成人永久aaa| 久久亚洲一区二区三区四区| 三级在线观看一区二区| 欧美日韩久久一区| 亚洲自拍偷拍av| 色吧成人激情小说| 有码一区二区三区| 欧美影院午夜播放| 亚洲永久免费视频| 成人高清视频在线| 亚洲色图.com| 色吊一区二区三区| 亚洲福利视频导航| 91精品在线一区二区| 麻豆91在线观看| 国产亚洲精品精华液| 国产精品一区专区| 国产精品久久久久精k8| 99视频精品在线| 亚洲午夜一区二区| 日韩三级视频在线观看| 美女一区二区在线观看| 精品国产三级a在线观看| 国产精品一区三区| 综合在线观看色| 91国内精品野花午夜精品| 亚洲国产一区视频| 精品国产乱子伦一区| 国产高清精品久久久久| 国产精品国产三级国产aⅴ原创| 成人午夜伦理影院| 亚洲三级在线播放| 欧美日韩另类一区| 国模冰冰炮一区二区| 中文字幕一区二区日韩精品绯色| 91香蕉视频污| 七七婷婷婷婷精品国产| 欧美经典三级视频一区二区三区| 色综合天天综合网天天看片| 欧美日本在线观看| 紧缚奴在线一区二区三区| 国产精品久久久久一区二区三区共| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲综合视频在线| 国产欧美一区二区三区网站 | 91麻豆国产自产在线观看| 一区二区三区四区视频精品免费 | 国产成人免费视频一区| 亚洲精品国产视频| 欧美va亚洲va| 在线观看日韩一区| 国产一区二区在线视频| 亚洲六月丁香色婷婷综合久久| 欧美一区二区黄| 粉嫩一区二区三区在线看 | 日韩理论在线观看| 欧美日韩午夜在线| 丰满亚洲少妇av| 蜜桃精品在线观看| 亚洲人亚洲人成电影网站色| 日韩欧美一二区| 一本一道综合狠狠老| 国产在线精品一区二区不卡了| 亚洲午夜精品17c| 国产欧美一区二区精品性 | 欧美亚洲国产一区二区三区| 国产一区二区福利| 一区二区三区丝袜| 国产精品久久久久四虎| 亚洲精品一线二线三线无人区| 欧美军同video69gay| 色综合久久久网| 99热99精品| 成人美女视频在线观看18| 免费成人在线网站| 日本视频一区二区三区| 亚洲精品欧美在线| 亚洲黄色av一区| 亚洲伦在线观看| 亚洲人成伊人成综合网小说| 国产欧美一区二区在线| 国产亚洲欧美在线| 精品国内片67194| 日韩女优电影在线观看| 欧美精品在欧美一区二区少妇| 91福利国产成人精品照片| 色综合中文综合网| 国产在线国偷精品免费看| 日韩综合小视频| 亚洲不卡在线观看| 午夜欧美视频在线观看| 亚洲午夜私人影院| 亚洲成av人片在线观看| 亚洲综合丁香婷婷六月香| 亚洲国产欧美日韩另类综合| 一区二区三区免费网站| 一区二区三区四区蜜桃| 亚洲小少妇裸体bbw| 亚洲成av人片在线观看| 蜜臀久久99精品久久久久久9| 日韩一区精品视频| 久久99精品久久久久久国产越南| 日韩精品一二三四| 国产在线不卡视频| 丰满放荡岳乱妇91ww| 色综合久久天天综合网| 欧美日韩国产美| 精品国产99国产精品| 久久综合狠狠综合久久激情| 欧美韩国日本综合| 综合中文字幕亚洲| 日本在线不卡视频| 色偷偷久久人人79超碰人人澡| 色婷婷综合中文久久一本| 欧美性猛交xxxxxxxx| 欧美一区二区免费| 久久久久久97三级| 亚洲色图清纯唯美| 免费精品99久久国产综合精品| 另类综合日韩欧美亚洲| 国产99精品国产| 欧美做爰猛烈大尺度电影无法无天| 欧美蜜桃一区二区三区| 欧美精品一区二区不卡| 亚洲人成在线播放网站岛国| 青娱乐精品视频在线| 成人亚洲精品久久久久软件| 在线看国产一区| 久久夜色精品一区| 亚洲一二三四区不卡| 国产精品一二三| 91精彩视频在线| 久久亚洲免费视频| 亚洲一区二区五区| 国产成人小视频| 69堂精品视频| 一区二区视频在线| 国产一区视频导航| 欧美精品18+| 亚洲欧洲韩国日本视频| 美女www一区二区| 欧美影视一区在线| 国产精品久久久久精k8 | 欧美成人精品二区三区99精品| 久久伊人中文字幕| 一级女性全黄久久生活片免费| 紧缚奴在线一区二区三区| 欧美日韩综合不卡| 国产精品动漫网站| 久久疯狂做爰流白浆xx| 欧美三级电影网站| 国产精品国产三级国产三级人妇| 伦理电影国产精品| 欧美日免费三级在线| 国产精品久久久久一区二区三区 | 欧美一二三四在线| 亚洲成人你懂的| 91丨porny丨户外露出| www国产亚洲精品久久麻豆| 婷婷久久综合九色国产成人| 91视视频在线观看入口直接观看www | 一区二区三区美女| av电影天堂一区二区在线 | 欧美一区欧美二区| 亚洲一区在线观看视频| 成人免费看的视频| 日本一区二区视频在线观看| 久久99精品久久久久久久久久久久 | 国产在线一区观看| 日韩午夜在线影院| 麻豆国产欧美一区二区三区| 这里只有精品视频在线观看| 亚洲午夜一区二区三区| 欧美性xxxxxx少妇| 亚洲国产欧美一区二区三区丁香婷| 色悠悠久久综合|