public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in media-libs/taglib/files: taglib-1.9.1-missing-deletes.patch taglib-1.9.1-bytevector-simpler.patch taglib-1.9.1-order-big-endian.patch taglib-1.9.1-abi-breakage.patch
@ 2014-07-07 12:43 Pacho Ramos (pacho)
  0 siblings, 0 replies; only message in thread
From: Pacho Ramos (pacho) @ 2014-07-07 12:43 UTC (permalink / raw
  To: gentoo-commits

pacho       14/07/07 12:43:45

  Added:                taglib-1.9.1-missing-deletes.patch
                        taglib-1.9.1-bytevector-simpler.patch
                        taglib-1.9.1-order-big-endian.patch
                        taglib-1.9.1-abi-breakage.patch
  Log:
  Apply some upstream patches fixing important bugs like an accidental ABI breakage (#516342#c1 by CT)
  
  (Portage version: 2.2.10/cvs/Linux x86_64, signed Manifest commit with key A188FBD4)

Revision  Changes    Path
1.1                  media-libs/taglib/files/taglib-1.9.1-missing-deletes.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-missing-deletes.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-missing-deletes.patch?rev=1.1&content-type=text/plain

Index: taglib-1.9.1-missing-deletes.patch
===================================================================
From c14a3b5c3d0831f7c113d0cf95840c4671d9ebd4 Mon Sep 17 00:00:00 2001
From: Tsuda Kageyu <tsuda.kageyu@gmail.com>
Date: Tue, 13 May 2014 20:07:02 +0900
Subject: [PATCH] Added some missing deletes to test_flac.cpp.

---
 tests/test_flac.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tests/test_flac.cpp b/tests/test_flac.cpp
index caec715..364fb11 100644
--- a/tests/test_flac.cpp
+++ b/tests/test_flac.cpp
@@ -91,6 +91,7 @@ public:
     newpic->setData("JPEG data");
     f->addPicture(newpic);
     f->save();
+    delete f;
 
     f = new FLAC::File(newname.c_str());
     lst = f->pictureList();
@@ -138,6 +139,7 @@ public:
     f->removePictures();
     f->addPicture(newpic);
     f->save();
+    delete f;
 
     f = new FLAC::File(newname.c_str());
     lst = f->pictureList();
@@ -165,6 +167,7 @@ public:
 
     f->removePictures();
     f->save();
+    delete f;
 
     f = new FLAC::File(newname.c_str());
     lst = f->pictureList();
@@ -185,6 +188,7 @@ public:
     tag->setTitle("NEW TITLE 2");
     f->save();
     CPPUNIT_ASSERT_EQUAL(String("NEW TITLE 2"), tag->title());
+    delete f;
 
     f = new FLAC::File(newname.c_str());
     tag = f->tag();
-- 
1.9.0




1.1                  media-libs/taglib/files/taglib-1.9.1-bytevector-simpler.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-bytevector-simpler.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-bytevector-simpler.patch?rev=1.1&content-type=text/plain

Index: taglib-1.9.1-bytevector-simpler.patch
===================================================================
From 4a7d31c87bf41c1de21cb725176d5b34c2a95720 Mon Sep 17 00:00:00 2001
From: Tsuda Kageyu <tsuda.kageyu@gmail.com>
Date: Thu, 14 Nov 2013 14:05:32 +0900
Subject: [PATCH 3/6] Rewrote ByteVector::replace() simpler

---
 taglib/toolkit/tbytevector.cpp | 77 +++++++++++++++---------------------------
 tests/test_bytevector.cpp      |  5 +++
 2 files changed, 33 insertions(+), 49 deletions(-)

diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp
index b658246..566a20f 100644
--- a/taglib/toolkit/tbytevector.cpp
+++ b/taglib/toolkit/tbytevector.cpp
@@ -31,6 +31,7 @@
 #include <iostream>
 #include <cstdio>
 #include <cstring>
+#include <cstddef>
 
 #include <tstring.h>
 #include <tdebug.h>
@@ -508,62 +509,40 @@ ByteVector &ByteVector::replace(const ByteVector &pattern, const ByteVector &wit
   if(pattern.size() == 0 || pattern.size() > size())
     return *this;
 
-  const uint withSize = with.size();
-  const uint patternSize = pattern.size();
-  int offset = 0;
+  const size_t withSize    = with.size();
+  const size_t patternSize = pattern.size();
+  const ptrdiff_t diff = withSize - patternSize;
+  
+  size_t offset = 0;
+  while (true)
+  {
+    offset = find(pattern, offset);
+    if(offset == static_cast<size_t>(-1)) // Use npos in taglib2.
+      break;
 
-  if(withSize == patternSize) {
-    // I think this case might be common enough to optimize it
     detach();
-    offset = find(pattern);
-    while(offset >= 0) {
-      ::memcpy(data() + offset, with.data(), withSize);
-      offset = find(pattern, offset + withSize);
-    }
-    return *this;
-  }
 
-  // calculate new size:
-  uint newSize = 0;
-  for(;;) {
-    int next = find(pattern, offset);
-    if(next < 0) {
-      if(offset == 0)
-        // pattern not found, do nothing:
-        return *this;
-      newSize += size() - offset;
-      break;
+    if(diff < 0) {
+      ::memmove(
+        data() + offset + withSize, 
+        data() + offset + patternSize, 
+        size() - offset - patternSize);
+      resize(size() + diff);
     }
-    newSize += (next - offset) + withSize;
-    offset = next + patternSize;
-  }
-
-  // new private data of appropriate size:
-  ByteVectorPrivate *newData = new ByteVectorPrivate(newSize, 0);
-  char *target = DATA(newData);
-  const char *source = data();
-
-  // copy modified data into new private data:
-  offset = 0;
-  for(;;) {
-    int next = find(pattern, offset);
-    if(next < 0) {
-      ::memcpy(target, source + offset, size() - offset);
-      break;
+    else if(diff > 0) {
+      resize(size() + diff);
+      ::memmove(
+        data() + offset + withSize, 
+        data() + offset + patternSize, 
+        size() - diff - offset - patternSize);
     }
-    int chunkSize = next - offset;
-    ::memcpy(target, source + offset, chunkSize);
-    target += chunkSize;
-    ::memcpy(target, with.data(), withSize);
-    target += withSize;
-    offset += chunkSize + patternSize;
-  }
 
-  // replace private data:
-  if(d->deref())
-    delete d;
+    ::memcpy(data() + offset, with.data(), with.size());
 
-  d = newData;
+    offset += withSize;
+    if(offset > size() - patternSize)
+      break;
+  }
 
   return *this;
 }
diff --git a/tests/test_bytevector.cpp b/tests/test_bytevector.cpp
index 9efd23a..eca74f8 100644
--- a/tests/test_bytevector.cpp
+++ b/tests/test_bytevector.cpp
@@ -239,6 +239,11 @@ public:
       a.replace(ByteVector("ab"), ByteVector());
       CPPUNIT_ASSERT_EQUAL(ByteVector("cdf"), a);
     }
+    {
+      ByteVector a("abcdabf");
+      a.replace(ByteVector("bf"), ByteVector("x"));
+      CPPUNIT_ASSERT_EQUAL(ByteVector("abcdax"), a);
+    }
   }
 
 };
-- 
1.8.4.2




1.1                  media-libs/taglib/files/taglib-1.9.1-order-big-endian.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-order-big-endian.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-order-big-endian.patch?rev=1.1&content-type=text/plain

Index: taglib-1.9.1-order-big-endian.patch
===================================================================
From db3e961d1098d5efe57364f540f68a5996dc83c2 Mon Sep 17 00:00:00 2001
From: Tsuda Kageyu <tsuda.kageyu@gmail.com>
Date: Tue, 13 May 2014 18:22:16 +0900
Subject: [PATCH] Fixed a wrong byte order handling on big-endian machines.

---
 taglib/toolkit/tstring.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/taglib/toolkit/tstring.cpp b/taglib/toolkit/tstring.cpp
index 603455a..1ec083b 100644
--- a/taglib/toolkit/tstring.cpp
+++ b/taglib/toolkit/tstring.cpp
@@ -47,10 +47,14 @@
 
 namespace 
 {
-
   inline unsigned short combine(unsigned char c1, unsigned char c2)
   {
-    return (c1 << 8) | c2;
+    using namespace TagLib::Utils;
+
+    if(SystemByteOrder == LittleEndian)
+      return (c1 << 8) | c2;
+    else
+      return (c2 << 8) | c1;
   }
 
   void UTF16toUTF8(const wchar_t *src, size_t srcLength, char *dst, size_t dstLength)
-- 
1.9.0




1.1                  media-libs/taglib/files/taglib-1.9.1-abi-breakage.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-abi-breakage.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/taglib/files/taglib-1.9.1-abi-breakage.patch?rev=1.1&content-type=text/plain

Index: taglib-1.9.1-abi-breakage.patch
===================================================================
From 3bf30af66c8fd77a88d9379a0956ddb2fc70dc20 Mon Sep 17 00:00:00 2001
From: Tsuda Kageyu <tsuda.kageyu@gmail.com>
Date: Wed, 6 Nov 2013 17:01:21 +0900
Subject: [PATCH 2/6] Fixed ABI breakage in TagLib::String

---
 taglib/toolkit/tstring.cpp | 20 ++++++++++++++++++--
 taglib/toolkit/tstring.h   | 12 ++++++++++--
 tests/test_string.cpp      | 14 ++++++++++++++
 3 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/taglib/toolkit/tstring.cpp b/taglib/toolkit/tstring.cpp
index 75a9833..fb6e947 100644
--- a/taglib/toolkit/tstring.cpp
+++ b/taglib/toolkit/tstring.cpp
@@ -209,8 +209,16 @@ String::String(const std::string &s, Type t)
 String::String(const wstring &s, Type t)
   : d(new StringPrivate())
 {
-  if(t == UTF16 || t == UTF16BE || t == UTF16LE)
+  if(t == UTF16 || t == UTF16BE || t == UTF16LE) {
+    // This looks ugly but needed for the compatibility with TagLib1.8. 
+    // Should be removed in TabLib2.0.
+    if (t == UTF16BE)
+      t = WCharByteOrder;
+    else if (t == UTF16LE)
+      t = (WCharByteOrder == UTF16LE ? UTF16BE : UTF16LE);
+
     copyFromUTF16(s.c_str(), s.length(), t);
+  }
   else {
     debug("String::String() -- A TagLib::wstring should not contain Latin1 or UTF-8.");
   }
@@ -219,8 +227,16 @@ String::String(const wstring &s, Type t)
 String::String(const wchar_t *s, Type t)
   : d(new StringPrivate())
 {
-  if(t == UTF16 || t == UTF16BE || t == UTF16LE)
+  if(t == UTF16 || t == UTF16BE || t == UTF16LE) {
+    // This looks ugly but needed for the compatibility with TagLib1.8. 
+    // Should be removed in TabLib2.0.
+    if (t == UTF16BE)
+      t = WCharByteOrder;
+    else if (t == UTF16LE)
+      t = (WCharByteOrder == UTF16LE ? UTF16BE : UTF16LE);
+
     copyFromUTF16(s, ::wcslen(s), t);
+  }
   else {
     debug("String::String() -- A const wchar_t * should not contain Latin1 or UTF-8.");
   }
diff --git a/taglib/toolkit/tstring.h b/taglib/toolkit/tstring.h
index 57945be..605b9c2 100644
--- a/taglib/toolkit/tstring.h
+++ b/taglib/toolkit/tstring.h
@@ -134,13 +134,21 @@ namespace TagLib {
 
     /*!
      * Makes a deep copy of the data in \a s.
+     *
+     * /note If \a t is UTF16LE, the byte order of \a s will be swapped regardless 
+     * of the CPU byte order.  If UTF16BE, it will not be swapped.  This behavior
+     * will be changed in TagLib2.0.
      */
-    String(const wstring &s, Type t = WCharByteOrder);
+    String(const wstring &s, Type t = UTF16BE);
 
     /*!
      * Makes a deep copy of the data in \a s.
+     *
+     * /note If \a t is UTF16LE, the byte order of \a s will be swapped regardless 
+     * of the CPU byte order.  If UTF16BE, it will not be swapped.  This behavior
+     * will be changed in TagLib2.0.
      */
-    String(const wchar_t *s, Type t = WCharByteOrder);
+    String(const wchar_t *s, Type t = UTF16BE);
 
     /*!
      * Makes a deep copy of the data in \a c.
diff --git a/tests/test_string.cpp b/tests/test_string.cpp
index a815a0b..9a574b3 100644
--- a/tests/test_string.cpp
+++ b/tests/test_string.cpp
@@ -75,6 +75,20 @@ public:
 	String unicode3(L"\u65E5\u672C\u8A9E");
 	CPPUNIT_ASSERT(*(unicode3.toCWString() + 1) == L'\u672C');
 
+    String unicode4(L"\u65e5\u672c\u8a9e", String::UTF16BE);
+    CPPUNIT_ASSERT(unicode4[1] == L'\u672c');
+
+    String unicode5(L"\u65e5\u672c\u8a9e", String::UTF16LE);
+    CPPUNIT_ASSERT(unicode5[1] == L'\u2c67');
+
+    wstring stduni = L"\u65e5\u672c\u8a9e";
+
+    String unicode6(stduni, String::UTF16BE);
+    CPPUNIT_ASSERT(unicode6[1] == L'\u672c');
+
+    String unicode7(stduni, String::UTF16LE);
+    CPPUNIT_ASSERT(unicode7[1] == L'\u2c67');
+
     CPPUNIT_ASSERT(strcmp(String::number(0).toCString(), "0") == 0);
     CPPUNIT_ASSERT(strcmp(String::number(12345678).toCString(), "12345678") == 0);
     CPPUNIT_ASSERT(strcmp(String::number(-12345678).toCString(), "-12345678") == 0);
-- 
1.8.4.2






^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2014-07-07 12:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-07 12:43 [gentoo-commits] gentoo-x86 commit in media-libs/taglib/files: taglib-1.9.1-missing-deletes.patch taglib-1.9.1-bytevector-simpler.patch taglib-1.9.1-order-big-endian.patch taglib-1.9.1-abi-breakage.patch Pacho Ramos (pacho)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox