Clean up private methods in CBC_C40Encoder.

Change-Id: I0c33ec81ef9fd3ff7c22f33f5647a923aecd3e77
Reviewed-on: https://pdfium-review.googlesource.com/4594
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.cpp b/fxbarcode/datamatrix/BC_C40Encoder.cpp
index e8aa679..8d352b1 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_C40Encoder.cpp
@@ -67,21 +67,20 @@
     }
     int32_t available = context.m_symbolInfo->m_dataCapacity - curCodewordCount;
     if (!context.hasMoreCharacters()) {
-      CFX_WideString removed;
       if ((buffer.GetLength() % 3) == 2) {
         if (available < 2 || available > 2) {
-          lastCharSize =
-              backtrackOneCharacter(context, buffer, removed, lastCharSize, e);
-          if (e != BCExceptionNO) {
+          lastCharSize = BacktrackOneCharacter(&context, &buffer, lastCharSize);
+          if (lastCharSize < 0) {
+            e = BCExceptionGeneric;
             return;
           }
         }
       }
       while ((buffer.GetLength() % 3) == 1 &&
              ((lastCharSize <= 3 && available != 1) || lastCharSize > 3)) {
-        lastCharSize =
-            backtrackOneCharacter(context, buffer, removed, lastCharSize, e);
-        if (e != BCExceptionNO) {
+        lastCharSize = BacktrackOneCharacter(&context, &buffer, lastCharSize);
+        if (lastCharSize < 0) {
+          e = BCExceptionGeneric;
           return;
         }
       }
@@ -187,18 +186,21 @@
     return 0;
   }
 }
-int32_t CBC_C40Encoder::backtrackOneCharacter(CBC_EncoderContext& context,
-                                              CFX_WideString& buffer,
-                                              CFX_WideString& removed,
-                                              int32_t lastCharSize,
-                                              int32_t& e) {
-  int32_t count = buffer.GetLength();
-  buffer.Delete(count - lastCharSize, count);
-  context.m_pos--;
-  wchar_t c = context.getCurrentChar();
-  lastCharSize = encodeChar(c, removed, e);
+
+int32_t CBC_C40Encoder::BacktrackOneCharacter(CBC_EncoderContext* context,
+                                              CFX_WideString* buffer,
+                                              int32_t lastCharSize) {
+  int32_t count = buffer->GetLength();
+  buffer->Delete(count - lastCharSize, count);
+  context->m_pos--;
+  wchar_t c = context->getCurrentChar();
+  int32_t e = BCExceptionNO;
+  CFX_WideString removed;
+  int32_t len = encodeChar(c, removed, e);
   if (e != BCExceptionNO)
     return -1;
-  context.resetSymbolInfo();
-  return lastCharSize;
+
+  assert(len > 0);
+  context->resetSymbolInfo();
+  return len;
 }
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.h b/fxbarcode/datamatrix/BC_C40Encoder.h
index ad8669d..550d226 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.h
+++ b/fxbarcode/datamatrix/BC_C40Encoder.h
@@ -29,11 +29,13 @@
   virtual int32_t encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e);
 
  private:
-  int32_t backtrackOneCharacter(CBC_EncoderContext& context,
-                                CFX_WideString& buffer,
-                                CFX_WideString& removed,
-                                int32_t lastCharSize,
-                                int32_t& e);
+  // Moves back by 1 position in |context| and adjusts |buffer| accordingly
+  // using |lastCharSize|. Returns the length of the current character in
+  // |context| after adjusting the position. If the character cannot be encoded,
+  // return -1.
+  int32_t BacktrackOneCharacter(CBC_EncoderContext* context,
+                                CFX_WideString* buffer,
+                                int32_t lastCharSize);
 };
 
 #endif  // FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_