From owner-svn-ports-all@freebsd.org Sat Feb 25 17:52:27 2017 Return-Path: Delivered-To: svn-ports-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 58B01CED79C; Sat, 25 Feb 2017 17:52:27 +0000 (UTC) (envelope-from rezny@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 28782D9F; Sat, 25 Feb 2017 17:52:27 +0000 (UTC) (envelope-from rezny@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v1PHqQ6m063948; Sat, 25 Feb 2017 17:52:26 GMT (envelope-from rezny@FreeBSD.org) Received: (from rezny@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v1PHqPZx063944; Sat, 25 Feb 2017 17:52:25 GMT (envelope-from rezny@FreeBSD.org) Message-Id: <201702251752.v1PHqPZx063944@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rezny set sender to rezny@FreeBSD.org using -f From: Matthew Rezny Date: Sat, 25 Feb 2017 17:52:25 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r434831 - in head/x11/konsole: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Feb 2017 17:52:27 -0000 Author: rezny Date: Sat Feb 25 17:52:25 2017 New Revision: 434831 URL: https://svnweb.freebsd.org/changeset/ports/434831 Log: Fixes for Konsole * Increase the limit of the disk-backed "unlimited" scrollback option via use of 64bit ints and file offset. This remedies the problem where the recent history was not stored once the file reached 2GB, which manifested as a blank window when scrolling up. * correct width of blinking cursor for wide characters (KDE bug #318453) Reviewed by: tcberner Approved by: swills (mentor) Obtained from: KDE (cursor fix) Differential Revision: https://reviews.freebsd.org/D9758 Added: head/x11/konsole/files/patch-src_History.cpp (contents, props changed) head/x11/konsole/files/patch-src_History.h (contents, props changed) head/x11/konsole/files/patch-src_TerminalDisplay.cpp (contents, props changed) Modified: head/x11/konsole/Makefile head/x11/konsole/files/patch-src_ProcessInfo.cpp Modified: head/x11/konsole/Makefile ============================================================================== --- head/x11/konsole/Makefile Sat Feb 25 17:39:02 2017 (r434830) +++ head/x11/konsole/Makefile Sat Feb 25 17:52:25 2017 (r434831) @@ -2,6 +2,7 @@ PORTNAME= konsole PORTVERSION= ${KDE4_VERSION} +PORTREVISION= 1 CATEGORIES= x11 kde kde-kde4 MAINTAINER= kde@FreeBSD.org Added: head/x11/konsole/files/patch-src_History.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/x11/konsole/files/patch-src_History.cpp Sat Feb 25 17:52:25 2017 (r434831) @@ -0,0 +1,214 @@ +* Revamp the file-based "unlimited" scrollback code to remove limits +* caused by 32bit file offsets. Use Qt's I/O functions which are +* buffered and use 64bit offsets. Use Qt's map instead of direct mmap +* to ensure consistency. Prevent wrap-around of readWriteBalance. +* +--- src/History.cpp.orig 2014-11-01 04:17:02 UTC ++++ src/History.cpp +@@ -25,9 +25,6 @@ + #include + #include + #include +-#include +-#include +-#include + + // KDE + #include +@@ -56,8 +53,7 @@ using namespace Konsole; + + // History File /////////////////////////////////////////// + HistoryFile::HistoryFile() +- : _fd(-1), +- _length(0), ++ : _length(0), + _fileMap(0), + _readWriteBalance(0) + { +@@ -66,7 +62,6 @@ HistoryFile::HistoryFile() + _tmpFile.setFileTemplate(tmpFormat); + if (_tmpFile.open()) { + _tmpFile.setAutoRemove(true); +- _fd = _tmpFile.handle(); + } + } + +@@ -83,23 +78,26 @@ void HistoryFile::map() + { + Q_ASSERT(_fileMap == 0); + +- _fileMap = (char*)mmap(0 , _length , PROT_READ , MAP_PRIVATE , _fd , 0); ++ if (_tmpFile.flush()) { ++ Q_ASSERT(_tmpFile.size() >= _length); ++ _fileMap = _tmpFile.map(0, _length); ++ } + + //if mmap'ing fails, fall back to the read-lseek combination +- if (_fileMap == MAP_FAILED) { ++ if (_fileMap == 0) { + _readWriteBalance = 0; +- _fileMap = 0; +- kWarning() << "mmap'ing history failed. errno = " << errno; ++ perror("HistoryFile::map failed"); + } + } + + void HistoryFile::unmap() + { +- int result = munmap(_fileMap , _length); +- Q_ASSERT(result == 0); +- Q_UNUSED(result); ++ Q_ASSERT(_fileMap != 0); + +- _fileMap = 0; ++ if (_tmpFile.unmap(_fileMap)) ++ _fileMap = 0; ++ ++ Q_ASSERT(_fileMap == 0); + } + + bool HistoryFile::isMapped() const +@@ -107,21 +105,21 @@ bool HistoryFile::isMapped() const + return (_fileMap != 0); + } + +-void HistoryFile::add(const unsigned char* buffer, int count) ++void HistoryFile::add(const char* buffer, qint64 count) + { + if (_fileMap) + unmap(); + +- _readWriteBalance++; ++ if (_readWriteBalance < INT_MAX) ++ _readWriteBalance++; + +- int rc = 0; ++ qint64 rc = 0; + +- rc = KDE_lseek(_fd, _length, SEEK_SET); +- if (rc < 0) { ++ if (!_tmpFile.seek(_length)) { + perror("HistoryFile::add.seek"); + return; + } +- rc = write(_fd, buffer, count); ++ rc = _tmpFile.write(buffer, count); + if (rc < 0) { + perror("HistoryFile::add.write"); + return; +@@ -129,30 +127,32 @@ void HistoryFile::add(const unsigned cha + _length += rc; + } + +-void HistoryFile::get(unsigned char* buffer, int size, int loc) ++void HistoryFile::get(char* buffer, qint64 size, qint64 loc) + { ++ if (loc < 0 || size < 0 || loc + size > _length) { ++ fprintf(stderr, "getHist(...,%lld,%lld): invalid args.\n", size, loc); ++ return; ++ } ++ + //count number of get() calls vs. number of add() calls. + //If there are many more get() calls compared with add() + //calls (decided by using MAP_THRESHOLD) then mmap the log + //file to improve performance. +- _readWriteBalance--; ++ if (_readWriteBalance > INT_MIN) ++ _readWriteBalance--; + if (!_fileMap && _readWriteBalance < MAP_THRESHOLD) + map(); + + if (_fileMap) { +- for (int i = 0; i < size; i++) +- buffer[i] = _fileMap[loc + i]; ++ memcpy(buffer, _fileMap + loc, size); + } else { +- int rc = 0; ++ qint64 rc = 0; + +- if (loc < 0 || size < 0 || loc + size > _length) +- fprintf(stderr, "getHist(...,%d,%d): invalid args.\n", size, loc); +- rc = KDE_lseek(_fd, loc, SEEK_SET); +- if (rc < 0) { ++ if (!_tmpFile.seek(loc)) { + perror("HistoryFile::get.seek"); + return; + } +- rc = read(_fd, buffer, size); ++ rc = _tmpFile.read(buffer, size); + if (rc < 0) { + perror("HistoryFile::get.read"); + return; +@@ -160,7 +160,7 @@ void HistoryFile::get(unsigned char* buf + } + } + +-int HistoryFile::len() const ++qint64 HistoryFile::len() const + { + return _length; + } +@@ -206,7 +206,7 @@ HistoryScrollFile::~HistoryScrollFile() + + int HistoryScrollFile::getLines() + { +- return _index.len() / sizeof(int); ++ return _index.len() / sizeof(qint64); + } + + int HistoryScrollFile::getLineLen(int lineno) +@@ -218,21 +218,18 @@ bool HistoryScrollFile::isWrappedLine(in + { + if (lineno >= 0 && lineno <= getLines()) { + unsigned char flag; +- _lineflags.get((unsigned char*)&flag, sizeof(unsigned char), (lineno)*sizeof(unsigned char)); ++ _lineflags.get((char*)&flag, sizeof(unsigned char), (lineno)*sizeof(unsigned char)); + return flag; + } + return false; + } + +-int HistoryScrollFile::startOfLine(int lineno) ++qint64 HistoryScrollFile::startOfLine(int lineno) + { + if (lineno <= 0) return 0; + if (lineno <= getLines()) { +- if (!_index.isMapped()) +- _index.map(); +- +- int res; +- _index.get((unsigned char*)&res, sizeof(int), (lineno - 1)*sizeof(int)); ++ qint64 res; ++ _index.get((char*)&res, sizeof(qint64), (lineno - 1)*sizeof(qint64)); + return res; + } + return _cells.len(); +@@ -240,23 +237,20 @@ int HistoryScrollFile::startOfLine(int l + + void HistoryScrollFile::getCells(int lineno, int colno, int count, Character res[]) + { +- _cells.get((unsigned char*)res, count * sizeof(Character), startOfLine(lineno) + colno * sizeof(Character)); ++ _cells.get((char*)res, count * sizeof(Character), startOfLine(lineno) + colno * sizeof(Character)); + } + + void HistoryScrollFile::addCells(const Character text[], int count) + { +- _cells.add((unsigned char*)text, count * sizeof(Character)); ++ _cells.add((char*)text, count * sizeof(Character)); + } + + void HistoryScrollFile::addLine(bool previousWrapped) + { +- if (_index.isMapped()) +- _index.unmap(); +- +- int locn = _cells.len(); +- _index.add((unsigned char*)&locn, sizeof(int)); ++ qint64 locn = _cells.len(); ++ _index.add((char*)&locn, sizeof(qint64)); + unsigned char flags = previousWrapped ? 0x01 : 0x00; +- _lineflags.add((unsigned char*)&flags, sizeof(unsigned char)); ++ _lineflags.add((char*)&flags, sizeof(unsigned char)); + } + + // History Scroll None ////////////////////////////////////// Added: head/x11/konsole/files/patch-src_History.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/x11/konsole/files/patch-src_History.h Sat Feb 25 17:52:25 2017 (r434831) @@ -0,0 +1,44 @@ +* Change to 64bit types for scrollback fixes in History.cpp +* +--- src/History.h.orig 2014-11-01 04:17:02 UTC ++++ src/History.h +@@ -46,9 +46,9 @@ public: + HistoryFile(); + virtual ~HistoryFile(); + +- virtual void add(const unsigned char* bytes, int len); +- virtual void get(unsigned char* bytes, int len, int loc); +- virtual int len() const; ++ virtual void add(const char* bytes, qint64 len); ++ virtual void get(char* bytes, qint64 len, qint64 loc); ++ virtual qint64 len() const; + + //mmaps the file in read-only mode + void map(); +@@ -59,12 +59,11 @@ public: + + + private: +- int _fd; +- int _length; ++ qint64 _length; + QTemporaryFile _tmpFile; + + //pointer to start of mmap'ed file data, or 0 if the file is not mmap'ed +- char* _fileMap; ++ uchar* _fileMap; + + //incremented whenever 'add' is called and decremented whenever + //'get' is called. +@@ -139,9 +138,9 @@ public: + virtual void addLine(bool previousWrapped = false); + + private: +- int startOfLine(int lineno); ++ qint64 startOfLine(int lineno); + +- HistoryFile _index; // lines Row(int) ++ HistoryFile _index; // lines Row(qint64) + HistoryFile _cells; // text Row(Character) + HistoryFile _lineflags; // flags Row(unsigned char) + }; Modified: head/x11/konsole/files/patch-src_ProcessInfo.cpp ============================================================================== --- head/x11/konsole/files/patch-src_ProcessInfo.cpp Sat Feb 25 17:39:02 2017 (r434830) +++ head/x11/konsole/files/patch-src_ProcessInfo.cpp Sat Feb 25 17:52:25 2017 (r434831) @@ -1,3 +1,13 @@ +* Fix handling of symlinked homedir +* +* Fix readArguments to get all instead of only the first +* +* Implement readEnvironment for FreeBSD +* +* Fix args parsing for remote (SSH) sessions +* +* Add %U (user@) for remote sessions +* --- src/ProcessInfo.cpp.orig 2014-11-01 04:17:02 UTC +++ src/ProcessInfo.cpp @@ -60,6 +60,9 @@ Added: head/x11/konsole/files/patch-src_TerminalDisplay.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/x11/konsole/files/patch-src_TerminalDisplay.cpp Sat Feb 25 17:52:25 2017 (r434831) @@ -0,0 +1,31 @@ +From 5fd1276b8d024a5a2670ff60753c9760a2ff7ca7 Mon Sep 17 00:00:00 2001 +From: Feng Chao +Date: Sun, 3 Aug 2014 21:18:52 +0800 +Subject: Fix Bug 318453 - Blinking cursor of "fullwidth" character are + "halfwidth" + +Calculate the character width at current blinking cursor. + +BUG: 318453 +--- + src/TerminalDisplay.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git src/TerminalDisplay.cpp src/TerminalDisplay.cpp +index 4d5bd8a..fd0f6b0 100644 +--- src/TerminalDisplay.cpp ++++ src/TerminalDisplay.cpp +@@ -1600,7 +1600,9 @@ void TerminalDisplay::blinkCursorEvent() + + void TerminalDisplay::updateCursor() + { +- QRect cursorRect = imageToWidget(QRect(cursorPosition(), QSize(1, 1))); ++ int cursorLocation = loc(cursorPosition().x(), cursorPosition().y()); ++ int charWidth = konsole_wcwidth(_image[cursorLocation].character); ++ QRect cursorRect = imageToWidget(QRect(cursorPosition(), QSize(charWidth, 1))); + update(cursorRect); + } + +-- +cgit v0.11.2 +