[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