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

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

?? device.c

?? LINUX lilo-22.7 源代碼。
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* device.c  -  Device access *//*Copyright 1992-1997 Werner Almesberger.Copyright 1999-2005 John Coffman.All rights reserved.Licensed under the terms contained in the file 'COPYING' in the source directory.*/#define DEBUG 0#define ATAKEYWORD 0#define _GNU_SOURCE#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <ctype.h>#include <errno.h>#include <dirent.h>#include <limits.h>#include <time.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include "config.h"#include "lilo.h"#include "common.h"#include "temp.h"#include "device.h"#include "geometry.h"#include "partition.h"#include "cfg.h"#include "probe.h"#include "ata-u.h"typedef struct _cache_entry {    const char *name;    int number;    struct _cache_entry *next;} CACHE_ENTRY;typedef struct _st_buf {    struct _st_buf *next;    struct stat st;} ST_BUF;static CACHE_ENTRY *cache = NULL;#if 1int yesno(char *prompt, int expect){    char *line, *pr2;    int i;    size_t n;    int ret;    if (expect) pr2 = "[Y/n]";    else pr2 = "[N/y]";        fflush(stdout);    do {	fprintf(stderr, "%s%s", prompt, pr2);	fflush(stderr);	n = ret = 0;	line = NULL;	i = getline(&line, &n, stdin);	if (i<0) exit(1);	if (i==1) ret=expect|2;	if (i>1) {		if (*line=='y'||*line=='Y') ret=1;		if (*line=='n'||*line=='N') ret=2;	}	if (ret) break;	if (line) free(line);    } while(1);    return ret&1;}#endifstatic int scan_dir(ST_BUF *next,DEVICE *dev,char *parent,int number){    DIR *dp;    struct dirent *dir;    ST_BUF st,*walk;    char *start;    st.next = next;    if ((dp = opendir(parent)) == NULL)	die("opendir %s: %s",parent,strerror(errno));    *(start = strchr(parent,0)) = '/';    while ((dir = readdir(dp))) {	strcpy(start+1,dir->d_name);	if (stat(parent,&st.st) >= 0) {	    dev->st = st.st;	    if (S_ISBLK(dev->st.st_mode) && dev->st.st_rdev == number) {		(void) closedir(dp);		return 1;	    }	    if (S_ISDIR(dev->st.st_mode) && strcmp(dir->d_name,".") &&	      strcmp(dir->d_name,"..")) {		for (walk = next; walk; walk = walk->next)		    if (stat_equal(&walk->st,&st.st)) break;		if (!walk && scan_dir(&st,dev,parent,number)) {		    (void) closedir(dp);		    return 1;		}	    }	}    }    (void) closedir(dp);    *start = 0;    return 0;}static int lookup_dev(char *name,DEVICE *dev,int number){    CACHE_ENTRY **walk;    if (verbose>=5) printf("lookup_dev:  number=%04X\n", number);    for (walk = &cache; *walk; walk = &(*walk)->next)	if ((*walk)->number == number) {#if 0	    CACHE_ENTRY *here;	    if (stat((*walk)->name,&dev->st) >= 0)		if (S_ISBLK(dev->st.st_mode) && dev->st.st_rdev == number) {		    strcpy(name,(*walk)->name);		    return 1;		}	    here = *walk; /* remove entry from cache */	    if (verbose >= 2)		printf("Invalidating cache entry for %s (0x%04X)\n",here->name,		  here->number);	    *walk = here->next;	    free((char *) here->name);	    free(here);	    return 0;#else	    strcpy(name,(*walk)->name);	    return 1;#endif	}    return 0;}static int is_devfs(void){static int yesno = 0;    struct stat st;       if (!yesno) {	if (stat("/dev/.devfsd", &st) < 0)  yesno=1;	else yesno=2;    }      return yesno-1;}static void cache_add(const char *name,int number){    CACHE_ENTRY *entry;    entry = cache;    while (entry) {	if (strcmp(entry->name, name) == 0) {	    if (entry->number != number) die("cache_add: LILO internal error");	    return;	}	entry = entry->next;    }    if (verbose >= 5) printf("Caching device %s (0x%04X)\n",name,number);    entry = alloc_t(CACHE_ENTRY);    entry->name = stralloc(name);    entry->number = number;    entry->next = cache;    cache = entry;}int dev_open(DEVICE *dev,int number,int flags){    char name[PATH_MAX+1];    ST_BUF st;    int count;    if (lookup_dev(name,dev,number)) dev->delete = 0;    else {	if (stat(DEV_DIR,&st.st) < 0)	    die("stat " DEV_DIR ": %s",strerror(errno));	st.next = NULL;	dev->delete = !scan_dir(&st,dev,strcpy(name,DEV_DIR),number);	if (dev->delete) {	    for (count = 0; count <= MAX_TMP_DEV; count++) {#ifdef LCF_USE_TMPDIR		if (!strncmp(TMP_DEV,"/tmp/",5) && getenv("TMPDIR")) {		    strcpy(name,getenv("TMPDIR"));		    sprintf(name+strlen(name),TMP_DEV+4,count);		}		else#endif		    sprintf(name,TMP_DEV,count);		if (stat(name,&dev->st) < 0) break;	    }	    if (count > MAX_TMP_DEV)		die("Failed to create a temporary device");	    if (mknod(name,0600 | S_IFBLK,number) < 0)		die("mknod %s: %s",name,strerror(errno));	    if (stat(name,&dev->st) < 0)		die("stat %s: %s",name,strerror(errno));	    if (verbose > 1)		printf("Created temporary device %s (0x%04X)\n",name,number);	    temp_register(name);	}	else cache_add(name,number);    }#if BETA_TEST	if (verbose >= 3) printf("stat-ing %s\n", name);	fflush(stdout);	stat(name, &st.st);#endif    if (flags == O_BYPASS) dev->fd = -1;    else if ((dev->fd = open(name,flags)) < 0)	    die("open %s: %s",name,strerror(errno));    dev->name = stralloc(name);    return dev->fd;}void dev_close(DEVICE *dev){    if (dev->fd != -1)	if (close(dev->fd) < 0) die("close %s: %s",dev->name,strerror(errno));    if (dev->delete) {	if (verbose > 1)	    printf("Removed temporary device %s (0x%04X)\n",dev->name,	      (unsigned int) dev->st.st_rdev);	(void) remove(dev->name);	temp_unregister(dev->name);    }    free(dev->name);}#define MAX 15void cache_scsi (char *name, int major){    char tem[80], format[80];    int i, j, dev;        for (i=15; i>=0; i--) {	dev = MKDEV(major,(i<<4));#if 0	if (is_devfs()) {	    sprintf(tem,"/dev/scsi/host%d/bus0/target0/lun0/", i);	    strcat(strcpy(format,tem),"disc");	    cache_add(format, dev);	    strcat(strcpy(format,tem),"part%d");	}	else#endif	{	    strcpy(format, name);	    format[7] += i;	    cache_add(format, dev);	    strcat(format, "%d");	}	for (j = MAX; j; j--) {	    sprintf(tem, format, j);	    cache_add(tem, dev | j);	}    }}void cache_ide (char *name, int major){    char tem[80], tem2[80];    char format[80];    char *disc;    int i, dev, minor, host, bus, target;        i = name[7] - 'a';    target = i&1;    minor = target<<6;    i >>= 1;    bus = i&1;    host = i&(-2);    if (is_devfs()) {	sprintf(tem2,"/dev/ide/host%d/bus%d/target%d/lun0/", host, bus, target);	strcat(strcpy(format,tem2), "part%d");	disc = strcat(tem2, "disc");    }    else {        strcat(strcpy(format, name), "%d");        disc = name;    }    dev = MKDEV(major,minor);    for (i = MAX; i; i--) {	sprintf(tem, format, i);	cache_add(tem, dev | i);    }    cache_add(disc, dev);}void preload_dev_cache(void){    char tmp[80];    int i;    int vsave;    vsave = verbose;#if !BETA_TEST    if (verbose>0) verbose--;#endif    if (is_devfs()) {	cache_add("/dev/floppy/0", 0x0200);	cache_add("/dev/floppy/1", 0x0201);    }    else {	cache_add("/dev/fd0", 0x0200);	cache_add("/dev/fd1", 0x0201);    }    #if 1    cache_ide("/dev/hdt", MAJOR_IDE10);    cache_ide("/dev/hds", MAJOR_IDE10);    cache_ide("/dev/hdr", MAJOR_IDE9);    cache_ide("/dev/hdq", MAJOR_IDE9);    cache_ide("/dev/hdp", MAJOR_IDE8);    cache_ide("/dev/hdo", MAJOR_IDE8);    cache_ide("/dev/hdn", MAJOR_IDE7);    cache_ide("/dev/hdm", MAJOR_IDE7);        cache_ide("/dev/hdl", MAJOR_IDE6);    cache_ide("/dev/hdk", MAJOR_IDE6);#ifdef MAJOR_IDE5    cache_ide("/dev/hdj", MAJOR_IDE5);    cache_ide("/dev/hdi", MAJOR_IDE5);#endif#endif        for (i = MAX; i >= 0; i--) {	sprintf(tmp, is_devfs() ? "/dev/md/%d" : "/dev/md%d", i);	cache_add(tmp, MKDEV(MAJOR_MD,i));    }    if (!is_devfs()) cache_scsi("/dev/sda", MAJOR_SD);        cache_ide("/dev/hdh", MAJOR_IDE4);    cache_ide("/dev/hdg", MAJOR_IDE4);    cache_ide("/dev/hdf", MAJOR_IDE3);    cache_ide("/dev/hde", MAJOR_IDE3);    for (i = 0; i <= 7; i++) {	sprintf(tmp, is_devfs() ? "/dev/loop/%d" : "/dev/loop%d", i);	cache_add(tmp,0x700+i);    }    cache_ide("/dev/hdd", MAJOR_IDE2);    cache_ide("/dev/hdc", MAJOR_IDE2);    cache_ide("/dev/hdb", MAJOR_HD);    cache_ide("/dev/hda", MAJOR_HD);        verbose = vsave;}#undef MAX#define NDEVICE 256static unsigned short idevices[NDEVICE];static int maxdev = 0;/* return 0 if device has not been backed up,		*//*	  1 if it has been backed up			*/static int dev_listed(unsigned short dev){    int i;/* scan the device list */    for (i=0; i<maxdev; i++) {	if (dev==idevices[i]) return 1;		/* already backed up */    }        if (maxdev < NDEVICE-1) idevices[maxdev++] = dev;    return 0;	/* new to the list, not listed if too many devices */}/* make a backup, returning the timestamp of the backup file *//* 0 if no timestamp returned, and no backup file created */int make_backup(char *backup_file, int force_backup, BOOT_SECTOR *bsect,	int device, char *id){    struct stat st;    char temp_name[PATH_MAX+1];    int bck_file;    int timestamp=0;    char *filename = "boot";    char *cp = NULL;    int force = 0;    if ((cp=cfg_get_strg(cf_options,"force-backup"))) force=1;    else cp=cfg_get_strg(cf_options,"backup");    if (!backup_file) {	backup_file = cp;	force_backup = force;    }    if (backup_file && stat(backup_file, &st) >= 0) {/* file or directory exists */    	if (S_ISDIR(st.st_mode)) {    	    if (strcmp(backup_file,"/")==0) backup_file = "";	    sprintf(temp_name, "%s/%s.%04X", backup_file, filename, device);	    backup_file = temp_name;	}    /* test for /dev/null */	else if (S_ISCHR(st.st_mode) && st.st_rdev==0x0103) return 0;	else if (!S_ISREG(st.st_mode))	    die("make_backup: %s not a directory or regular file", backup_file);    }/* could not stat it, or it was a directory, or it was a regular file */    if (backup_file) {	char *name, *dir, suffix[16];		backup_file = strcpy(temp_name, backup_file);	sprintf(suffix, "%04X", device);	dir = strrchr(backup_file, '/');

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利一区二区三区视频在线| 欧美日本不卡视频| 精品成人免费观看| 久久精品久久久精品美女| 亚洲精品在线一区二区| 粉嫩一区二区三区在线看| 国产精品久久久久aaaa| 91精品福利视频| 视频一区二区欧美| 26uuu欧美| 99re热视频这里只精品| 亚洲综合一二区| 日韩一级片在线观看| 国产精品一区二区久久不卡 | 国产亚洲一区二区三区在线观看| 国产精品亚洲一区二区三区妖精 | 欧美一级黄色片| 精品一区二区三区在线播放视频 | 欧美一卡在线观看| 欧美日韩国产欧美日美国产精品| 五月婷婷久久综合| 久久久精品一品道一区| 色婷婷久久综合| 美腿丝袜亚洲一区| 日韩一区日韩二区| 日韩丝袜美女视频| 色呦呦网站一区| 蜜桃视频在线一区| 亚洲男人天堂av| 欧美成人猛片aaaaaaa| 成人国产电影网| 美日韩一区二区三区| 亚洲视频一区二区在线观看| 欧美一区二区黄| 成人av集中营| 精品伊人久久久久7777人| 自拍偷拍国产亚洲| 2022国产精品视频| 在线播放国产精品二区一二区四区| 国产福利视频一区二区三区| 婷婷综合在线观看| 亚洲欧美另类小说视频| 26uuu国产在线精品一区二区| 在线看日韩精品电影| 粉嫩蜜臀av国产精品网站| 免费成人在线观看视频| 亚洲老妇xxxxxx| 国产精品美女久久久久久久久 | 久久国产精品无码网站| 亚洲精品国产一区二区精华液 | 精品免费国产二区三区| 欧美四级电影在线观看| 99久精品国产| 国产aⅴ综合色| 精品一区二区三区免费毛片爱| 亚洲va欧美va人人爽| 1024成人网色www| 国产女主播在线一区二区| 日韩亚洲欧美中文三级| 欧美美女网站色| 欧美吻胸吃奶大尺度电影| av中文字幕亚洲| 成人免费视频一区| 国产麻豆一精品一av一免费| 美女免费视频一区| 日本女人一区二区三区| 午夜精品福利一区二区三区av| 亚洲女人****多毛耸耸8| 国产精品传媒视频| 国产精品不卡视频| 欧美国产激情一区二区三区蜜月 | 久久精品一区二区三区不卡| 日韩片之四级片| 欧美一级生活片| 日韩精品自拍偷拍| 精品精品国产高清一毛片一天堂| 日韩一区二区中文字幕| 欧美一区二区黄| 精品日韩在线观看| 欧美电视剧免费全集观看| 日韩三区在线观看| 精品欧美一区二区久久| 久久人人超碰精品| 国产欧美精品在线观看| 国产精品久久久久久久蜜臀| 国产精品区一区二区三区| 中文字幕一区二区5566日韩| 日韩毛片精品高清免费| 亚洲一区二区偷拍精品| 香蕉久久一区二区不卡无毒影院 | 成人黄色在线视频| 在线不卡免费av| 欧美区在线观看| 91精品国产一区二区三区| 欧美大度的电影原声| 26uuu国产电影一区二区| 国产欧美一区二区三区网站 | 一区二区三区欧美激情| 亚洲自拍欧美精品| 日本伊人色综合网| 久久99久久99| www.在线成人| 欧美色图片你懂的| 日韩欧美国产电影| 国产精品久久久久久久久免费丝袜| 亚洲男女毛片无遮挡| 三级影片在线观看欧美日韩一区二区| 免费av成人在线| 高清国产午夜精品久久久久久| 91香蕉视频污在线| 欧美一区二区三区免费在线看| 国产婷婷色一区二区三区四区| 亚洲欧美国产77777| 免费在线观看不卡| av在线播放成人| 欧美一区二区三区在线观看视频| 久久久久国产精品麻豆ai换脸| 中文字幕一区二区三区av| 日本成人在线网站| 97se亚洲国产综合自在线| 91精品国产福利| 亚洲欧美一区二区久久| 精品在线播放免费| 欧美亚洲自拍偷拍| 亚洲国产精品传媒在线观看| 午夜伊人狠狠久久| www.欧美日韩| 精品国精品国产| 亚洲福利一区二区三区| 国产电影精品久久禁18| 在线播放一区二区三区| 中文字幕中文字幕在线一区| 久久成人久久爱| 91国产丝袜在线播放| 欧美日韩国产免费| 中文一区二区在线观看| 日本伊人色综合网| 一本到三区不卡视频| 国产亚洲va综合人人澡精品| 男人的天堂久久精品| 国产精品网站在线| 全部av―极品视觉盛宴亚洲| 91免费国产在线| 国产人妖乱国产精品人妖| 日韩高清一区在线| 欧美日韩一本到| 亚洲色图色小说| 99久久精品国产麻豆演员表| 久久综合狠狠综合久久综合88 | 91天堂素人约啪| 国产日韩高清在线| 久久99精品国产| 欧美成人a在线| 青草av.久久免费一区| 欧美精品久久久久久久久老牛影院| 成人欧美一区二区三区视频网页| 成人美女视频在线看| 国产欧美综合在线| 岛国一区二区在线观看| 欧美国产综合色视频| 成人一区二区三区视频在线观看| 久久青草国产手机看片福利盒子 | 亚洲成人一区在线| 欧美色综合网站| 亚洲成人自拍网| 中文字幕一区在线| 99热这里都是精品| 成人免费在线观看入口| 91在线一区二区三区| 1000精品久久久久久久久| av亚洲精华国产精华| 亚洲欧美一区二区久久| 欧日韩精品视频| 午夜精品一区二区三区电影天堂 | av一二三不卡影片| 亚洲精品一区二区三区精华液| 琪琪久久久久日韩精品| 日韩欧美一区二区免费| 裸体在线国模精品偷拍| 久久亚洲精精品中文字幕早川悠里| 久久97超碰国产精品超碰| 久久蜜桃av一区精品变态类天堂 | 日精品一区二区| 91精品国产综合久久久久久漫画| 日韩av一二三| 国产色综合一区| 色先锋久久av资源部| 日韩中文字幕91| 久久久久久黄色| 色老综合老女人久久久| 日日摸夜夜添夜夜添精品视频| 欧美精品一区男女天堂| 成人深夜福利app| 亚洲一区二区在线视频| 日韩欧美国产1| 91农村精品一区二区在线| 婷婷成人激情在线网| 久久久99久久| 欧美伊人久久大香线蕉综合69| 捆绑变态av一区二区三区|