summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
Commit message (Collapse)AuthorAgeFilesLines
* Fix Windows: QStandardPath::findExecutable() to check suffixes.Friedemann Kleint2012-10-081-33/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | Append the Windows executables suffixes from the PATHEXT environment variable. The previous code had a bug since the 'break' statement bailed out of the inner loop only. Factor search code out into a separate functions, avoiding repeated invocations of list.constEnd() and variable assignments in the old code. Add a static function that is called on Unix and on Windows for executable names with a suffix. Call another function applying a candidate list of suffixes in case an executable name without a suffix is passed. Lower case the extensions from PATHEXT, streamline code. Split up the test, add a _data() slot for clarity. Task-number: QTBUG-27457 Change-Id: I2bf34de52aeadddd3b937ad1e22191c3c850fd26 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
* QSettings Windows documentation does not match behaviorThiago A. Correa2012-10-051-1/+1
| | | | | | | | | | | | | QSettings under windows adds "OrganizationDefaults" to the registry key path when using QSettings::SystemScope. commit ee2e497f1c8216a22ddea53ab5ae1fd09bfee363 missed the change to HKEY_LOCAL_MACHINE Task-number: QTBUG-27452 Change-Id: I561f4e57b5beda0f9a511de067eb17fc23e3c856 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QSettings Windows documentation does not match behaviorThiago A. Correa2012-10-051-1/+1
| | | | | | | | | | | | QSettings under windows adds "OrganizationDefaults" to the registry key path when using QSettings::SystemScope. Change platform notes section to document this behavior. Task-number: QTBUG-27452 Change-Id: I4d00b2da0825efdb360336e4f82080b6b29a54f1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Overhaul a little the QUrl error reporting.Thiago Macieira2012-10-021-95/+173
| | | | | | | | | | | | | | | | | | | | | | Keep the original QString that triggered the parsing error, instead of just one QChar. This provides more powerful error messages, like: Invalid IPv6 address; source was "http://[:::]"; scheme = "http", host = "" (QUrl cannot keep invalid hostnames) Invalid port or port number out of range; source was "http://example.com:abc"; scheme = "http", host = "example.com" (QUrl cannot keep a non-numeric port number) Invalid path (character '%' not permitted); source was "foo:/path%?"; scheme = "foo", path = "/path%25%1F" (the tolerant parser runs first, so the faulty component is fixed) This stores the error state in a special structure which is not allocated under normal conditions, keeping the memory consumption down. On 32-bit systems, QUrlPrivate does not increase in size; on 64-bit systems, it grows by 8 bytes. Change-Id: I93d798d43401dfeb9fca7b6eed7ea758da10136b Reviewed-by: David Faure <faure@kde.org>
* Update some error messages in QUrl::errorString()Thiago Macieira2012-10-021-2/+3
| | | | | | | | | Make both invalid hostname messages start with "Invalid hostname". And split the empty port error from the invalid port one. Change-Id: I870d1ed6fb07ec494f553871a37ed167141ffc06 Reviewed-by: David Faure <faure@kde.org> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Add Q_UNREACHABLE / Q_ASSERT to two conditions that can't happenThiago Macieira2012-10-021-1/+7
| | | | | | | | Just so the code generation is a little better. Change-Id: I2a43a4df0ae67900c465a6c2b4f2b8ba284dbbaa Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
* Move QUrlPrivate to qurl.cpp and mark all methods as inlineThiago Macieira2012-10-022-126/+125
| | | | | | | | | | They're never accessed outside of qurl.cpp anyway, so let the compiler know that it doesn't need to generate a full out-of-line copy for them in case it does inlining. Change-Id: I2be069b3fd2658eff9ad3023c21c8ae653c389ab Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
* Change QUrlPrivate::setAuthority to return voidThiago Macieira2012-10-022-4/+4
| | | | | | | | | | | | | It used to return bool because setHost returns bool and, therefore, setAuthority could fail. However, the return value is never checked, in either parse() or QUrl::setAuthority(), because there's no error recovery. This is a small optimisation. Change-Id: I25660d66cfad64ca5b9706cc38afa0e97ba3ee0b Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
* Remove the annoying qWarning when QUrl::setPort is out of rangeThiago Macieira2012-10-021-1/+0
| | | | | | | | | | That's what we have QUrl::errorString() for. This will become evident especially now that QUrl::toString() / toEncoded() return empty if there are errors. Change-Id: I64a84e9c6ee57c0fc38cc0c58f5286ddc1248d1f Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
* Update QUrlPrivate::setScheme: EmptySchemeError never happensThiago Macieira2012-10-022-8/+5
| | | | | | | | | | | | | | | As the comment says, an empty scheme is not permitted. However, if that error were to happen, QUrl falls back to parsing the URI as an "URI reference", starting with the path. E.g., ":/foo" is a path of ":/foo", which will in turn trigger the compound "colon before slash" error. Also, we don't percent-decode in the scheme. Change-Id: I438a61e17323c7722ddcc64792577a9ecb869c4b Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
* Make QUrl::errorString() usable for QtTest output in invalid URLsThiago Macieira2012-10-021-21/+54
| | | | | | | | | If an URL is invalid, let's indicate that in the test output. To be helpful, let's make QUrl::errorString() include the component form of the URL. Change-Id: Iaafe16973ded79c7ea688fbb23808d91253e8c14 Reviewed-by: David Faure <faure@kde.org>
* Make QUrl::toString() / toEncoded() return empty for invalid URLsThiago Macieira2012-10-021-5/+4
| | | | | Change-Id: I6ebb4ad2901a9bacb09fb81082202f37ebbc2e97 Reviewed-by: David Faure <faure@kde.org>
* Add two compound URL invalidity cases for isValid()Thiago Macieira2012-10-022-13/+59
| | | | | | | | | | | | | | These two errors can only happen if one calls setPath() explicitly. They cannot happen for parsed URLs, which is why they are only caught with isValid(). It's not possible to set the error condition in setPath() either because they depend on the presence / absence of the authority and scheme. Also update all the unit tests that set a path not starting with a slash and were just "freeloaders" on the previous behaviour. Change-Id: Ice58cd4589a850452d7573a5b19667bbab2fb43e Reviewed-by: David Faure <faure@kde.org>
* Rename createLocalFile to createNativeFile & deprecate createLocalFileAndy Shaw2012-10-022-10/+41
| | | | | | | | | | | | | | | | | | As it was confusing to use the term local file when referring to a file that was accessible using native APIs and not just a file that was on a hard disk somewhere already the function name has been changed. By renaming it to createNativeFile we keep it consistant with QFileInfo which has an isNativeFile() function too. Test also added. Task-number: QTBUG-3169 Change-Id: I410e7ed28133d68fd312c6c0faf3f7191460d7ce Reviewed-by: João Abecasis <joao@abecasis.name> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QWindowsPipeReader: use CancelIoEx on Windows >= VistaJoerg Bornemann2012-10-021-1/+16
| | | | | | | | This cancels only the I/O operation of the reader and not all operations on the handle. Change-Id: Ie442199534cf45e58bb2e053da9fecee961a460e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* QWinOverlappedIoNotifier: multiple I/O operations on the same handleJoerg Bornemann2012-10-024-34/+64
| | | | | | | | | | | | | When doing multiple I/O operations on the same handle, we get notified for every operations. These must be distinguished by comparing the pointer to the OVERLAPPED struct. We now pass the OVERLAPPED pointer via the notified signal and let the receiver decide if it wants to handle this notification. Change-Id: I4efe70f39c6ae5282b949f2f4b21f6e7dd3df785 Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* QProcess/Win fix forwarding of output channelsJoerg Bornemann2012-09-281-16/+20
| | | | | | | | | | We must not create pipe readers for the forwarded channels as we don't want to read from stdout/stderr into the internal QProcess buffer. Also, we must not pass CREATE_NO_WINDOW to CreateProcess because this will render our stdout/stderr handles useless. Change-Id: Ie6485e86c103d1e9225cf39c04aa54093c1efe0d Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* Fix default-constructed QFileSystemEntryJoão Abecasis2012-09-251-3/+3
| | | | | | | | | | | | | | Member variables for lastSeparator, first and lastDotInFileName are now initialized to -1 (non-existing), where the previous value of zero would mean a separator/dot at that position and resulted in path() returning '/', instead of '.'. Tests were expanded for better coverage of empty state and default-constructed instances. Change-Id: Ie27547886b52224d38b5be0b4f920c9927fd440f Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Centralise handling & ignoring of SIGPIPE in qcore_unix_p.hThiago Macieira2012-09-241-19/+1
| | | | | | | | | | | | | We had two instances of this function in the Qt source code, one clearly a copy of the other, so both had the same thread-safety issue. Instead, let's have one copy and have both write_nosignal() and sendto() call them. Q_NO_POSIX_SIGNALS is also gone. It was only used with Symbian. Change-Id: I0f1354a8e9df8e6b10a02f86a940e3c6d1222087 Reviewed-by: Peter Hartmann <phartmann@rim.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Use QStringList::join(QChar) overload where applicable [QtCore]Marc Mutz2012-09-233-5/+5
| | | | | | | | | | This is an automated change performing the following replacements: join\("(.)"\) -> join('\1') join\(QLatin1String\("(.)"\)\) -> join(QLatin1Char('\1')) join\(QStringLiteral\("(.)"\)\) -> join(QLatin1Char('\1')) Change-Id: I81c378ef6aeeada5e116f1394cc9fc67f901ffd6 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-22104-2491/+2491
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* Fix thread-safety of qt_ignore_sigpipeThiago Macieira2012-09-181-1/+5
| | | | | | | | | | | | | The testAndSet operation would mean another thread could see the value of 1 and proceed to write(2)/sendto(2) before SIGPIPE had been ignored. If the pipe or socket were already closed by then, a SIGPIPE would be delivered to the application with its default action: terminate. Change-Id: I62dc8f5fa14c1dd453d13e4053c642bd78fbc468 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: Peter Hartmann <phartmann@rim.com>
* Mark (non-public API's) ctor's as explicitSergio Ahumada2012-09-142-5/+5
| | | | | | | | | Make C++ class constructors that can be used with only one required argument 'explicit' to minimize wrong use of the class. Change-Id: I12ad5b6eb1794108c6b7464a2573e84068733b03 Reviewed-by: Sergio Ahumada <sergio.ahumada@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fixed: QFileInfo::lastModified() returning wrong value.Markku Heikkila2012-09-133-5/+14
| | | | | | | | | | | | | | | Fixed so that empty QDateTime is returned for non existing file. Fixed also created() and lastRead() to return empty QDateTime for non existing file. QFileSystemEngine::fillMetaData() returned true for non existing files. This was also corrected. Task-number: QTBUG-25811 Change-Id: I523eb99e4405b4b813b2950f85cc646239181d07 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Christian Stromme <christian.stromme@nokia.com>
* QFileSystemEngine: fix realpath() buffer sizeRafael Roquetto2012-09-111-1/+1
| | | | | | | | | realpath() returns at most PATH_MAX _plus_ the terminator. Change-Id: I4c2e3e166a5f476863ad8c6999800e6468535dbe Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* QNX: fix call to realpath() on QFileSystemEngineRafael Roquetto2012-09-111-1/+1
| | | | | | | | | | | | QNX6, as opposed to later QNX versions, does not define the behavior of realpath() when the second parameter is NULL. We leave it then for the compiler to decide which implementation to call, by relying on the _POSIX_VERSION_ macro, which in QNX6 happens to evaluate to < 200801L. Change-Id: I3a6d3859858f56b69f0d391384c2703083a01257 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
* Fix QFileSystemEngine::canonicalName() returning corrupt dataThomas McGuire2012-09-101-2/+7
| | | | | | | | | | | | | | In case of an error when calling realpath(), the return value buffer was uninitalized, but still used. Now the error value is checked to prevent this. Additionally, this fixes a memory leak in the error case. In addition, use the modern version of realpath() on QNX, since it is available there. Change-Id: I0ac83454679619f379df9c482c958789ab31866a Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org>
* android: we have mkdtemp.Arvid Picciani2012-09-101-2/+4
| | | | | | | | | | they just forgot to declare it. see: bionic ad1ff2fb268034074488f0b4b30b5311008b8617 Change-Id: Ide0c0edaa1b5fd17e58ffce1e3d49e320d80e57a Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Arvid Picciani <aep@exys.org>
* Removing duplicate includesSergio Ahumada2012-09-091-1/+0
| | | | | | | Do not include a header more than once Change-Id: Ia2e5d66e72988ad833cf5177a3f8aa988bf510e9 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Fix missing or improper include guard in headersSergio Ahumada2012-09-097-15/+15
| | | | | | | | Use an include guard in headers to ensure the header is not included more than once. Make the header guard match its file name. Change-Id: Icf7d7d4bed91443b3b21ef5d4219dbd260dffef3 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Revert "Use true and false in preference to TRUE and FALSE"Sergio Ahumada2012-09-075-24/+24
| | | | | | | | | | | Even though I really think the change was the right thing to do, it seems like Windows people don't like this change because of some Windows Data Types specific rules. This reverts parts of the commit 56d5c909af6473be64a1ae487b45bd444a9a8553. Change-Id: I2c67d9b1bab36fc63937ef386aef56d2a4472a04 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Use true and false in preference to TRUE and FALSESergio Ahumada2012-09-056-25/+25
| | | | | | | | The TRUE and FALSE macros are obsolete and should be replaced with true and false (all lower case) respectively. Change-Id: Iee352e8173500683e6319be0abbf5bacf29016e0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QStandardPaths should still work without desktop serviceJing Bai2012-09-031-4/+0
| | | | | | | | | To fix a compile problem when QT_NO_DESKTOPSERVICES is defined. We should enable QStandardPaths on Mac even without desktop service, since it doesn't rely on desktop service and it is used in other files. Change-Id: I29267ebfe81b79c598043f8287fd2bb419573570 Reviewed-by: David Faure <faure@kde.org>
* Blackberry: Fix QFileSystemEngine::tempPath()Thomas McGuire2012-08-291-2/+5
| | | | | | | | | | Apparently it depends on the user and/or firmware version on whether TMPDIR or TEMP is set, so try both. Additionally, fall back to /tmp if neither is set, as that seems to be present on all devices. Change-Id: Ia49499729df525276e145d2e35e94559eac45c98 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Don't do path conversions on isEmpty()João Abecasis2012-08-291-2/+1
| | | | | | Change-Id: I4b5eefe74c6f741d1d0870d502798a5e3d0e7a2a Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Use QString for user-visible stringsJoão Abecasis2012-08-291-1/+1
| | | | | | | | | | | | | | dirPath is kept as the "user visible" path string and is used to construct paths during directory iteration. In QFileSystemEntry (and in Qt, more generally) these are represented with QString. While on Windows QFileSystemEntry::NativePath and QString are one and the same, dirPath does not represent a native path. So, basically, don't do that. Change-Id: I987477cb41b37018634ac43aeda004d254181dc5 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* wrap the implementation with NO_SETTINGS macroJing Bai2012-08-291-0/+3
| | | | | | | | To fix a compile issue where the header is wrapped but the implementation is not. Change-Id: I9d4e30a251e9f5de71710eb6bf784fb2eb396698 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QUrl: port thread-safety autotest from Qt4.David Faure2012-08-261-0/+2
| | | | | | | | This detected the same missing detach()s in QUrl::resolve. Everything else works, no need for a mutex in Qt5's QUrl. Change-Id: I0da51b7b0c6b810d314a26d4b638383cd17de12b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Doc: Add \inmodule QtCore to all QtCore class doc bodiesThiago Macieira2012-08-2323-4/+29
| | | | | Change-Id: I19100755c97cc155c76a859e19940e9f9222d34e Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>
* Fix decoding of QByteArray in the deprecated "encoded" setters in QUrlThiago Macieira2012-08-205-14/+78
| | | | | | | | | | | | | | The asymmetry is intentional: the getters can use toLatin1() because the called functions, with a QUrl::FullyEncoded parameter, return ASCII only. This gives a small performance improvement over the need to run the UTF-8 encoder. However, the data passed to setters could contain non-ASCII binary data, in addition to the percent-encoded data. We can't use fromUtf8 because it's binary and we can't use toPercentEncoded because it already encoded. Change-Id: I5ecdb49be5af51ac86fd9764eb3a6aa96385f512 Reviewed-by: David Faure <faure@kde.org>
* tst_qurlinternal: use qurl_p.h instead of declaring the functionsThiago Macieira2012-08-201-1/+1
| | | | | | | | Just in case someone (like me) changes the function signatures or adds new functions. Change-Id: I1025fea012d95ffe89acaf799aa58fd2b0babc80 Reviewed-by: David Faure <faure@kde.org>
* Add Q_DECL_NOTHROW to some qHash functionsThiago Macieira2012-08-202-2/+2
| | | | | | | | | | | | The hashing functions for QDateTime and QHostAddress did not get the noexcept keyword because they might allocate memory. QDateTime doesn't do it now, but it could in the future. QHostAddress does allocate memory today. Change-Id: Ia5f80942944bfc2b8c405306c467bfd88ef0e48c Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Misc documentation fixes triggered by qdoc errors/warningsShawn Rutledge2012-08-201-5/+4
| | | | | Change-Id: I6ca3b138114fe957a09e8ec2f22273865635fc8b Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
* Speed up sorting of dir entries when sorted by dateRobin Burchell2012-08-201-2/+13
| | | | | | | | | | | | | | | | | | | | | | QDateTime will attempt to convert unknown types of date to UTC time, which isn't exactly a fast process. As we don't care about local timezones in the process of sorting (as this is purely for ordering, not display to the end user), we can force the dates to use UTC time, avoiding the unnecessary local timezone lookup. This also adds a benchmark covering this case. Benchmark results, Qt 5: - before: 11, 489ms - after: 273ms Qt 4.8: - before: 20, 848ms - after: 278ms Change-Id: I87fa6260e820b5b172d3306ff395dafe767c33ff Reported-by: Thomas Perl <m@thp.io> Reviewed-by: Alberto Mardegan <mardy@users.sourceforge.net> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix a couple of qdoc errors.Lars Knoll2012-08-201-1/+2
| | | | | Change-Id: I0770fc61e265face4fa061be9e110814effee181 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Modernise, update and fix errors in the QUrl documentationThiago Macieira2012-08-181-44/+65
| | | | | | | | | | | | | | Update the documentation of the deprecated API to match the current behaviour. Notably, the current behaviour is to check the correctness of the percent-encoding even in the "encoded" functions. Also, the use of QUrlQuery makes the matching work on canonical forms, so "%73earch" does match "search". Elsewhere, make sure we do not refer to the deprecated API in the documentation of non-deprecated functions. Change-Id: If3505ac3c6121177ad6ab18199e143775bef44b9 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Bring back the documentation on QUrl deprecated methodsThiago Macieira2012-08-181-0/+433
| | | | | | | | | | | | | | | | The deprecated query methods were removed along with their documentation in commit 1c2144c39fa0069bf496e8f77389a9c2f8a31acf, so restore it from before that commit. The rest of the encoded methods were removed along with their documentation in commit 1372d60bde04a31c8036601076d1093a67c6bd46. Restore their documentation from the previous commit to that one. All the documentation from this commit is brought back unchanged, except for the addition of \deprecated. Change-Id: I1851b0dc922c681e1623359b35dfd0f505d258d2 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Fix a couple of qdoc errorsLars Knoll2012-08-183-3/+3
| | | | | Change-Id: I79f689e08ed4a496052529af38fca72c3d4e04cb Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fix qdoc erros in qfile and related classesLars Knoll2012-08-185-9/+8
| | | | | Change-Id: I56b66e6eeb06c84e1157a701a814aebb1ddf4845 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make the "\internal" qdoc command stand on its own lineLaszlo Papp2012-08-156-35/+70
| | | | | | | | | | The qdoc manual currently claims that the command must stand on its own line. The change follows the consistency with the rest and how the example looks like inside the qdoc manual for this command. Change-Id: I6b653dc95cf9d84e4adf32220dace5d313678419 Reviewed-by: Casper van Donderen <casper.vandonderen@nokia.com>