MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / fdt_get_path

Function fdt_get_path

components/drivers/ofw/libfdt/fdt_ro.c:542–592  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

540}
541
542int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
543{
544 int pdepth = 0, p = 0;
545 int offset, depth, namelen;
546 const char *name;
547
548 FDT_RO_PROBE(fdt);
549
550 if (buflen < 2)
551 return -FDT_ERR_NOSPACE;
552
553 for (offset = 0, depth = 0;
554 (offset >= 0) && (offset <= nodeoffset);
555 offset = fdt_next_node(fdt, offset, &depth)) {
556 while (pdepth > depth) {
557 do {
558 p--;
559 } while (buf[p-1] != '/');
560 pdepth--;
561 }
562
563 if (pdepth >= depth) {
564 name = fdt_get_name(fdt, offset, &namelen);
565 if (!name)
566 return namelen;
567 if ((p + namelen + 1) <= buflen) {
568 memcpy(buf + p, name, namelen);
569 p += namelen;
570 buf[p++] = '/';
571 pdepth++;
572 }
573 }
574
575 if (offset == nodeoffset) {
576 if (pdepth < (depth + 1))
577 return -FDT_ERR_NOSPACE;
578
579 if (p > 1) /* special case so that root path is "/", not "" */
580 p--;
581 buf[p] = '\0';
582 return 0;
583 }
584 }
585
586 if ((offset == -FDT_ERR_NOTFOUND) || (offset >= 0))
587 return -FDT_ERR_BADOFFSET;
588 else if (offset == -FDT_ERR_BADOFFSET)
589 return -FDT_ERR_BADSTRUCTURE;
590
591 return offset; /* error from fdt_next_node() */
592}
593
594int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
595 int supernodedepth, int *nodedepth)

Callers 1

overlay_symbol_updateFunction · 0.70

Calls 2

fdt_next_nodeFunction · 0.70
fdt_get_nameFunction · 0.70

Tested by

no test coverage detected