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

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

?? devname.c

?? busybox最新版本. 嵌入式編程必不可少之工具.
?? C
字號:
/* vi: set sw=4 ts=4: *//* * devname.c - get a dev by its device inode name * * Copyright (C) Andries Brouwer * Copyright (C) 1999, 2000, 2001, 2002, 2003 Theodore Ts'o * Copyright (C) 2001 Andreas Dilger * * %Begin-Header% * This file may be redistributed under the terms of the * GNU Lesser General Public License. * %End-Header% */#include <stdio.h>#include <string.h>#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include <stdlib.h>#include <string.h>#include <ctype.h>#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#include <sys/stat.h>#ifdef HAVE_ERRNO_H#include <errno.h>#endif#ifdef HAVE_SYS_MKDEV_H#include <sys/mkdev.h>#endif#include <time.h>#include "blkidP.h"/* * Find a dev struct in the cache by device name, if available. * * If there is no entry with the specified device name, and the create * flag is set, then create an empty device entry. */blkid_dev blkid_get_dev(blkid_cache cache, const char *devname, int flags){	blkid_dev dev = NULL, tmp;	struct list_head *p;	if (!cache || !devname)		return NULL;	list_for_each(p, &cache->bic_devs) {		tmp = list_entry(p, struct blkid_struct_dev, bid_devs);		if (strcmp(tmp->bid_name, devname))			continue;		DBG(DEBUG_DEVNAME,		    printf("found devname %s in cache\n", tmp->bid_name));		dev = tmp;		break;	}	if (!dev && (flags & BLKID_DEV_CREATE)) {		dev = blkid_new_dev();		if (!dev)			return NULL;		dev->bid_name = blkid_strdup(devname);		dev->bid_cache = cache;		list_add_tail(&dev->bid_devs, &cache->bic_devs);		cache->bic_flags |= BLKID_BIC_FL_CHANGED;	}	if (flags & BLKID_DEV_VERIFY)		dev = blkid_verify(cache, dev);	return dev;}/* * Probe a single block device to add to the device cache. */static void probe_one(blkid_cache cache, const char *ptname,		      dev_t devno, int pri){	blkid_dev dev = NULL;	struct list_head *p;	const char **dir;	char *devname = NULL;	/* See if we already have this device number in the cache. */	list_for_each(p, &cache->bic_devs) {		blkid_dev tmp = list_entry(p, struct blkid_struct_dev,					   bid_devs);		if (tmp->bid_devno == devno) {			dev = blkid_verify(cache, tmp);			break;		}	}	if (dev && dev->bid_devno == devno)		goto set_pri;	/*	 * Take a quick look at /dev/ptname for the device number.  We check	 * all of the likely device directories.  If we don't find it, or if	 * the stat information doesn't check out, use blkid_devno_to_devname()	 * to find it via an exhaustive search for the device major/minor.	 */	for (dir = blkid_devdirs; *dir; dir++) {		struct stat st;		char device[256];		sprintf(device, "%s/%s", *dir, ptname);		if ((dev = blkid_get_dev(cache, device, BLKID_DEV_FIND)) &&		    dev->bid_devno == devno)			goto set_pri;		if (stat(device, &st) == 0 && S_ISBLK(st.st_mode) &&		    st.st_rdev == devno) {			devname = blkid_strdup(device);			break;		}	}	if (!devname) {		devname = blkid_devno_to_devname(devno);		if (!devname)			return;	}	dev = blkid_get_dev(cache, devname, BLKID_DEV_NORMAL);	free(devname);set_pri:	if (!pri && !strncmp(ptname, "md", 2))		pri = BLKID_PRI_MD;	if (dev)		dev->bid_pri = pri;}#define PROC_PARTITIONS "/proc/partitions"#define VG_DIR		"/proc/lvm/VGs"/* * This function initializes the UUID cache with devices from the LVM * proc hierarchy.  We currently depend on the names of the LVM * hierarchy giving us the device structure in /dev.  (XXX is this a * safe thing to do?) */#ifdef VG_DIR#include <dirent.h>static dev_t lvm_get_devno(const char *lvm_device){	FILE *lvf;	char buf[1024];	int ma, mi;	dev_t ret = 0;	DBG(DEBUG_DEVNAME, printf("opening %s\n", lvm_device));	if ((lvf = fopen(lvm_device, "r")) == NULL) {		DBG(DEBUG_DEVNAME, printf("%s: (%d) %s\n", lvm_device, errno,					  strerror(errno)));		return 0;	}	while (fgets(buf, sizeof(buf), lvf)) {		if (sscanf(buf, "device: %d:%d", &ma, &mi) == 2) {			ret = makedev(ma, mi);			break;		}	}	fclose(lvf);	return ret;}static void lvm_probe_all(blkid_cache cache){	DIR		*vg_list;	struct dirent	*vg_iter;	int		vg_len = strlen(VG_DIR);	dev_t		dev;	if ((vg_list = opendir(VG_DIR)) == NULL)		return;	DBG(DEBUG_DEVNAME, printf("probing LVM devices under %s\n", VG_DIR));	while ((vg_iter = readdir(vg_list)) != NULL) {		DIR		*lv_list;		char		*vdirname;		char		*vg_name;		struct dirent	*lv_iter;		vg_name = vg_iter->d_name;		if (LONE_CHAR(vg_name, '.') || !strcmp(vg_name, ".."))			continue;		vdirname = xmalloc(vg_len + strlen(vg_name) + 8);		sprintf(vdirname, "%s/%s/LVs", VG_DIR, vg_name);		lv_list = opendir(vdirname);		free(vdirname);		if (lv_list == NULL)			continue;		while ((lv_iter = readdir(lv_list)) != NULL) {			char		*lv_name, *lvm_device;			lv_name = lv_iter->d_name;			if (LONE_CHAR(lv_name, '.') || !strcmp(lv_name, ".."))				continue;			lvm_device = xmalloc(vg_len + strlen(vg_name) +					    strlen(lv_name) + 8);			sprintf(lvm_device, "%s/%s/LVs/%s", VG_DIR, vg_name,				lv_name);			dev = lvm_get_devno(lvm_device);			sprintf(lvm_device, "%s/%s", vg_name, lv_name);			DBG(DEBUG_DEVNAME, printf("LVM dev %s: devno 0x%04X\n",						  lvm_device,						  (unsigned int) dev));			probe_one(cache, lvm_device, dev, BLKID_PRI_LVM);			free(lvm_device);		}		closedir(lv_list);	}	closedir(vg_list);}#endif#define PROC_EVMS_VOLUMES "/proc/evms/volumes"static intevms_probe_all(blkid_cache cache){	char line[100];	int ma, mi, sz, num = 0;	FILE *procpt;	char device[110];	procpt = fopen(PROC_EVMS_VOLUMES, "r");	if (!procpt)		return 0;	while (fgets(line, sizeof(line), procpt)) {		if (sscanf (line, " %d %d %d %*s %*s %[^\n ]",			    &ma, &mi, &sz, device) != 4)			continue;		DBG(DEBUG_DEVNAME, printf("Checking partition %s (%d, %d)\n",					  device, ma, mi));		probe_one(cache, device, makedev(ma, mi), BLKID_PRI_EVMS);		num++;	}	fclose(procpt);	return num;}/* * Read the device data for all available block devices in the system. */int blkid_probe_all(blkid_cache cache){	FILE *proc;	char line[1024];	char ptname0[128], ptname1[128], *ptname = 0;	char *ptnames[2];	dev_t devs[2];	int ma, mi;	unsigned long long sz;	int lens[2] = { 0, 0 };	int which = 0, last = 0;	ptnames[0] = ptname0;	ptnames[1] = ptname1;	if (!cache)		return -BLKID_ERR_PARAM;	if (cache->bic_flags & BLKID_BIC_FL_PROBED &&	    time(0) - cache->bic_time < BLKID_PROBE_INTERVAL)		return 0;	blkid_read_cache(cache);	evms_probe_all(cache);#ifdef VG_DIR	lvm_probe_all(cache);#endif	proc = fopen(PROC_PARTITIONS, "r");	if (!proc)		return -BLKID_ERR_PROC;	while (fgets(line, sizeof(line), proc)) {		last = which;		which ^= 1;		ptname = ptnames[which];		if (sscanf(line, " %d %d %llu %128[^\n ]",			   &ma, &mi, &sz, ptname) != 4)			continue;		devs[which] = makedev(ma, mi);		DBG(DEBUG_DEVNAME, printf("read partition name %s\n", ptname));		/* Skip whole disk devs unless they have no partitions		 * If we don't have a partition on this dev, also		 * check previous dev to see if it didn't have a partn.		 * heuristic: partition name ends in a digit.		 *		 * Skip extended partitions.		 * heuristic: size is 1		 *		 * FIXME: skip /dev/{ida,cciss,rd} whole-disk devs		 */		lens[which] = strlen(ptname);		if (isdigit(ptname[lens[which] - 1])) {			DBG(DEBUG_DEVNAME,			    printf("partition dev %s, devno 0x%04X\n",				   ptname, (unsigned int) devs[which]));			if (sz > 1)				probe_one(cache, ptname, devs[which], 0);			lens[which] = 0;			lens[last] = 0;		} else if (lens[last] && strncmp(ptnames[last], ptname,						 lens[last])) {			DBG(DEBUG_DEVNAME,			    printf("whole dev %s, devno 0x%04X\n",				   ptnames[last], (unsigned int) devs[last]));			probe_one(cache, ptnames[last], devs[last], 0);			lens[last] = 0;		}	}	/* Handle the last device if it wasn't partitioned */	if (lens[which])		probe_one(cache, ptname, devs[which], 0);	fclose(proc);	cache->bic_time = time(0);	cache->bic_flags |= BLKID_BIC_FL_PROBED;	blkid_flush_cache(cache);	return 0;}#ifdef TEST_PROGRAMint main(int argc, char **argv){	blkid_cache cache = NULL;	int ret;	blkid_debug_mask = DEBUG_ALL;	if (argc != 1) {		fprintf(stderr, "Usage: %s\n"			"Probe all devices and exit\n", argv[0]);		exit(1);	}	if ((ret = blkid_get_cache(&cache, bb_dev_null)) != 0) {		fprintf(stderr, "%s: error creating cache (%d)\n",			argv[0], ret);		exit(1);	}	if (blkid_probe_all(cache) < 0)		printf("%s: error probing devices\n", argv[0]);	blkid_put_cache(cache);	return 0;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡二卡三卡| 国产精品久久久久久亚洲毛片 | 国产米奇在线777精品观看| 韩国成人精品a∨在线观看| 91免费精品国自产拍在线不卡| 国产精品久久久久精k8 | 国产传媒久久文化传媒| 色8久久人人97超碰香蕉987| 欧美一区二区三区不卡| 亚洲欧洲成人精品av97| 麻豆国产精品视频| 在线视频综合导航| 国产精品丝袜一区| 国产精品影视在线观看| 欧美成人女星排行榜| 亚洲一区二区三区自拍| 91原创在线视频| 2023国产精品视频| 日韩二区三区四区| 欧美高清视频不卡网| 亚洲一区二区三区美女| 色综合久久久久| 亚洲视频资源在线| 91在线国产观看| 国产精品护士白丝一区av| 国产在线一区二区| 欧美精品一区二区蜜臀亚洲| 日韩不卡免费视频| 欧美精品久久久久久久多人混战 | 久久99久国产精品黄毛片色诱| 日本视频免费一区| 777午夜精品视频在线播放| 一区二区三区在线观看动漫| 91一区一区三区| 亚洲品质自拍视频| 色综合夜色一区| 一区二区三区在线免费视频 | 欧美图片一区二区三区| 一二三四区精品视频| 欧美性生活影院| 日韩成人午夜精品| 精品噜噜噜噜久久久久久久久试看 | 欧美日韩在线免费视频| 亚洲国产另类精品专区| 在线综合+亚洲+欧美中文字幕| 日韩精品专区在线影院观看| 六月丁香婷婷久久| 久久久国产精华| 成人av在线播放网址| 国产欧美日韩精品在线| 成人亚洲精品久久久久软件| 国产精品大尺度| 欧美视频一区二区三区在线观看| 日韩一区二区在线播放| 韩国视频一区二区| 中文字幕精品—区二区四季| 一本到一区二区三区| 天堂在线一区二区| 亚洲精品在线一区二区| 懂色av一区二区在线播放| 亚洲女同ⅹxx女同tv| 欧美区一区二区三区| 国产成人一级电影| 亚洲国产日日夜夜| 久久精品一区二区三区不卡牛牛| 亚洲午夜在线视频| 久久夜色精品国产欧美乱极品| 亚洲日本青草视频在线怡红院| 免费成人美女在线观看| 久久久五月婷婷| 欧美性猛交xxxx乱大交退制版| 久久只精品国产| 一本大道av伊人久久综合| 日韩影院精彩在线| 中文字幕av在线一区二区三区| 日韩中文字幕亚洲一区二区va在线 | 91精品国产综合久久婷婷香蕉| 亚洲欧美福利一区二区| 欧美裸体bbwbbwbbw| 成人av电影在线观看| 日韩av不卡一区二区| 欧美极品aⅴ影院| 欧美麻豆精品久久久久久| 成人国产一区二区三区精品| 亚洲成人动漫av| 亚洲天堂a在线| 久久一区二区三区四区| 精品视频免费看| 色综合网色综合| 国产乱理伦片在线观看夜一区| 欧美久久久久中文字幕| 91美女在线观看| 国产精品羞羞答答xxdd| 蜜臀va亚洲va欧美va天堂| 亚洲激情在线激情| 中文av一区特黄| 精品久久久久久久久久久院品网| 丝袜a∨在线一区二区三区不卡| 欧美剧情电影在线观看完整版免费励志电影| 亚洲欧美视频在线观看| 久久久99精品久久| 精品国产乱码久久久久久老虎| 久久91精品久久久久久秒播| 日韩成人免费看| 亚洲国产精品久久久久秋霞影院| 欧美中文字幕一区二区三区| av亚洲精华国产精华精华| 成人小视频在线观看| 国产精品一区三区| 国产99久久久久久免费看农村| 国产精品日日摸夜夜摸av| 久久久午夜精品| 欧美国产精品专区| 中文字幕欧美日韩一区| 国产精品国产自产拍高清av王其| 91久久精品一区二区| 色成人在线视频| 欧美日韩在线免费视频| 欧美老肥妇做.爰bbww| 91麻豆精品国产自产在线观看一区 | 欧美精品99久久久**| 5858s免费视频成人| 在线观看一区二区视频| 欧美日韩一级片网站| 欧美日韩免费不卡视频一区二区三区 | 欧美日韩成人综合天天影院| 欧美日韩免费观看一区三区| 欧美精品视频www在线观看| 欧美丝袜自拍制服另类| 这里是久久伊人| 久久毛片高清国产| 亚洲欧洲av在线| 亚洲午夜精品17c| 青青草原综合久久大伊人精品 | 五月婷婷激情综合| 日韩精品高清不卡| 国内精品国产三级国产a久久| 午夜精品久久久久久久| 麻豆成人久久精品二区三区红| 中文字幕亚洲在| 亚洲自拍欧美精品| 久久精品久久久精品美女| 韩国视频一区二区| 一本色道久久综合狠狠躁的推荐| 国模无码大尺度一区二区三区 | 中文字幕一区二| 亚洲国产成人av网| 国内精品伊人久久久久av一坑| 亚洲影视在线观看| 另类成人小视频在线| caoporn国产精品| 在线观看日产精品| 精品久久人人做人人爽| |精品福利一区二区三区| 日本不卡一区二区三区高清视频| 亚洲国产成人tv| 国产美女一区二区三区| 欧美午夜片在线观看| 国产午夜精品一区二区三区视频| 日韩一区二区三区电影| 国产精品美女久久久久久久| 日韩精品每日更新| 91麻豆蜜桃一区二区三区| 精品三级在线看| 亚洲综合在线电影| 国产成人亚洲综合a∨猫咪| 欧美日韩综合色| 亚洲天堂福利av| 国产高清亚洲一区| 欧美日韩国产综合久久| 亚洲欧洲精品一区二区精品久久久| 日本一区二区三区在线不卡| 日韩精品一级二级 | 一区二区激情小说| 国产·精品毛片| 日韩欧美亚洲国产另类| 一区二区三区免费在线观看| 国产成人av资源| 欧美成人性福生活免费看| 三级欧美韩日大片在线看| 在线精品视频免费播放| 中文字幕亚洲一区二区av在线| 一区二区三区中文字幕在线观看| 亚洲精品视频自拍| 成人免费视频一区| 精品国产乱码久久久久久影片| 亚洲国产精品黑人久久久| 国产精品一品二品| 久久色视频免费观看| 美女网站色91| 7777精品伊人久久久大香线蕉经典版下载 | 92精品国产成人观看免费| 久久精品男人的天堂| 国产在线视频精品一区| 欧美mv和日韩mv的网站| 国内精品免费**视频| 欧美白人最猛性xxxxx69交| 麻豆高清免费国产一区| 精品日韩一区二区三区| 久久99精品国产麻豆不卡|