]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
string-util: trivial optimizations for strverscmp_improved()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 1 Jun 2021 08:58:56 +0000 (17:58 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 2 Jun 2021 05:20:25 +0000 (14:20 +0900)
src/fundamental/string-util-fundamental.c

index 9f14597fef873f41dd8e7ae8de327ceacca035f0..383e390577d2e5dd481bdfeb508df02820e17f03 100644 (file)
@@ -152,7 +152,7 @@ sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
                  * Note that except for '~' prefixed segments, a string has more segments is newer.
                  * So, this check must be after the '~' check. */
                 if (*a == '\0' || *b == '\0')
-                        return strcmp(a, b);
+                        return CMP(*a, *b);
 
                 /* Handle '-', which separates version and release, e.g 123.4-3.1.fc33.x86_64 */
                 if (*a == '-' || *b == '-') {
@@ -194,9 +194,9 @@ sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
 
                         /* Find the leading numeric segments. One may be an empty string. So,
                          * numeric segments are always newer than alpha segments. */
-                        for (aa = a; *aa != '\0' && isdigit(*aa); aa++)
+                        for (aa = a; isdigit(*aa); aa++)
                                 ;
-                        for (bb = b; *bb != '\0' && isdigit(*bb); bb++)
+                        for (bb = b; isdigit(*bb); bb++)
                                 ;
 
                         /* To compare numeric segments without parsing their values, first compare the
@@ -211,9 +211,9 @@ sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
                                 return r;
                 } else {
                         /* Find the leading non-numeric segments. */
-                        for (aa = a; *aa != '\0' && is_alpha(*aa); aa++)
+                        for (aa = a; is_alpha(*aa); aa++)
                                 ;
-                        for (bb = b; *bb != '\0' && is_alpha(*bb); bb++)
+                        for (bb = b; is_alpha(*bb); bb++)
                                 ;
 
                         /* Note that the segments are usually not NUL-terminated. */