aboutsummaryrefslogtreecommitdiff
path: root/src/stardict.c
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-10-07 16:26:57 +0200
committerPřemysl Eric Janouch <p@janouch.name>2021-10-07 16:28:44 +0200
commit20fcf2a0c79b8433bf67594d45af54001ca1b613 (patch)
tree4237e3a4cf46b9e1875ad1a236f613f54e45e911 /src/stardict.c
parented8b1bcdad7c430af1eef5fbe78b6ec4eb3eb60e (diff)
downloadtdv-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.c24
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)
{