#include #include #include #include "asm.h" int strtbl_get_str(struct str_table *str_tbl, const char *str, size_t *res) { for (size_t i = 0; i < str_tbl->size; i ++) { if (strcmp(str_tbl->ptr + i, str) == 0) { if (res != NULL) *res = i; return M_SUCCESS; } } return M_ERROR; } int strtbl_write_str(struct str_table *str_tbl, const char *str, size_t *res) { if (strtbl_get_str(str_tbl, str, res) == M_SUCCESS) return M_SUCCESS; size_t len = strlen(str); char *new = realloc(str_tbl->ptr, str_tbl->size + len + 1); if (new == NULL) return M_ERROR; str_tbl->ptr = new; memcpy(str_tbl->ptr + str_tbl->size, str, len + 1); if (res != NULL) *res = str_tbl->size; str_tbl->size += len + 1; return M_SUCCESS; } int strtbl_init(struct str_table *str_tbl) { str_tbl->size = 1; str_tbl->ptr = malloc(1); if (str_tbl->ptr == NULL) { ERROR("cannot alloc"); return M_ERROR; } *str_tbl->ptr = '\0'; return M_SUCCESS; } void strtbl_free(struct str_table *str_tbl) { free(str_tbl->ptr); }