|
Lukáš Hrázký |
4e70f6 |
From 9419fc80e6a09561e8fb38fdea9727afdc2917e9 Mon Sep 17 00:00:00 2001
|
|
Lukáš Hrázký |
4e70f6 |
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
|
|
Lukáš Hrázký |
4e70f6 |
Date: Wed, 9 Mar 2022 15:24:05 +0100
|
|
Lukáš Hrázký |
4e70f6 |
Subject: [PATCH] Revert "Add c API for parsing metadata together"
|
|
Lukáš Hrázký |
4e70f6 |
|
|
Lukáš Hrázký |
4e70f6 |
This reverts commit ff0912d2a89722700f001ef462abd730dacaa8e7.
|
|
Lukáš Hrázký |
4e70f6 |
---
|
|
Lukáš Hrázký |
4e70f6 |
src/CMakeLists.txt | 1 -
|
|
Lukáš Hrázký |
4e70f6 |
src/xml_parser.h | 39 --
|
|
Lukáš Hrázký |
4e70f6 |
src/xml_parser_main_metadata_together.c | 468 ------------------------
|
|
Lukáš Hrázký |
4e70f6 |
3 files changed, 508 deletions(-)
|
|
Lukáš Hrázký |
4e70f6 |
delete mode 100644 src/xml_parser_main_metadata_together.c
|
|
Lukáš Hrázký |
4e70f6 |
|
|
Lukáš Hrázký |
4e70f6 |
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
Lukáš Hrázký |
4e70f6 |
index b3ca9e6..64de052 100644
|
|
Lukáš Hrázký |
4e70f6 |
--- a/src/CMakeLists.txt
|
|
Lukáš Hrázký |
4e70f6 |
+++ b/src/CMakeLists.txt
|
|
Lukáš Hrázký |
4e70f6 |
@@ -31,7 +31,6 @@ SET (createrepo_c_SRCS
|
|
Lukáš Hrázký |
4e70f6 |
xml_parser_primary.c
|
|
Lukáš Hrázký |
4e70f6 |
xml_parser_repomd.c
|
|
Lukáš Hrázký |
4e70f6 |
xml_parser_updateinfo.c
|
|
Lukáš Hrázký |
4e70f6 |
- xml_parser_main_metadata_together.c
|
|
Lukáš Hrázký |
4e70f6 |
koji.c)
|
|
Lukáš Hrázký |
4e70f6 |
|
|
Lukáš Hrázký |
4e70f6 |
SET(headers
|
|
Lukáš Hrázký |
4e70f6 |
diff --git a/src/xml_parser.h b/src/xml_parser.h
|
|
Lukáš Hrázký |
4e70f6 |
index 5ce7c0e..a31718d 100644
|
|
Lukáš Hrázký |
4e70f6 |
--- a/src/xml_parser.h
|
|
Lukáš Hrázký |
4e70f6 |
+++ b/src/xml_parser.h
|
|
Lukáš Hrázký |
4e70f6 |
@@ -278,45 +278,6 @@ cr_xml_parse_updateinfo(const char *path,
|
|
Lukáš Hrázký |
4e70f6 |
void *warningcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
GError **err);
|
|
Lukáš Hrázký |
4e70f6 |
|
|
Lukáš Hrázký |
4e70f6 |
-/** Parse all 3 main metadata types (primary, filelists and other) at the same time.
|
|
Lukáš Hrázký |
4e70f6 |
- * Once a package is fully parsed pkgcb is called which transfers ownership of the package
|
|
Lukáš Hrázký |
4e70f6 |
- * to the user, cr_xml_parse_main_metadata_together no longer needs it and it can be freed.
|
|
Lukáš Hrázký |
4e70f6 |
- * This means we don't have store all the packages in memory at the same time, which
|
|
Lukáš Hrázký |
4e70f6 |
- * significantly reduces the memory footprint.
|
|
Lukáš Hrázký |
4e70f6 |
- * Input metadata files can be compressed.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param primary_path Path to a primary xml file.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param filelists_path Path to a filelists xml file.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param other_path Path to an other xml file.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param newpkgcb Callback for a new package. Called when the new package
|
|
Lukáš Hrázký |
4e70f6 |
- * xml chunk is found and a package object to store
|
|
Lukáš Hrázký |
4e70f6 |
- * the data is needed.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param newpkgcb_data User data for the newpkgcb.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param pkgcb Package callback. Called when a package is completely
|
|
Lukáš Hrázký |
4e70f6 |
- * parsed containing information from all 3 main metadata
|
|
Lukáš Hrázký |
4e70f6 |
- * files. Could be NULL if newpkgcb is not NULL.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param pkgcb_data User data for the pkgcb.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param warningcb Callback for warning messages.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param warningcb_data User data for the warningcb.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param allow_out_of_order Whether we should allow different order of packages
|
|
Lukáš Hrázký |
4e70f6 |
- * among the main metadata files. If allowed, the more
|
|
Lukáš Hrázký |
4e70f6 |
- * the order varies the more memory we will need to
|
|
Lukáš Hrázký |
4e70f6 |
- * store all the started but unfinished packages.
|
|
Lukáš Hrázký |
4e70f6 |
- * @param err GError **
|
|
Lukáš Hrázký |
4e70f6 |
- * @return cr_Error code.
|
|
Lukáš Hrázký |
4e70f6 |
- */
|
|
Lukáš Hrázký |
4e70f6 |
-int
|
|
Lukáš Hrázký |
4e70f6 |
-cr_xml_parse_main_metadata_together(const char *primary_path,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *filelists_path,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *other_path,
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserNewPkgCb newpkgcb,
|
|
Lukáš Hrázký |
4e70f6 |
- void *newpkgcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserPkgCb pkgcb,
|
|
Lukáš Hrázký |
4e70f6 |
- void *pkgcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserWarningCb warningcb,
|
|
Lukáš Hrázký |
4e70f6 |
- void *warningcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
- gboolean allow_out_of_order,
|
|
Lukáš Hrázký |
4e70f6 |
- GError **err);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
/** @} */
|
|
Lukáš Hrázký |
4e70f6 |
|
|
Lukáš Hrázký |
4e70f6 |
#ifdef __cplusplus
|
|
Lukáš Hrázký |
4e70f6 |
diff --git a/src/xml_parser_main_metadata_together.c b/src/xml_parser_main_metadata_together.c
|
|
Lukáš Hrázký |
4e70f6 |
deleted file mode 100644
|
|
Lukáš Hrázký |
4e70f6 |
index 9347c79..0000000
|
|
Lukáš Hrázký |
4e70f6 |
--- a/src/xml_parser_main_metadata_together.c
|
|
Lukáš Hrázký |
4e70f6 |
+++ /dev/null
|
|
Lukáš Hrázký |
4e70f6 |
@@ -1,468 +0,0 @@
|
|
Lukáš Hrázký |
4e70f6 |
-/*
|
|
Lukáš Hrázký |
4e70f6 |
- * Copyright (C) 2021 Red Hat, Inc.
|
|
Lukáš Hrázký |
4e70f6 |
- *
|
|
Lukáš Hrázký |
4e70f6 |
- * Licensed under the GNU Lesser General Public License Version 2.1
|
|
Lukáš Hrázký |
4e70f6 |
- *
|
|
Lukáš Hrázký |
4e70f6 |
- * This library is free software; you can redistribute it and/or
|
|
Lukáš Hrázký |
4e70f6 |
- * modify it under the terms of the GNU Lesser General Public
|
|
Lukáš Hrázký |
4e70f6 |
- * License as published by the Free Software Foundation; either
|
|
Lukáš Hrázký |
4e70f6 |
- * version 2.1 of the License, or (at your option) any later version.
|
|
Lukáš Hrázký |
4e70f6 |
- *
|
|
Lukáš Hrázký |
4e70f6 |
- * This library is distributed in the hope that it will be useful,
|
|
Lukáš Hrázký |
4e70f6 |
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Lukáš Hrázký |
4e70f6 |
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lukáš Hrázký |
4e70f6 |
- * Lesser General Public License for more details.
|
|
Lukáš Hrázký |
4e70f6 |
- *
|
|
Lukáš Hrázký |
4e70f6 |
- * You should have received a copy of the GNU Lesser General Public
|
|
Lukáš Hrázký |
4e70f6 |
- * License along with this library; if not, write to the Free Software
|
|
Lukáš Hrázký |
4e70f6 |
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Lukáš Hrázký |
4e70f6 |
- */
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-#include <glib.h>
|
|
Lukáš Hrázký |
4e70f6 |
-#include <glib/gprintf.h>
|
|
Lukáš Hrázký |
4e70f6 |
-#include <assert.h>
|
|
Lukáš Hrázký |
4e70f6 |
-#include <errno.h>
|
|
Lukáš Hrázký |
4e70f6 |
-#include "error.h"
|
|
Lukáš Hrázký |
4e70f6 |
-#include "xml_parser.h"
|
|
Lukáš Hrázký |
4e70f6 |
-#include "xml_parser_internal.h"
|
|
Lukáš Hrázký |
4e70f6 |
-#include "package_internal.h"
|
|
Lukáš Hrázký |
4e70f6 |
-#include "misc.h"
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-#define ERR_DOMAIN CREATEREPO_C_ERROR
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-typedef struct {
|
|
Lukáš Hrázký |
4e70f6 |
- GHashTable *in_progress_pkgs_hash; //used only when allowing out of order pkgs
|
|
Lukáš Hrázký |
4e70f6 |
- GSList *in_progress_pkgs_list; // used only when not allowing out of order pkgs
|
|
Lukáš Hrázký |
4e70f6 |
- int in_progress_count_primary;
|
|
Lukáš Hrázký |
4e70f6 |
- int in_progress_count_filelists;
|
|
Lukáš Hrázký |
4e70f6 |
- int in_progress_count_other;
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserNewPkgCb newpkgcb; // newpkgcb passed in from user
|
|
Lukáš Hrázký |
4e70f6 |
- void *newpkgcb_data;// newpkgcb data passed in from user
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserPkgCb pkgcb; // pkgcb passed in from user
|
|
Lukáš Hrázký |
4e70f6 |
- void *pkgcb_data; // pkgcb data passed in from user
|
|
Lukáš Hrázký |
4e70f6 |
-} cr_CbData;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-call_user_callback_if_package_finished(cr_Package *pkg, cr_CbData *cb_data, GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- if (pkg && (pkg->loadingflags & CR_PACKAGE_LOADED_PRI) && (pkg->loadingflags & CR_PACKAGE_LOADED_OTH) &&
|
|
Lukáš Hrázký |
4e70f6 |
- (pkg->loadingflags & CR_PACKAGE_LOADED_FIL))
|
|
Lukáš Hrázký |
4e70f6 |
- {
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->in_progress_pkgs_hash) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_hash_table_remove(cb_data->in_progress_pkgs_hash, pkg->pkgId);
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- //remove first element in the list
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_pkgs_list = cb_data->in_progress_pkgs_list->next;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- // One package was fully finished
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_count_primary--;
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_count_filelists--;
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_count_other--;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- // call user package callback
|
|
Lukáš Hrázký |
4e70f6 |
- GError *tmp_err = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->pkgcb && cb_data->pkgcb(pkg, cb_data->pkgcb_data, &tmp_err)) {
|
|
Lukáš Hrázký |
4e70f6 |
- if (tmp_err)
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_prefixed_error(err, tmp_err, "Parsing interrupted: ");
|
|
Lukáš Hrázký |
4e70f6 |
- else
|
|
Lukáš Hrázký |
4e70f6 |
- g_set_error(err, ERR_DOMAIN, CRE_CBINTERRUPTED, "Parsing interrupted");
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- // If callback return CRE_OK but it simultaneously set
|
|
Lukáš Hrázký |
4e70f6 |
- // the tmp_err then it's a programming error.
|
|
Lukáš Hrázký |
4e70f6 |
- assert(tmp_err == NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- };
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_OK;
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static cr_Package*
|
|
Lukáš Hrázký |
4e70f6 |
-find_in_progress_pkg(cr_CbData *cb_data, const char *pkgId, int in_progress_pkg_index, GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- gpointer pval = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->in_progress_pkgs_hash) {
|
|
Lukáš Hrázký |
4e70f6 |
- if (!g_hash_table_lookup_extended(cb_data->in_progress_pkgs_hash, pkgId, NULL, &pval)) {
|
|
Lukáš Hrázký |
4e70f6 |
- pval = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- // This is checking out of order pkgs because if we don't have in_progress_pkgs_hash -> we enforce
|
|
Lukáš Hrázký |
4e70f6 |
- // order by using a list
|
|
Lukáš Hrázký |
4e70f6 |
- pval = g_slist_nth_data(cb_data->in_progress_pkgs_list, in_progress_pkg_index);
|
|
Lukáš Hrázký |
4e70f6 |
- if (pval && g_strcmp0(((cr_Package *) pval)->pkgId, pkgId)) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_set_error(err, ERR_DOMAIN, CRE_XMLPARSER,
|
|
Lukáš Hrázký |
4e70f6 |
- "Out of order metadata: %s vs %s.", ((cr_Package *) pval)->pkgId, pkgId);
|
|
Lukáš Hrázký |
4e70f6 |
- pval = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- return pval;
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static void
|
|
Lukáš Hrázký |
4e70f6 |
-store_in_progress_pkg(cr_CbData *cb_data, cr_Package *pkg, const char *pkgId)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- if (!pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- return;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->in_progress_pkgs_hash) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_hash_table_insert(cb_data->in_progress_pkgs_hash, g_strdup(pkgId), pkg);
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_pkgs_list = g_slist_append(cb_data->in_progress_pkgs_list, pkg);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-newpkgcb_primary(cr_Package **pkg,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *pkgId,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *name,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *arch,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED void *cbdata,
|
|
Lukáš Hrázký |
4e70f6 |
- GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- assert(pkg && *pkg == NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- assert(!err || *err == NULL);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- // This callback is called when parsing of the opening element of a package
|
|
Lukáš Hrázký |
4e70f6 |
- // is done. However because the opening element doesn't contain pkgId
|
|
Lukáš Hrázký |
4e70f6 |
- // (instead it looks like: <package type="rpm">) we cannot check if we
|
|
Lukáš Hrázký |
4e70f6 |
- // already have this package.
|
|
Lukáš Hrázký |
4e70f6 |
- // The only option is to create a new package and after its fully
|
|
Lukáš Hrázký |
4e70f6 |
- // parsed (in pkgcb_primary) either use this package or copy its data
|
|
Lukáš Hrázký |
4e70f6 |
- // into an already existing one.
|
|
Lukáš Hrázký |
4e70f6 |
- // Filelists and other have pkgId present in the opening element so we can
|
|
Lukáš Hrázký |
4e70f6 |
- // avoid this overhead.
|
|
Lukáš Hrázký |
4e70f6 |
- *pkg = cr_package_new();
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_OK;
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-newpkg_general(cr_Package **pkg,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *pkgId,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *name,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *arch,
|
|
Lukáš Hrázký |
4e70f6 |
- void *cbdata,
|
|
Lukáš Hrázký |
4e70f6 |
- int in_progress_count,
|
|
Lukáš Hrázký |
4e70f6 |
- GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- assert(pkg && *pkg == NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- assert(!err || *err == NULL);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData *cb_data = cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- GError *out_of_order_err = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- *pkg = find_in_progress_pkg(cb_data, pkgId, in_progress_count, &out_of_order_err);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (!*pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- // we are handling never before seen package
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->newpkgcb) {
|
|
Lukáš Hrázký |
4e70f6 |
- // user specified their own new function: call it
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->newpkgcb(pkg, pkgId, name, arch, cb_data->newpkgcb_data, err)) {
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- if (!*pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- // when the user callback doesn't return a pkg we should skip it,
|
|
Lukáš Hrázký |
4e70f6 |
- // this means out of order error doesn't apply
|
|
Lukáš Hrázký |
4e70f6 |
- g_clear_error(&out_of_order_err);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- *pkg = cr_package_new();
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- store_in_progress_pkg(cb_data, *pkg, pkgId);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (*err) {
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (out_of_order_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_error(err, out_of_order_err);
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_OK;
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-newpkgcb_filelists(cr_Package **pkg,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *pkgId,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *name,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *arch,
|
|
Lukáš Hrázký |
4e70f6 |
- void *cbdata,
|
|
Lukáš Hrázký |
4e70f6 |
- GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData *cb_data = cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
- return newpkg_general(pkg, pkgId, name, arch, cbdata, cb_data->in_progress_count_filelists, err);
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-newpkgcb_other(cr_Package **pkg,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *pkgId,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *name,
|
|
Lukáš Hrázký |
4e70f6 |
- G_GNUC_UNUSED const char *arch,
|
|
Lukáš Hrázký |
4e70f6 |
- void *cbdata,
|
|
Lukáš Hrázký |
4e70f6 |
- GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData *cb_data = cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
- return newpkg_general(pkg, pkgId, name, arch, cbdata, cb_data->in_progress_count_other, err);
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-pkgcb_filelists(cr_Package *pkg, void *cbdata, G_GNUC_UNUSED GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData *cb_data = cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_count_filelists++;
|
|
Lukáš Hrázký |
4e70f6 |
- pkg->loadingflags |= CR_PACKAGE_LOADED_FIL;
|
|
Lukáš Hrázký |
4e70f6 |
- return call_user_callback_if_package_finished(pkg, cb_data, err);
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-pkgcb_other(cr_Package *pkg, void *cbdata, G_GNUC_UNUSED GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData *cb_data = cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_count_other++;
|
|
Lukáš Hrázký |
4e70f6 |
- pkg->loadingflags |= CR_PACKAGE_LOADED_OTH;
|
|
Lukáš Hrázký |
4e70f6 |
- return call_user_callback_if_package_finished(pkg, cb_data, err);
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static int
|
|
Lukáš Hrázký |
4e70f6 |
-pkgcb_primary(cr_Package *pkg, void *cbdata, G_GNUC_UNUSED GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData *cb_data = cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- GError *out_of_order_err = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- cr_Package *in_progress_pkg = find_in_progress_pkg(cb_data, pkg->pkgId, cb_data->in_progress_count_primary,
|
|
Lukáš Hrázký |
4e70f6 |
- &out_of_order_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (in_progress_pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- // package was already encountered in some other metadata type
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- cr_package_copy_into(pkg, in_progress_pkg);
|
|
Lukáš Hrázký |
4e70f6 |
- cr_package_free(pkg);
|
|
Lukáš Hrázký |
4e70f6 |
- pkg = in_progress_pkg;
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- // we are handling never before seen package
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->newpkgcb) {
|
|
Lukáš Hrázký |
4e70f6 |
- // user specified their own new function: call it and copy package data into user_created_pkg
|
|
Lukáš Hrázký |
4e70f6 |
- cr_Package *user_created_pkg = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- if (cb_data->newpkgcb(&user_created_pkg, pkg->pkgId, pkg->name, pkg->arch, cb_data->newpkgcb_data, err)) {
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- if (user_created_pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- cr_package_copy_into(pkg, user_created_pkg);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- // user_created_pkg can be NULL if newpkgcb returns OK but
|
|
Lukáš Hrázký |
4e70f6 |
- // not an allocated pkg -> this means we should skip it
|
|
Lukáš Hrázký |
4e70f6 |
- store_in_progress_pkg(cb_data, user_created_pkg, pkg->pkgId);
|
|
Lukáš Hrázký |
4e70f6 |
- cr_package_free(pkg);
|
|
Lukáš Hrázký |
4e70f6 |
- pkg = user_created_pkg;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- if (!pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- // when the user callback doesn't return a pkg we should skip it,
|
|
Lukáš Hrázký |
4e70f6 |
- // this means out of order error doesn't apply
|
|
Lukáš Hrázký |
4e70f6 |
- g_clear_error(&out_of_order_err);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- store_in_progress_pkg(cb_data, pkg, pkg->pkgId);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (*err) {
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (out_of_order_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_error(err, out_of_order_err);
|
|
Lukáš Hrázký |
4e70f6 |
- return CR_CB_RET_ERR;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (pkg) {
|
|
Lukáš Hrázký |
4e70f6 |
- cb_data->in_progress_count_primary++;
|
|
Lukáš Hrázký |
4e70f6 |
- pkg->loadingflags |= CR_PACKAGE_LOADED_PRI;
|
|
Lukáš Hrázký |
4e70f6 |
- pkg->loadingflags |= CR_PACKAGE_FROM_XML;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- return call_user_callback_if_package_finished(pkg, cb_data, err);
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-static gboolean
|
|
Lukáš Hrázký |
4e70f6 |
-parse_next_section(CR_FILE *target_file, const char *path, cr_ParserData *pd, GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- char buf[XML_BUFFER_SIZE];
|
|
Lukáš Hrázký |
4e70f6 |
- GError *tmp_err = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- int parsed_len = cr_read(target_file, buf, XML_BUFFER_SIZE, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (tmp_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_critical("%s: Error while reading xml '%s': %s", __func__, path, tmp_err->message);
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_prefixed_error(err, tmp_err, "Read error: ");
|
|
Lukáš Hrázký |
4e70f6 |
- return FALSE;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- int done = parsed_len == 0;
|
|
Lukáš Hrázký |
4e70f6 |
- if (xmlParseChunk(pd->parser, buf, parsed_len, done)) {
|
|
Lukáš Hrázký |
4e70f6 |
- xmlErrorPtr xml_err = xmlCtxtGetLastError(pd->parser);
|
|
Lukáš Hrázký |
4e70f6 |
- g_critical("%s: parsing error '%s': %s", __func__, path,
|
|
Lukáš Hrázký |
4e70f6 |
- (xml_err) ? xml_err->message : "UNKNOWN_ERROR");
|
|
Lukáš Hrázký |
4e70f6 |
- g_set_error(err, ERR_DOMAIN, CRE_XMLPARSER,
|
|
Lukáš Hrázký |
4e70f6 |
- "Parse error '%s' at line: %d (%s)",
|
|
Lukáš Hrázký |
4e70f6 |
- path,
|
|
Lukáš Hrázký |
4e70f6 |
- (xml_err) ? (int) xml_err->line : 0,
|
|
Lukáš Hrázký |
4e70f6 |
- (xml_err) ? (char *) xml_err->message : "UNKNOWN_ERROR");
|
|
Lukáš Hrázký |
4e70f6 |
- return FALSE;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (pd->err) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_error(err, pd->err);
|
|
Lukáš Hrázký |
4e70f6 |
- return FALSE;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- return done;
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-//TODO(amatej): there is quite some overlap with this and cr_load_xml_files,
|
|
Lukáš Hrázký |
4e70f6 |
-// we could use this api and just wrap it in cr_loax_xml_files?
|
|
Lukáš Hrázký |
4e70f6 |
-int cr_xml_parse_main_metadata_together(const char *primary_path,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *filelists_path,
|
|
Lukáš Hrázký |
4e70f6 |
- const char *other_path,
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserNewPkgCb newpkgcb,
|
|
Lukáš Hrázký |
4e70f6 |
- void *newpkgcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserPkgCb pkgcb,
|
|
Lukáš Hrázký |
4e70f6 |
- void *pkgcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
- cr_XmlParserWarningCb warningcb,
|
|
Lukáš Hrázký |
4e70f6 |
- void *warningcb_data,
|
|
Lukáš Hrázký |
4e70f6 |
- gboolean allow_out_of_order,
|
|
Lukáš Hrázký |
4e70f6 |
- GError **err)
|
|
Lukáš Hrázký |
4e70f6 |
-{
|
|
Lukáš Hrázký |
4e70f6 |
- int ret = CRE_OK;
|
|
Lukáš Hrázký |
4e70f6 |
- CR_FILE *primary_f = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- CR_FILE *filelists_f = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- CR_FILE *other_f = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- GError *tmp_err = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- cr_CbData cbdata;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_pkgs_list = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_pkgs_hash = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.newpkgcb = newpkgcb;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.newpkgcb_data = newpkgcb_data;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.pkgcb = pkgcb;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.pkgcb_data = pkgcb_data;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (allow_out_of_order) {
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_pkgs_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- assert(primary_path);
|
|
Lukáš Hrázký |
4e70f6 |
- assert(filelists_path);
|
|
Lukáš Hrázký |
4e70f6 |
- assert(other_path);
|
|
Lukáš Hrázký |
4e70f6 |
- assert(newpkgcb || pkgcb);
|
|
Lukáš Hrázký |
4e70f6 |
- assert(!err || *err == NULL);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- cr_ParserData *primary_pd = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- cr_ParserData *filelists_pd = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
- cr_ParserData *other_pd = NULL;
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- primary_f = cr_open(primary_path, CR_CW_MODE_READ, CR_CW_AUTO_DETECT_COMPRESSION, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (tmp_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = tmp_err->code;
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", primary_path);
|
|
Lukáš Hrázký |
4e70f6 |
- g_clear_error(&tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- goto out;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- filelists_f = cr_open(filelists_path, CR_CW_MODE_READ, CR_CW_AUTO_DETECT_COMPRESSION, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (tmp_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = tmp_err->code;
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", filelists_path);
|
|
Lukáš Hrázký |
4e70f6 |
- g_clear_error(&tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- goto out;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- other_f = cr_open(other_path, CR_CW_MODE_READ, CR_CW_AUTO_DETECT_COMPRESSION, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (tmp_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = tmp_err->code;
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", other_path);
|
|
Lukáš Hrázký |
4e70f6 |
- g_clear_error(&tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- goto out;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- //TODO(amatej): In the future we could make filelists/other optional if there is a need for it. That would mean we
|
|
Lukáš Hrázký |
4e70f6 |
- // should replace the last 0 in primary_parser_data_new depending on whether we have filelists or not.
|
|
Lukáš Hrázký |
4e70f6 |
- primary_pd = primary_parser_data_new(newpkgcb_primary, &cbdata, pkgcb_primary, &cbdata, warningcb, warningcb_data, 0);
|
|
Lukáš Hrázký |
4e70f6 |
- filelists_pd = filelists_parser_data_new(newpkgcb_filelists, &cbdata, pkgcb_filelists, &cbdata, warningcb, warningcb_data);
|
|
Lukáš Hrázký |
4e70f6 |
- other_pd = other_parser_data_new(newpkgcb_other, &cbdata, pkgcb_other, &cbdata, warningcb, warningcb_data);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- gboolean primary_is_done = 0;
|
|
Lukáš Hrázký |
4e70f6 |
- gboolean filelists_is_done = 0;
|
|
Lukáš Hrázký |
4e70f6 |
- gboolean other_is_done = 0;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_count_primary = 0;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_count_filelists = 0;
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_count_other = 0;
|
|
Lukáš Hrázký |
4e70f6 |
- while (!primary_is_done || !filelists_is_done || !other_is_done) {
|
|
Lukáš Hrázký |
4e70f6 |
- while ((cbdata.in_progress_count_primary <= cbdata.in_progress_count_filelists ||
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_count_primary <= cbdata.in_progress_count_other) &&
|
|
Lukáš Hrázký |
4e70f6 |
- !primary_is_done)
|
|
Lukáš Hrázký |
4e70f6 |
- {
|
|
Lukáš Hrázký |
4e70f6 |
- primary_is_done = parse_next_section(primary_f, primary_path, primary_pd, err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (*err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = (*err)->code;
|
|
Lukáš Hrázký |
4e70f6 |
- goto out;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- while ((cbdata.in_progress_count_filelists <= cbdata.in_progress_count_primary ||
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_count_filelists <= cbdata.in_progress_count_other) &&
|
|
Lukáš Hrázký |
4e70f6 |
- !filelists_is_done)
|
|
Lukáš Hrázký |
4e70f6 |
- {
|
|
Lukáš Hrázký |
4e70f6 |
- filelists_is_done = parse_next_section(filelists_f, filelists_path, filelists_pd, err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (*err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = (*err)->code;
|
|
Lukáš Hrázký |
4e70f6 |
- goto out;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- while ((cbdata.in_progress_count_other <= cbdata.in_progress_count_filelists ||
|
|
Lukáš Hrázký |
4e70f6 |
- cbdata.in_progress_count_other <= cbdata.in_progress_count_primary) &&
|
|
Lukáš Hrázký |
4e70f6 |
- !other_is_done)
|
|
Lukáš Hrázký |
4e70f6 |
- {
|
|
Lukáš Hrázký |
4e70f6 |
- other_is_done = parse_next_section(other_f, other_path, other_pd, err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (*err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = (*err)->code;
|
|
Lukáš Hrázký |
4e70f6 |
- goto out;
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
-out:
|
|
Lukáš Hrázký |
4e70f6 |
- if (ret != CRE_OK) {
|
|
Lukáš Hrázký |
4e70f6 |
- // An error already encountered
|
|
Lukáš Hrázký |
4e70f6 |
- // just close the file without error checking
|
|
Lukáš Hrázký |
4e70f6 |
- cr_close(primary_f, NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- cr_close(filelists_f, NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- cr_close(other_f, NULL);
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- // No error encountered yet
|
|
Lukáš Hrázký |
4e70f6 |
- cr_close(primary_f, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (!tmp_err)
|
|
Lukáš Hrázký |
4e70f6 |
- cr_close(filelists_f, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (!tmp_err)
|
|
Lukáš Hrázký |
4e70f6 |
- cr_close(other_f, &tmp_err);
|
|
Lukáš Hrázký |
4e70f6 |
- if (tmp_err) {
|
|
Lukáš Hrázký |
4e70f6 |
- ret = tmp_err->code;
|
|
Lukáš Hrázký |
4e70f6 |
- g_propagate_prefixed_error(err, tmp_err, "Error while closing: ");
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- cr_xml_parser_data_free(primary_pd);
|
|
Lukáš Hrázký |
4e70f6 |
- cr_xml_parser_data_free(filelists_pd);
|
|
Lukáš Hrázký |
4e70f6 |
- cr_xml_parser_data_free(other_pd);
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- if (allow_out_of_order) {
|
|
Lukáš Hrázký |
4e70f6 |
- g_hash_table_destroy(cbdata.in_progress_pkgs_hash);
|
|
Lukáš Hrázký |
4e70f6 |
- } else {
|
|
Lukáš Hrázký |
4e70f6 |
- cr_slist_free_full(cbdata.in_progress_pkgs_list, (GDestroyNotify) cr_package_free);
|
|
Lukáš Hrázký |
4e70f6 |
- }
|
|
Lukáš Hrázký |
4e70f6 |
-
|
|
Lukáš Hrázký |
4e70f6 |
- return ret;
|
|
Lukáš Hrázký |
4e70f6 |
-}
|
|
Lukáš Hrázký |
4e70f6 |
--
|
|
Lukáš Hrázký |
4e70f6 |
2.34.3
|
|
Lukáš Hrázký |
4e70f6 |
|