Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix searching for dealim "<>=" when two comparison are done
Baptiste Daroussin committed 14 years ago
commit e38d2e7916c5ac0a071f449c32d9bd777f96eb7f
parent 11a9096
1 file changed +68 -76
modified pkg/info.c
@@ -45,13 +45,13 @@ exec_info(int argc, char **argv)
	unsigned int opt = 0;
	match_t match = MATCH_EXACT;
	char *pkgname;
-
	char *pkgversion, *pkgversion2;
+
	char *pkgversion = NULL, *pkgversion2 = NULL;
	const char *file = NULL;
	int ch;
	int ret = EPKG_OK;
	int retcode = 0;
	bool gotone = false;
-
	int i;
+
	int i, j;
	int sign = 0;
	int sign2 = 0;

@@ -152,87 +152,79 @@ exec_info(int argc, char **argv)
			pkgname[strlen(pkgname) -1] = '\0';

		if (argc > 0) {
-
			pkgversion = strrchr(pkgname, '>');
-
			if (pkgversion == NULL)
-
				pkgversion = strrchr(pkgname, '<');
-
			if (pkgversion == NULL)
-
				pkgversion = strrchr(pkgname, '=');
-
		} else
-
			pkgversion = NULL;
-

-
		if (pkgversion != NULL) {
-
			switch (pkgversion[0]) {
-
				case '>':
-
					pkgversion[0] = '\0';
-
					pkgversion++;
-
					sign = GT;
-
					if (pkgversion[0] == '=') {
-
						pkgversion++;
-
						sign=GE;
-
					}
-
					break;
-
				case '<':
-
					pkgversion[0] = '\0';
-
					pkgversion++;
-
					sign = LT;
-
					if (pkgversion[0] == '=') {
+
			j=0;
+
			while (pkgname[j] != '\0') {
+
				if (pkgname[j] == '<') {
+
					if (pkgversion) {
+
						pkgversion2 = pkgname + j;
+
						sign2 = LT;
+
						pkgversion2[0] = '\0';
+
						pkgversion2++;
+
						if (pkgversion2[0] == '=') {
+
							pkgversion2++;
+
							sign=LE;
+
							j++;
+
						}
+
					} else {
+
						pkgversion = pkgname + j;
+
						sign = LT;
+
						pkgversion[0] = '\0';
						pkgversion++;
-
						sign=LE;
+
						if (pkgversion[0] == '=') {
+
							pkgversion++;
+
							sign=LE;
+
							j++;
+
						}
					}
-
					break;
-
				case '=':
-
					/* compatibility pkg_info accept == and = the same way */
-
					if (pkgname[0] != '=' && pkgversion[-1] == '=')
-
						pkgversion[-1] = '\0';
-
					pkgversion[0] = '\0';
-
					pkgversion++;
-
					sign = EQ;
-
					break;
-
			}
-
		}
-
		/*
-
		 * pkgversion 2 is because we should be able to match
-
		 * llwm>=2.9<3.1.*
-
		 */
-
		if (argc > 0) {
-
			pkgversion2 = strrchr(pkgname, '>');
-
			if (pkgversion2 == NULL)
-
				pkgversion2 = strrchr(pkgname, '<');
-
			if (pkgversion2 == NULL)
-
				pkgversion2 = strrchr(pkgname, '=');
-
		} else
-
			pkgversion2 = NULL;
-

-
		if (pkgversion2 != NULL) {
-
			switch (pkgversion2[0]) {
-
				case '>':
-
					pkgversion2[0] = '\0';
-
					pkgversion2++;
-
					sign2 = GT;
-
					if (pkgversion2[0] == '=') {
+
				} else if (pkgname[j] == '>') {
+
					if (pkgversion) {
+
						pkgversion2 = pkgname + j;
+
						sign2 = GT;
+
						pkgversion2[0] = '\0';
						pkgversion2++;
-
						sign2=GE;
+
						if (pkgversion2[0] == '=') {
+
							pkgversion2++;
+
							sign=GE;
+
							j++;
+
						}
+
					} else {
+
						pkgversion = pkgname + j;
+
						sign = GT;
+
						pkgversion[0] = '\0';
+
						pkgversion++;
+
						if (pkgversion[0] == '=') {
+
							pkgversion++;
+
							sign=GE;
+
							j++;
+
						}
					}
-
					break;
-
				case '<':
-
					pkgversion2[0] = '\0';
-
					pkgversion2++;
-
					sign2 = LT;
-
					if (pkgversion2[0] == '=') {
+
				} else if (pkgname[j] == '=') {
+
					if (pkgversion) {
+
						pkgversion2 = pkgname + j;
+
						sign2 = EQ;
+
						pkgversion2[0] = '\0';
						pkgversion2++;
-
						sign2=LE;
+
						if (pkgversion2[0] == '=') {
+
							pkgversion2++;
+
							sign=EQ;
+
							j++;
+
						}
+
					} else {
+
						pkgversion = pkgname + j;
+
						sign = EQ;
+
						pkgversion[0] = '\0';
+
						pkgversion++;
+
						if (pkgversion[0] == '=') {
+
							pkgversion++;
+
							sign=EQ;
+
							j++;
+
						}
					}
-
					break;
-
				case '=':
-
					/* compatibility pkg_info accept == and = the same way */
-
					if (pkgname[0] != '=' && pkgversion2[-1] == '=')
-
						pkgversion2[-1] = '\0';
-
					pkgversion2[0] = '\0';
-
					pkgversion2++;
-
					sign2 = EQ;
-
					break;
+
				}
+
				j++;
			}
-
		}
+
		} else
+
			pkgversion = NULL;

		if ((it = pkgdb_query(db, pkgname, match)) == NULL) {
			return (EX_IOERR);