[devel] [git update] packages/apt: heads/master

Slava Semushin =?iso-8859-1?q?slava=2Esemushin_=CE=C1_gmail=2Ecom?=
Вт Дек 18 11:34:58 MSK 2007


2007/12/18, Dmitry V. Levin <ldv / altlinux.org>:
> Update of /people/ldv/packages/apt.git
[...]
> +--- a/apt/apt-pkg/algorithms.cc
> ++++ b/apt/apt-pkg/algorithms.cc
[...]
> ++/* Like strcmp, but compares digit sections by number value.
> ++ * E.g.: tar-1.10 > tar-1.9 > tar-1.1a
> ++ * (while strcmp gives tar-1.10 < tar-1.9). */
> ++static int nameCompare(const char* n1, const char* n2)
> ++{
> ++   while(*n1 && *n2) {
> ++      if(isdigit(*n1) && isdigit(*n2)) {
> ++       unsigned long long i1, i2;
> ++       i1 = strtoull(n1, const_cast<char **>(&n1), 10);
> ++       i2 = strtoull(n2, const_cast<char **>(&n2), 10);
> ++       if(i1 != i2)
> ++          return (i1 > i2) ? 1 : -1;
> ++      } else if(*n1 != *n2) {
> ++       return (*n1 > *n2) ? 1 : -1;
> ++      } else {
> ++       n1++;
> ++       n2++;
> ++      }
> ++   }
> ++   return 0;
> ++}
[...]

Почему бы не использовать  strverscmp() для этих целей? Оно, правда,
GNU extenstion, но портабельность, как понимаю, для нас не критична.
Зато она более стандартна, чем самописный nameCompare() и лучше
документирована.


-- 
+ Slava Semushin | slava.semushin @ gmail.com
+ ALT Linux Team | php-coder @ altlinux.ru


Подробная информация о списке рассылки Devel