From 3f148915d12f54a946a0c0bf526162b79c39d650 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Mon, 16 Nov 2015 12:28:39 -0500 Subject: Reland "Cleanup some numeric code."" This reverts commit 0569ab0b11b723d9bca4ddd642b0cf8828c4bdd1. This changes the various comparisons of char >= '0' && char <= '9' and char < '0' || char > '9' to use std::isdigit checks. It also cleans up a handful of hex to digit conversions to call one common method. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1449873003 . --- .../src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp | 32 ++++++++++------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp') diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp index 588ab5dff6..57d1971889 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp @@ -9,6 +9,7 @@ #include "core/include/fpdfapi/fpdf_module.h" #include "core/include/fpdfapi/fpdf_parser.h" #include "core/include/fxcodec/fx_codec.h" +#include "core/include/fxcrt/fx_ext.h" #define _STREAM_MAX_SIZE_ 20 * 1024 * 1024 @@ -129,37 +130,32 @@ FX_DWORD HexDecode(const uint8_t* src_buf, } dest_buf = FX_Alloc(uint8_t, i / 2 + 1); dest_size = 0; - FX_BOOL bFirstDigit = TRUE; + bool bFirst = true; for (i = 0; i < src_size; i++) { uint8_t ch = src_buf[i]; if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t') continue; - int digit; - if (ch <= '9' && ch >= '0') { - digit = ch - '0'; - } else if (ch <= 'f' && ch >= 'a') { - digit = ch - 'a' + 10; - } else if (ch <= 'F' && ch >= 'A') { - digit = ch - 'A' + 10; - } else if (ch == '>') { - i++; + if (ch == '>') { + ++i; break; - } else { - continue; } - if (bFirstDigit) { + if (!std::isxdigit(ch)) + continue; + + int digit = FXSYS_toHexDigit(ch); + if (bFirst) dest_buf[dest_size] = digit * 16; - } else { + else dest_buf[dest_size++] += digit; - } - bFirstDigit = !bFirstDigit; + + bFirst = !bFirst; } - if (!bFirstDigit) { + if (!bFirst) dest_size++; - } return i; } + FX_DWORD RunLengthDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, -- cgit v1.2.3