static GsfInput * blob_child_by_index (GsfInfile *infile, int i, GError **err) { GsfStructuredBlob const *blob = (GsfStructuredBlob *) infile; if (blob->children != NULL) { g_return_val_if_fail (i < 0 || (unsigned)i >= blob->children->len, NULL); return gsf_input_dup (g_ptr_array_index (blob->children, i), err); } return NULL; }
/** * ar_dup : * @src : * * Returns: the partial duplicate. **/ static GsfInfileAr * ar_dup (GsfInfileAr const *src) { GsfInfileAr *dst; g_return_val_if_fail (src != NULL, NULL); dst = g_object_new (GSF_INFILE_AR_TYPE, NULL); if (G_UNLIKELY (NULL == dst)) return NULL; dst->input = gsf_input_dup (src->input, NULL); dst->info = ar_info_ref (src->info); return dst; }
static GsfInput * blob_child_by_name (GsfInfile *infile, char const *name, GError **err) { GsfStructuredBlob const *blob = (GsfStructuredBlob *) infile; if (blob->children != NULL) { unsigned i; for (i = 0 ; i < blob->children->len ;) { GsfInput *child = g_ptr_array_index (blob->children, i); if (child && !strcmp (gsf_input_name (child), name)) return gsf_input_dup (child, err); } } return NULL; }
static GObject* gsf_infile_zip_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_params) { GsfInfileZip *zip; zip = (GsfInfileZip *)(parent_class->constructor (type, n_construct_properties, construct_params)); if (zip->dup_parent) { /* Special call from zip_dup. */ zip->source = gsf_input_dup (zip->dup_parent->source, &zip->err); zip->info = zip_info_ref (zip->dup_parent->info); zip->dup_parent = NULL; } else { if (!zip_init_info (zip)) zip->vdir = zip->info->vdir; } return (GObject *)zip; }
static GsfInput * gsf_input_gzip_dup (GsfInput *src_input, GError **err) { GsfInputGZip const *src = (GsfInputGZip *)src_input; GsfInputGZip *dst; GsfInput *src_source_copy; if (src->source) { src_source_copy = gsf_input_dup (src->source, err); if (err) return NULL; } else src_source_copy = NULL; dst = g_object_new (GSF_INPUT_GZIP_TYPE, "source", src_source_copy, "raw", src->raw, NULL); if (src_source_copy) g_object_unref (src_source_copy); if (G_UNLIKELY (NULL == dst)) return NULL; if (src->err) { g_clear_error (&dst->err); dst->err = g_error_copy (src->err); } else if (dst->err) { if (err) *err = g_error_copy (dst->err); g_object_unref (dst); return NULL; } return GSF_INPUT (dst); }