QDataStream::QDataStream( QIODevice *d ) { if ( systemWordSize == 0 ) // get system features qSysInfo( &systemWordSize, &systemBigEndian ); dev = d; // set device owndev = FALSE; byteorder = BigEndian; // default byte order printable = FALSE; noswap = systemBigEndian; }
QDataStream::QDataStream() { if ( systemWordSize == 0 ) // get system features qSysInfo( &systemWordSize, &systemBigEndian ); dev = 0; // no device set owndev = FALSE; byteorder = BigEndian; // default byte order printable = FALSE; ver = DefaultStreamVersion; noswap = systemBigEndian; }
QDataStream::QDataStream( QByteArray a, int mode ) { if ( systemWordSize == 0 ) // get system features qSysInfo( &systemWordSize, &systemBigEndian ); dev = new QBuffer( a ); // create device ((QBuffer *)dev)->open( mode ); // open device owndev = TRUE; byteorder = BigEndian; // default byte order printable = FALSE; noswap = systemBigEndian; }
QDataStream::QDataStream( const QByteArray &a ) // Qt5 compat { if ( systemWordSize == 0 ) // get system features qSysInfo( &systemWordSize, &systemBigEndian ); dev = new QBuffer( a ); // create device ((QBuffer *)dev)->open( IO_ReadOnly ); // open device owndev = TRUE; byteorder = BigEndian; // default byte order printable = FALSE; ver = DefaultStreamVersion; noswap = systemBigEndian; }
/** No descriptions */ bool MoTranslator::loadMoFile(QString filename,const char* context) { int max_len = 0; int word_size; bool big_endian; char* orig_string = 0; char* trans_string; Q_UINT32 magic_number; qint32 file_revision; qint32 string_number; qint32 original_offset; qint32 translation_offset; QFile mofile(filename); if(!qSysInfo(&word_size,&big_endian)) return false; if(mofile.open(IO_ReadOnly) == false) return false; QDataStream ds(&mofile); //read magic number ds >> magic_number; if(magic_number == 0xde120495) { //The file has been saved in reversed byte order in comparison //to this machine. //If this machines byte order is big endian, than the files //byte order is little endian and vice versa. qDebug("Reverse mo file byte order."); if(big_endian == true) { ds.setByteOrder(QDataStream::BigEndian); } else { ds.setByteOrder(QDataStream::LittleEndian); } } else if(magic_number != 0x950412de) { //wrong file format mofile.close(); qDebug("mo file has wrong magic number."); return false; } //read file revision ds >> file_revision; if(file_revision != 0) { //wrong file format mofile.close(); qDebug("Wrong mo file revision."); return false; } //read number of strings ds >> string_number; //read offset to original strings ds >> original_offset; //read offset to translation strings ds >> translation_offset; //We do not use the hash table; in fact, a mo file isn't required to contain a hash //table at all. qDebug("string number: %u",string_number); qDebug("orig offset: %u",original_offset); qDebug("trans offset: %u",translation_offset); QVector<qint32> orig_table(string_number*2); QVector<qint32> trans_table(string_number*2); //read original table if(ds.device()->at(original_offset)) { for(qint32 i=0;i<string_number;i++) { ds >> orig_table[i*2]; ds >> orig_table[i*2+1]; if(orig_table[i*2] > max_len) max_len = orig_table[i*2]; } } //read translation table if(ds.device()->at(translation_offset)) { for(qint32 i=0;i<string_number;i++) { ds >> trans_table[i*2]; ds >> trans_table[i*2+1]; if(trans_table[i*2] > max_len) max_len = trans_table[i*2]; } } QString trans; orig_string = new char [max_len+10]; trans_string = new char [max_len+10]; for(int i=0;i<string_number;i++) { if(ds.device()->at(orig_table[i*2+1])) { ds.readRawBytes(orig_string,orig_table[i*2]+1); qDebug("orig: %s",orig_string); } if(ds.device()->at(trans_table[i*2+1])) { ds.readRawBytes(trans_string,trans_table[i*2]+1); trans = QString::fromUtf8(trans_string); qDebug("trans: %s",trans.latin1()); } QTranslatorMessage tm(context,orig_string,0,trans); insert(tm); } delete [] orig_string; delete [] trans_string; mofile.close(); squeeze(Stripped); return true; }