26#define G_LOG_DOMAIN "libgvm util"
61 int index1 = 0, index2 = 0;
62 int release_state1 = 0, release_state2 = 0;
68 if (ver1 == NULL || ver2 == NULL)
74 if (strcmp (ver1, ver2) == 0)
90 while (part1 && part2)
92 if (strcmp (part1, part2) == 0)
106 if (part1 == NULL && part2 == NULL)
110 return release_state2 - release_state1;
128 if ((rs1 && release_state1) || (rs2 && release_state2))
139 return rs2 - release_state1;
148 return release_state2 - rs1;
161 else if (atoi (part1) < atoi (part2))
163 else if (atoi (part1) == atoi (part2))
165 else if (atoi (part1) > atoi (part2))
184 char prep_version[2048];
186 int index_v, index_pv;
192 if (strlen (version) > 1024)
195 ver = g_strdup (version);
202 index_v = index_pv = 0;
204 is_digit = g_ascii_isdigit (ver[0]);
206 while (index_v < (
int) strlen (ver) && index_pv < 2047)
208 if (ver[index_v] ==
'\\')
214 if (ver[index_v] ==
'_' || ver[index_v] ==
'-' || ver[index_v] ==
'+'
215 || ver[index_v] ==
':' || ver[index_v] ==
'.')
217 if (index_pv > 0 && prep_version[index_pv - 1] !=
'.')
219 prep_version[index_pv] =
'.';
226 if (is_digit != g_ascii_isdigit (ver[index_v]))
228 is_digit = !is_digit;
229 if (index_pv > 0 && prep_version[index_pv - 1] !=
'.')
231 prep_version[index_pv] =
'.';
236 if (ver[index_v] ==
'r')
238 if (strstr (ver + index_v,
"releasecandidate") == ver + index_v)
240 prep_version[index_pv] =
'r';
241 prep_version[index_pv + 1] =
'c';
246 if ((strstr (ver + index_v,
"release-candidate") == ver + index_v)
247 || (strstr (ver + index_v,
"release_candidate") == ver + index_v))
249 prep_version[index_pv] =
'r';
250 prep_version[index_pv + 1] =
'c';
257 prep_version[index_pv] = ver[index_v];
262 prep_version[index_pv] =
'\0';
264 return g_strdup (prep_version);
289 if (strcmp (part,
"dev") == 0 || strcmp (part,
"development") == 0)
291 if (strcmp (part,
"alpha") == 0)
293 if (strcmp (part,
"beta") == 0)
295 if (strcmp (part,
"rc") == 0)
316 for (begin = 0; begin < (int) strlen (version) && dot_count < index; begin++)
318 if (version[begin] ==
'.')
322 if (begin == (
int) strlen (version))
325 for (end = begin + 1; end < (int) strlen (version) && version[end] !=
'.';
329 return str_cpy ((
char *) (version + begin), end - begin);
344 if (strcmp (part,
"dev") == 0 || strcmp (part,
"development") == 0
345 || strcmp (part,
"alpha") == 0 || strcmp (part,
"beta") == 0
346 || strcmp (part,
"rc") == 0)
348 if (g_ascii_isdigit (*part))
366 result = (
char *) g_malloc (size + 1);
367 memset (result, 0, size + 1);
368 strncpy (result, source, size);
static int get_release_state(const char *, int)
Gets the release state of a specified part of the version string if any.
Definition versionutils.c:279
static char * get_part(const char *, int)
Gets the part of the version string that is specified by index.
Definition versionutils.c:311
static char * str_cpy(char *, int)
Copy size characters of a string to an newly allocated new string.
Definition versionutils.c:363
static gchar * prepare_version_string(const char *)
Prepare the version string for comparison.
Definition versionutils.c:182
static gboolean is_text(const char *)
Checks if a given part of the version string is plain text.
Definition versionutils.c:340
int cmp_versions(const char *version1, const char *version2)
Compare two version strings representing a software version to decide which version is newer.
Definition versionutils.c:57
Headers for version utils.