]> git.saurik.com Git - apt.git/commitdiff
stop depending on copy-on-write for std::string
authorDavid Kalnischkies <david@kalnischkies.de>
Sat, 9 May 2015 13:37:23 +0000 (15:37 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 11 May 2015 15:22:32 +0000 (17:22 +0200)
In 66c3875df391b1120b43831efcbe88a78569fbfe 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.

apt-pkg/deb/debindexfile.cc
apt-pkg/deb/debindexfile.h

index 49c6e8cc0a3e46fb2b56f99f8f5ca05408d86cef..d672b4fd86afa7dd59c8aeeaf711c03256860cf6 100644 (file)
@@ -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)
index 81914f2039a642f96ad3bc2c4e2d2baf7d53acf6..1e5882071fd0c67b505470147bb2d735458e66b1 100644 (file)
@@ -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();
 };