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)
107 return release_state2 - release_state1;
121 if ((rs1 && release_state1) || (rs2 && release_state2))
128 return rs2 - release_state1;
137 return release_state2 - rs1;
153 if (!rs1 && !rs2 && atoi (part1) < atoi (part2))
156 if (!rs1 && !rs2 && atoi (part1) == atoi (part2))
159 if (!rs1 && !rs2 && atoi (part1) > atoi (part2))
180 char prep_version[2048];
182 int index_v, index_pv;
188 if (strlen (version) > 1024)
191 ver = g_strdup (version);
198 index_v = index_pv = 0;
200 is_digit = g_ascii_isdigit (ver[0]);
202 while (index_v < (
int) strlen (ver) && index_pv < 2047)
204 if (ver[index_v] ==
'\\')
210 if (ver[index_v] ==
'_' || ver[index_v] ==
'-' || ver[index_v] ==
'+'
211 || ver[index_v] ==
':' || ver[index_v] ==
'.')
213 if (index_pv > 0 && prep_version[index_pv - 1] !=
'.')
215 prep_version[index_pv] =
'.';
222 if (is_digit != g_ascii_isdigit (ver[index_v]))
224 is_digit = !is_digit;
225 if (index_pv > 0 && prep_version[index_pv - 1] !=
'.')
227 prep_version[index_pv] =
'.';
232 if (ver[index_v] ==
'r')
234 if (strstr (ver + index_v,
"releasecandidate") == ver + index_v)
236 prep_version[index_pv] =
'r';
237 prep_version[index_pv + 1] =
'c';
242 if ((strstr (ver + index_v,
"release-candidate") == ver + index_v)
243 || (strstr (ver + index_v,
"release_candidate") == ver + index_v))
245 prep_version[index_pv] =
'r';
246 prep_version[index_pv + 1] =
'c';
253 prep_version[index_pv] = ver[index_v];
258 prep_version[index_pv] =
'\0';
260 return (g_strdup (prep_version));
285 if (strcmp (part,
"dev") == 0 || strcmp (part,
"development") == 0)
287 if (strcmp (part,
"alpha") == 0)
289 if (strcmp (part,
"beta") == 0)
291 if (strcmp (part,
"rc") == 0)
312 for (begin = 0; begin < (int) strlen (version) && dot_count < index; begin++)
314 if (version[begin] ==
'.')
318 if (begin == (
int) strlen (version))
321 for (end = begin + 1; end < (int) strlen (version) && version[end] !=
'.';
325 return str_cpy ((
char *) (version + begin), end - begin);
340 if (strcmp (part,
"dev") == 0 || strcmp (part,
"alpha") == 0
341 || strcmp (part,
"beta") == 0 || strcmp (part,
"rc") == 0)
343 if (g_ascii_isdigit (*part))
361 result = (
char *) g_malloc (size + 1);
362 memset (result, 0, size + 1);
363 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:275
static char * get_part(const char *, int)
Gets the part of the version string that is specified by index.
Definition versionutils.c:307
static char * str_cpy(char *, int)
Copy size characters of a string to an newly allocated new string.
Definition versionutils.c:358
static gchar * prepare_version_string(const char *)
Prepare the version string for comparison.
Definition versionutils.c:178
static gboolean is_text(const char *)
Checks if a given part of the version string is plain text.
Definition versionutils.c:336
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.