Cleanup some numeric code.
[pdfium.git] / core / src / fpdfapi / fpdf_parser / fpdf_parser_decode.cpp
index 1815d40..eaff29d 100644 (file)
@@ -8,6 +8,7 @@
 #include "../../../include/fpdfapi/fpdf_parser.h"
 #include "../../../include/fpdfapi/fpdf_module.h"
 #include "../../../include/fxcodec/fx_codec.h"
+#include "../../../include/fxcrt/fx_ext.h"
 
 #define _STREAM_MAX_SIZE_ 20 * 1024 * 1024
 
@@ -80,9 +81,9 @@ FX_DWORD _A85Decode(const uint8_t* src_buf,
   pos = dest_size = 0;
   while (pos < src_size) {
     uint8_t ch = src_buf[pos++];
-    if (ch == '\n' || ch == '\r' || ch == ' ' || ch == '\t') {
+    if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t')
       continue;
-    }
+
     if (ch == 'z') {
       FXSYS_memset(dest_buf + dest_size, 0, 4);
       state = 0;
@@ -131,27 +132,24 @@ FX_DWORD _HexDecode(const uint8_t* src_buf,
   FX_BOOL bFirstDigit = TRUE;
   for (i = 0; i < src_size; i++) {
     uint8_t ch = src_buf[i];
-    if (ch == ' ' || ch == '\n' || ch == '\t' || ch == '\r') {
+    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;
+    if (std::isxdigit(ch)) {
+      digit = HexCharToDigit(ch);
     } else if (ch == '>') {
       i++;
       break;
     } else {
       continue;
     }
-    if (bFirstDigit) {
+
+    if (bFirstDigit)
       dest_buf[dest_size] = digit * 16;
-    } else {
+    else
       dest_buf[dest_size++] += digit;
-    }
+
     bFirstDigit = !bFirstDigit;
   }
   if (!bFirstDigit) {