diff options
author | Dan McGee <dan@archlinux.org> | 2011-09-02 18:44:32 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-08-02 09:49:42 -0500 |
commit | 4852c5821b0c43fb9c7c2cfc05ac5c54724662a9 (patch) | |
tree | 488138853b0c4bd5774ac2aabcc46bf25fa12a1f | |
parent | 0837d76573be679c3834f30b46d8069c3fbf37c1 (diff) | |
download | pacman-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.c | 157 |
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; } } } |