📁 File Manager Pro
v10.0.3 | PHP: 8.1.34
Server: Apache
2026-06-22 07:15:58
📂
/ (Root)
/
opt
/
alt
/
ruby21
/
share
/
doc
/
ruby
/
capi
/
html
/
d5
/
dd9
📍 /opt/alt/ruby21/share/doc/ruby/capi/html/d5/dd9
🔄 Refresh
✏️
Editing: reader_8c_source.html
Read Only
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.14"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Ruby: ext/psych/yaml/reader.c Source File</title> <link href="../../tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="../../jquery.js"></script> <script type="text/javascript" src="../../dynsections.js"></script> <link href="../../doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">Ruby  <span id="projectnumber">2.1.10p492(2016-04-01revision54464)</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('../../',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="../../dir_31cedd4509e06940f559c1ca2f722e02.html">ext</a></li><li class="navelem"><a class="el" href="../../dir_31ad5611867e11b3bbb07523261d2b9b.html">psych</a></li><li class="navelem"><a class="el" href="../../dir_dfc81d2f50f6fc5c959b742953049d17.html">yaml</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">reader.c</div> </div> </div><!--header--> <div class="contents"> <a href="../../d5/dd9/reader_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#include "<a class="code" href="../../db/d71/yaml__private_8h.html">yaml_private.h</a>"</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Declarations.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser, <span class="keyword">const</span> <span class="keywordtype">char</span> *problem,</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keywordtype">size_t</span> offset, <span class="keywordtype">int</span> value);</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <a class="code" href="../../d5/dd9/reader_8c.html#aab633906ce5864ef54df6ac7118adf08">yaml_parser_update_raw_buffer</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser);</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <a class="code" href="../../d5/dd9/reader_8c.html#a67f3e604127a357067edc4e386804633">yaml_parser_determine_encoding</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser);</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <a class="code" href="../../d2/d57/group__export.html#ga0791fd3e1d85ed53711b1feaae131f93">YAML_DECLARE</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <a class="code" href="../../d5/dd9/reader_8c.html#aca61f62c10e30089774ae9a4d12e1908">yaml_parser_update_buffer</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">/*</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * Set the reader error and return 0.</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> */</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e"> 26</a></span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser, <span class="keyword">const</span> <span class="keywordtype">char</span> *problem,</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordtype">size_t</span> offset, <span class="keywordtype">int</span> value)</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a6c5c3488ff22c8a4d234ca8587fa1472">error</a> = <a class="code" href="../../d0/df6/group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637">YAML_READER_ERROR</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a3dd8a43294cd420a433595a7a7d6e73d">problem</a> = problem;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#ae2d62a2ad45671c6dd89e18fb7c1c5bd">problem_offset</a> = offset;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8694691b20824f6595873b728cb3bc0f">problem_value</a> = value;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> }</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/*</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> * Byte order marks.</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"> */</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="../../d5/dd9/reader_8c.html#a1618a28bdecf397d6df08bf0c44e8f58"> 41</a></span> <span class="preprocessor">#define BOM_UTF8 "\xef\xbb\xbf"</span></div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="../../d5/dd9/reader_8c.html#ae04348ee2807dfe5aaad0d230df61094"> 42</a></span> <span class="preprocessor">#define BOM_UTF16LE "\xff\xfe"</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../d5/dd9/reader_8c.html#a06cfa29cca215f05bcfcad50199789c6"> 43</a></span> <span class="preprocessor">#define BOM_UTF16BE "\xfe\xff"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">/*</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment"> * Determine the input stream encoding by checking the BOM symbol. If no BOM is</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment"> * found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> */</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="../../d5/dd9/reader_8c.html#a67f3e604127a357067edc4e386804633"> 51</a></span> <a class="code" href="../../d5/dd9/reader_8c.html#a67f3e604127a357067edc4e386804633">yaml_parser_determine_encoding</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">/* Ensure that we had enough bytes in the raw buffer. */</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">while</span> (!parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7">eof</a></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  && parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> < 3) {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d5/dd9/reader_8c.html#aab633906ce5864ef54df6ac7118adf08">yaml_parser_update_raw_buffer</a>(parser)) {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">/* Determine the encoding. */</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> >= 2</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  && !<a class="code" href="../../d5/d21/memcmp_8c.html#a1499ab2d0a3da86cbc3e688294f60a48">memcmp</a>(parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a>, <a class="code" href="../../d5/dd9/reader_8c.html#ae04348ee2807dfe5aaad0d230df61094">BOM_UTF16LE</a>, 2)) {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a">encoding</a> = <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9">YAML_UTF16LE_ENCODING</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> += 2;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13">offset</a> += 2;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> >= 2</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  && !<a class="code" href="../../d5/d21/memcmp_8c.html#a1499ab2d0a3da86cbc3e688294f60a48">memcmp</a>(parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a>, <a class="code" href="../../d5/dd9/reader_8c.html#a06cfa29cca215f05bcfcad50199789c6">BOM_UTF16BE</a>, 2)) {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a">encoding</a> = <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b">YAML_UTF16BE_ENCODING</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> += 2;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13">offset</a> += 2;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> >= 3</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  && !<a class="code" href="../../d5/d21/memcmp_8c.html#a1499ab2d0a3da86cbc3e688294f60a48">memcmp</a>(parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a>, <a class="code" href="../../d5/dd9/reader_8c.html#a1618a28bdecf397d6df08bf0c44e8f58">BOM_UTF8</a>, 3)) {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a">encoding</a> = <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28">YAML_UTF8_ENCODING</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> += 3;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13">offset</a> += 3;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a">encoding</a> = <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28">YAML_UTF8_ENCODING</a>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">/*</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment"> * Update the raw buffer.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">static</span> <span class="keywordtype">int</span></div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="../../d5/dd9/reader_8c.html#aab633906ce5864ef54df6ac7118adf08"> 94</a></span> <a class="code" href="../../d5/dd9/reader_8c.html#aab633906ce5864ef54df6ac7118adf08">yaml_parser_update_raw_buffer</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">size_t</span> size_read = 0;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">/* Return if the raw buffer is full. */</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">if</span> (parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6">start</a> == parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  && parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> == parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3">end</a>)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">/* Return on EOF. */</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">if</span> (parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7">eof</a>) <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">/* Move the remaining bytes in the raw buffer to the beginning. */</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">if</span> (parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6">start</a> < parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  && parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> < parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a>) {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="../../d3/d90/missing_8h.html#a809a3e9326a0d3e5aa549b17085b057d">memmove</a>(parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6">start</a>, parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a>,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> -=</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6">start</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">pointer</a> = parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6">start</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="comment">/* Call the read handler to fill the buffer. */</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> (!parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a8c3af47a7a0750d437cba34699fcad30">read_handler</a>(parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a11f265cd495e814c8ee7d3dd78ff2ca9">read_handler_data</a>, parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a>,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3">end</a> - parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a>, &size_read)) {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser, <span class="stringliteral">"input error"</span>,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13">offset</a>, -1);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">raw_buffer</a>.<a class="code" href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">last</a> += size_read;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (!size_read) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  parser-><a class="code" href="../../d1/dd9/structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7">eof</a> = 1;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">/*</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * Ensure that the buffer contains at least `length` characters.</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> * Return 1 on success, 0 on failure.</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> *</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> * The length is supposed to be significantly less that the buffer size.</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"> */</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <a class="code" href="../../d2/d57/group__export.html#ga0791fd3e1d85ed53711b1feaae131f93">YAML_DECLARE</a>(<span class="keywordtype">int</span>)</div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="../../db/d71/yaml__private_8h.html#aca61f62c10e30089774ae9a4d12e1908"> 142</a></span> <a class="code" href="../../d5/dd9/reader_8c.html#aca61f62c10e30089774ae9a4d12e1908">yaml_parser_update_buffer</a>(<a class="code" href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_t</a> *parser, <span class="keywordtype">size_t</span> length)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordtype">int</span> first = 1;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="../../d5/dac/ossl_8h.html#acdcc5aaebf3f273c1762f24a6ece2e5e">assert</a>(parser->read_handler); <span class="comment">/* Read handler must be set. */</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">/* If the EOF flag is set and the raw buffer is empty, do nothing. */</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> (parser->eof && parser->raw_buffer.pointer == parser->raw_buffer.last)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="comment">/* Return if the buffer contains enough characters. */</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (parser->unread >= length)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="comment">/* Determine the input encoding if it is not known yet. */</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (!parser->encoding) {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d5/dd9/reader_8c.html#a67f3e604127a357067edc4e386804633">yaml_parser_determine_encoding</a>(parser))</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">/* Move the unread characters to the beginning of the buffer. */</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (parser->buffer.start < parser->buffer.pointer</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  && parser->buffer.pointer < parser->buffer.last) {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordtype">size_t</span> <a class="code" href="../../d5/db5/encoding_8c.html#a439227feff9d7f55384e8780cfc2eb82">size</a> = parser->buffer.last - parser->buffer.pointer;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="../../d3/d90/missing_8h.html#a809a3e9326a0d3e5aa549b17085b057d">memmove</a>(parser->buffer.start, parser->buffer.pointer, <a class="code" href="../../d5/db5/encoding_8c.html#a439227feff9d7f55384e8780cfc2eb82">size</a>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  parser->buffer.pointer = parser->buffer.start;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  parser->buffer.last = parser->buffer.start + <a class="code" href="../../d5/db5/encoding_8c.html#a439227feff9d7f55384e8780cfc2eb82">size</a>;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (parser->buffer.pointer == parser->buffer.last) {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  parser->buffer.pointer = parser->buffer.start;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  parser->buffer.last = parser->buffer.start;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">/* Fill the buffer until it has enough characters. */</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">while</span> (parser->unread < length)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="comment">/* Fill the raw buffer if necessary. */</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (!first || parser->raw_buffer.pointer == parser->raw_buffer.last) {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../d5/dd9/reader_8c.html#aab633906ce5864ef54df6ac7118adf08">yaml_parser_update_raw_buffer</a>(parser)) <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  first = 0;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">/* Decode the raw buffer. */</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">while</span> (parser->raw_buffer.pointer != parser->raw_buffer.last)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> value = 0, value2 = 0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordtype">int</span> incomplete = 0;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> octet;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width = 0;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordtype">int</span> low, high;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordtype">size_t</span> k;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordtype">size_t</span> raw_unread = parser->raw_buffer.last - parser->raw_buffer.pointer;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="comment">/* Decode the next character. */</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">switch</span> (parser->encoding)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">case</span> <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28">YAML_UTF8_ENCODING</a>:</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="comment">/*</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> * Decode a UTF-8 character. Check RFC 3629</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment"> * (http://www.ietf.org/rfc/rfc3629.txt) for more details.</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment"> *</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="comment"> * The following table (taken from the RFC) is used for</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment"> * decoding.</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> *</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> * Char. number range | UTF-8 octet sequence</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="comment"> * (hexadecimal) | (binary)</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment"> * --------------------+------------------------------------</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment"> * 0000 0000-0000 007F | 0xxxxxxx</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment"> * 0000 0080-0000 07FF | 110xxxxx 10xxxxxx</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment"> * 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment"> * 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment"> *</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment"> * Additionally, the characters in the range 0xD800-0xDFFF</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="comment"> * are prohibited as they are reserved for use with UTF-16</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment"> * surrogate pairs.</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment"> */</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">/* Determine the length of the UTF-8 sequence. */</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  octet = parser->raw_buffer.pointer[0];</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  width = (octet & 0x80) == 0x00 ? 1 :</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  (octet & 0xE0) == 0xC0 ? 2 :</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  (octet & 0xF0) == 0xE0 ? 3 :</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  (octet & 0xF8) == 0xF0 ? 4 : 0;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="comment">/* Check if the leading octet is valid. */</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span> (!width)</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="stringliteral">"invalid leading UTF-8 octet"</span>,</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  parser->offset, octet);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">/* Check if the raw buffer contains an incomplete character. */</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (width > raw_unread) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">if</span> (parser->eof) {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="stringliteral">"incomplete UTF-8 octet sequence"</span>,</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  parser->offset, -1);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  incomplete = 1;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">/* Decode the leading octet. */</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  value = (octet & 0x80) == 0x00 ? octet & 0x7F :</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  (octet & 0xE0) == 0xC0 ? octet & 0x1F :</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  (octet & 0xF0) == 0xE0 ? octet & 0x0F :</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">/* Check and decode the trailing octets. */</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">for</span> (k = 1; k < width; k ++)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  octet = parser->raw_buffer.pointer[k];</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="comment">/* Check if the octet is valid. */</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">if</span> ((octet & 0xC0) != 0x80)</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="stringliteral">"invalid trailing UTF-8 octet"</span>,</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  parser->offset+k, octet);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">/* Decode the octet. */</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  value = (value << 6) + (octet & 0x3F);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">/* Check the length of the sequence against the value. */</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">if</span> (!((width == 1) ||</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  (width == 2 && value >= 0x80) ||</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  (width == 3 && value >= 0x800) ||</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  (width == 4 && value >= 0x10000)))</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="stringliteral">"invalid length of a UTF-8 sequence"</span>,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  parser->offset, -1);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="comment">/* Check the range of the value. */</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">if</span> ((value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="stringliteral">"invalid Unicode character"</span>,</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  parser->offset, value);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">case</span> <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9">YAML_UTF16LE_ENCODING</a>:</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">case</span> <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b">YAML_UTF16BE_ENCODING</a>:</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  low = (parser->encoding == <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9">YAML_UTF16LE_ENCODING</a> ? 0 : 1);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  high = (parser->encoding == <a class="code" href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9">YAML_UTF16LE_ENCODING</a> ? 1 : 0);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">/*</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment"> * The UTF-16 encoding is not as simple as one might</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment"> * naively think. Check RFC 2781</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment"> * (http://www.ietf.org/rfc/rfc2781.txt).</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment"> *</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment"> * Normally, two subsequent bytes describe a Unicode</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> * character. However a special technique (called a</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment"> * surrogate pair) is used for specifying character</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment"> * values larger than 0xFFFF.</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment"> *</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment"> * A surrogate pair consists of two pseudo-characters:</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment"> * high surrogate area (0xD800-0xDBFF)</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="comment"> * low surrogate area (0xDC00-0xDFFF)</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="comment"> *</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment"> * The following formulas are used for decoding</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment"> * and encoding characters using surrogate pairs:</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment"> *</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="comment"> * U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF)</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="comment"> * U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF)</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="comment"> * W1 = 110110yyyyyyyyyy</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="comment"> * W2 = 110111xxxxxxxxxx</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="comment"> *</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="comment"> * where U is the character value, W1 is the high surrogate</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="comment"> * area, W2 is the low surrogate area.</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="comment"> */</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="comment">/* Check for incomplete UTF-16 character. */</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">if</span> (raw_unread < 2) {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (parser->eof) {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="stringliteral">"incomplete UTF-16 character"</span>,</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  parser->offset, -1);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  incomplete = 1;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">/* Get the character. */</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  value = parser->raw_buffer.pointer[low]</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  + (parser->raw_buffer.pointer[high] << 8);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="comment">/* Check for unexpected low surrogate area. */</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> ((value & 0xFC00) == 0xDC00)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="stringliteral">"unexpected low surrogate area"</span>,</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  parser->offset, value);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="comment">/* Check for a high surrogate area. */</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">if</span> ((value & 0xFC00) == 0xD800) {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  width = 4;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="comment">/* Check for incomplete surrogate pair. */</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">if</span> (raw_unread < 4) {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">if</span> (parser->eof) {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="stringliteral">"incomplete UTF-16 surrogate pair"</span>,</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  parser->offset, -1);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  incomplete = 1;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  }</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span> </div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="comment">/* Get the next character. */</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  value2 = parser->raw_buffer.pointer[low+2]</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  + (parser->raw_buffer.pointer[high+2] << 8);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">/* Check for a low surrogate area. */</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">if</span> ((value2 & 0xFC00) != 0xDC00)</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="stringliteral">"expected low surrogate area"</span>,</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  parser->offset+2, value2);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">/* Generate the value of the surrogate pair. */</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  width = 2;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <a class="code" href="../../d5/dac/ossl_8h.html#acdcc5aaebf3f273c1762f24a6ece2e5e">assert</a>(1); <span class="comment">/* Impossible. */</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="comment">/* Check if the raw buffer contains enough bytes to form a character. */</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keywordflow">if</span> (incomplete) <span class="keywordflow">break</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="comment">/*</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment"> * Check if the character is in the allowed range:</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="comment"> * #x9 | #xA | #xD | [#x20-#x7E] (8 bit)</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment"> * | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit)</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> * | [#x10000-#x10FFFF] (32 bit)</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment"> */</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">if</span> (! (value == 0x09 || value == 0x0A || value == 0x0D</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  || (value >= 0x20 && value <= 0x7E)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  || (value == 0x85) || (value >= 0xA0 && value <= 0xD7FF)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  || (value >= 0xE000 && value <= 0xFFFD)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  || (value >= 0x10000 && value <= 0x10FFFF)))</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser,</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="stringliteral">"control characters are not allowed"</span>,</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  parser->offset, value);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="comment">/* Move the raw pointers. */</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  parser->raw_buffer.pointer += width;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  parser->offset += width;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="comment">/* Finally put the character into the buffer. */</span></div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="comment">/* 0000 0000-0000 007F -> 0xxxxxxx */</span></div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (value <= 0x7F) {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  *(parser->buffer.last++) = value;</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="comment">/* 0000 0080-0000 07FF -> 110xxxxx 10xxxxxx */</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value <= 0x7FF) {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  *(parser->buffer.last++) = 0xC0 + (value >> 6);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  *(parser->buffer.last++) = 0x80 + (value & 0x3F);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="comment">/* 0000 0800-0000 FFFF -> 1110xxxx 10xxxxxx 10xxxxxx */</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value <= 0xFFFF) {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  *(parser->buffer.last++) = 0xE0 + (value >> 12);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  *(parser->buffer.last++) = 0x80 + ((value >> 6) & 0x3F);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  *(parser->buffer.last++) = 0x80 + (value & 0x3F);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="comment">/* 0001 0000-0010 FFFF -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  *(parser->buffer.last++) = 0xF0 + (value >> 18);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  *(parser->buffer.last++) = 0x80 + ((value >> 12) & 0x3F);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  *(parser->buffer.last++) = 0x80 + ((value >> 6) & 0x3F);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  *(parser->buffer.last++) = 0x80 + (value & 0x3F);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  }</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  parser->unread ++;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="comment">/* On EOF, put NUL into the buffer and return. */</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">if</span> (parser->eof) {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  *(parser->buffer.last++) = <span class="charliteral">'\0'</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  parser->unread ++;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">if</span> (parser->offset >= PTRDIFF_MAX)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> <a class="code" href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a>(parser, <span class="stringliteral">"input is too long"</span>,</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  PTRDIFF_MAX, -1);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div><div class="ttc" id="structyaml__parser__s_html_aea4d8da24939825b2fadd368a71ec7de"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de">yaml_parser_s::last</a></div><div class="ttdeci">yaml_char_t * last</div><div class="ttdoc">The last filled position of the buffer. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01146">yaml.h:1146</a></div></div> <div class="ttc" id="group__basic_html_ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b"><div class="ttname"><a href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b">YAML_UTF16BE_ENCODING</a></div><div class="ttdoc">The UTF-16-BE encoding with BOM. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l00105">yaml.h:105</a></div></div> <div class="ttc" id="reader_8c_html_a06cfa29cca215f05bcfcad50199789c6"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#a06cfa29cca215f05bcfcad50199789c6">BOM_UTF16BE</a></div><div class="ttdeci">#define BOM_UTF16BE</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00043">reader.c:43</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a8694691b20824f6595873b728cb3bc0f"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a8694691b20824f6595873b728cb3bc0f">yaml_parser_s::problem_value</a></div><div class="ttdeci">int problem_value</div><div class="ttdoc">The problematic value (-1 is none). </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01095">yaml.h:1095</a></div></div> <div class="ttc" id="reader_8c_html_ae04348ee2807dfe5aaad0d230df61094"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#ae04348ee2807dfe5aaad0d230df61094">BOM_UTF16LE</a></div><div class="ttdeci">#define BOM_UTF16LE</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00042">reader.c:42</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a4f062e9d1fb1082bbf3996e46214905a"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a">yaml_parser_s::encoding</a></div><div class="ttdeci">yaml_encoding_t encoding</div><div class="ttdoc">The input encoding. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01165">yaml.h:1165</a></div></div> <div class="ttc" id="structyaml__parser__s_html_aad74ffeb7f2eef0a12e34b0aac263ff3"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3">yaml_parser_s::end</a></div><div class="ttdeci">const unsigned char * end</div><div class="ttdoc">The string end pointer. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01125">yaml.h:1125</a></div></div> <div class="ttc" id="structyaml__parser__s_html"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html">yaml_parser_s</a></div><div class="ttdoc">The parser structure. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01081">yaml.h:1081</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a11f265cd495e814c8ee7d3dd78ff2ca9"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a11f265cd495e814c8ee7d3dd78ff2ca9">yaml_parser_s::read_handler_data</a></div><div class="ttdeci">void * read_handler_data</div><div class="ttdoc">A pointer for passing to the read handler. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01116">yaml.h:1116</a></div></div> <div class="ttc" id="reader_8c_html_aca61f62c10e30089774ae9a4d12e1908"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#aca61f62c10e30089774ae9a4d12e1908">yaml_parser_update_buffer</a></div><div class="ttdeci">yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00142">reader.c:142</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a8cdb2fed4bb17b1d62d29fa06c53fef6"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6">yaml_parser_s::start</a></div><div class="ttdeci">const unsigned char * start</div><div class="ttdoc">The string start pointer. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01123">yaml.h:1123</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a8199466e3578374b3f984b6c0c4e2ae4"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4">yaml_parser_s::pointer</a></div><div class="ttdeci">yaml_char_t * pointer</div><div class="ttdoc">The current position of the buffer. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01144">yaml.h:1144</a></div></div> <div class="ttc" id="group__basic_html_ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9"><div class="ttname"><a href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9">YAML_UTF16LE_ENCODING</a></div><div class="ttdoc">The UTF-16-LE encoding with BOM. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l00103">yaml.h:103</a></div></div> <div class="ttc" id="missing_8h_html_a809a3e9326a0d3e5aa549b17085b057d"><div class="ttname"><a href="../../d3/d90/missing_8h.html#a809a3e9326a0d3e5aa549b17085b057d">memmove</a></div><div class="ttdeci">RUBY_EXTERN void * memmove(void *, const void *, size_t)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d6f/memmove_8c_source.html#l00007">memmove.c:7</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a8c3af47a7a0750d437cba34699fcad30"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a8c3af47a7a0750d437cba34699fcad30">yaml_parser_s::read_handler</a></div><div class="ttdeci">yaml_read_handler_t * read_handler</div><div class="ttdoc">Read handler. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01113">yaml.h:1113</a></div></div> <div class="ttc" id="reader_8c_html_a67f3e604127a357067edc4e386804633"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#a67f3e604127a357067edc4e386804633">yaml_parser_determine_encoding</a></div><div class="ttdeci">static int yaml_parser_determine_encoding(yaml_parser_t *parser)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00051">reader.c:51</a></div></div> <div class="ttc" id="group__basic_html_gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637"><div class="ttname"><a href="../../d0/df6/group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637">YAML_READER_ERROR</a></div><div class="ttdoc">Cannot read or decode the input stream. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l00130">yaml.h:130</a></div></div> <div class="ttc" id="group__export_html_ga0791fd3e1d85ed53711b1feaae131f93"><div class="ttname"><a href="../../d2/d57/group__export.html#ga0791fd3e1d85ed53711b1feaae131f93">YAML_DECLARE</a></div><div class="ttdeci">#define YAML_DECLARE(type)</div><div class="ttdoc">The public API declaration. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l00038">yaml.h:38</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a6c5c3488ff22c8a4d234ca8587fa1472"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a6c5c3488ff22c8a4d234ca8587fa1472">yaml_parser_s::error</a></div><div class="ttdeci">yaml_error_type_t error</div><div class="ttdoc">Error type. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01089">yaml.h:1089</a></div></div> <div class="ttc" id="reader_8c_html_a397f28c5de2512dcf65661afbdc6537e"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#a397f28c5de2512dcf65661afbdc6537e">yaml_parser_set_reader_error</a></div><div class="ttdeci">static int yaml_parser_set_reader_error(yaml_parser_t *parser, const char *problem, size_t offset, int value)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00026">reader.c:26</a></div></div> <div class="ttc" id="memcmp_8c_html_a1499ab2d0a3da86cbc3e688294f60a48"><div class="ttname"><a href="../../d5/d21/memcmp_8c.html#a1499ab2d0a3da86cbc3e688294f60a48">memcmp</a></div><div class="ttdeci">int memcmp(const void *s1, const void *s2, size_t len)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d21/memcmp_8c_source.html#l00007">memcmp.c:7</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a04a7ba684ce49b2300c236c561439b13"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13">yaml_parser_s::offset</a></div><div class="ttdeci">size_t offset</div><div class="ttdoc">The offset of the current position (in bytes). </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01168">yaml.h:1168</a></div></div> <div class="ttc" id="group__basic_html_ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28"><div class="ttname"><a href="../../d0/df6/group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28">YAML_UTF8_ENCODING</a></div><div class="ttdoc">The default UTF-8 encoding. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l00101">yaml.h:101</a></div></div> <div class="ttc" id="structyaml__parser__s_html_ae2d62a2ad45671c6dd89e18fb7c1c5bd"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#ae2d62a2ad45671c6dd89e18fb7c1c5bd">yaml_parser_s::problem_offset</a></div><div class="ttdeci">size_t problem_offset</div><div class="ttdoc">The byte about which the problem occurred. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01093">yaml.h:1093</a></div></div> <div class="ttc" id="reader_8c_html_a1618a28bdecf397d6df08bf0c44e8f58"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#a1618a28bdecf397d6df08bf0c44e8f58">BOM_UTF8</a></div><div class="ttdeci">#define BOM_UTF8</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00041">reader.c:41</a></div></div> <div class="ttc" id="encoding_8c_html_a439227feff9d7f55384e8780cfc2eb82"><div class="ttname"><a href="../../d5/db5/encoding_8c.html#a439227feff9d7f55384e8780cfc2eb82">size</a></div><div class="ttdeci">int size</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/db5/encoding_8c_source.html#l00049">encoding.c:49</a></div></div> <div class="ttc" id="ossl_8h_html_acdcc5aaebf3f273c1762f24a6ece2e5e"><div class="ttname"><a href="../../d5/dac/ossl_8h.html#acdcc5aaebf3f273c1762f24a6ece2e5e">assert</a></div><div class="ttdeci">#define assert(condition)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dac/ossl_8h_source.html#l00045">ossl.h:45</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a3dd8a43294cd420a433595a7a7d6e73d"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a3dd8a43294cd420a433595a7a7d6e73d">yaml_parser_s::problem</a></div><div class="ttdeci">const char * problem</div><div class="ttdoc">Error description. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01091">yaml.h:1091</a></div></div> <div class="ttc" id="yaml__private_8h_html"><div class="ttname"><a href="../../db/d71/yaml__private_8h.html">yaml_private.h</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a27a87e4ca8530adcdf6de62da0eba623"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a27a87e4ca8530adcdf6de62da0eba623">yaml_parser_s::raw_buffer</a></div><div class="ttdeci">struct yaml_parser_s::@71 raw_buffer</div><div class="ttdoc">The raw buffer. </div></div> <div class="ttc" id="reader_8c_html_aab633906ce5864ef54df6ac7118adf08"><div class="ttname"><a href="../../d5/dd9/reader_8c.html#aab633906ce5864ef54df6ac7118adf08">yaml_parser_update_raw_buffer</a></div><div class="ttdeci">static int yaml_parser_update_raw_buffer(yaml_parser_t *parser)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/dd9/reader_8c_source.html#l00094">reader.c:94</a></div></div> <div class="ttc" id="structyaml__parser__s_html_a6129a99d45aee14ec705aa54dbb493b7"><div class="ttname"><a href="../../d1/dd9/structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7">yaml_parser_s::eof</a></div><div class="ttdeci">int eof</div><div class="ttdoc">EOF flag. </div><div class="ttdef"><b>Definition:</b> <a href="../../dc/dfe/yaml_8h_source.html#l01135">yaml.h:1135</a></div></div> </div><!-- fragment --></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="../../doxygen.png" alt="doxygen"/> </a> 1.8.14 </small></address> </body> </html>
💾 Save Changes
❌ Cancel