PERFORCE change 131999 for review
Garrett Cooper
gcooper at FreeBSD.org
Sat Dec 29 16:46:24 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=131999
Change 131999 by gcooper at shiina-ibook on 2007/12/30 00:45:36
1. Scratch one more todo from turner.
2. Add a few more checks (stuff seems missing).
3. Add a very funny comment (or at least I thought it was funny -- ok, ok, just confused / frustrated. lol).
Affected files ...
.. //depot/projects/soc2007/revised_fbsd_pkgtools/pkg_revised/v2/contrib/libpkg/pkg_db_match.c#4 edit
Differences ...
==== //depot/projects/soc2007/revised_fbsd_pkgtools/pkg_revised/v2/contrib/libpkg/pkg_db_match.c#4 (text+ko) ====
@@ -145,11 +145,9 @@
if (regex == NULL)
return NULL;
- /* Count the number of regex's */
- for (rex.count = 0; regex[rex.count] != NULL; rex.count++)
- continue;
+ rex.count = (sizeof(regex) / sizeof(const char **)) - 1;
+ rex.rex = malloc(rex.count * sizeof(regex_t));
- rex.rex = malloc(rex.count * sizeof(regex_t));
if (rex.rex == NULL)
return NULL;
@@ -187,11 +185,8 @@
if (patterns == NULL)
return NULL;
- /* Count the number of globs */
- for (the_glob.count = 0; patterns[the_glob.count] != NULL;
- the_glob.count++)
- continue;
-
+ the_glob.count = (sizeof(patterns) / sizeof(const char**)) - 1;
+ /* patterns is NULL terminated already. No worries.. */
the_glob.patterns = patterns;
pkgs = pkg_db_get_installed_match(db, pkg_match_glob, &the_glob);
@@ -217,7 +212,10 @@
* @brief Function to match all packages with one of the given names
* @return 0 if the package matches
* @return -1 otherwise
- */
+ *
+ * @todo: Verify this does as promised; this doesn't seem functionally
+ * correct in the least..
+ */
static int
pkg_match_name(struct pkg *pkg, const void *data)
{
@@ -269,16 +267,29 @@
static int
pkg_match_glob(struct pkg *pkg, const void *data)
{
- /** @todo Fix to just take a null terminated array of strings */
+ /*
+ * Andrew Turner:
+ * @todo Fix to just take a null terminated array of strings
+ * Garrett Cooper:
+ * Agh... make up your mind. Are you going to use the count
+ * data member or a temporary variable, per fn, per struct
+ * (this applies not only to struct glob_or, but also struct
+ * regex_or)?
+ *
+ * Using count eats up more memory, but not too much, whereas
+ * calculating it on the fly requires some time for determining
+ * the NULL terminated length, but blah.. this is just plain,
+ * silly..
+ */
unsigned int i;
const struct glob_or *the_glob;
-
+
assert(pkg != NULL);
assert(data != NULL);
- the_glob = data;
+ the_glob = (const struct glob_or*) data;
for(i=0; i < the_glob->count; i++) {
- /* This should use the csh_match from FreeBSD pkg_info */
+ /* @todo: This should use the csh_match from FreeBSD pkg_info */
if (fnmatch(the_glob->patterns[i], pkg_get_name(pkg), 0) == 0)
return 0;
}
More information about the p4-projects
mailing list