r19998 by avox - #12973 part1: fix ttc font embedding

scribus-commit scribus-commit at lists.scribus.net
Sun Apr 12 15:46:54 UTC 2015


Author: avox
Date: Sun Apr 12 15:46:54 2015
New Revision: 19998

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=19998
Log:
#12973 part1: fix ttc font embedding

Modified:
    trunk/Scribus/scribus/fonts/scface_ttf.cpp

Modified: trunk/Scribus/scribus/fonts/scface_ttf.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=19998&path=/trunk/Scribus/scribus/fonts/scface_ttf.cpp
==============================================================================
--- trunk/Scribus/scribus/fonts/scface_ttf.cpp (original)
+++ trunk/Scribus/scribus/fonts/scface_ttf.cpp Sun Apr 12 15:46:54 2015
@@ -457,6 +457,14 @@
 	const unsigned char * pp = reinterpret_cast<const unsigned char*>(bb.data()) + pos;
 	return pp[0] << 24 | pp[1] << 16 | pp[2] << 8 | pp[3];
 }
+void putWord(QByteArray & bb, uint pos, uint val)
+{
+    unsigned char * pp = reinterpret_cast<unsigned char*>(bb.data()) + pos;
+    *pp++ = (val >> 24) & 0xFF;
+    *pp++ = (val >> 16) & 0xFF;
+    *pp++ = (val >> 8) & 0xFF;
+    *pp++ = (val) & 0xFF;
+}
 uint word16(QByteArray const & bb, uint pos) 
 {
 	const unsigned char * pp = reinterpret_cast<const unsigned char*>(bb.data()) + pos;
@@ -614,7 +622,8 @@
 			if (!copy(bb, pos, coll, tableStart, tableSize)) break;
 			// write new offset to table entry
 			sDebug(QObject::tr("memcpy offset: %1 %2 %3").arg(OFFSET_TABLE_LEN + TDIR_ENTRY_LEN*i + 8).arg(pos).arg(4));
-			memcpy(bb.data() + OFFSET_TABLE_LEN + TDIR_ENTRY_LEN * i + 8, &pos, 4);
+			// buggy: not endian aware: memcpy(bb.data() + OFFSET_TABLE_LEN + TDIR_ENTRY_LEN * i + 8, &pos, 4);
+		        putWord(bb, OFFSET_TABLE_LEN + TDIR_ENTRY_LEN * i + 8, pos);
 			pos += tableSize;
 			// pad
 			while ((pos & 3) != 0)




More information about the scribus-commit mailing list