Index: MilkdropPresetFactory/Parser.cpp =================================================================== --- MilkdropPresetFactory/Parser.cpp (revision 1510) +++ MilkdropPresetFactory/Parser.cpp (working copy) @@ -1269,28 +1269,13 @@ /* Parses a floating point number */ int Parser::string_to_float(char * string, float * float_ptr) { + std::istringstream stream(string); + stream >> *float_ptr; - char ** error_ptr; - - if (*string == 0) + if (stream.fail()) return PROJECTM_PARSE_ERROR; - error_ptr = (char**)wipemalloc(sizeof(char**)); - - (*float_ptr) = strtod(string, error_ptr); - - /* These imply a succesful parse of the string */ - if ((**error_ptr == '\0') || (**error_ptr == '\r')) - { - free(error_ptr); - error_ptr = NULL; - return PROJECTM_SUCCESS; - } - - (*float_ptr) = 0; - free(error_ptr); - error_ptr = NULL; - return PROJECTM_PARSE_ERROR; + return PROJECTM_SUCCESS; } /* Parses a floating point number */ @@ -1298,11 +1283,9 @@ { char string[MAX_TOKEN_SIZE]; - char ** error_ptr; token_t token; int sign; - error_ptr =(char**) wipemalloc(sizeof(char**)); token = parseToken(fs, string); @@ -1322,28 +1305,13 @@ if (string[0] == 0) { - free(error_ptr); - error_ptr = NULL; return PROJECTM_PARSE_ERROR; } - (*float_ptr) = sign*strtod(string, error_ptr); + std::istringstream stream(string); + stream >> *float_ptr; - /* No conversion was performed */ - if ((**error_ptr == '\0') || (**error_ptr == '\r')) - { - free(error_ptr); - error_ptr = NULL; - return PROJECTM_SUCCESS; - } - - if (PARSE_DEBUG) printf("parse_float: float conversion failed for string \"%s\"\n", string); - - (*float_ptr) = 0; - free(error_ptr); - error_ptr = NULL; - return PROJECTM_PARSE_ERROR; - + return PROJECTM_SUCCESS; } /* Parses a per frame equation. That is, interprets a stream of data as a per frame equation */