diff options
author | Martin Mares <mj@ucw.cz> | 1999-03-26 22:37:29 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1999-03-26 22:37:29 +0100 |
commit | 4ba84ebc8285c3a5c556fc769101cc29cb3d3708 (patch) | |
tree | a8f532314dbde727e7865e005863da28f58269c2 | |
parent | 241b7311ec5a091b7f3e1a1f2a776f3ef403c500 (diff) | |
download | bird-4ba84ebc8285c3a5c556fc769101cc29cb3d3708.tar bird-4ba84ebc8285c3a5c556fc769101cc29cb3d3708.zip |
Slightly better generator of default protocol instance names.
-rw-r--r-- | conf/cf-lex.l | 13 | ||||
-rw-r--r-- | conf/conf.h | 2 | ||||
-rw-r--r-- | nest/proto.c | 1 | ||||
-rw-r--r-- | nest/protocol.h | 1 |
4 files changed, 10 insertions, 7 deletions
diff --git a/conf/cf-lex.l b/conf/cf-lex.l index 426f528..d000f97 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -33,7 +33,6 @@ static struct keyword { static struct keyword *kw_hash[KW_HASH_SIZE]; static struct symbol **sym_hash; static int allow_new_symbols; -static int default_counter; int conf_lino; @@ -163,8 +162,11 @@ cf_find_sym(byte *c, unsigned int h0) int l; while (s) - if (!strcmp(s->name, c)) - return s; + { + if (!strcmp(s->name, c)) + return s; + s = s->next; + } if (!allow_new_symbols) return NULL; l = strlen(c); @@ -181,14 +183,14 @@ cf_find_sym(byte *c, unsigned int h0) } struct symbol * -cf_default_name(char *prefix) +cf_default_name(char *prefix, int *counter) { char buf[32]; struct symbol *s; do { - sprintf(buf, "%s%d", prefix, default_counter++); + sprintf(buf, "%s%d", prefix, ++(*counter)); s = cf_find_sym(buf, cf_hash(buf)); if (!s) cf_error("Unable to generate default name"); } @@ -202,7 +204,6 @@ cf_lex_init(int flag) if (allow_new_symbols = flag) sym_hash = cfg_allocz(SYM_HASH_SIZE * sizeof(struct keyword *)); conf_lino = 1; - default_counter = 1; } void diff --git a/conf/conf.h b/conf/conf.h index 69f4a02..5ceb4af 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -67,7 +67,7 @@ extern int conf_lino; void cf_lex_init_tables(void); int cf_lex(void); void cf_lex_init(int flag); -struct symbol *cf_default_name(char *prefix); +struct symbol *cf_default_name(char *prefix, int *counter); /* Parser */ diff --git a/nest/proto.c b/nest/proto.c index 431c47d..04ee289 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -127,6 +127,7 @@ protos_preconfig(struct config *c) WALK_LIST(p, protocol_list) { debug(" %s", p->name); + p->name_counter = 0; if (p->preconfig) p->preconfig(p, c); } diff --git a/nest/protocol.h b/nest/protocol.h index 1e641a5..626dd99 100644 --- a/nest/protocol.h +++ b/nest/protocol.h @@ -31,6 +31,7 @@ struct protocol { char *name; unsigned debug; /* Default debugging flags */ int priority; /* Protocol priority (usually 0) */ + int name_counter; /* Counter for automatic name generation */ void (*preconfig)(struct protocol *, struct config *); /* Just before configuring */ void (*postconfig)(struct proto_config *); /* After configuring each instance */ |