code: protected String[] prepareArguments(final CCTask task, final String outputDir, final String outputFile,
        final String[] sourceFiles, final CommandLineLinkerConfiguration config) {
  
      final String[] preargs = config.getPreArguments();
      final String[] endargs = config.getEndArguments();
      final String outputSwitch[] = getOutputFileSwitch(task, outputFile);
      int allArgsCount = preargs.length + 1 + outputSwitch.length + sourceFiles.length + endargs.length;
      if (this.isLibtool) {
        allArgsCount++;
      }
      final String[] allArgs = new String[allArgsCount];
      int index = 0;
      if (this.isLibtool) {
        allArgs[index++] = "libtool";
      }
      allArgs[index++] = getCommandWithPath(config);
      final StringBuffer buf = new StringBuffer();
  
      for (final String prearg : preargs) {
        allArgs[index++] = task.isDecorateLinkerOptions() ? decorateLinkerOption(buf, prearg) : prearg;
      }
  
      for (final String element : outputSwitch) {
        allArgs[index++] = element;
      }
      for (final String sourceFile : sourceFiles) {
        allArgs[index++] = prepareFilename(buf, outputDir, sourceFile);
      }
      for (final String endarg : endargs) {
        allArgs[index++] = task.isDecorateLinkerOptions() ? decorateLinkerOption(buf, endarg) : endarg;
      }
  
      return allArgs;
    }
docs: Prepares argument list for exec command. Will return null
  if command line would exceed allowable command line buffer.
  
  @param task
  compilation task.
  @param outputFile
  linker output file
  @param sourceFiles
  linker input files (.obj, .o, .res)
  @param config
  linker configuration
  @return arguments for runTask