Slightly better generator of default protocol instance names.

This commit is contained in:
Martin Mares 1999-03-26 21:37:29 +00:00
parent 241b7311ec
commit 4ba84ebc82
4 changed files with 10 additions and 7 deletions

View file

@ -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)) if (!strcmp(s->name, c))
return s; 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

View file

@ -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 */

View file

@ -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);
} }

View file

@ -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 */