/*******************************************************************************
* Copyright (c) 2000, 2008 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.eclipse.cdt.utils.spawner.ProcessFactory;
/*
* Objdump
*/
public class Objdump {
String[] args;
public Objdump(String command, String param, String file) throws IOException {
String[] params;
if (param == null || param.length() == 0) {
params = new String[0];
} else {
// FIXME: This is wrong we have to check for quoted strings.
List<String> list = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(param);
while (st.hasMoreTokens()) {
list.add(st.nextToken());
}
params = new String[list.size()];
list.toArray(params);
}
init(command, params, file);
}
public Objdump(String command, String[] params, String file) throws IOException {
init(command, params, file);
}
public Objdump(String file) throws IOException {
this("objdump", new String[0], file); //$NON-NLS-1$
}
protected void init(String command, String[] params, String file) throws IOException {
if (params == null || params.length == 0) {
args = new String[] { command, "-C", "-x", "-S", file }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else {
args = new String[params.length + 1];
args[0] = command;
System.arraycopy(params, 0, args, 1, params.length);
}
}
public byte[] getOutput() throws IOException {
Process objdump = ProcessFactory.getFactory().exec(args);
StringBuffer buffer = new StringBuffer();
BufferedReader stdout = new BufferedReader(new InputStreamReader(objdump.getInputStream()));
char[] buf = new char[512];
int len;
while ((len = stdout.read(buf, 0, buf.length)) != -1) {
buffer.append(buf, 0, len);
}
stdout.close();
objdump.destroy();
return buffer.toString().getBytes();
}
public void dispose() {
}
}