Date: Tue, 14 Jul 2009 22:24:35 GMT From: David Forsythe <dforsyth@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 166108 for review Message-ID: <200907142224.n6EMOZQt059985@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=166108 Change 166108 by dforsyth@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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907142224.n6EMOZQt059985>