Browse Source

stop depending on copy-on-write for std::string

In 66c3875df3 we workaround/fixed a
problem where the code makes the assumption that the compiler uses
copy-on-write implementations for std::string. Turns out that for c++11
compatibility gcc >= 5 will stop doing this by default.
debian/1.8.y
David Kalnischkies 7 years ago
parent
commit
d38926efe1
  1. 24
      apt-pkg/deb/debindexfile.cc
  2. 18
      apt-pkg/deb/debindexfile.h

24
apt-pkg/deb/debindexfile.cc

@ -413,8 +413,8 @@ pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const
// TranslationsIndex::debTranslationsIndex - Contructor /*{{{*/
// ---------------------------------------------------------------------
/* */
debTranslationsIndex::debTranslationsIndex(string URI,string Dist,string Section,
char const * const Translation) :
debTranslationsIndex::debTranslationsIndex(std::string const &URI, std::string const &Dist,
std::string const &Section, std::string const &Translation) :
pkgIndexFile(true), URI(URI), Dist(Dist), Section(Section),
Language(Translation)
{}
@ -458,13 +458,13 @@ string debTranslationsIndex::IndexURI(const char *Type) const
/* This should help the user find the index in the sources.list and
in the filesystem for problem solving */
string debTranslationsIndex::Describe(bool Short) const
{
char S[300];
{
std::string S;
if (Short == true)
snprintf(S,sizeof(S),"%s",Info(TranslationFile().c_str()).c_str());
strprintf(S,"%s",Info(TranslationFile().c_str()).c_str());
else
snprintf(S,sizeof(S),"%s (%s)",Info(TranslationFile().c_str()).c_str(),
IndexFile(Language).c_str());
strprintf(S,"%s (%s)",Info(TranslationFile().c_str()).c_str(),
IndexFile(Language.c_str()).c_str());
return S;
}
/*}}}*/
@ -488,7 +488,7 @@ string debTranslationsIndex::Info(const char *Type) const
/*}}}*/
bool debTranslationsIndex::HasPackages() const /*{{{*/
{
return FileExists(IndexFile(Language));
return FileExists(IndexFile(Language.c_str()));
}
/*}}}*/
// TranslationsIndex::Exists - Check if the index is available /*{{{*/
@ -496,7 +496,7 @@ bool debTranslationsIndex::HasPackages() const /*{{{*/
/* */
bool debTranslationsIndex::Exists() const
{
return FileExists(IndexFile(Language));
return FileExists(IndexFile(Language.c_str()));
}
/*}}}*/
// TranslationsIndex::Size - Return the size of the index /*{{{*/
@ -509,7 +509,7 @@ unsigned long debTranslationsIndex::Size() const
/* we need to ignore errors here; if the lists are absent, just return 0 */
_error->PushToStack();
FileFd f(IndexFile(Language), FileFd::ReadOnly, FileFd::Extension);
FileFd f(IndexFile(Language.c_str()), FileFd::ReadOnly, FileFd::Extension);
if (!f.Failed())
size = f.Size();
@ -526,7 +526,7 @@ unsigned long debTranslationsIndex::Size() const
bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
{
// Check the translation file, if in use
string TranslationFile = IndexFile(Language);
string TranslationFile = IndexFile(Language.c_str());
if (FileExists(TranslationFile))
{
FileFd Trans(TranslationFile,FileFd::ReadOnly, FileFd::Extension);
@ -556,7 +556,7 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
/* */
pkgCache::PkgFileIterator debTranslationsIndex::FindInCache(pkgCache &Cache) const
{
string FileName = IndexFile(Language);
string FileName = IndexFile(Language.c_str());
pkgCache::PkgFileIterator File = Cache.FileBegin();
for (; File.end() == false; ++File)

18
apt-pkg/deb/debindexfile.h

@ -97,11 +97,11 @@ class APT_HIDDEN debTranslationsIndex : public pkgIndexFile
/** \brief dpointer placeholder (for later in case we need it) */
void *d;
std::string URI;
std::string Dist;
std::string Section;
const char * const Language;
std::string const URI;
std::string const Dist;
std::string const Section;
std::string const Language;
APT_HIDDEN std::string Info(const char *Type) const;
APT_HIDDEN std::string IndexFile(const char *Type) const;
APT_HIDDEN std::string IndexURI(const char *Type) const;
@ -109,12 +109,12 @@ class APT_HIDDEN debTranslationsIndex : public pkgIndexFile
APT_HIDDEN std::string TranslationFile() const {return std::string("Translation-").append(Language);};
public:
virtual const Type *GetType() const APT_CONST;
// Interface for acquire
virtual std::string Describe(bool Short) const;
virtual std::string Describe(bool Short) const;
// Interface for the Cache Generator
virtual bool Exists() const;
virtual bool HasPackages() const;
@ -122,7 +122,7 @@ class APT_HIDDEN debTranslationsIndex : public pkgIndexFile
virtual bool Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const;
virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
debTranslationsIndex(std::string URI,std::string Dist,std::string Section, char const * const Language);
debTranslationsIndex(std::string const &URI,std::string const &Dist,std::string const &Section, std::string const &Language);
virtual ~debTranslationsIndex();
};

Loading…
Cancel
Save