[fix] All file_read_uint64 calls that use stack variables read into a uint64_t not a size_t so as not to smash the stack under a 32-bit arch (issue #18)
This commit is contained in:
@@ -49,7 +49,7 @@ bool address_dictionary_add_expansion(char *name, char *language, address_expans
|
||||
bool is_suffix = false;
|
||||
bool is_phrase = false;
|
||||
|
||||
for (int i = 0; i < expansion.num_dictionaries; i++) {
|
||||
for (size_t i = 0; i < expansion.num_dictionaries; i++) {
|
||||
dictionary_type_t dict = expansion.dictionary_ids[i];
|
||||
if (dict == DICTIONARY_CONCATENATED_SUFFIX_SEPARABLE ||
|
||||
dict == DICTIONARY_CONCATENATED_SUFFIX_INSEPARABLE) {
|
||||
@@ -93,6 +93,7 @@ bool address_dictionary_add_expansion(char *name, char *language, address_expans
|
||||
expansions = address_expansion_array_new_size(1);
|
||||
address_expansion_array_push(expansions, expansion);
|
||||
khiter_t k = kh_put(str_expansions, address_dict->expansions, strdup(key), &ret);
|
||||
if (ret < 0) goto exit_key_created;
|
||||
kh_value(address_dict->expansions, k) = expansions;
|
||||
|
||||
value.count = 1;
|
||||
@@ -309,7 +310,7 @@ static bool address_expansion_read(FILE *f, address_expansion_t *expansion) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < expansion->num_dictionaries; i++) {
|
||||
for (size_t i = 0; i < expansion->num_dictionaries; i++) {
|
||||
if (!file_read_uint16(f, (uint16_t *)expansion->dictionary_ids + i)) {
|
||||
return false;
|
||||
}
|
||||
@@ -340,7 +341,7 @@ static bool address_expansion_write(FILE *f, address_expansion_t expansion) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < expansion.num_dictionaries; i++) {
|
||||
for (size_t i = 0; i < expansion.num_dictionaries; i++) {
|
||||
if (!file_write_uint16(f, expansion.dictionary_ids[i])) {
|
||||
return false;
|
||||
}
|
||||
@@ -399,7 +400,7 @@ bool address_dictionary_write(FILE *f) {
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < num_expansions; i++) {
|
||||
for (size_t i = 0; i < num_expansions; i++) {
|
||||
address_expansion_t expansion = expansions->a[i];
|
||||
if (!address_expansion_write(f, expansion)) {
|
||||
return false;
|
||||
@@ -500,6 +501,7 @@ bool address_dictionary_read(FILE *f) {
|
||||
int ret;
|
||||
|
||||
khiter_t k = kh_put(str_expansions, address_dict->expansions, key, &ret);
|
||||
if (ret < 0) goto exit_address_dict_created;
|
||||
kh_value(address_dict->expansions, k) = expansions;
|
||||
}
|
||||
|
||||
|
||||
12
src/geodb.c
12
src/geodb.c
@@ -80,23 +80,23 @@ geodb_t *geodb_init(char *dir) {
|
||||
FILE *f = fopen(postal_codes_path, "rb");
|
||||
|
||||
uint64_t num_postal_strings = 0;
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_postal_strings)) {
|
||||
if (!file_read_uint64(f, &num_postal_strings)) {
|
||||
goto exit_geodb_created;
|
||||
}
|
||||
|
||||
size_t postal_codes_str_len;
|
||||
uint64_t postal_codes_str_len;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&postal_codes_str_len)) {
|
||||
if (!file_read_uint64(f, &postal_codes_str_len)) {
|
||||
goto exit_geodb_created;
|
||||
}
|
||||
|
||||
char_array *array = char_array_new_size(postal_codes_str_len);
|
||||
char_array *array = char_array_new_size((size_t)postal_codes_str_len);
|
||||
|
||||
if (!file_read_chars(f, array->a, postal_codes_str_len)) {
|
||||
if (!file_read_chars(f, array->a, (size_t)postal_codes_str_len)) {
|
||||
goto exit_geodb_created;
|
||||
}
|
||||
|
||||
array->n = postal_codes_str_len;
|
||||
array->n = (size_t)postal_codes_str_len;
|
||||
|
||||
gdb->postal_codes = cstring_array_from_char_array(array);
|
||||
|
||||
|
||||
18
src/matrix.c
18
src/matrix.c
@@ -254,12 +254,18 @@ matrix_t *matrix_read(FILE *f) {
|
||||
|
||||
mat->values = NULL;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&mat->m) ||
|
||||
!file_read_uint64(f, (uint64_t *)&mat->n)) {
|
||||
uint64_t m = 0;
|
||||
uint64_t n = 0;
|
||||
|
||||
if (!file_read_uint64(f, &m) ||
|
||||
!file_read_uint64(f, &n)) {
|
||||
goto exit_matrix_allocated;
|
||||
}
|
||||
|
||||
size_t len_data = (size_t)mat->m * (size_t)mat->n;
|
||||
mat->m = (size_t)m;
|
||||
mat->n = (size_t)n;
|
||||
|
||||
size_t len_data = mat->m * mat->n;
|
||||
|
||||
double *data = malloc(len_data * sizeof(double));
|
||||
if (data == NULL) {
|
||||
@@ -286,14 +292,14 @@ bool matrix_write(matrix_t *self, FILE *f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!file_write_uint64(f, self->m) ||
|
||||
!file_write_uint64(f, self->n)) {
|
||||
if (!file_write_uint64(f, (uint64_t)self->m) ||
|
||||
!file_write_uint64(f, (uint64_t)self->n)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t len_data = (uint64_t)self->m * (uint64_t)self->n;
|
||||
|
||||
for (int i = 0; i < len_data; i++) {
|
||||
for (uint64_t i = 0; i < len_data; i++) {
|
||||
if (!file_write_double(f, self->values[i])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
52
src/numex.c
52
src/numex.c
@@ -139,9 +139,9 @@ numex_language_t *get_numex_language(char *name) {
|
||||
}
|
||||
|
||||
static numex_language_t *numex_language_read(FILE *f) {
|
||||
size_t lang_name_len;
|
||||
uint64_t lang_name_len;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&lang_name_len)) {
|
||||
if (!file_read_uint64(f, &lang_name_len)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -159,27 +159,27 @@ static numex_language_t *numex_language_read(FILE *f) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t rules_index;
|
||||
if (!file_read_uint64(f, (uint64_t *)&rules_index)) {
|
||||
uint64_t rules_index;
|
||||
if (!file_read_uint64(f, &rules_index)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t num_rules;
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_rules)) {
|
||||
uint64_t num_rules;
|
||||
if (!file_read_uint64(f, &num_rules)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t ordinals_index;
|
||||
if (!file_read_uint64(f, (uint64_t *)&ordinals_index)) {
|
||||
uint64_t ordinals_index;
|
||||
if (!file_read_uint64(f, &ordinals_index)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t num_ordinals;
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_ordinals)) {
|
||||
uint64_t num_ordinals;
|
||||
if (!file_read_uint64(f, &num_ordinals)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
numex_language_t *language = numex_language_new(name, whole_tokens_only, rules_index, num_rules, ordinals_index, num_ordinals);
|
||||
numex_language_t *language = numex_language_new(name, whole_tokens_only, (size_t)rules_index, (size_t)num_rules, (size_t)ordinals_index, (size_t)num_ordinals);
|
||||
|
||||
return language;
|
||||
|
||||
@@ -323,8 +323,8 @@ ordinal_indicator_t *ordinal_indicator_new(char *key, gender_t gender, grammatic
|
||||
}
|
||||
|
||||
static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
|
||||
size_t key_len;
|
||||
if (!file_read_uint64(f, (uint64_t *)&key_len)) {
|
||||
uint64_t key_len;
|
||||
if (!file_read_uint64(f, &key_len)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -347,12 +347,12 @@ static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t ordinal_suffix_len;
|
||||
if (!file_read_uint64(f, (uint64_t *)&ordinal_suffix_len)) {
|
||||
uint64_t ordinal_suffix_len;
|
||||
if (!file_read_uint64(f, &ordinal_suffix_len)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *ordinal_suffix = malloc(ordinal_suffix_len);
|
||||
char *ordinal_suffix = malloc((size_t)ordinal_suffix_len);
|
||||
if (ordinal_suffix == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
@@ -367,7 +367,7 @@ static ordinal_indicator_t *ordinal_indicator_read(FILE *f) {
|
||||
|
||||
bool ordinal_indicator_write(ordinal_indicator_t *ordinal, FILE *f) {
|
||||
size_t key_len = strlen(ordinal->key) + 1;
|
||||
if (!file_write_uint64(f, key_len) ||
|
||||
if (!file_write_uint64(f, (uint64_t)key_len) ||
|
||||
!file_write_chars(f, ordinal->key, key_len)) {
|
||||
return false;
|
||||
}
|
||||
@@ -381,7 +381,7 @@ bool ordinal_indicator_write(ordinal_indicator_t *ordinal, FILE *f) {
|
||||
}
|
||||
|
||||
size_t name_len = strlen(ordinal->suffix) + 1;
|
||||
if (!file_write_uint64(f, name_len) ||
|
||||
if (!file_write_uint64(f, (uint64_t)name_len) ||
|
||||
!file_write_chars(f, ordinal->suffix, name_len)) {
|
||||
return false;
|
||||
}
|
||||
@@ -409,13 +409,13 @@ bool numex_table_read(FILE *f) {
|
||||
|
||||
log_debug("Numex table initialized\n");
|
||||
|
||||
size_t num_languages;
|
||||
uint64_t num_languages;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_languages)) {
|
||||
if (!file_read_uint64(f, &num_languages)) {
|
||||
goto exit_numex_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("read num_languages = %zu\n", num_languages);
|
||||
log_debug("read num_languages = %llu\n", num_languages);
|
||||
|
||||
int i = 0;
|
||||
|
||||
@@ -431,13 +431,13 @@ bool numex_table_read(FILE *f) {
|
||||
log_debug("read languages\n");
|
||||
|
||||
|
||||
size_t num_rules;
|
||||
uint64_t num_rules;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_rules)) {
|
||||
if (!file_read_uint64(f, &num_rules)) {
|
||||
goto exit_numex_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("read num_rules = %zu\n", num_rules);
|
||||
log_debug("read num_rules = %llu\n", num_rules);
|
||||
|
||||
numex_rule_t rule;
|
||||
|
||||
@@ -450,9 +450,9 @@ bool numex_table_read(FILE *f) {
|
||||
|
||||
log_debug("read rules\n");
|
||||
|
||||
size_t num_ordinals;
|
||||
uint64_t num_ordinals;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_ordinals)) {
|
||||
if (!file_read_uint64(f, &num_ordinals)) {
|
||||
goto exit_numex_table_load_error;
|
||||
}
|
||||
|
||||
|
||||
@@ -334,7 +334,7 @@ sparse_matrix_t *sparse_matrix_read(FILE *f) {
|
||||
goto exit_sparse_matrix_allocated;
|
||||
}
|
||||
|
||||
uint32_array *indptr = uint32_array_new_size(len_indptr);
|
||||
uint32_array *indptr = uint32_array_new_size((size_t)len_indptr);
|
||||
if (indptr == NULL) {
|
||||
goto exit_sparse_matrix_allocated;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ transliterator_t *transliterator_new(char *name, uint8_t internal, uint32_t step
|
||||
return NULL;
|
||||
}
|
||||
|
||||
trans->name = strdup(name);
|
||||
trans->name = name;
|
||||
trans->internal = internal;
|
||||
trans->steps_index = steps_index;
|
||||
trans->steps_length = steps_length;
|
||||
@@ -1201,6 +1201,7 @@ bool transliteration_table_add_transliterator(transliterator_t *trans) {
|
||||
|
||||
int ret;
|
||||
khiter_t k = kh_put(str_transliterator, trans_table->transliterators, trans->name, &ret);
|
||||
if (ret < 0) return false;
|
||||
kh_value(trans_table->transliterators, k) = trans;
|
||||
|
||||
return true;
|
||||
@@ -1213,6 +1214,7 @@ bool transliteration_table_add_script_language(script_language_t script_language
|
||||
|
||||
int ret;
|
||||
khiter_t k = kh_put(script_language_index, trans_table->script_languages, script_language, &ret);
|
||||
if (ret < 0) return false;
|
||||
kh_value(trans_table->script_languages, k) = index;
|
||||
|
||||
return true;
|
||||
@@ -1249,9 +1251,9 @@ char *transliterator_replace_strings(trie_t *trie, cstring_array *replacements,
|
||||
} else {
|
||||
str = char_array_new_size(len);
|
||||
phrase_t phrase;
|
||||
int start = 0;
|
||||
int end = 0;
|
||||
for (int i = 0; i < phrases->n; i++) {
|
||||
size_t start = 0;
|
||||
size_t end = 0;
|
||||
for (size_t i = 0; i < phrases->n; i++) {
|
||||
phrase = phrases->a[i];
|
||||
end = phrase.start;
|
||||
char_array_append_len(str, input + start, end - start);
|
||||
@@ -1276,14 +1278,16 @@ char *transliterator_replace_strings(trie_t *trie, cstring_array *replacements,
|
||||
}
|
||||
|
||||
transliterator_t *transliterator_read(FILE *f) {
|
||||
size_t trans_name_len;
|
||||
uint64_t trans_name_len;
|
||||
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&trans_name_len)) {
|
||||
if (!file_read_uint64(f, &trans_name_len)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char name[trans_name_len];
|
||||
char *name = malloc(trans_name_len);
|
||||
if (name == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!file_read_chars(f, name, trans_name_len)) {
|
||||
return NULL;
|
||||
@@ -1313,7 +1317,7 @@ transliterator_t *transliterator_read(FILE *f) {
|
||||
|
||||
bool transliterator_write(transliterator_t *trans, FILE *f) {
|
||||
size_t trans_name_len = strlen(trans->name) + 1;
|
||||
if (!file_write_uint64(f, trans_name_len) ||
|
||||
if (!file_write_uint64(f, (uint64_t)trans_name_len) ||
|
||||
!file_write_chars(f, trans->name, trans_name_len)) {
|
||||
return false;
|
||||
}
|
||||
@@ -1334,7 +1338,7 @@ bool transliterator_write(transliterator_t *trans, FILE *f) {
|
||||
}
|
||||
|
||||
transliteration_step_t *transliteration_step_read(FILE *f) {
|
||||
size_t step_name_len;
|
||||
uint64_t step_name_len;
|
||||
|
||||
log_debug("reading step\n");;
|
||||
|
||||
@@ -1346,7 +1350,7 @@ transliteration_step_t *transliteration_step_read(FILE *f) {
|
||||
if (!file_read_uint32(f, &step->type)) {
|
||||
goto exit_step_destroy;
|
||||
}
|
||||
if (!file_read_uint64(f, (uint64_t *) &step_name_len)) {
|
||||
if (!file_read_uint64(f, &step_name_len)) {
|
||||
goto exit_step_destroy;
|
||||
}
|
||||
|
||||
@@ -1376,7 +1380,7 @@ bool transliteration_step_write(transliteration_step_t *step, FILE *f) {
|
||||
// Include the NUL byte
|
||||
size_t step_name_len = strlen(step->name) + 1;
|
||||
|
||||
if (!file_write_uint64(f, step_name_len) ||
|
||||
if (!file_write_uint64(f, (uint64_t)step_name_len) ||
|
||||
!file_write_chars(f, step->name, step_name_len)) {
|
||||
return false;
|
||||
}
|
||||
@@ -1385,13 +1389,18 @@ bool transliteration_step_write(transliteration_step_t *step, FILE *f) {
|
||||
}
|
||||
|
||||
bool group_capture_read(FILE *f, group_capture_t *group) {
|
||||
if (!file_read_uint64(f, (uint64_t *)&group->start)) {
|
||||
uint64_t start;
|
||||
if (!file_read_uint64(f, &start)) {
|
||||
return false;
|
||||
}
|
||||
group->start = (size_t)start;
|
||||
|
||||
uint64_t len;
|
||||
if (!file_read_uint64(f, &len)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&group->len)) {
|
||||
return false;
|
||||
}
|
||||
group->len = (size_t)len;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1418,18 +1427,18 @@ transliteration_replacement_t *transliteration_replacement_read(FILE *f) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t num_groups;
|
||||
uint64_t num_groups;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_groups)) {
|
||||
if (!file_read_uint64(f, &num_groups)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
group_capture_array *groups = NULL;
|
||||
|
||||
if (num_groups > 0) {
|
||||
groups = group_capture_array_new_size(num_groups);
|
||||
groups = group_capture_array_new_size((size_t)num_groups);
|
||||
group_capture_t group;
|
||||
for (int i = 0; i < num_groups; i++) {
|
||||
for (size_t i = 0; i < (size_t)num_groups; i++) {
|
||||
if (!group_capture_read(f, &group)) {
|
||||
group_capture_array_destroy(groups);
|
||||
return NULL;
|
||||
@@ -1458,7 +1467,7 @@ bool transliteration_replacement_write(transliteration_replacement_t *replacemen
|
||||
|
||||
group_capture_t group;
|
||||
|
||||
for (int i = 0; i < replacement->num_groups; i++) {
|
||||
for (size_t i = 0; i < replacement->num_groups; i++) {
|
||||
group = replacement->groups->a[i];
|
||||
if (!group_capture_write(group, f)) {
|
||||
return false;
|
||||
@@ -1486,20 +1495,20 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
log_debug("Table initialized\n");
|
||||
|
||||
size_t num_transliterators;
|
||||
uint64_t num_transliterators = 0;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_transliterators)) {
|
||||
if (!file_read_uint64(f, &num_transliterators)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
|
||||
log_debug("num_transliterators = %zu\n", num_transliterators);
|
||||
log_debug("num_transliterators = %zu\n", (size_t)num_transliterators);
|
||||
|
||||
int i;
|
||||
size_t i;
|
||||
|
||||
transliterator_t *trans;
|
||||
|
||||
for (i = 0; i < num_transliterators; i++) {
|
||||
for (i = 0; i < (size_t)num_transliterators; i++) {
|
||||
trans = transliterator_read(f);
|
||||
if (trans == NULL) {
|
||||
log_error("trans was NULL\n");
|
||||
@@ -1514,69 +1523,75 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
log_debug("Read transliterators\n");
|
||||
|
||||
size_t num_script_languages;
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_script_languages)) {
|
||||
uint64_t num_script_languages;
|
||||
if (!file_read_uint64(f, &num_script_languages)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("num_script_languages = %zu\n", num_script_languages);
|
||||
log_debug("num_script_languages = %zu\n", (size_t)num_script_languages);
|
||||
|
||||
script_language_t script_language;
|
||||
transliterator_index_t index;
|
||||
|
||||
size_t language_len = 0;
|
||||
uint64_t language_len = 0;
|
||||
char language[MAX_LANGUAGE_LEN] = "";
|
||||
|
||||
uint64_t transliterator_index = 0;
|
||||
uint64_t index_num_transliterators = 0;
|
||||
|
||||
for (i = 0; i < num_script_languages; i++) {
|
||||
if (!file_read_uint32(f, (uint32_t *)&script_language.script)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&language_len) || language_len >= MAX_LANGUAGE_LEN) {
|
||||
if (!file_read_uint64(f, &language_len) || language_len >= MAX_LANGUAGE_LEN) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
if (language_len == 0) {
|
||||
script_language.language[0] = '\0';
|
||||
} else if (!file_read_chars(f, (char *)language, language_len)) {
|
||||
} else if (!file_read_chars(f, (char *)language, (size_t)language_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
} else {
|
||||
strcpy(script_language.language, language);
|
||||
}
|
||||
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&index.transliterator_index)) {
|
||||
if (!file_read_uint64(f, &transliterator_index)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&index.num_transliterators)) {
|
||||
index.transliterator_index = (size_t)transliterator_index;
|
||||
|
||||
if (!file_read_uint64(f, &index_num_transliterators)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
index.num_transliterators = (size_t)index_num_transliterators;
|
||||
|
||||
log_debug("Adding script language key={%d, %s}, value={%zu, %zu}\n", script_language.script, script_language.language, index.transliterator_index, index.num_transliterators);
|
||||
|
||||
transliteration_table_add_script_language(script_language, index);
|
||||
}
|
||||
|
||||
size_t trans_table_num_strings;
|
||||
uint64_t trans_table_num_strings;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&trans_table_num_strings)) {
|
||||
if (!file_read_uint64(f, &trans_table_num_strings)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("trans_table_num_strings=%zu\n", trans_table_num_strings);
|
||||
log_debug("trans_table_num_strings=%zu\n", (size_t)trans_table_num_strings);
|
||||
|
||||
size_t trans_name_str_len;
|
||||
uint64_t trans_name_str_len;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&trans_name_str_len)) {
|
||||
if (!file_read_uint64(f, &trans_name_str_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("Creating char_array with size=%zu\n", trans_name_str_len);
|
||||
log_debug("Creating char_array with size=%zu\n", (size_t)trans_name_str_len);
|
||||
|
||||
char_array *array = char_array_new_size(trans_name_str_len);
|
||||
char_array *array = char_array_new_size((size_t)trans_name_str_len);
|
||||
|
||||
if (!file_read_chars(f, array->a, trans_name_str_len)) {
|
||||
if (!file_read_chars(f, array->a, (size_t)trans_name_str_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
@@ -1594,15 +1609,15 @@ bool transliteration_table_read(FILE *f) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
size_t num_steps;
|
||||
uint64_t num_steps;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_steps)) {
|
||||
if (!file_read_uint64(f, &num_steps)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("num_steps = %zu\n", num_steps);
|
||||
log_debug("num_steps = %zu\n", (size_t)num_steps);
|
||||
|
||||
step_array_resize(trans_table->steps, num_steps);
|
||||
step_array_resize(trans_table->steps, (size_t)num_steps);
|
||||
|
||||
log_debug("resized\n");
|
||||
|
||||
@@ -1621,15 +1636,15 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
transliteration_replacement_t *replacement;
|
||||
|
||||
size_t num_replacements;
|
||||
uint64_t num_replacements;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_replacements)) {
|
||||
if (!file_read_uint64(f, &num_replacements)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("num_replacements = %zu\n", num_replacements);
|
||||
log_debug("num_replacements = %zu\n", (size_t)num_replacements);
|
||||
|
||||
transliteration_replacement_array_resize(trans_table->replacements, num_replacements);
|
||||
transliteration_replacement_array_resize(trans_table->replacements, (size_t)num_replacements);
|
||||
|
||||
log_debug("resized\n");
|
||||
|
||||
@@ -1643,15 +1658,15 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
log_debug("Done with replacements\n");
|
||||
|
||||
size_t num_replacement_tokens;
|
||||
uint64_t num_replacement_tokens;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_replacement_tokens)) {
|
||||
if (!file_read_uint64(f, &num_replacement_tokens)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("num_replacement_tokens = %zu\n", num_replacement_tokens);
|
||||
log_debug("num_replacement_tokens = %zu\n", (size_t)num_replacement_tokens);
|
||||
|
||||
uint32_array_resize(trans_table->replacement_strings->indices, num_replacement_tokens);
|
||||
uint32_array_resize(trans_table->replacement_strings->indices, (size_t)num_replacement_tokens);
|
||||
|
||||
log_debug("resized\n");
|
||||
|
||||
@@ -1666,19 +1681,19 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
log_debug("Done with replacement token indices\n");
|
||||
|
||||
size_t replacement_strings_len;
|
||||
uint64_t replacement_strings_len;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&replacement_strings_len)) {
|
||||
if (!file_read_uint64(f, &replacement_strings_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("replacement_strings_len = %zu\n", replacement_strings_len);
|
||||
log_debug("replacement_strings_len = %zu\n", (size_t)replacement_strings_len);
|
||||
|
||||
char_array_resize(trans_table->replacement_strings->str, replacement_strings_len);
|
||||
char_array_resize(trans_table->replacement_strings->str, (size_t)replacement_strings_len);
|
||||
|
||||
log_debug("resized\n");
|
||||
|
||||
if (!file_read_chars(f, trans_table->replacement_strings->str->a, replacement_strings_len)) {
|
||||
if (!file_read_chars(f, trans_table->replacement_strings->str->a, (size_t)replacement_strings_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
@@ -1686,15 +1701,15 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
trans_table->replacement_strings->str->n = replacement_strings_len;
|
||||
|
||||
size_t num_revisit_tokens;
|
||||
uint64_t num_revisit_tokens;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&num_revisit_tokens)) {
|
||||
if (!file_read_uint64(f, &num_revisit_tokens)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("num_revisit_tokens = %zu\n", num_revisit_tokens);
|
||||
log_debug("num_revisit_tokens = %zu\n", (size_t)num_revisit_tokens);
|
||||
|
||||
uint32_array_resize(trans_table->revisit_strings->indices, num_revisit_tokens);
|
||||
uint32_array_resize(trans_table->revisit_strings->indices, (size_t)num_revisit_tokens);
|
||||
|
||||
log_debug("resized\n");
|
||||
|
||||
@@ -1707,19 +1722,19 @@ bool transliteration_table_read(FILE *f) {
|
||||
|
||||
log_debug("Done with revisit token indices\n");
|
||||
|
||||
size_t revisit_strings_len = 0;
|
||||
uint64_t revisit_strings_len = 0;
|
||||
|
||||
if (!file_read_uint64(f, (uint64_t *)&revisit_strings_len)) {
|
||||
if (!file_read_uint64(f, &revisit_strings_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
log_debug("revisit_strings_len = %zu\n", revisit_strings_len);
|
||||
log_debug("revisit_strings_len = %zu\n", (size_t)revisit_strings_len);
|
||||
|
||||
char_array_resize(trans_table->revisit_strings->str, revisit_strings_len);
|
||||
char_array_resize(trans_table->revisit_strings->str, (size_t)revisit_strings_len);
|
||||
|
||||
log_debug("resized\n");
|
||||
|
||||
if (!file_read_chars(f, trans_table->revisit_strings->str->a, revisit_strings_len)) {
|
||||
if (!file_read_chars(f, trans_table->revisit_strings->str->a, (size_t)revisit_strings_len)) {
|
||||
goto exit_trans_table_load_error;
|
||||
}
|
||||
|
||||
@@ -1766,7 +1781,7 @@ bool transliteration_table_write(FILE *f) {
|
||||
}
|
||||
})
|
||||
|
||||
int i;
|
||||
size_t i;
|
||||
|
||||
size_t num_script_languages = kh_size(trans_table->script_languages);
|
||||
|
||||
|
||||
42
src/trie.c
42
src/trie.c
@@ -215,7 +215,7 @@ static bool trie_node_has_children(trie_t *self, uint32_t node_id) {
|
||||
for (int i = 0; i < self->alphabet_size; i++) {
|
||||
unsigned char c = self->alphabet[i];
|
||||
index = trie_get_transition_index(self, node, c);
|
||||
if (index < self->nodes->n && trie_get_node(self, index).check == node_id)
|
||||
if (index < self->nodes->n && (uint32_t)trie_get_node(self, index).check == node_id)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -252,8 +252,8 @@ static void trie_get_transition_chars(trie_t *self, uint32_t node_id, unsigned c
|
||||
}
|
||||
|
||||
|
||||
static bool trie_can_fit_transitions(trie_t *self, uint32_t node_id, unsigned char *transitions, int num_transitions) {
|
||||
int i;
|
||||
static bool trie_can_fit_transitions(trie_t *self, uint32_t node_id, unsigned char *transitions, uint32_t num_transitions) {
|
||||
uint32_t i;
|
||||
uint32_t char_index, index;
|
||||
|
||||
for (i = 0; i < num_transitions; i++) {
|
||||
@@ -270,7 +270,7 @@ static bool trie_can_fit_transitions(trie_t *self, uint32_t node_id, unsigned ch
|
||||
|
||||
}
|
||||
|
||||
static uint32_t trie_find_new_base(trie_t *self, unsigned char *transitions, int num_transitions) {
|
||||
static uint32_t trie_find_new_base(trie_t *self, unsigned char *transitions, uint32_t num_transitions) {
|
||||
uint32_t first_char_index = trie_get_char_index(self, transitions[0]);
|
||||
|
||||
trie_node_t node = trie_get_free_list(self);
|
||||
@@ -324,7 +324,7 @@ static size_t trie_required_size(trie_t *self, uint32_t index) {
|
||||
|
||||
static void trie_relocate_base(trie_t *self, uint32_t current_index, int32_t new_base) {
|
||||
log_debug("Relocating base at %d\n", current_index);
|
||||
int i;
|
||||
uint32_t i;
|
||||
|
||||
trie_make_room_for(self, new_base);
|
||||
|
||||
@@ -353,7 +353,7 @@ static void trie_relocate_base(trie_t *self, uint32_t current_index, int32_t new
|
||||
* set check values appropriately
|
||||
*/
|
||||
if (old_transition.base > 0) { // do nothing in the case of a tail pointer
|
||||
for (int i = 0; i < self->alphabet_size; i++) {
|
||||
for (i = 0; i < self->alphabet_size; i++) {
|
||||
unsigned char c = self->alphabet[i];
|
||||
uint32_t index = trie_get_transition_index(self, old_transition, c);
|
||||
if (index < self->nodes->n && trie_get_node(self, index).check == old_index) {
|
||||
@@ -521,7 +521,7 @@ void trie_tail_merge(trie_t *self, uint32_t old_node_id, unsigned char *suffix,
|
||||
uint32_t node_id = old_node_id;
|
||||
log_debug("common_prefix=%zu\n", common_prefix);
|
||||
|
||||
for (int i=0; i < common_prefix; i++) {
|
||||
for (size_t i = 0; i < common_prefix; i++) {
|
||||
c = old_tail[i];
|
||||
log_debug("merge tail, c=%c, node_id=%d\n", c, node_id);
|
||||
next_id = trie_add_transition(self, node_id, c);
|
||||
@@ -559,7 +559,7 @@ exit_prune:
|
||||
void trie_print(trie_t *self) {
|
||||
printf("Trie\n");
|
||||
printf("num_nodes=%zu, alphabet_size=%d\n\n", self->nodes->n, self->alphabet_size);
|
||||
for (int i = 0; i < self->nodes->n; i++) {
|
||||
for (size_t i = 0; i < self->nodes->n; i++) {
|
||||
int32_t base = self->nodes->a[i].base;
|
||||
int32_t check = self->nodes->a[i].check;
|
||||
|
||||
@@ -572,23 +572,23 @@ void trie_print(trie_t *self) {
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
for (int i = 0; i < self->nodes->n; i++) {
|
||||
for (size_t i = 0; i < self->nodes->n; i++) {
|
||||
int32_t base = self->nodes->a[i].base;
|
||||
int32_t check = self->nodes->a[i].check;
|
||||
|
||||
int check_width = abs(check) > 9 ? (int) log10(abs(check))+1 : 1;
|
||||
int base_width = abs(base) > 9 ? (int) log10(abs(base))+1 : 1;
|
||||
int check_width = abs(check) > 9 ? (int) log10(abs(check)) + 1 : 1;
|
||||
int base_width = abs(base) > 9 ? (int) log10(abs(base)) + 1 : 1;
|
||||
if (base < 0) base_width++;
|
||||
if (check < 0) check_width++;
|
||||
int width = base_width > check_width ? base_width : check_width;
|
||||
printf("%*d ", width, check);
|
||||
}
|
||||
printf("\n");
|
||||
for (int i = 0; i < self->tail->n; i++) {
|
||||
for (size_t i = 0; i < self->tail->n; i++) {
|
||||
printf("%c ", self->tail->a[i]);
|
||||
}
|
||||
printf("\n");
|
||||
for (int i = 0; i < self->data->n; i++) {
|
||||
for (size_t i = 0; i < self->data->n; i++) {
|
||||
uint32_t tail = self->data->a[i].tail;
|
||||
uint32_t data = self->data->a[i].data;
|
||||
|
||||
@@ -600,7 +600,7 @@ void trie_print(trie_t *self) {
|
||||
|
||||
}
|
||||
printf("\n");
|
||||
for (int i = 0; i < self->data->n; i++) {
|
||||
for (size_t i = 0; i < self->data->n; i++) {
|
||||
uint32_t tail = self->data->a[i].tail;
|
||||
uint32_t data = self->data->a[i].data;
|
||||
|
||||
@@ -632,7 +632,7 @@ bool trie_add_at_index(trie_t *self, uint32_t node_id, char *key, size_t len, ui
|
||||
|
||||
// Walks node until prefix reached, including the trailing \0
|
||||
|
||||
for (int i = 0; i < len; ptr++, i++, last_node_id = node_id, last_node = node) {
|
||||
for (size_t i = 0; i < len; ptr++, i++, last_node_id = node_id, last_node = node) {
|
||||
|
||||
log_debug("--- char=%d\n", *ptr);
|
||||
node_id = trie_get_transition_index(self, last_node, *ptr);
|
||||
@@ -794,7 +794,7 @@ trie_prefix_result_t trie_get_prefix_from_index(trie_t *self, char *key, size_t
|
||||
|
||||
bool original_node_no_tail = node.base >= 0;
|
||||
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
if (node.base >= 0) {
|
||||
// Include NUL-byte. It may be stored if this phrase is a prefix of a longer one
|
||||
@@ -854,7 +854,7 @@ uint32_t trie_get_from_index(trie_t *self, char *word, size_t len, uint32_t i) {
|
||||
|
||||
// Include NUL-byte. It may be stored if this phrase is a prefix of a longer one
|
||||
|
||||
for (int i = 0; i < len + 1; i++, ptr++, node_id = next_id) {
|
||||
for (size_t i = 0; i < len + 1; i++, ptr++, node_id = next_id) {
|
||||
next_id = trie_get_transition_index(self, node, *ptr);
|
||||
node = trie_get_node(self, next_id);
|
||||
|
||||
@@ -922,14 +922,14 @@ I/O methods
|
||||
|
||||
bool trie_write(trie_t *self, FILE *file) {
|
||||
if (!file_write_uint32(file, TRIE_SIGNATURE) ||
|
||||
!file_write_uint32(file, (uint32_t)self->alphabet_size)||
|
||||
!file_write_chars(file, (char *)self->alphabet, self->alphabet_size) ||
|
||||
!file_write_uint32(file, self->alphabet_size)||
|
||||
!file_write_chars(file, (char *)self->alphabet, (size_t)self->alphabet_size) ||
|
||||
!file_write_uint32(file, self->num_keys) ||
|
||||
!file_write_uint32(file, (uint32_t)self->nodes->n)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int i;
|
||||
size_t i;
|
||||
trie_node_t node;
|
||||
|
||||
for (i = 0; i < self->nodes->n; i++) {
|
||||
@@ -977,7 +977,7 @@ bool trie_save(trie_t *self, char *path) {
|
||||
}
|
||||
|
||||
trie_t *trie_read(FILE *file) {
|
||||
int i;
|
||||
uint32_t i;
|
||||
|
||||
long save_pos = ftell(file);
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ typedef struct trie {
|
||||
uchar_array *tail;
|
||||
char *alphabet;
|
||||
uint8_t alpha_map[NUM_CHARS];
|
||||
int alphabet_size;
|
||||
uint32_t alphabet_size;
|
||||
uint32_t num_keys;
|
||||
} trie_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user