[number] Make hb_parse_double simpler now that we don't have to mimic strtod
diff --git a/src/hb-number.cc b/src/hb-number.cc
index e68b10d..6e4f3f7 100644
--- a/src/hb-number.cc
+++ b/src/hb-number.cc
@@ -34,8 +34,7 @@
 	       bool whole_buffer, Func f)
 {
   char buf[32];
-  unsigned int len = hb_min (ARRAY_LENGTH (buf) - 1,
-			     (unsigned int) (end - *pp));
+  unsigned len = hb_min (ARRAY_LENGTH (buf) - 1, (unsigned) (end - *pp));
   strncpy (buf, *pp, len);
   buf[len] = '\0';
 
@@ -46,7 +45,8 @@
   *pv = f (p, &pend);
   if (unlikely (errno || p == pend ||
 		/* Check if consumed whole buffer if is requested */
-		(whole_buffer && pend - p != end - *pp))) return false;
+		(whole_buffer && pend - p != end - *pp)))
+    return false;
 
   *pp += pend - p;
   return true;
@@ -61,19 +61,20 @@
 }
 
 bool
-hb_parse_uint (const char **pp, const char *end, unsigned int *pv,
+hb_parse_uint (const char **pp, const char *end, unsigned *pv,
 	       bool whole_buffer, int base)
 {
-  return _parse_number<unsigned int> (pp, end, pv, whole_buffer,
-				      [base] (const char *p, char **end)
-				      { return strtoul (p, end, base); });
+  return _parse_number<unsigned> (pp, end, pv, whole_buffer,
+				  [base] (const char *p, char **end)
+				  { return strtoul (p, end, base); });
 }
 
 bool
-hb_parse_double (const char **pp, const char *end, double *pv,
-		 bool whole_buffer)
+hb_parse_double (const char **pp, const char *end, double *pv, bool whole_buffer)
 {
-  return _parse_number<double> (pp, end, pv, whole_buffer,
-				[] (const char *p, char **end)
-				{ return strtod_rl (p, end); });
+  const char *pend = end;
+  *pv = strtod_rl (*pp, &pend);
+  if (unlikely (*pp == pend)) return false;
+  *pp = pend;
+  return !whole_buffer || end == pend;
 }