tree-wide: replace strverscmp() and str_verscmp() with strverscmp_improved()
This commit is contained in:
@@ -2164,7 +2164,7 @@ CGroupMask get_cpu_accounting_mask(void) {
|
||||
struct utsname u;
|
||||
assert_se(uname(&u) >= 0);
|
||||
|
||||
if (str_verscmp(u.release, "4.15") < 0)
|
||||
if (strverscmp_improved(u.release, "4.15") < 0)
|
||||
needed_mask = CGROUP_MASK_CPU;
|
||||
else
|
||||
needed_mask = 0;
|
||||
|
||||
@@ -227,68 +227,6 @@ int version(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This is a direct translation of str_verscmp from boot.c */
|
||||
static bool is_digit(int c) {
|
||||
return c >= '0' && c <= '9';
|
||||
}
|
||||
|
||||
static int c_order(int c) {
|
||||
if (c == 0 || is_digit(c))
|
||||
return 0;
|
||||
|
||||
if ((c >= 'a') && (c <= 'z'))
|
||||
return c;
|
||||
|
||||
return c + 0x10000;
|
||||
}
|
||||
|
||||
int str_verscmp(const char *s1, const char *s2) {
|
||||
const char *os1, *os2;
|
||||
|
||||
assert(s1);
|
||||
assert(s2);
|
||||
|
||||
os1 = s1;
|
||||
os2 = s2;
|
||||
|
||||
while (*s1 || *s2) {
|
||||
int first;
|
||||
|
||||
while ((*s1 && !is_digit(*s1)) || (*s2 && !is_digit(*s2))) {
|
||||
int order;
|
||||
|
||||
order = c_order(*s1) - c_order(*s2);
|
||||
if (order != 0)
|
||||
return order;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
while (*s1 == '0')
|
||||
s1++;
|
||||
while (*s2 == '0')
|
||||
s2++;
|
||||
|
||||
first = 0;
|
||||
while (is_digit(*s1) && is_digit(*s2)) {
|
||||
if (first == 0)
|
||||
first = *s1 - *s2;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
if (is_digit(*s1))
|
||||
return 1;
|
||||
if (is_digit(*s2))
|
||||
return -1;
|
||||
|
||||
if (first != 0)
|
||||
return first;
|
||||
}
|
||||
|
||||
return strcmp(os1, os2);
|
||||
}
|
||||
|
||||
/* Turn off core dumps but only if we're running outside of a container. */
|
||||
void disable_coredumps(void) {
|
||||
int r;
|
||||
|
||||
@@ -63,6 +63,4 @@ int container_get_leader(const char *machine, pid_t *pid);
|
||||
|
||||
int version(void);
|
||||
|
||||
int str_verscmp(const char *s1, const char *s2);
|
||||
|
||||
void disable_coredumps(void);
|
||||
|
||||
+1
-1
@@ -471,7 +471,7 @@ static int compare_version(const char *a, const char *b) {
|
||||
b += strcspn(b, " ");
|
||||
b += strspn(b, " ");
|
||||
|
||||
return strverscmp(a, b);
|
||||
return strverscmp_improved(a, b);
|
||||
}
|
||||
|
||||
static int version_check(int fd_from, const char *from, int fd_to, const char *to) {
|
||||
|
||||
+1
-58
@@ -914,63 +914,6 @@ static VOID config_entry_free(ConfigEntry *entry) {
|
||||
FreePool(entry);
|
||||
}
|
||||
|
||||
static BOOLEAN is_digit(CHAR16 c) {
|
||||
return (c >= '0') && (c <= '9');
|
||||
}
|
||||
|
||||
static UINTN c_order(CHAR16 c) {
|
||||
if (c == '\0')
|
||||
return 0;
|
||||
if (is_digit(c))
|
||||
return 0;
|
||||
else if ((c >= 'a') && (c <= 'z'))
|
||||
return c;
|
||||
else
|
||||
return c + 0x10000;
|
||||
}
|
||||
|
||||
static INTN str_verscmp(CHAR16 *s1, CHAR16 *s2) {
|
||||
CHAR16 *os1 = s1;
|
||||
CHAR16 *os2 = s2;
|
||||
|
||||
while (*s1 || *s2) {
|
||||
INTN first;
|
||||
|
||||
while ((*s1 && !is_digit(*s1)) || (*s2 && !is_digit(*s2))) {
|
||||
INTN order;
|
||||
|
||||
order = c_order(*s1) - c_order(*s2);
|
||||
if (order != 0)
|
||||
return order;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
while (*s1 == '0')
|
||||
s1++;
|
||||
while (*s2 == '0')
|
||||
s2++;
|
||||
|
||||
first = 0;
|
||||
while (is_digit(*s1) && is_digit(*s2)) {
|
||||
if (first == 0)
|
||||
first = *s1 - *s2;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
if (is_digit(*s1))
|
||||
return 1;
|
||||
if (is_digit(*s2))
|
||||
return -1;
|
||||
|
||||
if (first != 0)
|
||||
return first;
|
||||
}
|
||||
|
||||
return StrCmp(os1, os2);
|
||||
}
|
||||
|
||||
static CHAR8 *line_get_key_value(
|
||||
CHAR8 *content,
|
||||
CHAR8 *sep,
|
||||
@@ -1535,7 +1478,7 @@ static INTN config_entry_compare(ConfigEntry *a, ConfigEntry *b) {
|
||||
if (a->tries_left == 0 && b->tries_left != 0)
|
||||
return -1;
|
||||
|
||||
r = str_verscmp(a->id, b->id);
|
||||
r = strverscmp_improved(a->id, b->id);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@ static int boot_loader_read_conf(const char *path, BootConfig *config) {
|
||||
}
|
||||
|
||||
static int boot_entry_compare(const BootEntry *a, const BootEntry *b) {
|
||||
return str_verscmp(a->id, b->id);
|
||||
return strverscmp_improved(a->id, b->id);
|
||||
}
|
||||
|
||||
static int boot_entries_find(
|
||||
|
||||
@@ -247,7 +247,7 @@ static int condition_test_kernel_version(Condition *c, char **env) {
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
|
||||
}
|
||||
|
||||
r = test_order(str_verscmp(u.release, s), order);
|
||||
r = test_order(strverscmp_improved(u.release, s), order);
|
||||
} else
|
||||
/* No prefix? Then treat as glob string */
|
||||
r = fnmatch(s, u.release, 0) == 0;
|
||||
|
||||
+5
-5
@@ -395,9 +395,9 @@ static int merge_hierarchy(
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int strverscmpp(char *const* a, char *const* b) {
|
||||
/* usable in qsort() for sorting a string array with strverscmp() */
|
||||
return strverscmp(*a, *b);
|
||||
static int strverscmp_improvedp(char *const* a, char *const* b) {
|
||||
/* usable in qsort() for sorting a string array with strverscmp_improved() */
|
||||
return strverscmp_improved(*a, *b);
|
||||
}
|
||||
|
||||
static int validate_version(
|
||||
@@ -623,8 +623,8 @@ static int merge_subprocess(Hashmap *images, const char *workspace) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Order by version sort (i.e. libc strverscmp()) */
|
||||
typesafe_qsort(extensions, n_extensions, strverscmpp);
|
||||
/* Order by version sort with strverscmp_improved() */
|
||||
typesafe_qsort(extensions, n_extensions, strverscmp_improvedp);
|
||||
|
||||
buf = strv_join(extensions, "', '");
|
||||
if (!buf)
|
||||
|
||||
Reference in New Issue
Block a user