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

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

?? fw_env.c

?? Universal Bootloader which support OMAP2420.
?? C
?? 第 1 頁 / 共 2 頁
字號:
static int flash_io (int mode){	int fd, fdr, rc, otherdev, len, resid;	erase_info_t erase;	char *data = NULL;	if ((fd = open (DEVNAME (curdev), mode)) < 0) {		fprintf (stderr,			"Can't open %s: %s\n",			DEVNAME (curdev), strerror (errno));		return (-1);	}	len = sizeof (environment.crc);	if (HaveRedundEnv) {		len += sizeof (environment.flags);	}	if (mode == O_RDWR) {		if (HaveRedundEnv) {			/* switch to next partition for writing */			otherdev = !curdev;			if ((fdr = open (DEVNAME (otherdev), mode)) < 0) {				fprintf (stderr,					"Can't open %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}		} else {			otherdev = curdev;			fdr = fd;		}		printf ("Unlocking flash...\n");		erase.length = DEVESIZE (otherdev);		erase.start = DEVOFFSET (otherdev);		ioctl (fdr, MEMUNLOCK, &erase);		if (HaveRedundEnv) {			erase.length = DEVESIZE (curdev);			erase.start = DEVOFFSET (curdev);			ioctl (fd, MEMUNLOCK, &erase);			environment.flags = active_flag;		}		printf ("Done\n");		resid = DEVESIZE (otherdev) - CFG_ENV_SIZE;		if (resid) {			if ((data = malloc (resid)) == NULL) {				fprintf (stderr,					"Cannot malloc %d bytes: %s\n",					resid,					strerror (errno));				return (-1);			}			if (lseek (fdr, DEVOFFSET (otherdev) + CFG_ENV_SIZE, SEEK_SET)				== -1) {				fprintf (stderr, "seek error on %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}			if ((rc = read (fdr, data, resid)) != resid) {				fprintf (stderr,					"read error on %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}		}		printf ("Erasing old environment...\n");		erase.length = DEVESIZE (otherdev);		erase.start = DEVOFFSET (otherdev);		if (ioctl (fdr, MEMERASE, &erase) != 0) {			fprintf (stderr, "MTD erase error on %s: %s\n",				DEVNAME (otherdev),				strerror (errno));			return (-1);		}		printf ("Done\n");		printf ("Writing environment to %s...\n", DEVNAME (otherdev));		if (lseek (fdr, DEVOFFSET (otherdev), SEEK_SET) == -1) {			fprintf (stderr,				"seek error on %s: %s\n",				DEVNAME (otherdev), strerror (errno));			return (-1);		}		if (write (fdr, &environment, len) != len) {			fprintf (stderr,				"CRC write error on %s: %s\n",				DEVNAME (otherdev), strerror (errno));			return (-1);		}		if (write (fdr, environment.data, ENV_SIZE) != ENV_SIZE) {			fprintf (stderr,				"Write error on %s: %s\n",				DEVNAME (otherdev), strerror (errno));			return (-1);		}		if (resid) {			if (write (fdr, data, resid) != resid) {				fprintf (stderr,					"write error on %s: %s\n",					DEVNAME (curdev), strerror (errno));				return (-1);			}			free (data);		}		if (HaveRedundEnv) {			/* change flag on current active env partition */			if (lseek (fd, DEVOFFSET (curdev) + sizeof (ulong), SEEK_SET)				== -1) {				fprintf (stderr, "seek error on %s: %s\n",					DEVNAME (curdev), strerror (errno));				return (-1);			}			if (write (fd, &obsolete_flag, sizeof (obsolete_flag)) !=				sizeof (obsolete_flag)) {				fprintf (stderr,					"Write error on %s: %s\n",					DEVNAME (curdev), strerror (errno));				return (-1);			}		}		printf ("Done\n");		printf ("Locking ...\n");		erase.length = DEVESIZE (otherdev);		erase.start = DEVOFFSET (otherdev);		ioctl (fdr, MEMLOCK, &erase);		if (HaveRedundEnv) {			erase.length = DEVESIZE (curdev);			erase.start = DEVOFFSET (curdev);			ioctl (fd, MEMLOCK, &erase);			if (close (fdr)) {				fprintf (stderr,					"I/O error on %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}		}		printf ("Done\n");	} else {		if (lseek (fd, DEVOFFSET (curdev), SEEK_SET) == -1) {			fprintf (stderr,				"seek error on %s: %s\n",				DEVNAME (curdev), strerror (errno));			return (-1);		}		if (read (fd, &environment, len) != len) {			fprintf (stderr,				"CRC read error on %s: %s\n",				DEVNAME (curdev), strerror (errno));			return (-1);		}		if ((rc = read (fd, environment.data, ENV_SIZE)) != ENV_SIZE) {			fprintf (stderr,				"Read error on %s: %s\n",				DEVNAME (curdev), strerror (errno));			return (-1);		}	}	if (close (fd)) {		fprintf (stderr,			"I/O error on %s: %s\n",			DEVNAME (curdev), strerror (errno));		return (-1);	}	/* everything ok */	return (0);}/* * s1 is either a simple 'name', or a 'name=value' pair. * s2 is a 'name=value' pair. * If the names match, return the value of s2, else NULL. */static uchar *envmatch (uchar * s1, uchar * s2){	while (*s1 == *s2++)		if (*s1++ == '=')			return (s2);	if (*s1 == '\0' && *(s2 - 1) == '=')		return (s2);	return (NULL);}/* * Prevent confusion if running from erased flash memory */static int env_init (void){	int crc1, crc1_ok;	uchar *addr1;	int crc2, crc2_ok;	uchar flag1, flag2, *addr2;	if (parse_config ())		/* should fill envdevices */		return 1;	if ((addr1 = calloc (1, ENV_SIZE)) == NULL) {		fprintf (stderr,			"Not enough memory for environment (%ld bytes)\n",			ENV_SIZE);		return (errno);	}	/* read environment from FLASH to local buffer */	environment.data = addr1;	curdev = 0;	if (flash_io (O_RDONLY)) {		return (errno);	}	crc1_ok = ((crc1 = crc32 (0, environment.data, ENV_SIZE))			   == environment.crc);	if (!HaveRedundEnv) {		if (!crc1_ok) {			fprintf (stderr,				"Warning: Bad CRC, using default environment\n");			environment.data = default_environment;			free (addr1);		}	} else {		flag1 = environment.flags;		curdev = 1;		if ((addr2 = calloc (1, ENV_SIZE)) == NULL) {			fprintf (stderr,				"Not enough memory for environment (%ld bytes)\n",				ENV_SIZE);			return (errno);		}		environment.data = addr2;		if (flash_io (O_RDONLY)) {			return (errno);		}		crc2_ok = ((crc2 = crc32 (0, environment.data, ENV_SIZE))				   == environment.crc);		flag2 = environment.flags;		if (crc1_ok && !crc2_ok) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (!crc1_ok && crc2_ok) {			environment.data = addr2;			environment.flags = flag2;			environment.crc = crc2;			curdev = 1;			free (addr1);		} else if (!crc1_ok && !crc2_ok) {			fprintf (stderr,				"Warning: Bad CRC, using default environment\n");			environment.data = default_environment;			curdev = 0;			free (addr2);			free (addr1);		} else if (flag1 == active_flag && flag2 == obsolete_flag) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (flag1 == obsolete_flag && flag2 == active_flag) {			environment.data = addr2;			environment.flags = flag2;			environment.crc = crc2;			curdev = 1;			free (addr1);		} else if (flag1 == flag2) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (flag1 == 0xFF) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (flag2 == 0xFF) {			environment.data = addr2;			environment.flags = flag2;			environment.crc = crc2;			curdev = 1;			free (addr1);		}	}	return (0);}static int parse_config (){	struct stat st;#if defined(CONFIG_FILE)	/* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */	if (get_config (CONFIG_FILE)) {		fprintf (stderr,			"Cannot parse config file: %s\n", strerror (errno));		return 1;	}#else	strcpy (DEVNAME (0), DEVICE1_NAME);	DEVOFFSET (0) = DEVICE1_OFFSET;	ENVSIZE (0) = ENV1_SIZE;	DEVESIZE (0) = DEVICE1_ESIZE;#ifdef HAVE_REDUND	strcpy (DEVNAME (1), DEVICE2_NAME);	DEVOFFSET (1) = DEVICE2_OFFSET;	ENVSIZE (1) = ENV2_SIZE;	DEVESIZE (1) = DEVICE2_ESIZE;	HaveRedundEnv = 1;#endif#endif	if (stat (DEVNAME (0), &st)) {		fprintf (stderr,			"Cannot access MTD device %s: %s\n",			DEVNAME (0), strerror (errno));		return 1;	}	if (HaveRedundEnv && stat (DEVNAME (1), &st)) {		fprintf (stderr,			"Cannot access MTD device %s: %s\n",			DEVNAME (2), strerror (errno));		return 1;	}	return 0;}#if defined(CONFIG_FILE)static int get_config (char *fname){	FILE *fp;	int i = 0;	int rc;	char dump[128];	if ((fp = fopen (fname, "r")) == NULL) {		return 1;	}	while ((i < 2) && ((rc = fscanf (fp, "%s %lx %lx %lx",				  DEVNAME (i),				  &DEVOFFSET (i),				  &ENVSIZE (i),				  &DEVESIZE (i)  )) != EOF)) {		/* Skip incomplete conversions and comment strings */		if ((rc < 3) || (*DEVNAME (i) == '#')) {			fgets (dump, sizeof (dump), fp);	/* Consume till end */			continue;		}		i++;	}	fclose (fp);	HaveRedundEnv = i - 1;	if (!i) {			/* No valid entries found */		errno = EINVAL;		return 1;	} else		return 0;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av资源| 男人的天堂亚洲一区| 中文字幕乱码一区二区免费| 日韩精品一区二区三区在线观看 | 国产精品午夜免费| 136国产福利精品导航| 亚洲人成在线观看一区二区| 亚洲人午夜精品天堂一二香蕉| 亚洲日本电影在线| 亚洲v精品v日韩v欧美v专区 | 欧美日韩aaa| 日韩亚洲欧美中文三级| 日韩一级视频免费观看在线| 久久久国产精品不卡| 亚洲黄色小说网站| 国产福利一区二区三区视频| aaa欧美日韩| 欧美一级免费观看| 中文字幕一区二区三区在线播放 | 国产精品进线69影院| 亚洲超丰满肉感bbw| 懂色av一区二区三区免费观看| 色吧成人激情小说| 国产午夜精品理论片a级大结局| 亚洲欧美日韩国产一区二区三区| 美女高潮久久久| 在线精品亚洲一区二区不卡| 国产无人区一区二区三区| 亚洲成在线观看| 在线中文字幕一区二区| 国产精品网友自拍| 国产黄色精品网站| 精品免费视频一区二区| 日韩精品每日更新| 在线不卡中文字幕| 午夜视频在线观看一区| 色噜噜偷拍精品综合在线| 日本一区免费视频| 高清av一区二区| ㊣最新国产の精品bt伙计久久| 国产一区二区三区av电影| 久久久久久黄色| 成人h精品动漫一区二区三区| 中文字幕av在线一区二区三区| 国产一区二区三区黄视频| 欧美大片国产精品| 国产精品99久久久久久久vr| 久久天堂av综合合色蜜桃网| 国产伦精一区二区三区| 国产精品成人网| 欧美三级欧美一级| 国产在线看一区| |精品福利一区二区三区| 欧美日韩dvd在线观看| 国产在线国偷精品产拍免费yy| 久久久久久久久97黄色工厂| 成人app在线| 午夜亚洲国产au精品一区二区| 精品国产sm最大网站免费看| 粗大黑人巨茎大战欧美成人| 尤物av一区二区| 精品国产百合女同互慰| av在线不卡免费看| 久久精品国产色蜜蜜麻豆| 亚洲精品乱码久久久久久日本蜜臀| 欧美日韩视频不卡| jlzzjlzz国产精品久久| 日产欧产美韩系列久久99| 国产精品久久久久9999吃药| 精品国产免费人成电影在线观看四季| 国产99久久精品| 精品一区二区成人精品| 亚洲一区二区三区中文字幕| 国产精品入口麻豆原神| 日韩欧美激情在线| 51精品视频一区二区三区| 色视频一区二区| 成人动漫一区二区在线| 国产精品资源在线观看| 国产精品综合视频| 国产乱子伦视频一区二区三区| 久久爱www久久做| 狠狠色丁香久久婷婷综合_中| 日韩黄色在线观看| 视频在线观看一区| 奇米色777欧美一区二区| 亚洲成人福利片| 日韩在线一区二区| 免费高清不卡av| 国产成人aaa| 色偷偷久久一区二区三区| eeuss鲁片一区二区三区| av亚洲产国偷v产偷v自拍| 99久久er热在这里只有精品66| av电影在线观看不卡| 91美女蜜桃在线| 在线成人小视频| 国产欧美综合在线| 亚洲已满18点击进入久久| 天天综合网天天综合色| 国产一区欧美二区| 色综合网色综合| 欧美大片国产精品| 最新成人av在线| 美女被吸乳得到大胸91| 99vv1com这只有精品| 91精品国产欧美一区二区成人| 国产视频视频一区| 午夜精品福利久久久| 精品美女在线观看| 欧美高清在线精品一区| 亚洲成在线观看| 91在线国产福利| 久久美女艺术照精彩视频福利播放| 国产精品家庭影院| 国产iv一区二区三区| 欧美一级免费大片| 亚洲成精国产精品女| 成人h精品动漫一区二区三区| 日韩一级高清毛片| 琪琪一区二区三区| 欧美性大战久久| 亚洲乱码国产乱码精品精98午夜 | 韩国av一区二区| 久久99蜜桃精品| 9久草视频在线视频精品| 久久只精品国产| 精品影院一区二区久久久| 日韩视频一区二区三区| 日韩av一级片| 欧美一级日韩一级| 麻豆国产一区二区| 精品久久五月天| 久久av老司机精品网站导航| 欧美一区二区性放荡片| 日韩中文字幕av电影| 欧美不卡在线视频| 国产一区二区女| 久久夜色精品一区| 成人激情黄色小说| 欧美色电影在线| 亚洲精选视频在线| 欧美美女一区二区三区| 日本美女一区二区三区视频| 欧美一区二区啪啪| 国产在线精品一区二区夜色| 精品粉嫩aⅴ一区二区三区四区| 激情综合网最新| 亚洲欧美一区二区视频| 欧美日韩小视频| 国产v综合v亚洲欧| 亚洲午夜精品17c| 久久午夜电影网| 欧美女孩性生活视频| 国产成人亚洲精品青草天美| 日韩美女视频一区| 亚洲精品在线一区二区| 色爱区综合激月婷婷| 香蕉加勒比综合久久| 色成年激情久久综合| 国产精品99久久久久久久vr| 自拍偷拍亚洲激情| 久久久天堂av| 日韩欧美一二三四区| 欧美日韩一区二区三区在线| 国产精品一区一区三区| 美女视频黄 久久| 亚洲国产精品久久久久婷婷884| 国产精品网友自拍| 中文字幕av一区二区三区高| 日韩欧美亚洲一区二区| 欧美日韩色综合| 欧美一区二区三区公司| 欧美亚洲动漫精品| 欧美日韩一区中文字幕| 欧美日韩中文一区| 欧美久久久久久久久| 日韩一二三四区| 日韩一区国产二区欧美三区| 国产一区二区看久久| 狠狠色狠狠色综合| 国产成人啪免费观看软件 | 91网站最新地址| 一本色道久久综合亚洲91| 欧美日韩一区二区在线视频| 欧美日韩精品欧美日韩精品一| 欧美日本不卡视频| 精品国精品国产| 中文字幕色av一区二区三区| 综合电影一区二区三区| 午夜欧美大尺度福利影院在线看 | 欧美主播一区二区三区美女| 欧美日韩激情在线| 久久婷婷一区二区三区| 亚洲另类在线一区| 欧美性受极品xxxx喷水| 欧美日韩高清一区二区不卡| 欧美一区二区三区免费| 国产日韩欧美激情| 亚洲成人动漫在线免费观看|