From d889021cebb7bf798d1b7bf24149c354627e9553 Mon Sep 17 00:00:00 2001
From: Kamil Dudka
Date: Fri, 20 Mar 2009 11:20:12 +0100
Subject: [PATCH] filevercmp: extension for simple and numbered backups
---
ChangeLog | 5 +++++
lib/filevercmp.c | 6 +++---
lib/filevercmp.h | 2 +-
tests/test-filevercmp.c | 9 +++++++--
4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0bc942d..83075df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-03-20 Kamil Dudka
+
+ * lib/filevercmp.c: Treat simple or numbered backup suffix as suffix.
+ * tests/test-filevercmp.c: Add tests for backup suffixes.
+
2009-03-19 Eric Blake
doc: mention more functions added in cygwin 1.7.0
diff --git a/lib/filevercmp.c b/lib/filevercmp.c
index 7b40c98..b1ceab6 100644
--- a/lib/filevercmp.c
+++ b/lib/filevercmp.c
@@ -27,7 +27,7 @@
#include
/* Match a file suffix defined by this regular expression:
- /(\.[A-Za-z][A-Za-z0-9]*)*$/
+ /(\.[A-Za-z~][A-Za-z0-9~]*)*$/
Scan the string *STR and return a pointer to the matching suffix, or
NULL if not found. Upon return, *STR points to terminating NUL. */
static const char *
@@ -40,7 +40,7 @@ match_suffix (const char **str)
if (read_alpha)
{
read_alpha = false;
- if (!c_isalpha (**str))
+ if (!c_isalpha (**str) && '~' != **str)
match = NULL;
}
else if ('.' == **str)
@@ -49,7 +49,7 @@ match_suffix (const char **str)
if (!match)
match = *str;
}
- else if (!c_isalnum (**str))
+ else if (!c_isalnum (**str) && '~' != **str)
match = NULL;
(*str)++;
}
diff --git a/lib/filevercmp.h b/lib/filevercmp.h
index 569b4d0..9568d15 100644
--- a/lib/filevercmp.h
+++ b/lib/filevercmp.h
@@ -32,7 +32,7 @@
It returns number >0 for S1 > S2, 0 for S1 == S2 and number <0 for S1 < S2.
This function compares strings, in a way that if VER1 and VER2 are version
- numbers and PREFIX and SUFFIX (SUFFIX defined as (\.[A-Za-z][A-Za-z0-9]*)*)
+ numbers and PREFIX and SUFFIX (SUFFIX defined as (\.[A-Za-z~][A-Za-z0-9~]*)*)
are strings then VER1 < VER2 implies filevercmp (PREFIX VER1 SUFFIX,
PREFIX VER2 SUFFIX) < 0.
diff --git a/tests/test-filevercmp.c b/tests/test-filevercmp.c
index fe54dc2..45a594b 100644
--- a/tests/test-filevercmp.c
+++ b/tests/test-filevercmp.c
@@ -45,10 +45,15 @@ static const char *const examples[] =
".b",
"a~",
"a",
+ "a.b~",
+ "a.b",
+ "a.bc~",
+ "a.bc",
"b~",
"b",
- "gcc-c++-10.fc9.tar.gz",
- "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2",
+ "gcc-c++-10.fc9.tar.gz.~1~",
+ "gcc-c++-10.fc9.tar.gz.~2~",
+ "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2.~1~",
"glibc-2-0.1.beta1.fc10.rpm",
"glibc-common-5-0.2.beta2.fc9.ebuild",
"glibc-common-5-0.2b.deb",
--
1.6.1.2