From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.1 To: Ivan Zakharyaschev References: <20200129012150.83E7E8440710@gitery.altlinux.org> <45228f59-3529-a3ee-7eb7-67eac012ffda@altlinux.org> From: Aleksei Nikiforov Message-ID: <5e9b34ca-ea2e-73e1-bbdb-d5ef12c610fa@altlinux.org> Date: Thu, 30 Jan 2020 12:30:41 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: ru Content-Transfer-Encoding: 8bit Cc: Anton Farygin , ALT Linux Team development discussions , "Vladimir D. Seleznev" Subject: Re: [devel] [SCM] packages/apt: heads/rework-dynamic-mmap X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Jan 2020 09:30:44 -0000 Archived-At: List-Archive: List-Post: 29.01.2020 19:32, Ivan Zakharyaschev пишет: > > On Wed, 29 Jan 2020, Ivan Zakharyaschev wrote: > >> On Wed, 29 Jan 2020, Aleksei Nikiforov wrote: > >>> Вот второй фрагмент изменений под вопросом: >>> >>>> @@ -544,18 +562,24 @@ bool >>> pkgCacheGenerator::ListParser::NewProvides(pkgCache::VerIterator &Ver, >>>> #endif >>>> >>>> // Get a structure >>>> - unsigned long Provides = >>> Owner->AllocateInMap(sizeof(pkgCache::Provides)); >>>> - if (Provides == 0) >>>> + const auto Provides = >>> Owner->AllocateInMap(sizeof(pkgCache::Provides)); >>>> + const auto idxVersion = Version.empty() >>>> + ? std::experimental::optional() >>>> + : WriteString(Version); >>>> + if (!Provides || (!Version.empty() && !idxVersion)) >>>> return false; >>>> Cache.HeaderP->ProvidesCount++; >>>> >>>> // Fill it in >>>> - pkgCache::PrvIterator Prv(Cache,Cache.ProvideP + >>> Provides,Cache.PkgP); >>>> + pkgCache::PrvIterator Prv(Cache,Cache.ProvideP + >>> *Provides,Cache.PkgP); >>>> Prv->Version = Ver.Index(); >>>> Prv->NextPkgProv = Ver->ProvidesList; >>>> Ver->ProvidesList = Prv.Index(); >>>> - if (Version.empty() == false && (Prv->ProvideVersion = >>> WriteString(Version)) == 0) >>>> - return false; >>>> + >>>> + if (Version.empty() == false) >>>> + { >>>> + Prv->ProvideVersion = *idxVersion; >>>> + } >>>> >>>> // Locate the target package >>>> pkgCache::PkgIterator Pkg; > > У меня возник вопрос: а в случае, если Version.empty() истинно, нужно ли > как-то заполнять Prv->ProvideVersion специально? > > Раньше (то, что минусами отмечено) в таком случае Prv->ProvideVersion > никак не трогали (потому что происходил shortcut в вычислении &&). > Сложно ответить на этот вопрос, но на всякий случай выставлять особое значение "ноль" думаю повредить не должно. С уважением, Алексей Никифоров