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