diff options
Diffstat (limited to 'mtd.c')
-rw-r--r-- | mtd.c | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -0,0 +1,43 @@ +#define _GNU_SOURCE +#include <stdbool.h> +#include <stdio.h> +#include <string.h> + +#include "common.h" + +static bool is_pnor_part(const char *str) +{ + return strcasestr(str, "pnor") != NULL; +} + +char *get_dev_mtd(void) +{ + FILE *f; + char *ret = NULL, *pos = NULL; + char line[255]; + + f = fopen("/proc/mtd", "r"); + if (!f) + return NULL; + + while (!pos && fgets(line, sizeof(line), f) != NULL) { + /* Going to have issues if we didn't get the full line */ + if (line[strlen(line) - 1] != '\n') + break; + + if (is_pnor_part(line)) { + pos = strchr(line, ':'); + if (!pos) + break; + } + } + fclose(f); + + if (pos) { + *pos = '\0'; + if (asprintf(&ret, "/dev/%s", line) == -1) + ret = NULL; + } + + return ret; +} |