/* * * Copyright 2001-2004 The Ant-Contrib project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.antcontrib.cpptasks.compiler; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Vector; import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.ExecuteStreamHandler; /** * Implements ExecuteStreamHandler to capture the output of a Execute to an * array of strings * * @author Curt Arnold */ public class CaptureStreamHandler implements ExecuteStreamHandler { /** * Runs an executable and captures the output in a String array * * @param cmdline * command line arguments * @return output of process */ public static String[] run(String[] cmdline) { CaptureStreamHandler handler = new CaptureStreamHandler(); Execute exec = new Execute(handler); exec.setCommandline(cmdline); try { int status = exec.execute(); } catch (IOException ex) { } return handler.getOutput(); } private InputStream errorStream; private InputStream fromProcess; public CaptureStreamHandler() { } public String[] getOutput() { String[] output; if (fromProcess != null) { Vector lines = new Vector(10); try { BufferedReader reader = new BufferedReader( new InputStreamReader(errorStream)); for (int i = 0; i < 2; i++) { for (int j = 0; j < 100; j++) { String line = reader.readLine(); if (line == null) { reader = new BufferedReader(new InputStreamReader( fromProcess)); break; } lines.addElement(line); } } } catch (IOException ex) { } output = new String[lines.size()]; lines.copyInto(output); return output; } output = new String[0]; return output; } /** * Install a handler for the error stream of the subprocess. * * @param is * input stream to read from the error stream from the * subprocess */ public void setProcessErrorStream(InputStream is) throws IOException { errorStream = is; } /** * Install a handler for the input stream of the subprocess. * * @param os * output stream to write to the standard input stream of the * subprocess */ public void setProcessInputStream(OutputStream os) throws IOException { os.close(); } /** * Install a handler for the output stream of the subprocess. * * @param is * input stream to read from the error stream from the * subprocess */ public void setProcessOutputStream(InputStream is) throws IOException { fromProcess = is; } /** * Start handling of the streams. */ public void start() throws IOException { } /** * Stop handling of the streams - will not be restarted. */ public void stop() { } }