From 36c2f08ba064bce2a447f9280bcf80177cb4b9b9 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sun, 13 May 2012 11:56:37 -0700 Subject: [PATCH] Clean up how the usage messages are printed This also fixes an OOM issue when trying to print the usage message on a terminal that doesn't report its width. --- .../src/main/java/org/jf/baksmali/main.java | 22 ++++++--------- smali/src/main/java/org/jf/smali/main.java | 28 +++++++------------ ...Formatter.java => SmaliHelpFormatter.java} | 17 +++++++---- 3 files changed, 30 insertions(+), 37 deletions(-) rename util/src/main/java/org/jf/util/{smaliHelpFormatter.java => SmaliHelpFormatter.java} (74%) diff --git a/baksmali/src/main/java/org/jf/baksmali/main.java b/baksmali/src/main/java/org/jf/baksmali/main.java index 7eef7a5e..7d38d6a5 100644 --- a/baksmali/src/main/java/org/jf/baksmali/main.java +++ b/baksmali/src/main/java/org/jf/baksmali/main.java @@ -32,7 +32,7 @@ import org.apache.commons.cli.*; import org.jf.dexlib.Code.Opcode; import org.jf.dexlib.DexFile; import org.jf.util.ConsoleUtil; -import org.jf.util.smaliHelpFormatter; +import org.jf.util.SmaliHelpFormatter; import java.io.File; import java.io.IOException; @@ -320,20 +320,16 @@ public class main { * Prints the usage message. */ private static void usage(boolean printDebugOptions) { - smaliHelpFormatter formatter = new smaliHelpFormatter(); - formatter.setWidth(ConsoleUtil.getConsoleWidth()); + SmaliHelpFormatter formatter = new SmaliHelpFormatter(); + int consoleWidth = ConsoleUtil.getConsoleWidth(); + if (consoleWidth <= 0) { + consoleWidth = 80; + } + + formatter.setWidth(consoleWidth); formatter.printHelp("java -jar baksmali.jar [options] ", - "disassembles and/or dumps a dex file", basicOptions, ""); - - if (printDebugOptions) { - System.out.println(); - System.out.println("Debug Options:"); - - StringBuffer sb = new StringBuffer(); - formatter.renderOptions(sb, debugOptions); - System.out.println(sb.toString()); - } + "disassembles and/or dumps a dex file", basicOptions, printDebugOptions?debugOptions:null); } private static void usage() { diff --git a/smali/src/main/java/org/jf/smali/main.java b/smali/src/main/java/org/jf/smali/main.java index 39a48f35..0700c794 100644 --- a/smali/src/main/java/org/jf/smali/main.java +++ b/smali/src/main/java/org/jf/smali/main.java @@ -37,14 +37,9 @@ import org.jf.dexlib.CodeItem; import org.jf.dexlib.DexFile; import org.jf.dexlib.Util.ByteArrayAnnotatedOutput; import org.jf.util.ConsoleUtil; -import org.jf.util.smaliHelpFormatter; +import org.jf.util.SmaliHelpFormatter; import java.io.*; -import java.nio.CharBuffer; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; import java.util.LinkedHashSet; import java.util.Properties; import java.util.Set; @@ -347,20 +342,17 @@ public class main { * Prints the usage message. */ private static void usage(boolean printDebugOptions) { - smaliHelpFormatter formatter = new smaliHelpFormatter(); - formatter.setWidth(ConsoleUtil.getConsoleWidth()); + SmaliHelpFormatter formatter = new SmaliHelpFormatter(); + + int consoleWidth = ConsoleUtil.getConsoleWidth(); + if (consoleWidth <= 0) { + consoleWidth = 80; + } + + formatter.setWidth(consoleWidth); formatter.printHelp("java -jar smali.jar [options] [--] [|folder]*", - "assembles a set of smali files into a dex file", basicOptions, ""); - - if (printDebugOptions) { - System.out.println(); - System.out.println("Debug Options:"); - - StringBuffer sb = new StringBuffer(); - formatter.renderOptions(sb, debugOptions); - System.out.println(sb.toString()); - } + "assembles a set of smali files into a dex file", basicOptions, printDebugOptions?debugOptions:null); } private static void usage() { diff --git a/util/src/main/java/org/jf/util/smaliHelpFormatter.java b/util/src/main/java/org/jf/util/SmaliHelpFormatter.java similarity index 74% rename from util/src/main/java/org/jf/util/smaliHelpFormatter.java rename to util/src/main/java/org/jf/util/SmaliHelpFormatter.java index 5783ec85..3d0137e4 100644 --- a/util/src/main/java/org/jf/util/smaliHelpFormatter.java +++ b/util/src/main/java/org/jf/util/SmaliHelpFormatter.java @@ -31,12 +31,17 @@ package org.jf.util; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Options; -public class smaliHelpFormatter extends HelpFormatter { +import java.io.PrintWriter; - public void smaliHelpFormatter() { - } - - public void renderOptions(StringBuffer sb, Options options) { - super.renderOptions(sb, getWidth(), options, getLeftPadding(), this.getDescPadding()); +public class SmaliHelpFormatter extends HelpFormatter { + public void printHelp(String cmdLineSyntax, String header, Options options, Options debugOptions) { + super.printHelp(cmdLineSyntax, header, options, ""); + if (debugOptions != null) { + System.out.println(); + System.out.println("Debug Options:"); + PrintWriter pw = new PrintWriter(System.out); + super.printOptions(pw, getWidth(), debugOptions, getLeftPadding(), getDescPadding()); + pw.flush(); + } } }