...a namespace-level static function. The ok parameter was never
set by any caller.
Change-Id: I668f78fe198f09fb0a9a52c10c8dea2fab070653
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Factor the TextDate and ISODate legs into separate functions
and replace a chain of QString::arg() with QStringBuilder.
Saves 76B in text size.
More importantly, restores (N)RVO for these code paths.
Change-Id: I8b99bb672f5a4b5506d53487eca189d48b4025e9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
qdebug.h:373:81: error: extra ';' outside of a function is a C++11 extension [-Werror,-Wc++11-extra-semi]
Change-Id: Iee8cbc07c4434ce9b560ffff13cb759805b64dfc
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
There appears to be at least one fix, related to sign- or zero-extension
in the call to isspace(). So it's a good idea to update again. This also
brings the behavior to match strtoll and strtoull on Linux, including
the fact that strtoull will parse negative numbers. For that reason,
qstrtoll and qstrtoull are now wrappers that try and keep the behavior
that we used to have.
This update also changes the code from a 4-clause BSD license (bad) to a
3-clause BSD license (good).
Change-Id: I73b01b02ebd1551bf924599d52284ad25cc1def0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
With reasoning similar to commit v5.5.0-alpha1~123 (Make some
QAbstractItemModel API invokable, 2015-02-25)
Change-Id: If0bf3a756ab1031f906c5bf9c823aafae4c3873c
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Reviewed-by: Stephen Kelly <steveire@gmail.com>
With reasoning similar to commit v5.5.0-alpha1~123 (Make some
QAbstractItemModel API invokable, 2015-02-25)
Change-Id: I77c72f7bb856a1eee966b45950384fe03a8eaac6
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Compilers don't like out parameters.
Effects on Linux GCC 4.9 stripped release builds:
text -584B
data +-0B
relocs +-0
Change-Id: Ie00c89b9edaced3a6adeb2707734c8f5238e67c1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The function getDateFromJulianDay() is simple arithmetic, but still
~400 bytes in executable size.
Yet GCC inlines this everywhere I looked, which makes some sense,
as different users of the class only use parts of the return
value and the optimizer has a field day removing all that dead
code.
However, that function has only one conditional, so presumably it
executes at full pipeline speed and it doesn't matter that it
calculates too much in some cases. More important is to use the
I-cache more conservatively.
That's what not inlining the function achieves.
The function returns its result in registers and doesn't spill
registers when called (at least on AMD64), so the effect on
runtime should be negligible.
Effects on Linux GCC 4.9 stripped release builds:
text -1536B
data +-0B
relocs +-0
Change-Id: Ia16838102d29ad67ee5efdc8b7b0a26f2f921df1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Instead of using a QString::arg() cascade, which creates tons of
temporaries, use good 'ol sprintf().
Effects on Linux GCC 4.9 stripped release builds:
text -308B
data +-0B
relocs +-0
Change-Id: I348577491d1399b5040f7ed9e9f6b111a9528e5d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Save one return statement per function. I don't see why the compiler
can't fuse these itself, but apparently it cannot, since this
transformation saves 72B in text size.
Change-Id: I3a661456554bf451ed53110ad546946ff7b84ec5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
All other similar functions in QDate just return an empty string
in case none of the switch labels would trigger (which would now
cause a compiler warning, after removing the default case label),
so do that here, too.
Saves 44B in text size.
Change-Id: I80ee4975082706adcd15fe89511d08c67e149324
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
They're pure whitespace, since in each case there is a fallback
after the switch, anyway, and their presence prevents compiler
warnings about unhandled enumeration values in switch statements,
which is nice-to-have, when adding to the enum, eventually.
No change in executable code size.
Change-Id: I77aecaeff990601f957ec9ee827eff5ead25aaa1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The documentation claims that operator== is needed, not operator!=.
While at it, we can also replace the loop with std::equal, which
might even allow STL implementations to choose a hand-optimized
version of the algorithm for C++ builtin types ...
Change-Id: I988b326d6af3b767526952e303468e18ff6594f9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Implement an initializer_list constructor, which was probably
just forgotten so far. Technically this is a SC incompatible change,
since
QVarLengthArray<int> array = {10};
will now create an array with one element 10, instead of an empty array
with a reserved size of 10. Anyhow, keeping the inconsistency with the
STL / other Qt containers here would certainly do more harm than good
in the long run.
Task-number: QTBUG-45047
Change-Id: I4675880f93e141181250939942fa32300916b0e3
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
We already have an infrastructure for that.
Change-Id: I9110b74dcf7f93362586687da6f112e72cb663a4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Simply to hide the magic bahind the scenes.
Change-Id: I69a159eb14712e68117f10e78745bdfbad46b6f2
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
By using the QDateTime::msecsTo to do the sorting it means that if
there is support for a precise time on the file system then this
ensures it sorts correctly.
Change-Id: I00528596908bba7b586aeffe5b0aa81019ff5722
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
When using non latin keys, remove() could cause corruption
of the json object.
Task-number: QTBUG-42270
Change-Id: I7305e57ebb78630a9bf68bc4f831a6d1646abb79
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
ICU doesn't support iso8859-16, so we need to fall back to
the Qt codec for this encoding.
Task-number: QTBUG-45053
Change-Id: I9754cf098c906fe8a75363a3d090029543cd0e35
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We don't guarantee -1, 0 and 1, but simply negative 0 or
positive numbers. This is in line with e.g. QString::compare()
Task-number: QTBUG-42860
Change-Id: I6009b2eb732ae3b4726cec06ec0eacc2c46a3c93
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
to better mirror the API of QJsonValue
Task-number: QTBUG-43686
Change-Id: I83edecf5226d44980a8a442a512a13ab9b2ac6a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QObject::connect tries to determine if the arguments are registered
metatypes. This used to work even for arguments that were forward
declared. But now, the metatype system tries to call
QtPrivate::IsQEnumHelper<T>::Value to know if it is registered.
That fails on gcc if T is forward declared.
Apparently gcc needs to know the full type of T to pass it in the
ellipsis function, even within a sizeof expression.
So change the ellipsis expression to a template one.
Task-number: QTBUG-44496
Change-Id: I7fa07bd3cde470b134c2ec53b0d581333d16a6f1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Currently, IsQEnumHelper<T> returns true also if QFlags<T> is registered
as a Q_FLAG. But this is going to be changed in the next commit.
For the QDebug operator to continue to work even when the QFlags<T> is
registered and not the T, we need to take it into account in the
QEnableIf condition
Change-Id: If1fcffd133aa20ba95a07e2bfaaa308896ab01b0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
When creating a string it would cause a malloc which would reset
GetLastError() so we need to ensure that GetLastError() is the first thing
it calls if a Windows API call fails.
Task-number: QTBUG-27765
Change-Id: I5cc4ce59aa1f03a0ec978fe54949a7931a225d52
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Unlike qAppName, it doesn't require a QCoreApplication instance,
making QLockFile usable in destructors of global statics.
This also uses the value passed to setApplicationName if called
rather than always argv[0].
Change-Id: I40446aba410db42d7cfe6b4408878faf435246f7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It no longer compiled after 614f37c8b5 due to
the following:
- forkfd_qt.cpp set _XOPEN_SOURCE to 500
- It then includes qatomic.h which include sys/cdefs.h (the FreeBSD header
that parses and sets _POSIX_C_SOURCE, _XOPEN_SOURCE and other macros)
- sys/cdefs.h redefines _POSIX_C_SOURCE to 199506 due to _XOPEN_SOURCE's
value
- Several libc symbols expected to exist by libc++ are hidden due to
_POSIX_C_SOURCE's value and the build fails
Setting _XOPEN_SOURCE to 700 ensures that _POSIX_C_SOURCE is set to
200809 which is required for libc++ to work correctly
Task-number: QTBUG-45006
Change-Id: Iac93220d19ca5ab9ba8ac61a79748252283c3c47
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This is quite good if space isn't a constraint: the unrolling ensures
faster execution and limits the number of iterations. But it's long.
Both Clang and GCC set the predefined macro __OPTIMIZE_SIZE__ if -Os is
in effect. ICC does not; MSVC is untested but there are no macros for
this effect listed in its documentation.
Change-Id: I1a800c709d3543699131ffff13c48919a9a79ec3
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
We only ever use one, never both.
Change-Id: Iee8cbc07c4434ce9b560ffff13caf94c05dba338
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
qmath.qdoc:206: warning: No such parameter 'radians' in qNextPowerOfTwo()
qmath.qdoc:206: warning: No such parameter 'value' in qRadiansToDegrees()
Change-Id: Ia1556a98801ab694716235cc50edcc9e7d2f33f0
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
QVarlengthArray is not a good data structure when you need
to dynamically append to it without knowing its size in advance,
as it reallocates on every append. Use a QVector instead.
Task-number: QTBUG-44737
Change-Id: I68eab11eacd8368e94943511874aead823a149ab
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The existing check fails to detect the case where white space characters
other than the space character are replaced by space characters
without the length actually changing and returns the original string.
Task-number: QTBUG-44936
Change-Id: Ice6faa975f8b41f185c76f6d0d4ff81603e25eb3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Commit ebef2ad136 did it for Q_ASSERT, but
I somehow forgot to do it for Q_ASSERT_X. Do it now.
This includes the fix from 9a3d7adaad to
silence a Clang warning.
Change-Id: Iee8cbc07c4434ce9b560ffff13ca066a5b5ab5d4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
If ucol_open() failed, call back to QString::compare() implementation.
Task-number: QTBUG-44796
Change-Id: I03446e5227e1dedac6c5f824ac6d74a494fc0ace
Reviewed-by: Gergely Nagy <ngg@tresorit.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
The description of ImhHiddenText made it sound like it would change
the echoMode of the input field.
Task-number: QTBUG-38080
Change-Id: I379015b95e43b6eff181d51444c7e069728504ad
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Since GetTickCount64 still relies on the usage of kernel32, then it will
not find the function anyway as the library does not exist for Windows
Embedded. Therefore it is best to remove it altogether to save time trying
to locate something we know is not there.
Change-Id: Id879382fdd0692fb9443231a405c0e28d9bcc328
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
If you call libraryPaths() before constructing a QCoreApplication,
intersting things may happen.
Task-number: QTBUG-38598
Change-Id: I2861746277e391ede9e921e4a8ad825007e25fa0
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
The QFile::exists() check in the end was redundant if one of the
!QFile::exists() had returned false before. By always doing the
positive check we can get rid of it and also avoid excessive
nesting.
Also, on OSX the isEmpty() clause probably never evaluated
to true, with the effect that qt.conf in an applicationDirPath was
never found.
Change-Id: I750735741b707d3e98c4bf6c6b9558618e1fcc59
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
If a parameter contains quotes the check for "-binary" fails.
Change-Id: I27148b590d85291a93f1992dfd277fb857bec6e2
Reviewed-by: Stephen Kelly <steveire@gmail.com>
Refactor the code so that the localMSecsToEpochMSecs function always
gets the daylight status as input. The calculation can be very wrong if
we forget to set it.
Change-Id: I39e2a3fa6dc7c4a417f23288f10b303e450b8b98
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
In QtScript we use the msecs since epoch conversion (JS date is based on
the concept). After a8c74ddcf7 the date
conversion test in qtscript started to fail. Instead of relying on the
code working by chance, simply update the date when setting it with
setMSecsSinceEpoch.
Task-number: QTBUG-44885
Change-Id: I9f95c9cdccea52e7d1f808f3cb9e18570ef0df13
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This also removes a dependency to 3rd party licensed code.
Change-Id: Ia4818a5cf306501bdb7192265edc4bcba8e597d8
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
\t was not interpreted as a tab character.
Task-number: QTBUG-44884
Change-Id: I3c733e227fba7e5fd5153df0ae4d0431903bb104
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Reviewed-by: David Faure <david.faure@kdab.com>
On OSX we don't need the applicationDirPath to find a qt.conf
located in the application bundle. Let's take advantage of this and
allow findConfiguration to use it.
Task-number: QTBUG-24541
Change-Id: I38c349a3bcd140fcf91352c88c24ca662e6e6f2e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Some of the paths may only be resolvable if the application path is
known. On some platforms we can only figure out the application path
if argv[0] is known. Thus, if the paths have been queried before the
QCoreApplication is created, the cached settings may be wrong. We have
to reload them after creating the QCoreApplication.
Task-number: QTBUG-38598
Change-Id: Idf5822be87aa0872b099480040acd7b49939a22c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
The same qt_timeout_value function was copied 5 times in qtbase's code,
so provide a common implementation in QIoDevice that can be used by
everyone.
This commit also corrects the remaining time calculation in
QProcess::waitForBytesWritten and QProcess::waitForFinished by using
this new function.
For QProcess::waitForFinished, if the process started within almost exactly
the timeout time passed to waitForFinished, msecs - stopWatch.elapsed() would
be -1, which is a special value.
Change-Id: I7b76ee6bae695eafdd02e3db03e2ff1e23a7f40c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
This function used to reside in QEventLoop in Qt 3 and was deprecated in
Qt 4. However this is useful for those who want to know how many event
loops are running within the thread so we just make it possible to get at
the already available variable.
Change-Id: Ia6a7d94ff443a1d1577633363694bc2fa8eca7e4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
Otherwise, we modify shared strings that happened to be rvalues.
Task-number: QTBUG-44706
Change-Id: Ia0aac2f09e9245339951ffff13c85bfc912f03d1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
When timezone support for QDateTime was added, we decided it was a good
idea to delay creating the QTimeZone object and checking that the time
is valid in that timezone (including for local time) until the user
requested that information. Unfortunately, QExplicitlySharedDataPointer
returns a non-const T* in operator->(), which meant we were accidentally
modifying the d pointer's contents in const methods, which in turn means
those const methods were not thread-safe when operating on the same
object.
This commit changes the d pointer to QSharedDataPointer, which is safer
in this regard and pointed out where the issues with constness were
located. Since we can't lazily calculate QTimeZone anymore, we need to
do it whenever the date, time or offset changes.
Task-number: QTBUG-43703
Change-Id: Ic5d393bfd36e48a193fcffff13b9686ef4ef1454
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
The compiler is wrong: the variable was used in the previous line.
However, the line had no effect for a type T that has a trivial
destructor, so the optimizer must have discarded the line and the
reference to the variable before the checker for used variables.
qsharedpointer_impl.h(247) : warning C4189: 'that' : local variable is initialized but not referenced
Change-Id: Ia0aac2f09e9245339951ffff13c8bde02bb46816
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Change-Id: I0928c4aaa0c308ee86b9611beeba3937b61e226c
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
It was already a user meta-type, so it only gets
promoted to internal.
[ChangeLog][QtCore] QPersistentModel index becomes an built-in
meta-type, including QVariant support.
Change-Id: I63d733d1eb66aa61691e7afce27fe7372a83ac00
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Q_ASSERT expands to:
do {} while (false && (<your condition>))
Which is fine for Clang as long as it's a macro. However, when you
compile as a preprocessed source, the macro is gone and Clang prints the
warning:
warning: code will never be executed [-Wunreachable-code]
do {} while (false && (f()));
^
note: silence by adding parentheses to mark code as explicitly dead
So add the parentheses that it's asking about.
The changelog refers to the full Q_ASSERT change from
ebef2ad136.
[ChangeLog][Important Behavior Changes] Q_ASSERT will now expand the
condition even in release mode when asserts are disabled, albeit in an
unreachable code path. This solves compiler warnings about variables and
functions that were unused in release mode because they were only used
in assertions. Unfortunately, codebases that hid those functions and
variables via #ifndef will need to remove the conditionals to compile
with Qt 5.5.
Change-Id: Ia0aac2f09e9245339951ffff13c8aa70229254d0
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Calling applicationName() in the destructor of a global static (e.g.
via QLockFile) was working when calling setApplicationName explicitly
but otherwise it would suddenly return an empty string.
This led to inconsistencies, the application name switching from
non-empty to empty at saving-on-destruction time.
There was already a global static, used when setting the app name
explicitly before construction. Use it now to store the app name
in all cases (explicitly set, or fallback).
Change-Id: I71d3a0c40158f8bfd022c385b198346a2594b1cb
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Failure to write into a successfully opened lock file left the
lock file with size 0 in the filesystem.
Task-number: QTBUG-44771
Change-Id: I561bf629b9f160174d658bf105be828f71d78ff9
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
And add tests for the GCC intrinsics and for std::atomic.
Task-number: QTBUG-43794
Change-Id: Ic5d393bfd36e48a193fcffff13b9b2dbaee80469
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
As QAIM and related classes are becoming more useful in the QML
environment, it makes sense to make these invokable.
Make the access API and the setData method scriptable. Avoid
making the structure changing APIs scriptable now to be conservative.
Export the ItemDataRole enum through the staticQtMetaObject to make
built-in roles available.
Change-Id: I47b1682e6fa8ba32c7314c73fc10a7bbaa6d1f98
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: Stephen Kelly <steveire@gmail.com>
QML code like this should be possible:
Text {
text: selModel.selection.contains(modelIndex) ? "blue" : "yellow"
}
If the selection is just a Q_INVOKABLE method, then all consumers need
to set up
Connections {
target: selModel
selectionChanged: foo()
}
That is obviously not the API we want (made more clear by the fact that
the signal is already perfectly named) because it is not declarative but
it can be. So, make it declarative by making selection a property.
Change-Id: Id1a05ae9b91e45e6d462bea4272b8740571e9fc3
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Since the new filename might not yet exist and DeleteFile() will fail if the
new file does not exist then MoveFile() should still be called.
Change-Id: Id4576ade079ad8593f824b7100bb0d94aec1fa0a
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
[ChangeLog][QtCore] Q_ENUMS and Q_FLAGS have been deprecated, and replaced
by Q_ENUM and Q_FLAG macros. These two new macros automatically register the
enum with the Qt metatype system, allowing automatic conversion to or from
string in QVariant, or to show the strings by QDebug operators. They also
enable the new QMetaEnum::fromType function.
Change-Id: I80cccd7ad3fc46b11aee2fe50681a8126debf972
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Bionic on x86 does not have an implementation of ffs(),
for some reason. The declaration is available in
strings.h, but causes a linker error. The toolchain has
a builtin version though, which can be used instead.
Change-Id: Iaf4c27542c1aabe88713842303251db44ae6ba86
Reviewed-by: Jani Heikkinen <jani.heikkinen@theqtcompany.com>
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
In the case of Windows Embedded Compact we need to delete the destination
file before doing the move if DeleteAndRenameFile has failed since
MoveFile will fail if the destination file exists.
Change-Id: I29d04c147bf8b6b5de850fd7da7bb3dc6a827f1d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Otherwise, values that are composed of others are not handled
correctly. For example,
Qt::Dialog|Qt::FramelessWindowHint (Qt::Dialog=0x2|Qt::Window)
is currently output as
"Window|FramelessWindowHint" since
Qt::Window matches first and its bits are removed from the flag value
so that Qt::Dialog in the next iteration no longer matches.
Change-Id: I67db5c977c75f887392aa8f345c5e6e9d82c5c26
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
it's documented to fall back to Prefix if qt.conf is present but
Settings is not specified.
Task-number: QTBUG-44644
Change-Id: I8ef6659cbdad51b2fb3c1075ea6f0af4997117ed
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Some older (or weird) Linux distributions don't have /etc/os-release, so
let's try to read /etc/lsb-release instead. If we find a file called
/etc/<distronamelowercase>-release and it's bigger than the pretty name
we read from /etc/lsb-release, use that.
Because the order of the keys changes between the two *-release files,
we can't do a sorted search anymore.
Change-Id: I1a800c709d3543699131ffff13c48532d5074f3c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Dirk Hohndel <dirk@hohndel.org>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp:1199: warning: Undocumented parameter 'model' in QItemSelectionModel::modelChanged()
qtbase/src/corelib/plugin/qpluginloader.cpp:420: warning: Can't link to 'staticPlugin()'
qtbase/src/gui/text/qtextdocument.cpp:1452: warning: No such parameter 'from' in QTextDocument::find()
qtbase/src/testlib/qtestcase.cpp:2770: warning: No documentation for 'QTest::qExtractTestData()'
Change-Id: I76758dbdf3ad7b0ae1f14de0407a6fde523827d0
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
On platforms which does not have at all sysv support, all
posix ipc tests and compilation failed because sysv
specific header files were included unconditionally.
Change-Id: I5713ace6daeb6e79f8794ce42b2b3dfa1b95ab2d
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Those QTimeZones failed to convert to other timezones because the data()
virtual function was never overridden and reimplemented. That meant all
QUtcTimeZonePrivate objects were *really* UTC, with no offset.
Task-number: QTBUG-44600
Change-Id: Ia0aac2f09e9245339951ffff13c5294bb783c674
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
The c2m() function which converts a const_iterator into an iterator
is a broken concept for an implicitly shared container such as
QVector, because the act of calling begin() as the starting
point already detaches and invalidates the c2m argument.
This could be fixed in c2m, but the bug wasn't even in c2m,
but in removeAll(), which called end() before c2m, so the c2m
argument was already invalidated when entering c2m.
The solution is to store the positions as indices instead of
iterators before calling the first detaching function.
Task-number: QTBUG-44592
Change-Id: I66cf4f1277e71148a4d5b5bbfb6a3369ad02db68
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Saves a couple dozen bytes in text size on optimized AMD64 builds.
Change-Id: Iefd9ca05a7b27f240836c1e1e00df569742fcd7f
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
As requested in review of 1d2efe1f27.
I didn't add a comma in front of the timeSpec() as the other fields
aren't separated by commas, either.
Change-Id: I54d74b7199ca7e46e28d2ceca22b02205e318c90
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
The property INTERFACE_LINK_LIBRARIES has a single value
and is configuration independent.
Change-Id: I9130b1d0444563335825e3806f693a39f65ca67d
Reviewed-by: Stephen Kelly <steveire@gmail.com>
Provide the file system type, the name (label) of
the volume and the path to the associated device
(if available).
Change-Id: I7dd0d314d3f757e0f57c8f82beaf8ee21da86167
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
There are no actual products of Haiku, so using
'unknown' (the default) is fine, otherwise the
file platform selector would be '+unix/+haiku/+haiku'
instead of '+unix/+haiku'.
Change-Id: Id7653098e20374885a50c09e2aaac9e6fcfc6efb
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reasons:
- the PlayBook NDK is old and its compiler does not keep up with newest
C++11 improvements inside Qt code.
- the PlayBook NDK diverges considerably from the standard BB10 NDK,
making it non-trivial to keep a common codebase.
- It's a defunct platform.
- Maintenance time is limited.
[ChangeLog][Platform Specific Changes] Removed BlackBerry PlayBook support.
Change-Id: Ia338aff55f4e4b747ebdecb0e1463a369a656c03
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Bernd Weimer <bernd.weimer@pelagicore.com>
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Commit 81a45e1f13 replaced QSets with
QLists in QTimeZone, but forgot to adapt the Android code.
This commit fixes it.
Change-Id: I8704a39c44a9dc74147a4bb99a6f5d1bea53afa1
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Even though the compiler on QNX supports C++11, the stdlib it ships
with is missing constexpr on many important functions. This is required
to make qtbase compile on QNX 6.6.
Change-Id: I59a4263483b1d94b9d2dceb947876e445f9662af
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
winbase.h defines them without __cdecl, so we shouldn't add them
ourselves to our forward declaration. Doing so results in errors if the
user changed the default calling convention when compiling Qt:
qatomic_msvc.h(126): error C2373: '_InterlockedIncrement' : redefinition; different type modifiers
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\intrin.h(242) : see declaration of '_InterlockedIncrement'
Task-number: QTBUG-44028
Change-Id: I1a800c709d3543699131ffff13c3d09fe53ba28b
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
tools\qstring.cpp(243) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
io\qdebug.cpp(287) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
io\qdebug.cpp(292) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
io\qdebug.cpp(305) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
io\qdebug.cpp(312) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
Change-Id: I20b92b0783f4859e9da83364b4ec86dd8bbd1c4c
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
The old snippet is incomplete because it misses an extra check
in the loop body that the line is not null.
Use the new readLine() overload to keep it simple.
Change-Id: Ie9f13291ca6ff6f546b81f100ce58d747f0dd12f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Same change as was already applied for count() and contains().
Change-Id: Ibd62e4b36e03741993ba33e730c9449ef19bff5f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
If QList data-layout-compatible with QVector and a C array, implement count()
via std::count() and contains() via std::find() and use const_pointer
instead of const_iterator as the iterators. This essentially makes
the QVector and QList implementations identical to each other, at least for
important cases such as QString.
To switch between the different implementations, use tag dispatching instead
of the previously used technique "use 'if' as if it were 'static if'", which
imposes accidental requirements on the element types (something that esp.
QVector is plagued with).
Change-Id: I6caf74442a22059676b5bf115a6089768f3a0952
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Add one tag class for each of QList's three different memory layouts
to QListData, and inherit QList<T>::MemoryLayout from exactly one of
them.
To simplify overloading, added tag classes that express the negation
of the two extreme poles of memory layout (C-compatible and heap),
too. The "missing" one could be added when needed, too.
Change-Id: I45ea603731499fd3fdfb37d60a0a98fb22ac15ec
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Instead of using a QString::arg() cascade, which creates tons of
temporaries, use good 'ol sprintf().
Effects on Linux GCC 4.9 stripped release builds:
text -216B
data +-0B
relocs +-0
Change-Id: I6ff551cb9f42e0c05a64f03a8e177fb527915481
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Instead of using a QString::arg() cascade, which creates tons of
temporaries, use good 'ol sprintf(). As a consequence, this
function is now inlined into all four callers and the total
executable size _still_ goes down:
Effects on Linux GCC 4.9 stripped release builds:
text -420B
data +-0B
relocs +-0
Change-Id: I10d6abd94b489db7c2f01dc5424f30a798602522
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
...by using var op= ... instead of var = var op ...
No change in executable code size.
Change-Id: I1c29ff6700f0f21be07768af8d002f0823c89fbd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
For any 1-bit flag:
bool(var & flag) <=> (var & flag) == flag
but gcc didn't seem to get it:
(Surprising) effects on Linux GCC 4.9 stripped release builds:
text -4936B (!!)
data +-0B
relocs +-0
It seems this enables some dead code detection, but
I must confess I don't quite understand how such a
small change can have such a dramatic effect on the
executable size, even after diffing the assembler
output.
Change-Id: Ia307fde0de16160ea51bbb3ed6c1ff203d4f9091
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The compiler-generated one is just as fine, more maintainable,
and doesn't inhibit moves (which probably doesn't matter here).
No change in executable code size.
Change-Id: Ideee493a5911808430d3e09e6eb07e91d7a19b12
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Compilers *really* don't like out parameters.
(Impressive) effects on Linux GCC 4.9 stripped release builds:
text -2512B
data +-0B
relocs +-0
Change-Id: I0fe370a438f7b82aaa9cc04ddd56e45a5969e7a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Get the captured texts once and use indexing into the QStringList
instead of repeatedly calling QRegExp::cap(n).
(Impressive) effects on Linux GCC 4.9 stripped release builds:
text -2876B
data +-0B
relocs +-0
Change-Id: I3a02eab1a691f31c30654cd89a0c030414b40de0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Compilers don't like out parameters.
Effects on Linux GCC 4.9 stripped release builds:
text -528B
data +-0B
relocs +-0
Change-Id: I32ee1a6c4388900bacfc6eb20feb4b81d71cb1f2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QSet, as a node-based container, requires one memory allocation per element
inserted. QList, as a contiguous-memory container (at least in the case of
a QByteArray payload), requires one memory allocation per container.
The higher lookup speed might still speak for using QSet, but there are only
two uses of the sets:
1. Checking for existence (or lack thereof) of timezone names.
For this, first generating a container full of data just to check for
existence of one item of data is extremely wasteful. The QTZPrivate
API should be extended to allow said lookup to be performed on the
native data store instead.
That leaves
2. Returning a sorted(!) list(!) from the public QTimeZone API.
There is no reason why, during the construction of those sorted
lists, the data should be held in a set. Instead, the well-known
technique of first cramming everything into a result container,
which is subsequently sorted and has its duplicates removed,
can be used here.
Saves more than 8K of text size on AMD64 stripped release builds.
Change-Id: I71c2298e94e02d55b0c9fb6f7ebeaed79a1fe2db
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We where allowing conversion from jobject to QJNIObject without taking
ownership of the jobject. Since we are managing the JNI environment we
should not allow conversions without having the option of taking
ownership of the local ref. This is now done by making the conversions
explicit, i.e., local refs are converted through
QJNIObjectPrivate::fromLocalRef() and global refs through the
QJNIObjectPrivate's jobject constructor.
This change breaks SC, but the API is private and no usage have been
found outside QtBase.
Change-Id: I3175f171699ec3f8e65144aaebc6246bc6e5bb4d
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
wait() was always returning immediately, regardless of the timeout
value, due to a timespec comparison from different clock types.
On Android 5.0, qt_gettime() uses the monotonic clock but the wait
condition was using the real time clock.
__pthread_cond_timedwait_relative() is not exported anymore in
Android 5.0, we therefore fall back to pthread_cond_timedwait().
Since the monotonic clock is now available, qt_gettime returns
a time based on it. The wait condition consequently needs
to use the monotonic clock.
Change-Id: Ie7cf909b81107edd7207c3c039b3ec1f5422303f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
The problem is that the operator<< was taking a non-const reference to the QDebug
object. This causes a problem as all other operator<< return a temporary.
Since every other roperator<< takes the QDebug by value, we should also take it by value
in this case.
Move the operator<< in qdebug.h because i don't want to #include qdebug.h from qobject.h
And move the qt_QMetaEnum_debugOperator to be in the corresponding .cpp
Task-number: QTBUG-44462
Change-Id: Ia01629224c58930c2997e767efc43de90d6309e2
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
The variable c is unsigned, so the second operand is unsigned,
constraing the -1 to be unsigned too and causing a change of sign.
Instead, cast the middle operations to int, as that's the return value
anyway.
error #68: integer conversion resulted in a change of sign
Change-Id: I1a800c709d3543699131ffff13c2fd79f14f8b43
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
The mime type stuff generates one of the biggest translation units in QtCore
due to the compressed 1.7MB freedesktop.org.xml resource.
With QT_NO_MIMETYPE, libQt5Core.so is almost 400Kb smaller
(4.8MB->4.4MB gcc 4.9 stripped release build)
Change-Id: I5339090994034355724ff4deddb64720e81baeaf
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Including math.h can pollute the default namespace, and break
some compilers if cmath versions of the method are declared as using.
Switching to C++ math functions also greatly simplifies handling of
float qreal as C++ automatically chooses the right method.
[ChangeLog][QtCore][QtMath] qmath.h no longer includes math.h, so any
sources depending on that indirect inclusion may fail to build.
Change-Id: I4d0e331dafba354ec05dc5052e61ef4ff8d387fe
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
In some documents, "{QObject}s" was used which didn't show up as link. This is
fixed by using "\l{QObject}s" instead.
Change-Id: I90dbd543790842b242a11f3f94a32d4273ebb38d
Reviewed-by: Martin Smith <martin.smith@digia.com>
Task-number: QTBUG-44390
Change-Id: I1a800c709d3543699131ffff13c19789a12dac0b
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: Richard J. Moore <rich@kde.org>
Instead of constructing a QString that describes the QDateTime
instance, stream the constituents of the string into QDebug
directly, using op<< for Q_ENUM, now that it's available.
Adapt test to new format of enums.
Effects on Linux GCC 4.9 stripped release builds:
text -1068B
data +-0B
relocs +-0
Change-Id: I1a5ce28904edd7d0f6c8d982fd41c52e3536e036
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
For PicturesLocation we add a second path pointing to
system assets. This url is understood by both QFile (using
a dedicated file engine), and QFileDialog, such that if
you point the dialog to the url, it will show a native
image picker dialog.
Change-Id: Ic79393440ab399ed4802cc6d84ec7ad36cbb9369
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
This also reduces the number of variables modified in each loop from two
(l and i) to one (just i) and avoids calling str.length() all the
time. Those should be no-op changes, but why not help the optimizer?
Change-Id: I8895c35f84d545dba45bffff13bc4147ae53eaab
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
This is a no-op change. It doesn't improve or worsen the code at all.
Change-Id: Ifd5273842370ca9bce0ed74f2f2d54d453797948
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QJsonObject requires that, since it does binary searches for the keys.
Change-Id: I8a7a116f51864cecb52fffff13bc24660c1cc1ac
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
backtrace_symbols is very slow because it tries to find the function
name from the address. In order to do that it needs to do a linear search
over all symbols. (Because the hash table goes the other way to find the
address from the symbol name)
The code is going to skip a few frames from QtCore. Since we cannot know
how many, we take a few more than necessary.
This patch changes the additional number of frames from 15 to 7
(Usually, there are about 5 suppressed frames).
We call backtrace_symbols several times for only one frame at the time.
So we are not looking up addresses we don't need after we printed the
right number of frames.
Calling many times backtrace_symbols means we do more malloc, but that's
negligible compared to the time we save. We anyway do a lot of other
allocations because of the regexp operations and such
So this patch is then saving about 10 frames lookups which allow to print
about 6 qDebug per miliseconds instead of only 2 when using %{backtrace depth=2}
Change-Id: Ic6ece2145d53dc570c80fcb0e4455dcef6bc40cb
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Don't use index-based iteration, but use iterators assigning
end() to a variable.
Change-Id: Ia87532349855fa3baa748b62224fc8adf3395dc0
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
It wasn't Q_DECL_EXPORT'ed, and there is no other user in QtCore.
Effects on Linux GCC 4.9 stripped release builds:
text -344B
data +-0B
relocs +-0
Change-Id: Iea0577d58057a145f87a00ec33995d03bacd4f88
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
...instead of rolling a new one on each use.
Effects on Linux GCC 4.9 stripped release builds:
text -156B
data +-0B
relocs +-0
Change-Id: I49e20ea859928d010990fc7a22545dbc1ef106ec
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Help the compiler by building the new status flags in a local
instead of a member variable. Enables value tracking for that
piece of data across several non-inline function calls, leading
to less redundant reads through this->.
Effects on Linux GCC 4.9 stripped release builds:
text -248B
data +-0B
relocs +-0
Change-Id: I2db21439464ad0fff8163a908de3b15df7c4ab6d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Apparently, determining that constant at compile time is a bit too much
work for GCC.
Effects on Linux GCC 4.9 stripped release builds:
text -276B
data +-0B
relocs +-0
Change-Id: I23144e64d57e3a2e1061e69b20f2b72575c273d8
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
The short month names all have length 3, so store them in a multi-
dimensional const char array instead of as a pointer table.
Effects on Linux GCC 4.9 stripped release builds:
text -196B
data -64B
relocs -12 (est., somehow relinfo.pl reports nonsense on QtCore)
Change-Id: If5f83e4f1eb5ba0b0f54b4144abec8b88fb8529f
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Use Haiku's BVolumeRoster API to provide information
about available mount points in QStorageInfo.
Change-Id: I058bbb5f3f33372edc55d3e51079d3e16815f29f
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
[ChangeLog][QtCore] Classes with the Q_GADGET function can now have properties and
invokable methods. QMetaMethod and QMetaProperty have new overloads that can be used with
a pointer to a gadget. The QMetaType system also gained knowledge of types with the
Q_GADGET macro
Change-Id: I017475f3809181c64fdd66f899e461ad27f5ae47
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
...where passing them by value was not intentional.
Change-Id: Ifd5036d57b41fddeeacfbd3f5890881605b80647
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
There are more than 1000 new entries since the table has been
generated the last time.
Some auto tests needed to be adjusted, because some entries in
the TLD table were removed while others were added.
Change-Id: I4ceec392836d2031dfef49a0c5a857c31b36bb4c
Reviewed-by: Richard J. Moore <rich@kde.org>
Adds conversion from QJsonArray and QJsonObject, and report missing
conversion failures for other QJsonValues.
Change-Id: Ic0c3a952657912401db877b068f7fcc3c08c94c2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Don't use index-based iteration, but use iterators.
Change-Id: If8dabd56ff880191bb53861e31bfa6a007802c9c
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Make sure from{JulianDay,MSecsSinceStartOfDay}() are in a constexpr'able form
by introducing new private ctors that allow formulating these functions as
single expressions.
Change-Id: Iee98edb74e63c32e98781b885bbb2c5ef5867fd9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This also enables NRVO in almost all callers (a macro
prevents it in one case), saving one default construction
and one (move) assignment per call.
Effects on Linux GCC 4.9 stripped release builds:
text -896B
data +-0B
relocs +-0
Change-Id: Id3cde01057baaa408c4cbf95d8d15eaeeeec1604
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Bring them into a constexpr'able form, by indexing into the
string literal directly instead of into a static const char[],
which is a declaration not allowed in a C++11 constexpr
function, then mark the functions constexpr.
Change-Id: I6b32a55bf24f85caeb980c0c855b8db0952f914c
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
To ensure QtCore can be rebuilt and get the exact same results,
it is undesirable to hardcode the build date into the library
Also deprecate QLibrayInfo::buildDate since it is relies on the build
date. QLibraryInfo::buildDate was originally meant for evaluation
licenses and such, but isn't used for that any longer.
Change-Id: I98e91ca3e55f877e6ac0e02de289dc29422fc9da
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Haiku supports the realpath implementation, but failed the
original #if check because of the wrong _POSIX_VERSION.
Change-Id: Ibad12de3bf7c1031b2dff3026b5c61e5afd3f3e6
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The _POSIX_VERSION declared in Haiku is 199009L, so we have
to enable support for setenv/unsetenv explicitly until
Haiku POSIX version is updated.
Change-Id: Ic22374253b0512a6a816257db83b0c649be0585d
Reviewed-by: Augustin Cavalier <waddlesplash@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
TabAllWidgets in QPlatformTheme is replaced by TabFocusBehavior.
[ChangeLog][QtGui] Expose TabFocusBehavior in QStyleHints
Change-Id: Iafaad7c6a5c6bc888d1e124e6ddcdbdc46f37b1c
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Paul Olav Tvete <paul.tvete@theqtcompany.com>
QSharedDataPointer is declared in qshareddata.h, not qsharedpointer.h
Change-Id: I4702f346ae01a8de07a6a9b50f951d2d4a89e1fb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Short version: fix build on QNX 6.5.0.
C++11 has been included on QNX 6.6.0's libcpp (Dinkum C++11 libs), while
continuing to be unsupported by the older QNX 6.5.0 toolchain.
This patch updates the mechanism for detecting the QNX's libcpp that is being
used during compile time, and also updates the list of C++11 features to be
disabled when QNX C++11 support is not present by adding
Q_COMPILER_UNICODE_STRINGS and Q_COMPILER_NOEXCEPT to it.
Change-Id: Iddb3626206a0d97d7103c1ff17ba0ae953e9a4b9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Instead of using QString::sprintf() (and converting the result back to QByteArray),
simply do the conversion from uchar to octal digits ourselves, using QtMiscTools.
Change-Id: I452c085b717c71609cd1a9465e31d90e6a0ba54b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The QTimeZonePrivate::Data type is larger than void*,
so holding them in QLists is horribly inefficient.
In addition, this type is held elsewhere in QVector,
so do that here, too.
As well as being faster, also saves 1.3K of text size on
optimized AMD64 builds.
Change-Id: I1ecf3ee0d955f6b19d2269204e2febc2ba2a9d9d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The implementation-private QTzType type is larger than void*,
so holding them in QLists is horribly inefficient.
Fix by holding it in QVector instead (it was already marked
as a primitive type before).
Text size grows by ca. 0.5K, but of course we got rid of all
those pesky heap allocations.
Change-Id: I3b70ed36fa9947b695ffc87c6f6199daa13cb7cd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The implementation-private QTzTransition type is larger than void*,
so holding them in QLists is horribly inefficient.
Fix by declaring it as a primitive types (it just contains
various integers) and holding it in QVector instead.
Also optimize parseTzTransitions() by preallocating the expected
number of transitions and streaming directly into the container,
resizing to the number of successful read items on error.
Saves roughly 0.5K in text size, too.
Change-Id: Iadec7a7b0721893e477e1778c9fb54afd6e49544
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Both QTzTransitionTime and QTzTransitionRule are larger than void*,
so holding them in QLists is horribly inefficient.
Fix by declaring them as primitive types (they just contains
various integers) and holding them in QVector instead.
While we're at it, make the equality operator for QTzTransitionRule
a constexpr, noexcept non-member, and provide the inequality operator,
too.
As well as being faster, this also saves 1.5K of text size on optimized
AMD64 builds.
Change-Id: I37100522f19556101c334625818dcf8c9a712dd9
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Previously, number() was implemented in terms of setNum().
That makes no sense whatsoever. It creates a temporary
value which requires the function to have an exception
table and an unwinding trampoline. It also introduces
a default constructor (in number()) and a copy assignment
(in setNum()), which breaks the chain of RVOs originating
in the QLocaleData functions.
Instead, implement setNum() in terms of number().
This makes setNum() such a premature pessimisation that
it's probably best to deprecate it in the near future.
There are not many users of it in qtbase left, and it
just pollutes the QString interface.
Effects on Linux GCC 4.9 stripped release builds:
text -708B
data +-0B
relocs +-0
Change-Id: I015c9ddb1ba9c98c2c55e38e54ef7894954ac4ca
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Effects on Linux GCC 4.9 stripped release builds:
text -2024B
data +-0B
relocs +-0
Change-Id: I1a315eb0f94ade2b40be62770c6ddcfc56da9ec0
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QString::vasprintf() deals just fine with a nullptr format string,
so don't check manually.
The main advantage of dropping the check is that in two of three
cases, we can replace assignment with initialization, thus saving
one default ctor and one (move) assignment.
Change-Id: I08dd24111cd0b92f21ef9f1c3e352ede0f66afe0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
asprintf() is a GNU extension that prints into a string it
allocates internally. Arguably, that's a better name for
QString::sprintf() since it also allocates memory internally.
The main problem with QString::sprintf() isn't that it's
dangerous to use (it is), but that it's not static. It also
returns a reference instead of by-value, breaking RVO.
There is a comment about removing this function completely
in Qt 6.0, but it remains the only printf-style function
in Qt that can allocate the target string, so it's vital
for logging, e.g., and the recommended replacement code
(http://linux.die.net/man/3/vsnprintf) is a nightmare.
So this patch adds static (v)asprintf() methods to replace it.
Further patches will fix up all in-tree callers and finally
deprecate the old (v)sprintf().
Test coverage is provided through the existing tests of
sprintf(), which is implemented in terms of asprintf().
Arguably, the in-tree callers show that QByteArray would
benefit from having an asprintf(), too, as most of the
in-tree code works around its lack with calls
to to{Latin1,Local8Bit}() after using the QString version.
[ChangeLog][QtCore][QString] Added asprintf(), vasprintf().
Change-Id: I8510f8d67c22230653ec0f1c252c01bc95f3c386
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Change-Id: If43dcc2b77fea5ae3ec40cc847467fc21fbd2c83
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Optional parameter DESTINATION to set target rcc file
Example:
qt5_add_binary_resources(GenerateFixture "fixture.qrc")
Task-number: QTBUG-41728
Change-Id: I9dc2fe8e7d5e9ad3873b89f75ab84a2a1b9d1d29
Reviewed-by: Stephen Kelly <steveire@gmail.com>
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Outdated header.LGPL removed (use header.LGPL21 instead)
Old header.LGPL3 renamed to header.LGPL3-COMM to match actual licensing
combination. New header.LGPL-COMM taken in the use file which were
using old header.LGPL3 (src/plugins/platforms/android/extract.cpp)
Added new header.LGPL3 containing Commercial + LGPLv3 + GPLv2 license
combination
Change-Id: I6f49b819a8a20cc4f88b794a8f6726d975e8ffbe
Reviewed-by: Matti Paaso <matti.paaso@theqtcompany.com>
Since argc/argv is modified by QCoreApplication-derived classes,
a copy of the original arguments is needed for comparison.
This fixes a crash in Qt Quick 2 tests (which use
the -qmljsdebugger=<port> argument) introduced
by dff18b8e80 .
Task-number: QTBUG-30330
Change-Id: Ic145ac923e0a7c504ab16602c8686268e4fd9700
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
execinfo.h is optional in uClibc. We need to check
__UCLIBC_HAS_BACKTRACE__ if uClibc is used.
Change-Id: Ie28be85b0b70472df1fc4a208581bb66ad34229e
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Unify the behavior of the different operator<< by always using
QDebugStateSaver (appending an optional space at exit), and making
sure that the space(), nospace() setting isn't 'leaked'.
Change-Id: I38e4f82fa6f7419d8b5edfc4dc37495af497e8ac
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
This version was based on Clang mainline between releases 3.1 and 3.2,
which means it has part of 3.2 features but not all. One of the missing
features is __builtin_bswap16.
Cherry-picked from ec9bc843d8 on 5.4
Change-Id: Ic5d393bfd36e48a193fcffff13b95664c7f664de
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Q_OS_WINRT was missing in the Windows-condition.
Condition was simplified through use of Q_OS_WIN.
Change-Id: I1a49d2d9c413dc2156930b6915e1675abcdde36f
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Currently angle() is used in place of angleTo() to describe the
difference with intersect. This patch fixes that.
Task-number: QTBUG-44309
Change-Id: Idfc521932247f76fe15fd980ff8e87e52feec1f1
Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com>
This basically inlines the call to parent(), which unconditionally
returns QModelIndex().
The change is binary compatible, because even though we newly
override a previously non-overridden virtual method, it doesn't
matter whether old code still calls the base class' method, as
the new implementation is semantically equivalent, at least if
subclasses don't inherit parent() (but why would they).
[ChangeLog][QtCore][Important Behavior Changes] QAbstractTableModel
and QAbstractListModel now reimplement sibling() to avoid calling
parent() (which returns a constant). Subclasses of these models
that override parent(), will likely also need to override sibling()
now.
Change-Id: I9e0cb5622a6d3826e40acaf0e0cd3fdea85cba2d
Reviewed-by: David Faure <david.faure@kdab.com>
So if you stream enum type into qDebug, it will show the name
of the enum value instead of the int
Change-Id: Iec5e826623353560319890d3e7c4ab97d0645f4a
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
these reflect the on-target paths (unlike /raw, which are host paths, just
without the -sysroot). this is necessary for anything deployment-related,
starting with RPATH.
Change-Id: I13d598995d0e4d6cb0dc1fc7938b8631cf3e3a95
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
this cuts down the bloat in the binaries and the binary patching
requirements in the installer.
as a side effect, the sysroot and makespecs are not binary patchable any
more as well, which is ok, as the installer does not do it anyway.
we now also warn if -[host]<foo>dir is not a subdir of -[host]prefix, as
putting things outside the prefix is anti-thetical (the obvious
exception being the (unix-only) -sysconfdir).
Change-Id: I878f0e71a4dfcfd55b2f8b1cf3045b98b502569b
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
QProcessPrivate::_q_processDied() was potentially called twice if there
was a slot connected to readyRead() that called processEvents(), because
the processFinishedNotifier was still enabled when readyRead() was
emitted.
This led to a null pointer access in findExitCode.
Change-Id: I4b796b81f050dc46bb9469602984accaa6ebfa28
Task-number: QTBUG-33731
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Check by comparing __argc/__argv whether a modified argv was
passed to QCoreApplication. If that is the case, build
QCoreApplication::arguments() from that argv instead of using
the command line.
[ChangeLog][Important Behavior Changes][QCoreApplication]
On Windows, QCoreApplication::arguments() now returns a list built
from argv on Windows as well if a modified argv was passed to the
class' constructor.
Task-number: QTBUG-30330
Task-number: QTSOLBUG-184
Change-Id: I2498bb554130e7bfaeada3aebe786dfdd0eb534d
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Use a static_cast instead. This is not 100% equivalent,
since it's missing remove_reference<>, which we don't want
to depend on and whose emulation in qtypetraits.h is missing
rvalue support.
That will be fixed in dev.
Change-Id: Ib03754c81c904932943d3a5415b54ff107f4719d
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
They need a special macro since they have a different metaobject
Change-Id: I2fa50b4b2e45990fb01771378765b42f03139183
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Classes should either use or not use override, otherwise it hurts
code readability.
Some inline keywords were removed because of an error with MSVC2010:
error C2216: 'override' cannot be used with 'inline'
Change-Id: I7276d5525a92281bd0d743beb11d0dc73441443b
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This requires being able to create a QItemSelectionModel
without specifiying its model, and also setting the model
later. Also, several classes, like QPersistentModelIndex,
need to be declared as meta-type.
Finally, and in order to introduce the 'model' property,
we need to have a type compatible getter. Hence the new,
non-const model() function.
Where needed, meta-type declarations have been removed from
auto-tests.
[ChangeLog][QtCore][Item Models] QItemSelectionModel
can now be created without a model and have one set later.
Change-Id: If49bed061a5d1012331f335ca7f6e3959ecd3f1c
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
We need PIE, doesn't matter if reduce_relocations is used or not
Change-Id: I9a359b9d4443a6059980cd4c48058132ec4267fe
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Instead of using QString::sprintf() (and converting the result back to QByteArray),
simply do the conversion from uchar to hex digits ourselves, using QtMiscUtils.
This function is a copy of a similar (but not identical) one
in qprocess_unix.cpp, but it's not clear whether they can or
should be merged (both are only conditionally compiled), so
this patch does not attempt to do so.
Change-Id: I0be87963f78a98e35a54c98c5fb444756c57b672
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
The warning was:
warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘long unsigned int’ [-Wformat=]
Change-Id: I37dc13ca864d408e02c69102ba5208f8bfe70980
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
The warnings were:
warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long int’ [-Wformat=] (2x)
Change-Id: If8c2e8fab7388cb4aa7d6e7ceb5faee531e16006
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
There were several leaked CFStringRefs in the new OS X bundle detection
code that is part of QFileSystemEngine.
Change-Id: Id0817e9692da411c7eb8287b9bf71b99ae28f960
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Samuel Gaist <samuel.gaist@edeltech.ch>
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
suppose we queried QT_INSTALL_DOCS/get. if no [EffectivePaths] existed,
we'd try [Paths]. if that didn't exist, either, we'd use the built-in,
which is relative. so we'd query QT_INSTALL_PREFIX ... without the /get,
which is technically wrong.
this doesn't currently matter, as all groups have the same built-in
defaults anyway, but it may (hint hint) matter later on.
Change-Id: I5a3746e80ca1bfbf2f37db3604cc351bddeacd94
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
it's not worth making things more complicated to remove the duplication of
one real LOC.
Change-Id: Iddbd0db7d0f81b80192b3980dbe2316b246a3b57
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
While it is not recommended by Microsoft to manually exit an
application, currently applications just hang when exiting main().
Instead when QCoreApplication::exit() is called use the CoreApplication
to properly invoke native Exit() and let the application completely shut
down.
Add a warning to notify developer about this non-standard behavior, as
usually the system is supposed to take care of suspending and closing.
Certification still passes for Windows RT and Windows Phone.
Task-number: QTBUG-43862
Change-Id: Ia34443ea75daaaeca0bee2a0c9fcc568c0659262
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
We were leaking memory in case setPattern was called multiple
times
Task-number: QTBUG-43893
Change-Id: Icd9c214edea064aeaeb6f92a9c62836238ccd344
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
There are currently only two users, but I have patches in
the pipeline which mark some other function noinline, so
proavtively centralize the ifdef'ery involved.
Change-Id: I1f02351fdc903d4e026089e12b8a976ed6a8d603
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The function used a QMap<int,int> to map the %n's to the index
in the args array.
By way of construction, the key was sorted in ascending order
while the values, initially all -1, were later reassigned to be
0...map.size()-1, ie. std::iota().
The only information this data structure stores is therefore
the sorted %n's. For that, a sorted vector is a vastly superior
data structure.
Go one step further and use QVarLengthArray to avoid
allocating any memory for the common case of just a few
placeholders.
As an artifact of the underlying refactoring, the management
of that data structure has been moved to a separate class,
ArgMapper.
Runtime for the following test from tst_qstring:
QString str("%1 %2 %3 %4 %5 %6 %7 %8 %9 foo %10 %11 bar"); // not timed
str = str.arg("one", "2", "3", "4", "5", "6", "7", "8", "9");
str = str.arg("ahoy", "there");
went down from 2.2us to 1.5us.
Change-Id: Ic552615fbac646b78ba05eb4e3215e63d202fd94
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reduce the number of (non-regex) splitString instantiations from
six to two by:
- Passing separators by (const QChar*, int) and using qFindString()
instead of indexOf()
- Passing QString as QStringRef when the output is QVector<QStringRef>.
Doing so also allows to drop the MidMethod template parameter since
QString::midRef() is no longer being used.
(Somewhat disappointing) effects on Linux GCC 4.9 stripped release builds:
text -500B
data +-0B
relocs +-0
Change-Id: Id89e2814d5f7da5170181d863167517943c2e0cd
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
01fc82e357 updated the code for ICC 15,
but it needs to be 15.0.1
Change-Id: Iba8d819ab9174d9dac07ffff13bbc26b9be46d53
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
pthread_getthreadid_np(3) is defined in pthread_np.h, not pthread.h.
Additionally, it was added during the FreeBSD 9 time frame, so add a
version check to use it only when we know it is present.
Change-Id: I4d716d9bfb189d10128b6d458a47045e130b51e8
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Commit b6191b16 ("Merge remote-tracking branch 'origin/5.4' into dev")
merged commit 350c60b ("Link against QMAKE_LIBS_EXECINFO when using
backtrace(3)") into the dev branch, but the conflict resolution left out
the actual line that changed LIBS_PRIVATE.
Change-Id: I6e716ed375abdc534a1f20e412ce7c56ee85d6c0
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
We expect floating-point math to be IEEE754 compliant.
Change-Id: I2b257177f2ef5fce38ac4d8fd76f746dc7b9fc15
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
ItemIsTristate is now again purely for enabling the automatic management
of the check state of QTreeWidgetItems, while ItemIsUserTristate is
separate from that and lets the user select the three states manually.
This restores the original behavior of ItemIsTristate for QTreeWidgetItems,
which got broken by letting the user cycle through the states too.
[ChangeLog][QtWidgets][QTreeWidget] Restored Qt 5.1 behavior of
QTreeWidgetItems with ItemIsTristate to enable automatic management
of the check state. User-editable tristate checkboxes are now enabled
by setting the new flag ItemIsUserTristate.
Task-number: QTBUG-40060
Change-Id: I341f5e983804d3b4f27982520bb6647f3014cccc
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@theqtcompany.com>
Due to a flaw in the internal API, QXmlStreamReader's internal buffering
would mistake a NUL byte in the input stream for EOF during parsing, but
wouldn't set atEnd == true because it hadn't yet processed all bytes.
This resulted in an infinite loop in QXmlStreamReaderPrivate::parse.
So, instead of returning zero (false) to indicate EOF, return -1 (but in
unsigned form, ~0, to avoid ICC warnings of change of sign). In turn,
this required enlarging a few variables to avoid ~0U becoming 0xffff,
which is a valid QChar (could happen if the input is a QString, not a
QIODevice).
Task-number: QTBUG-43513
Change-Id: If5badcfd3e4176b79517da1fd108e0abb93a3fd1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
The patch adds convenience functions for working on C++11's new char
width specific unicode strings u16string and u32string.
[ChangeLog][QtCore][QString] Added methods for convenient conversion
to and from std::u16string and std::u32string.
Change-Id: I67c082e4755c592d61daaaaa70c8867ef0b23dcb
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Due to a bug in the internal implementation of posix_spawnp on QNX, all file
descriptors with a value lower than the maximum file descriptor specified
in the file_actions structure are duplicated by default, ignoring the
FD_CLOEXEC flag. This includes all file descriptors that we are not working
with. So we add those file descriptors that have the FD_CLOEXEC flag to the
file_actions structure as close actions.
Change-Id: I316bc334addb46a4b84c199a69e9bd291ca706c5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Most posix_spawn implementations are done using fork(), so the only way
to report errors afer fork() is via a special exit code.
Reference: http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_spawn.html
Change-Id: I3a37f81b0cb278bb31e5cb83c87e6b4c034dbc19
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Replace the existing code in QProcess that dealt with signaling of child
processes exiting with forkfd and spawnfd. The previous code was
convoluted and hard to maintain, having shown its age in the last
year. I've been running it for a year and a half and the new
implementation is definitely an improvement.
This change replaces support for the QNX Neutrino spawn() call with the
POSIX version. We lose the ability to do setsid(), but we gain quite a
few ioctls() that were done to fill in the file descriptor mapping
structure. That's also the only OS for which we have the ability to
thread-safely chdir() before the call to spawnfd().
Another advantage is that forkfd does not require a dedicated thread
running to handle child processes exiting.
Change-Id: I5eb76821dfdb6a8ed2989d7f53b3c31e515c3174
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
This also brings in the harness to forkfd that uses QBasicAtomic
instead of the generic GCC atomics.
Change-Id: Id5488bf192db0027bc684956ade0bf6c640c9512
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The most common use case for QTextStream::readLine() is reading
a file line by line in a loop. The existing readLine() method
allocates new memory for each line, that results in a loss of
speed. The introduced overload can use already allocated memory.
Besides it allows you to not think about filesystem specifics.
The current QFile documentation suggests a separate way to read
files from /proc filesystem. With this overload it's possible
to use the same idiom in all cases:
QTextStream in(&file);
QString line;
while (in.readLine(&line)) {
process_line(line);
}
The idea was inspired by the blog post of Ivan Čukić:
http://ivan.fomentgroup.org/blog/2014/10/03/api-design-and-impact-on-the-performance-qt-vs-stl-example/
Change-Id: I0c62b4a52681870589bc099905e83ed69e03dd40
Reviewed-by: Martin Smith <martin.smith@digia.com>
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Only happens with active signal spy callbacks. The Connection object can
be deleted when returning from the slot here, so accessing it for the
method index for the signal end callback will access invalid memory.
Change-Id: I44643a171863c35a94e7a5ffa096fcaac5abd509
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
When creating a temporary directory but failing to set its permissions,
we need to remove the directory we created to avoid leaving 256 empty,
unused directories in the destination folder.
This happens on Android if you try creating a QTemporaryDir in the
download path on the sdcard.
Task-number: QTBUG-43352
Change-Id: Ic88fb7572f1abd65e5c7d8882b59c95f4b22ed72
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bec1854cc0 introduced a regression:
when sorting a tree model, children items would not follow the sorted
parents any more (they wouldn't be remapped correctly), resulting
in crashes.
So, the fix needs more reasoning; let's revert the fix,
but leave the original test around for any subsequent attempt, and
introduce a new test which looks for the right behavior when
sorting trees.
This commit partially reverts bec1854cc0.
Task-number: QTBUG-43827
Change-Id: Ic83ac53aef639f870f6c36a8b4b2992f5b485b13
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Volker Krause <volker.krause@kdab.com>
(cherry-picked from qtbase/e9ad46ed412987e3e46c5a641e5f30408b97ac90)
On Android the foreground activity can get intents
with onNewIntent. Those intents can not be received
in any other way. This is especially true in Android nfc.
This patch adds a way to receive those intents in Qt.
This patch heavily leans on the implementation of onActivityResult.
Change-Id: Ic4dca301f34afe9a528149c3653e545ed3265a3c
Reviewed-by: BogDan Vatra <bogdan@kde.org>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
This is like value(), but returns an iterator instead of the value().
[ChangeLog][QtCore][QAssociativeIterable] Added find().
Change-Id: I029fc8f91cef78f718d419587a2a50ffd2bf7632
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
QtCore now builds with no -Wnoexcept warnings
(that doesn't mean there aren't tons of functions
that should be marked noexcept, just that all
conditionally noexcept functions aren't noexcept(false)
just because of a forgotten noexcept elsewhere).
Change-Id: I10dacb6b9c9d41d3595fe2f306356d62d3d91c76
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This leaves the decision on whether to do unaligned stores to the
compiler, as opposed to forcing it by ourselves.
Since we're now implementing them using two calls, this invalidates the
compiler bug that triggered the #ifdef for Sun Studio (whatever that bug
was).
Change-Id: I4e494ca860a15b9427b2a3000921bf5d92cbb5ef
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Don't recommend a common value for maxlen, because we don't really
know it. Soften a statement about not applying QString::trimmed()
to the result because it may contain surrounding spaces.
Change-Id: Ie90db6f033cfcc0dff0ef6796ba115028bcaaa77
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
We forgot to initialize the tracker if create() was used.
Task-number: QTBUG-43696
Change-Id: Ic5d393bfd36e48a193fcffff13b740931ff2204b
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Commit 1259c5768e410361bcd8b5cf0c2057a2ebabda83 in qtdeclarative removed the
ability to create QWidgets in QML by giving them the correct parent, which
requires calling QWidget::setParent instead of QObject::setParent. This patch
introduces a hook that will allow QtQml to give widgets a proper parent.
Change-Id: I84c57ca5032582c43e405219343d55ac9cf2ffa0
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
Silence the MSVC warning that got introduced in commit 62b752b3a2:
warning C4333: '>>' : right shift by too large amount, data loss
qdebug.cpp(316) : see reference to function template instantiation 'void putEscapedString<uchar>(QTextStreamPrivate *,const Char *,int,bool)' being compiled
with
[
Char=uchar
]
qdebug.cpp(270) : warning C4333: '>>' : right shift by too large amount, data loss
Change-Id: If1ee20b741feae3287a8d6a11c202b4296d429fb
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Most of the QIODevice functions already have a locally cached
"sequential" flag. Make the rest of them follow this strategy.
This eliminates the need to use private caching members.
Change-Id: I0edb2c9b7c5f411c5bee25c425e7b40e3c9021d3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: hjk <hjk@theqtcompany.com>
On some Android devices, the realpath() implementation will return
the full path even if the path does not exist. This breaks the
expectation of the canonical path, which should be empty for
nonexistent paths. A few autotests failed due to this.
To work around it, we query existence before getting the
canonical path.
[ChangeLog][Android] Fixed canonical path for nonexistent paths on
some devices.
Change-Id: I5c1dabb8b8394694bc74d2a91912800aaff6b9e3
Task-number: QTBUG-43705
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Since the former is monotonic and we need a monotonic timer here.
Change-Id: I34325da4fe0317e12f64629a6eef6a80990c3e1a
Reviewed-by: Daniel Teske <daniel.teske@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>