OSDN Git Service
Ivailo Monev [Fri, 19 Nov 2021 04:44:46 +0000 (06:44 +0200)]
do not deep-copy objects when iterating in variantToString() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 19 Nov 2021 00:41:19 +0000 (02:41 +0200)]
potential fix for the random tst_QCompleter::QTBUG_14292_filesystem() fails
upstream commits:
https://github.com/qt/qtbase/commit/
65fa00b6bef60552ccc9638f14b6209c01797229
https://github.com/qt/qtbase/commit/
54bd1102ad14b5c1c3112ebc98435877cc2a5c7f
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 23:34:29 +0000 (01:34 +0200)]
wait maximum 50ms on the first try from QTRY_VERIFY() and QTRY_COMPARE()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 23:33:25 +0000 (01:33 +0200)]
de-duplicate QTRY_COMPARE() macro
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 21:38:40 +0000 (23:38 +0200)]
do not hard-copy QRect objects when iterating in QRegion::intersects() and QRasterWindowSurface::beginPaint()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 21:21:33 +0000 (21:21 +0000)]
remove unused QT_NO_UNSETENV configuration option [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 20:06:07 +0000 (22:06 +0200)]
do not force C++ standard via USE_LANGUAGES
fixes build on Linux host
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 18:26:33 +0000 (20:26 +0200)]
replace QVarLengthArray<T>() with QSTACKARRAY() in QHeaderView::moveSection()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 18:15:00 +0000 (20:15 +0200)]
replace QVarLengthArray<T>() with QSTACKARRAY() in QString::replace()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 18 Nov 2021 08:29:10 +0000 (10:29 +0200)]
add QColumnView test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 16 Nov 2021 04:08:31 +0000 (06:08 +0200)]
update translations [ci skip]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 18:39:27 +0000 (20:39 +0200)]
add note about watching non-existing directories [ci skip]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 18:28:54 +0000 (20:28 +0200)]
test signal emission for non-existing directories and files
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 17:24:44 +0000 (19:24 +0200)]
include directories entries from QStatInfo::dirInfos() but do not recurse into them
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 09:33:08 +0000 (11:33 +0200)]
QFileSystemWatcher documentation update
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 07:31:42 +0000 (09:31 +0200)]
merge QFileSystemWatcherEngine into QFileSystemWatcherEngineUnix
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 07:23:41 +0000 (09:23 +0200)]
reusable non-VFS (QRC) QFileInfo/QFileSystemWatcherEngineUnix::FileInfo alternative
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 05:09:06 +0000 (07:09 +0200)]
adjust tst_QFileSystemWatcher::nonExistingFile() test case
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 04:46:57 +0000 (06:46 +0200)]
poll for changes from QFileSystemWatcher rather than using native APIs
to make it possible to emit signals for non-existing directories and files
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 15 Nov 2021 03:59:45 +0000 (05:59 +0200)]
remove redundant return statement at the end of QDBusConnectionPrivate::deliverCall()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 12 Nov 2021 17:06:43 +0000 (19:06 +0200)]
mark type name to type table in ProcessAST::visit() as static
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 12 Nov 2021 16:57:31 +0000 (18:57 +0200)]
typo
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 10 Nov 2021 21:11:26 +0000 (23:11 +0200)]
assume qmldir files do not contain unicode characters
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 10 Nov 2021 21:10:30 +0000 (23:10 +0200)]
construct filepath string via QString::fromLocal8Bit() for consistency in QDeclarativeDirParser::parse()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 10 Nov 2021 21:07:49 +0000 (23:07 +0200)]
remove unused qmldir section types support
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 3 Nov 2021 13:08:34 +0000 (15:08 +0200)]
typo
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 2 Nov 2021 11:31:44 +0000 (13:31 +0200)]
allocate buffer for realpath() on the stack
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 2 Nov 2021 11:26:02 +0000 (13:26 +0200)]
pass the string size to QByteArray constructor in QFileSystemEngine::getLinkTarget()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 2 Nov 2021 01:13:04 +0000 (03:13 +0200)]
do not copy color in QDeclarativeRectangle::generateRoundedRect(), QDeclarativeRectangle::generateBorderedRect() and QDeclarativeRectangle::drawRect()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 2 Nov 2021 01:08:46 +0000 (03:08 +0200)]
do not convert and copy the color in QtColorButton::paintEvent() and QtColorButtonPrivate::generatePixmap()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 2 Nov 2021 00:54:14 +0000 (02:54 +0200)]
copy color as-is in QtColorLinePrivate::paintEvent()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 23:28:16 +0000 (01:28 +0200)]
assume qint64 and ssize_t are the same in QNativeSocketEnginePrivate::nativeWrite()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 23:04:04 +0000 (01:04 +0200)]
ifdef spaghetti in QNativeSocketEnginePrivate::option()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 22:57:45 +0000 (00:57 +0200)]
regardless of socket type set SO_REUSEADDR for reusable address socket option
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 22:45:55 +0000 (00:45 +0200)]
move Q_VOID definition to qcorecommon_p header
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 22:38:25 +0000 (00:38 +0200)]
do not construct/cast twice isprint() argument
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 22:33:07 +0000 (00:33 +0200)]
pass the buffer size to QByteArray constructor in qt_prettyDebug() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 22:32:35 +0000 (00:32 +0200)]
replace double with single space in FreeBSD Makefile
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 21:44:07 +0000 (23:44 +0200)]
include required system headers in tst_qhostaddress source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 21:33:43 +0000 (23:33 +0200)]
include netinet/in system header for sockaddr_in, sockaddr_in6 and IPPROTO_IP in qnetworkinterface_unix source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 1 Nov 2021 21:00:07 +0000 (23:00 +0200)]
remove redundant header inclusions in qnet_unix_p header
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 9 Oct 2021 07:46:35 +0000 (10:46 +0300)]
format and indent qhostaddress source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 9 Oct 2021 07:37:35 +0000 (10:37 +0300)]
pass the string size to QString constructor in QNetworkInterfacePrivate::makeHwAddress()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 9 Oct 2021 07:25:29 +0000 (10:25 +0300)]
add missing break in QLocalSocketPrivate::_q_connectToSocket()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 9 Oct 2021 07:24:04 +0000 (10:24 +0300)]
add missing break in QLocalSocketPrivate::errorOccurred()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 9 Oct 2021 07:22:34 +0000 (10:22 +0300)]
remove unused ieeefp header inclusion in tst_qstringref source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 9 Oct 2021 07:11:44 +0000 (10:11 +0300)]
use proper QString constructor in addressFromSockaddr() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 20:16:05 +0000 (23:16 +0300)]
do not reference color table when it is not going to be fixed in fix_color_table() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 19:03:39 +0000 (22:03 +0300)]
simplify QX11PixmapData::fromImage() by converting the source image
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 17:49:50 +0000 (20:49 +0300)]
do not reference the image in QX11PixmapData::fromImage()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 08:15:18 +0000 (11:15 +0300)]
test QJsonDocument reference comparison
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 08:10:48 +0000 (11:10 +0300)]
avoid implicit QByteArray from char array construct in QTest::qExec()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 07:39:15 +0000 (10:39 +0300)]
include qcorecommon_p header for QSTACKARRAY() in qpaintengine_raster source file
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 07:05:38 +0000 (10:05 +0300)]
replace hardcoded value with enum in QWizardPrivate::updateButtonLayout()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 06:58:22 +0000 (09:58 +0300)]
do not (possibly) pre-allocate more than enough in QTextEngine::itemize()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 06:56:28 +0000 (09:56 +0300)]
replace QVector<T>() with QVarLengthArray<T>() in QTextDocumentLayoutPrivate::layoutTable()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 06:45:33 +0000 (09:45 +0300)]
replace QVarLengthArray<T>() with QSTACKARRAY() in QRasterPaintEngine::drawPolygon()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 06:40:23 +0000 (09:40 +0300)]
replace QVarLengthArray<T>() with QSTACKARRAY() in QGridLayoutRowData::calculateGeometries()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 06:30:04 +0000 (09:30 +0300)]
construct QVarLengthArray<T>() with the right size instead of resizing it in QDBusMetaObjectGenerator::write()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 05:37:57 +0000 (08:37 +0300)]
add QCheckBox test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 05:31:00 +0000 (08:31 +0300)]
add QCache test
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 04:51:49 +0000 (07:51 +0300)]
drop QT_NO_USE_FSEEKO configuration option [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Mon, 4 Oct 2021 04:38:47 +0000 (07:38 +0300)]
use correct type for socket length variable in multicastMembershipHelper() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 19:02:27 +0000 (22:02 +0300)]
qCount<T,T>() compat
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 18:55:54 +0000 (21:55 +0300)]
qFill<T,T>() fix
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 08:20:06 +0000 (11:20 +0300)]
return DH pointer for DH algorithm from QSslKey::handle()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 07:48:01 +0000 (10:48 +0300)]
replace QVarLengthArray<T>() with QSTACKARRAY() in QSslSocketBackendPrivate::transmit()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 07:16:16 +0000 (10:16 +0300)]
correct getpeername() return value check
upstream commit:
https://github.com/qt/qtbase/commit/
75a9bd2a4f637fb8e8e3dc4609a7045547119e80
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 07:03:38 +0000 (10:03 +0300)]
construct color from enum in QDeclarativePen constructor
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sun, 3 Oct 2021 07:03:07 +0000 (10:03 +0300)]
remove SQL component [ci reset]
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 2 Oct 2021 18:00:23 +0000 (21:00 +0300)]
use proper type for written bytes count in QFileSystemEngine::copyFile()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Sat, 2 Oct 2021 06:39:07 +0000 (09:39 +0300)]
do not modify the circle points array in addCircle() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 1 Oct 2021 18:07:04 +0000 (21:07 +0300)]
use correct type for return value in qt_safe_sendto()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 1 Oct 2021 09:40:13 +0000 (12:40 +0300)]
remove unused QNetworkAccessBackend::processRequestSynchronously() method
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 1 Oct 2021 07:16:07 +0000 (10:16 +0300)]
use QT_BUFFSIZE as pending datagram size buffer size
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 23:44:38 +0000 (02:44 +0300)]
use maximum backlog queue length value as listen() argument
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 23:29:19 +0000 (02:29 +0300)]
replace QVarLengthArray<T>() with QSTACKARRAY() in QNativeSocketEnginePrivate::nativePendingDatagramSize()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 23:12:51 +0000 (02:12 +0300)]
add qt_safe_recvfrom() function
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 21:58:39 +0000 (00:58 +0300)]
do not undefine socket() and accept() from qnet_unix_p header
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 21:52:40 +0000 (00:52 +0300)]
check for EOPNOTSUPP in QNativeSocketEnginePrivate::nativeAccept()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 21:46:04 +0000 (00:46 +0300)]
do not set socket error twice in EAGAIN case in QNativeSocketEnginePrivate::nativeConnect() and correct the errors for EALREADY and EAGAIN
strerror(EAGAIN) returns "Resource temporarily unavailable", strerror(EALREADY)
returns "Operation already in progress" which is deffinetly not invalid
socket error ("Invalid socket descriptor")
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 21:27:31 +0000 (00:27 +0300)]
check for EOPNOTSUPP in QNativeSocketEnginePrivate::nativeListen()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 21:08:46 +0000 (00:08 +0300)]
Revert "avoid QString reallocation in QPrintPreviewDialogPrivate::_q_zoomFactorChanged()"
This reverts commit
598e73bd348804b9ffa652306d083fb747d5cbff.
Ivailo Monev [Thu, 30 Sep 2021 17:06:00 +0000 (20:06 +0300)]
add select() vs poll() benchmark
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 16:16:44 +0000 (19:16 +0300)]
pre-calculate print preview factors
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 16:12:11 +0000 (19:12 +0300)]
avoid QString reallocation in QPrintPreviewDialogPrivate::_q_zoomFactorChanged()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 16:02:25 +0000 (19:02 +0300)]
remove unused QPODVector::insertBlank() method
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 16:01:59 +0000 (19:01 +0300)]
use Q_DISABLE_COPY() macro to disable copying of QPODVector
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Thu, 30 Sep 2021 00:46:57 +0000 (03:46 +0300)]
indent QApplication::x11ProcessEvent()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 28 Sep 2021 22:45:46 +0000 (01:45 +0300)]
build fix for the case when QPROCESS_DEBUG is defined
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 28 Sep 2021 22:43:45 +0000 (01:43 +0300)]
detect invalid socket notifiers via poll()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 28 Sep 2021 21:32:53 +0000 (00:32 +0300)]
use correct type for buffer in QProcessPrivate::processStarted()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Tue, 28 Sep 2021 21:20:19 +0000 (00:20 +0300)]
mark QEventDispatcherX11::select() reimplementaion as final
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Fri, 24 Sep 2021 13:41:23 +0000 (16:41 +0300)]
check for errors in all pollfd structs from qt_safe_poll()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 22 Sep 2021 22:56:29 +0000 (01:56 +0300)]
get rid of QProcessInfo struct
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 22 Sep 2021 18:45:17 +0000 (21:45 +0300)]
replace select() with poll() in QProcessManager::run()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 22 Sep 2021 16:45:54 +0000 (19:45 +0300)]
generalize qt_safe_poll() implementation and use it QProcessPrivate::waitForStarted()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 22 Sep 2021 15:52:51 +0000 (18:52 +0300)]
replace select() with poll() in network component
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 22 Sep 2021 14:17:54 +0000 (17:17 +0300)]
use single variable assignment in QNativeSocketEnginePrivate::nativeWrite()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
Ivailo Monev [Wed, 22 Sep 2021 13:35:32 +0000 (16:35 +0300)]
plug memory leaks in tst_QStandardItemModel::removeRowsAndColumns()
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>