From 1fb0169558a1bb0fabeaf3b3a1bd42eaafa388d0 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 16 Jun 2004 07:07:13 +0000 Subject: [PATCH] Make the version_ok() hack a little more...uh, big. --- mojopatch.c | 30 ++++++++++++++++++++++++++++++ platform_unix.c | 20 ++++++-------------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/mojopatch.c b/mojopatch.c index 3aedc4d..f33f41e 100644 --- a/mojopatch.c +++ b/mojopatch.c @@ -581,9 +581,39 @@ int version_ok(const char *ver, const char *allowed_ver) if (*allowed_ver == '\0') return 1; /* No specified version? Anything is okay, then. */ + if (strcmp(allowed_ver, ver) == 0) + return -1; /* all patched up. */ + buf = (char *) alloca(strlen(allowed_ver) + 1); strcpy(buf, allowed_ver); + const char *lessThan = "less than "; + const size_t lessThanLen = strlen(lessThan); + if (strncmp(buf, lessThan, lessThanLen) == 0) + { + char *endptr = NULL; + double dver; + double dallow; + ptr = buf + lessThanLen; + *ptr = '\0'; + ptr++; + + dver = strtod(ver, &endptr); + if (endptr == ver) + return 0; + + dallow = strtod(ptr, &endptr); + if (endptr == ptr) + return 0; + + if (dver < dallow) + return(1); + else if (dver == dallow) + return(-1); + + return(0); + } /* if */ + while ((ptr = strstr(buf, " or ")) != NULL) { *ptr = '\0'; diff --git a/platform_unix.c b/platform_unix.c index da8164b..558ea64 100644 --- a/platform_unix.c +++ b/platform_unix.c @@ -329,21 +329,13 @@ static int parse_info_dot_plist(const char *ident, ptr = find_info_plist_version(mem); if (ptr != NULL) { - if (version_ok(ptr, version)) - retval = 1; - else + retval = version_ok(ptr, version); + if (retval == -1) + _fatal("You seem to be all patched up already!"); + else if (retval == 0) { - if (strcmp(ptr, newversion) == 0) - { - _fatal("You seem to be all patched up already!"); - retval = -1; - } /* if */ - else - { - _fatal("This patch applies to version '%s', but you have '%s'.", - version, ptr); - retval = 0; - } /* else */ + _fatal("This patch applies to version '%s', but you have '%s'.", + version, ptr); } /* else */ } /* if */