diff --git a/src/helper-fns.h b/src/helper-fns.h
index 9d3380bf2cee47a0cac4783ab62c1a3587ba5a06..d2a6c9b22bc971d48e2efee119764ccaad0c2397 100644 (file)
--- a/src/helper-fns.h
+++ b/src/helper-fns.h
* 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;
}