diff options
Diffstat (limited to 'public/remmina__file__manager_8c_source.html')
-rw-r--r-- | public/remmina__file__manager_8c_source.html | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/public/remmina__file__manager_8c_source.html b/public/remmina__file__manager_8c_source.html index 501086567..deedcd799 100644 --- a/public/remmina__file__manager_8c_source.html +++ b/public/remmina__file__manager_8c_source.html @@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('remmina__file__manager_8c_source.html' <div class="title">remmina_file_manager.c</div> </div> </div><!--header--> <div class="contents"> -<a href="remmina__file__manager_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> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2010 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2023 Antenore Gatta, Giovanni Panozzo</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> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</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"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</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="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <errno.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <string.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="remmina__string__array_8h.html">remmina_string_array.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482"> 51</a></span> <span class="keyword">static</span> gchar *<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9"> 52</a></span> <span class="keyword">static</span> gchar *<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#aa65bc30beb59d607ba430d966e7e27f5"> 59</a></span> gchar *<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(<span class="keywordtype">void</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>  TRACE_CALL(__func__);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">const</span> gchar *dir = <span class="stringliteral">".remmina"</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">/* From preferences, datadir_path */</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = <a class="code" href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a>(<span class="stringliteral">"datadir_path"</span>);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> != NULL && strlen(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>) > 0)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">/* Legacy ~/.remmina */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_home_dir(), dir, NULL);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">/* ~/.local/share/remmina */</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">/* /usr/local/share/remmina */</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> gchar *<span class="keyword">const</span> *dirs = g_get_system_data_dirs();</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>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">for</span> (i = 0; dirs[i] != NULL; ++i) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, dirs[i], <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">/* The last case we use the home ~/.local/share/remmina */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</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> </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3"> 97</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keyword">const</span> <span class="keywordtype">char</span> *dst_path)</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>  GFile *src = g_file_new_for_path(src_path), *dst = g_file_new_for_path(dst_path);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">/* We don’t overwrite the target if it exists */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> gboolean ok = g_file_copy(src, dst, G_FILE_COPY_NONE, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  g_object_unref(dst);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  g_object_unref(src);</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">return</span> ok;</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> </div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#afa2b1889dced4289b0f7d7edffc82e72"> 116</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#afa2b1889dced4289b0f7d7edffc82e72">remmina_file_manager_init</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GDir *dir;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> gchar *legacy = <span class="stringliteral">".remmina"</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> gchar *filename;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">int</span> i;</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="comment">/* Get and create the XDG_DATA_HOME directory */</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = <a class="code" href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a>(<span class="stringliteral">"datadir_path"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0750) == 0) {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  REMMINA_DEBUG(<span class="stringliteral">"Initialized the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">/* Get and create the XDG_DATA_HOME directory */</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0750) == 0)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  REMMINA_DEBUG(<span class="stringliteral">"Initialized the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  REMMINA_CRITICAL(<span class="stringliteral">"Cannot create the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="comment">/* Create the XDG_CACHE_HOME directory */</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_cache_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>, 0750);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>), <a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = NULL;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">/* Empty legacy ~/.remmina */</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_home_dir(), legacy, NULL);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR)) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0, NULL);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">while</span> ((filename = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  g_build_path(<span class="stringliteral">"/"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, filename, NULL),</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(),</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="stringliteral">"remmina"</span>, filename, NULL));</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>  }</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="comment">/* XDG_DATA_DIRS, i.e. /usr/local/share/remmina */</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">const</span> gchar *<span class="keyword">const</span> *dirs = g_get_system_data_dirs();</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>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">for</span> (i = 0; dirs[i] != NULL; ++i) {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, dirs[i], <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR)) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0, NULL);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">while</span> ((filename = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  g_build_path(<span class="stringliteral">"/"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, filename, NULL),</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(),</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="stringliteral">"remmina"</span>, filename, NULL));</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</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="comment">/* At last we make sure we use XDG_USER_DATA */</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> != NULL)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a55a717aafc046713380bd2c55f29165a"> 177</a></span> gint <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>(GFunc func, gpointer user_data)</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>  TRACE_CALL(__func__);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  GDir *dir;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  gint items_count = 0;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  gchar *remmina_data_dir;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  remmina_data_dir = <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  dir = g_dir_open(remmina_data_dir, 0, NULL);</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="keywordflow">if</span> (dir) {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  remmina_data_dir, name);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  (*func)(remminafile, user_data);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  items_count++;</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>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  g_dir_close(dir);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  g_free(remmina_data_dir);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> items_count;</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> </div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a536edeef371d907ab3936f4d65c3003d"> 209</a></span> gchar *<a class="code" href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  GDir *dir;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="remmina__string__array_8h.html#a62228cb0bc959307e3268cff98e1f7bb">RemminaStringArray</a> *array;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  gchar *groups;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  gchar *remmina_data_dir;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  remmina_data_dir = <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  array = <a class="code" href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a>();</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>  dir = g_dir_open(remmina_data_dir, 0, NULL);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, remmina_data_dir, name);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (group && <a class="code" href="remmina__string__array_8c.html#ab93a69850cfb4117c223a3f145ced986">remmina_string_array_find</a>(array, group) < 0)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="remmina__string__array_8c.html#a2aaacca7db4b86f836486cfb559398f0">remmina_string_array_add</a>(array, group);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</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>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  g_dir_close(dir);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <a class="code" href="remmina__string__array_8c.html#a3eab4bae72ff130ad10ec8fc7364ce70">remmina_string_array_sort</a>(array);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  groups = <a class="code" href="remmina__string__array_8c.html#a96f7bec7ce32de6cf5deadcd5aec51ec">remmina_string_array_to_string</a>(array);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="remmina__string__array_8c.html#a8ab78913d299df665a408a8a5ec51bbe">remmina_string_array_free</a>(array);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  g_free(remmina_data_dir);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span> groups;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66"> 248</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>, <span class="keyword">const</span> gchar *group)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  gint cmp;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  gchar *p1;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  gchar *p2;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  GNode *child;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  gboolean found;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span> (node == NULL)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (group == NULL || group[0] == <span class="charliteral">'\0'</span>)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</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>  p1 = g_strdup(group);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  p2 = strchr(p1, <span class="charliteral">'/'</span>);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">if</span> (p2)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  *p2++ = <span class="charliteral">'\0'</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>  found = FALSE;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child)) {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  cmp = g_strcmp0(((<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)child->data)->name, p1);</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="keywordflow">if</span> (cmp == 0) {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  found = TRUE;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">break</span>;</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="keywordflow">if</span> (cmp > 0)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!found) {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  data = g_new0(<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a>, 1);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  data->name = p1;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span> (node->data)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  data->group = g_strdup_printf(<span class="stringliteral">"%s/%s"</span>, ((<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data)->group, p1);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  data->group = g_strdup(p1);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">if</span> (child)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  child = g_node_insert_data_before(node, child, data);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  child = g_node_append_data(node, data);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(child, p2);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span> (found)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  g_free(p1);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a6593a3f297f420f012405fa582819857"> 302</a></span> GNode *<a class="code" href="remmina__file__manager_8c.html#a6593a3f297f420f012405fa582819857">remmina_file_manager_get_group_tree</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  GDir *dir;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  g_autofree gchar *datadir = NULL;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  GNode *root;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  root = g_node_new(NULL);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  datadir = g_strdup(<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>());</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  dir = g_dir_open(datadir, 0, NULL);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, datadir, name);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(root, group);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</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>  g_dir_close(dir);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a06196f19abc15526514a5aa59a568798"> 335</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  GNode *child;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">if</span> (!node)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  data = (<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  if (data) {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  g_free(data->name);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  g_free(data->group);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  g_free(data);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  node->data = NULL;</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">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(child);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  g_node_unlink(node);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#af7b58659604660eb0cb40b0e0f8348ab"> 355</a></span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *<a class="code" href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a>(<span class="keyword">const</span> gchar *filename)</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>  TRACE_CALL(__func__);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = NULL;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="struct___remmina_file_plugin.html">RemminaFilePlugin</a> *plugin;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  gchar *p;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">if</span> ((p = strrchr(filename, <span class="charliteral">'.'</span>)) != NULL && g_strcmp0(p + 1, <span class="stringliteral">"remmina"</span>) == 0) {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#a859348bddc9069f06195915692b65076">remmina_plugin_manager_get_import_file_handler</a>(filename);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">if</span> (plugin)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  remminafile = plugin-><a class="code" href="struct___remmina_file_plugin.html#a597178a88c755ebe0614897b7aa279b1">import_func</a>(plugin, filename);</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>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div><div class="ttc" id="remmina__file__manager_8h_html_a0155f52ba9a28e2aa0ea5d831f5d2c90"><div class="ttname"><a href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a></div><div class="ttdeci">G_BEGIN_DECLS struct _RemminaGroupData RemminaGroupData</div></div> +<a href="remmina__file__manager_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> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2010 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2023 Antenore Gatta, Giovanni Panozzo</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> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</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"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</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="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <errno.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <string.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="remmina__string__array_8h.html">remmina_string_array.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482"> 51</a></span> <span class="keyword">static</span> gchar *<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9"> 52</a></span> <span class="keyword">static</span> gchar *<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#aa65bc30beb59d607ba430d966e7e27f5"> 59</a></span> gchar *<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(<span class="keywordtype">void</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>  TRACE_CALL(__func__);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">const</span> gchar *dir = <span class="stringliteral">".remmina"</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">/* From preferences, datadir_path */</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = <a class="code" href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a>(<span class="stringliteral">"datadir_path"</span>);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> != NULL && strlen(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>) > 0)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">/* Legacy ~/.remmina */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_home_dir(), dir, NULL);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">/* ~/.local/share/remmina */</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">/* /usr/local/share/remmina */</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> gchar *<span class="keyword">const</span> *dirs = g_get_system_data_dirs();</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>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">for</span> (i = 0; dirs[i] != NULL; ++i) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, dirs[i], <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">/* The last case we use the home ~/.local/share/remmina */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</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> </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3"> 97</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keyword">const</span> <span class="keywordtype">char</span> *dst_path)</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>  GFile *src = g_file_new_for_path(src_path), *dst = g_file_new_for_path(dst_path);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">/* We don’t overwrite the target if it exists */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> gboolean ok = g_file_copy(src, dst, G_FILE_COPY_NONE, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  g_object_unref(dst);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  g_object_unref(src);</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">return</span> ok;</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> </div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#afa2b1889dced4289b0f7d7edffc82e72"> 116</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#afa2b1889dced4289b0f7d7edffc82e72">remmina_file_manager_init</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GDir *dir;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> gchar *legacy = <span class="stringliteral">".remmina"</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> gchar *filename;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">int</span> i;</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="comment">/* Get and create the XDG_DATA_HOME directory */</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = <a class="code" href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a>(<span class="stringliteral">"datadir_path"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0750) == 0) {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  REMMINA_DEBUG(<span class="stringliteral">"Initialized the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">/* Get and create the XDG_DATA_HOME directory */</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0750) == 0)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  REMMINA_DEBUG(<span class="stringliteral">"Initialized the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  REMMINA_CRITICAL(<span class="stringliteral">"Cannot create the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="comment">/* Create the XDG_CACHE_HOME directory */</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_cache_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>, 0750);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>), <a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = NULL;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">/* Empty legacy ~/.remmina */</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_home_dir(), legacy, NULL);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR)) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0, NULL);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">while</span> ((filename = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  g_build_path(<span class="stringliteral">"/"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, filename, NULL),</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(),</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="stringliteral">"remmina"</span>, filename, NULL));</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>  g_dir_close(dir);</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> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">/* XDG_DATA_DIRS, i.e. /usr/local/share/remmina */</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">const</span> gchar *<span class="keyword">const</span> *dirs = g_get_system_data_dirs();</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>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">for</span> (i = 0; dirs[i] != NULL; ++i) {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, dirs[i], <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR)) {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0, NULL);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">while</span> ((filename = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  g_build_path(<span class="stringliteral">"/"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, filename, NULL),</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(),</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="stringliteral">"remmina"</span>, filename, NULL));</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="comment">/* At last we make sure we use XDG_USER_DATA */</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> != NULL)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a55a717aafc046713380bd2c55f29165a"> 178</a></span> gint <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>(GFunc func, gpointer user_data)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  GDir *dir;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  gint items_count = 0;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  gchar *remmina_data_dir;</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>  remmina_data_dir = <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>();</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  dir = g_dir_open(remmina_data_dir, 0, NULL);</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">if</span> (dir) {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  remmina_data_dir, name);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  (*func)(remminafile, user_data);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  items_count++;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</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>  g_dir_close(dir);</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>  g_free(remmina_data_dir);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> items_count;</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"><a class="line" href="remmina__file__manager_8h.html#a536edeef371d907ab3936f4d65c3003d"> 210</a></span> gchar *<a class="code" href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  GDir *dir;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <a class="code" href="remmina__string__array_8h.html#a62228cb0bc959307e3268cff98e1f7bb">RemminaStringArray</a> *array;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  gchar *groups;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  gchar *remmina_data_dir;</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>  remmina_data_dir = <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  array = <a class="code" href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a>();</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  dir = g_dir_open(remmina_data_dir, 0, NULL);</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>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, remmina_data_dir, name);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (group && <a class="code" href="remmina__string__array_8c.html#ab93a69850cfb4117c223a3f145ced986">remmina_string_array_find</a>(array, group) < 0)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="remmina__string__array_8c.html#a2aaacca7db4b86f836486cfb559398f0">remmina_string_array_add</a>(array, group);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  g_dir_close(dir);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <a class="code" href="remmina__string__array_8c.html#a3eab4bae72ff130ad10ec8fc7364ce70">remmina_string_array_sort</a>(array);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  groups = <a class="code" href="remmina__string__array_8c.html#a96f7bec7ce32de6cf5deadcd5aec51ec">remmina_string_array_to_string</a>(array);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="remmina__string__array_8c.html#a8ab78913d299df665a408a8a5ec51bbe">remmina_string_array_free</a>(array);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  g_free(remmina_data_dir);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> groups;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66"> 249</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>, <span class="keyword">const</span> gchar *group)</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>  TRACE_CALL(__func__);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  gint cmp;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  gchar *p1;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  gchar *p2;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  GNode *child;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  gboolean found;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">if</span> (node == NULL)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span>;</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="keywordflow">if</span> (group == NULL || group[0] == <span class="charliteral">'\0'</span>)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span>;</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>  p1 = g_strdup(group);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  p2 = strchr(p1, <span class="charliteral">'/'</span>);</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="keywordflow">if</span> (p2)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  *p2++ = <span class="charliteral">'\0'</span>;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  found = FALSE;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child)) {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  cmp = g_strcmp0(((<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)child->data)->name, p1);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">if</span> (cmp == 0) {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  found = TRUE;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">break</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> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">if</span> (cmp > 0)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">if</span> (!found) {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  data = g_new0(<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a>, 1);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  data->name = p1;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">if</span> (node->data)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  data->group = g_strdup_printf(<span class="stringliteral">"%s/%s"</span>, ((<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data)->group, p1);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  data->group = g_strdup(p1);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">if</span> (child)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  child = g_node_insert_data_before(node, child, data);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  child = g_node_append_data(node, data);</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>  <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(child, p2);</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">if</span> (found)</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  g_free(p1);</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> </div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a6593a3f297f420f012405fa582819857"> 303</a></span> GNode *<a class="code" href="remmina__file__manager_8c.html#a6593a3f297f420f012405fa582819857">remmina_file_manager_get_group_tree</a>(<span class="keywordtype">void</span>)</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>  TRACE_CALL(__func__);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  GDir *dir;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  g_autofree gchar *datadir = NULL;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GNode *root;</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  root = g_node_new(NULL);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  datadir = g_strdup(<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>());</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  dir = g_dir_open(datadir, 0, NULL);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, datadir, name);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(root, group);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</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>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  g_dir_close(dir);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a06196f19abc15526514a5aa59a568798"> 336</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  GNode *child;</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>  <span class="keywordflow">if</span> (!node)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  data = (<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  if (data) {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  g_free(data->name);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  g_free(data->group);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  g_free(data);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  node->data = NULL;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child))</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(child);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  g_node_unlink(node);</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> </div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#af7b58659604660eb0cb40b0e0f8348ab"> 356</a></span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *<a class="code" href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = NULL;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <a class="code" href="struct___remmina_file_plugin.html">RemminaFilePlugin</a> *plugin;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  gchar *p;</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> ((p = strrchr(filename, <span class="charliteral">'.'</span>)) != NULL && g_strcmp0(p + 1, <span class="stringliteral">"remmina"</span>) == 0) {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#a859348bddc9069f06195915692b65076">remmina_plugin_manager_get_import_file_handler</a>(filename);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordflow">if</span> (plugin)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  remminafile = plugin-><a class="code" href="struct___remmina_file_plugin.html#a597178a88c755ebe0614897b7aa279b1">import_func</a>(plugin, filename);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> }</div><div class="ttc" id="remmina__file__manager_8h_html_a0155f52ba9a28e2aa0ea5d831f5d2c90"><div class="ttname"><a href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a></div><div class="ttdeci">G_BEGIN_DECLS struct _RemminaGroupData RemminaGroupData</div></div> <div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> <div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> @@ -98,29 +98,29 @@ $(document).ready(function(){initNavTree('remmina__file__manager_8c_source.html' <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> <div class="ttc" id="struct___remmina_file_plugin_html_a597178a88c755ebe0614897b7aa279b1"><div class="ttname"><a href="struct___remmina_file_plugin.html#a597178a88c755ebe0614897b7aa279b1">_RemminaFilePlugin::import_func</a></div><div class="ttdeci">RemminaFile *(* import_func)(struct _RemminaFilePlugin *instance, const gchar *from_file)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00108">plugin.h:108</a></div></div> <div class="ttc" id="remmina__trace__calls_8h_html"><div class="ttname"><a href="remmina__trace__calls_8h.html">remmina_trace_calls.h</a></div></div> -<div class="ttc" id="remmina__file__manager_8c_html_a06196f19abc15526514a5aa59a568798"><div class="ttname"><a href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a></div><div class="ttdeci">void remmina_file_manager_free_group_tree(GNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00335">remmina_file_manager.c:335</a></div></div> +<div class="ttc" id="remmina__file__manager_8c_html_a06196f19abc15526514a5aa59a568798"><div class="ttname"><a href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a></div><div class="ttdeci">void remmina_file_manager_free_group_tree(GNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00336">remmina_file_manager.c:336</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a859348bddc9069f06195915692b65076"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a859348bddc9069f06195915692b65076">remmina_plugin_manager_get_import_file_handler</a></div><div class="ttdeci">RemminaFilePlugin * remmina_plugin_manager_get_import_file_handler(const gchar *file)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00570">remmina_plugin_manager.c:570</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_ab93a69850cfb4117c223a3f145ced986"><div class="ttname"><a href="remmina__string__array_8c.html#ab93a69850cfb4117c223a3f145ced986">remmina_string_array_find</a></div><div class="ttdeci">gint remmina_string_array_find(RemminaStringArray *array, const gchar *str)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00092">remmina_string_array.c:92</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_a96f7bec7ce32de6cf5deadcd5aec51ec"><div class="ttname"><a href="remmina__string__array_8c.html#a96f7bec7ce32de6cf5deadcd5aec51ec">remmina_string_array_to_string</a></div><div class="ttdeci">gchar * remmina_string_array_to_string(RemminaStringArray *array)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00155">remmina_string_array.c:155</a></div></div> <div class="ttc" id="remmina__ssh_8c_html_a85d5bd836f83ef1dbbcf4657f32e0792"><div class="ttname"><a href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a></div><div class="ttdeci">node_t * node</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8c_source.html#l00142">remmina_ssh.c:142</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_a4d6280ce5d9e70ceb43dd24639d843d3"><div class="ttname"><a href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a></div><div class="ttdeci">static gboolean remmina_file_manager_do_copy(const char *src_path, const char *dst_path)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00097">remmina_file_manager.c:97</a></div></div> -<div class="ttc" id="remmina__pref_8c_html_a6bcbf4cc3a58ed4ee9f087b4270d8fd6"><div class="ttname"><a href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a></div><div class="ttdeci">gchar * remmina_pref_get_value(const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01136">remmina_pref.c:1136</a></div></div> +<div class="ttc" id="remmina__pref_8c_html_a6bcbf4cc3a58ed4ee9f087b4270d8fd6"><div class="ttname"><a href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a></div><div class="ttdeci">gchar * remmina_pref_get_value(const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01137">remmina_pref.c:1137</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_afa2b1889dced4289b0f7d7edffc82e72"><div class="ttname"><a href="remmina__file__manager_8c.html#afa2b1889dced4289b0f7d7edffc82e72">remmina_file_manager_init</a></div><div class="ttdeci">void remmina_file_manager_init(void)</div><div class="ttdoc">It creates the Remmina data and cache folders. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00116">remmina_file_manager.c:116</a></div></div> <div class="ttc" id="remmina__public_8h_html"><div class="ttname"><a href="remmina__public_8h.html">remmina_public.h</a></div></div> <div class="ttc" id="remmina__string__array_8h_html"><div class="ttname"><a href="remmina__string__array_8h.html">remmina_string_array.h</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_a3eab4bae72ff130ad10ec8fc7364ce70"><div class="ttname"><a href="remmina__string__array_8c.html#a3eab4bae72ff130ad10ec8fc7364ce70">remmina_string_array_sort</a></div><div class="ttdeci">void remmina_string_array_sort(RemminaStringArray *array)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00148">remmina_string_array.c:148</a></div></div> -<div class="ttc" id="remmina__file__manager_8c_html_a3b100405380ddccce98669a8b46ecc66"><div class="ttname"><a href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a></div><div class="ttdeci">static void remmina_file_manager_add_group(GNode *node, const gchar *group)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00248">remmina_file_manager.c:248</a></div></div> +<div class="ttc" id="remmina__file__manager_8c_html_a3b100405380ddccce98669a8b46ecc66"><div class="ttname"><a href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a></div><div class="ttdeci">static void remmina_file_manager_add_group(GNode *node, const gchar *group)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00249">remmina_file_manager.c:249</a></div></div> <div class="ttc" id="remmina__log_8h_html"><div class="ttname"><a href="remmina__log_8h.html">remmina_log.h</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_a8ab78913d299df665a408a8a5ec51bbe"><div class="ttname"><a href="remmina__string__array_8c.html#a8ab78913d299df665a408a8a5ec51bbe">remmina_string_array_free</a></div><div class="ttdeci">void remmina_string_array_free(RemminaStringArray *array)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00170">remmina_string_array.c:170</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_aa65bc30beb59d607ba430d966e7e27f5"><div class="ttname"><a href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a></div><div class="ttdeci">gchar * remmina_file_get_datadir(void)</div><div class="ttdoc">Return datadir_path from pref or first found data dir as per XDG specs. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00059">remmina_file_manager.c:59</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_aff90e964c6541b1af02adf7ea39e6e02"><div class="ttname"><a href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a></div><div class="ttdeci">RemminaStringArray * remmina_string_array_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00044">remmina_string_array.c:44</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_ace1098aad45256ac0b0155cb042472e9"><div class="ttname"><a href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a></div><div class="ttdeci">static gchar * cachedir</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00052">remmina_file_manager.c:52</a></div></div> <div class="ttc" id="remmina__pref_8h_html"><div class="ttname"><a href="remmina__pref_8h.html">remmina_pref.h</a></div></div> -<div class="ttc" id="remmina__file__manager_8c_html_a536edeef371d907ab3936f4d65c3003d"><div class="ttname"><a href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a></div><div class="ttdeci">gchar * remmina_file_manager_get_groups(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00209">remmina_file_manager.c:209</a></div></div> -<div class="ttc" id="remmina__file__manager_8c_html_af7b58659604660eb0cb40b0e0f8348ab"><div class="ttname"><a href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a></div><div class="ttdeci">RemminaFile * remmina_file_manager_load_file(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00355">remmina_file_manager.c:355</a></div></div> +<div class="ttc" id="remmina__file__manager_8c_html_a536edeef371d907ab3936f4d65c3003d"><div class="ttname"><a href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a></div><div class="ttdeci">gchar * remmina_file_manager_get_groups(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00210">remmina_file_manager.c:210</a></div></div> +<div class="ttc" id="remmina__file__manager_8c_html_af7b58659604660eb0cb40b0e0f8348ab"><div class="ttname"><a href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a></div><div class="ttdeci">RemminaFile * remmina_file_manager_load_file(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00356">remmina_file_manager.c:356</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_a2aaacca7db4b86f836486cfb559398f0"><div class="ttname"><a href="remmina__string__array_8c.html#a2aaacca7db4b86f836486cfb559398f0">remmina_string_array_add</a></div><div class="ttdeci">void remmina_string_array_add(RemminaStringArray *array, const gchar *str)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00086">remmina_string_array.c:86</a></div></div> -<div class="ttc" id="remmina__file__manager_8c_html_a6593a3f297f420f012405fa582819857"><div class="ttname"><a href="remmina__file__manager_8c.html#a6593a3f297f420f012405fa582819857">remmina_file_manager_get_group_tree</a></div><div class="ttdeci">GNode * remmina_file_manager_get_group_tree(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00302">remmina_file_manager.c:302</a></div></div> -<div class="ttc" id="remmina__file__manager_8c_html_a55a717aafc046713380bd2c55f29165a"><div class="ttname"><a href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a></div><div class="ttdeci">gint remmina_file_manager_iterate(GFunc func, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00177">remmina_file_manager.c:177</a></div></div> +<div class="ttc" id="remmina__file__manager_8c_html_a6593a3f297f420f012405fa582819857"><div class="ttname"><a href="remmina__file__manager_8c.html#a6593a3f297f420f012405fa582819857">remmina_file_manager_get_group_tree</a></div><div class="ttdeci">GNode * remmina_file_manager_get_group_tree(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00303">remmina_file_manager.c:303</a></div></div> +<div class="ttc" id="remmina__file__manager_8c_html_a55a717aafc046713380bd2c55f29165a"><div class="ttname"><a href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a></div><div class="ttdeci">gint remmina_file_manager_iterate(GFunc func, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00178">remmina_file_manager.c:178</a></div></div> </div><!-- fragment --></div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> |