<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">there were complaints that bailout events get converted to generic events upon saving (to git) and I tracked this down to the following: The bailout event results in a line like</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">event 40:00 type=8 divemode="OC" name="modechange"</span></div></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class="">in the Divecomputer file in the repository. </span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class="">When that is loaded, however, the parsing thinks „OC“ is the event->name and not „modechange“. Looking at the code in load-git.c, I am a bit lost with the clever combination of macros and jump tables in the parser. I see in parse_event_keyvalue()</span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div><div class=""><span style="font-variant-ligatures: no-common-ligatures" class="">
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><!--StartFragment--><span style=" color:#c0c0c0;" class="">        </span><span style=" color:#808000;" class="">if</span><span style=" color:#c0c0c0;" class=""> </span>(!<span style=" color:#00677c;" class="">strcmp</span>(<span style=" color:#092e64;" class="">key</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">"type"</span>))<span style=" color:#c0c0c0;" class=""> </span>{</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">          </span><span style=" color:#092e64;" class="">event</span>-><span style=" color:#800000;" class="">type</span><span style=" color:#c0c0c0;" class=""> </span>=<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">val</span>;</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">  </span>}<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">else</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">if</span><span style=" color:#c0c0c0;" class=""> </span>(!<span style=" color:#00677c;" class="">strcmp</span>(<span style=" color:#092e64;" class="">key</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">"flags"</span>))<span style=" color:#c0c0c0;" class=""> </span>{</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">          </span><span style=" color:#092e64;" class="">event</span>-><span style=" color:#800000;" class="">flags</span><span style=" color:#c0c0c0;" class=""> </span>=<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">val</span>;</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">  </span>}<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">else</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">if</span><span style=" color:#c0c0c0;" class=""> </span>(!<span style=" color:#00677c;" class="">strcmp</span>(<span style=" color:#092e64;" class="">key</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">"value"</span>))<span style=" color:#c0c0c0;" class=""> </span>{</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">          </span><span style=" color:#092e64;" class="">event</span>-><span style=" color:#800000;" class="">value</span><span style=" color:#c0c0c0;" class=""> </span>=<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">val</span>;</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">  </span>}<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">else</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">if</span><span style=" color:#c0c0c0;" class=""> </span>(!<span style=" color:#00677c;" class="">strcmp</span>(<span style=" color:#092e64;" class="">key</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">"name"</span>))<span style=" color:#c0c0c0;" class=""> </span>{</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">          </span><span style=" color:#008000;" class="">/*</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">We</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">get</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">the</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">name</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">from</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">the</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">string</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">handling</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">*/</span></pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">  </span>}<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">else</span><span style=" color:#c0c0c0;" class=""> </span><span style=" color:#808000;" class="">if</span><span style=" color:#c0c0c0;" class=""> </span>(!<span style=" color:#00677c;" class="">strcmp</span>(<span style=" color:#092e64;" class="">key</span>,<span style=" color:#008000;" class="">"divemode"</span>))<span style=" color:#c0c0c0;" class=""> </span>{</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""><!--EndFragment--></pre><div class="">So parsing the key is a NOP at this point. It seems to get parsed however in parse_dc_event() where the code reads</div><div class=""><br class=""></div><div class="">
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><!--StartFragment--><span style=" color:#c0c0c0;" class="">        </span><span style=" color:#092e64;" class="">name</span><span style=" color:#c0c0c0;" class=""> </span>=<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#008000;" class="">""</span>;</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">  </span><span style=" color:#808000;" class="">if</span><span style=" color:#c0c0c0;" class=""> </span>(<span style=" color:#092e64;" class="">str</span>-><span style=" color:#800000;" class="">len</span>)</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">          </span><span style=" color:#092e64;" class="">name</span><span style=" color:#c0c0c0;" class=""> </span>=<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#00677c;" class="">mb_cstring</span>(<span style=" color:#092e64;" class="">str</span>);</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style=" color:#c0c0c0;" class="">  </span><span style=" color:#092e64;" class="">ev</span><span style=" color:#c0c0c0;" class=""> </span>=<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#00677c;" class="">add_event</span>(<span style=" color:#092e64;" class="">state</span>-><span style=" color:#800000;" class="">active_dc</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">event</span>.<span style=" color:#800000;" class="">time</span>.<span style=" color:#800000;" class="">seconds</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">event</span>.<span style=" color:#800000;" class="">type</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">event</span>.<span style=" color:#800000;" class="">flags</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">event</span>.<span style=" color:#800000;" class="">value</span>,<span style=" color:#c0c0c0;" class=""> </span><span style=" color:#092e64;" class="">name</span>);</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><br class=""><!--EndFragment--></pre><div class="">printf reveals that after these lines name is „OC“ and not „modechange“.</div></div><div class=""><br class=""></div><div class="">Maybe somebody with a better understanding of the code (Linus?) can help me out with this.</div><div class=""><br class=""></div><div class="">Thanks</div><div class="">Robert</div></span></div></body></html>