index : pacman | |
Archlinux32 fork of pacman | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | lib/libalpm/package.c | 43 | ||||
-rw-r--r-- | lib/libalpm/package.h | 1 |
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 622fd99b..7e0854de 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -338,4 +338,47 @@ int pkg_isin(pmpkg_t *needle, PMList *haystack) return(0); } +int pkg_splitname(char *target, char *name, char *version) +{ + char tmp[(PKG_NAME_LEN-1)+1+(PKG_VERSION_LEN-1)+7+1]; + 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, (PKG_NAME_LEN-1)+1+(PKG_VERSION_LEN-1)+7+1); + /* trim file extension (if any) */ + if((p = strstr(tmp, PM_EXT_PKG))) { + *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); + } + if(version) { + STRNCPY(version, p+1, PKG_VERSION_LEN); + } + *p = 0; + + if(name) { + STRNCPY(name, tmp, PKG_NAME_LEN); + } + + return(0); +} + /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libalpm/package.h b/lib/libalpm/package.h index 8c28a06a..aedb9b63 100644 --- a/lib/libalpm/package.h +++ b/lib/libalpm/package.h @@ -84,6 +84,7 @@ void pkg_free(pmpkg_t *pkg); pmpkg_t *pkg_load(char *pkgfile); int pkg_cmp(const void *p1, const void *p2); int pkg_isin(pmpkg_t *needle, PMList *haystack); +int pkg_splitname(char *target, char *name, char *version); #endif /* _ALPM_PACKAGE_H */ |