Browse Source

Moved data_convert_cell() out of data.c to the parser.

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

Signed-off-by: Jon Loeliger <jdl@freescale.com>
main
Jon Loeliger 18 years ago
parent
commit
3948849fd0
  1. 20
      data.c
  2. 30
      dtc-parser.y
  3. 1
      dtc.h

20
data.c

@ -225,26 +225,6 @@ struct data data_merge(struct data d1, struct data d2) @@ -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);

30
dtc-parser.y

@ -24,8 +24,9 @@ @@ -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: @@ -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) @@ -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;
}

1
dtc.h

@ -118,7 +118,6 @@ struct data data_copy_mem(char *mem, int len); @@ -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);

Loading…
Cancel
Save