init: Move mtd functions from init.c to util.c
Change-Id: I04e8f0ae6cc88af974372872e5617d16e0b1a2c8
This commit is contained in:
parent
31712beaf7
commit
f24ed8ca0a
72
init/init.c
72
init/init.c
|
@ -486,78 +486,6 @@ void handle_control_message(const char *msg, const char *arg)
|
|||
}
|
||||
}
|
||||
|
||||
#define MAX_MTD_PARTITIONS 16
|
||||
|
||||
static struct {
|
||||
char name[16];
|
||||
int number;
|
||||
} mtd_part_map[MAX_MTD_PARTITIONS];
|
||||
|
||||
static int mtd_part_count = -1;
|
||||
|
||||
static void find_mtd_partitions(void)
|
||||
{
|
||||
int fd;
|
||||
char buf[1024];
|
||||
char *pmtdbufp;
|
||||
ssize_t pmtdsize;
|
||||
int r;
|
||||
|
||||
fd = open("/proc/mtd", O_RDONLY);
|
||||
if (fd < 0)
|
||||
return;
|
||||
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
pmtdsize = read(fd, buf, sizeof(buf) - 1);
|
||||
pmtdbufp = buf;
|
||||
while (pmtdsize > 0) {
|
||||
int mtdnum, mtdsize, mtderasesize;
|
||||
char mtdname[16];
|
||||
mtdname[0] = '\0';
|
||||
mtdnum = -1;
|
||||
r = sscanf(pmtdbufp, "mtd%d: %x %x %15s",
|
||||
&mtdnum, &mtdsize, &mtderasesize, mtdname);
|
||||
if ((r == 4) && (mtdname[0] == '"')) {
|
||||
char *x = strchr(mtdname + 1, '"');
|
||||
if (x) {
|
||||
*x = 0;
|
||||
}
|
||||
INFO("mtd partition %d, %s\n", mtdnum, mtdname + 1);
|
||||
if (mtd_part_count < MAX_MTD_PARTITIONS) {
|
||||
strcpy(mtd_part_map[mtd_part_count].name, mtdname + 1);
|
||||
mtd_part_map[mtd_part_count].number = mtdnum;
|
||||
mtd_part_count++;
|
||||
} else {
|
||||
ERROR("too many mtd partitions\n");
|
||||
}
|
||||
}
|
||||
while (pmtdsize > 0 && *pmtdbufp != '\n') {
|
||||
pmtdbufp++;
|
||||
pmtdsize--;
|
||||
}
|
||||
if (pmtdsize > 0) {
|
||||
pmtdbufp++;
|
||||
pmtdsize--;
|
||||
}
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int mtd_name_to_number(const char *name)
|
||||
{
|
||||
int n;
|
||||
if (mtd_part_count < 0) {
|
||||
mtd_part_count = 0;
|
||||
find_mtd_partitions();
|
||||
}
|
||||
for (n = 0; n < mtd_part_count; n++) {
|
||||
if (!strcmp(name, mtd_part_map[n].name)) {
|
||||
return mtd_part_map[n].number;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void import_kernel_nv(char *name, int in_qemu)
|
||||
{
|
||||
char *value = strchr(name, '=');
|
||||
|
|
71
init/util.c
71
init/util.c
|
@ -209,3 +209,74 @@ void list_remove(struct listnode *item)
|
|||
item->prev->next = item->next;
|
||||
}
|
||||
|
||||
#define MAX_MTD_PARTITIONS 16
|
||||
|
||||
static struct {
|
||||
char name[16];
|
||||
int number;
|
||||
} mtd_part_map[MAX_MTD_PARTITIONS];
|
||||
|
||||
static int mtd_part_count = -1;
|
||||
|
||||
static void find_mtd_partitions(void)
|
||||
{
|
||||
int fd;
|
||||
char buf[1024];
|
||||
char *pmtdbufp;
|
||||
ssize_t pmtdsize;
|
||||
int r;
|
||||
|
||||
fd = open("/proc/mtd", O_RDONLY);
|
||||
if (fd < 0)
|
||||
return;
|
||||
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
pmtdsize = read(fd, buf, sizeof(buf) - 1);
|
||||
pmtdbufp = buf;
|
||||
while (pmtdsize > 0) {
|
||||
int mtdnum, mtdsize, mtderasesize;
|
||||
char mtdname[16];
|
||||
mtdname[0] = '\0';
|
||||
mtdnum = -1;
|
||||
r = sscanf(pmtdbufp, "mtd%d: %x %x %15s",
|
||||
&mtdnum, &mtdsize, &mtderasesize, mtdname);
|
||||
if ((r == 4) && (mtdname[0] == '"')) {
|
||||
char *x = strchr(mtdname + 1, '"');
|
||||
if (x) {
|
||||
*x = 0;
|
||||
}
|
||||
INFO("mtd partition %d, %s\n", mtdnum, mtdname + 1);
|
||||
if (mtd_part_count < MAX_MTD_PARTITIONS) {
|
||||
strcpy(mtd_part_map[mtd_part_count].name, mtdname + 1);
|
||||
mtd_part_map[mtd_part_count].number = mtdnum;
|
||||
mtd_part_count++;
|
||||
} else {
|
||||
ERROR("too many mtd partitions\n");
|
||||
}
|
||||
}
|
||||
while (pmtdsize > 0 && *pmtdbufp != '\n') {
|
||||
pmtdbufp++;
|
||||
pmtdsize--;
|
||||
}
|
||||
if (pmtdsize > 0) {
|
||||
pmtdbufp++;
|
||||
pmtdsize--;
|
||||
}
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int mtd_name_to_number(const char *name)
|
||||
{
|
||||
int n;
|
||||
if (mtd_part_count < 0) {
|
||||
mtd_part_count = 0;
|
||||
find_mtd_partitions();
|
||||
}
|
||||
for (n = 0; n < mtd_part_count; n++) {
|
||||
if (!strcmp(name, mtd_part_map[n].name)) {
|
||||
return mtd_part_map[n].number;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue