Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release > by-pkgid > 0c00422fba9a46710101d04f3f3175e7 > files > 179

geany-devel-1.24.1-3.mga5.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.8"/>
<title>Geany: utils.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Geany
   &#160;<span id="projectnumber">1.24.1</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.8 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">utils.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>General utility functions, non-GTK related.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ab88f3ea43f82b5809dd64c72c5d2f355"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ab88f3ea43f82b5809dd64c72c5d2f355">EMPTY</a>(ptr)&#160;&#160;&#160;(!(ptr) || !*(ptr))</td></tr>
<tr class="memdesc:ab88f3ea43f82b5809dd64c72c5d2f355"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns <code>TRUE</code> if <em>ptr</em> is <code>NULL</code> or <code>*ptr</code> is <code>FALSE</code>.  <a href="#ab88f3ea43f82b5809dd64c72c5d2f355">More...</a><br /></td></tr>
<tr class="separator:ab88f3ea43f82b5809dd64c72c5d2f355"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee67c79e19e664e1fbb401980a6ef0d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aee67c79e19e664e1fbb401980a6ef0d5">foreach_array</a>(type, item, array)&#160;&#160;&#160;<a class="el" href="utils_8h.html#a5499ae976d4fe9d8d831d341292939cb">foreach_c_array</a>(item, ((type*)(gpointer)array-&gt;data), array-&gt;len)</td></tr>
<tr class="memdesc:aee67c79e19e664e1fbb401980a6ef0d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates all items in <em>array</em>.  <a href="#aee67c79e19e664e1fbb401980a6ef0d5">More...</a><br /></td></tr>
<tr class="separator:aee67c79e19e664e1fbb401980a6ef0d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5499ae976d4fe9d8d831d341292939cb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a5499ae976d4fe9d8d831d341292939cb">foreach_c_array</a>(item, array, len)&#160;&#160;&#160;for (item = array; item &lt; &amp;array[len]; item++)</td></tr>
<tr class="memdesc:a5499ae976d4fe9d8d831d341292939cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates all the items in <em>array</em> using pointers.  <a href="#a5499ae976d4fe9d8d831d341292939cb">More...</a><br /></td></tr>
<tr class="separator:a5499ae976d4fe9d8d831d341292939cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad5a640d506b5bed9fdb9975b4097b8b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aad5a640d506b5bed9fdb9975b4097b8b">foreach_dir</a>(filename, dir)&#160;&#160;&#160;for ((filename) = g_dir_read_name(dir); (filename) != NULL; (filename) = g_dir_read_name(dir))</td></tr>
<tr class="memdesc:aad5a640d506b5bed9fdb9975b4097b8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates through each unsorted filename in a <code>GDir</code>.  <a href="#aad5a640d506b5bed9fdb9975b4097b8b">More...</a><br /></td></tr>
<tr class="separator:aad5a640d506b5bed9fdb9975b4097b8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a169c145d419ab4314d20c64a8d37e215"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a169c145d419ab4314d20c64a8d37e215">foreach_list</a>(node, list)&#160;&#160;&#160;for (node = list; node != NULL; node = node-&gt;next)</td></tr>
<tr class="memdesc:a169c145d419ab4314d20c64a8d37e215"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates all the nodes in <em>list</em>.  <a href="#a169c145d419ab4314d20c64a8d37e215">More...</a><br /></td></tr>
<tr class="separator:a169c145d419ab4314d20c64a8d37e215"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4059859fcea26d7a6fc6751e35b6ea02"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a4059859fcea26d7a6fc6751e35b6ea02">foreach_ptr_array</a>(item, idx, ptr_array)</td></tr>
<tr class="memdesc:a4059859fcea26d7a6fc6751e35b6ea02"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates all the pointers in <em>ptr_array</em>.  <a href="#a4059859fcea26d7a6fc6751e35b6ea02">More...</a><br /></td></tr>
<tr class="separator:a4059859fcea26d7a6fc6751e35b6ea02"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac46693eb3c76b70b647a2d69a8ea2c64"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ac46693eb3c76b70b647a2d69a8ea2c64">foreach_range</a>(i, size)&#160;&#160;&#160;for (i = 0; i &lt; size; i++)</td></tr>
<tr class="memdesc:ac46693eb3c76b70b647a2d69a8ea2c64"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates from 0 to <em>size</em>.  <a href="#ac46693eb3c76b70b647a2d69a8ea2c64">More...</a><br /></td></tr>
<tr class="separator:ac46693eb3c76b70b647a2d69a8ea2c64"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a004c3f8f8be4958ac8ef98df30ca7706"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a004c3f8f8be4958ac8ef98df30ca7706">foreach_slist</a>(node, list)&#160;&#160;&#160;<a class="el" href="utils_8h.html#a169c145d419ab4314d20c64a8d37e215">foreach_list</a>(node, list)</td></tr>
<tr class="memdesc:a004c3f8f8be4958ac8ef98df30ca7706"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates all the nodes in <em>list</em>.  <a href="#a004c3f8f8be4958ac8ef98df30ca7706">More...</a><br /></td></tr>
<tr class="separator:a004c3f8f8be4958ac8ef98df30ca7706"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55eb7ea8bde63ac375c4790a62ab15e8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a55eb7ea8bde63ac375c4790a62ab15e8">foreach_str</a>(char_ptr, string)&#160;&#160;&#160;for (char_ptr = string; *char_ptr; char_ptr++)</td></tr>
<tr class="memdesc:a55eb7ea8bde63ac375c4790a62ab15e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates through each character in <em>string</em>.  <a href="#a55eb7ea8bde63ac375c4790a62ab15e8">More...</a><br /></td></tr>
<tr class="separator:a55eb7ea8bde63ac375c4790a62ab15e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19590066f467013c446998beb09e0521"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a19590066f467013c446998beb09e0521">foreach_strv</a>(str_ptr, strv)&#160;&#160;&#160;if (!(strv)) {} else <a class="el" href="utils_8h.html#a55eb7ea8bde63ac375c4790a62ab15e8">foreach_str</a>(str_ptr, strv)</td></tr>
<tr class="memdesc:a19590066f467013c446998beb09e0521"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates a null-terminated string vector.  <a href="#a19590066f467013c446998beb09e0521">More...</a><br /></td></tr>
<tr class="separator:a19590066f467013c446998beb09e0521"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a35d7e28309db577524db51300b87d3d3"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a35d7e28309db577524db51300b87d3d3">NZV</a>(ptr)&#160;&#160;&#160;(!<a class="el" href="utils_8h.html#ab88f3ea43f82b5809dd64c72c5d2f355">EMPTY</a>(ptr))</td></tr>
<tr class="separator:a35d7e28309db577524db51300b87d3d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a613a705b9bafeb739678bed2a4cf66e1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a613a705b9bafeb739678bed2a4cf66e1">SETPTR</a>(ptr, result)&#160;&#160;&#160;do <a class="el" href="utils_8h.html#a53526a65ec890167c856b47084be399d">setptr</a>(ptr, result) while (0)</td></tr>
<tr class="memdesc:a613a705b9bafeb739678bed2a4cf66e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns <em>result</em> to <em>ptr</em>, then frees the old value.  <a href="#a613a705b9bafeb739678bed2a4cf66e1">More...</a><br /></td></tr>
<tr class="separator:a613a705b9bafeb739678bed2a4cf66e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53526a65ec890167c856b47084be399d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a53526a65ec890167c856b47084be399d">setptr</a>(ptr, result)</td></tr>
<tr class="separator:a53526a65ec890167c856b47084be399d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe75db65374bf89f925bf9584bd0ff18"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#abe75db65374bf89f925bf9584bd0ff18">utils_strdupa</a>(str)&#160;&#160;&#160;strcpy(g_alloca(strlen(str) + 1), str)</td></tr>
<tr class="memdesc:abe75db65374bf89f925bf9584bd0ff18"><td class="mdescLeft">&#160;</td><td class="mdescRight">Duplicates a string on the stack using <code>g_alloca()</code>.  <a href="#abe75db65374bf89f925bf9584bd0ff18">More...</a><br /></td></tr>
<tr class="separator:abe75db65374bf89f925bf9584bd0ff18"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a7ec85a0232413597f8be47a408a9857d"><td class="memItemLeft" align="right" valign="top">gchar **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a7ec85a0232413597f8be47a408a9857d">utils_copy_environment</a> (const gchar **exclude_vars, const gchar *first_varname,...) G_GNUC_NULL_TERMINATED</td></tr>
<tr class="memdesc:a7ec85a0232413597f8be47a408a9857d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies the current environment into a new array.  <a href="#a7ec85a0232413597f8be47a408a9857d">More...</a><br /></td></tr>
<tr class="separator:a7ec85a0232413597f8be47a408a9857d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9508a79fec8f5f7812f3cc39b233a85"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af9508a79fec8f5f7812f3cc39b233a85">utils_find_open_xml_tag</a> (const gchar sel[], gint size)</td></tr>
<tr class="memdesc:af9508a79fec8f5f7812f3cc39b233a85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Searches backward through <em>size</em> bytes looking for a '&lt;'.  <a href="#af9508a79fec8f5f7812f3cc39b233a85">More...</a><br /></td></tr>
<tr class="separator:af9508a79fec8f5f7812f3cc39b233a85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b6dba4f3d3b08cf1e6a4aa4d95eaa32"><td class="memItemLeft" align="right" valign="top">const gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a5b6dba4f3d3b08cf1e6a4aa4d95eaa32">utils_find_open_xml_tag_pos</a> (const gchar sel[], gint size)</td></tr>
<tr class="memdesc:a5b6dba4f3d3b08cf1e6a4aa4d95eaa32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Searches backward through <em>size</em> bytes looking for a '&lt;'.  <a href="#a5b6dba4f3d3b08cf1e6a4aa4d95eaa32">More...</a><br /></td></tr>
<tr class="separator:a5b6dba4f3d3b08cf1e6a4aa4d95eaa32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa74528ad592a8b9eb8b18217145b92bd"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aa74528ad592a8b9eb8b18217145b92bd">utils_get_date_time</a> (const gchar *format, time_t *time_to_use)</td></tr>
<tr class="memdesc:aa74528ad592a8b9eb8b18217145b92bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieves a formatted date/time string from strftime().  <a href="#aa74528ad592a8b9eb8b18217145b92bd">More...</a><br /></td></tr>
<tr class="separator:aa74528ad592a8b9eb8b18217145b92bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3060951b6e81d6d80714f827a9a3a75a"><td class="memItemLeft" align="right" valign="top">GSList *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3060951b6e81d6d80714f827a9a3a75a">utils_get_file_list</a> (const gchar *path, guint *length, GError **error)</td></tr>
<tr class="memdesc:a3060951b6e81d6d80714f827a9a3a75a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets a sorted list of files from the specified directory.  <a href="#a3060951b6e81d6d80714f827a9a3a75a">More...</a><br /></td></tr>
<tr class="separator:a3060951b6e81d6d80714f827a9a3a75a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a8ec74c8835996fa216c655f3cb181a"><td class="memItemLeft" align="right" valign="top">GSList *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3a8ec74c8835996fa216c655f3cb181a">utils_get_file_list_full</a> (const gchar *path, gboolean full_path, gboolean sort, GError **error)</td></tr>
<tr class="memdesc:a3a8ec74c8835996fa216c655f3cb181a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets a list of files from the specified directory.  <a href="#a3a8ec74c8835996fa216c655f3cb181a">More...</a><br /></td></tr>
<tr class="separator:a3a8ec74c8835996fa216c655f3cb181a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a560f1208bd2ed1b6abc8a20a0f98961a"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a560f1208bd2ed1b6abc8a20a0f98961a">utils_get_locale_from_utf8</a> (const gchar *utf8_text)</td></tr>
<tr class="memdesc:a560f1208bd2ed1b6abc8a20a0f98961a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the given UTF-8 encoded string into locale encoding.  <a href="#a560f1208bd2ed1b6abc8a20a0f98961a">More...</a><br /></td></tr>
<tr class="separator:a560f1208bd2ed1b6abc8a20a0f98961a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a54a1ba9b4032a939932d5714206039b4"><td class="memItemLeft" align="right" valign="top">gboolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a54a1ba9b4032a939932d5714206039b4">utils_get_setting_boolean</a> (GKeyFile *config, const gchar *section, const gchar *key, const gboolean default_value)</td></tr>
<tr class="memdesc:a54a1ba9b4032a939932d5714206039b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps g_key_file_get_boolean() to add a default value argument.  <a href="#a54a1ba9b4032a939932d5714206039b4">More...</a><br /></td></tr>
<tr class="separator:a54a1ba9b4032a939932d5714206039b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53fee50bba749034d7b94bfd50531a44"><td class="memItemLeft" align="right" valign="top">gint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a53fee50bba749034d7b94bfd50531a44">utils_get_setting_integer</a> (GKeyFile *config, const gchar *section, const gchar *key, const gint default_value)</td></tr>
<tr class="memdesc:a53fee50bba749034d7b94bfd50531a44"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps g_key_file_get_integer() to add a default value argument.  <a href="#a53fee50bba749034d7b94bfd50531a44">More...</a><br /></td></tr>
<tr class="separator:a53fee50bba749034d7b94bfd50531a44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c1811e1074c6fd85f5aaf089aa8af7c"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a8c1811e1074c6fd85f5aaf089aa8af7c">utils_get_setting_string</a> (GKeyFile *config, const gchar *section, const gchar *key, const gchar *default_value)</td></tr>
<tr class="memdesc:a8c1811e1074c6fd85f5aaf089aa8af7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps g_key_file_get_string() to add a default value argument.  <a href="#a8c1811e1074c6fd85f5aaf089aa8af7c">More...</a><br /></td></tr>
<tr class="separator:a8c1811e1074c6fd85f5aaf089aa8af7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2249982577bbb384983ab56c6de35c05"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2249982577bbb384983ab56c6de35c05">utils_get_utf8_from_locale</a> (const gchar *locale_text)</td></tr>
<tr class="memdesc:a2249982577bbb384983ab56c6de35c05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the given string (in locale encoding) into UTF-8 encoding.  <a href="#a2249982577bbb384983ab56c6de35c05">More...</a><br /></td></tr>
<tr class="separator:a2249982577bbb384983ab56c6de35c05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae2dc60b82a2aa8bd3a0eb0784206803"><td class="memItemLeft" align="right" valign="top">gint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aae2dc60b82a2aa8bd3a0eb0784206803">utils_mkdir</a> (const gchar *path, gboolean create_parent_dirs)</td></tr>
<tr class="memdesc:aae2dc60b82a2aa8bd3a0eb0784206803"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a directory if it doesn't already exist.  <a href="#aae2dc60b82a2aa8bd3a0eb0784206803">More...</a><br /></td></tr>
<tr class="separator:aae2dc60b82a2aa8bd3a0eb0784206803"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03db6196a66b7e3a93784bc40a9e599a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a03db6196a66b7e3a93784bc40a9e599a">utils_open_browser</a> (const gchar *uri)</td></tr>
<tr class="memdesc:a03db6196a66b7e3a93784bc40a9e599a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tries to open the given URI in a browser.  <a href="#a03db6196a66b7e3a93784bc40a9e599a">More...</a><br /></td></tr>
<tr class="separator:a03db6196a66b7e3a93784bc40a9e599a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a090553ea45a71972785a0e4118b705c2"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a090553ea45a71972785a0e4118b705c2">utils_remove_ext_from_filename</a> (const gchar *filename)</td></tr>
<tr class="memdesc:a090553ea45a71972785a0e4118b705c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes the extension from <em>filename</em> and return the result in a newly allocated string.  <a href="#a090553ea45a71972785a0e4118b705c2">More...</a><br /></td></tr>
<tr class="separator:a090553ea45a71972785a0e4118b705c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5bbd805dbf5c303f74ed0e9546cd789"><td class="memItemLeft" align="right" valign="top">gboolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af5bbd805dbf5c303f74ed0e9546cd789">utils_spawn_async</a> (const gchar *dir, gchar **argv, gchar **env, GSpawnFlags flags, GSpawnChildSetupFunc child_setup, gpointer user_data, GPid *child_pid, GError **error)</td></tr>
<tr class="memdesc:af5bbd805dbf5c303f74ed0e9546cd789"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps g_spawn_async() and internally calls this function on Unix-like systems.  <a href="#af5bbd805dbf5c303f74ed0e9546cd789">More...</a><br /></td></tr>
<tr class="separator:af5bbd805dbf5c303f74ed0e9546cd789"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a16bd3da5e308fc250f1104cdd49fb58e"><td class="memItemLeft" align="right" valign="top">gboolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a16bd3da5e308fc250f1104cdd49fb58e">utils_spawn_sync</a> (const gchar *dir, gchar **argv, gchar **env, GSpawnFlags flags, GSpawnChildSetupFunc child_setup, gpointer user_data, gchar **std_out, gchar **std_err, gint *exit_status, GError **error)</td></tr>
<tr class="memdesc:a16bd3da5e308fc250f1104cdd49fb58e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps g_spawn_sync() and internally calls this function on Unix-like systems.  <a href="#a16bd3da5e308fc250f1104cdd49fb58e">More...</a><br /></td></tr>
<tr class="separator:a16bd3da5e308fc250f1104cdd49fb58e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ac77e7048fd9fdb829935953348eb33"><td class="memItemLeft" align="right" valign="top">gint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2ac77e7048fd9fdb829935953348eb33">utils_str_casecmp</a> (const gchar *s1, const gchar *s2)</td></tr>
<tr class="memdesc:a2ac77e7048fd9fdb829935953348eb33"><td class="mdescLeft">&#160;</td><td class="mdescRight">A replacement function for g_strncasecmp() to compare strings case-insensitive.  <a href="#a2ac77e7048fd9fdb829935953348eb33">More...</a><br /></td></tr>
<tr class="separator:a2ac77e7048fd9fdb829935953348eb33"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac56235d733d4c49add93041d041cabdb"><td class="memItemLeft" align="right" valign="top">gboolean&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ac56235d733d4c49add93041d041cabdb">utils_str_equal</a> (const gchar *a, const gchar *b)</td></tr>
<tr class="memdesc:ac56235d733d4c49add93041d041cabdb"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>NULL-safe</code> string comparison.  <a href="#ac56235d733d4c49add93041d041cabdb">More...</a><br /></td></tr>
<tr class="separator:ac56235d733d4c49add93041d041cabdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b61f71468588618fe2ca456eb819b82"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a1b61f71468588618fe2ca456eb819b82">utils_str_middle_truncate</a> (const gchar *string, guint truncate_length)</td></tr>
<tr class="memdesc:a1b61f71468588618fe2ca456eb819b82"><td class="mdescLeft">&#160;</td><td class="mdescRight">Truncates the input string to a given length.  <a href="#a1b61f71468588618fe2ca456eb819b82">More...</a><br /></td></tr>
<tr class="separator:a1b61f71468588618fe2ca456eb819b82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af956a792bd95888253326ea14a20e301"><td class="memItemLeft" align="right" valign="top">gchar *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af956a792bd95888253326ea14a20e301">utils_str_remove_chars</a> (gchar *string, const gchar *chars)</td></tr>
<tr class="memdesc:af956a792bd95888253326ea14a20e301"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes characters from a string, in place.  <a href="#af956a792bd95888253326ea14a20e301">More...</a><br /></td></tr>
<tr class="separator:af956a792bd95888253326ea14a20e301"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ff9e2d7c70e270c45517d4c4d3c8205"><td class="memItemLeft" align="right" valign="top">guint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3ff9e2d7c70e270c45517d4c4d3c8205">utils_string_replace_all</a> (GString *haystack, const gchar *needle, const gchar *replace)</td></tr>
<tr class="memdesc:a3ff9e2d7c70e270c45517d4c4d3c8205"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replaces all occurrences of <em>needle</em> in <em>haystack</em> with <em>replace</em>.  <a href="#a3ff9e2d7c70e270c45517d4c4d3c8205">More...</a><br /></td></tr>
<tr class="separator:a3ff9e2d7c70e270c45517d4c4d3c8205"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb12e3ab1b8552fb78c80cb9f1ca4bc2"><td class="memItemLeft" align="right" valign="top">guint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#afb12e3ab1b8552fb78c80cb9f1ca4bc2">utils_string_replace_first</a> (GString *haystack, const gchar *needle, const gchar *replace)</td></tr>
<tr class="memdesc:afb12e3ab1b8552fb78c80cb9f1ca4bc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Replaces only the first occurrence of <em>needle</em> in <em>haystack</em> with <em>replace</em>.  <a href="#afb12e3ab1b8552fb78c80cb9f1ca4bc2">More...</a><br /></td></tr>
<tr class="separator:afb12e3ab1b8552fb78c80cb9f1ca4bc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a26fe82267d0b5bfa20462f6eb11e31"><td class="memItemLeft" align="right" valign="top">gint&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a2a26fe82267d0b5bfa20462f6eb11e31">utils_write_file</a> (const gchar *filename, const gchar *text)</td></tr>
<tr class="memdesc:a2a26fe82267d0b5bfa20462f6eb11e31"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <em>text</em> into a file named <em>filename</em>.  <a href="#a2a26fe82267d0b5bfa20462f6eb11e31">More...</a><br /></td></tr>
<tr class="separator:a2a26fe82267d0b5bfa20462f6eb11e31"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>General utility functions, non-GTK related. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ab88f3ea43f82b5809dd64c72c5d2f355"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EMPTY</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ptr</td><td>)</td>
          <td>&#160;&#160;&#160;(!(ptr) || !*(ptr))</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns <code>TRUE</code> if <em>ptr</em> is <code>NULL</code> or <code>*ptr</code> is <code>FALSE</code>. </p>

</div>
</div>
<a class="anchor" id="aee67c79e19e664e1fbb401980a6ef0d5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_array</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">item, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">array&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;<a class="el" href="utils_8h.html#a5499ae976d4fe9d8d831d341292939cb">foreach_c_array</a>(item, ((type*)(gpointer)array-&gt;data), array-&gt;len)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates all items in <em>array</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">type</td><td>Type of <em>item</em>. </td></tr>
    <tr><td class="paramname">item</td><td>pointer to item in <em>array</em>. </td></tr>
    <tr><td class="paramname">array</td><td><code>GArray</code> to traverse. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a5499ae976d4fe9d8d831d341292939cb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_c_array</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">item, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">array, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">len&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;for (item = array; item &lt; &amp;array[len]; item++)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates all the items in <em>array</em> using pointers. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">item</td><td>pointer to an item in <em>array</em>. </td></tr>
    <tr><td class="paramname">array</td><td>C array to traverse. </td></tr>
    <tr><td class="paramname">len</td><td>Length of the array. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="aad5a640d506b5bed9fdb9975b4097b8b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_dir</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">filename, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">dir&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;for ((filename) = g_dir_read_name(dir); (filename) != NULL; (filename) = g_dir_read_name(dir))</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates through each unsorted filename in a <code>GDir</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">filename</td><td>(<code>const</code> <code>gchar*</code>) locale-encoded filename, without path. Do not modify or free. </td></tr>
    <tr><td class="paramname">dir</td><td><code>GDir</code> created with <code>g_dir_open()</code>. Call <code>g_dir_close()</code> afterwards. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#a3060951b6e81d6d80714f827a9a3a75a" title="Gets a sorted list of files from the specified directory. ">utils_get_file_list()</a> if you want a sorted list. </dd></dl>
<dl class="section since"><dt>Since</dt><dd>Geany 0.19. </dd></dl>

</div>
</div>
<a class="anchor" id="a169c145d419ab4314d20c64a8d37e215"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_list</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">node, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">list&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;for (node = list; node != NULL; node = node-&gt;next)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates all the nodes in <em>list</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">node</td><td>should be a (<code>GList*</code>). </td></tr>
    <tr><td class="paramname">list</td><td><code>GList</code> to traverse. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a4059859fcea26d7a6fc6751e35b6ea02"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_ptr_array</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">item, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">idx, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ptr_array&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">for</span> (idx = 0, item = ((ptr_array)-&gt;len &gt; 0 ? g_ptr_array_index((ptr_array), 0) : NULL); \</div>
<div class="line">        idx &lt; (ptr_array)-&gt;len; ++idx, item = g_ptr_array_index((ptr_array), idx))</div>
</div><!-- fragment -->
<p>Iterates all the pointers in <em>ptr_array</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">item</td><td>pointer in <em>ptr_array</em>. </td></tr>
    <tr><td class="paramname">idx</td><td><code>guint</code> index into <em>ptr_array</em>. </td></tr>
    <tr><td class="paramname">ptr_array</td><td><code>GPtrArray</code> to traverse. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ac46693eb3c76b70b647a2d69a8ea2c64"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_range</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">i, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">size&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;for (i = 0; i &lt; size; i++)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates from 0 to <em>size</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">i</td><td>Integer. </td></tr>
    <tr><td class="paramname">size</td><td>Number of iterations. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section since"><dt>Since</dt><dd>Geany 0.20. </dd></dl>

</div>
</div>
<a class="anchor" id="a004c3f8f8be4958ac8ef98df30ca7706"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_slist</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">node, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">list&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;<a class="el" href="utils_8h.html#a169c145d419ab4314d20c64a8d37e215">foreach_list</a>(node, list)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates all the nodes in <em>list</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">node</td><td>should be a (<code>GSList*</code>). </td></tr>
    <tr><td class="paramname">list</td><td><code>GSList</code> to traverse. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a55eb7ea8bde63ac375c4790a62ab15e8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_str</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">char_ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">string&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;for (char_ptr = string; *char_ptr; char_ptr++)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates through each character in <em>string</em>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">char_ptr</td><td>Pointer to character. </td></tr>
    <tr><td class="paramname">string</td><td>String to traverse. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section warning"><dt>Warning</dt><dd>Doesn't include null terminating character. </dd></dl>
<dl class="section since"><dt>Since</dt><dd>Geany 0.19. </dd></dl>

</div>
</div>
<a class="anchor" id="a19590066f467013c446998beb09e0521"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define foreach_strv</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">str_ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">strv&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;if (!(strv)) {} else <a class="el" href="utils_8h.html#a55eb7ea8bde63ac375c4790a62ab15e8">foreach_str</a>(str_ptr, strv)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Iterates a null-terminated string vector. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">str_ptr</td><td><code>gchar**</code> pointer to string element. </td></tr>
    <tr><td class="paramname">strv</td><td>Can be <code>NULL</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section since"><dt>Since</dt><dd>Geany 0.20 </dd></dl>

</div>
</div>
<a class="anchor" id="a35d7e28309db577524db51300b87d3d3"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NZV</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ptr</td><td>)</td>
          <td>&#160;&#160;&#160;(!<a class="el" href="utils_8h.html#ab88f3ea43f82b5809dd64c72c5d2f355">EMPTY</a>(ptr))</td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000014">Deprecated:</a></b></dt><dd>2013/08 - use <code>!EMPTY</code>() instead. </dd></dl>

</div>
</div>
<a class="anchor" id="a613a705b9bafeb739678bed2a4cf66e1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define SETPTR</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">result&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;do <a class="el" href="utils_8h.html#a53526a65ec890167c856b47084be399d">setptr</a>(ptr, result) while (0)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Assigns <em>result</em> to <em>ptr</em>, then frees the old value. </p>
<p><em>result</em> can be an expression using the 'old' value of <em>ptr</em>. E.g.</p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;SETPTR(str, g_strndup(str, 5)); </div>
</div><!-- fragment --> 
</div>
</div>
<a class="anchor" id="a53526a65ec890167c856b47084be399d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define setptr</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">ptr, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">result&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">{\</div>
<div class="line">        gpointer setptr_tmp = ptr;\</div>
<div class="line">        ptr = result;\</div>
<div class="line">        g_free(setptr_tmp);\</div>
<div class="line">    }</div>
</div><!-- fragment --><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000015">Deprecated:</a></b></dt><dd>2011/11/15 - use <a class="el" href="utils_8h.html#a613a705b9bafeb739678bed2a4cf66e1" title="Assigns result to ptr, then frees the old value. ">SETPTR()</a> instead. </dd></dl>

</div>
</div>
<a class="anchor" id="abe75db65374bf89f925bf9584bd0ff18"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define utils_strdupa</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">str</td><td>)</td>
          <td>&#160;&#160;&#160;strcpy(g_alloca(strlen(str) + 1), str)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Duplicates a string on the stack using <code>g_alloca()</code>. </p>
<p>Like glibc's <code>strdupa()</code>, but portable. </p><dl class="section note"><dt>Note</dt><dd>You must include <code>string.h</code> yourself. </dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Don't use excessively or for long strings otherwise there may be stack exhaustion - see the GLib docs for <code>g_alloca()</code>. </dd></dl>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a7ec85a0232413597f8be47a408a9857d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar** utils_copy_environment </td>
          <td>(</td>
          <td class="paramtype">const gchar **&#160;</td>
          <td class="paramname"><em>exclude_vars</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>first_varname</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname"><em>...</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copies the current environment into a new array. </p>
<p><em>exclude_vars</em> is a <code>NULL-terminated</code> array of variable names which should be not copied. All further arguments are key, value pairs of variables which should be added to the environment.</p>
<p>The argument list must be <code>NULL-terminated</code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">exclude_vars</td><td><code>NULL-terminated</code> array of variable names to exclude. </td></tr>
    <tr><td class="paramname">first_varname</td><td>Name of the first variable to copy into the new array. </td></tr>
    <tr><td class="paramname">...</td><td>Key-value pairs of variable names and values, <code>NULL-terminated</code>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The new environment array. </dd></dl>

</div>
</div>
<a class="anchor" id="af9508a79fec8f5f7812f3cc39b233a85"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_find_open_xml_tag </td>
          <td>(</td>
          <td class="paramtype">const gchar&#160;</td>
          <td class="paramname"><em>sel</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gint&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Searches backward through <em>size</em> bytes looking for a '&lt;'. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">sel</td><td>. </td></tr>
    <tr><td class="paramname">size</td><td>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The tag name (newly allocated) or <code>NULL</code> if no opening tag was found. </dd></dl>

</div>
</div>
<a class="anchor" id="a5b6dba4f3d3b08cf1e6a4aa4d95eaa32"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const gchar* utils_find_open_xml_tag_pos </td>
          <td>(</td>
          <td class="paramtype">const gchar&#160;</td>
          <td class="paramname"><em>sel</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gint&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Searches backward through <em>size</em> bytes looking for a '&lt;'. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">sel</td><td>. </td></tr>
    <tr><td class="paramname">size</td><td>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>pointer to '&lt;' of the found opening tag within <em>sel</em>, or <code>NULL</code> if no opening tag was found. </dd></dl>

</div>
</div>
<a class="anchor" id="aa74528ad592a8b9eb8b18217145b92bd"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_get_date_time </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>format</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">time_t *&#160;</td>
          <td class="paramname"><em>time_to_use</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Retrieves a formatted date/time string from strftime(). </p>
<p>This function should be preferred to directly calling strftime() since this function works on UTF-8 encoded strings.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">format</td><td>The format string to pass to strftime(3). See the strftime(3) documentation for details, in UTF-8 encoding. </td></tr>
    <tr><td class="paramname">time_to_use</td><td>The date/time to use, in time_t format or NULL to use the current time.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly-allocated string, should be freed when no longer needed.</dd></dl>
<dl class="section since"><dt>Since</dt><dd>0.16 </dd></dl>

</div>
</div>
<a class="anchor" id="a3060951b6e81d6d80714f827a9a3a75a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">GSList* utils_get_file_list </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">guint *&#160;</td>
          <td class="paramname"><em>length</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GError **&#160;</td>
          <td class="paramname"><em>error</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Gets a sorted list of files from the specified directory. </p>
<p>Locale encoding is expected for <em>path</em> and used for the file list. The list and the data in the list should be freed after use, e.g.: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;g_slist_foreach(list, (GFunc) g_free, NULL);</div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;g_slist_free(list); </div>
</div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">path</td><td>The path of the directory to scan, in locale encoding. </td></tr>
    <tr><td class="paramname">length</td><td>The location to store the number of non-<code>NULL</code> data items in the list, unless <code>NULL</code>. </td></tr>
    <tr><td class="paramname">error</td><td>The location for storing a possible error, or <code>NULL</code>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly allocated list or <code>NULL</code> if no files were found. The list and its data should be freed when no longer needed. </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#a3a8ec74c8835996fa216c655f3cb181a" title="Gets a list of files from the specified directory. ">utils_get_file_list_full()</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="a3a8ec74c8835996fa216c655f3cb181a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">GSList* utils_get_file_list_full </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gboolean&#160;</td>
          <td class="paramname"><em>full_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gboolean&#160;</td>
          <td class="paramname"><em>sort</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GError **&#160;</td>
          <td class="paramname"><em>error</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Gets a list of files from the specified directory. </p>
<p>Locale encoding is expected for <em>path</em> and used for the file list. The list and the data in the list should be freed after use, e.g.: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;g_slist_foreach(list, (GFunc) g_free, NULL);</div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;g_slist_free(list); </div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>If you don't need a list you should use the <a class="el" href="utils_8h.html#aad5a640d506b5bed9fdb9975b4097b8b" title="Iterates through each unsorted filename in a GDir. ">foreach_dir()</a> macro instead - it's more efficient.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">path</td><td>The path of the directory to scan, in locale encoding. </td></tr>
    <tr><td class="paramname">full_path</td><td>Whether to include the full path for each filename in the list. Obviously this will use more memory. </td></tr>
    <tr><td class="paramname">sort</td><td>Whether to sort alphabetically (UTF-8 safe). </td></tr>
    <tr><td class="paramname">error</td><td>The location for storing a possible error, or <code>NULL</code>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly allocated list or <code>NULL</code> if no files were found. The list and its data should be freed when no longer needed. </dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#a3060951b6e81d6d80714f827a9a3a75a" title="Gets a sorted list of files from the specified directory. ">utils_get_file_list()</a>. </dd></dl>

</div>
</div>
<a class="anchor" id="a560f1208bd2ed1b6abc8a20a0f98961a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_get_locale_from_utf8 </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>utf8_text</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Converts the given UTF-8 encoded string into locale encoding. </p>
<p>On Windows platforms, it does nothing and instead it just returns a copy of the input string.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">utf8_text</td><td>UTF-8 encoded text.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The converted string in locale encoding, or a copy of the input string if conversion failed. Should be freed with g_free(). If <em>utf8_text</em> is <code>NULL</code>, <code>NULL</code> is returned. </dd></dl>

</div>
</div>
<a class="anchor" id="a54a1ba9b4032a939932d5714206039b4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gboolean utils_get_setting_boolean </td>
          <td>(</td>
          <td class="paramtype">GKeyFile *&#160;</td>
          <td class="paramname"><em>config</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gboolean&#160;</td>
          <td class="paramname"><em>default_value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Wraps g_key_file_get_boolean() to add a default value argument. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">config</td><td>A GKeyFile object. </td></tr>
    <tr><td class="paramname">section</td><td>The group name to look in for the key. </td></tr>
    <tr><td class="paramname">key</td><td>The key to find. </td></tr>
    <tr><td class="paramname">default_value</td><td>The default value which will be returned when <code>section</code> or <code>key</code> don't exist.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The value associated with <em>key</em> as a boolean, or the given default value if the value could not be retrieved. </dd></dl>

</div>
</div>
<a class="anchor" id="a53fee50bba749034d7b94bfd50531a44"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gint utils_get_setting_integer </td>
          <td>(</td>
          <td class="paramtype">GKeyFile *&#160;</td>
          <td class="paramname"><em>config</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gint&#160;</td>
          <td class="paramname"><em>default_value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Wraps g_key_file_get_integer() to add a default value argument. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">config</td><td>A GKeyFile object. </td></tr>
    <tr><td class="paramname">section</td><td>The group name to look in for the key. </td></tr>
    <tr><td class="paramname">key</td><td>The key to find. </td></tr>
    <tr><td class="paramname">default_value</td><td>The default value which will be returned when <em>section</em> or <em>key</em> don't exist.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The value associated with <em>key</em> as an integer, or the given default value if the value could not be retrieved. </dd></dl>

</div>
</div>
<a class="anchor" id="a8c1811e1074c6fd85f5aaf089aa8af7c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_get_setting_string </td>
          <td>(</td>
          <td class="paramtype">GKeyFile *&#160;</td>
          <td class="paramname"><em>config</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>key</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>default_value</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Wraps g_key_file_get_string() to add a default value argument. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">config</td><td>A GKeyFile object. </td></tr>
    <tr><td class="paramname">section</td><td>The group name to look in for the key. </td></tr>
    <tr><td class="paramname">key</td><td>The key to find. </td></tr>
    <tr><td class="paramname">default_value</td><td>The default value which will be returned when <em>section</em> or <em>key</em> don't exist.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly allocated string, either the value for <em>key</em> or a copy of the given default value if it could not be retrieved. </dd></dl>

</div>
</div>
<a class="anchor" id="a2249982577bbb384983ab56c6de35c05"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_get_utf8_from_locale </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>locale_text</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Converts the given string (in locale encoding) into UTF-8 encoding. </p>
<p>On Windows platforms, it does nothing and instead it just returns a copy of the input string.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">locale_text</td><td>Text in locale encoding.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The converted string in UTF-8 encoding, or a copy of the input string if conversion failed. Should be freed with g_free(). If <em>locale_text</em> is <code>NULL</code>, <code>NULL</code> is returned. </dd></dl>

</div>
</div>
<a class="anchor" id="aae2dc60b82a2aa8bd3a0eb0784206803"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gint utils_mkdir </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gboolean&#160;</td>
          <td class="paramname"><em>create_parent_dirs</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Creates a directory if it doesn't already exist. </p>
<p>Creates intermediate parent directories as needed, too. The permissions of the created directory are set 0700.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">path</td><td>The path of the directory to create, in locale encoding. </td></tr>
    <tr><td class="paramname">create_parent_dirs</td><td>Whether to create intermediate parent directories if necessary.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if the directory was successfully created, otherwise the <code>errno</code> of the failed operation is returned. </dd></dl>

</div>
</div>
<a class="anchor" id="a03db6196a66b7e3a93784bc40a9e599a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void utils_open_browser </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>uri</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Tries to open the given URI in a browser. </p>
<p>On Windows, the system's default browser is opened. On non-Windows systems, the browser command set in the preferences dialog is used. In case that fails or it is unset, the user is asked to correct or fill it.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">uri</td><td>The URI to open in the web browser.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section since"><dt>Since</dt><dd>0.16 </dd></dl>

</div>
</div>
<a class="anchor" id="a090553ea45a71972785a0e4118b705c2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_remove_ext_from_filename </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>filename</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Removes the extension from <em>filename</em> and return the result in a newly allocated string. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">filename</td><td>The filename to operate on.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A newly-allocated string, should be freed when no longer needed. </dd></dl>

</div>
</div>
<a class="anchor" id="af5bbd805dbf5c303f74ed0e9546cd789"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gboolean utils_spawn_async </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar **&#160;</td>
          <td class="paramname"><em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar **&#160;</td>
          <td class="paramname"><em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GSpawnFlags&#160;</td>
          <td class="paramname"><em>flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GSpawnChildSetupFunc&#160;</td>
          <td class="paramname"><em>child_setup</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gpointer&#160;</td>
          <td class="paramname"><em>user_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GPid *&#160;</td>
          <td class="paramname"><em>child_pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GError **&#160;</td>
          <td class="paramname"><em>error</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Wraps g_spawn_async() and internally calls this function on Unix-like systems. </p>
<p>On Win32 platforms, it uses the Windows API.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">dir</td><td>The child's current working directory, or <em>NULL</em> to inherit parent's. </td></tr>
    <tr><td class="paramname">argv</td><td>The child's argument vector. </td></tr>
    <tr><td class="paramname">env</td><td>The child's environment, or <em>NULL</em> to inherit parent's. </td></tr>
    <tr><td class="paramname">flags</td><td>Flags from GSpawnFlags. </td></tr>
    <tr><td class="paramname">child_setup</td><td>A function to run in the child just before exec(). </td></tr>
    <tr><td class="paramname">user_data</td><td>The user data for child_setup. </td></tr>
    <tr><td class="paramname">child_pid</td><td>The return location for child process ID, or NULL. </td></tr>
    <tr><td class="paramname">error</td><td>The return location for error or <em>NULL</em>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>TRUE</code> on success, <code>FALSE</code> if an error was set. </dd></dl>

</div>
</div>
<a class="anchor" id="a16bd3da5e308fc250f1104cdd49fb58e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gboolean utils_spawn_sync </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar **&#160;</td>
          <td class="paramname"><em>argv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar **&#160;</td>
          <td class="paramname"><em>env</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GSpawnFlags&#160;</td>
          <td class="paramname"><em>flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GSpawnChildSetupFunc&#160;</td>
          <td class="paramname"><em>child_setup</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gpointer&#160;</td>
          <td class="paramname"><em>user_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar **&#160;</td>
          <td class="paramname"><em>std_out</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gchar **&#160;</td>
          <td class="paramname"><em>std_err</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">gint *&#160;</td>
          <td class="paramname"><em>exit_status</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">GError **&#160;</td>
          <td class="paramname"><em>error</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Wraps g_spawn_sync() and internally calls this function on Unix-like systems. </p>
<p>On Win32 platforms, it uses the Windows API.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">dir</td><td>The child's current working directory, or <em>NULL</em> to inherit parent's. </td></tr>
    <tr><td class="paramname">argv</td><td>The child's argument vector. </td></tr>
    <tr><td class="paramname">env</td><td>The child's environment, or <em>NULL</em> to inherit parent's. </td></tr>
    <tr><td class="paramname">flags</td><td>Flags from GSpawnFlags. </td></tr>
    <tr><td class="paramname">child_setup</td><td>A function to run in the child just before exec(). </td></tr>
    <tr><td class="paramname">user_data</td><td>The user data for child_setup. </td></tr>
    <tr><td class="paramname">std_out</td><td>The return location for child output. </td></tr>
    <tr><td class="paramname">std_err</td><td>The return location for child error messages. </td></tr>
    <tr><td class="paramname">exit_status</td><td>The child exit status, as returned by waitpid(). </td></tr>
    <tr><td class="paramname">error</td><td>The return location for error or <em>NULL</em>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>TRUE</code> on success, <code>FALSE</code> if an error was set. </dd></dl>

</div>
</div>
<a class="anchor" id="a2ac77e7048fd9fdb829935953348eb33"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gint utils_str_casecmp </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>s1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>s2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>A replacement function for g_strncasecmp() to compare strings case-insensitive. </p>
<p>It converts both strings into lowercase using g_utf8_strdown() and then compare both strings using strcmp(). This is not completely accurate regarding locale-specific case sorting rules but seems to be a good compromise between correctness and performance.</p>
<p>The input strings should be in UTF-8 or locale encoding.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">s1</td><td>Pointer to first string or <code>NULL</code>. </td></tr>
    <tr><td class="paramname">s2</td><td>Pointer to second string or <code>NULL</code>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>an integer less than, equal to, or greater than zero if <em>s1</em> is found, respectively, to be less than, to match, or to be greater than <em>s2</em>.</dd></dl>
<dl class="section since"><dt>Since</dt><dd>0.16 </dd></dl>

</div>
</div>
<a class="anchor" id="ac56235d733d4c49add93041d041cabdb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gboolean utils_str_equal </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>b</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p><code>NULL-safe</code> string comparison. </p>
<p>Returns <code>TRUE</code> if both <em>a</em> and <em>b</em> are <code>NULL</code> or if <em>a</em> and <em>b</em> refer to valid strings which are equal.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">a</td><td>Pointer to first string or <code>NULL</code>. </td></tr>
    <tr><td class="paramname">b</td><td>Pointer to second string or <code>NULL</code>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>TRUE</code> if <em>a</em> equals <em>b</em>, else <code>FALSE</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="a1b61f71468588618fe2ca456eb819b82"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_str_middle_truncate </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>string</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">guint&#160;</td>
          <td class="paramname"><em>truncate_length</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Truncates the input string to a given length. </p>
<p>Characters are removed from the middle of the string, so the start and the end of string won't change.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">string</td><td>Input string. </td></tr>
    <tr><td class="paramname">truncate_length</td><td>The length in characters of the resulting string.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>A copy of <em>string</em> which is truncated to <em>truncate_length</em> characters, should be freed when no longer needed.</dd></dl>
<dl class="section since"><dt>Since</dt><dd>0.17 </dd></dl>

</div>
</div>
<a class="anchor" id="af956a792bd95888253326ea14a20e301"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gchar* utils_str_remove_chars </td>
          <td>(</td>
          <td class="paramtype">gchar *&#160;</td>
          <td class="paramname"><em>string</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>chars</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Removes characters from a string, in place. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">string</td><td>String to search. </td></tr>
    <tr><td class="paramname">chars</td><td>Characters to remove.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><em>string</em> - return value is only useful when nesting function calls, e.g.: <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;str = utils_str_remove_chars(g_strdup(&quot;f_o_o&quot;), &quot;_&quot;); </div>
</div><!-- fragment --></dd></dl>
<dl class="section see"><dt>See also</dt><dd><code>g_strdelimit</code>. </dd></dl>

</div>
</div>
<a class="anchor" id="a3ff9e2d7c70e270c45517d4c4d3c8205"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">guint utils_string_replace_all </td>
          <td>(</td>
          <td class="paramtype">GString *&#160;</td>
          <td class="paramname"><em>haystack</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>needle</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>replace</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Replaces all occurrences of <em>needle</em> in <em>haystack</em> with <em>replace</em>. </p>
<p>As of Geany 0.16, <em>replace</em> can match <em>needle</em>, so the following will work: </p><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;utils_string_replace_all(text, &quot;\n&quot;, &quot;\r\n&quot;); </div>
</div><!-- fragment --><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">haystack</td><td>The input string to operate on. This string is modified in place. </td></tr>
    <tr><td class="paramname">needle</td><td>The string which should be replaced. </td></tr>
    <tr><td class="paramname">replace</td><td>The replacement for <em>needle</em>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of replacements made. </dd></dl>

</div>
</div>
<a class="anchor" id="afb12e3ab1b8552fb78c80cb9f1ca4bc2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">guint utils_string_replace_first </td>
          <td>(</td>
          <td class="paramtype">GString *&#160;</td>
          <td class="paramname"><em>haystack</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>needle</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>replace</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Replaces only the first occurrence of <em>needle</em> in <em>haystack</em> with <em>replace</em>. </p>
<p>For details, see <a class="el" href="utils_8h.html#a3ff9e2d7c70e270c45517d4c4d3c8205" title="Replaces all occurrences of needle in haystack with replace. ">utils_string_replace_all()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">haystack</td><td>The input string to operate on. This string is modified in place. </td></tr>
    <tr><td class="paramname">needle</td><td>The string which should be replaced. </td></tr>
    <tr><td class="paramname">replace</td><td>The replacement for <em>needle</em>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Number of replacements made.</dd></dl>
<dl class="section since"><dt>Since</dt><dd>0.16 </dd></dl>

</div>
</div>
<a class="anchor" id="a2a26fe82267d0b5bfa20462f6eb11e31"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">gint utils_write_file </td>
          <td>(</td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>filename</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const gchar *&#160;</td>
          <td class="paramname"><em>text</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Writes <em>text</em> into a file named <em>filename</em>. </p>
<p>If the file doesn't exist, it will be created. If it already exists, it will be overwritten.</p>
<dl class="section warning"><dt>Warning</dt><dd>You should use <code>g_file_set_contents()</code> instead if you don't need file permissions and other metadata to be preserved, as that always handles disk exhaustion safely.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">filename</td><td>The filename of the file to write, in locale encoding. </td></tr>
    <tr><td class="paramname">text</td><td>The text to write into the file.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 if the file was successfully written, otherwise the <code>errno</code> of the failed operation is returned. </dd></dl>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Oct 17 2014 05:13:17 for Geany by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.8
</small></address>
</body>
</html>