Skip to content

Commit acd6341

Browse files
committed
Fixes issue #57. Pass filenames to cppcheck via stdin rather than via arguments to circumvent the process argument limitation
1 parent a0af970 commit acd6341

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

com.googlecode.cppcheclipse.core/src/com/googlecode/cppcheclipse/core/command/AbstractCppcheckCommand.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.io.File;
77
import java.io.IOException;
88
import java.io.InputStream;
9+
import java.io.OutputStream;
910
import java.io.StringReader;
1011
import java.io.UnsupportedEncodingException;
1112
import java.text.SimpleDateFormat;
@@ -48,6 +49,7 @@ public abstract class AbstractCppcheckCommand {
4849

4950
protected final LineFilterOutputStream processStdOut;
5051
protected final LineFilterOutputStream processStdErr;
52+
protected InputStream processStdIn;
5153

5254
public AbstractCppcheckCommand(IConsole console, String[] defaultArguments,
5355
long timeout, String binaryPath) {
@@ -71,8 +73,7 @@ public AbstractCppcheckCommand(IConsole console, String[] defaultArguments,
7173
console.getConsoleOutputStream(false)), DEFAULT_CHARSET);
7274
processStdErr = new LineFilterOutputStream(new TeeOutputStream(err,
7375
console.getConsoleOutputStream(true)), DEFAULT_CHARSET);
74-
executor.setStreamHandler(new PumpStreamHandler(processStdOut,
75-
processStdErr));
76+
7677
}
7778

7879
public AbstractCppcheckCommand(IConsole console, String[] defaultArguments, String binaryPath) {
@@ -89,6 +90,10 @@ public AbstractCppcheckCommand(IConsole console, String[] defaultArguments, Stri
8990
public BufferedReader getErrorReader() throws UnsupportedEncodingException {
9091
return new BufferedReader(new StringReader(getError()));
9192
}
93+
94+
public void setProcessInputStream(InputStream inputStream) {
95+
processStdIn = inputStream;
96+
}
9297

9398
/**
9499
* The type is confusing but this gives the standard output of the process
@@ -212,6 +217,8 @@ protected CppcheckProcessResultHandler runInternal(
212217
if (singleArgumentsAfter != null) {
213218
cmdLine.addArguments(singleArgumentsAfter, false);
214219
}
220+
221+
executor.setStreamHandler(new PumpStreamHandler(processStdOut, processStdErr, processStdIn));
215222

216223
CppcheckProcessResultHandler resultHandler = new CppcheckProcessResultHandler();
217224

com.googlecode.cppcheclipse.core/src/com/googlecode/cppcheclipse/core/command/CppcheckCommand.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.googlecode.cppcheclipse.core.command;
22

33
import java.io.BufferedReader;
4+
import java.io.ByteArrayInputStream;
45
import java.io.File;
56
import java.io.IOException;
67
import java.net.URISyntaxException;
@@ -221,11 +222,16 @@ public void run(Checker checker, IProgressReporter progressReporter,
221222
filenames.add(FileUtils.relativizeFile(projectFolder, absoluteFile)
222223
.toString());
223224
}
224-
225+
226+
// read filenames from stdin (separated by "\n")
227+
String input = Joiner.on("\n").join(filenames);
228+
setProcessInputStream(new ByteArrayInputStream(input.getBytes(DEFAULT_CHARSET)));
229+
arguments.add("--file-list=-");
230+
225231
setWorkingDirectory(projectFolder);
226232
CppcheckProcessResultHandler resultHandler = runInternal(
227233
arguments.toArray(new String[0]), advancedArguments,
228-
filenames.toArray(new String[0]));
234+
null);
229235

230236
List<Problem> problems = new LinkedList<Problem>();
231237
try {

0 commit comments

Comments
 (0)