Page MenuHomeFreeBSD

D35552.id107257.diff
No OneTemporary

D35552.id107257.diff

diff --git a/sys/dev/vt/vt_buf.c b/sys/dev/vt/vt_buf.c
--- a/sys/dev/vt/vt_buf.c
+++ b/sys/dev/vt/vt_buf.c
@@ -41,6 +41,7 @@
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/reboot.h>
+#include <sys/ctype.h>
#include <dev/vt/vt.h>
@@ -742,7 +743,7 @@
ei = e.tp_row * vb->vb_scr_size.tp_col + e.tp_col;
/* Number symbols and number of rows to inject \n */
- sz = ei - si + ((e.tp_row - s.tp_row) * 2);
+ sz = ei - si + (e.tp_row - s.tp_row);
return (sz * sizeof(term_char_t));
}
@@ -750,7 +751,7 @@
void
vtbuf_extract_marked(struct vt_buf *vb, term_char_t *buf, int sz)
{
- int i, r, c, cs, ce;
+ int i, j, r, c, cs, ce;
term_pos_t s, e;
/* Swap according to window coordinates. */
@@ -769,15 +770,29 @@
for (r = s.tp_row; r <= e.tp_row; r++) {
cs = (r == s.tp_row)?s.tp_col:0;
ce = (r == e.tp_row)?e.tp_col:vb->vb_scr_size.tp_col;
- for (c = cs; c < ce; c++) {
+
+ /* Copy characters from terminal window. */
+ j = i;
+ for (c = cs; c < ce; c++)
buf[i++] = vb->vb_rows[r][c];
+
+ /* Trim trailing whitespace from each line, if any. */
+ for (; i != j; i--) {
+ if (isspace((unsigned char)buf[i - 1]))
+ buf[i - 1] = '\0';
+ else
+ break;
}
+
/* Add new line for all rows, but not for last one. */
- if (r != e.tp_row) {
- buf[i++] = '\r';
+ if (r != e.tp_row)
buf[i++] = '\n';
- }
}
+ /* Zero rest of expected buffer size, if any. */
+ while ((i * sizeof(buf[0])) < sz)
+ buf[i++] = '\0';
+
+ MPASS((i * sizeof(buf[0])) == sz);
}
int
diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -2287,8 +2287,7 @@
VD_PASTEBUFSZ(vd) = len;
}
/* Request copy/paste buffer data, no more than `len' */
- vtbuf_extract_marked(&vw->vw_buf, VD_PASTEBUF(vd),
- VD_PASTEBUFSZ(vd));
+ vtbuf_extract_marked(&vw->vw_buf, VD_PASTEBUF(vd), len);
VD_PASTEBUFLEN(vd) = len;

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 29, 9:08 PM (7 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32393218
Default Alt Text
D35552.id107257.diff (1 KB)

Event Timeline