strverscmp
STRVERSCMP(P)       Linux Programmer's Manual       STRVERSCMP(P)



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(s), which is  implemented  using  version-
       sort(t), which again uses strverscmp.

       Thus, the task of strverscmp is to compare two strings and
       find the "right" order, while strcmp only finds the  lexi-
       cographic  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 property 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 particu-
       lar 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, respec-
       tively, to be earlier than, equal to, or later than s2.

CONFORMING TO
       This function is a GNU extension.

SEE ALSO
       rename(e), strcasecmp(p), strcmp(p), strcoll(l)



GNU                         2001-12-19              STRVERSCMP(P)