diff options
author | Martin Mares <mj@ucw.cz> | 1998-11-29 22:59:37 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1998-11-29 22:59:37 +0100 |
commit | 49e4a4d1fd64da045182f6ccd38753feb364f9c5 (patch) | |
tree | b92509e77cf0ba1bfdf87a58625591bafabd9ff5 /conf | |
parent | 5cd462f291b45a6a33168cdfbc4ba55ee068af65 (diff) | |
download | bird-49e4a4d1fd64da045182f6ccd38753feb364f9c5.tar bird-49e4a4d1fd64da045182f6ccd38753feb364f9c5.zip |
Created new functions for allocating configuration data:
o cfg_alloc(size) -- generic memory allocation
o cfg_allocu(size) -- unaligned memory allocation
o cfg_allocz(size) -- zeroed memory allocation
o cfg_strcpy(str) -- allocate a copy of a string
Also fixed a bug in lexing of string literals.
Diffstat (limited to 'conf')
-rw-r--r-- | conf/cf-lex.l | 15 | ||||
-rw-r--r-- | conf/conf.h | 7 |
2 files changed, 19 insertions, 3 deletions
diff --git a/conf/cf-lex.l b/conf/cf-lex.l index 66f3038..eb1d330 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -107,7 +107,7 @@ WHITE [ \t] ["][^"\n]*["] { cf_lval.t = yytext+1; - yytext[yyleng] = 0; + yytext[yyleng-1] = 0; return TEXT; } @@ -172,7 +172,7 @@ cf_find_sym(byte *c, unsigned int h0) l = strlen(c); if (l > SYM_MAX_LEN) cf_error("Symbol too long"); - s = mp_alloc(cfg_mem, sizeof(struct symbol) + l); + s = cfg_alloc(sizeof(struct symbol) + l); s->next = sym_hash[h]; sym_hash[h] = s; s->class = SYM_VOID; @@ -202,7 +202,7 @@ void cf_lex_init(int flag) { if (allow_new_symbols = flag) - sym_hash = mp_allocz(cfg_mem, SYM_HASH_SIZE * sizeof(struct keyword *)); + sym_hash = cfg_allocz(SYM_HASH_SIZE * sizeof(struct keyword *)); cf_lino = 1; default_counter = 1; } @@ -234,3 +234,12 @@ cf_allocate(void) cfg_pool = rp_new(&root_pool, "Config"); cfg_mem = mp_new(cfg_pool, 1024); } + +char * +cfg_strcpy(char *c) +{ + int l = strlen(c) + 1; + char *z = cfg_allocu(l); + memcpy(z, c, l); + return z; +} diff --git a/conf/conf.h b/conf/conf.h index 6a0a328..93d1edd 100644 --- a/conf/conf.h +++ b/conf/conf.h @@ -11,9 +11,16 @@ #include "lib/resource.h" +/* Pools */ + extern pool *cfg_pool; extern mempool *cfg_mem; +#define cfg_alloc(size) mp_alloc(cfg_mem, size) +#define cfg_allocu(size) mp_allocu(cfg_mem, size) +#define cfg_allocz(size) mp_allocz(cfg_mem, size) +char *cfg_strcpy(char *c); + /* Lexer */ extern int (*cf_read_hook)(byte *buf, unsigned int max); |