mirror of https://github.com/rusefi/bldc.git
Add extensions without allocating and copying string
This commit is contained in:
parent
6c0c85bbee
commit
06386fb28f
|
@ -53,7 +53,7 @@ extension_fptr extensions_lookup(UINT sym) {
|
|||
|
||||
bool extensions_add(char *sym_str, extension_fptr ext) {
|
||||
VALUE symbol;
|
||||
int res = symrepr_addsym(sym_str, &symbol);
|
||||
int res = symrepr_addsym_const(sym_str, &symbol);
|
||||
|
||||
if (!res) return false;
|
||||
|
||||
|
|
|
@ -232,6 +232,30 @@ int symrepr_addsym(char *name, UINT* id) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
// Same as above, but assume that the name pointer stays valid
|
||||
int symrepr_addsym_const(char *name, UINT* id) {
|
||||
if (strlen(name) == 0) return 0; // failure if empty symbol
|
||||
|
||||
uint32_t *m = memory_allocate(3);
|
||||
|
||||
if (m == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
m[NAME] = (uint32_t)name;
|
||||
|
||||
if (symlist == NULL) {
|
||||
m[NEXT] = (uint32_t) NULL;
|
||||
symlist = m;
|
||||
} else {
|
||||
m[NEXT] = (uint32_t) symlist;
|
||||
symlist = m;
|
||||
}
|
||||
m[ID] = MAX_SPECIAL_SYMBOLS + next_symbol_id++;
|
||||
*id = m[ID];
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int symrepr_size(void) {
|
||||
|
||||
unsigned int n = 0;
|
||||
|
|
Loading…
Reference in New Issue