summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/version.cpp
Side-by-side diff
Diffstat (limited to 'noncore/settings/aqpkg/version.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/version.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/noncore/settings/aqpkg/version.cpp b/noncore/settings/aqpkg/version.cpp
index e836da1..59e6f3f 100644
--- a/noncore/settings/aqpkg/version.cpp
+++ b/noncore/settings/aqpkg/version.cpp
@@ -14,53 +14,55 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with dpkg; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
-# define _(Text) Text
+#include <qobject.h>
+
+//# define _(Text) Text
class versionrevision
{
public:
versionrevision()
{
version = 0;
}
~versionrevision()
{
if ( version )
delete version;
}
void setVersion( const char *str )
{
version = new char[(strlen(str)+1)];
strcpy( version, str );
}
-
+
unsigned long epoch;
char *version;
const char *revision;
const char *familiar_revision;
-};
+};
-static int verrevcmp(const char *val, const char *ref)
+static int verrevcmp(const char *val, const char *ref)
{
int vc, rc;
long vl, rl;
const char *vp, *rp;
if (!val) val= "";
if (!ref) ref= "";
for (;;) {
vp= val; while (*vp && !isdigit(*vp)) vp++;
rp= ref; while (*rp && !isdigit(*rp)) rp++;
for (;;) {
vc= val == vp ? 0 : *val++;
@@ -73,68 +75,71 @@ static int verrevcmp(const char *val, const char *ref)
val= vp;
ref= rp;
vl=0; if (isdigit(*vp)) vl= strtol(val,(char**)&val,10);
rl=0; if (isdigit(*rp)) rl= strtol(ref,(char**)&ref,10);
if (vl != rl) return vl - rl;
if (!*val && !*ref) return 0;
if (!*val) return -1;
if (!*ref) return +1;
}
}
int versioncompare(const struct versionrevision *version,
- const struct versionrevision *refversion)
+ const struct versionrevision *refversion)
{
int r;
if (version->epoch > refversion->epoch) return 1;
if (version->epoch < refversion->epoch) return -1;
r= verrevcmp(version->version,refversion->version); if (r) return r;
r= verrevcmp(version->revision,refversion->revision); if (r) return r;
return verrevcmp(version->familiar_revision,refversion->familiar_revision);
}
int versionsatisfied3(const struct versionrevision *it,
const struct versionrevision *ref,
- const char *op)
+ const char *op)
{
int r;
r= versioncompare(it,ref);
if (strcmp(op, "<=") == 0 || strcmp(op, "<") == 0)
return r <= 0;
if (strcmp(op, ">=") == 0 || strcmp(op, ">") == 0)
return r >= 0;
if (strcmp(op, "<<") == 0)
return r < 0;
if (strcmp(op, ">>") == 0)
return r > 0;
if (strcmp(op, "=") == 0)
return r == 0;
- fprintf(stderr, "unknown operator: %s", op);
+// fprintf(stderr, "unknown operator: %s", op);
exit(1);
}
-const char *parseversion(struct versionrevision *rversion, const char *string)
+const char *parseversion(struct versionrevision *rversion, const char *string)
{
char *hyphen, *colon, *eepochcolon;
unsigned long epoch;
- if (!*string) return _("version string is empty");
-
+ if ( !*string )
+ return QObject::tr( "Version string is empty." );
+
colon= strchr(string,':');
if (colon) {
epoch= strtoul(string,&eepochcolon,10);
- if (colon != eepochcolon) return _("epoch in version is not number");
- if (!*++colon) return _("nothing after colon in version number");
+ if ( colon != eepochcolon )
+ return QObject::tr( "Epoch in version is not number." );
+ if ( !*++colon )
+ return QObject::tr( "Nothing after colon in version number." );
string= colon;
rversion->epoch= epoch;
} else {
rversion->epoch= 0;
}
rversion->revision = "";
rversion->familiar_revision = "";
rversion->setVersion( string );
hyphen= strrchr(rversion->version,'-');
if (hyphen) {
@@ -147,68 +152,68 @@ const char *parseversion(struct versionrevision *rversion, const char *string)
rversion->revision = hyphen;
}
} else {
rversion->revision = hyphen;
}
}
/*
fprintf(stderr,"Parsed version: %lu, %s, %s, %s\n",
rversion->epoch,
rversion->version,
rversion->revision,
rversion->familiar_revision);
-*/
+*/
return 0;
}
int compareVersions( const char *v1, const char *v2 )
{
const char *err;
versionrevision ver, ref;
err = parseversion(&ref, v1);
if (err) {
- fprintf(stderr, "Invalid version `%s': %s\n", v2, err);
+// fprintf(stderr, "Invalid version `%s': %s\n", v2, err);
return -2;
}
err = parseversion(&ver, v2);
if (err) {
- fprintf(stderr, "Invalid version `%s': %s\n", v1, err);
+// fprintf(stderr, "Invalid version `%s': %s\n", v1, err);
return -2;
}
if ( versionsatisfied3( &ver, &ref, "=" ) )
return 0;
else if ( versionsatisfied3( &ver, &ref, "<" ) )
return -1;
else
return 1;
}
/*
-int main(int argc, char *argv[])
+int main(int argc, char *argv[])
{
const char *err;
versionrevision ver, ref;
if (argc < 4) {
fprintf(stderr, "usage: %s: version op refversion\n", argv[0]);
return 2;
}
err = parseversion(&ver, argv[1]);
if (err) {
fprintf(stderr, "Invalid version `%s': %s\n", argv[1], err);
return 2;
}
-
+
err = parseversion(&ref, argv[3]);
if (err) {
fprintf(stderr, "Invalid version `%s': %s\n", argv[3], err);
return 2;
}
printf( "Result: %d\n", versionsatisfied3(&ver, &ref, argv[2]) );
}
*/