mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 01:31:55 +00:00
Slightly better generator of default protocol instance names.
This commit is contained in:
parent
241b7311ec
commit
4ba84ebc82
@ -33,7 +33,6 @@ static struct keyword {
|
|||||||
static struct keyword *kw_hash[KW_HASH_SIZE];
|
static struct keyword *kw_hash[KW_HASH_SIZE];
|
||||||
static struct symbol **sym_hash;
|
static struct symbol **sym_hash;
|
||||||
static int allow_new_symbols;
|
static int allow_new_symbols;
|
||||||
static int default_counter;
|
|
||||||
|
|
||||||
int conf_lino;
|
int conf_lino;
|
||||||
|
|
||||||
@ -163,8 +162,11 @@ cf_find_sym(byte *c, unsigned int h0)
|
|||||||
int l;
|
int l;
|
||||||
|
|
||||||
while (s)
|
while (s)
|
||||||
if (!strcmp(s->name, c))
|
{
|
||||||
return s;
|
if (!strcmp(s->name, c))
|
||||||
|
return s;
|
||||||
|
s = s->next;
|
||||||
|
}
|
||||||
if (!allow_new_symbols)
|
if (!allow_new_symbols)
|
||||||
return NULL;
|
return NULL;
|
||||||
l = strlen(c);
|
l = strlen(c);
|
||||||
@ -181,14 +183,14 @@ cf_find_sym(byte *c, unsigned int h0)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct symbol *
|
struct symbol *
|
||||||
cf_default_name(char *prefix)
|
cf_default_name(char *prefix, int *counter)
|
||||||
{
|
{
|
||||||
char buf[32];
|
char buf[32];
|
||||||
struct symbol *s;
|
struct symbol *s;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sprintf(buf, "%s%d", prefix, default_counter++);
|
sprintf(buf, "%s%d", prefix, ++(*counter));
|
||||||
s = cf_find_sym(buf, cf_hash(buf));
|
s = cf_find_sym(buf, cf_hash(buf));
|
||||||
if (!s) cf_error("Unable to generate default name");
|
if (!s) cf_error("Unable to generate default name");
|
||||||
}
|
}
|
||||||
@ -202,7 +204,6 @@ cf_lex_init(int flag)
|
|||||||
if (allow_new_symbols = flag)
|
if (allow_new_symbols = flag)
|
||||||
sym_hash = cfg_allocz(SYM_HASH_SIZE * sizeof(struct keyword *));
|
sym_hash = cfg_allocz(SYM_HASH_SIZE * sizeof(struct keyword *));
|
||||||
conf_lino = 1;
|
conf_lino = 1;
|
||||||
default_counter = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -67,7 +67,7 @@ extern int conf_lino;
|
|||||||
void cf_lex_init_tables(void);
|
void cf_lex_init_tables(void);
|
||||||
int cf_lex(void);
|
int cf_lex(void);
|
||||||
void cf_lex_init(int flag);
|
void cf_lex_init(int flag);
|
||||||
struct symbol *cf_default_name(char *prefix);
|
struct symbol *cf_default_name(char *prefix, int *counter);
|
||||||
|
|
||||||
/* Parser */
|
/* Parser */
|
||||||
|
|
||||||
|
@ -127,6 +127,7 @@ protos_preconfig(struct config *c)
|
|||||||
WALK_LIST(p, protocol_list)
|
WALK_LIST(p, protocol_list)
|
||||||
{
|
{
|
||||||
debug(" %s", p->name);
|
debug(" %s", p->name);
|
||||||
|
p->name_counter = 0;
|
||||||
if (p->preconfig)
|
if (p->preconfig)
|
||||||
p->preconfig(p, c);
|
p->preconfig(p, c);
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ struct protocol {
|
|||||||
char *name;
|
char *name;
|
||||||
unsigned debug; /* Default debugging flags */
|
unsigned debug; /* Default debugging flags */
|
||||||
int priority; /* Protocol priority (usually 0) */
|
int priority; /* Protocol priority (usually 0) */
|
||||||
|
int name_counter; /* Counter for automatic name generation */
|
||||||
|
|
||||||
void (*preconfig)(struct protocol *, struct config *); /* Just before configuring */
|
void (*preconfig)(struct protocol *, struct config *); /* Just before configuring */
|
||||||
void (*postconfig)(struct proto_config *); /* After configuring each instance */
|
void (*postconfig)(struct proto_config *); /* After configuring each instance */
|
||||||
|
Loading…
Reference in New Issue
Block a user