From 730b66951947a136531e3cde1a828dca5fc64bb4 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Fri, 18 Jul 2008 12:37:34 +0000 Subject: [PATCH] avoid excessive StringBuffer.toString calls while waiting for a response string. PR 34464. Based on patch by Adam Blinkinsop. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@677887 13f79535-47bb-0310-9956-ffa450edef68 --- CONTRIBUTORS | 1 + contributors.xml | 4 ++++ .../apache/tools/ant/taskdefs/optional/net/RExecTask.java | 7 +++++-- .../apache/tools/ant/taskdefs/optional/net/TelnetTask.java | 7 +++++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index e45c14031..cf6336f70 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,5 +1,6 @@ Amongst other, the following people contributed to ant: +Adam Blinkinsop Aleksandr Ishutin Alexey Panchenko Alexey Solofnenko diff --git a/contributors.xml b/contributors.xml index 3c98eca29..160320e83 100644 --- a/contributors.xml +++ b/contributors.xml @@ -30,6 +30,10 @@ These are some of the many people who have helped Ant become so successful. + + Adam + Blinkinsop + Aleksandr Ishutin diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java index 0ca112396..a85b0224c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java @@ -203,14 +203,17 @@ public class RExecTask extends Task { InputStream is = this.getInputStream(); try { StringBuffer sb = new StringBuffer(); + int windowStart = -s.length(); if (timeout == null || timeout.intValue() == 0) { - while (sb.toString().indexOf(s) == -1) { + while (windowStart++ < 0 + || !sb.substring(windowStart).equals(s)) { sb.append((char) is.read()); } } else { Calendar endTime = Calendar.getInstance(); endTime.add(Calendar.SECOND, timeout.intValue()); - while (sb.toString().indexOf(s) == -1) { + while (windowStart++ < 0 + || !sb.substring(windowStart).equals(s)) { while (Calendar.getInstance().before(endTime) && is.available() == 0) { Thread.sleep(PAUSE_TIME); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java index 3dea2626e..a982764de 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java @@ -340,14 +340,17 @@ public class TelnetTask extends Task { InputStream is = this.getInputStream(); try { StringBuffer sb = new StringBuffer(); + int windowStart = -s.length(); if (timeout == null || timeout.intValue() == 0) { - while (sb.toString().indexOf(s) == -1) { + while (windowStart++ < 0 + || !sb.substring(windowStart).equals(s)) { sb.append((char) is.read()); } } else { Calendar endTime = Calendar.getInstance(); endTime.add(Calendar.SECOND, timeout.intValue()); - while (sb.toString().indexOf(s) == -1) { + while (windowStart++ < 0 + || !sb.substring(windowStart).equals(s)) { while (Calendar.getInstance().before(endTime) && is.available() == 0) { Thread.sleep(WAIT_INTERVAL);