diff options
author | Aaron Griffin <aaron@archlinux.org> | 2007-01-17 06:25:32 +0100 |
---|---|---|
committer | Aaron Griffin <aaron@archlinux.org> | 2007-01-17 06:25:32 +0100 |
commit | c6f56aee57a6f85843b218ace485b5702ba5a7ea (patch) | |
tree | 7ecf51394de1b0c7b5c8d97cef947e05b6060871 /src/pacman/sync.c | |
parent | 31e0561865674f8cd56e3ed8131393a732ffcbac (diff) | |
download | pacman-c6f56aee57a6f85843b218ace485b5702ba5a7ea.tar.gz pacman-c6f56aee57a6f85843b218ace485b5702ba5a7ea.tar.xz |
Dan McGee <dpmcgee@gmail.com>
* fix for -Qii regression
* package.c cleanup
* some refactoring changes
Moved split_pkgname as per Dan's suggestion
Diffstat (limited to 'src/pacman/sync.c')
-rw-r--r-- | src/pacman/sync.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/pacman/sync.c b/src/pacman/sync.c index 8208157a..c6eb603d 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -52,6 +52,51 @@ extern config_t *config; extern list_t *pmc_syncs; + +/* splits package name into its respective parts */ +static int split_pkgname(char *target, char *name, char *version) +{ + char tmp[512]; + char *p, *q; + + if(target == NULL) { + return(-1); + } + + /* trim path name (if any) */ + if((p = strrchr(target, '/')) == NULL) { + p = target; + } else { + p++; + } + strncpy(tmp, p, 512); + /* trim file extension (if any) */ + if((p = strstr(tmp, PM_EXT_PKG))) { + *p = '\0'; + } + /* trim architecture */ + if((p = alpm_pkg_name_hasarch(tmp))) { + *p = '\0'; + } + + p = tmp + strlen(tmp); + + for(q = --p; *q && *q != '-'; q--); + if(*q != '-' || q == tmp) { + return(-1); + } + for(p = --q; *p && *p != '-'; p--); + if(*p != '-' || p == tmp) { + return(-1); + } + strncpy(version, p+1, 64); + *p = '\0'; + + strncpy(name, tmp, 256); + + return(0); +} + static int sync_cleancache(int level) { const char *root, *cachedir; |