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)
88 while (part1 && part2)
90 if (strcmp (part1, part2) == 0)
104 if (part1 == NULL && part2 == NULL)
105 return (release_state2 - release_state1);
119 if ((rs1 && release_state1) || (rs2 && release_state2))
126 return (rs2 - release_state1);
135 return (release_state2 - rs1);
151 if (!rs1 && !rs2 && atoi (part1) < atoi (part2))
154 if (!rs1 && !rs2 && atoi (part1) == atoi (part2))
157 if (!rs1 && !rs2 && atoi (part1) > atoi (part2))
178 char prep_version[2048];
180 int index_v, index_pv;
186 if (strlen (version) > 1024)
189 ver = g_strdup (version);
196 index_v = index_pv = 0;
198 is_digit = g_ascii_isdigit (ver[0]);
200 while (index_v < (
int) strlen (ver) && index_pv < 2047)
202 if (ver[index_v] ==
'\\')
208 if (ver[index_v] ==
'_' || ver[index_v] ==
'-' || ver[index_v] ==
'+'
209 || ver[index_v] ==
':' || ver[index_v] ==
'.')
211 if (index_pv > 0 && prep_version[index_pv - 1] !=
'.')
213 prep_version[index_pv] =
'.';
220 if (is_digit != g_ascii_isdigit (ver[index_v]))
222 is_digit = !is_digit;
223 if (index_pv > 0 && prep_version[index_pv - 1] !=
'.')
225 prep_version[index_pv] =
'.';
230 if (ver[index_v] ==
'r')
232 if (strstr (ver + index_v,
"releasecandidate") == ver + index_v)
234 prep_version[index_pv] =
'r';
235 prep_version[index_pv + 1] =
'c';
240 if ((strstr (ver + index_v,
"release-candidate") == ver + index_v)
241 || (strstr (ver + index_v,
"release_candidate") == ver + index_v))
243 prep_version[index_pv] =
'r';
244 prep_version[index_pv + 1] =
'c';
251 prep_version[index_pv] = ver[index_v];
256 prep_version[index_pv] =
'\0';
258 return (g_strdup (prep_version));
283 if (strcmp (part,
"dev") == 0 || strcmp (part,
"development") == 0)
285 if (strcmp (part,
"alpha") == 0)
287 if (strcmp (part,
"beta") == 0)
289 if (strcmp (part,
"rc") == 0)
310 for (begin = 0; begin < (int) strlen (version) && dot_count < index; begin++)
312 if (version[begin] ==
'.')
316 if (begin == (
int) strlen (version))
319 for (end = begin + 1; end < (int) strlen (version) && version[end] !=
'.';
323 return (
str_cpy ((
char *) (version + begin), end - begin));
338 if (strcmp (part,
"dev") == 0 || strcmp (part,
"alpha") == 0
339 || strcmp (part,
"beta") == 0 || strcmp (part,
"rc") == 0)
341 if (g_ascii_isdigit (*part))
359 result = (
char *) g_malloc (size + 1);
360 memset (result, 0, size + 1);
361 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:273
static char * get_part(const char *, int)
Gets the part of the version string that is specified by index.
Definition versionutils.c:305
static char * str_cpy(char *, int)
Copy size characters of a string to an newly allocated new string.
Definition versionutils.c:356
static gchar * prepare_version_string(const char *)
Prepare the version string for comparison.
Definition versionutils.c:176
static gboolean is_text(const char *)
Checks if a given part of the version string is plain text.
Definition versionutils.c:334
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.