Beispiel #1
0
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;
}
Beispiel #2
0
/**
 * 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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
}