[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:42:36 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=72bdc99

The following commit has been merged in the master branch:
commit 72bdc994f08be8095b244bf409192f4997eeab7a
Author: vog <vog at notjusthosting.com>
Date:   Mon Jul 18 15:24:35 2011 +0000

    Added helper function decodeHex() that is needed to decode some types of EPS previews
---
 src/preview.cpp | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/preview.cpp b/src/preview.cpp
index 40e9e73..aa289fe 100644
--- a/src/preview.cpp
+++ b/src/preview.cpp
@@ -68,6 +68,11 @@ namespace {
     }
 
     /*!
+      @brief Decode a Hex string.
+     */
+    DataBuf decodeHex(const byte *src, long srcSize);
+
+    /*!
       @brief Decode a Base64 string.
      */
     DataBuf decodeBase64(const std::string &src);
@@ -865,6 +870,40 @@ namespace {
         return valid();
     }
 
+    DataBuf decodeHex(const byte *src, long srcSize)
+    {
+        // create decoding table
+        byte invalid = 16;
+        byte decodeHexTable[256];
+        for (long i = 0; i < 256; i++) decodeHexTable[i] = invalid;
+        for (byte i = 0; i < 10; i++) decodeHexTable[static_cast<byte>('0') + i] = i;
+        for (byte i = 0; i < 6; i++) decodeHexTable[static_cast<byte>('A') + i] = i + 10;
+        for (byte i = 0; i < 6; i++) decodeHexTable[static_cast<byte>('a') + i] = i + 10;
+
+        // calculate dest size
+        long validSrcSize = 0;
+        for (long srcPos = 0; srcPos < srcSize; srcPos++) {
+            if (decodeHexTable[src[srcPos]] != invalid) validSrcSize++;
+        }
+        const long destSize = validSrcSize / 2;
+
+        // allocate dest buffer
+        DataBuf dest(destSize);
+
+        // decode
+        for (long srcPos = 0, destPos = 0; destPos < destSize; destPos++) {
+            byte buffer = 0;
+            for (int bufferPos = 1; bufferPos >= 0 && srcPos < srcSize; srcPos++) {
+                byte srcValue = decodeHexTable[src[srcPos]];
+                if (srcValue == invalid) continue;
+                buffer |= srcValue << (bufferPos * 4);
+                bufferPos--;
+            }
+            dest.pData_[destPos] = buffer;
+        }
+        return dest;
+    }
+
     static const char encodeBase64Table[64 + 1] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
     DataBuf decodeBase64(const std::string& src)

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list