Code

fix by Preben S for LP bug 389780, flatness
[inkscape.git] / src / helper-fns.h
index 9d3380bf2cee47a0cac4783ab62c1a3587ba5a06..d2a6c9b22bc971d48e2efee119764ccaad0c2397 100644 (file)
  * is not known beforehand. For example, see sp_feColorMatrix_set in
  * sp-fecolormatrix.cpp */
 inline double helperfns_read_number(gchar const *value, bool warning = true) {
-    if (!value) return 0;
+    if (!value) {
+        g_warning("Called helperfns_read_number with value==null_ptr, this can lead to unexpected behaviour.");
+        return 0;
+    }
     char *end;
     double ret = g_strtod(value, &end);
     if (*end) {
@@ -94,24 +97,23 @@ inline std::vector<gdouble> helperfns_read_vector(const gchar* value, int size){
  */
 inline std::vector<gdouble> helperfns_read_vector(const gchar* value){
         std::vector<gdouble> v;
-        std::istringstream is(value);
-        gdouble d;
-        std::string str;
 
-        is >> str;
-        while(str.size())
+        gchar const* beg = value;
+        while(isspace(*beg)) beg++;
+        while(*beg)
         {
             char *end;
-            double ret = g_strtod(str.c_str(), &end);
-            if (*end){
-                g_warning("helper-fns::helperfns_read_vector() Unable to convert \"%s\" to number", str.c_str());
+            double ret = g_strtod(beg, &end);
+            if (end==beg){
+                g_warning("helper-fns::helperfns_read_vector() Unable to convert \"%s\" to number", beg);
                 // We could leave this out, too. If strtod can't convert
                 // anything, it will return zero.
                 ret = 0;
             }
-            v.push_back(d);
+            v.push_back(ret);
 
-            is >> str;
+            beg = end;
+            while(isspace(*beg)) beg++;
         }
         return v;
 }