diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2021-10-07 16:26:57 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2021-10-07 16:28:44 +0200 |
commit | 20fcf2a0c79b8433bf67594d45af54001ca1b613 (patch) | |
tree | 4237e3a4cf46b9e1875ad1a236f613f54e45e911 /src/stardict.c | |
parent | ed8b1bcdad7c430af1eef5fbe78b6ec4eb3eb60e (diff) | |
download | tdv-20fcf2a0c79b8433bf67594d45af54001ca1b613.tar.gz tdv-20fcf2a0c79b8433bf67594d45af54001ca1b613.tar.xz tdv-20fcf2a0c79b8433bf67594d45af54001ca1b613.zip |
tabfile: make it possible to set metadata
And some related clean-up.
Diffstat (limited to 'src/stardict.c')
-rw-r--r-- | src/stardict.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/stardict.c b/src/stardict.c index a757590..d371eb1 100644 --- a/src/stardict.c +++ b/src/stardict.c @@ -209,6 +209,30 @@ const struct stardict_ifo_key _stardict_ifo_keys[] = gsize _stardict_ifo_keys_length = G_N_ELEMENTS (_stardict_ifo_keys); +/// Copy the contents of one StardictInfo object into another. Ignores path. +void +stardict_info_copy (StardictInfo *dest, const StardictInfo *src) +{ + dest->version = src->version; + + guint i; + for (i = 0; i < _stardict_ifo_keys_length; i++) + { + const struct stardict_ifo_key *key = &_stardict_ifo_keys[i]; + if (key->type == IFO_STRING) + { + gchar **p = &G_STRUCT_MEMBER (gchar *, dest, key->offset); + gchar *q = G_STRUCT_MEMBER (gchar *, src, key->offset); + + g_free (*p); + *p = q ? g_strdup (q) : NULL; + } + else + G_STRUCT_MEMBER (gulong, dest, key->offset) = + G_STRUCT_MEMBER (gulong, src, key->offset); + } +} + static gboolean load_ifo (StardictInfo *sti, const gchar *path, GError **error) { |