From owner-p4-projects@FreeBSD.ORG Tue Jul 14 22:24:36 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D910D106567E; Tue, 14 Jul 2009 22:24:35 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 935991065698 for ; Tue, 14 Jul 2009 22:24:35 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 803118FC13 for ; Tue, 14 Jul 2009 22:24:35 +0000 (UTC) (envelope-from dforsyth@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6EMOZWu059987 for ; Tue, 14 Jul 2009 22:24:35 GMT (envelope-from dforsyth@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6EMOZQt059985 for perforce@freebsd.org; Tue, 14 Jul 2009 22:24:35 GMT (envelope-from dforsyth@FreeBSD.org) Date: Tue, 14 Jul 2009 22:24:35 GMT Message-Id: <200907142224.n6EMOZQt059985@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to dforsyth@FreeBSD.org using -f From: David Forsythe To: Perforce Change Reviews Cc: Subject: PERFORCE change 166108 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2009 22:24:37 -0000 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);