summaryrefslogtreecommitdiff
path: root/noncore/settings/aqpkg/version.cpp
Unidiff
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
@@ -20,13 +20,15 @@
20 */ 20 */
21#include <stdio.h> 21#include <stdio.h>
22#include <stdlib.h> 22#include <stdlib.h>
23#include <ctype.h> 23#include <ctype.h>
24#include <string.h> 24#include <string.h>
25 25
26# define _(Text) Text 26#include <qobject.h>
27
28//# define _(Text) Text
27 29
28class versionrevision 30class versionrevision
29{ 31{
30public: 32public:
31 versionrevision() 33 versionrevision()
32 { 34 {
@@ -41,20 +43,20 @@ public:
41 43
42 void setVersion( const char *str ) 44 void setVersion( const char *str )
43 { 45 {
44 version = new char[(strlen(str)+1)]; 46 version = new char[(strlen(str)+1)];
45 strcpy( version, str ); 47 strcpy( version, str );
46 } 48 }
47 49
48 unsigned long epoch; 50 unsigned long epoch;
49 char *version; 51 char *version;
50 const char *revision; 52 const char *revision;
51 const char *familiar_revision; 53 const char *familiar_revision;
52}; 54};
53 55
54static int verrevcmp(const char *val, const char *ref) 56static int verrevcmp(const char *val, const char *ref)
55{ 57{
56 int vc, rc; 58 int vc, rc;
57 long vl, rl; 59 long vl, rl;
58 const char *vp, *rp; 60 const char *vp, *rp;
59 61
60 if (!val) val= ""; 62 if (!val) val= "";
@@ -79,26 +81,26 @@ static int verrevcmp(const char *val, const char *ref)
79 if (!*val) return -1; 81 if (!*val) return -1;
80 if (!*ref) return +1; 82 if (!*ref) return +1;
81 } 83 }
82} 84}
83 85
84int versioncompare(const struct versionrevision *version, 86int versioncompare(const struct versionrevision *version,
85 const struct versionrevision *refversion) 87 const struct versionrevision *refversion)
86{ 88{
87 int r; 89 int r;
88 90
89 if (version->epoch > refversion->epoch) return 1; 91 if (version->epoch > refversion->epoch) return 1;
90 if (version->epoch < refversion->epoch) return -1; 92 if (version->epoch < refversion->epoch) return -1;
91 r= verrevcmp(version->version,refversion->version); if (r) return r; 93 r= verrevcmp(version->version,refversion->version); if (r) return r;
92 r= verrevcmp(version->revision,refversion->revision); if (r) return r; 94 r= verrevcmp(version->revision,refversion->revision); if (r) return r;
93 return verrevcmp(version->familiar_revision,refversion->familiar_revision); 95 return verrevcmp(version->familiar_revision,refversion->familiar_revision);
94} 96}
95 97
96int versionsatisfied3(const struct versionrevision *it, 98int versionsatisfied3(const struct versionrevision *it,
97 const struct versionrevision *ref, 99 const struct versionrevision *ref,
98 const char *op) 100 const char *op)
99{ 101{
100 int r; 102 int r;
101 r= versioncompare(it,ref); 103 r= versioncompare(it,ref);
102 if (strcmp(op, "<=") == 0 || strcmp(op, "<") == 0) 104 if (strcmp(op, "<=") == 0 || strcmp(op, "<") == 0)
103 return r <= 0; 105 return r <= 0;
104 if (strcmp(op, ">=") == 0 || strcmp(op, ">") == 0) 106 if (strcmp(op, ">=") == 0 || strcmp(op, ">") == 0)
@@ -106,29 +108,32 @@ int versionsatisfied3(const struct versionrevision *it,
106 if (strcmp(op, "<<") == 0) 108 if (strcmp(op, "<<") == 0)
107 return r < 0; 109 return r < 0;
108 if (strcmp(op, ">>") == 0) 110 if (strcmp(op, ">>") == 0)
109 return r > 0; 111 return r > 0;
110 if (strcmp(op, "=") == 0) 112 if (strcmp(op, "=") == 0)
111 return r == 0; 113 return r == 0;
112 fprintf(stderr, "unknown operator: %s", op); 114// fprintf(stderr, "unknown operator: %s", op);
113 115
114 exit(1); 116 exit(1);
115} 117}
116 118
117const char *parseversion(struct versionrevision *rversion, const char *string) 119const char *parseversion(struct versionrevision *rversion, const char *string)
118{ 120{
119 char *hyphen, *colon, *eepochcolon; 121 char *hyphen, *colon, *eepochcolon;
120 unsigned long epoch; 122 unsigned long epoch;
121 123
122 if (!*string) return _("version string is empty"); 124 if ( !*string )
123 125 return QObject::tr( "Version string is empty." );
126
124 colon= strchr(string,':'); 127 colon= strchr(string,':');
125 if (colon) { 128 if (colon) {
126 epoch= strtoul(string,&eepochcolon,10); 129 epoch= strtoul(string,&eepochcolon,10);
127 if (colon != eepochcolon) return _("epoch in version is not number"); 130 if ( colon != eepochcolon )
128 if (!*++colon) return _("nothing after colon in version number"); 131 return QObject::tr( "Epoch in version is not number." );
132 if ( !*++colon )
133 return QObject::tr( "Nothing after colon in version number." );
129 string= colon; 134 string= colon;
130 rversion->epoch= epoch; 135 rversion->epoch= epoch;
131 } else { 136 } else {
132 rversion->epoch= 0; 137 rversion->epoch= 0;
133 } 138 }
134 139
@@ -153,43 +158,43 @@ const char *parseversion(struct versionrevision *rversion, const char *string)
153/* 158/*
154 fprintf(stderr,"Parsed version: %lu, %s, %s, %s\n", 159 fprintf(stderr,"Parsed version: %lu, %s, %s, %s\n",
155 rversion->epoch, 160 rversion->epoch,
156 rversion->version, 161 rversion->version,
157 rversion->revision, 162 rversion->revision,
158 rversion->familiar_revision); 163 rversion->familiar_revision);
159*/ 164*/
160 return 0; 165 return 0;
161} 166}
162 167
163int compareVersions( const char *v1, const char *v2 ) 168int compareVersions( const char *v1, const char *v2 )
164{ 169{
165 const char *err; 170 const char *err;
166 versionrevision ver, ref; 171 versionrevision ver, ref;
167 172
168 err = parseversion(&ref, v1); 173 err = parseversion(&ref, v1);
169 if (err) { 174 if (err) {
170 fprintf(stderr, "Invalid version `%s': %s\n", v2, err); 175// fprintf(stderr, "Invalid version `%s': %s\n", v2, err);
171 return -2; 176 return -2;
172 } 177 }
173 178
174 err = parseversion(&ver, v2); 179 err = parseversion(&ver, v2);
175 if (err) { 180 if (err) {
176 fprintf(stderr, "Invalid version `%s': %s\n", v1, err); 181// fprintf(stderr, "Invalid version `%s': %s\n", v1, err);
177 return -2; 182 return -2;
178 } 183 }
179 184
180 if ( versionsatisfied3( &ver, &ref, "=" ) ) 185 if ( versionsatisfied3( &ver, &ref, "=" ) )
181 return 0; 186 return 0;
182 else if ( versionsatisfied3( &ver, &ref, "<" ) ) 187 else if ( versionsatisfied3( &ver, &ref, "<" ) )
183 return -1; 188 return -1;
184 else 189 else
185 return 1; 190 return 1;
186} 191}
187 192
188/* 193/*
189int main(int argc, char *argv[]) 194int main(int argc, char *argv[])
190{ 195{
191 const char *err; 196 const char *err;
192 versionrevision ver, ref; 197 versionrevision ver, ref;
193 198
194 if (argc < 4) { 199 if (argc < 4) {
195 fprintf(stderr, "usage: %s: version op refversion\n", argv[0]); 200 fprintf(stderr, "usage: %s: version op refversion\n", argv[0]);
@@ -198,13 +203,13 @@ int main(int argc, char *argv[])
198 203
199 err = parseversion(&ver, argv[1]); 204 err = parseversion(&ver, argv[1]);
200 if (err) { 205 if (err) {
201 fprintf(stderr, "Invalid version `%s': %s\n", argv[1], err); 206 fprintf(stderr, "Invalid version `%s': %s\n", argv[1], err);
202 return 2; 207 return 2;
203 } 208 }
204 209
205 err = parseversion(&ref, argv[3]); 210 err = parseversion(&ref, argv[3]);
206 if (err) { 211 if (err) {
207 fprintf(stderr, "Invalid version `%s': %s\n", argv[3], err); 212 fprintf(stderr, "Invalid version `%s': %s\n", argv[3], err);
208 return 2; 213 return 2;
209 } 214 }
210 215