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

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

?? device.c

?? GRUB 0.93的源代碼。有人說可以當一個很小的操作系統了
?? C
?? 第 1 頁 / 共 2 頁
字號:
static intread_device_map (FILE *fp, char **map, const char *map_file){  static void show_error (int no, const char *msg)    {      fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg);    }    /* If there is the device map file, use the data in it instead of     probing devices.  */  char buf[1024];		/* XXX */  int line_number = 0;    while (fgets (buf, sizeof (buf), fp))    {      char *ptr, *eptr;      int drive;      int is_floppy = 0;            /* Increase the number of lines.  */      line_number++;            /* If the first character is '#', skip it.  */      if (buf[0] == '#')	continue;            ptr = buf;      /* Skip leading spaces.  */      while (*ptr && isspace (*ptr))	ptr++;      /* Skip empty lines.  */      if (! *ptr)	continue;            if (*ptr != '(')	{	  show_error (line_number, "No open parenthesis found");	  return 0;	}            ptr++;      if ((*ptr != 'f' && *ptr != 'h') || *(ptr + 1) != 'd')	{	  show_error (line_number, "Bad drive name");	  return 0;	}            if (*ptr == 'f')	is_floppy = 1;            ptr += 2;      drive = strtoul (ptr, &ptr, 10);      if (drive < 0 || drive > 8)	{	  show_error (line_number, "Bad device number");	  return 0;	}            if (! is_floppy)	drive += 0x80;            if (*ptr != ')')	{	  show_error (line_number, "No close parenthesis found");	  return 0;	}            ptr++;      /* Skip spaces.  */      while (*ptr && isspace (*ptr))	ptr++;            if (! *ptr)	{	  show_error (line_number, "No filename found");	  return 0;	}            /* Terminate the filename.  */      eptr = ptr;      while (*eptr && ! isspace (*eptr))	eptr++;      *eptr = 0;      /* Multiple entries for a given drive is not allowed.  */      if (map[drive])	{	  show_error (line_number, "Duplicated entry found");	  return 0;	}            map[drive] = strdup (ptr);      assert (map[drive]);    }    return 1;}/* Initialize the device map MAP. *MAP will be allocated from the heap   space. If MAP_FILE is not NULL, then read mappings from the file   MAP_FILE if it exists, otherwise, write guessed mappings to the file.   FLOPPY_DISKS is the number of floppy disk drives which will be probed.   If it is zero, don't probe any floppy at all. If it is one, probe one   floppy. If it is two, probe two floppies. And so on.  */intinit_device_map (char ***map, const char *map_file, int floppy_disks){  int i;  int num_hd = 0;  FILE *fp = 0;  assert (map);  assert (*map == 0);  *map = malloc (NUM_DISKS * sizeof (char *));  assert (*map);    /* Probe devices for creating the device map.  */    /* Initialize DEVICE_MAP.  */  for (i = 0; i < NUM_DISKS; i++)    (*map)[i] = 0;    if (map_file)    {      /* Open the device map file.  */      fp = fopen (map_file, "r");      if (fp)	{	  int ret;	  ret = read_device_map (fp, *map, map_file);	  fclose (fp);	  return ret;	}    }    /* Print something so that the user does not think GRUB has been     crashed.  */  fprintf (stderr,	   "Probing devices to guess BIOS drives. "	   "This may take a long time.\n");    if (map_file)    /* Try to open the device map file to write the probed data.  */    fp = fopen (map_file, "w");    /* Floppies.  */  for (i = 0; i < floppy_disks; i++)    {      char name[16];            get_floppy_disk_name (name, i);      /* In floppies, write the map, whether check_device succeeds	 or not, because the user just does not insert floppies.  */      if (fp)	fprintf (fp, "(fd%d)\t%s\n", i, name);            if (check_device (name))	{	  (*map)[i] = strdup (name);	  assert ((*map)[i]);	}    }  #ifdef __linux__  if (have_devfs ())    {      while (1)	{	  char discn[32];	  char name[PATH_MAX];	  struct stat st;	  /* Linux creates symlinks "/dev/discs/discN" for convenience.	     The way to number disks is the same as GRUB's.  */	  sprintf (discn, "/dev/discs/disc%d", num_hd);	  if (stat (discn, &st) < 0)	    break;	  	  if (realpath (discn, name))	    {	      strcat (name, "/disc");	      (*map)[num_hd + 0x80] = strdup (name);	      assert ((*map)[num_hd + 0x80]);	      	      /* If the device map file is opened, write the map.  */	      if (fp)		fprintf (fp, "(hd%d)\t%s\n", num_hd, name);	    }	  	  num_hd++;	}            /* OK, close the device map file if opened.  */      if (fp)	fclose (fp);            return 1;    }#endif /* __linux__ */      /* IDE disks.  */  for (i = 0; i < 8; i++)    {      char name[16];            get_ide_disk_name (name, i);      if (check_device (name))	{	  (*map)[num_hd + 0x80] = strdup (name);	  assert ((*map)[num_hd + 0x80]);	  	  /* If the device map file is opened, write the map.  */	  if (fp)	    fprintf (fp, "(hd%d)\t%s\n", num_hd, name);	  	  num_hd++;	}    }    /* The rest is SCSI disks.  */  for (i = 0; i < 16; i++)    {      char name[16];            get_scsi_disk_name (name, i);      if (check_device (name))	{	  (*map)[num_hd + 0x80] = strdup (name);	  assert ((*map)[num_hd + 0x80]);	  	  /* If the device map file is opened, write the map.  */	  if (fp)	    fprintf (fp, "(hd%d)\t%s\n", num_hd, name);	  	  num_hd++;	}    }  #ifdef __linux__  /* This is for DAC960 - we have     /dev/rd/c<controller>d<logical drive>p<partition>.          DAC960 driver currently supports up to 8 controllers, 32 logical     drives, and 7 partitions.  */  {    int controller, drive;        for (controller = 0; controller < 8; controller++)      {	for (drive = 0; drive < 15; drive++)	  {	    char name[24];	    	    get_dac960_disk_name (name, controller, drive);	    if (check_device (name))	      {		(*map)[num_hd + 0x80] = strdup (name);		assert ((*map)[num_hd + 0x80]);				/* If the device map file is opened, write the map.  */		if (fp)		  fprintf (fp, "(hd%d)\t%s\n", num_hd, name);				num_hd++;	      }	  }      }  }#endif /* __linux__ */    /* OK, close the device map file if opened.  */  if (fp)    fclose (fp);  return 1;}/* Restore the memory consumed for MAP.  */voidrestore_device_map (char **map){  int i;  for (i = 0; i < NUM_DISKS; i++)    if (map[i])      free (map[i]);  free (map);}#ifdef __linux__/* Linux-only function, because Linux has a bug that the disk cache for   a whole disk is not consistent with the one for a partition of the   disk.  */intwrite_to_partition (char **map, int drive, int partition,		    int sector, int size, const char *buf){  char dev[PATH_MAX];	/* XXX */  int fd;    if ((partition & 0x00FF00) != 0x00FF00)    {      /* If the partition is a BSD partition, it is difficult to	 obtain the representation in Linux. So don't support that.  */      errnum = ERR_DEV_VALUES;      return 1;    }    assert (map[drive] != 0);    strcpy (dev, map[drive]);  if (have_devfs ())    {      if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)	strcpy (dev + strlen(dev) - 5, "/part");    }  sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);    /* Open the partition.  */  fd = open (dev, O_RDWR);  if (fd < 0)    {      errnum = ERR_NO_PART;      return 0;    }  #if defined(__linux__) && (!defined(__GLIBC__) || \        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))  /* Maybe libc doesn't have large file support.  */  {    loff_t offset, result;    static int _llseek (uint filedes, ulong hi, ulong lo,                        loff_t *res, uint wh);    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,               loff_t *, res, uint, wh);    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))      {	errnum = ERR_DEV_VALUES;	return 0;      }  }#else  {    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;    if (lseek (fd, offset, SEEK_SET) != offset)      {	errnum = ERR_DEV_VALUES;	return 0;      }  }#endif    if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE))    {      close (fd);      errnum = ERR_WRITE;      return 0;    }    sync ();	/* Paranoia.  */  close (fd);    return 1;}#endif /* __linux__ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲伊人色欲综合网| 亚洲最新在线观看| 久久狠狠亚洲综合| 欧美www视频| 国产精品原创巨作av| 国产三级久久久| 成人动漫精品一区二区| 亚洲日本韩国一区| 26uuu国产电影一区二区| 美女脱光内衣内裤视频久久网站 | 欧美放荡的少妇| 日韩在线卡一卡二| 久久新电视剧免费观看| 国产河南妇女毛片精品久久久| 久久久久久**毛片大全| 91色九色蝌蚪| 精品一区二区综合| 中文字幕日本乱码精品影院| 在线亚洲精品福利网址导航| 午夜精品久久久久久久久久| 精品欧美一区二区在线观看 | 国产福利电影一区二区三区| 亚洲人xxxx| 日韩一区二区电影在线| 成人综合激情网| 亚洲一级不卡视频| 久久久久久久综合日本| 91论坛在线播放| 日本视频免费一区| 国产精品久久久久久久久果冻传媒| 一本到高清视频免费精品| 日韩高清在线不卡| 国产精品你懂的在线| 91精品国产一区二区三区| 国产91露脸合集magnet| 五月综合激情婷婷六月色窝| 久久亚洲捆绑美女| 欧美午夜一区二区| 岛国精品一区二区| 热久久一区二区| 亚洲人午夜精品天堂一二香蕉| 日韩一区二区在线看片| 白白色亚洲国产精品| 青青青伊人色综合久久| 一区二区高清视频在线观看| 久久亚洲精精品中文字幕早川悠里 | 国产亚洲污的网站| 91麻豆.com| 国产激情一区二区三区| caoporn国产一区二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品在线免费观看视频| 91麻豆精品在线观看| 国产一区二区三区av电影| 亚洲va天堂va国产va久| 中文字幕av在线一区二区三区| 欧美日韩国产精选| 91久久精品一区二区三| 成人激情小说乱人伦| 久久精品国产亚洲aⅴ| 亚洲va国产天堂va久久en| 国产精品污网站| 精品av久久707| 日韩视频一区二区三区在线播放| 欧美特级限制片免费在线观看| 精品一区二区三区在线观看国产| 亚洲图片有声小说| 亚洲欧美经典视频| 国产精品欧美一区喷水| 久久久久久亚洲综合| 日韩欧美不卡在线观看视频| 欧美高清www午色夜在线视频| 色综合激情五月| 91论坛在线播放| 色8久久人人97超碰香蕉987| 91丨九色丨黑人外教| 不卡区在线中文字幕| 99热这里都是精品| 色综合久久中文字幕| 97久久精品人人做人人爽| 99re视频精品| 91国产丝袜在线播放| 色综合天天综合网天天狠天天| 91蜜桃传媒精品久久久一区二区| 91网站黄www| 欧美亚洲尤物久久| 91精品免费在线观看| 精品剧情在线观看| 久久精品一区蜜桃臀影院| 久久精品人人爽人人爽| 国产精品久久久久久久第一福利 | www国产亚洲精品久久麻豆| 欧美成人伊人久久综合网| 制服.丝袜.亚洲.中文.综合| 欧美一级理论片| 久久久不卡网国产精品一区| 国产三级久久久| 樱桃视频在线观看一区| 琪琪久久久久日韩精品| 国产在线精品一区二区不卡了| 国产91在线观看| 久久精品在线观看| 玉米视频成人免费看| 日本最新不卡在线| 久久精品99国产精品| bt欧美亚洲午夜电影天堂| 在线免费观看视频一区| 日韩一级大片在线观看| 久久久不卡网国产精品二区| 亚洲欧美日韩国产另类专区| 五月激情综合色| 国产精选一区二区三区| 日本高清免费不卡视频| 欧美一卡在线观看| 中文字幕欧美一| 亚洲成av人片在线| 国产盗摄视频一区二区三区| 91色porny蝌蚪| 精品国产一区二区三区四区四 | 天天操天天干天天综合网| 国产一区二区日韩精品| 欧美在线免费视屏| 亚洲精品在线三区| 亚洲香蕉伊在人在线观| 激情都市一区二区| 欧美性xxxxxxxx| 久久久久国产成人精品亚洲午夜| 亚洲在线视频免费观看| 国产成人精品一区二| 欧美疯狂性受xxxxx喷水图片| 国产三级三级三级精品8ⅰ区| 亚洲欧美日韩久久| 国产精品99久久久久久似苏梦涵| 91麻豆免费视频| 国产亚洲欧美日韩俺去了| 亚洲国产aⅴ天堂久久| 国产999精品久久| 欧美精品丝袜中出| 中文字幕日韩av资源站| 国产精品自产自拍| 欧美一区二区三区影视| 亚洲一区二区美女| 99精品欧美一区二区蜜桃免费| 欧美一区午夜视频在线观看| 亚洲男人的天堂av| 成人激情黄色小说| 欧美精品一区二区三区很污很色的 | 国产精品乱码一区二三区小蝌蚪| 亚洲六月丁香色婷婷综合久久 | 亚洲免费av高清| 国产91精品露脸国语对白| 日韩精品一区二区三区在线| 亚洲高清久久久| 色婷婷香蕉在线一区二区| 中文字幕视频一区| 国产高清不卡一区| 欧美精品一区二区三区高清aⅴ| 亚洲bdsm女犯bdsm网站| 欧美午夜精品久久久久久超碰| 国产精品福利影院| 国模娜娜一区二区三区| 26uuu亚洲综合色| 精品无人码麻豆乱码1区2区 | 色88888久久久久久影院野外| 国产欧美日韩视频在线观看| 国产成人综合在线| 久久久精品国产免费观看同学| 国内成人免费视频| 久久综合色天天久久综合图片| 国内精品久久久久影院色| 欧美va日韩va| 国产一区二区三区日韩| 国产亚洲精品资源在线26u| 韩国成人精品a∨在线观看| 久久先锋资源网| 国产白丝网站精品污在线入口| 久久亚洲精精品中文字幕早川悠里| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩欧美中文字幕制服| 精品一区二区三区在线观看国产| 日韩欧美你懂的| 狠狠色2019综合网| 久久久久久久免费视频了| 成人va在线观看| 一区二区视频在线看| 91国产福利在线| 日韩激情一二三区| 欧美不卡视频一区| 国产精品正在播放| 亚洲欧美激情视频在线观看一区二区三区| www.久久久久久久久| 一区二区三区中文免费| 欧美大片顶级少妇| 成人网页在线观看| 亚洲一区二区三区国产| 精品国产乱码91久久久久久网站| 精品一区二区免费看| 亚洲欧美一区二区三区国产精品 | 床上的激情91.| 夜夜精品浪潮av一区二区三区|