strverscmp

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
STRVERSCMP(3)		  Linux Programmer’s Manual		STRVERSCMP(3)



NAME
       strverscmp - compare two version strings

SYNOPSIS
       #define _GNU_SOURCE
       #include <string.h>

       int strverscmp(const char *s1, const char *s2);

DESCRIPTION
       Often  one  has	files jan1, jan2, ..., jan9, jan10, ...	 and it feels
       wrong when ls orders them jan1, jan10, ..., jan2, ..., jan9.  In order
       to  rectify  this,  GNU	introduced  the	 -v option to ls(1), which is
       implemented using versionsort(3), which again uses strverscmp.

       Thus, the task of strverscmp is to compare two strings  and  find  the
       "right"	order,	while strcmp only finds the lexicographic order. This
       function does not use the locale	 category  LC_COLLATE,	so  is	meant
       mostly for situations where the strings are expected to be in ASCII.

       What  this function does is the following.  If both strings are equal,
       return 0. Otherwise find the position between two bytes with the prop-
       erty  that  before  it both strings are equal, while directly after it
       there is a difference.  Find the	 largest  consecutive  digit  strings
       containing  (or	starting  at,  or ending at) this position. If one or
       both of these is empty, then return what strcmp	would  have  returned
       (numerical  ordering  of	 byte values).	Otherwise, compare both digit
       strings numerically, where digit strings	 with  one  or	more  leading
       zeroes  are  interpreted	 as if they have a decimal point in front (so
       that in particular digit strings with more leading zeroes come  before
       digit  strings with fewer leading zeroes).  Thus, the ordering is 000,
       00, 01, 010, 09, 0, 1, 9, 10.

RETURN VALUE
       The strverscmp() function returns an integer less than, equal  to,  or
       greater	than  zero  if s1 is found, respectively, to be earlier than,
       equal to, or later than s2.

CONFORMING TO
       This function is a GNU extension.

SEE ALSO
       rename(1), strcasecmp(3), strcmp(3), strcoll(3)



GNU				  2001-12-19			STRVERSCMP(3)