Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Aug 2009 08:44:20 GMT
From:      David Forsythe <dforsyth@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 167231 for review
Message-ID:  <200908120844.n7C8iK33050055@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167231

Change 167231 by dforsyth@squirrel on 2009/08/12 08:43:44

	Fix required_by read.

Affected files ...

.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#43 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#38 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db.c#10 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb.c#8 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb.h#7 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb_read.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_error.h#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_manifest.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_manifest.h#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_manifest_plist.c#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_private.h#17 edit
.. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/main.c#29 edit
.. //depot/projects/soc2009/dforsyth_libpkg/pkg_info/pkg_info.h#9 edit

Differences ...

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#43 (text+ko) ====

@@ -49,6 +49,7 @@
 	p->comment = NULL;
 	p->description = NULL;
 	p->display = NULL;
+	p->reqd_by_count = 0;
 	p->required_by = NULL;
 	p->mtree_dirs = NULL;
 	p->pm = NULL;
@@ -115,16 +116,6 @@
 	return (pkg_manifest_name(p->pm));
 }
 
-const char *
-pkg_cwd(struct pkg *p)
-{
-	pkg_check_magic(p, __func__);
-	if (pkg_parse_manifest(p) != PKG_OK)
-		return (NULL);
-
-	return ((const char *)pkg_manifest_cwd(p->pm));
-}
-
 /* Retrieve pkg origin.  @origin in plist.  The directory of the port that
  * this pkg was create from. */
 
@@ -236,13 +227,13 @@
 	return (p->mtree_dirs);
 }
 
-const char *
+const char *const *
 pkg_required_by(struct pkg *p)
 {
 	if (p->in_db != NULL)
 		pkg_read_pkg_element_from_db(p, PKG_ELEM_REQUIRED_BY);
 
-	return ((const char *)p->required_by);
+	return ((const char *const *)p->required_by);
 }
 
 const char *
@@ -340,7 +331,7 @@
 	if (p->pm == NULL)
 		pkg_parse_manifest(p);
 
-	return (pkg_manifest_pkg_file_list(p->pm));
+	return (pkg_manifest_file_list(p->pm));
 }
 
 /* Retrieve a list of dependencies for this package (by name).  Return a
@@ -353,7 +344,7 @@
 	if (p->pm == NULL && p->in_db != NULL)
 		pkg_parse_manifest(p);
 		
-	return (pkg_manifest_pkg_depend_list(p->pm));
+	return (pkg_manifest_depend_list(p->pm));
 }
 
 /* Retrieve a list of conflicts for this package (by name).  Return a list
@@ -366,7 +357,7 @@
 	if (p->pm == NULL && p->in_db != NULL)
 		pkg_parse_manifest(p);
 
-	return (pkg_manifest_pkg_conflict_list(p->pm));
+	return (pkg_manifest_conflict_list(p->pm));
 }
 
 const char *const *
@@ -376,7 +367,7 @@
 	if (p->pm == NULL && p->in_db != NULL)
 		pkg_parse_manifest(p);
 
-	return (pkg_manifest_install_pkg_command_list(p->pm));
+	return (pkg_manifest_exec_cmd_list(p->pm));
 }
 
 const char *const *
@@ -386,14 +377,14 @@
 	if (p->pm == NULL && p->in_db != NULL)
 		pkg_parse_manifest(p);
 
-	return (pkg_manifest_deinstall_pkg_command_list(p->pm));
+	return (pkg_manifest_unexec_cmd_list(p->pm));
 }
 
 /* Add a file to a package. This is fairly useless at this point
  * because... well, there the hell is the file coming from? */
 
 int
-pkg_insert_pkg_file(struct pkg *p, const char *path, const char *cwd, const char *md5, 
+pkg_add_pkg_file(struct pkg *p, const char *path, const char *cwd, const char *md5, 
 	const char *mode, const char *owner, const char *group)
 {
 	int status;
@@ -404,17 +395,37 @@
 	
 	status = PKG_OK;
 	pkg_parse_manifest(p);
-	status |= pkg_manifest_insert_pkg_file(p->pm, path, md5, cwd, mode, owner, group);
+	status |= pkg_manifest_add_file(p->pm, path, md5, cwd, mode, owner, group);
 
 	return (status);	
 }
 
+int
+pkg_remove_pkg_file(struct pkg *p, const char *path)
+{
+	struct pkg_file *pf;
+	pkg_check_magic(p, __func__);
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
+		return (-1);
+	return (pkg_file_ignored(pf));
+}
+
+int
+pkg_pkg_file_ignored(struct pkg *p, const char *path)
+{
+	struct pkg_file *pf;
+	pkg_check_magic(p, __func__);
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
+		return (NULL);
+	return ((const char *)pkg_file_ignored(pf));
+}
+
 const char *
 pkg_pkg_file_cwd(struct pkg *p, const char *path)
 {
 	struct pkg_file *pf;
 	pkg_check_magic(p, __func__);
-	if ((pf = pkg_manifest_select_pkg_file(p->pm, path)) == NULL)
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
 		return (NULL);
 	return ((const char *)pkg_file_cwd(pf));
 }
@@ -424,7 +435,7 @@
 {
 	struct pkg_file *pf;
 	pkg_check_magic(p, __func__);
-	if ((pf = pkg_manifest_select_pkg_file(p->pm, path)) == NULL)
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
 		return (NULL);
 	return ((const char *)pkg_file_group(pf));
 }
@@ -434,7 +445,7 @@
 {
 	struct pkg_file *pf;
 	pkg_check_magic(p, __func__);
-	if ((pf = pkg_manifest_select_pkg_file(p->pm, path)) == NULL)
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
 		return (NULL);
 	return ((const char *)pkg_file_md5(pf));
 }
@@ -444,7 +455,7 @@
 {
 	struct pkg_file *pf;
 	pkg_check_magic(p, __func__);
-	if ((pf = pkg_manifest_select_pkg_file(p->pm, path)) == NULL)
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
 		return (NULL);
 	return ((const char *)pkg_file_mode(pf));
 }
@@ -454,17 +465,32 @@
 {
 	struct pkg_file *pf;
 	pkg_check_magic(p, __func__);
-	if ((pf = pkg_manifest_select_pkg_file(p->pm, path)) == NULL)
+	if ((pf = pkg_manifest_select_file(p->pm, path)) == NULL)
 		return (NULL);
 	return ((const char *)pkg_file_owner(pf));
 }
 
+int
+pkg_add_pkg_depend(struct pkg *p, const char *name, const char *origin,
+	const char *version)
+{
+	pkg_check_magic(p, __func__);
+	pkg_parse_manifest(p);
+	return (pkg_manifest_add_depend(name, origin, version));
+}
+
+int
+pkg_remove_pkg_depend(struct pkg *p, const char *name)
+{
+	return (0);
+}
+
 const char *
 pkg_pkg_depend_origin(struct pkg *p, const char *name)
 {
 	struct pkg_depend *pd;
 	pkg_check_magic(p, __func__);
-	if ((pd = pkg_manifest_select_pkg_depend(p->pm, name)) == NULL)
+	if ((pd = pkg_manifest_select_depend(p->pm, name)) == NULL)
 		return (NULL);
 	return ((const char *)pkg_depend_origin(pd));
 }
@@ -589,7 +615,7 @@
 }
 
 int
-__pkg_set_required_by_ptr(struct pkg *p, char *required_by_ptr)
+__pkg_set_required_by_ptr(struct pkg *p, char **required_by_ptr)
 {
 	pkg_check_magic(p, __func__);
 	p->required_by = required_by_ptr;

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#38 (text+ko) ====

@@ -29,12 +29,10 @@
 
 const char *pkg_ident(struct pkg *p);
 const char *pkg_name(struct pkg *p);
-const char *pkg_cwd(struct pkg *p);
 const char *pkg_origin(struct pkg *p);
 
 int pkg_set_ident(struct pkg *p, const char *ident);
 int pkg_set_name(struct pkg *p, const char *name);
-int pkg_set_cwd(struct pkg *p, const char *cwd);
 int pkg_set_origin(struct pkg *p, const char *origin);
 
 int pkg_set_comment(struct pkg *p, const char *comment);
@@ -61,18 +59,20 @@
 const char *const *pkg_execs(struct pkg *p);
 const char *const *pkg_unexecs(struct pkg *p);
 
-int pkg_insert_pkg_file(struct pkg *p, const char *path, const char *cwd, 
+int pkg_add_pkg_file(struct pkg *p, const char *path, const char *cwd, 
 	const char *group, const char *md5, const char *mode, 
 	const char *owner);
-int pkg_delete_pkg_file(struct pkg *p, const char *path);
+int pkg_remove_pkg_file(struct pkg *p, const char *path);
+int pkg_pkg_file_ignored(struct pkg *p, const char *path);
 const char *pkg_pkg_file_cwd(struct pkg *p, const char *path);
 const char *pkg_pkg_file_group(struct pkg *p, const char *path);
 const char *pkg_pkg_file_md5(struct pkg *p, const char *path);
 const char *pkg_pkg_file_mode(struct pkg *p, const char *path);
 const char *pkg_pkg_file_owner(struct pkg *p, const char *path);
 
-int pkg_add_depend(struct pkg *p, const char *name, const char *origin, int version);
-int pkg_remove_depend(struct pkg *p, const char *name);
+int pkg_add_pkg_depend(struct pkg *p, const char *name, const char *origin, 
+	const char *version);
+int pkg_remove_pkg_depend(struct pkg *p, const char *name);
 const char *pkg_pkg_depend_origin(struct pkg *p, const char *name);
 int pkg_pkg_depend_version(struct pkg *p, const char *name);
 
@@ -87,7 +87,7 @@
 int pkg_preserve(struct pkg *p);
 int pkg_complete(struct pkg *p);
 
-const char *pkg_required_by(struct pkg *p);
+const char *const *pkg_required_by(struct pkg *p);
 
 /* pkg_db */
 

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db.c#10 (text+ko) ====

@@ -79,7 +79,7 @@
 {
 	pkg_db_check_magic(db, __func__);
 
-	pkg_db_clear_pkg_list(db); /* Should set sub_count to 0. */
+	pkg_db_clear_pkg_entries(db); /* Should set sub_count to 0. */
 	free(db->db_root);
 
 	db->open = 0;
@@ -170,14 +170,6 @@
 	return;
 }
 
-void
-pkg_db_clear_pkg_list(struct pkg_db *db)
-{
-	if (db)
-		return;
-	return;
-}
-
 int
 pkg_db_pkg_count(struct pkg_db *db)
 {

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb.c#8 (text+ko) ====

@@ -78,46 +78,16 @@
 int
 pkg_db_hierdb_file_exists(struct pkg_db *db, struct pkg *p, const char *filename)
 {
-	return (1);
-}
-
-#if 0
-int
-pkg_db_hierdb_read_pkg_from_db(struct pkg_db *db, struct pkg *p)
-{
-	char *ident;
+	int status;
+	struct stat sb;
+	char *dir;
 	char *path;
-	int status;
 
-	status = PKG_OK;
-	ident = pkg_ident(p);
-	if (ident == NULL)
-		return (PKG_NOT_OK);
-
-	path = path_build(ident, COMMENT_FILE);
-	status |= pkg_set_comment(p,pkg_db_hierdb_read_file_to_text(db, path));
+	dir = path_build(pkg_db_db_root(db), pkg_ident(p));
+	path = path_build(dir, filename);
+	free(dir);
+	status = access(path, R_OK);
 	free(path);
-	
-	path = path_build(ident, DESC_FILE);
-	status |= pkg_set_description(p, pkg_db_hierdb_read_file_to_text(db, path));
-	free(path);
-
-	path = path_build(ident, CONTENTS_FILE);
-	status |= pkg_set_contents(p, pkg_db_hierdb_read_file_to_text(db, path));
-	free(path);
-
-	path = path_build(ident, DISPLAY_FILE);
-	status |= pkg_set_display(p, pkg_db_hierdb_read_file_to_text(db, path));
-	free(path);
-
-	path = path_build(ident, MTREE_DIRS_FILE);
-	status |= pkg_set_mtree_dirs(p,	pkg_db_hierdb_read_file_to_text(db, path));
-	free(path);
-
-	path = path_build(ident, REQUIRED_BY_FILE);
-	status |= pkg_set_required_by(p, pkg_db_hierdb_read_file_to_text(db, path));
-	free(path);
+	return (!status);
+}
 
-	return (status);
-}
-#endif

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb.h#7 (text+ko) ====

@@ -19,6 +19,4 @@
 
 int pkg_db_hierdb_file_exists(struct pkg_db *db, struct pkg *p, const char *filename);
 
-// int pkg_db_hierdb_read_pkg_element(struct pkg_db *db, struct pkg *p, int element);
-
 #endif

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb_read.c#4 (text+ko) ====

@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <limits.h>
 
 #include "pkg_util.h"
 #include "pkg_error.h"
@@ -82,7 +83,7 @@
 	dir = path_build(db->db_root, p->ident);
 	path = path_build(dir, filename);
 
-
+	free(dir);
 	file = fopen(path, "r");
 
 	return (file);
@@ -139,6 +140,8 @@
 /* These will not be staying this way.  For now, assume that all files are where we
  * want them to be, and assume a PLIST manifest. */
 
+/* XXX: I'd like to move a few of these elements into the manifest later on. */
+
 static int
 pkg_db_hierdb_read_comment_to_pkg(struct pkg_db *db, struct pkg *p)
 {
@@ -214,17 +217,32 @@
 static int 
 pkg_db_hierdb_read_required_by_to_pkg(struct pkg_db *db, struct pkg *p)
 {
-	char *text;
+	int count;
+	char line[LINE_MAX];
+	char **reqdby;
+	char **list;
+	FILE *reqdby_stream;
 
 	if (!pkg_db_hierdb_file_exists(db, p, REQUIRED_BY_FILE))
-		return (PKG_NOT_OK);
+		return (PKG_OK); /* REQUIRED_BY doesn't have to exist. */
 
-	text = pkg_db_hierdb_read_file_to_text(db, p, REQUIRED_BY_FILE);
-	if (text == NULL)
-		return (PKG_MEMORY_ERR | PKG_NOT_OK);
+	reqdby_stream = pkg_db_hierdb_open_file_stream_read(db, p, REQUIRED_BY_FILE);
+	for (count = 0, reqdby = NULL; fgets(line, FILENAME_MAX, reqdby_stream) != NULL; count++) {
+		if (count % 10 == 0) {
+			list = reqdby;
+			reqdby = realloc(list, sizeof(*list) * (count + 11));
+			if (reqdby == NULL) {
+				reqdby = list;
+				return (PKG_MEMORY_ERR | PKG_NOT_OK);
+			}
+		}
+		pkg_util_trim_newline(line);
+		reqdby[count] = strdup(line);
+	}
+	reqdby[count] = NULL;
 
-	pkg_util_trim_newline(text);
-	__pkg_set_required_by_ptr(p, text);
+	fclose(reqdby_stream);
+	__pkg_set_required_by_ptr(p, reqdby);
 
 	return (PKG_OK);
 }

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_error.h#5 (text+ko) ====

@@ -5,6 +5,17 @@
 #define PKG_NOT_OK				0x00000001
 #define PKG_MEMORY_ERR			0x00000002
 
+#define pkg_error_null_argument(what, where, actual) \
+			if (actual == NULL) { \
+				pkg_error_msg("NULL "); \
+				pkg_error_msg(what); \
+				pkg_error_msg(" passed to "); \
+				pkg_error_msg(where); \
+				pkg_error_msg("\n"); \
+				rage_quit(); \
+			}
+
+
 void pkg_error_msg(const char *errmsg);
 
 void bad_magic_quit(const char *type, const char *where);

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_manifest.c#4 (text+ko) ====

@@ -9,11 +9,11 @@
 #include "pkg_file.h"
 #include "pkg_manifest.h"
 
-static void pkg_manifest_clear_pkg_conflict_entries(struct pkg_manifest *pm);
-static void pkg_manifest_clear_pkg_depend_entries(struct pkg_manifest *pm);
-static void pkg_manifest_clear_pkg_file_entries(struct pkg_manifest *pm);
-static void pkg_manifest_clear_install_pkg_commands(struct pkg_manifest *pm);
-static void pkg_manifest_clear_deinstall_pkg_commands(struct pkg_manifest *pm);
+static void pkg_manifest_clear_conflict_entries(struct pkg_manifest *pm);
+static void pkg_manifest_clear_depend_entries(struct pkg_manifest *pm);
+static void pkg_manifest_clear_file_entries(struct pkg_manifest *pm);
+static void pkg_manifest_clear_exec_list(struct pkg_manifest *pm);
+static void pkg_manifest_clear_unexec_list(struct pkg_manifest *pm);
 static void pkg_manifest_init(struct pkg_manifest *pm);
 
 void
@@ -49,14 +49,23 @@
 	pm->mtree_file = NULL;
 	pm->display_file = NULL;
 
-	pm->pkg_conflict_list = NULL;
-	pm->pkg_conflict_entries = NULL;
+	pm->conflict_list = NULL;
+	pm->conflict_entries = NULL;
 	
-	pm->pkg_depend_list = NULL;
-	pm->pkg_depend_entries = NULL;
+	pm->depend_list = NULL;
+	pm->depend_entries = NULL;
+
+	pm->file_list = NULL;
+	pm->file_entries = NULL;
+
+	pm->exec_count = 0;
+	pm->exec_list = NULL;
+
+	pm->unexec_count = 0;
+	pm->unexec_list = NULL;
 
-	pm->pkg_file_list = NULL;
-	pm->pkg_file_entries = NULL;
+	pm->dirrm_count = 0;
+	pm->dirrm_list = NULL;
 	
 	pm->complete = 0;
 	pm->dirty = 0;
@@ -76,11 +85,11 @@
 	free(pm->srcdir);
 	free(pm->mtree_file);
 	free(pm->display_file);
-	pkg_manifest_clear_pkg_conflict_entries(pm);
-	pkg_manifest_clear_pkg_depend_entries(pm);
-	pkg_manifest_clear_pkg_file_entries(pm);
-	pkg_manifest_clear_install_pkg_commands(pm);
-	pkg_manifest_clear_deinstall_pkg_commands(pm);
+	pkg_manifest_clear_conflict_entries(pm);
+	pkg_manifest_clear_depend_entries(pm);
+	pkg_manifest_clear_file_entries(pm);
+	pkg_manifest_clear_exec_list(pm);
+	pkg_manifest_clear_unexec_list(pm);
 	
 	pkg_manifest_init(pm);
 }
@@ -95,12 +104,6 @@
 }
 
 const char *
-pkg_manifest_cwd(struct pkg_manifest *pm)
-{
-	return ((const char *)pm->cwd);
-}
-
-const char *
 pkg_manifest_revision(struct pkg_manifest *pm)
 {
 	return ((const char *)pm->rev);
@@ -149,13 +152,6 @@
 }
 
 int
-pkg_manifest_set_cwd(struct pkg_manifest *pm, const char *cwd)
-{
-	pkg_manifest_check_magic(pm, __func__);
-	return (pkg_util_strdup(cwd, &pm->cwd));
-}
-
-int
 pkg_manifest_set_revision(struct pkg_manifest *pm, const char *revision)
 {
 	pkg_manifest_check_magic(pm, __func__);
@@ -191,37 +187,43 @@
 }
 
 const char *const *
-pkg_manifest_pkg_conflict_list(struct pkg_manifest *pm)
+pkg_manifest_conflict_list(struct pkg_manifest *pm)
+{
+	return ((const char *const *)pm->conflict_list);
+}
+
+const char *const *
+pkg_manifest_depend_list(struct pkg_manifest *pm)
 {
-	return ((const char *const *)pm->pkg_conflict_list);
+	return ((const char *const *)pm->depend_list);
 }
 
 const char *const *
-pkg_manifest_pkg_depend_list(struct pkg_manifest *pm)
+pkg_manifest_file_list(struct pkg_manifest *pm)
 {
-	return ((const char *const *)pm->pkg_depend_list);
+	return ((const char *const *)pm->file_list);
 }
 
 const char *const *
-pkg_manifest_pkg_file_list(struct pkg_manifest *pm)
+pkg_manifest_exec_cmd_list(struct pkg_manifest *pm)
 {
-	return ((const char *const *)pm->pkg_file_list);
+	return ((const char *const *)pm->exec_list);
 }
 
 const char *const *
-pkg_manifest_install_pkg_command_list(struct pkg_manifest *pm)
+pkg_manifest_unexec_cmd_list(struct pkg_manifest *pm)
 {
-	return ((const char *const *)pm->pkg_install_list);
+	return ((const char *const *)pm->unexec_list);
 }
 
 const char *const *
-pkg_manifest_deinstall_pkg_command_list(struct pkg_manifest *pm)
+pkg_manifest_dirrm_cmd_list(struct pkg_manifest *pm)
 {
-	return ((const char *const *)pm->pkg_deinstall_list);
+	return ((const char *const *)pm->dirrm_list);
 }
 
 int
-pkg_manifest_insert_pkg_conflict(struct pkg_manifest *pm, const char *name, 
+pkg_manifest_add_conflict(struct pkg_manifest *pm, const char *name, 
 	const char *version)
 {
 	int status;
@@ -234,33 +236,33 @@
 		rage_quit();
 	}
 
-	if (pm->pkg_conflict_count % 5 == 0) {
-		list = pm->pkg_conflict_list;
-		conflicts = pm->pkg_conflict_entries;
-		pm->pkg_conflict_list = realloc(list, sizeof(*list) * (pm->pkg_conflict_count + 6));
-		pm->pkg_conflict_entries = realloc(conflicts, sizeof(*conflicts) * (pm->pkg_conflict_count + 6));
-		if (pm->pkg_conflict_list == NULL || pm->pkg_conflict_entries == NULL) {
-			pm->pkg_conflict_list = list;
-			pm->pkg_conflict_entries = conflicts;
+	if (pm->conflict_count % 5 == 0) {
+		list = pm->conflict_list;
+		conflicts = pm->conflict_entries;
+		pm->conflict_list = realloc(list, sizeof(*list) * (pm->conflict_count + 6));
+		pm->conflict_entries = realloc(conflicts, sizeof(*conflicts) * (pm->conflict_count + 6));
+		if (pm->conflict_list == NULL || pm->conflict_entries == NULL) {
+			pm->conflict_list = list;
+			pm->conflict_entries = conflicts;
 			return (PKG_MEMORY_ERR | PKG_NOT_OK);
 		}
 	}
 
 	status = PKG_OK;
 
-	pc = &pm->pkg_conflict_entries[pm->pkg_conflict_count];
+	pc = &pm->conflict_entries[pm->conflict_count];
 	pkg_conflict_init(pc);
 	status |= pkg_conflict_set_name(pc, name);
 	status |= pkg_conflict_set_version(pc, version);
 	
-	pm->pkg_conflict_list[pm->pkg_conflict_count++] = pkg_conflict_name(pc);
-	pm->pkg_conflict_list[pm->pkg_conflict_count] = NULL;
+	pm->conflict_list[pm->conflict_count++] = pkg_conflict_name(pc);
+	pm->conflict_list[pm->conflict_count] = NULL;
 
 	return (status);
 }
 
 int
-pkg_manifest_insert_pkg_depend(struct pkg_manifest *pm, const char *name, 
+pkg_manifest_add_depend(struct pkg_manifest *pm, const char *name, 
 	const char *origin)
 {
 	int status;
@@ -273,28 +275,27 @@
 		rage_quit();
 	}
 
-	if (pm->pkg_depend_count % 5 == 0) {
-		list = pm->pkg_depend_list;
-		depends = pm->pkg_depend_entries;
-		pm->pkg_depend_list = realloc(list, sizeof(*list) * (pm->pkg_depend_count + 6));
-		pm->pkg_depend_entries = realloc(depends, sizeof(*depends) * (pm->pkg_depend_count + 6));
-		if (pm->pkg_depend_list == NULL || pm->pkg_depend_entries == NULL) {
-			pm->pkg_depend_list = list;
-			pm->pkg_depend_entries = depends;
+	if (pm->depend_count % 10 == 0) {
+		list = pm->depend_list;
+		depends = pm->depend_entries;
+		pm->depend_list = realloc(list, sizeof(*list) * (pm->depend_count + 11));
+		pm->depend_entries = realloc(depends, sizeof(*depends) * (pm->depend_count + 11));
+		if (pm->depend_list == NULL || pm->depend_entries == NULL) {
+			pm->depend_list = list;
+			pm->depend_entries = depends;
 			return (PKG_MEMORY_ERR | PKG_NOT_OK);
 		}
 	}
 
 	status = PKG_OK;
 
-
-	pd = &pm->pkg_depend_entries[pm->pkg_depend_count];
+	pd = &pm->depend_entries[pm->depend_count];
 	pkg_depend_init(pd);
 	status |= pkg_depend_set_name(pd, name);
 	status |= pkg_depend_set_origin(pd, origin);
 
-	pm->pkg_depend_list[pm->pkg_depend_count++] = pkg_depend_name(pd);
-	pm->pkg_depend_list[pm->pkg_depend_count] = NULL;
+	pm->depend_list[pm->depend_count++] = pkg_depend_name(pd);
+	pm->depend_list[pm->depend_count] = NULL;
 
 	return (status);
 }
@@ -302,7 +303,7 @@
 /* Add a file to a manifest. */
 
 int
-pkg_manifest_insert_pkg_file(struct pkg_manifest *pm, const char *path, const char *md5,
+pkg_manifest_add_file(struct pkg_manifest *pm, const char *path, const char *md5,
 	const char *cwd, const char *mode, const char *owner, const char *group)
 {
 	int status;
@@ -316,21 +317,21 @@
 		rage_quit();
 	}
 
-	if (pm->pkg_file_count % 10 == 0) {	
-		list = pm->pkg_file_list;
-		files = pm->pkg_file_entries;
-		pm->pkg_file_list = realloc(list, sizeof(*list) * (pm->pkg_file_count + 11));
-		pm->pkg_file_entries = realloc(files, sizeof(*files) * (pm->pkg_file_count + 11));
-		if (pm->pkg_file_list == NULL || pm->pkg_file_entries == NULL) {
-			pm->pkg_file_list = list;
-			pm->pkg_file_entries = files;
+	if (pm->file_count % 10 == 0) {	
+		list = pm->file_list;
+		files = pm->file_entries;
+		pm->file_list = realloc(list, sizeof(*list) * (pm->file_count + 11));
+		pm->file_entries = realloc(files, sizeof(*files) * (pm->file_count + 11));
+		if (pm->file_list == NULL || pm->file_entries == NULL) {
+			pm->file_list = list;
+			pm->file_entries = files;
 			return (PKG_MEMORY_ERR | PKG_NOT_OK);
 		}
 	}
 
 	status = PKG_OK;
 
-	pf = &pm->pkg_file_entries[pm->pkg_file_count];
+	pf = &pm->file_entries[pm->file_count];
 	pkg_file_init(pf);
 	status |= pkg_file_set_path(pf, path);
 	status |= pkg_file_set_md5(pf, md5);
@@ -339,205 +340,206 @@
 	status |= pkg_file_set_owner(pf, owner);
 	status |= pkg_file_set_group(pf, group);
 	
-	pm->pkg_file_list[pm->pkg_file_count++] = pkg_file_path(pf);
-	pm->pkg_file_list[pm->pkg_file_count] = NULL;
-	
+	pm->file_list[pm->file_count++] = pkg_file_path(pf);
+	pm->file_list[pm->file_count] = NULL;
+
 	return (status);
 }
 
-/* XXX: This method of storing commands is pretty much unacceptable.  Take a look at
- * previous attempts at a package library or try to devise a new way of storing this
- * information. */
+
+/* Add command strings to a package.  Do not sort. */
+
+/* Add an exec command to a manifest, which will be run at install time.  Returns the
+ * status of the operation. */
 
 int
-pkg_manifest_insert_install_pkg_command(struct pkg_manifest *pm, int type, 
-	const char *argument) {
+pkg_manifest_add_exec_cmd(struct pkg_manifest *pm, const char *cmd) 
+{
 	int status;
 	char **list;
-	struct pkg_command *commands;
-	struct pkg_command *pe;
 
-	if (argument == NULL) {
-		pkg_error_msg("");
-		rage_quit();
-	}
+	pkg_error_null_argument("command", cmd, __func__);
 
-	if (pm->pkg_install_count % 10 == 0) {
-		list = pm->pkg_install_list;
-		commands = pm->pkg_install_entries;
-		pm->pkg_install_list = realloc(list, sizeof(*list) * (pm->pkg_install_count + 11));
-		pm->pkg_install_entries = realloc(commands, sizeof(*commands) * (pm->pkg_install_count + 11));
-		if (pm->pkg_install_list == NULL || pm->pkg_install_entries == NULL) {
-			pm->pkg_install_list = list;
-			pm->pkg_install_entries = commands;
+	if (pm->exec_count % 10 == 0) {
+		list = pm->exec_list;
+		pm->exec_list = realloc(list, sizeof(*list) * (pm->exec_count + 11));
+		if (pm->exec_list == NULL) {
+			pm->exec_list = list;
 			return (PKG_MEMORY_ERR | PKG_NOT_OK);
 		}
 	}
+	
+	status = pkg_util_strdup(cmd, &pm->exec_list[pm->exec_count++]);
+	pm->exec_list[pm->exec_count] = NULL;
+
+	return (status);
+}
+
+/* Add an unexec command to a manifest, which will be executed at deinstall time.
+ * Returns the status of the operation. */
+
+int
+pkg_manifest_add_unexec_cmd(struct pkg_manifest *pm, const char *cmd) 
+{
+	int status;
+	char **list;
 
-	status = PKG_OK;
+	pkg_error_null_argument("command", cmd, __func__);
 
-	pe = &pm->pkg_install_entries[pm->pkg_install_count];
-	pkg_command_init(pe);
-	status |= pkg_command_set_type(pe, type);
-	status |= pkg_command_set_argument(pe, argument);
+	if (pm->unexec_count % 10 == 0) {
+		list = pm->unexec_list;
+		pm->unexec_list = realloc(list, sizeof(*list) * (pm->unexec_count + 11));
+		if (pm->unexec_list == NULL) {
+			pm->unexec_list = list;
+			return (PKG_MEMORY_ERR | PKG_NOT_OK);
+		}
+	}
 
-	pm->pkg_install_list[pm->pkg_install_count++] = pkg_command_argument(pe);
-	pm->pkg_install_list[pm->pkg_install_count] = NULL;
+	status = pkg_util_strdup(cmd, &pm->unexec_list[pm->unexec_count++]);
+	pm->unexec_list[pm->unexec_count] = NULL;
 
 	return (status);
 }
 
+/* Add a dirrm command to a manifest that will remove the directory dir at deinstall
+ * time.  Returns the status of the operation. */
+
 int
-pkg_manifest_insert_deinstall_pkg_command(struct pkg_manifest *pm, int type,
-	const char *argument) {
+pkg_manifest_add_dirrm_cmd(struct pkg_manifest *pm, const char *dir)
+{
 	int status;
 	char **list;
-	struct pkg_command *commands;
-	struct pkg_command *pe;
 
-	if (argument == NULL) {
-		pkg_error_msg("");
-		rage_quit();
-	}
+	pkg_error_null_argument("directory", dir, __func__);
 
-	if (pm->pkg_deinstall_count % 10 == 0) {
-		list = pm->pkg_deinstall_list;
-		commands = pm->pkg_deinstall_entries;
-		pm->pkg_deinstall_list = realloc(list, sizeof(*list) * (pm->pkg_deinstall_count + 11));
-		pm->pkg_deinstall_entries = realloc(commands, sizeof(*commands) * (pm->pkg_deinstall_count + 11));
-		if (pm->pkg_deinstall_list == NULL || pm->pkg_deinstall_entries == NULL) {
-			pm->pkg_deinstall_list = list;
-			pm->pkg_deinstall_entries = commands;
+	if (pm->dirrm_count % 10 == 0) {
+		list = pm->dirrm_list;
+		pm->dirrm_list = realloc(list, sizeof(*list) * (pm->dirrm_count + 11));
+		if (pm->dirrm_list == NULL) {
+			pm->dirrm_list = list;
 			return (PKG_MEMORY_ERR | PKG_NOT_OK);
 		}
 	}
 
-	status = PKG_OK;
-
-	pe = &pm->pkg_deinstall_entries[pm->pkg_deinstall_count];
-	pkg_command_init(pe);
-	status |= pkg_command_set_type(pe, type);
-	status |= pkg_command_set_argument(pe, argument);
-
-	pm->pkg_deinstall_list[pm->pkg_deinstall_count++] = pkg_command_argument(pe);
-	pm->pkg_deinstall_list[pm->pkg_deinstall_count] = NULL;
+	status = pkg_util_strdup(dir, &pm->dirrm_list[pm->dirrm_count++]);
+	pm->dirrm_list[pm->dirrm_count] = NULL;
 
 	return (status);
 }
 
 void
-pkg_manifest_remove_pkg_conflict(struct pkg_manifest *pm, const char *name)
+pkg_manifest_remove_conflict(struct pkg_manifest *pm, const char *name)
 {
 	pkg_manifest_check_magic(pm, __func__);
 	return;
 }
 
 void
-pkg_manifest_remove_pkg_depend(struct pkg_manifest *pm, const char *name)
+pkg_manifest_remove_depend(struct pkg_manifest *pm, const char *name)
 {
 	pkg_manifest_check_magic(pm, __func__);
 	return;
 }
 
 void
-pkg_manifest_remove_pkg_file(struct pkg_manifest *pm, const char *path)
+pkg_manifest_remove_file(struct pkg_manifest *pm, const char *path)
 {
 	pkg_manifest_check_magic(pm, __func__);
 	return;
 }
 
 void
-pkg_manifest_remove_install_pkg_command(struct pkg_manifest *pm, const char *argument)
+pkg_manifest_remove_exec_cmd(struct pkg_manifest *pm, int cmdidx)
 {
 	pkg_manifest_check_magic(pm, __func__);
 	return;
 }
 
 void
-pkg_manifest_remove_deinstall_pkg_command(struct pkg_manifest *pm, const char *argument)
+pkg_manifest_remove_unexec_cmd(struct pkg_manifest *pm, int cmdidx)
 {
 	pkg_manifest_check_magic(pm, __func__);
 	return;
 }
 
 static void
-pkg_manifest_clear_pkg_conflict_entries(struct pkg_manifest *pm)
+pkg_manifest_clear_conflict_entries(struct pkg_manifest *pm)
 {
 	pkg_manifest_check_magic(pm, __func__);
-	while (pm->pkg_conflict_count > 0)
-		pkg_manifest_remove_pkg_conflict(pm, pm->pkg_conflict_entries[0].name);
+	while (pm->conflict_count > 0)
+		pkg_manifest_remove_conflict(pm, pm->conflict_entries[0].name);
 }
 
 static void
-pkg_manifest_clear_pkg_depend_entries(struct pkg_manifest *pm)
+pkg_manifest_clear_depend_entries(struct pkg_manifest *pm)
 {
 	pkg_manifest_check_magic(pm, __func__);
-	while (pm->pkg_depend_count > 0)
-		pkg_manifest_remove_pkg_depend(pm, pm->pkg_depend_entries[0].name);
+	while (pm->depend_count > 0)
+		pkg_manifest_remove_depend(pm, pm->depend_entries[0].name);
 }
 
 static void
-pkg_manifest_clear_pkg_file_entries(struct pkg_manifest *pm)
+pkg_manifest_clear_file_entries(struct pkg_manifest *pm)
 {
 	pkg_manifest_check_magic(pm, __func__);
-	while (pm->pkg_file_count > 0)
-		pkg_manifest_remove_pkg_file(pm, pm->pkg_file_entries[0].path);
+	while (pm->file_count > 0)
+		pkg_manifest_remove_file(pm, pm->file_entries[0].path);
 }
 
 static void
-pkg_manifest_clear_install_pkg_commands(struct pkg_manifest *pm)
+pkg_manifest_clear_exec_list(struct pkg_manifest *pm)
 {
 	pkg_manifest_check_magic(pm, __func__);
-	while(pm->pkg_install_count > 0)
-		pkg_manifest_remove_install_pkg_command(pm, pm->pkg_install_entries[0].argument);
+	while (pm->exec_count > 0)
+		pkg_manifest_remove_exec_cmd(pm, pm->exec_count);
 }
 
 static void
-pkg_manifest_clear_deinstall_pkg_commands(struct pkg_manifest *pm)
+pkg_manifest_clear_unexec_list(struct pkg_manifest *pm)
 {
 	pkg_manifest_check_magic(pm, __func__);
-	while(pm->pkg_deinstall_count > 0)
-		pkg_manifest_remove_deinstall_pkg_command(pm, pm->pkg_deinstall_entries[0].argument);
+	while (pm->unexec_count > 0)
+		pkg_manifest_remove_unexec_cmd(pm, pm->unexec_count);
 }
 
 struct pkg_conflict *
-pkg_manifest_select_pkg_conflict(struct pkg_manifest *pm, const char *name)
+pkg_manifest_select_conflict(struct pkg_manifest *pm, const char *name)
 {
 	int i;
 	
 	pkg_manifest_check_magic(pm, __func__);
 
-	for (i = 0; i < pm->pkg_conflict_count; ++i)
-		if (strcmp(pm->pkg_conflict_entries[i].name, name) == 0)
-			return (&pm->pkg_conflict_entries[i]);
+	for (i = 0; i < pm->conflict_count; ++i)
+		if (strcmp(pm->conflict_entries[i].name, name) == 0)
+			return (&pm->conflict_entries[i]);
 
 	return (NULL);
 }
 
 struct pkg_depend *
-pkg_manifest_select_pkg_depend(struct pkg_manifest *pm, const char *name)

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908120844.n7C8iK33050055>