void init_free_sidtab(void) { struct s_sidtab *nxt, *ptr = cfg.sidtab; while (ptr) { nxt = ptr->next; free_sidtab(ptr); ptr = nxt; } cfg.sidtab = NULL; ++cfg_sidtab_generation; }
int32_t init_sidtab(void) { FILE *fp = open_config_file(cs_sidt); if(!fp) { return 1; } int32_t nr, nro, nrr; char *value, *token; if(!cs_malloc(&token, MAXLINESIZE)) { return 1; } struct s_sidtab *ptr; struct s_sidtab *sidtab = (struct s_sidtab *)0; for(nro = 0, ptr = cfg.sidtab; ptr; nro++) { struct s_sidtab *ptr_next; ptr_next = ptr->next; free_sidtab(ptr); ptr = ptr_next; } nr = 0; nrr = 0; while(fgets(token, MAXLINESIZE, fp)) { int32_t l; if((l = strlen(trim(token))) < 3) { continue; } if((token[0] == '[') && (token[l - 1] == ']')) { token[l - 1] = 0; if(nr > MAX_SIDBITS) { fprintf(stderr, "Warning: Service No.%d - '%s' ignored. Max allowed Services %d\n", nr, strtolower(token + 1), MAX_SIDBITS); nr++; nrr++; } else { if(!cs_malloc(&ptr, sizeof(struct s_sidtab))) { NULLFREE(token); return (1); } if(sidtab) { sidtab->next = ptr; } else { cfg.sidtab = ptr; } sidtab = ptr; nr++; cs_strncpy(sidtab->label, strtolower(token + 1), sizeof(sidtab->label)); continue; } } if(!sidtab) { continue; } if(!(value = strchr(token, '='))) { continue; } *value++ = '\0'; chk_sidtab(trim(strtolower(token)), trim(strtolower(value)), sidtab); } NULLFREE(token); fclose(fp); show_sidtab(cfg.sidtab); ++cfg_sidtab_generation; cs_log("services reloaded: %d services freed, %d services loaded, rejected %d", nro, nr, nrr); return (0); }