changeset 11429:a32a8b26323e

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.
author Kamil Dudka <kdudka@redhat.com>
date Fri, 20 Mar 2009 11:20:12 +0100
parents 766299801152
children 960a5f2974d0
files ChangeLog lib/filevercmp.c lib/filevercmp.h tests/test-filevercmp.c
diffstat 4 files changed, 20 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-03-24  Kamil Dudka  <kdudka@redhat.com>
+
+	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  <simon@josefsson.org>
 
 	* modules/stdlib (Depends-on): Add stdint, needed when defining
--- a/lib/filevercmp.c
+++ b/lib/filevercmp.c
@@ -1,7 +1,7 @@
 /*
    Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
    Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
-   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 <limits.h>
 
 /* 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 @@
       if (read_alpha)
         {
           read_alpha = false;
-          if (!c_isalpha (**str))
+          if (!c_isalpha (**str) && '~' != **str)
             match = NULL;
         }
       else if ('.' == **str)
@@ -49,7 +49,7 @@
           if (!match)
             match = *str;
         }
-      else if (!c_isalnum (**str))
+      else if (!c_isalnum (**str) && '~' != **str)
         match = NULL;
       (*str)++;
     }
--- a/lib/filevercmp.h
+++ b/lib/filevercmp.h
@@ -1,7 +1,7 @@
 /*
    Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
    Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
-   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.
 
--- 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 @@
   ".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",