From 7775afa59b62ff47fb2bac9f9f10ae8c53cb6eb4 Mon Sep 17 00:00:00 2001
From: Aurelien Foret <aurelien@archlinux.org>
Date: Fri, 8 Apr 2005 20:43:13 +0000
Subject: added function pkg_splitname (not used for now)

---
 lib/libalpm/package.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 lib/libalpm/package.h |  1 +
 2 files changed, 44 insertions(+)

(limited to 'lib/libalpm')

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 */
 
-- 
cgit v1.2.3-70-g09d2