From 1721cf06d9f23949a7a2ed6aec7615f8f5731be4 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 20 Mar 2009 11:20:12 +0100 Subject: [PATCH] filevercmp: handle simple~ and numbered.~3~ backup suffixes * lib/filevercmp.c: Handle simple~ and numbered.~3~ backup suffixes. * tests/test-filevercmp.c: Add tests for backup suffixes. Reported by Sven Joachim. --- ChangeLog | 6 ++++++ lib/filevercmp.c | 8 ++++---- lib/filevercmp.h | 4 ++-- tests/test-filevercmp.c | 9 ++++++++- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5dcebf928..4c55ee783 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-03-24 Kamil Dudka + + filevercmp: handle simple~ and numbered.~3~ backup suffixes + * lib/filevercmp.c: Handle simple~ and numbered.~3~ backup suffixes. + * tests/test-filevercmp.c: Add tests for backup suffixes. + 2009-03-24 Simon Josefsson * modules/stdlib (Depends-on): Add stdint, needed when defining diff --git a/lib/filevercmp.c b/lib/filevercmp.c index 7b40c98f7..99c07db9c 100644 --- a/lib/filevercmp.c +++ b/lib/filevercmp.c @@ -1,7 +1,7 @@ /* Copyright (C) 1995 Ian Jackson Copyright (C) 2001 Anthony Towns - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008-2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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 569b4d033..f3d78f0cd 100644 --- a/lib/filevercmp.h +++ b/lib/filevercmp.h @@ -1,7 +1,7 @@ /* Copyright (C) 1995 Ian Jackson Copyright (C) 2001 Anthony Towns - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008-2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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 fe54dc2f1..9933b8a42 100644 --- a/tests/test-filevercmp.c +++ b/tests/test-filevercmp.c @@ -1,5 +1,5 @@ /* Test of filevercmp() function. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008-2009 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,10 +45,17 @@ 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.fc9.tar.gz.~1~", + "gcc-c++-10.fc9.tar.gz.~2~", "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2", + "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", -- 2.11.0