svg_loader SvgPath: Added corner case handling for flags of Arc
authorJunsuChoi <jsuya.choi@samsung.com>
Wed, 23 Jun 2021 03:43:45 +0000 (12:43 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Fri, 25 Jun 2021 00:45:46 +0000 (09:45 +0900)
It handles the case what the flag of the arc of the path is defined
without spaces or commas, such as 00, 01, 11 or 10.

src/loaders/svg/tvgSvgPath.cpp

index d1bd3a6..0f21973 100644 (file)
@@ -57,16 +57,15 @@ static bool _parseNumber(char** content, float* number)
 
 static bool _parseFlag(char** content, int* number)
 {
-    char* end = NULL;
-    *number = strtol(*content, &end, 10);
-    //If the start of string is not number or a number was a float
-    if ((*content) == end || *end == '.') return false;
-    //If a flag has a different value than 0 or 1
-    if (*number != 0 && *number != 1) return false;
-    *content = _skipComma(end);
+    if (*(*content) != '0' && *(*content) != '1') return false;
+    *number = *(*content) - '0';
+    *content = _skipComma(*content + 1);
+    if (*(*content) == '.') return false;
+
     return true;
 }
 
+
 void _pathAppendArcTo(Array<PathCommand>* cmds, Array<Point>* pts, Point* cur, Point* curCtl, float x, float y, float rx, float ry, float angle, bool largeArc, bool sweep)
 {
     float cxp, cyp, cx, cy;