<!-- ##### SECTION Title ##### -->
Miscellaneous Utility Functions

<!-- ##### SECTION Short_Description ##### -->
a selection of portable utility functions

<!-- ##### SECTION Long_Description ##### -->
<para>
These are portable utility functions.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### FUNCTION g_get_application_name ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_set_application_name ##### -->
<para>

</para>

@application_name: 


<!-- ##### FUNCTION g_get_prgname ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_set_prgname ##### -->
<para>

</para>

@prgname: 


<!-- ##### FUNCTION g_getenv ##### -->
<para>

</para>

@variable: 
@Returns: 


<!-- ##### FUNCTION g_setenv ##### -->
<para>

</para>

@variable: 
@value: 
@overwrite: 
@Returns: 


<!-- ##### FUNCTION g_unsetenv ##### -->
<para>

</para>

@variable: 


<!-- ##### FUNCTION g_listenv ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_user_name ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_real_name ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_user_cache_dir ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_user_data_dir ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_user_config_dir ##### -->
<para>

</para>

@Returns: 


<!-- ##### ENUM GUserDirectory ##### -->
<para>

</para>

@G_USER_DIRECTORY_DESKTOP: 
@G_USER_DIRECTORY_DOCUMENTS: 
@G_USER_DIRECTORY_DOWNLOAD: 
@G_USER_DIRECTORY_MUSIC: 
@G_USER_DIRECTORY_PICTURES: 
@G_USER_DIRECTORY_PUBLIC_SHARE: 
@G_USER_DIRECTORY_TEMPLATES: 
@G_USER_DIRECTORY_VIDEOS: 
@G_USER_N_DIRECTORIES: 

<!-- ##### FUNCTION g_get_user_special_dir ##### -->
<para>

</para>

@directory: 
@Returns: 


<!-- ##### FUNCTION g_get_system_data_dirs ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_system_config_dirs ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_host_name ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_home_dir ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_tmp_dir ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_get_current_dir ##### -->
<para>

</para>

@Returns: 


<!-- ##### FUNCTION g_basename ##### -->


@file_name: 
@Returns: 


<!-- ##### MACRO g_dirname ##### -->
<para>
This function is deprecated and will be removed in the next major
release of GLib. Use g_path_get_dirname() instead.
</para>

<para>
Gets the directory components of a file name.
If the file name has no directory components "." is returned.
The returned string should be freed when no longer needed.
</para>

@Returns: the directory components of the file.


<!-- ##### FUNCTION g_path_is_absolute ##### -->
<para>

</para>

@file_name: 
@Returns: 


<!-- ##### FUNCTION g_path_skip_root ##### -->
<para>

</para>

@file_name: 
@Returns: 


<!-- ##### FUNCTION g_path_get_basename ##### -->
<para>

</para>

@file_name: 
@Returns: 


<!-- ##### FUNCTION g_path_get_dirname ##### -->
<para>

</para>

@file_name: 
@Returns: 


<!-- ##### FUNCTION g_build_filename ##### -->
<para>

</para>

@first_element: 
@Varargs: 
@Returns: 


<!-- ##### FUNCTION g_build_filenamev ##### -->
<para>

</para>

@args: 
@Returns: 


<!-- ##### FUNCTION g_build_path ##### -->
<para>

</para>

@separator: 
@first_element: 
@Varargs: 
@Returns: 


<!-- ##### FUNCTION g_build_pathv ##### -->
<para>

</para>

@separator: 
@args: 
@Returns: 


<!-- ##### FUNCTION g_find_program_in_path ##### -->
<para>

</para>

@program: 
@Returns: 


<!-- ##### FUNCTION g_bit_nth_lsf ##### -->
<para>
Find the position of the first bit set in @mask, searching from (but not
including) @nth_bit upwards. Bits are numbered from 0 (least significant)
to sizeof(#gulong) * 8 - 1 (31 or 63, usually). To start searching from the
0th bit, set @nth_bit to -1.
</para>

@mask: a #gulong containing flags.
@nth_bit: the index of the bit to start the search from.
@Returns: the index of the first bit set which is higher than @nth_bit.


<!-- ##### FUNCTION g_bit_nth_msf ##### -->
<para>
Find the position of the first bit set in @mask, searching from (but not
including) @nth_bit downwards. Bits are numbered from 0 (least significant)
to sizeof(#gulong) * 8 - 1 (31 or 63, usually). To start searching from the
last bit, set @nth_bit to -1 or GLIB_SIZEOF_LONG * 8.
</para>

@mask: a #gulong containing flags.
@nth_bit: the index of the bit to start the search from.
@Returns: the index of the first bit set which is lower than @nth_bit.


<!-- ##### FUNCTION g_bit_storage ##### -->
<para>
Gets the number of bits used to hold @number,
e.g. if @number is 4, 3 bits are needed.
</para>

@number: a guint.
@Returns: the number of bits used to hold @number.


<!-- ##### FUNCTION g_spaced_primes_closest ##### -->
<para>
Gets the smallest prime number from a built-in array of primes which
is larger than @num. This is used within GLib to calculate the optimum
size of a #GHashTable.
</para>
<para>
The built-in array of primes ranges from 11 to 13845163 such that
each prime is approximately 1.5-2 times the previous prime.
</para>

@num: a #guint.
@Returns: the smallest prime number from a built-in array of primes which is
larger than @num.


<!-- ##### FUNCTION g_atexit ##### -->
<para>

</para>

@func: 


<!-- ##### FUNCTION g_parse_debug_string ##### -->
<para>

</para>

@string: 
@keys: 
@nkeys: 
@Returns: 


<!-- ##### STRUCT GDebugKey ##### -->
<para>
Associates a string with a bit flag.
Used in g_parse_debug_string().
</para>

@key: the string
@value: the flag

<!-- ##### USER_FUNCTION GVoidFunc ##### -->
<para>
Declares a type of function which takes no arguments and has no return value.
It is used to specify the type function passed to g_atexit().
</para>



<!-- ##### USER_FUNCTION GFreeFunc ##### -->
<para>
Declares a type of function which takes an arbitrary data pointer argument
and has no return value. It is not currently used in GLib or GTK+.
</para>

@data: a data pointer.


<!-- ##### FUNCTION g_qsort_with_data ##### -->
<para>

</para>

@pbase: 
@total_elems: 
@size: 
@compare_func: 
@user_data: 


<!-- ##### FUNCTION g_nullify_pointer ##### -->
<para>

</para>

@nullify_location: 


