diff options
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) { |