[Crosstoolchain-logs] [device-tree-compiler] 56/357: libfdt: Factor out string search function

Hector Oron zumbi at moszumanska.debian.org
Thu Dec 8 17:05:48 UTC 2016


This is an automated email from the git hooks/post-receive script.

zumbi pushed a commit to branch upstream/1.3.x
in repository device-tree-compiler.

commit aeddfe2c34c88c386749334746e4016431d10952
Author: David Gibson <dgibson at sneetch.(none)>
Date:   Fri Dec 1 15:11:58 2006 +1100

    libfdt: Factor out string search function
    
    This patch pulls out the logic for finding a string in the string table
    into _fdt_find_string(), from fdt_sw.c's find_add_string().  This function
    will be useful for random-access read-write functions.  In the process
    clean up the search logic a little.
---
 fdt.c             | 12 ++++++++++++
 fdt_sw.c          | 13 ++++---------
 libfdt_internal.h |  2 +-
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/fdt.c b/fdt.c
index 0c1a5f0..d3844fc 100644
--- a/fdt.c
+++ b/fdt.c
@@ -92,6 +92,18 @@ uint32_t _fdt_next_tag(const struct fdt_header *fdt, int offset, int *nextoffset
 	return tag;
 }
 
+const char *_fdt_find_string(const char *strtab, int tabsize, const char *s)
+{
+	int len = strlen(s) + 1;
+	const char *last = strtab + tabsize - len;
+	const char *p;
+
+	for (p = strtab; p <= last; p++)
+		if (memeq(p, s, len))
+			return p;
+	return NULL;
+}
+
 struct fdt_header *fdt_move(const struct fdt_header *fdt, void *buf, int bufsize)
 {
 	int err = _fdt_check_header(fdt);
diff --git a/fdt_sw.c b/fdt_sw.c
index b2545b9..89abacb 100644
--- a/fdt_sw.c
+++ b/fdt_sw.c
@@ -131,19 +131,14 @@ int fdt_end_node(struct fdt_header *fdt)
 static int find_add_string(struct fdt_header *fdt, const char *s)
 {
 	char *strtab = (char *)fdt + fdt_totalsize(fdt);
+	const char *p;
 	int strtabsize = fdt_size_dt_strings(fdt);
 	int len = strlen(s) + 1;
 	int struct_top, offset;
 
-	/* We treat string offsets as negative from the end of our buffer */
-	/* then fix them up in fdt_finish() */
-	offset = -strtabsize;
-	while ((offset < 0) && (memcmp(strtab + offset, s, len) != 0))
-		offset++;
-
-	if (offset < 0)
-		/* Found it */
-		return offset;
+	p = _fdt_find_string(strtab - strtabsize, strtabsize, s);
+	if (p)
+		return p - strtab;
 
 	/* Add it */
 	offset = -strtabsize - len;
diff --git a/libfdt_internal.h b/libfdt_internal.h
index 91361c2..96f5fa8 100644
--- a/libfdt_internal.h
+++ b/libfdt_internal.h
@@ -30,7 +30,7 @@ int _fdt_check_header(const struct fdt_header *fdt);
 uint32_t _fdt_next_tag(const struct fdt_header *fdt, int startoffset, int *nextoffset);
 struct fdt_property *_fdt_getprop(const struct fdt_header *fdt, int nodeoffset,
 				  const char *name, int *lenp);
-
+const char *_fdt_find_string(const char *strtab, int tabsize, const char *s);
 
 #define OFFSET_ERROR(code)	-(code)
 #define PTR_ERROR(code)		(void *)(-(code))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/crosstoolchain/device-tree-compiler.git



More information about the Crosstoolchain-logs mailing list