summaryrefslogtreecommitdiffstats
path: root/src/corelib
Commit message (Collapse)AuthorAgeFilesLines
* Doc: write up the docs for Q_GLOBAL_STATICThiago Macieira2013-01-243-13/+523
| | | | | | Change-Id: I5bf4d0d027dc8f960c94b4be3ebf7381e9ef4be1 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Add an umbrella cmake config file for Qt 5.Stephen Kelly2013-01-242-2/+51
| | | | | | | Change-Id: I96b6e96539a84a5919992afbaee757fa080b7ae0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Alexander Neundorf <neundorf@kde.org> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* Merge remote-tracking branch 'origin/stable' into devFrederik Gladhorn2013-01-241-1/+1
|\ | | | | | | | | | | | | Conflicts: src/plugins/platforms/windows/qwindowsdialoghelpers.cpp Change-Id: I4ca87d44129fa5c1d8541cd58b8d62bc69080688
| * Merge remote-tracking branch 'origin/release' into stableFrederik Gladhorn2013-01-221-1/+1
| |\ | | | | | | | | | Change-Id: Iaa321deb9e536ce89b87a337b57634f00c770a32
| | * Doc: added path to qtcore.qdocconfNico Vertriest2013-01-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | Added examples/widgets Required for resource-system.qdoc referring to application.qrc Task-number: QTBUG-29101 Change-Id: Ia51020a02801e04e3ff8d13f09277d7cd3fe1109 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
* | | Added initializer list constructors for Qt associative containers.Roman Pasechnik2013-01-246-0/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | Affected: QSet, QMap, QMultiMap, QHash, QMultiHash. Task-number: QTBUG-25679 Change-Id: I01f3ecfbca805f4c053a75232188bd2a77fdb1f2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* | | Merge "Merge remote-tracking branch 'origin/stable' into dev" into ↵Frederik Gladhorn2013-01-23710-717/+720
|\ \ \ | | | | | | | | | | | | refs/staging/dev
| * | | Merge remote-tracking branch 'origin/stable' into devFrederik Gladhorn2013-01-22710-717/+720
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/io/qsavefile_p.h src/corelib/tools/qregularexpression.cpp src/gui/util/qvalidator.cpp src/gui/util/qvalidator.h Change-Id: I58fdf0358bd86e2fad5d9ad0556f3d3f1f535825
| | * | Fix QTextCodec race.David Faure2013-01-221-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The aliases for the TIS-620 codec were not available before loading it. This led to the following intermittent failure: QWARN : tst_QTextCodec::threadSafety() WARNING "MS874" not found? Change-Id: I8ed037d3238c04e1d35ed49e833ac01b7501d3e8 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| | * | QRegularExpression: fix wrong argument type for pcre_fullinfoGiuseppe D'Angelo2013-01-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The pcre(3) man page says that the 4th argument of pcre_fullinfo, when requesting PCRE_INFO_OPTIONS, should point to an unsigned long int variable. Change-Id: I72cd5ab208687715329566556c5f279db57f7872 Reviewed-by: Richard J. Moore <rich@kde.org>
| | * | Update copyright year in Digia's license headersSergio Ahumada2013-01-18708-711/+711
| | | | | | | | | | | | | | | | | | | | Change-Id: Ic804938fc352291d011800d21e549c10acac66fb Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| | * | Store inode numbers in decimal notationThiago Macieira2013-01-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ls(1) with the -i option and stat(1) show inode numbers in decimal. If anyone ever tries debugging this problem, we should present the information that other tools would show too. Change-Id: I54b24edba5b028cc86744ca302ab918f8baa2d2b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* | | | Change QT_FATAL_WARNINGS behavior to require a non-empty valueThiago Macieira2013-01-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows easy unsetting of the variable in a shell like: QT_FATAL_WARNINGS= progname Change-Id: Ie9cfb6ebfd4931de1c90af68bfeeae1e9f3d4b9d Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* | | | Simplify checking of the SHM/SEM Unix key file's existenceThiago Macieira2013-01-231-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We don't need to stat(2) the file to check if it exists before creating it. We're about to open(2) with O_CREAT|O_EXCL, which will not recreate it if it existed. Change-Id: I2d2176054e7776a32a4520832ee104b9c4ccf748 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Richard J. Moore <rich@kde.org>
* | | | Undefine overlapping variable names defined in VxWorks headersPasi Petäjäjärvi2013-01-231-0/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VxWorks has defined variables with same name as in Qt's headers. Undefine those variables to avoid naming conflict. Change-Id: Ia8ca04a66acece683cd6c7f71df7e5a2800ec98d Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Use time.h related includes from qfunctions_vxworks.h file.Pasi Petäjäjärvi2013-01-231-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In VxWorks qfunctions_vxworks.h file includes correct time related headers and it is included already at file qplatformdefs.h for all mkspecs targets. Change-Id: I8677eef8c79cebb445d89203284f3af27abbdd7f Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Use sched_get_priority_* functions only for SCHED_RR and SCHED_FIFOPasi Petäjäjärvi2013-01-231-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In VxWorks set default values for scheduling priority to use SCHED_FIFO_HIGH_PRI and SCHED_FIFO_LOW_PRI defines for other scheduling policies than SCHED_RR or SCHED_FIFO. Change-Id: If78b84cd9ef94d7712206e9442e96cdba727610f Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Add support getting memory page size to RTP mode on VxWorks.Pasi Petäjäjärvi2013-01-232-1/+7
| | | | | | | | | | | | | | | | | | | | Change-Id: Id71bf7fd8e7371284076247558cba7edb0307e13 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | VxWorks process (RTP) mode does not have taskLock/taskUnlock functionsPasi Petäjäjärvi2013-01-231-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VxWorks does not support to globally lock and unlock the scheduler from process. In kernel mode (DKM) above functions disable preemption from requested task and such functionality does not exist for process. Change-Id: Id41eab4c1973e4181e82539d08707659e0780f99 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Use stub functions getpwuid and getgrgid for VxWorksPasi Petäjäjärvi2013-01-231-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VxWorks has no concepts of users and groups, therefore no such functions exists on VxWorks. Use stub functions from qfunctions_vxworks.h for those, so we don't need to make major source code changes. Change-Id: Iaad80ec18441e3d3e9c0f96e92ccc3766b27d976 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Use stub function gettimeofday for VxWorksPasi Petäjäjärvi2013-01-231-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Vxworks does not have gettimeofday function, use function implementation from qfunctions_vxworks.h/cpp instead. Change-Id: Iad2a71c8484ba00dd9406706b1c136297260de4b Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Do not define QT_NO_DYNAMIC_LIBRARY for VxWorks process (RTP)Pasi Petäjäjärvi2013-01-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Shared libraries cannot be used in kernel mode (DKM), only at process mode (RTP). Change-Id: I8cecc12461aa4417b16577db3bc9cd85a1aa7efa Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Strip prepending <hostname>: string from currentPath() for VxSimPasi Petäjäjärvi2013-01-231-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VxWorks simulator (VxSim) maps SDK rootdir usable as normal directory. Mapped directory name is either host: or <hostname>: and can be used without prepending prefix containing colon. Strip prepending string and colon to get valid native path to host SDK rootdir running VxSim. Change-Id: I9d2829e32431c2d50fefe55c93780cd37165e565 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Use taskIdSelf() function instead of taskIdCurrent global variablePasi Petäjäjärvi2013-01-231-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The uniprocessor taskIdCurrent global variable (declared in taskLib.h) does not exist in VxWorks SMP, because of concurrent execution on multiple CPUs. Any uniprocessor code that reads taskIdCurrent should make calls to taskIdSelf() instead. Change-Id: I4e0efef32297f339d6121c7d4bca3820e0fc9294 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | VxWorks header only available in DKM mode and not in RTP mode.Pasi Petäjäjärvi2013-01-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Check if _WRS_KERNEL is defined so we are compiling for DKM mode. Change-Id: I15801b0575d3fe6e543f81a177fd01d015d9085f Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Use Qt defined gettimeofday for VxWorks and no fallback to X11 versionPasi Petäjäjärvi2013-01-232-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VxWorks don't have gettimeofday function so we always use the one implemented in Qt. VxWorks DIAB compiler is not supported building Qt for VxWorks 6.9.2. Anyone using older VxWorks should also not be affected so use new defines VXWORKS_DKM and VXWORKS_RTP for VxWorks version 6.9.2 onward. Change-Id: I2e9546a101256ea0557b65163b40cd0f28be8519 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
* | | | Don't clear the pointer in QScopedPointer's destructorThiago Macieira2013-01-231-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It helps in valgrinding applications. It's the difference between: ==17609== Address 0x38 is not stack'd, malloc'd or (recently) free'd and ==19789== Address 0x598f478 is 56 bytes inside a block of size 112 free'd ==19789== at 0x4A0736C: operator delete(void*) (vg_replace_malloc.c:480) ==19789== by 0x53A77CD: QObjectPrivate::~QObjectPrivate() (qobject.cpp:239) ==19789== by 0x53B4EB5: QScopedPointerDeleter<QObjectData>::cleanup(QObjectData*) (qscopedpointer.h:63) ==19789== by 0x53B3980: QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::~QScopedPointer() (qscopedpointer.h:99) ==19789== by 0x53A8EEC: QObject::~QObject() (qobject.cpp:750) Change-Id: If42107c94401a96c05caa511442d6bd010fd4e29 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* | | | Add a new Q_GLOBAL_STATIC implementationThiago Macieira2013-01-223-119/+161
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Unlike the previous implementation, this implementation is locked: only one initialisation is ever run at the same time. It is exception-safe, meaning that a throwing constructor will restart the process. Also, start using the thread-safe behaviour that GCC has offered for a long time and C++11 requires. Change-Id: I20db44f57d258923df64c0051358fd0d9a5ccd51 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: David Faure (KDE) <faure@kde.org> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
* | | Add a note for merging QString::contains(QRE, QREM) overloads in Qt 6Giuseppe D'Angelo2013-01-201-1/+1
| | | | | | | | | | | | | | | Change-Id: I19609b192618287dbac0de2e893e3e9b40d6a969 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* | | Add support for defining properties from member variables.Gerhard Gappmeier2013-01-192-7/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This associates properties with member variables and avoids writing getter and setter methods manually. The metaCall() method directly accesses the member variable, so additional method calls can be avoided. The metaCall() setter code also supports NOTIFY signals, which means the according signal is emitted when the property gets written. Task-number: QTBUG-16852 Change-Id: I88a1f237ea53a1e9cf65fc9ef2e207718eb8b6c3 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | | Add class QSaveFile.David Faure2013-01-174-0/+487
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This QIODevice uses a temporary file for writing, so that in case of write errors, the writing operation is canceled, without losing any existing file. It also avoids having a partially-written file visible by other processes, at the final destination. Change-Id: I9482df45751cb890b1b6f1382ec2eea3eb980627 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | | Merge remote-tracking branch 'origin/stable' into devFrederik Gladhorn2013-01-1615-36/+211
|\| | | | | | | | | | | | | | | | | | | | Conflicts: src/widgets/styles/qstyleanimation.cpp Change-Id: Iae570895be6544de80f9c1ec309d1a08c59daff8
| * | Merge "Merge remote-tracking branch 'gerrit/release' into stable" into ↵Frederik Gladhorn2013-01-153-6/+6
| |\ \ | | | | | | | | | | | | refs/staging/stable
| | * | Merge remote-tracking branch 'gerrit/release' into stableFrederik Gladhorn2013-01-153-6/+6
| | |\| | | | | | | | | | | | | Change-Id: Ieb104d0e390218a063082c93bc9c7e412af2166d
| | | * Change all shmget calls to user-only memoryThiago Macieira2013-01-152-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Drop the read and write permissions for group and other users in the system. Change-Id: I8fc753f09126651af3fb82df3049050f0b14e876 Reviewed-by: Richard J. Moore <rich@kde.org>
| | | * set pkg-config host_bins directly to install dirOswald Buddenhagen2013-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qmake tries to replace all occurrences of the install prefix with a literal ${prefix}. of course this would mess up build paths which happen to live under the prefix (this is untypical, but still), which would break the sed magic in the subsequent install step. as qmake itself has no use for the .pc files, it's ok to target them directly for the install dir. we do the same with the include and lib dirs already. Task-number: QTBUG-28807 Change-Id: I53d7f0f3b357f67f30bea07554794f60160376cd Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
| * | | Fix renaming of files that differ only in case.Friedemann Kleint2013-01-154-1/+106
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This currently fails on case-insensitive file systems since the check for existence then triggered and indicated "file already exists". Check on the file id (inode or file id) whether the target file is really a different file for a case-changing rename. Task-number: QTBUG-3570 Change-Id: I1b2d40850692e02142ee23d2c753428de00aedc6 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| * | Fix malloc errors from legacy realpath on Mac OSX.Jeremy Nicholl2013-01-141-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid using realpath(X,0) on Mac OSX at all, since even on versions of OSX where realpath(X,0) is supported, we still get the legacy version due to our compiler flags. If we were to change the -mmacosx-version-min to 10.5 or higher then this patch would be safe but unnecessary. Task-number: QTBUG-28282 Change-Id: Iee21003f3e9616482483a05ceee706b476091914 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
| * | Split QQNXLocaleData::readPPSLocale()Rafael Roquetto2013-01-142-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because this method creates a QSocketNotifier, it needs to be split into a part that is run on initialization, namely QQNXLocaleData::initialize(), and one that is run delayed through event loop invocation, namely QQNXLocaleData::installSocketNotifier(). Task-number: QTBUG-28701 Change-Id: Ib60000902692bbca4820d3d0bc7719212668dfa9 Reviewed-by: Laszlo Papp <lpapp@kde.org> Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
| * | Doc: corrected typo "the the"Nico Vertriest2013-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-28756 Spurious repetition of the definite article Trailing space issue corrected. Change-Id: I3a051f5dc291e546d8d67d6775e84b388bdc0363 Reviewed-by: Topi Reiniö <topi.reinio@digia.com> Reviewed-by: Geir Vattekar <geir.vattekar@digia.com>
| * | Fix accidental obsolation of Qt::InputMethodQueryPekka Vuorela2013-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | \obsolete for one value was marking the whole enum obsolete. Change-Id: If022b4af8365e3448556ca11a538203ab5c63c78 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * | Ignore WasDeclaredAsMetaType flag during binary check.Jędrzej Nowacki2013-01-101-5/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Nobody should break ODR, but we were living with apps breaking it for at least 8 years. Sure it is an undefined behavior but in many cases it works. I do not think that Qt should enforce usage of a proper C++, it is role of a tool chain. Qt can only indicate that something is going terribly wrong. Make message a bit more verbose. Sometimes the ODR violation is not that easy to fix, therefore a hint is a nice addition. Update documentation of qRegisterMetaType. Change-Id: I61dcccc840eec80a4ed5b8a212a912807d239d8c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
| * | Doc: cleanPath also normalizes separatorsLeena Miettinen2013-01-101-2/+2
| | | | | | | | | | | | | | | Change-Id: I0e5c1cd45ad90fceaed931b7014b4542e8aaa9d7 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
| * | Protect Q_UNREACHABLE and Q_ASSUME by Q_ASSERT.Jędrzej Nowacki2013-01-102-12/+29
| |/ | | | | | | | | | | | | | | | | Both Q_UNREACHABLE and Q_ASSUME with an invalid condition can produce really weird side effects and crashes. Change-Id: I4d808c705ae98388ef5853e6539b70bd5e5ad34b Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Add Q_COREAPP_STARTUP_FUNCTION macro.David Faure2013-01-153-0/+80
| | | | | | | | | | | | | | | | | | | | | | This is necessary for initializing things in a library, which require a QCoreApplication instance (unlike Q_CONSTRUCTOR_FUNCTION, which runs before that). Example use cases: KCrash (segv handler), and KCheckAccelerators (debugging tool triggered by magic key combination). Change-Id: I5f4c4699dd4d21aea72b007989ba57467e86ed10 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Bump Qt version to 5.1.0Frederik Gladhorn2013-01-154-10/+12
| | | | | | | | | | | | Change-Id: I6d372c933e48eeda921fe781b073bf4e05b31585 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com> Reviewed-by: David Faure (KDE) <faure@kde.org>
* | Add support for Linux eventfd(7) in the UNIX event loopThiago Macieira2013-01-152-4/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | eventfd(7) uses less resources than a pipe, as it only needs to store a single 64-bit integer, as opposed to a full buffer. It was introduced first on Linux version 2.6.22 and glibc 2.7. However, both the configure-time test and the runtime usage require the use of EFD_CLOEXEC for thread-safety, so this code will be enabled only for Linux 2.6.27 and up as well as glibc 2.9 and up. Change-Id: Ic7e10b28d7b1d4ca24be614ed84055c4429a68e4 Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
* | Doc: Update the info on the QSharedPointer internalsThiago Macieira2013-01-151-31/+24
| | | | | | | | | | | | | | Some of it still referred to classes that were cleaned up in Qt 5.0 Change-Id: Ief4ed4b4fce074884f755b0d18a526ac40ad1b0b Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | QUrl: methods for converting QStringList <-> QList<QUrl>David Faure2013-01-142-0/+34
| | | | | | | | | | | | | | This is a very common thing to do, e.g. in order to send urls via DBus. Change-Id: I277902460ee1ad6780446e862e86b3c2eb8c5315 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Add class QDebugStateSaver for writing QDebug operators correctlyDavid Faure2013-01-146-166/+324
| | | | | | | | | | | | | | | | | | Had to move QTextStreamPrivate to a private header, to be able to use its new internal Params struct from qdebug.cpp Change-Id: If28e25f27bbd04b1825a5eb3e2ef83ecad72e7b2 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>