mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-26 10:27:32 +02:00
b2/bom.c (bom_parse_line): check that components reference are unique
This commit is contained in:
parent
ddd22ba16c
commit
9445f2c85b
31
b2/bom.c
31
b2/bom.c
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
@ -22,17 +23,23 @@ struct bom *bom = NULL;
|
|||||||
int n_bom = 0;
|
int n_bom = 0;
|
||||||
|
|
||||||
|
|
||||||
|
static struct bom *bom_find(const char *ref)
|
||||||
|
{
|
||||||
|
struct bom *b;
|
||||||
|
|
||||||
|
for (b = bom; b != bom+n_bom; b++)
|
||||||
|
if (b->ref == ref)
|
||||||
|
return b;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct bom *bom_parse_line(const char *s)
|
struct bom *bom_parse_line(const char *s)
|
||||||
{
|
{
|
||||||
struct bom *b;
|
struct bom *b;
|
||||||
const char *t;
|
const char *ref, *t;
|
||||||
char *f;
|
char *f;
|
||||||
|
|
||||||
bom = realloc(bom, sizeof(struct bom)*(n_bom+1));
|
|
||||||
if (!bom)
|
|
||||||
abort();
|
|
||||||
b = bom+n_bom++;
|
|
||||||
|
|
||||||
if (*s++ != '|')
|
if (*s++ != '|')
|
||||||
abort();
|
abort();
|
||||||
while (*s == ' ' || *s == '\t')
|
while (*s == ' ' || *s == '\t')
|
||||||
@ -40,7 +47,17 @@ struct bom *bom_parse_line(const char *s)
|
|||||||
for (t = s+1; *t && !isspace(*t); t++);
|
for (t = s+1; *t && !isspace(*t); t++);
|
||||||
if (!*t)
|
if (!*t)
|
||||||
yyerror("invalid BOM record (1)\n");
|
yyerror("invalid BOM record (1)\n");
|
||||||
b->ref = stralloc_n(s, t-s);
|
|
||||||
|
ref = unique_n(s, t-s);
|
||||||
|
if (bom_find(ref))
|
||||||
|
yyerrorf("duplicate component reference %s", ref);
|
||||||
|
|
||||||
|
bom = realloc(bom, sizeof(struct bom)*(n_bom+1));
|
||||||
|
if (!bom)
|
||||||
|
abort();
|
||||||
|
b = bom+n_bom++;
|
||||||
|
|
||||||
|
b->ref = ref;
|
||||||
b->sym = NULL;
|
b->sym = NULL;
|
||||||
b->fields = NULL;
|
b->fields = NULL;
|
||||||
b->n_fields = 0;
|
b->n_fields = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user