Просмотр исходного кода

unvram: make it work on bcm47xx, also look for /dev/mtdblockX

SVN-Revision: 15429
Jo-Philipp Wich 17 лет назад
Родитель
Сommit
0f3ccb8868
3 измененных файлов с 25 добавлено и 8 удалено
  1. 1 1
      package/unvram/Makefile
  2. 24 5
      package/unvram/src/nvram.c
  3. 0 2
      package/unvram/src/nvram.h

+ 1 - 1
package/unvram/Makefile

@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 include $(TOPDIR)/rules.mk
 
 
 PKG_NAME:=unvram
 PKG_NAME:=unvram
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
 

+ 24 - 5
package/unvram/src/nvram.c

@@ -409,6 +409,7 @@ const char * nvram_find_mtd(void)
 	int i, esz;
 	int i, esz;
 	char dev[PATH_MAX];
 	char dev[PATH_MAX];
 	char *path = NULL;
 	char *path = NULL;
+	struct stat s;
 
 
 	// "/dev/mtdblock/" + ( 0 < x < 99 ) + \0 = 19
 	// "/dev/mtdblock/" + ( 0 < x < 99 ) + \0 = 19
 	if( (path = (char *) malloc(19)) == NULL )
 	if( (path = (char *) malloc(19)) == NULL )
@@ -416,12 +417,30 @@ const char * nvram_find_mtd(void)
 
 
 	if ((fp = fopen("/proc/mtd", "r"))) {
 	if ((fp = fopen("/proc/mtd", "r"))) {
 		while (fgets(dev, sizeof(dev), fp)) {
 		while (fgets(dev, sizeof(dev), fp)) {
-			if (strstr(dev, "nvram") && sscanf(dev, "mtd%d: %08x", &i, &esz)) {
-				if( (path = (char *) malloc(19)) != NULL )
+			if (strstr(dev, "nvram") && sscanf(dev, "mtd%d: %08x", &i, &esz))
+			{
+				nvram_erase_size = esz;
+
+				sprintf(dev, "/dev/mtdblock/%d", i);
+				if( stat(dev, &s) > -1 && (s.st_mode & S_IFBLK) )
+				{
+					if( (path = (char *) malloc(strlen(dev)+1)) != NULL )
+					{
+						strncpy(path, dev, strlen(dev)+1);
+						break;
+					}
+				}
+				else
 				{
 				{
-					nvram_erase_size = esz;
-					snprintf(path, 19, "/dev/mtdblock/%d", i);
-					break;
+					sprintf(dev, "/dev/mtdblock%d", i);
+					if( stat(dev, &s) > -1 && (s.st_mode & S_IFBLK) )
+					{
+						if( (path = (char *) malloc(strlen(dev)+1)) != NULL )
+						{
+							strncpy(path, dev, strlen(dev)+1);
+							break;
+						}
+					}
 				}
 				}
 			}
 			}
 		}
 		}

+ 0 - 2
package/unvram/src/nvram.h

@@ -24,8 +24,6 @@
 #include <errno.h>
 #include <errno.h>
 #include <sys/mman.h>
 #include <sys/mman.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <arpa/inet.h>
 #include <linux/limits.h>
 #include <linux/limits.h>
 
 
 #include "sdinitvals.h"
 #include "sdinitvals.h"