char is distinct from signed char and unsigned char.

Change-Id: I13f226d8192e3e9baafb4efa3c584c185c30f6f7
Reviewed-on: https://code-review.googlesource.com/5330
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/re2.cc b/re2/re2.cc
index 6bc5edd..d75e109 100644
--- a/re2/re2.cc
+++ b/re2/re2.cc
@@ -962,6 +962,13 @@
   return true;
 }
 
+bool RE2::Arg::parse_schar(const char* str, int n, void* dest) {
+  if (n != 1) return false;
+  if (dest == NULL) return true;
+  *(reinterpret_cast<signed char*>(dest)) = str[0];
+  return true;
+}
+
 bool RE2::Arg::parse_uchar(const char* str, int n, void* dest) {
   if (n != 1) return false;
   if (dest == NULL) return true;
diff --git a/re2/re2.h b/re2/re2.h
index 99502ac..4418492 100644
--- a/re2/re2.h
+++ b/re2/re2.h
@@ -789,7 +789,7 @@
 
 
   MAKE_PARSER(char,               parse_char);
-  MAKE_PARSER(signed char,        parse_char);
+  MAKE_PARSER(signed char,        parse_schar);
   MAKE_PARSER(unsigned char,      parse_uchar);
   MAKE_PARSER(short,              parse_short);
   MAKE_PARSER(unsigned short,     parse_ushort);
@@ -823,6 +823,7 @@
 
   static bool parse_null          (const char* str, int n, void* dest);
   static bool parse_char          (const char* str, int n, void* dest);
+  static bool parse_schar         (const char* str, int n, void* dest);
   static bool parse_uchar         (const char* str, int n, void* dest);
   static bool parse_float         (const char* str, int n, void* dest);
   static bool parse_double        (const char* str, int n, void* dest);