From owner-svn-soc-all@FreeBSD.ORG Thu Jul 11 07:11:48 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id C39B082B for ; Thu, 11 Jul 2013 07:11:48 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) by mx1.freebsd.org (Postfix) with ESMTP id A449E16E5 for ; Thu, 11 Jul 2013 07:11:48 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6B7BmmK012038 for ; Thu, 11 Jul 2013 07:11:48 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r6B7Bmrk012034 for svn-soc-all@FreeBSD.org; Thu, 11 Jul 2013 07:11:48 GMT (envelope-from mattbw@FreeBSD.org) Date: Thu, 11 Jul 2013 07:11:48 GMT Message-Id: <201307110711.r6B7Bmrk012034@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r254608 - soc2013/mattbw/backend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jul 2013 07:11:48 -0000 Author: mattbw Date: Thu Jul 11 07:11:48 2013 New Revision: 254608 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254608 Log: use bsearch for finding group mapping Modified: soc2013/mattbw/backend/group.c soc2013/mattbw/backend/group_map.awk soc2013/mattbw/backend/group_map.h Modified: soc2013/mattbw/backend/group.c ============================================================================== --- soc2013/mattbw/backend/group.c Thu Jul 11 06:48:53 2013 (r254607) +++ soc2013/mattbw/backend/group.c Thu Jul 11 07:11:48 2013 (r254608) @@ -32,18 +32,19 @@ static const char ORIGIN_SEPARATOR = '/'; +static int map_compare(const void *key, const void *mapping); static PkGroupEnum group_from_port_dir(const char *port_dir); /* Reports the PackageKit groups available on this backend as a bitfield. */ PkBitfield group_bitfield(void) { - const struct group_mapping *map; + size_t i; PkBitfield bits; bits = 0; - for (map = group_mappings; map->key[0] != '\0'; map++) - pk_bitfield_add(bits, map->group); + for (i = 0; i < num_group_mappings; i++) + pk_bitfield_add(bits, group_mappings[i].group); return bits; } @@ -79,13 +80,13 @@ } /* - * Maps from packages to PackageKit groups. PKG_LOAD_CATEGORIES must have been - * set whilst loading the package for this to work properly. + * Maps from packages to PackageKit groups. PKG_LOAD_CATEGORIES must have + * been set whilst loading the package for this to work properly. */ PkGroupEnum group_of_pkg(struct pkg *pkg) { - PkGroupEnum group; + PkGroupEnum group; struct pkg_category *category; assert(pkg != NULL); @@ -100,11 +101,10 @@ group = group_from_port_dir(pkg_category_name(category)); } - - /* Fallback to checking the origin if category mapping failed. */ + /* Fall back to checking the origin if category mapping failed. */ if (group == PK_GROUP_ENUM_UNKNOWN) { - const char *origin; - + const char *origin; + origin = NULL; if (pkg_get(pkg, PKG_ORIGIN, &origin) == EPKG_OK) { assert(origin != NULL); @@ -112,7 +112,6 @@ group = group_from_origin(origin); } } - return group; } @@ -168,6 +167,13 @@ return regex; } +static int +map_compare(const void *key, const void *mapping) +{ + return strcmp((const char *)key, + ((const struct group_mapping *)mapping)->key); +} + /* * Maps from port/origin directories to PackageKit groups. */ @@ -178,9 +184,10 @@ assert(port_dir != NULL); - for (result = group_mappings; - result->key[0] != '\0' && strcmp(result->key, port_dir) != 0; - result++); - - return result->group; + result = bsearch(port_dir, + group_mappings, + num_group_mappings, + sizeof(struct group_mapping), + map_compare); + return (result == NULL ? PK_GROUP_ENUM_UNKNOWN : result->group); } Modified: soc2013/mattbw/backend/group_map.awk ============================================================================== --- soc2013/mattbw/backend/group_map.awk Thu Jul 11 06:48:53 2013 (r254607) +++ soc2013/mattbw/backend/group_map.awk Thu Jul 11 07:11:48 2013 (r254608) @@ -3,15 +3,16 @@ print "/* Auto-generated, do not edit directly. Edit 'groups' instead */" print "#include \"group_map.h\"" print "const struct group_mapping group_mappings[] = {" + COUNT = 0; } { sub("#.*$", "", $0); if (length($0) > 0) { print "\t{\"" $1 "\", " $2 "},"; - MAP[tolower($1)] = toupper($2); + COUNT++; } } END { - print "\t{\"\", PK_GROUP_ENUM_UNKNOWN}"; print "};"; + print "const size_t num_group_mappings = " COUNT ";"; } Modified: soc2013/mattbw/backend/group_map.h ============================================================================== --- soc2013/mattbw/backend/group_map.h Thu Jul 11 06:48:53 2013 (r254607) +++ soc2013/mattbw/backend/group_map.h Thu Jul 11 07:11:48 2013 (r254608) @@ -29,5 +29,6 @@ }; extern const struct group_mapping group_mappings[]; +extern const size_t num_group_mappings; #endif /* _PKGNG_BACKEND_GROUP_MAP_H_ */