Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/corelib/codecs/qiconvcodec.cpp

    r651 r769  
    169169{
    170170    if (utf16Codec == reinterpret_cast<QTextCodec *>(~0))
    171         return QString::fromAscii(chars, len);
     171        return QString::from(chars, len);
    172172
    173173    int invalidCount = 0;
     
    208208            if (!reported++) {
    209209                fprintf(stderr,
    210                         "QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failed\n");
    211             }
    212             return QString::fromAscii(chars, len);
     210                        "QIconvCodec::convertToUnicode: using for conversion, iconv_open failed\n");
     211            }
     212            return QString::from(chars, len);
    213213        }
    214214
     
    274274            // some other error
    275275            // note, cannot use qWarning() since we are implementing the codecForLocale :)
    276             perror("QIconvCodec::convertToUnicode: using ASCII for conversion, iconv failed");
     276            perror("QIconvCodec::convertToUnicode: using for conversion, iconv failed");
    277277
    278278            if (!convState) {
     
    281281            }
    282282
    283             return QString::fromAscii(chars, len);
     283            return QString::from(chars, len);
    284284        }
    285285    } while (inBytesLeft != 0);
     
    299299
    300300Q_GLOBAL_STATIC(QThreadStorage<QIconvCodec::IconvState *>, fromUnicodeState)
     301
     302
     303
     304
     305
     306
     307
     308
     309
     310
     311
     312
     313
     314
     315
     316
     317
     318
     319
     320
     321
     322
     323
     324
     325
     326
    301327
    302328QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterState *convState) const
     
    326352    if (!state) {
    327353        state = new IconvState(QIconvCodec::createIconv_t(0, UTF16));
    328         if (state->cd != reinterpret_cast<iconv_t>(-1)) {
    329             size_t outBytesLeft = len + 3; // +3 for the BOM
    330             QByteArray ba(outBytesLeft, Qt::Uninitialized);
    331             outBytes = ba.data();
    332 
    333 #if !defined(NO_BOM)
    334             // give iconv() a BOM
    335             QChar bom[] = { QChar(QChar::ByteOrderMark) };
    336             inBytes = reinterpret_cast<char *>(bom);
    337             inBytesLeft = sizeof(bom);
    338             if (iconv(state->cd, inBytesPtr, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) {
    339                 perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM");
     354        if (state->cd == reinterpret_cast<iconv_t>(-1)) {
     355            if (!setByteOrder(state->cd)) {
     356                perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM");
    340357
    341358                iconv_close(state->cd);
    342359                state->cd = reinterpret_cast<iconv_t>(-1);
    343360
    344                 return QString(uc, len).toAscii();
    345             }
    346 #endif // NO_BOM
     361                return QString(uc, len).toLatin1();
     362            }
    347363        }
    348364    }
     
    351367        if (!reported++) {
    352368            fprintf(stderr,
    353                     "QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed\n");
    354         }
    355         return QString(uc, len).toAscii();
     369                    "QIconvCodec::convertFromUnicode: using for conversion, iconv_open failed\n");
     370        }
     371        return QString(uc, len).to();
    356372    }
    357373 
     
    410426                {
    411427                    // note, cannot use qWarning() since we are implementing the codecForLocale :)
    412                     perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed");
     428                    perror("QIconvCodec::convertFromUnicode: using for conversion, iconv failed");
    413429
    414430                    // reset to initial state
    415431                    iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
    416432
    417                     return QString(uc, len).toAscii();
     433                    return QString(uc, len).to();
    418434                }
    419435            }
     
    423439    // reset to initial state
    424440    iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
     441
    425442
    426443    ba.resize(ba.size() - outBytesLeft);
  • trunk/src/corelib/codecs/qsimplecodec.cpp

    r651 r769  
    682682    const QChar* ucp = in;
    683683    unsigned char* rp = (unsigned char *)r.data();
    684     const unsigned char* rmp = (const unsigned char *)reverseMap->data();
     684    const unsigned char* rmp = (const unsigned char *)reverseMap->ata();
    685685    int rmsize = (int) reverseMap->size();
    686686    while(i--)
  • trunk/src/corelib/codecs/qtextcodec.cpp

    r651 r769  
    8686#endif // QT_NO_CODECS
    8787#include "qlocale.h"
    88 #include "private/qmutexpool_p.h"
     88#include "qmutex.h"
     89#include "qhash.h"
    8990
    9091#include <stdlib.h>
     
    108109    (QTextCodecFactoryInterface_iid, QLatin1String("/codecs")))
    109110#endif
     111
    110112
    111113static char qtolower(register char c)
     
    179181
    180182static QList<QTextCodec*> *all = 0;
     183
    181184#ifdef Q_DEBUG_TEXTCODEC
    182185static bool destroying_is_ok = false;
     
    221224
    222225Q_GLOBAL_STATIC(QTextCodecCleanup, createQTextCodecCleanup)
     226
     227
     228
     229
     230
     231
     232
     233
     234
     235
     236
     237
     238
    223239
    224240#if defined(Q_OS_WIN32) || defined(Q_OS_WINCE)
     
    906922}
    907923
    908 
     924#ifndef QT_NO_THREAD
     925Q_GLOBAL_STATIC_WITH_ARGS(QMutex, textCodecsMutex, (QMutex::Recursive));
     926#endif
     927
     928// textCodecsMutex need to be locked to enter this function
    909929static void setup()
    910930{
    911 #ifndef QT_NO_THREAD
    912     QMutexLocker locker(QMutexPool::globalInstanceGet(&all));
    913 #endif
    914 
    915931    if (all)
    916932        return;
     933
     934
     935
     936
     937
     938
     939
     940
    917941
    918942#ifdef Q_DEBUG_TEXTCODEC
     
    11641188
    11651189/*!
    1166     \nonreentrant
    1167 
    11681190    Constructs a QTextCodec, and gives it the highest precedence. The
    11691191    QTextCodec should always be constructed on the heap (i.e. with \c
     
    11731195QTextCodec::QTextCodec()
    11741196{
     1197
     1198
     1199
    11751200    setup();
    11761201    all->prepend(this);
     
    11901215        qWarning("QTextCodec::~QTextCodec: Called by application");
    11911216#endif
    1192     if (all)
     1217    if (all) {
     1218#ifndef QT_NO_THREAD
     1219        QMutexLocker locker(textCodecsMutex());
     1220#endif
    11931221        all->removeAll(this);
     1222
     1223
    11941224}
    11951225
     
    12121242        return 0;
    12131243
     1244
     1245
     1246
    12141247    setup();
     1248
     1249
     1250
     1251
     1252
     1253
     1254
     1255
     1256
     1257
     1258
     1259
    12151260
    12161261    for (int i = 0; i < all->size(); ++i) {
    12171262        QTextCodec *cursor = all->at(i);
    1218         if (nameMatch(cursor->name(), name))
     1263        if (nameMatch(cursor->name(), name)) {
     1264            cache.insert(name, cursor);
    12191265            return cursor;
     1266
    12201267        QList<QByteArray> aliases = cursor->aliases();
    1221         for (int i = 0; i < aliases.size(); ++i)
    1222             if (nameMatch(aliases.at(i), name))
     1268        for (int y = 0; y < aliases.size(); ++y)
     1269            if (nameMatch(aliases.at(y), name)) {
     1270                cache.insert(name, cursor);
    12231271                return cursor;
    1224     }
    1225 
    1226     return createForName(name);
     1272            }
     1273    }
     1274
     1275    codec = createForName(name);
     1276    if (codec)
     1277        cache.insert(name, codec);
     1278    return codec;
    12271279}
    12281280
     
    12341286QTextCodec* QTextCodec::codecForMib(int mib)
    12351287{
     1288
     1289
     1290
    12361291    setup();
    12371292
    1238     // Qt 3 used 1000 (mib for UCS2) as its identifier for the utf16 codec. Map
    1239     // this correctly for compatibility.
    1240     if (mib == 1000)
    1241         mib = 1015;
     1293    if (!validCodecs())
     1294        return 0;
     1295
     1296    static QHash <int, QTextCodec *> cache;
     1297    if (clearCaches & 0x2) {
     1298        cache.clear();
     1299        clearCaches &= ~0x2;
     1300    }
     1301    QTextCodec *codec = cache.value(mib);
     1302    if (codec)
     1303        return codec;
    12421304
    12431305    QList<QTextCodec*>::ConstIterator i;
    12441306    for (int i = 0; i < all->size(); ++i) {
    12451307        QTextCodec *cursor = all->at(i);
    1246         if (cursor->mibEnum() == mib)
     1308        if (cursor->mibEnum() == mib) {
     1309            cache.insert(mib, cursor);
    12471310            return cursor;
    1248     }
    1249 
    1250     return createForMib(mib);
     1311        }
     1312    }
     1313
     1314    codec = createForMib(mib);
     1315
     1316    // Qt 3 used 1000 (mib for UCS2) as its identifier for the utf16 codec. Map
     1317    // this correctly for compatibility.
     1318    if (!codec && mib == 1000)
     1319        return codecForMib(1015);
     1320
     1321    if (codec)
     1322        cache.insert(mib, codec);
     1323    return codec;
    12511324}
    12521325
     
    12621335QList<QByteArray> QTextCodec::availableCodecs()
    12631336{
     1337
     1338
     1339
    12641340    setup();
    12651341
    12661342    QList<QByteArray> codecs;
     1343
     1344
     1345
     1346
    12671347    for (int i = 0; i < all->size(); ++i) {
    12681348        codecs += all->at(i)->name();
    12691349        codecs += all->at(i)->aliases();
    12701350    }
     1351
     1352
     1353
     1354
     1355
    12711356#ifndef QT_NO_TEXTCODECPLUGIN
    12721357    QFactoryLoader *l = loader();
     
    12921377QList<int> QTextCodec::availableMibs()
    12931378{
     1379
     1380
     1381
    12941382    setup();
    12951383
    12961384    QList<int> codecs;
     1385
     1386
     1387
     1388
    12971389    for (int i = 0; i < all->size(); ++i)
    12981390        codecs += all->at(i)->mibEnum();
     1391
     1392
     1393
     1394
     1395
    12991396#ifndef QT_NO_TEXTCODECPLUGIN
    13001397    QFactoryLoader *l = loader();
     
    13411438QTextCodec* QTextCodec::codecForLocale()
    13421439{
     1440
     1441
     1442
    13431443    if (localeMapper)
    13441444        return localeMapper;
    13451445
     1446
     1447
     1448
    13461449    setup();
    13471450
  • trunk/src/corelib/codecs/qtextcodec.h

    r651 r769  
    146146    friend class QTextCodecCleanup;
    147147    static QTextCodec *cftr;
     148
    148149};
    149150Q_DECLARE_OPERATORS_FOR_FLAGS(QTextCodec::ConversionFlags)
    150151
    151 inline QTextCodec* QTextCodec::codecForTr() { return cftr; }
     152; }
    152153inline void QTextCodec::setCodecForTr(QTextCodec *c) { cftr = c; }
    153 inline QTextCodec* QTextCodec::codecForCStrings() { return QString::codecForCStrings; }
     154inline QTextCodec* QTextCodec::codecForCStrings() { return ; }
    154155inline void QTextCodec::setCodecForCStrings(QTextCodec *c) { QString::codecForCStrings = c; }
    155156
     
    171172    friend class QXmlStreamWriter;
    172173    friend class QXmlStreamWriterPrivate;
     174
    173175    friend class QCoreXmlStreamWriter;
    174176    friend class QCoreXmlStreamWriterPrivate;
     177
    175178};
    176179
  • trunk/src/corelib/codecs/qutfcodec.cpp

    r651 r769  
    327327            }
    328328            if (!headerdone) {
     329
    329330                if (endian == DetectEndianness) {
    330                     if (ch == QChar::ByteOrderSwapped && endian != BigEndianness) {
     331                    if (ch == QChar::ByteOrderSwapped) {
    331332                        endian = LittleEndianness;
    332                     } else if (ch == QChar::ByteOrderMark && endian != LittleEndianness) {
    333                         // ignore BOM
     333                    } else if (ch == QChar::ByteOrderMark) {
    334334                        endian = BigEndianness;
    335335                    } else {
     
    345345                    *qch++ = ch;
    346346                }
    347                 headerdone = true;
    348347            } else {
    349348                *qch++ = ch;
Note: See TracChangeset for help on using the changeset viewer.