diff options
Diffstat (limited to 'src/xml_stream.erl')
-rw-r--r-- | src/xml_stream.erl | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/xml_stream.erl b/src/xml_stream.erl index b81575a4..8a892bf3 100644 --- a/src/xml_stream.erl +++ b/src/xml_stream.erl @@ -17,6 +17,8 @@ -define(XML_CDATA, 2). -define(XML_ERROR, 3). +-define(PARSE_COMMAND, 0). + start(CallbackPid) -> spawn(?MODULE, init, [CallbackPid]). @@ -38,8 +40,12 @@ loop(CallbackPid, Port, Stack) -> Data = binary_to_term(Bin), loop(CallbackPid, Port, process_data(CallbackPid, Stack, Data)); {_From, {send, Str}} -> - Port ! {self(), {command, Str}}, - loop(CallbackPid, Port, Stack); + Res = port_control(Port, ?PARSE_COMMAND, Str), + NewStack = lists:foldl( + fun(Data, St) -> + process_data(CallbackPid, St, Data) + end, Stack, binary_to_term(Res)), + loop(CallbackPid, Port, NewStack); {'DOWN', _Ref, _Type, _Object, _Info} -> ok end. |