PERFORCE change 166108 for review

David Forsythe dforsyth at FreeBSD.org
Tue Jul 14 22:24:37 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=166108

Change 166108 by dforsyth at squirrel on 2009/07/14 22:24:08

	Delay file reads

Affected files ...

.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.c#35 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_hierdb.h#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_private.h#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_private.h#14 edit

Differences ...

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

@@ -86,6 +86,7 @@
 	/* Until plist allocation is done properly, we can't free this in
 	 * here. */	
 	pkg_plist_reset(p->pl);
+	p->pl = NULL;
 }
 
 /* Retrieve pkg identity.  In hierdb, this is the directory containing the

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

@@ -36,6 +36,7 @@
 	switch (db_type) {
 	case (HIER_DB):
 		db->pkg_db_db_open = pkg_db_hierdb_db_open;
+		db->pkg_db_db_init_pkg_in_db = pkg_db_hierdb_init_pkg_in_db;
 		db->pkg_db_db_read_pkg_from_db = pkg_db_hierdb_read_pkg_from_db;
 		/* db->pkg_db_db_close = pkg_db_hierdb_db_close; */
 		break;
@@ -106,6 +107,8 @@
 	for (i = 0; i < db->pkg_count; ++i)
 		if (strcmp(db->pkg_entries[i]->ident, ident) == 0)
 			p = db->pkg_entries[i];
+	
+	db->pkg_db_db_read_pkg_from_db(db, p);
 
 	return (p);
 }
@@ -128,7 +131,6 @@
 {
 	char **pkg_list_tmp;
 	struct pkg **pkg_entries_tmp;
-	
 
 	if (db->pkg_count % 10 == 0) {
 		pkg_entries_tmp = db->pkg_entries;
@@ -149,6 +151,7 @@
 	db->pkg_count++;
 	db->pkg_entries[db->pkg_count] = NULL;
 	db->pkg_list[db->pkg_count] = NULL;
+
 	/* Add a qsort here.  We're getting the packages in order now because
 	 * we arent doing anything, but eventually, well need to sort on add. */
 

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

@@ -52,7 +52,7 @@
 
 	for (i = 0; i < c; ++i) {
 		p = pkg_new();
-		s |= pkg_db_hierdb_read_pkg_from_db(db, p, ents[i]->d_name);
+		s |= pkg_db_hierdb_init_pkg_in_db(db, p, ents[i]->d_name);
 		s |= pkg_db_add_pkg_entry(db, p);
 		if (s & DB_NOT_OK) {
 			pkg_db_clear_pkg_entries(db);
@@ -120,21 +120,39 @@
 }
 
 int
-pkg_db_hierdb_read_pkg_from_db(struct pkg_db *db, struct pkg *p,
+pkg_db_hierdb_init_pkg_in_db(struct pkg_db *db, struct pkg *p, 
 	const char *ident)
 {
+	int status;
+
+	if (db == NULL)
+		arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
+
+	pkg_reset(p);
+	status = PKG_OK;
+	status |= pkg_set_ident(p, ident);
+
+	if (status & PKG_MEMORY_ERR)
+		return (DB_NOT_OK | DB_MEMORY_ERR);
+	return (DB_OK);
+}
+
+int
+pkg_db_hierdb_read_pkg_from_db(struct pkg_db *db, struct pkg *p)
+{
+	char *ident;
 	char *path;
 	int status;
 #if 0 /* The client doesn't know about the functions in this file. */
 	if (!VALID_DB(x))
 #endif
 	if (db == NULL)
-		arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_CLIENT);
-	
-	pkg_reset(p);
+		arg_rage_quit(__func__, "Not a valid database.", RAGE_AT_LIBPKG);
 	
 	status = OK;
-	status |= pkg_set_ident(p, ident);
+	ident = pkg_ident(p);
+	if (ident == NULL)
+		return (DB_NOT_OK);
 
 	path = path_build(ident, COMMENT_FILE);
 	status |= pkg_set_comment(p,pkg_db_hierdb_read_file_to_text(db, path));

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

@@ -8,7 +8,9 @@
 char *pkg_db_hierdb_read_file_to_text(struct pkg_db *db,
 	const char *subpath);
 
-int pkg_db_hierdb_read_pkg_from_db(struct pkg_db *db, struct pkg *p, 
+int pkg_db_hierdb_init_pkg_in_db(struct pkg_db *db, struct pkg *p, 
 	const char *ident);
 
+int pkg_db_hierdb_read_pkg_from_db(struct pkg_db *db, struct pkg *p);
+
 #endif

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_db_private.h#4 (text+ko) ====

@@ -15,8 +15,9 @@
 	struct pkg **pkg_entries;
 
 	int (*pkg_db_db_open) (struct pkg_db *db, const char *db_root);
-	int (*pkg_db_db_read_pkg_from_db) (struct pkg_db *db, struct pkg *p,
+	int (*pkg_db_db_init_pkg_in_db) (struct pkg_db *db, struct pkg *p,
 		const char *ident);
+	int (*pkg_db_db_read_pkg_from_db) (struct pkg_db *db, struct pkg *p);
 	int (*pkg_db_db_close) (struct pkg_db *db);
 	int (*pkg_db_db_sync) (struct pkg_db *db);
 };

==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_private.h#14 (text+ko) ====

@@ -21,7 +21,6 @@
 	struct pkg_plist *pl;
 
 	short dirty;
-	/* Add an owner field? */
 };
 
 int pkg_parse_plist(struct pkg *p);


More information about the p4-projects mailing list