On Thu, Mar 30, 2006 at 02:46:29PM +0400, Stanislav Ievlev wrote:
> +++++++++++++ versionmatch.cc
> // CNC:2003-11-05 - Patch by ALT-Linux, which ignores the release
> // if it was not provided, and the epoch.
> string s(A), sc(A);
> const char *Ab = s.c_str(), *Ac = sc.c_str();
>
> for (string::iterator i = s.begin(), k = sc.begin(); i != s.end(); ++i,++k)
> {
> if (*i == ':')
> {
> Ab = &(*i) + 1;
> Ac = &(*k) + 1;
> }
> else if (*i == '-')
> {
> *i = 0;
> break;
> }
> }
> +++++++++++++
> Опять опасные игры с c_str(), компилятор может запросто выделить один и тот
> же статический буфер и под Ab, и под Ac, в результате последующие хаки на
> самом деле будут корёжить один и тот же буфер. Если требуется временный буфер
> для char*, то надо использовать vector, а не string.
Жуть. Я не понимаю с первого взгляда что делает этот код.
> ++++++++++++ pkgcache.cc
> pkgCache::Version **pkgCache::DepIterator::AllTargets()
> ++++++++++++
> Уникальный по производительности код (кажется voins уже находил его)
> Сначала бегаем два раза по циклам только для того чтобы вычислить
> какой же размер нужен нам для списка.
> потом ещё раз бегаем два раза по тем же циклам, но уже заполняем-таки
> результирующий список значениями.
Наверное, надо соптимизировать.
> ++++++++++++ rpm/rpmindexfile.cc
> string rpmSinglePkgIndex::ArchiveURI(string File) const
> {
> char *cwd = getcwd(NULL,0);
> .....
> free(cwd);
> }
> ++++++++++++
> Из документации:
> --
> If buf is NULL, the behaviour of getcwd() is undefined.
Ты не дочитал документацию.
The GNU library version of this function also permits you to specify a
null pointer for the BUFFER argument.
> --
> Аналогичный код в string rpmSingleSrcIndex::ArchiveURI(string File) const
> +++++++++++++ rpm/rpmlistparser.cc
> char **strings = NULL;
>
> res = headerGetEntry(header, *sec, &type, (void **)&strings, &count);
> .....
>
> +++++++++++++
> Дима, наверное тебе стоит пересмотреть этот кусок, кажется тут теряется
> память, аналогично в bool rpmListParser::ParseDepends(pkgCache::VerIterator
> Ver, unsigned int Type)
> Там как-то странно делается освобождение.
Освобождение памяти отсутствует совсем, упоминаний headerFreeData нет.
--
ldv
pgpVnRGmCF0Yj.pgp
Description: PGP signature
_______________________________________________ Devel-conf mailing list [email protected] https://lists.altlinux.org/mailman/listinfo/devel-conf
