diff --git a/components/drivers/ofw/base.c b/components/drivers/ofw/base.c index 8d629a9f671..75c5a7987fd 100644 --- a/components/drivers/ofw/base.c +++ b/components/drivers/ofw/base.c @@ -1051,9 +1051,9 @@ rt_err_t ofw_alias_scan(void) rt_ofw_foreach_prop(np, prop) { - int id = 0, rate = 1; + int id = 0; struct alias_info *info; - const char *name = prop->name, *end; + const char *name = prop->name, *end, *id_start; /* Maybe the bootloader will set the name, or other nodes reference the aliases */ if (!rt_strcmp(name, "name") || !rt_strcmp(name, "phandle")) @@ -1066,19 +1066,20 @@ rt_err_t ofw_alias_scan(void) continue; } - end = name + rt_strlen(name) - 1; + end = name + rt_strlen(name); - while (*end && !(*end >= '0' && *end <= '9') && end > name) + while (*(end - 1) && (*(end - 1) >= '0' && *(end - 1) <= '9') && end > name) { --end; } - while (*end && (*end >= '0' && *end <= '9')) + id_start = end; + while (*id_start && (*id_start >= '0' && *id_start <= '9')) { - id += (*end - '0') * rate; - rate *= 10; + id *= 10; + id += (*id_start - '0'); - ++end; + ++id_start; } info = rt_malloc(sizeof(*info)); @@ -1093,7 +1094,7 @@ rt_err_t ofw_alias_scan(void) info->id = id; info->tag = name; - info->tag_len = end - name - 1; + info->tag_len = end - name; info->np = tmp; rt_list_insert_after(&_aliases_nodes, &info->list);