summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-09-02 18:44:32 -0500
committerDan McGee <dan@archlinux.org>2012-08-02 09:49:42 -0500
commit4852c5821b0c43fb9c7c2cfc05ac5c54724662a9 (patch)
tree488138853b0c4bd5774ac2aabcc46bf25fa12a1f
parent0837d76573be679c3834f30b46d8069c3fbf37c1 (diff)
downloadpacman-gperf.tar.gz
pacman-gperf.zip
Convert PKGINFO backend to use gperf hash functiongperf
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/be_package.c157
1 files changed, 106 insertions, 51 deletions
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 8c5b2d16..7b6bd46e 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -39,6 +39,9 @@
#include "deps.h"
#include "filelist.h"
+/* generated gperf hash/lookup functions */
+#include "keys_package.h"
+
struct package_changelog {
struct archive *archive;
int fd;
@@ -184,60 +187,112 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
"%s: syntax error in description file line %d\n",
newpkg->name ? newpkg->name : "error", linenum);
} else {
+ size_t key_len;
+ const struct db_key *keyval;
+
/* NULL the end of the key portion, move ptr to start of value */
*ptr = '\0';
ptr += 3;
- if(strcmp(key, "pkgname") == 0) {
- STRDUP(newpkg->name, ptr, return -1);
- newpkg->name_hash = _alpm_hash_sdbm(newpkg->name);
- } else if(strcmp(key, "pkgbase") == 0) {
- /* not used atm */
- } else if(strcmp(key, "pkgver") == 0) {
- STRDUP(newpkg->version, ptr, return -1);
- } else if(strcmp(key, "pkgdesc") == 0) {
- STRDUP(newpkg->desc, ptr, return -1);
- } else if(strcmp(key, "group") == 0) {
- newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
- } else if(strcmp(key, "url") == 0) {
- STRDUP(newpkg->url, ptr, return -1);
- } else if(strcmp(key, "license") == 0) {
- newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
- } else if(strcmp(key, "builddate") == 0) {
- newpkg->builddate = _alpm_parsedate(ptr);
- } else if(strcmp(key, "packager") == 0) {
- STRDUP(newpkg->packager, ptr, return -1);
- } else if(strcmp(key, "arch") == 0) {
- STRDUP(newpkg->arch, ptr, return -1);
- } else if(strcmp(key, "size") == 0) {
- /* size in the raw package is uncompressed (installed) size */
- newpkg->isize = _alpm_strtoofft(ptr);
- } else if(strcmp(key, "depend") == 0) {
- alpm_depend_t *dep = _alpm_splitdep(ptr);
- newpkg->depends = alpm_list_add(newpkg->depends, dep);
- } else if(strcmp(key, "optdepend") == 0) {
- alpm_depend_t *optdep = _alpm_splitdep(ptr);
- newpkg->optdepends = alpm_list_add(newpkg->optdepends, optdep);
- } else if(strcmp(key, "conflict") == 0) {
- alpm_depend_t *conflict = _alpm_splitdep(ptr);
- newpkg->conflicts = alpm_list_add(newpkg->conflicts, conflict);
- } else if(strcmp(key, "replaces") == 0) {
- alpm_depend_t *replace = _alpm_splitdep(ptr);
- newpkg->replaces = alpm_list_add(newpkg->replaces, replace);
- } else if(strcmp(key, "provides") == 0) {
- alpm_depend_t *provide = _alpm_splitdep(ptr);
- newpkg->provides = alpm_list_add(newpkg->provides, provide);
- } else if(strcmp(key, "backup") == 0) {
- alpm_backup_t *backup;
- CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
- STRDUP(backup->name, ptr, return -1);
- newpkg->backup = alpm_list_add(newpkg->backup, backup);
- } else if(strcmp(key, "force") == 0) {
- /* deprecated, skip it */
- } else if(strcmp(key, "makepkgopt") == 0) {
- /* not used atm */
- } else {
- _alpm_log(handle, ALPM_LOG_DEBUG, "%s: unknown key '%s' in description file line %d\n",
- newpkg->name ? newpkg->name : "error", key, linenum);
+
+ key_len = strlen(key);
+ keyval = in_word_set(key, key_len);
+
+ if(!keyval) {
+ _alpm_log(handle, ALPM_LOG_DEBUG,
+ "%s: unknown key '%s' in description file line %d\n",
+ newpkg->name ? newpkg->name : "error", key, linenum);
+ continue;
+ }
+
+ switch(keyval->field) {
+ case FIELD_NAME:
+ STRDUP(newpkg->name, ptr, return -1);
+ newpkg->name_hash = _alpm_hash_sdbm(newpkg->name);
+ break;
+ case FIELD_VERSION:
+ STRDUP(newpkg->version, ptr, return -1);
+ break;
+ case FIELD_DESC:
+ STRDUP(newpkg->desc, ptr, return -1);
+ break;
+ case FIELD_GROUPS:
+ newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
+ break;
+ case FIELD_URL:
+ STRDUP(newpkg->url, ptr, return -1);
+ break;
+ case FIELD_LICENSE:
+ newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
+ break;
+ case FIELD_BUILDDATE:
+ newpkg->builddate = _alpm_parsedate(ptr);
+ break;
+ case FIELD_PACKAGER:
+ STRDUP(newpkg->packager, ptr, return -1);
+ break;
+ case FIELD_ARCH:
+ STRDUP(newpkg->arch, ptr, return -1);
+ break;
+ case FIELD_SIZE:
+ /* size in the raw package is uncompressed (installed) size */
+ newpkg->isize = _alpm_strtoofft(ptr);
+ break;
+ case FIELD_DEPENDS:
+ {
+ alpm_depend_t *dep = _alpm_splitdep(ptr);
+ newpkg->depends = alpm_list_add(newpkg->depends, dep);
+ }
+ break;
+ case FIELD_OPTDEPENDS:
+ {
+ alpm_depend_t *optdep = _alpm_splitdep(ptr);
+ newpkg->optdepends = alpm_list_add(newpkg->optdepends, optdep);
+ }
+ break;
+ case FIELD_CONFLICTS:
+ {
+ alpm_depend_t *conflict = _alpm_splitdep(ptr);
+ newpkg->conflicts = alpm_list_add(newpkg->conflicts, conflict);
+ }
+ break;
+ case FIELD_REPLACES:
+ {
+ alpm_depend_t *replace = _alpm_splitdep(ptr);
+ newpkg->replaces = alpm_list_add(newpkg->replaces, replace);
+ }
+ break;
+ case FIELD_PROVIDES:
+ {
+ alpm_depend_t *provide = _alpm_splitdep(ptr);
+ newpkg->provides = alpm_list_add(newpkg->provides, provide);
+ }
+ break;
+ case FIELD_BACKUP:
+ {
+ alpm_backup_t *backup;
+ CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
+ STRDUP(backup->name, ptr, return -1);
+ newpkg->backup = alpm_list_add(newpkg->backup, backup);
+ }
+ break;
+ case FIELD_BASE:
+ case FIELD_CHECKDEPENDS:
+ case FIELD_CSIZE:
+ case FIELD_DELTAS:
+ case FIELD_FILENAME:
+ case FIELD_FILES:
+ case FIELD_FORCE:
+ case FIELD_INSTALLDATE:
+ case FIELD_ISIZE:
+ case FIELD_MAKEDEPENDS:
+ case FIELD_MAKEPKGOPT:
+ case FIELD_MD5SUM:
+ case FIELD_PGPSIG:
+ case FIELD_REASON:
+ case FIELD_SHA256SUM:
+ case FIELD_VALIDATION:
+ /* these are unused */
+ break;
}
}
}