diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2015-11-16 12:28:39 -0500 |
---|---|---|
committer | Dan Sinclair <dsinclair@chromium.org> | 2015-11-16 12:28:39 -0500 |
commit | 3f148915d12f54a946a0c0bf526162b79c39d650 (patch) | |
tree | 17a95f27c8a6a07356b68ac41b5fbcc0f2358ab9 /core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp | |
parent | 76c6d639f46c37ba955569f507201eb3f1b613fc (diff) | |
download | pdfium-chromium/2567.tar.xz |
Reland "Cleanup some numeric code.""chromium/2567
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 .
Diffstat (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp')
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
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, |