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.
This commit is contained in:
Martin Mares 1998-11-29 21:59:37 +00:00
parent 5cd462f291
commit 49e4a4d1fd
2 changed files with 19 additions and 3 deletions

View file

@ -107,7 +107,7 @@ WHITE [ \t]
["][^"\n]*["] { ["][^"\n]*["] {
cf_lval.t = yytext+1; cf_lval.t = yytext+1;
yytext[yyleng] = 0; yytext[yyleng-1] = 0;
return TEXT; return TEXT;
} }
@ -172,7 +172,7 @@ cf_find_sym(byte *c, unsigned int h0)
l = strlen(c); l = strlen(c);
if (l > SYM_MAX_LEN) if (l > SYM_MAX_LEN)
cf_error("Symbol too long"); 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]; s->next = sym_hash[h];
sym_hash[h] = s; sym_hash[h] = s;
s->class = SYM_VOID; s->class = SYM_VOID;
@ -202,7 +202,7 @@ void
cf_lex_init(int flag) cf_lex_init(int flag)
{ {
if (allow_new_symbols = 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; cf_lino = 1;
default_counter = 1; default_counter = 1;
} }
@ -234,3 +234,12 @@ cf_allocate(void)
cfg_pool = rp_new(&root_pool, "Config"); cfg_pool = rp_new(&root_pool, "Config");
cfg_mem = mp_new(cfg_pool, 1024); 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;
}

View file

@ -11,9 +11,16 @@
#include "lib/resource.h" #include "lib/resource.h"
/* Pools */
extern pool *cfg_pool; extern pool *cfg_pool;
extern mempool *cfg_mem; 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 */ /* Lexer */
extern int (*cf_read_hook)(byte *buf, unsigned int max); extern int (*cf_read_hook)(byte *buf, unsigned int max);