Ticket #4786: boost_1_44_0.property_tree.patch

File boost_1_44_0.property_tree.patch, 3.2 KB (added by saleyn@…, 12 years ago)
  • boost/property_tree/detail/info_parser_read.hpp

    old new  
    288288                            else    // Key text found
    289289                            {
    290290                                std::basic_string<Ch> key = read_key(text);
    291                                 last = &stack.top()->push_back(
     291                                last = (Ptree*)&stack.top()->push_back(
    292292                                    std::make_pair(key, Ptree()))->second;
    293293                                state = s_data;
    294294                            }
     
    322322                            {
    323323                                bool need_more_lines;
    324324                                std::basic_string<Ch> data = read_data(text, &need_more_lines);
     325                                if (need_more_lines)
     326                                {
    325327                                last->data() = data;
    326                                 state = need_more_lines ? s_data_cont : s_key;
     328                                    state = s_data_cont;
     329                                }
     330                                else
     331                                {
     332                                    typename translator_between<
     333                                        typename Ptree::data_type,
     334                                        std::basic_string<Ch> >::type tr;
     335                                    last->data() = tr.put_value(data);
     336                                    state = s_key;
     337                                }
    327338                            }
    328339
    329340
     
    339350                            if (*text == Ch('\"'))  // Continuation must start with "
    340351                            {
    341352                                bool need_more_lines;
    342                                 std::basic_string<Ch> data = read_string(text, &need_more_lines);
    343                                 last->put_value(last->template get_value<std::basic_string<Ch> >() + data);
    344                                 state = need_more_lines ? s_data_cont : s_key;
     353                                std::basic_string<Ch> data =
     354                                    last->template get_value<std::basic_string<Ch> >() +
     355                                    read_string(text, &need_more_lines);
     356
     357                                if (need_more_lines)
     358                                {
     359                                    last->data() = data;
     360                                    state = s_data_cont;
     361                                }
     362                                else
     363                                {
     364                                    typename translator_between<
     365                                        typename Ptree::data_type,
     366                                        std::basic_string<Ch> >::type tr;
     367                                    last->data() = tr.put_value(data);
     368                                    state = s_key;
     369                                }
    345370                            }
    346371                            else
    347372                                BOOST_PROPERTY_TREE_THROW(info_parser_error("expected \" after \\ in previous line", "", 0));