Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/rpm-software-management/createrepo_c.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Mlcoch <tmlcoch@redhat.com>2014-06-04 18:09:57 +0400
committerTomas Mlcoch <tmlcoch@redhat.com>2014-06-04 18:42:53 +0400
commit60e7241287dd162c7cf23ffa6048c6bef90ec425 (patch)
treee768a97a4e2af53bad07e3be1a4ee4ff4b00c1e1
parent1be1bf214a2a968bd68e9145148cca6d9c9898c2 (diff)
parsepkg: cr_package_from_rpm() refactored to use cr_package_from_rpm_base()
-rw-r--r--src/parsepkg.c64
1 files changed, 27 insertions, 37 deletions
diff --git a/src/parsepkg.c b/src/parsepkg.c
index 1e6cd29..05d8fa1 100644
--- a/src/parsepkg.c
+++ b/src/parsepkg.c
@@ -148,36 +148,39 @@ cr_package_from_rpm(const char *filename,
struct stat *stat_buf,
GError **err)
{
- Header hdr;
cr_Package *pkg = NULL;
- const char *checksum_type_str;
GError *tmp_err = NULL;
assert(filename);
assert(!err || *err == NULL);
- checksum_type_str = cr_checksum_name_str(checksum_type);
+ // Get a package object
+ pkg = cr_package_from_rpm_base(filename, changelog_limit, err);
+ if (!pkg)
+ goto errexit;
- if (!read_header(filename, &hdr, err))
- return NULL;
+ pkg->location_href = cr_safe_string_chunk_insert(pkg->chunk, location_href);
+ pkg->location_base = cr_safe_string_chunk_insert(pkg->chunk, location_base);
- // Get file stat
- gint64 mtime;
- gint64 size;
+ // Get checksum type string
+ pkg->checksum_type = cr_safe_string_chunk_insert(pkg->chunk,
+ cr_checksum_name_str(checksum_type));
+ // Get file stat
if (!stat_buf) {
struct stat stat_buf_own;
if (stat(filename, &stat_buf_own) == -1) {
- g_warning("%s: stat() error (%s)", __func__, strerror(errno));
- g_set_error(err, CR_PARSEPKG_ERROR, CRE_IO, "stat() failed");
- headerFree(hdr);
- return NULL;
+ g_warning("%s: stat(%s) error (%s)", __func__,
+ filename, strerror(errno));
+ g_set_error(err, CR_PARSEPKG_ERROR, CRE_IO, "stat(%s) failed: %s",
+ filename, strerror(errno));
+ goto errexit;
}
- mtime = stat_buf_own.st_mtime;
- size = stat_buf_own.st_size;
+ pkg->time_file = stat_buf_own.st_mtime;
+ pkg->size_package = stat_buf_own.st_size;
} else {
- mtime = stat_buf->st_mtime;
- size = stat_buf->st_size;
+ pkg->time_file = stat_buf->st_mtime;
+ pkg->size_package = stat_buf->st_size;
}
// Compute checksum
@@ -185,9 +188,10 @@ cr_package_from_rpm(const char *filename,
if (!checksum) {
g_propagate_prefixed_error(err, tmp_err,
"Error while checksum calculation: ");
- headerFree(hdr);
- return NULL;
+ goto errexit;
}
+ pkg->pkgId = cr_safe_string_chunk_insert(pkg->chunk, checksum);
+ free(checksum);
// Get header range
struct cr_HeaderRangeStruct hdr_r = cr_get_header_byte_range(filename,
@@ -195,31 +199,17 @@ cr_package_from_rpm(const char *filename,
if (tmp_err) {
g_propagate_prefixed_error(err, tmp_err,
"Error while determinig header range: ");
- free(checksum);
- return NULL;
+ goto errexit;
}
- // Get a package object
- pkg = cr_package_from_header(hdr, changelog_limit, err);
- headerFree(hdr);
- if (!pkg) {
- free(checksum);
- return NULL;
- }
-
- // Fill missing values
- pkg->pkgId = cr_safe_string_chunk_insert(pkg->chunk, checksum);
- pkg->checksum_type = cr_safe_string_chunk_insert(pkg->chunk, checksum_type_str);
- pkg->time_file = mtime;
- pkg->size_package = size;
- pkg->location_href = cr_safe_string_chunk_insert(pkg->chunk, location_href);
- pkg->location_base = cr_safe_string_chunk_insert(pkg->chunk, location_base);
pkg->rpm_header_start = hdr_r.start;
pkg->rpm_header_end = hdr_r.end;
- free(checksum);
-
return pkg;
+
+errexit:
+ cr_package_free(pkg);
+ return NULL;
}