summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReuben Thomas <rrt@sc3d.org>2021-06-14 15:22:33 +0100
committerReuben Thomas <rrt@sc3d.org>2021-06-14 19:48:16 +0100
commitf6659579ec8f165db7f931eb05717f9f93ef27ef (patch)
tree754dd703d8b74f09251b55197e4cfd0f91d6d103 /src
parent32fc9f475f0c45b3532ed186cc312508c9049840 (diff)
downloadenchant-f6659579ec8f165db7f931eb05717f9f93ef27ef.tar.gz
pwl.c: allow the PWL APIs to be passed -1 as word length
This is strictly an API/ABI change, but bump only the minor version, as in practice it is simply an extension that makes the enchant_pwl_* APIs work like the enchant_dict_* APIs.
Diffstat (limited to 'src')
-rw-r--r--src/pwl.c22
-rw-r--r--src/pwl.h8
2 files changed, 21 insertions, 9 deletions
diff --git a/src/pwl.c b/src/pwl.c
index 4f118a1..db645d5 100644
--- a/src/pwl.c
+++ b/src/pwl.c
@@ -313,8 +313,11 @@ static void enchant_pwl_remove_from_trie(EnchantPWL *pwl,
}
void enchant_pwl_add(EnchantPWL *pwl,
- const char *const word, size_t len)
+ const char *const word, ssize_t len)
{
+ if (len < 0)
+ len = strlen (word);
+
enchant_pwl_refresh_from_file(pwl);
enchant_pwl_add_to_trie(pwl, word, len);
@@ -342,7 +345,7 @@ void enchant_pwl_add(EnchantPWL *pwl,
putc ('\n', f);
}
- if (fwrite (word, sizeof(char), len, f) == len)
+ if (fwrite (word, sizeof(char), len, f) == (size_t)len)
{
putc ('\n', f);
}
@@ -353,8 +356,11 @@ void enchant_pwl_add(EnchantPWL *pwl,
}
void enchant_pwl_remove(EnchantPWL *pwl,
- const char *const word, size_t len)
+ const char *const word, ssize_t len)
{
+ if (len < 0)
+ len = strlen (word);
+
if(enchant_pwl_check(pwl, word, len) == 1)
return;
@@ -525,8 +531,11 @@ static gchar* enchant_utf8_strtitle(const gchar*str, gssize len)
return result;
}
-int enchant_pwl_check(EnchantPWL *pwl, const char *const word, size_t len)
+int enchant_pwl_check(EnchantPWL *pwl, const char *const word, ssize_t len)
{
+ if (len < 0)
+ len = strlen (word);
+
enchant_pwl_refresh_from_file(pwl);
int exists = enchant_pwl_contains(pwl, word, len);
@@ -609,8 +618,11 @@ static int best_distance(char** suggs, const char *const word, size_t len)
/* gives the best set of suggestions from pwl that are at least as good as the
* given suggs (if suggs == NULL just best from pwl) */
char** enchant_pwl_suggest(EnchantPWL *pwl, const char *const word,
- size_t len, char** suggs, size_t* out_n_suggs)
+ ssize_t len, char** suggs, size_t* out_n_suggs)
{
+ if (len < 0)
+ len = strlen (word);
+
int max_dist = suggs ? best_distance(suggs, word, len) : ENCHANT_PWL_MAX_ERRORS;
max_dist = MIN (max_dist, ENCHANT_PWL_MAX_ERRORS);
diff --git a/src/pwl.h b/src/pwl.h
index f713b29..c945e3c 100644
--- a/src/pwl.h
+++ b/src/pwl.h
@@ -42,12 +42,12 @@ typedef struct str_enchant_pwl EnchantPWL;
EnchantPWL* enchant_pwl_init(void);
EnchantPWL* enchant_pwl_init_with_file(const char * file);
-void enchant_pwl_add(EnchantPWL * me, const char *const word, size_t len);
-void enchant_pwl_remove(EnchantPWL * me, const char *const word, size_t len);
-int enchant_pwl_check(EnchantPWL * me,const char *const word, size_t len);
+void enchant_pwl_add(EnchantPWL * me, const char *const word, ssize_t len);
+void enchant_pwl_remove(EnchantPWL * me, const char *const word, ssize_t len);
+int enchant_pwl_check(EnchantPWL * me, const char *const word, ssize_t len);
/*gives the best set of suggestions from pwl that are at least as good as the given suggs*/
char** enchant_pwl_suggest(EnchantPWL *me, const char *const word,
- size_t len, char ** suggs, size_t* out_n_suggs);
+ ssize_t len, char ** suggs, size_t* out_n_suggs);
void enchant_pwl_free(EnchantPWL* me);
#ifdef __cplusplus