Diffstat (limited to 'noncore/settings/aqpkg/version.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/settings/aqpkg/version.cpp | 39 |
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 | ||
28 | class versionrevision | 30 | class versionrevision |
29 | { | 31 | { |
30 | public: | 32 | public: |
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 | ||
54 | static int verrevcmp(const char *val, const char *ref) | 56 | static 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 | ||
84 | int versioncompare(const struct versionrevision *version, | 86 | int 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 | ||
96 | int versionsatisfied3(const struct versionrevision *it, | 98 | int 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 | ||
117 | const char *parseversion(struct versionrevision *rversion, const char *string) | 119 | const 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 | ||
163 | int compareVersions( const char *v1, const char *v2 ) | 168 | int 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 | /* |
189 | int main(int argc, char *argv[]) | 194 | int 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 | ||