jdict

command line tool for looking up terms in yomidict dictionaries
git clone anongit@rnpnr.xyz:jdict.git
Log | Files | Refs | Feed | README | LICENSE

Commit: b0a3ffce971b6c55739bb4669b684e7b0d1c08b1
Parent: 1e37499feb57639452f8ec67c1a2184d64495d34
Author: Randy Palamar
Date:   Sun, 17 Jul 2022 15:02:47 -0600

remove duplicate dictionary generating code

Diffstat:
Mjdict.c | 37+++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/jdict.c b/jdict.c @@ -185,6 +185,23 @@ make_dict(struct Dict *dict, size_t *nents) return ents; } +static DictEnt ** +make_dicts(struct Dict *dicts, size_t ndicts, size_t *nents) +{ + DictEnt **ents; + size_t i; + + ents = xreallocarray(NULL, ndicts, sizeof(DictEnt *)); + + for (i = 0; i < ndicts; i++) { + ents[i] = make_dict(&dicts[i], &nents[i]); + if (ents[i] == NULL) + die("make_dict(%s): returned NULL\n", dicts[i].rom); + } + + return ents; +} + static DictEnt * find_ent(const char *term, DictEnt *ents, size_t nents) { @@ -225,26 +242,22 @@ find_and_print(const char *term, DictEnt *ents, size_t nents) printf("term not found: %s\n\n", term); } -static int +static void find_and_print_defs(struct Dict *dict, char **terms, size_t nterms) { size_t i, nents = 0; DictEnt *ents; - ents = make_dict(dict, &nents); - if (ents == NULL) - return -1; + ents = *make_dicts(dict, 1, &nents); puts(dict->name); for (i = 0; i < nterms; i++) find_and_print(terms[i], ents, nents); free_ents(ents, nents); - - return 0; } -static int +static void repl(struct Dict *dicts, size_t ndicts) { DictEnt **ents; @@ -252,13 +265,7 @@ repl(struct Dict *dicts, size_t ndicts) size_t i, *nents; nents = xreallocarray(NULL, ndicts, sizeof(size_t)); - ents = xreallocarray(NULL, ndicts, sizeof(DictEnt *)); - - for (i = 0; i < ndicts; i++) { - ents[i] = make_dict(&dicts[i], &nents[i]); - if (ents[i] == NULL) - die("make_dict(%s): returned NULL\n", dicts[i].rom); - } + ents = make_dicts(dicts, ndicts, nents); fputs(repl_prompt, stdout); fflush(stdout); @@ -277,8 +284,6 @@ repl(struct Dict *dicts, size_t ndicts) free_ents(ents[i], nents[i]); free(ents); free(nents); - - return 0; } int