summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pkgtools/pkg_install/files/info/perform.c58
-rw-r--r--pkgtools/pkg_install/files/lib/version.h4
2 files changed, 37 insertions, 25 deletions
diff --git a/pkgtools/pkg_install/files/info/perform.c b/pkgtools/pkg_install/files/info/perform.c
index b0ed63ce5cf..731878e78cf 100644
--- a/pkgtools/pkg_install/files/info/perform.c
+++ b/pkgtools/pkg_install/files/info/perform.c
@@ -1,4 +1,4 @@
-/* $NetBSD: perform.c,v 1.43 2008/02/22 15:53:52 joerg Exp $ */
+/* $NetBSD: perform.c,v 1.44 2008/02/22 21:58:16 joerg Exp $ */
#if HAVE_CONFIG_H
#include "config.h"
@@ -17,7 +17,7 @@
#if 0
static const char *rcsid = "from FreeBSD Id: perform.c,v 1.23 1997/10/13 15:03:53 jkh Exp";
#else
-__RCSID("$NetBSD: perform.c,v 1.43 2008/02/22 15:53:52 joerg Exp $");
+__RCSID("$NetBSD: perform.c,v 1.44 2008/02/22 21:58:16 joerg Exp $");
#endif
#endif
@@ -124,38 +124,39 @@ static const struct pkg_meta_desc {
size_t entry_offset;
const char *entry_filename;
int entry_mask;
+ int required_file;
} pkg_meta_descriptors[] = {
{ offsetof(struct pkg_meta, meta_contents), CONTENTS_FNAME ,
- LOAD_CONTENTS},
+ LOAD_CONTENTS, 1},
{ offsetof(struct pkg_meta, meta_comment), COMMENT_FNAME,
- LOAD_COMMENT },
+ LOAD_COMMENT, 1 },
{ offsetof(struct pkg_meta, meta_desc), DESC_FNAME,
- LOAD_DESC },
+ LOAD_DESC, 1 },
{ offsetof(struct pkg_meta, meta_install), INSTALL_FNAME,
- LOAD_INSTALL },
+ LOAD_INSTALL, 0 },
{ offsetof(struct pkg_meta, meta_deinstall), DEINSTALL_FNAME,
- LOAD_DEINSTALL },
+ LOAD_DEINSTALL, 0 },
{ offsetof(struct pkg_meta, meta_display), DISPLAY_FNAME,
- LOAD_DISPLAY },
+ LOAD_DISPLAY, 0 },
{ offsetof(struct pkg_meta, meta_mtree), MTREE_FNAME,
- LOAD_MTREE },
+ LOAD_MTREE, 0 },
{ offsetof(struct pkg_meta, meta_build_version), BUILD_VERSION_FNAME,
- LOAD_BUILD_VERSION },
+ LOAD_BUILD_VERSION, 0 },
{ offsetof(struct pkg_meta, meta_build_info), BUILD_INFO_FNAME,
- LOAD_BUILD_INFO },
+ LOAD_BUILD_INFO, 0 },
{ offsetof(struct pkg_meta, meta_size_pkg), SIZE_PKG_FNAME,
- LOAD_SIZE_PKG },
+ LOAD_SIZE_PKG, 0 },
{ offsetof(struct pkg_meta, meta_size_all), SIZE_ALL_FNAME,
- LOAD_SIZE_ALL },
+ LOAD_SIZE_ALL, 0 },
{ offsetof(struct pkg_meta, meta_preserve), PRESERVE_FNAME,
- LOAD_PRESERVE },
+ LOAD_PRESERVE, 0 },
{ offsetof(struct pkg_meta, meta_views), VIEWS_FNAME,
- LOAD_VIEWS },
+ LOAD_VIEWS, 0 },
{ offsetof(struct pkg_meta, meta_required_by), REQUIRED_BY_FNAME,
- LOAD_REQUIRED_BY },
+ LOAD_REQUIRED_BY, 0 },
{ offsetof(struct pkg_meta, meta_installed_info), INSTALLED_INFO_FNAME,
- LOAD_INSTALLED_INFO },
- { 0, NULL, 0 },
+ LOAD_INSTALLED_INFO, 0 },
+ { 0, NULL, 0, 0 },
};
static int desired_meta_data;
@@ -185,7 +186,9 @@ read_meta_data_from_fd(int fd)
const struct pkg_meta_desc *descr, *last_descr;
char **target;
int64_t size;
- int r;
+ int r, found_required;
+
+ found_required = 0;
archive = archive_read_new();
archive_read_support_compression_all(archive);
@@ -210,6 +213,9 @@ read_meta_data_from_fd(int fd)
if (descr->entry_filename == NULL)
break;
+ if (descr->required_file)
+ ++found_required;
+
target = (char **)((char *)meta + descr->entry_offset);
if (*target)
errx(2, "duplicate entry, package corrupt");
@@ -234,6 +240,15 @@ read_meta_data_from_fd(int fd)
(*target)[size] = '\0';
}
+ for (descr = pkg_meta_descriptors; descr->entry_filename; ++descr) {
+ if (descr->required_file)
+ --found_required;
+ }
+ if (found_required != 0) {
+ free_pkg_meta(meta);
+ return NULL;
+ }
+
archive_read_finish(archive);
return meta;
@@ -362,11 +377,8 @@ pkg_do(const char *pkg)
meta = read_meta_data_from_pkgdb(pkg);
}
- if (meta->meta_contents == NULL ||
- meta->meta_comment == NULL ||
- meta->meta_desc == NULL) {
+ if (meta == NULL) {
warnx("invalid package `%s' skipped", pkg);
- free_pkg_meta(meta);
return 1;
}
diff --git a/pkgtools/pkg_install/files/lib/version.h b/pkgtools/pkg_install/files/lib/version.h
index 93c16c4b97c..d97194f8e0e 100644
--- a/pkgtools/pkg_install/files/lib/version.h
+++ b/pkgtools/pkg_install/files/lib/version.h
@@ -1,4 +1,4 @@
-/* $NetBSD: version.h,v 1.93 2008/02/22 15:53:52 joerg Exp $ */
+/* $NetBSD: version.h,v 1.94 2008/02/22 21:58:16 joerg Exp $ */
/*
* Copyright (c) 2001 Thomas Klausner. All rights reserved.
@@ -33,6 +33,6 @@
#ifndef _INST_LIB_VERSION_H_
#define _INST_LIB_VERSION_H_
-#define PKGTOOLS_VERSION "20080222"
+#define PKGTOOLS_VERSION "20080223"
#endif /* _INST_LIB_VERSION_H_ */