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

SVN-Revision: 15429
master
Jo-Philipp Wich 16 years ago
parent 2d9c80b60f
commit 0f3ccb8868
  1. 2
      package/unvram/Makefile
  2. 29
      package/unvram/src/nvram.c
  3. 2
      package/unvram/src/nvram.h

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

@ -409,6 +409,7 @@ const char * nvram_find_mtd(void)
int i, esz;
char dev[PATH_MAX];
char *path = NULL;
struct stat s;
// "/dev/mtdblock/" + ( 0 < x < 99 ) + \0 = 19
if( (path = (char *) malloc(19)) == NULL )
@ -416,12 +417,30 @@ const char * nvram_find_mtd(void)
if ((fp = fopen("/proc/mtd", "r"))) {
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;
}
}
}
}
}

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

Loading…
Cancel
Save