Date: Sat, 30 Oct 2010 19:34:59 GMT From: David Forsythe <dforsyth@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 185248 for review Message-ID: <201010301934.o9UJYxpC095655@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@185248?ac=10 Change 185248 by dforsyth@skunk on 2010/10/30 19:34:47 start bringing back lazy loading-ish behavior. Affected files ... .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.c#7 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.h#7 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.c#10 edit .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_pkg.h#9 delete .. //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_types.h#2 edit .. //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_add/pkg_add.c#4 edit .. //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_info/pkg_info.c#6 edit Differences ... ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.c#7 (text+ko) ==== @@ -76,9 +76,9 @@ { 0, NULL, NULL }, }; -static int fbsd_directorydb_read_pkg( - struct _directorydb *, struct pkg *); -int fbsd_directorydb_finish(struct pkg_db *, +static int fbsd_directorydb_read_pkg(struct _directorydb *, + struct pkg *, uint32_t); +int fbsd_directorydb_finish(struct pkg_db *, struct pkg *); static char *read_file(const char *); static int _read_plist_cmp(struct _read_plist *, @@ -87,6 +87,12 @@ static void fbsd_directorydb_pkg_setup(struct pkg_db *, struct pkg *, const char *); +static int fbsd_directorydb_read_name(struct pkg *); +static int fbsd_directorydb_read_origin(struct pkg *); +static int fbsd_directorydb_read_comment(struct pkg *); +static int fbsd_directorydb_read_format_revision(struct pkg *); +static int fbsd_directorydb_read_description(struct pkg *); + RB_GENERATE_STATIC(plist_head, _read_plist, entry, _read_plist_cmp); #define PKG_DIRDB_MAGIC 0x11111111 @@ -102,6 +108,17 @@ #define _pkg_check_magic(p) assert(p->magic == PKG_DIRDB_MAGIC) #define _db_check_magic(db) assert(db->magic == DB_DIRDB_MAGIC) +#define READ_FUNCTION(fn_name, src_mask) \ +static int \ +fn_name(struct pkg *pkg) \ +{ \ + struct pkg_db *db; \ + struct _directorydb *d; \ + db = pkg->source; \ + d = db->internal; \ + return (fbsd_directorydb_read_pkg(d, pkg, src_mask)); \ +} + static int _read_plist_cmp(struct _read_plist *a, struct _read_plist *b) { @@ -191,6 +208,15 @@ pkg->magic = PKG_DIRDB_MAGIC; pkg->source = db; strcpy(pkg->key, key); + + /* Set up our callbacks. */ + pkg->read_name = fbsd_directorydb_read_name; + pkg->read_origin = fbsd_directorydb_read_origin; + pkg->read_format_revision = fbsd_directorydb_read_format_revision; + + pkg->read_comment = fbsd_directorydb_read_comment; + + pkg->read_description = fbsd_directorydb_read_description; pkg->add_file = fbsd_directorydb_add_file; @@ -223,12 +249,7 @@ pkg = pkg_alloc(); /* XXX: I should just do a get here. */ fbsd_directorydb_pkg_setup(db, pkg, ents[i]->d_name); - /* XXX: For now just hit every mask. */ - if (fbsd_directorydb_read_pkg(d, pkg) != PKG_OK) { - /* Do clean up */ - printf("bad read\n"); - return (NULL); - } + TAILQ_INSERT_TAIL(list, pkg, next); free(ents[i]); } @@ -313,7 +334,6 @@ } fbsd_directorydb_pkg_setup(db, pkg, key); - fbsd_directorydb_read_pkg(d, pkg); return (PKG_OK); } @@ -329,8 +349,15 @@ return (PKG_OK); } +READ_FUNCTION(fbsd_directorydb_read_name, CONTENTS); +READ_FUNCTION(fbsd_directorydb_read_origin, CONTENTS); +READ_FUNCTION(fbsd_directorydb_read_format_revision, CONTENTS); +READ_FUNCTION(fbsd_directorydb_read_comment, COMMENT); +READ_FUNCTION(fbsd_directorydb_read_description, DESCRIPTION); + static int -fbsd_directorydb_read_pkg(struct _directorydb *d, struct pkg *pkg) +fbsd_directorydb_read_pkg(struct _directorydb *d, struct pkg *pkg, + uint32_t mask) { struct pkg_info *pi; char path[PATH_MAX]; @@ -338,13 +365,15 @@ int r; for (pi = pkg_entries; pi->info_name != NULL; pi++) { - _pkg_util_path_join(path, d->path, pkg->key); - _pkg_util_path_join(path, path, pi->file_name); - - if ((data = read_file(path)) == NULL) continue; + if (mask & pi->info_mask) { + _pkg_util_path_join(path, d->path, pkg->key); + _pkg_util_path_join(path, path, pi->file_name); + + if ((data = read_file(path)) == NULL) continue; - r = fbsd_plist_parse(pkg, data, pi->info_name); - if (r != PKG_OK) return (r); + r = fbsd_plist_parse(pkg, data, pi->info_name); + if (r != PKG_OK) return (r); + } } return (PKG_OK); @@ -395,3 +424,4 @@ return (sb.st_uid); } + ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/freebsd_database_directorydb.h#7 (text+ko) ==== ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg.c#10 (text+ko) ==== @@ -91,7 +91,7 @@ void _pkg_set_origin(struct pkg *pkg, const char *origin) { - pkg->origin = strndup(origin, PATH_MAX); + strncpy(pkg->origin, origin, PATH_MAX); } void ==== //depot/projects/soc2010/dforsyth_libpkg/libpkg/pkg_types.h#2 (text+ko) ==== @@ -10,53 +10,53 @@ struct pkg { /* The magic value will let us know what type of underlying interface * we're dealing with. */ - unsigned int magic; - char key[PATH_MAX]; - void *source; /* XXX: Make this a union. */ + unsigned int magic; + char key[PATH_MAX]; + void *source; /* XXX: Make this a union. */ - void (*read_origin) (struct pkg *); - char *origin; + int (*read_origin) (struct pkg *); + char origin[PATH_MAX]; - void (*read_name) (struct pkg *); - char name[PATH_MAX]; + int (*read_name) (struct pkg *); + char name[PATH_MAX]; - void (*read_srcdir) (struct pkg *); - char srcdir[PATH_MAX]; + int (*read_srcdir) (struct pkg *); + char srcdir[PATH_MAX]; - void (*read_format_revision) (struct pkg *); - char format_revision[256]; + int (*read_format_revision) (struct pkg *); + char format_revision[256]; - void (*read_comment) (struct pkg *); + int (*read_comment) (struct pkg *); /* This is 128 for now, I'd like it down at 80. */ - char comment[128]; + char comment[128]; - void (*read_description) (struct pkg *); - char *description; + int (*read_description) (struct pkg *); + char *description; - void (*read_files) (struct pkg *); - struct pkg_file_list *files; + int (*read_files) (struct pkg *); + struct pkg_file_list *files; - void (*read_depends) (struct pkg *); - struct pkg_depend_list *depends; + int (*read_depends) (struct pkg *); + struct pkg_depend_list *depends; - void (*read_conflicts) (struct pkg *); + int (*read_conflicts) (struct pkg *); struct pkg_conflict_list *conflicts; - void (*read_reqbys) (struct pkg *); - struct pkg_reqby_list *reqbys; + int (*read_reqbys) (struct pkg *); + struct pkg_reqby_list *reqbys; - int (*has_file) (struct pkg *); - int (*has_depend) (struct pkg *); - int (*has_conflict) (struct pkg *); + int (*has_file) (struct pkg *); + int (*has_depend) (struct pkg *); + int (*has_conflict) (struct pkg *); - struct pkg_file *(*add_file) (struct pkg *, const char *, + struct pkg_file *(*add_file) (struct pkg *, const char *, const char *); - struct pkg_depend *(*add_depend) (struct pkg *, const char *, - const char *); - struct pkg_conflict *(*add_conflict) (struct pkg *, const char *, - const char *); + struct pkg_depend *(*add_depend) (struct pkg *, const char *, + const char *); + struct pkg_conflict *(*add_conflict) (struct pkg *, const char *, + const char *); struct pkg_reqby *(*add_reqby) (struct pkg *, const char *, - const char *); + const char *); int (*remove_file) (struct pkg *, struct pkg_file *); ==== //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_add/pkg_add.c#4 (text+ko) ==== @@ -19,7 +19,6 @@ #include <libgen.h> #include <pkg.h> -#include <pkg_freebsd.h> #define ADD_NODEPS 0x00000001 #define ADD_NORECORD 0x00000002 ==== //depot/projects/soc2010/dforsyth_libpkg/pkg_install/pkg_info/pkg_info.c#6 (text+ko) ==== @@ -700,13 +700,13 @@ } if (_c->show_flags & SHOW_ORIGIN) { - if (_c->quiet) printf("%sOrigin:\n", _c->info_prefix); + if (!_c->quiet) printf("%sOrigin:\n", _c->info_prefix); printf("%s\n", pkg_origin(pkg)); } if (_c->show_flags & SHOW_FMTREV) { - if (_c->quiet) + if (!_c->quiet) printf("%sFormat revision:\n", _c->info_prefix); printf("%s\n", pkg_format_revision(pkg));
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010301934.o9UJYxpC095655>