diff --git a/src/main/org/apache/tools/ant/util/StringUtils.java b/src/main/org/apache/tools/ant/util/StringUtils.java index 641455de1..a1a201ae5 100644 --- a/src/main/org/apache/tools/ant/util/StringUtils.java +++ b/src/main/org/apache/tools/ant/util/StringUtils.java @@ -201,28 +201,43 @@ public final class StringUtils { * @since Ant 1.7 */ public static long parseHumanSizes(String humanSize) throws Exception { + long factor = 1L; + char s = humanSize.charAt(0); + switch (s) { + case '+': + humanSize = humanSize.substring(1); + break; + case '-': + factor = -1L; + humanSize = humanSize.substring(1); + break; + default: + break; + } //last character isn't a digit - if (!Character.isDigit(humanSize.charAt(humanSize.length() - 1))) { - char c = humanSize.charAt(humanSize.length() - 1); - long value = Long.valueOf( - humanSize.substring( - 0, humanSize.length() - 1)).longValue(); + char c = humanSize.charAt(humanSize.length() - 1); + if (!Character.isDigit(c)) { switch (c) { case 'K': - return value * KILOBYTE; + factor *= KILOBYTE; + break; case 'M': - return value * MEGABYTE; + factor *= MEGABYTE; + break; case 'G': - return value * GIGABYTE; + factor *= GIGABYTE; + break; case 'T': - return value * TERABYTE; + factor *= TERABYTE; + break; case 'P': - return value * PETABYTE; + factor *= PETABYTE; + break; default: - return value; + break; } - } else { - return Long.parseLong(humanSize); + humanSize = humanSize.substring(0, humanSize.length() - 1); } + return factor * Long.parseLong(humanSize); } }