[DTC PATCH] Moved data_convert_cell() out of data.c to the parser.

Jon Loeliger jdl at jdl.com
Sat Feb 17 02:36:22 EST 2007


It constructs a cell_t, not data objects.
Renamed it to cell_from_string() as well.

Signed-off-by: Jon Loeliger <jdl at freescale.com>
---

I've updated the DTC repo on jdl.com to have these patches
applied to it now!


 data.c       |   20 --------------------
 dtc-parser.y |   30 +++++++++++++++++++++++++++---
 dtc.h        |    1 -
 3 files changed, 27 insertions(+), 24 deletions(-)

diff --git a/data.c b/data.c
index c6c2350..5d7db17 100644
--- a/data.c
+++ b/data.c
@@ -225,26 +225,6 @@ struct data data_merge(struct data d1, struct data d2)
 	return d;
 }
 
-/*
- * Convert a string representation of a numberic cell
- * in the given base into a cell.
- */
-cell_t data_convert_cell(char *s, unsigned int base)
-{
-	cell_t c;
-	extern YYLTYPE yylloc;
-
-	c = strtoul(s, NULL, base);
-	if (errno == EINVAL || errno == ERANGE) {
-		fprintf(stderr,
-			"Line %d: Invalid cell value '%s'; %d assumed\n",
-			yylloc.first_line, s, c);
-	}
-
-	return c;
-}
-
-
 struct data data_append_cell(struct data d, cell_t word)
 {
 	cell_t beword = cpu_to_be32(word);
diff --git a/dtc-parser.y b/dtc-parser.y
index 992fdb1..a8902fc 100644
--- a/dtc-parser.y
+++ b/dtc-parser.y
@@ -24,8 +24,9 @@
 %{
 #include "dtc.h"
 
-int yylex (void);
-void yyerror (char const *);
+int yylex(void);
+void yyerror(char const *);
+cell_t cell_from_string(char *s, unsigned int base);
 
 extern struct boot_info *the_boot_info;
 
@@ -144,7 +145,7 @@ opt_cell_base:
 
 celllist:	celllist opt_cell_base DT_CELL {
 			$$ = data_append_cell($1,
-					      data_convert_cell($3, $2));
+					      cell_from_string($3, $2));
 		}
 	|	celllist DT_REF	{
 			$$ = data_append_cell(data_add_fixup($1, $2), -1);
@@ -179,3 +180,26 @@ void yyerror (char const *s)
 {
 	fprintf (stderr, "%s at line %d\n", s, yylloc.first_line);
 }
+
+
+/*
+ * Convert a string representation of a numeric cell
+ * in the given base into a cell.
+ *
+ * FIXME: The string "abc123", base 10, should be flagged
+ *        as an error due to the leading "a", but isn't yet.
+ */
+
+cell_t cell_from_string(char *s, unsigned int base)
+{
+	cell_t c;
+
+	c = strtoul(s, NULL, base);
+	if (errno == EINVAL || errno == ERANGE) {
+		fprintf(stderr,
+			"Line %d: Invalid cell value '%s'; %d assumed\n",
+			yylloc.first_line, s, c);
+	}
+
+	return c;
+}
diff --git a/dtc.h b/dtc.h
index 7ee96a5..8d3964c 100644
--- a/dtc.h
+++ b/dtc.h
@@ -118,7 +118,6 @@ struct data data_copy_mem(char *mem, int len);
 struct data data_copy_escape_string(char *s, int len);
 struct data data_copy_file(FILE *f, size_t len);
 
-cell_t data_convert_cell(char *s, unsigned int base);
 struct data data_append_data(struct data d, void *p, int len);
 struct data data_merge(struct data d1, struct data d2);
 struct data data_append_cell(struct data d, cell_t word);
-- 
1.5.0.rc3.ge4b0e




More information about the Linuxppc-dev mailing list