/usr/share/doc/libeet-doc/html/Example_Eet_Data_Nested.html is in libeet-doc 1.7.9-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | <html>
<head>
<title>Nested data example</title>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<meta name="author" content="Andres Blanc" >
<link rel="icon" href="img/favicon.png" type="image/x-icon">
<link rel="shortcut icon" href="img/favicon.png" type="image/x-icon">
<link rel="icon" href="img/favicon.png" type="image/ico">
<link rel="shortcut icon" href="img/favicon.png" type="image/ico">
<link rel="stylesheet" type="text/css" media="screen" href="e.css">
<link rel="stylesheet" type="text/css" media="screen" href="edoxy.css">
</head>
<body>
<div id="container">
<div id="header">
<div class="layout">
<h1><span>Enlightenment</span></h1>
<h2><span>Beauty at your fingertips</span></h2>
<div class="menu-container">
<div class="menu">
<ul>
<li class="current"><a href="http://web.enlightenment.org/p.php?p=docs">Docs</a></li>
<li><a href="http://trac.enlightenment.org/e">Tracker</a></li>
<li><a href="http://www.enlightenment.org/p.php?p=contact">Contact</a></li>
<li><a href="http://www.enlightenment.org/p.php?p=contribute">Contribute</a></li>
<li><a href="http://www.enlightenment.org/p.php?p=support">Support</a></li>
<li><a href="http://www.enlightenment.org/p.php?p=download">Download</a></li>
<li><a href="http://www.enlightenment.org/p.php?p=about">About</a></li>
<li><a href="http://www.enlightenment.org/p.php?p=news">News</a></li>
<li><a href="http://www.enlightenment.org/">Home</a></li>
</ul>
</div>
</div>
<div class="doxytitle">
Eet Documentation <small>at Sat Nov 9 2013</small>
</div>
<div class="menu-container">
<div class="submenu">
<ul class="current">
<li><a href="Examples.html">Examples</a></li>
<li><a href="files.html">Files</a></li>
<li><a href="modules.html">Modules</a></li>
<li><a href="globals.html">Globals</a></li>
<li><a href="pages.html">Related Pages</a></li>
<li class="current"><a href="index.html">Main Page</a></li>
</ul>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<div id="content">
<div class="layout">
<!-- Generated by Doxygen 1.8.4 -->
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Nested data example </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * build: gcc -o eet_data_nested eet-data-nested.c `pkg-config --cflags --libs eet eina`</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <Eina.h></span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <<a class="code" href="Eet_8h.html" title="The file that provides the eet functions. ">Eet.h</a>></span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <stdio.h></span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include <limits.h></span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <sys/types.h></span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <sys/stat.h></span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <unistd.h></span></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="comment">// The struct that will be loaded and saved.</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// note that only the members described in the eet_data_descriptor</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// will be automatically handled. The other members will have their</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// space reserved and zeroed (as it uses calloc()), but not</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// saved or loaded from eet files.</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> version; <span class="comment">// it is recommended to use versioned configuration!</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *name;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordtype">int</span> id;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keywordtype">int</span> not_saved_value; <span class="comment">// example of not saved data inside!</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  Eina_Bool enabled;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  Eina_List *subs;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> } My_Conf_Type;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">typedef</span> <span class="keyword">struct</span></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>  <span class="keyword">const</span> <span class="keywordtype">char</span> *server;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordtype">int</span> port;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> } My_Conf_Subtype;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// string that represents the entry in eet file, you might like to have</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// different profiles or so in the same file, this is possible with</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// different strings</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> MY_CONF_FILE_ENTRY[] = <span class="stringliteral">"config"</span>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">// keep the descriptor static global, so it can be</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// shared by different functions (load/save) of this and only this</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// file.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">static</span> <a class="code" href="group__Eet__Data__Group.html#ga4baec0e840012480a0958c5c3bca276d" title="Opaque handle that have information on a type members. ">Eet_Data_Descriptor</a> *_my_conf_descriptor;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">static</span> <a class="code" href="group__Eet__Data__Group.html#ga4baec0e840012480a0958c5c3bca276d" title="Opaque handle that have information on a type members. ">Eet_Data_Descriptor</a> *_my_conf_sub_descriptor;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> _my_conf_descriptor_init(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="struct__Eet__Data__Descriptor__Class.html" title="Instructs Eet about memory management for different needs under serialization and parse process...">Eet_Data_Descriptor_Class</a> eddc;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="comment">// The class describe the functions to use to create the type and its</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="comment">// full allocated size.</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">// Eina types are very convenient, so use them to create the descriptor,</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// so we get eina_list, eina_hash and eina_stringshare automatically!</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// The STREAM variant is better for configuration files as the values</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="comment">// will likely change a lot.</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// The other variant, FILE, is good for caches and things that are just</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// appended, but needs to take care when changing strings and files must</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// be kept open so mmap()ed strings will be kept alive.</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="group__Eet__Data__Group.html#ga941b1fcd6c6c72221d9390f9a0ed751c" title="This macro is an helper that set all the parameter of an Eet_Data_Descriptor_Class correctly when you...">EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET</a>(&eddc, My_Conf_Type);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  _my_conf_descriptor = <a class="code" href="group__Eet__Data__Group.html#gaea8c28de4b6c0a8c8f09dfe521b42a00" title="This function creates a new data descriptor and returns a handle to the new data descriptor. ">eet_data_descriptor_stream_new</a>(&eddc);</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>  <a class="code" href="group__Eet__Data__Group.html#ga941b1fcd6c6c72221d9390f9a0ed751c" title="This macro is an helper that set all the parameter of an Eet_Data_Descriptor_Class correctly when you...">EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET</a>(&eddc, My_Conf_Subtype);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  _my_conf_sub_descriptor = <a class="code" href="group__Eet__Data__Group.html#gaea8c28de4b6c0a8c8f09dfe521b42a00" title="This function creates a new data descriptor and returns a handle to the new data descriptor. ">eet_data_descriptor_stream_new</a>(&eddc);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">// Describe the members to be saved:</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// Use a temporary macro so we don't type a lot, also avoid errors:</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#define MY_CONF_ADD_BASIC(member, eet_type) \</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> EET_DATA_DESCRIPTOR_ADD_BASIC \</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> (_my_conf_descriptor, My_Conf_Type, # member, member, eet_type)</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"></span><span class="preprocessor">#define MY_CONF_SUB_ADD_BASIC(member, eet_type) \</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"> EET_DATA_DESCRIPTOR_ADD_BASIC \</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> (_my_conf_sub_descriptor, My_Conf_Subtype, # member, member, eet_type)</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  MY_CONF_SUB_ADD_BASIC(server, <a class="code" href="group__Eet__Data__Group.html#ga0d2cf409bf3f151156d74d18ac59e3d1" title="Data type: char *. ">EET_T_STRING</a>);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  MY_CONF_SUB_ADD_BASIC(port, <a class="code" href="group__Eet__Data__Group.html#ga4e196733795867f14c6e387af7287baa" title="Data type: int. ">EET_T_INT</a>);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  MY_CONF_ADD_BASIC(version, <a class="code" href="group__Eet__Data__Group.html#gacf6a3c9f06e10e20be5b02cd8c6a220b" title="Data type: unsigned int. ">EET_T_UINT</a>);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  MY_CONF_ADD_BASIC(name, <a class="code" href="group__Eet__Data__Group.html#ga0d2cf409bf3f151156d74d18ac59e3d1" title="Data type: char *. ">EET_T_STRING</a>);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  MY_CONF_ADD_BASIC(<span class="keywordtype">id</span>, <a class="code" href="group__Eet__Data__Group.html#ga4e196733795867f14c6e387af7287baa" title="Data type: int. ">EET_T_INT</a>);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  MY_CONF_ADD_BASIC(enabled, <a class="code" href="group__Eet__Data__Group.html#ga09a1341cc158fda0ba60ad2386ecd795" title="Data type: unsigned char. ">EET_T_UCHAR</a>);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">// And add the sub descriptor as a linked list at 'subs' in the main struct</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="group__Eet__Data__Group.html#gabb4c7833ba053f2322e6b667a9ec7f04" title="Add a linked list type to a data descriptor. ">EET_DATA_DESCRIPTOR_ADD_LIST</a></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  (_my_conf_descriptor, My_Conf_Type, <span class="stringliteral">"subs"</span>, subs, _my_conf_sub_descriptor);</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> <span class="preprocessor">#undef MY_CONF_ADD_BASIC</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"></span><span class="preprocessor">#undef MY_CONF_SUB_ADD_BASIC</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"></span>} <span class="comment">/* _my_conf_descriptor_init */</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> _my_conf_descriptor_shutdown(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="group__Eet__Data__Group.html#ga4d0a7a4f47e8393f75b8446e7d056eac" title="This function frees a data descriptor when it is not needed anymore. ">eet_data_descriptor_free</a>(_my_conf_sub_descriptor);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="group__Eet__Data__Group.html#ga4d0a7a4f47e8393f75b8446e7d056eac" title="This function frees a data descriptor when it is not needed anymore. ">eet_data_descriptor_free</a>(_my_conf_descriptor);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> } <span class="comment">/* _my_conf_descriptor_shutdown */</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">static</span> My_Conf_Type *</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> _my_conf_new(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  My_Conf_Type *my_conf = calloc(1, <span class="keyword">sizeof</span>(My_Conf_Type));</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  My_Conf_Subtype *sub;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (!my_conf)</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>  fprintf(stderr, <span class="stringliteral">"ERROR: could not calloc My_Conf_Type\n"</span>);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> NULL;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</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>  my_conf->version = 0x112233;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  my_conf->enabled = EINA_TRUE;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  sub = calloc(1, <span class="keyword">sizeof</span>(My_Conf_Subtype));</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (sub)</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  sub->server = eina_stringshare_add(<span class="stringliteral">"my-server.com"</span>);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  sub->port = 1234;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  my_conf->subs = eina_list_append(my_conf->subs, sub);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</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">return</span> my_conf;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> } <span class="comment">/* _my_conf_new */</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> _my_conf_free(My_Conf_Type *my_conf)</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  My_Conf_Subtype *sub;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  EINA_LIST_FREE(my_conf->subs, sub)</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>  eina_stringshare_del(sub->server);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  free(sub);</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>  eina_stringshare_del(my_conf->name);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  free(my_conf);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> } <span class="comment">/* _my_conf_free */</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">static</span> My_Conf_Type *</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> _my_conf_load(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</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>  My_Conf_Type *my_conf;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="struct__Eet__File.html">Eet_File</a> *ef = <a class="code" href="group__Eet__File__Group.html#ga1714f8176dde78e274b3fc042912e382" title="Open an eet file on disk, and returns a handle to it. ">eet_open</a>(filename, <a class="code" href="group__Eet__File__Group.html#ggaa8e1a7af50fefaf15eb2f69543d24998a416f7e9a76b8131a44bbeedb13060c81" title="File is read-only. ">EET_FILE_MODE_READ</a>);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">if</span> (!ef)</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  fprintf(stderr, <span class="stringliteral">"ERROR: could not open '%s' for read\n"</span>, filename);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> NULL;</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> </div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  my_conf = <a class="code" href="group__Eet__Data__Group.html#ga5fb943bf3b2ba6c901dfce189a82d9fc" title="Read a data structure from an eet file and decodes it. ">eet_data_read</a>(ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> (!my_conf)</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">goto</span> end;</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="keywordflow">if</span> (my_conf->version < 0x112233)</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>  fprintf(stderr,</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="stringliteral">"WARNING: version %#x was too old, upgrading it to %#x\n"</span>,</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  my_conf->version, 0x112233);</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  my_conf->version = 0x112233;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  my_conf->enabled = EINA_TRUE;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> end:</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="group__Eet__File__Group.html#ga905997371fed881b82b2b00a19cce398" title="Close an eet file handle and flush pending writes. ">eet_close</a>(ef);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> my_conf;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> } <span class="comment">/* _my_conf_load */</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">static</span> Eina_Bool</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> _my_conf_save(<span class="keyword">const</span> My_Conf_Type *my_conf,</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *filename)</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordtype">char</span> tmp[PATH_MAX];</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <a class="code" href="struct__Eet__File.html">Eet_File</a> *ef;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  Eina_Bool ret;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, len;</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">struct </span>stat st;</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>  len = eina_strlcpy(tmp, filename, <span class="keyword">sizeof</span>(tmp));</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">if</span> (len + 12 >= (<span class="keywordtype">int</span>)<span class="keyword">sizeof</span>(tmp))</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>  fprintf(stderr, <span class="stringliteral">"ERROR: file name is too big: %s\n"</span>, filename);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> EINA_FALSE;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</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>  i = 0;</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">do</span></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>  snprintf(tmp + len, 12, <span class="stringliteral">".%u"</span>, i);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  i++;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">while</span> (stat(tmp, &st) == 0);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  ef = <a class="code" href="group__Eet__File__Group.html#ga1714f8176dde78e274b3fc042912e382" title="Open an eet file on disk, and returns a handle to it. ">eet_open</a>(tmp, <a class="code" href="group__Eet__File__Group.html#ggaa8e1a7af50fefaf15eb2f69543d24998a8f395f56fba48be007c65be51d799ee9" title="File is write-only. ">EET_FILE_MODE_WRITE</a>);</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (!ef)</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  fprintf(stderr, <span class="stringliteral">"ERROR: could not open '%s' for write\n"</span>, tmp);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">return</span> EINA_FALSE;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  ret = <a class="code" href="group__Eet__Data__Group.html#gaac41f6875bcb226c917102ae35eb8c93" title="Write a data structure from memory and store in an eet file. ">eet_data_write</a></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  (ef, _my_conf_descriptor, MY_CONF_FILE_ENTRY, my_conf, EINA_TRUE);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="group__Eet__File__Group.html#ga905997371fed881b82b2b00a19cce398" title="Close an eet file handle and flush pending writes. ">eet_close</a>(ef);</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">if</span> (ret)</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>  unlink(filename);</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  rename(tmp, filename);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> ret;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> } <span class="comment">/* _my_conf_save */</span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keywordtype">int</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> main(<span class="keywordtype">int</span> argc,</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordtype">char</span> *argv[])</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  My_Conf_Type *my_conf;</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">const</span> My_Conf_Subtype *sub;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">const</span> Eina_List *l;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordtype">int</span> ret = 0;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">if</span> (argc != 3)</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  fprintf(stderr, <span class="stringliteral">"Usage:\n\t%s <input> <output>\n\n"</span>, argv[0]);</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</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>  eina_init();</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <a class="code" href="group__Eet__Group.html#gab802df0fd9c53dafbc486242be5bfb69" title="Initialize the EET library. ">eet_init</a>();</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  _my_conf_descriptor_init();</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  my_conf = _my_conf_load(argv[1]);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (!my_conf)</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  printf(<span class="stringliteral">"creating new configuration.\n"</span>);</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  my_conf = _my_conf_new();</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">if</span> (!my_conf)</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  {</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  ret = -2;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">goto</span> end;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</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> </div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  printf(<span class="stringliteral">"My_Conf_Type:\n"</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="stringliteral">"\tversion: %#x\n"</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="stringliteral">"\tname...: '%s'\n"</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="stringliteral">"\tid.....: %d\n"</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="stringliteral">"\tenabled: %hhu\n"</span></div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="stringliteral">"\tsubs...:\n"</span>,</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  my_conf->version,</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  my_conf->name ? my_conf->name : <span class="stringliteral">""</span>,</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  my_conf->id,</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  my_conf->enabled);</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>  EINA_LIST_FOREACH(my_conf->subs, l, sub)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  printf("\t\tserver: '%s', port: %d\n",</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  sub->server ? sub->server : "",</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  sub->port);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  if (!_my_conf_save(my_conf, argv[2]))</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  ret = -3;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  _my_conf_free(my_conf);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> end:</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  _my_conf_descriptor_shutdown();</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="group__Eet__Group.html#ga11de4314e79e759cef42383a55f8339f" title="Shut down the EET library. ">eet_shutdown</a>();</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  eina_shutdown();</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>  return ret;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> } <span class="comment">/* main */</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
</div><!-- fragment --> </div></div><!-- contents -->
<div id="push"></div>
</div> <!-- #content -->
</div> <!-- .layout -->
</div> <!-- #container -->
<div id="footer">
<table><tr>
<td class="poweredby"><img src="doxygen.png"></td>
<td>Samsung Electronics is supporting the EFL Documentation Project</td>
<td class="copyright">Copyright ©2013 Enlightenment</td>
<td class="generated">Docs generated Sat Nov 9 2013 23:12:33</td>
</tr></table>
</div>
</body>
</html>
|