1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module glib.Util;
26 
27 private import glib.Str;
28 private import glib.c.functions;
29 public  import glib.c.types;
30 public  import gtkc.glibtypes;
31 
32 
33 /** */
34 public struct Util
35 {
36 	/**
37 	 * Behaves exactly like g_build_filename(), but takes the path elements
38 	 * as a string array, instead of varargs. This function is mainly
39 	 * meant for language bindings.
40 	 *
41 	 * Params:
42 	 *     args = strings containing the path elements.
43 	 *
44 	 * Return: a newly-allocated string that must be freed with g_free().
45 	 *
46 	 * Since: 2.8
47 	 */
48 	public static string buildFilename(string[] firstElement ... )
49 	{
50 		return Str.toString(g_build_filenamev(Str.toStringzArray(firstElement)));
51 	}
52 
53 	/**
54 	 * Behaves exactly like g_build_path(), but takes the path elements
55 	 * as a string array, instead of varargs. This function is mainly
56 	 * meant for language bindings.
57 	 *
58 	 * Params:
59 	 *     separator = a string used to separator the elements of the path.
60 	 *     args = strings containing the path elements.
61 	 *
62 	 * Return: a newly-allocated string that must be freed with g_free().
63 	 *
64 	 * Since: 2.8
65 	 */
66 	public static string buildPath(string separator, string[] firstElement ... )
67 	{
68 		return Str.toString(g_build_pathv(Str.toStringz(separator), Str.toStringzArray(firstElement)));
69 	}
70 
71 	/**
72 	 */
73 
74 	/**
75 	 * Specifies a function to be called at normal program termination.
76 	 *
77 	 * Since GLib 2.8.2, on Windows g_atexit() actually is a preprocessor
78 	 * macro that maps to a call to the atexit() function in the C
79 	 * library. This means that in case the code that calls g_atexit(),
80 	 * i.e. atexit(), is in a DLL, the function will be called when the
81 	 * DLL is detached from the program. This typically makes more sense
82 	 * than that the function is called when the GLib DLL is detached,
83 	 * which happened earlier when g_atexit() was a function in the GLib
84 	 * DLL.
85 	 *
86 	 * The behaviour of atexit() in the context of dynamically loaded
87 	 * modules is not formally specified and varies wildly.
88 	 *
89 	 * On POSIX systems, calling g_atexit() (or atexit()) in a dynamically
90 	 * loaded module which is unloaded before the program terminates might
91 	 * well cause a crash at program exit.
92 	 *
93 	 * Some POSIX systems implement atexit() like Windows, and have each
94 	 * dynamically loaded module maintain an own atexit chain that is
95 	 * called when the module is unloaded.
96 	 *
97 	 * On other POSIX systems, before a dynamically loaded module is
98 	 * unloaded, the registered atexit functions (if any) residing in that
99 	 * module are called, regardless where the code that registered them
100 	 * resided. This is presumably the most robust approach.
101 	 *
102 	 * As can be seen from the above, for portability it's best to avoid
103 	 * calling g_atexit() (or atexit()) except in the main executable of a
104 	 * program.
105 	 *
106 	 * Deprecated: It is best to avoid g_atexit().
107 	 *
108 	 * Params:
109 	 *     func = the function to call on normal program termination.
110 	 */
111 	public static void atexit(GVoidFunc func)
112 	{
113 		g_atexit(func);
114 	}
115 
116 	/**
117 	 * Gets the name of the file without any leading directory
118 	 * components. It returns a pointer into the given file name
119 	 * string.
120 	 *
121 	 * Deprecated: Use g_path_get_basename() instead, but notice
122 	 * that g_path_get_basename() allocates new memory for the
123 	 * returned string, unlike this function which returns a pointer
124 	 * into the argument.
125 	 *
126 	 * Params:
127 	 *     fileName = the name of the file
128 	 *
129 	 * Returns: the name of the file without any leading
130 	 *     directory components
131 	 */
132 	public static string basename(string fileName)
133 	{
134 		return Str.toString(g_basename(Str.toStringz(fileName)));
135 	}
136 
137 	/**
138 	 * Find the position of the first bit set in @mask, searching
139 	 * from (but not including) @nth_bit upwards. Bits are numbered
140 	 * from 0 (least significant) to sizeof(#gulong) * 8 - 1 (31 or 63,
141 	 * usually). To start searching from the 0th bit, set @nth_bit to -1.
142 	 *
143 	 * Params:
144 	 *     mask = a #gulong containing flags
145 	 *     nthBit = the index of the bit to start the search from
146 	 *
147 	 * Returns: the index of the first bit set which is higher than @nth_bit, or -1
148 	 *     if no higher bits are set
149 	 */
150 	public static int bitNthLsf(gulong mask, int nthBit)
151 	{
152 		return g_bit_nth_lsf(mask, nthBit);
153 	}
154 
155 	/**
156 	 * Find the position of the first bit set in @mask, searching
157 	 * from (but not including) @nth_bit downwards. Bits are numbered
158 	 * from 0 (least significant) to sizeof(#gulong) * 8 - 1 (31 or 63,
159 	 * usually). To start searching from the last bit, set @nth_bit to
160 	 * -1 or GLIB_SIZEOF_LONG * 8.
161 	 *
162 	 * Params:
163 	 *     mask = a #gulong containing flags
164 	 *     nthBit = the index of the bit to start the search from
165 	 *
166 	 * Returns: the index of the first bit set which is lower than @nth_bit, or -1
167 	 *     if no lower bits are set
168 	 */
169 	public static int bitNthMsf(gulong mask, int nthBit)
170 	{
171 		return g_bit_nth_msf(mask, nthBit);
172 	}
173 
174 	/**
175 	 * Gets the number of bits used to hold @number,
176 	 * e.g. if @number is 4, 3 bits are needed.
177 	 *
178 	 * Params:
179 	 *     number = a #guint
180 	 *
181 	 * Returns: the number of bits used to hold @number
182 	 */
183 	public static uint bitStorage(gulong number)
184 	{
185 		return g_bit_storage(number);
186 	}
187 
188 	/**
189 	 * Returns the value of the environment variable @variable in the
190 	 * provided list @envp.
191 	 *
192 	 * Params:
193 	 *     envp = an environment
194 	 *         list (eg, as returned from g_get_environ()), or %NULL
195 	 *         for an empty environment list
196 	 *     variable = the environment variable to get
197 	 *
198 	 * Returns: the value of the environment variable, or %NULL if
199 	 *     the environment variable is not set in @envp. The returned
200 	 *     string is owned by @envp, and will be freed if @variable is
201 	 *     set or unset again.
202 	 *
203 	 * Since: 2.32
204 	 */
205 	public static string environGetenv(string[] envp, string variable)
206 	{
207 		return Str.toString(g_environ_getenv(Str.toStringzArray(envp), Str.toStringz(variable)));
208 	}
209 
210 	/**
211 	 * Sets the environment variable @variable in the provided list
212 	 * @envp to @value.
213 	 *
214 	 * Params:
215 	 *     envp = an
216 	 *         environment list that can be freed using g_strfreev() (e.g., as
217 	 *         returned from g_get_environ()), or %NULL for an empty
218 	 *         environment list
219 	 *     variable = the environment variable to set, must not contain '='
220 	 *     value = the value for to set the variable to
221 	 *     overwrite = whether to change the variable if it already exists
222 	 *
223 	 * Returns: the
224 	 *     updated environment list. Free it using g_strfreev().
225 	 *
226 	 * Since: 2.32
227 	 */
228 	public static string[] environSetenv(string[] envp, string variable, string value, bool overwrite)
229 	{
230 		auto retStr = g_environ_setenv(Str.toStringzArray(envp), Str.toStringz(variable), Str.toStringz(value), overwrite);
231 
232 		scope(exit) Str.freeStringArray(retStr);
233 		return Str.toStringArray(retStr);
234 	}
235 
236 	/**
237 	 * Removes the environment variable @variable from the provided
238 	 * environment @envp.
239 	 *
240 	 * Params:
241 	 *     envp = an environment
242 	 *         list that can be freed using g_strfreev() (e.g., as returned from g_get_environ()),
243 	 *         or %NULL for an empty environment list
244 	 *     variable = the environment variable to remove, must not contain '='
245 	 *
246 	 * Returns: the
247 	 *     updated environment list. Free it using g_strfreev().
248 	 *
249 	 * Since: 2.32
250 	 */
251 	public static string[] environUnsetenv(string[] envp, string variable)
252 	{
253 		auto retStr = g_environ_unsetenv(Str.toStringzArray(envp), Str.toStringz(variable));
254 
255 		scope(exit) Str.freeStringArray(retStr);
256 		return Str.toStringArray(retStr);
257 	}
258 
259 	/**
260 	 * Locates the first executable named @program in the user's path, in the
261 	 * same way that execvp() would locate it. Returns an allocated string
262 	 * with the absolute path name, or %NULL if the program is not found in
263 	 * the path. If @program is already an absolute path, returns a copy of
264 	 * @program if @program exists and is executable, and %NULL otherwise.
265 	 *
266 	 * On Windows, if @program does not have a file type suffix, tries
267 	 * with the suffixes .exe, .cmd, .bat and .com, and the suffixes in
268 	 * the `PATHEXT` environment variable.
269 	 *
270 	 * On Windows, it looks for the file in the same way as CreateProcess()
271 	 * would. This means first in the directory where the executing
272 	 * program was loaded from, then in the current directory, then in the
273 	 * Windows 32-bit system directory, then in the Windows directory, and
274 	 * finally in the directories in the `PATH` environment variable. If
275 	 * the program is found, the return value contains the full name
276 	 * including the type suffix.
277 	 *
278 	 * Params:
279 	 *     program = a program name in the GLib file name encoding
280 	 *
281 	 * Returns: a newly-allocated string with the absolute path,
282 	 *     or %NULL
283 	 */
284 	public static string findProgramInPath(string program)
285 	{
286 		auto retStr = g_find_program_in_path(Str.toStringz(program));
287 
288 		scope(exit) Str.freeString(retStr);
289 		return Str.toString(retStr);
290 	}
291 
292 	/**
293 	 * Formats a size (for example the size of a file) into a human readable
294 	 * string.  Sizes are rounded to the nearest size prefix (kB, MB, GB)
295 	 * and are displayed rounded to the nearest tenth. E.g. the file size
296 	 * 3292528 bytes will be converted into the string "3.2 MB".
297 	 *
298 	 * The prefix units base is 1000 (i.e. 1 kB is 1000 bytes).
299 	 *
300 	 * This string should be freed with g_free() when not needed any longer.
301 	 *
302 	 * See g_format_size_full() for more options about how the size might be
303 	 * formatted.
304 	 *
305 	 * Params:
306 	 *     size = a size in bytes
307 	 *
308 	 * Returns: a newly-allocated formatted string containing a human readable
309 	 *     file size
310 	 *
311 	 * Since: 2.30
312 	 */
313 	public static string formatSize(ulong size)
314 	{
315 		auto retStr = g_format_size(size);
316 
317 		scope(exit) Str.freeString(retStr);
318 		return Str.toString(retStr);
319 	}
320 
321 	/**
322 	 * Formats a size (for example the size of a file) into a human
323 	 * readable string. Sizes are rounded to the nearest size prefix
324 	 * (KB, MB, GB) and are displayed rounded to the nearest tenth.
325 	 * E.g. the file size 3292528 bytes will be converted into the
326 	 * string "3.1 MB".
327 	 *
328 	 * The prefix units base is 1024 (i.e. 1 KB is 1024 bytes).
329 	 *
330 	 * This string should be freed with g_free() when not needed any longer.
331 	 *
332 	 * Deprecated: This function is broken due to its use of SI
333 	 * suffixes to denote IEC units. Use g_format_size() instead.
334 	 *
335 	 * Params:
336 	 *     size = a size in bytes
337 	 *
338 	 * Returns: a newly-allocated formatted string containing a human
339 	 *     readable file size
340 	 *
341 	 * Since: 2.16
342 	 */
343 	public static string formatSizeForDisplay(long size)
344 	{
345 		auto retStr = g_format_size_for_display(size);
346 
347 		scope(exit) Str.freeString(retStr);
348 		return Str.toString(retStr);
349 	}
350 
351 	/**
352 	 * Formats a size.
353 	 *
354 	 * This function is similar to g_format_size() but allows for flags
355 	 * that modify the output. See #GFormatSizeFlags.
356 	 *
357 	 * Params:
358 	 *     size = a size in bytes
359 	 *     flags = #GFormatSizeFlags to modify the output
360 	 *
361 	 * Returns: a newly-allocated formatted string containing a human
362 	 *     readable file size
363 	 *
364 	 * Since: 2.30
365 	 */
366 	public static string formatSizeFull(ulong size, GFormatSizeFlags flags)
367 	{
368 		auto retStr = g_format_size_full(size, flags);
369 
370 		scope(exit) Str.freeString(retStr);
371 		return Str.toString(retStr);
372 	}
373 
374 	/**
375 	 * Gets a human-readable name for the application, as set by
376 	 * g_set_application_name(). This name should be localized if
377 	 * possible, and is intended for display to the user.  Contrast with
378 	 * g_get_prgname(), which gets a non-localized name. If
379 	 * g_set_application_name() has not been called, returns the result of
380 	 * g_get_prgname() (which may be %NULL if g_set_prgname() has also not
381 	 * been called).
382 	 *
383 	 * Returns: human-readable application name. may return %NULL
384 	 *
385 	 * Since: 2.2
386 	 */
387 	public static string getApplicationName()
388 	{
389 		return Str.toString(g_get_application_name());
390 	}
391 
392 	/**
393 	 * Gets the list of environment variables for the current process.
394 	 *
395 	 * The list is %NULL terminated and each item in the list is of the
396 	 * form 'NAME=VALUE'.
397 	 *
398 	 * This is equivalent to direct access to the 'environ' global variable,
399 	 * except portable.
400 	 *
401 	 * The return value is freshly allocated and it should be freed with
402 	 * g_strfreev() when it is no longer needed.
403 	 *
404 	 * Returns: the list of
405 	 *     environment variables
406 	 *
407 	 * Since: 2.28
408 	 */
409 	public static string[] getEnviron()
410 	{
411 		auto retStr = g_get_environ();
412 
413 		scope(exit) Str.freeStringArray(retStr);
414 		return Str.toStringArray(retStr);
415 	}
416 
417 	/**
418 	 * Gets the current directory.
419 	 *
420 	 * The returned string should be freed when no longer needed.
421 	 * The encoding of the returned string is system defined.
422 	 * On Windows, it is always UTF-8.
423 	 *
424 	 * Since GLib 2.40, this function will return the value of the "PWD"
425 	 * environment variable if it is set and it happens to be the same as
426 	 * the current directory.  This can make a difference in the case that
427 	 * the current directory is the target of a symbolic link.
428 	 *
429 	 * Returns: the current directory
430 	 */
431 	public static string getCurrentDir()
432 	{
433 		auto retStr = g_get_current_dir();
434 
435 		scope(exit) Str.freeString(retStr);
436 		return Str.toString(retStr);
437 	}
438 
439 	/**
440 	 * Gets the current user's home directory.
441 	 *
442 	 * As with most UNIX tools, this function will return the value of the
443 	 * `HOME` environment variable if it is set to an existing absolute path
444 	 * name, falling back to the `passwd` file in the case that it is unset.
445 	 *
446 	 * If the path given in `HOME` is non-absolute, does not exist, or is
447 	 * not a directory, the result is undefined.
448 	 *
449 	 * Before version 2.36 this function would ignore the `HOME` environment
450 	 * variable, taking the value from the `passwd` database instead. This was
451 	 * changed to increase the compatibility of GLib with other programs (and
452 	 * the XDG basedir specification) and to increase testability of programs
453 	 * based on GLib (by making it easier to run them from test frameworks).
454 	 *
455 	 * If your program has a strong requirement for either the new or the
456 	 * old behaviour (and if you don't wish to increase your GLib
457 	 * dependency to ensure that the new behaviour is in effect) then you
458 	 * should either directly check the `HOME` environment variable yourself
459 	 * or unset it before calling any functions in GLib.
460 	 *
461 	 * Returns: the current user's home directory
462 	 */
463 	public static string getHomeDir()
464 	{
465 		return Str.toString(g_get_home_dir());
466 	}
467 
468 	/**
469 	 * Return a name for the machine.
470 	 *
471 	 * The returned name is not necessarily a fully-qualified domain name,
472 	 * or even present in DNS or some other name service at all. It need
473 	 * not even be unique on your local network or site, but usually it
474 	 * is. Callers should not rely on the return value having any specific
475 	 * properties like uniqueness for security purposes. Even if the name
476 	 * of the machine is changed while an application is running, the
477 	 * return value from this function does not change. The returned
478 	 * string is owned by GLib and should not be modified or freed. If no
479 	 * name can be determined, a default fixed string "localhost" is
480 	 * returned.
481 	 *
482 	 * Returns: the host name of the machine.
483 	 *
484 	 * Since: 2.8
485 	 */
486 	public static string getHostName()
487 	{
488 		return Str.toString(g_get_host_name());
489 	}
490 
491 	/**
492 	 * Gets the name of the program. This name should not be localized,
493 	 * in contrast to g_get_application_name().
494 	 *
495 	 * If you are using #GApplication the program name is set in
496 	 * g_application_run(). In case of GDK or GTK+ it is set in
497 	 * gdk_init(), which is called by gtk_init() and the
498 	 * #GtkApplication::startup handler. The program name is found by
499 	 * taking the last component of @argv[0].
500 	 *
501 	 * Returns: the name of the program. The returned string belongs
502 	 *     to GLib and must not be modified or freed.
503 	 */
504 	public static string getPrgname()
505 	{
506 		return Str.toString(g_get_prgname());
507 	}
508 
509 	/**
510 	 * Gets the real name of the user. This usually comes from the user's
511 	 * entry in the `passwd` file. The encoding of the returned string is
512 	 * system-defined. (On Windows, it is, however, always UTF-8.) If the
513 	 * real user name cannot be determined, the string "Unknown" is
514 	 * returned.
515 	 *
516 	 * Returns: the user's real name.
517 	 */
518 	public static string getRealName()
519 	{
520 		return Str.toString(g_get_real_name());
521 	}
522 
523 	/**
524 	 * Returns an ordered list of base directories in which to access
525 	 * system-wide configuration information.
526 	 *
527 	 * On UNIX platforms this is determined using the mechanisms described
528 	 * in the
529 	 * [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
530 	 * In this case the list of directories retrieved will be `XDG_CONFIG_DIRS`.
531 	 *
532 	 * On Windows it follows XDG Base Directory Specification if `XDG_CONFIG_DIRS` is defined.
533 	 * If `XDG_CONFIG_DIRS` is undefined, the directory that contains application
534 	 * data for all users is used instead. A typical path is
535 	 * `C:\Documents and Settings\All Users\Application Data`.
536 	 * This folder is used for application data
537 	 * that is not user specific. For example, an application can store
538 	 * a spell-check dictionary, a database of clip art, or a log file in the
539 	 * CSIDL_COMMON_APPDATA folder. This information will not roam and is available
540 	 * to anyone using the computer.
541 	 *
542 	 * Returns: a %NULL-terminated array of strings owned by GLib that must not be
543 	 *     modified or freed.
544 	 *
545 	 * Since: 2.6
546 	 */
547 	public static string[] getSystemConfigDirs()
548 	{
549 		return Str.toStringArray(g_get_system_config_dirs());
550 	}
551 
552 	/**
553 	 * Returns an ordered list of base directories in which to access
554 	 * system-wide application data.
555 	 *
556 	 * On UNIX platforms this is determined using the mechanisms described
557 	 * in the
558 	 * [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec)
559 	 * In this case the list of directories retrieved will be `XDG_DATA_DIRS`.
560 	 *
561 	 * On Windows it follows XDG Base Directory Specification if `XDG_DATA_DIRS` is defined.
562 	 * If `XDG_DATA_DIRS` is undefined,
563 	 * the first elements in the list are the Application Data
564 	 * and Documents folders for All Users. (These can be determined only
565 	 * on Windows 2000 or later and are not present in the list on other
566 	 * Windows versions.) See documentation for CSIDL_COMMON_APPDATA and
567 	 * CSIDL_COMMON_DOCUMENTS.
568 	 *
569 	 * Then follows the "share" subfolder in the installation folder for
570 	 * the package containing the DLL that calls this function, if it can
571 	 * be determined.
572 	 *
573 	 * Finally the list contains the "share" subfolder in the installation
574 	 * folder for GLib, and in the installation folder for the package the
575 	 * application's .exe file belongs to.
576 	 *
577 	 * The installation folders above are determined by looking up the
578 	 * folder where the module (DLL or EXE) in question is located. If the
579 	 * folder's name is "bin", its parent is used, otherwise the folder
580 	 * itself.
581 	 *
582 	 * Note that on Windows the returned list can vary depending on where
583 	 * this function is called.
584 	 *
585 	 * Returns: a %NULL-terminated array of strings owned by GLib that must not be
586 	 *     modified or freed.
587 	 *
588 	 * Since: 2.6
589 	 */
590 	public static string[] getSystemDataDirs()
591 	{
592 		return Str.toStringArray(g_get_system_data_dirs());
593 	}
594 
595 	/**
596 	 * Gets the directory to use for temporary files.
597 	 *
598 	 * On UNIX, this is taken from the `TMPDIR` environment variable.
599 	 * If the variable is not set, `P_tmpdir` is
600 	 * used, as defined by the system C library. Failing that, a
601 	 * hard-coded default of "/tmp" is returned.
602 	 *
603 	 * On Windows, the `TEMP` environment variable is used, with the
604 	 * root directory of the Windows installation (eg: "C:\") used
605 	 * as a default.
606 	 *
607 	 * The encoding of the returned string is system-defined. On Windows,
608 	 * it is always UTF-8. The return value is never %NULL or the empty
609 	 * string.
610 	 *
611 	 * Returns: the directory to use for temporary files.
612 	 */
613 	public static string getTmpDir()
614 	{
615 		return Str.toString(g_get_tmp_dir());
616 	}
617 
618 	/**
619 	 * Returns a base directory in which to store non-essential, cached
620 	 * data specific to particular user.
621 	 *
622 	 * On UNIX platforms this is determined using the mechanisms described
623 	 * in the
624 	 * [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
625 	 * In this case the directory retrieved will be `XDG_CACHE_HOME`.
626 	 *
627 	 * On Windows it follows XDG Base Directory Specification if `XDG_CACHE_HOME` is defined.
628 	 * If `XDG_CACHE_HOME` is undefined, the directory that serves as a common
629 	 * repository for temporary Internet files is used instead. A typical path is
630 	 * `C:\Documents and Settings\username\Local Settings\Temporary Internet Files`.
631 	 * See the [documentation for `CSIDL_INTERNET_CACHE`](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494%28v=vs.85%29.aspx#csidl_internet_cache).
632 	 *
633 	 * Returns: a string owned by GLib that must not be modified
634 	 *     or freed.
635 	 *
636 	 * Since: 2.6
637 	 */
638 	public static string getUserCacheDir()
639 	{
640 		return Str.toString(g_get_user_cache_dir());
641 	}
642 
643 	/**
644 	 * Returns a base directory in which to store user-specific application
645 	 * configuration information such as user preferences and settings.
646 	 *
647 	 * On UNIX platforms this is determined using the mechanisms described
648 	 * in the
649 	 * [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
650 	 * In this case the directory retrieved will be `XDG_CONFIG_HOME`.
651 	 *
652 	 * On Windows it follows XDG Base Directory Specification if `XDG_CONFIG_HOME` is defined.
653 	 * If `XDG_CONFIG_HOME` is undefined, the folder to use for local (as opposed
654 	 * to roaming) application data is used instead. See the
655 	 * [documentation for `CSIDL_LOCAL_APPDATA`](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494%28v=vs.85%29.aspx#csidl_local_appdata).
656 	 * Note that in this case on Windows it will be  the same
657 	 * as what g_get_user_data_dir() returns.
658 	 *
659 	 * Returns: a string owned by GLib that must not be modified
660 	 *     or freed.
661 	 *
662 	 * Since: 2.6
663 	 */
664 	public static string getUserConfigDir()
665 	{
666 		return Str.toString(g_get_user_config_dir());
667 	}
668 
669 	/**
670 	 * Returns a base directory in which to access application data such
671 	 * as icons that is customized for a particular user.
672 	 *
673 	 * On UNIX platforms this is determined using the mechanisms described
674 	 * in the
675 	 * [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
676 	 * In this case the directory retrieved will be `XDG_DATA_HOME`.
677 	 *
678 	 * On Windows it follows XDG Base Directory Specification if `XDG_DATA_HOME`
679 	 * is defined. If `XDG_DATA_HOME` is undefined, the folder to use for local (as
680 	 * opposed to roaming) application data is used instead. See the
681 	 * [documentation for `CSIDL_LOCAL_APPDATA`](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762494%28v=vs.85%29.aspx#csidl_local_appdata).
682 	 * Note that in this case on Windows it will be the same
683 	 * as what g_get_user_config_dir() returns.
684 	 *
685 	 * Returns: a string owned by GLib that must not be modified
686 	 *     or freed.
687 	 *
688 	 * Since: 2.6
689 	 */
690 	public static string getUserDataDir()
691 	{
692 		return Str.toString(g_get_user_data_dir());
693 	}
694 
695 	/**
696 	 * Gets the user name of the current user. The encoding of the returned
697 	 * string is system-defined. On UNIX, it might be the preferred file name
698 	 * encoding, or something else, and there is no guarantee that it is even
699 	 * consistent on a machine. On Windows, it is always UTF-8.
700 	 *
701 	 * Returns: the user name of the current user.
702 	 */
703 	public static string getUserName()
704 	{
705 		return Str.toString(g_get_user_name());
706 	}
707 
708 	/**
709 	 * Returns a directory that is unique to the current user on the local
710 	 * system.
711 	 *
712 	 * This is determined using the mechanisms described
713 	 * in the
714 	 * [XDG Base Directory Specification](http://www.freedesktop.org/Standards/basedir-spec).
715 	 * This is the directory
716 	 * specified in the `XDG_RUNTIME_DIR` environment variable.
717 	 * In the case that this variable is not set, we return the value of
718 	 * g_get_user_cache_dir(), after verifying that it exists.
719 	 *
720 	 * Returns: a string owned by GLib that must not be
721 	 *     modified or freed.
722 	 *
723 	 * Since: 2.28
724 	 */
725 	public static string getUserRuntimeDir()
726 	{
727 		return Str.toString(g_get_user_runtime_dir());
728 	}
729 
730 	/**
731 	 * Returns the full path of a special directory using its logical id.
732 	 *
733 	 * On UNIX this is done using the XDG special user directories.
734 	 * For compatibility with existing practise, %G_USER_DIRECTORY_DESKTOP
735 	 * falls back to `$HOME/Desktop` when XDG special user directories have
736 	 * not been set up.
737 	 *
738 	 * Depending on the platform, the user might be able to change the path
739 	 * of the special directory without requiring the session to restart; GLib
740 	 * will not reflect any change once the special directories are loaded.
741 	 *
742 	 * Params:
743 	 *     directory = the logical id of special directory
744 	 *
745 	 * Returns: the path to the specified special directory, or
746 	 *     %NULL if the logical id was not found. The returned string is owned by
747 	 *     GLib and should not be modified or freed.
748 	 *
749 	 * Since: 2.14
750 	 */
751 	public static string getUserSpecialDir(GUserDirectory directory)
752 	{
753 		return Str.toString(g_get_user_special_dir(directory));
754 	}
755 
756 	/**
757 	 * Returns the value of an environment variable.
758 	 *
759 	 * On UNIX, the name and value are byte strings which might or might not
760 	 * be in some consistent character set and encoding. On Windows, they are
761 	 * in UTF-8.
762 	 * On Windows, in case the environment variable's value contains
763 	 * references to other environment variables, they are expanded.
764 	 *
765 	 * Params:
766 	 *     variable = the environment variable to get
767 	 *
768 	 * Returns: the value of the environment variable, or %NULL if
769 	 *     the environment variable is not found. The returned string
770 	 *     may be overwritten by the next call to g_getenv(), g_setenv()
771 	 *     or g_unsetenv().
772 	 */
773 	public static string getenv(string variable)
774 	{
775 		return Str.toString(g_getenv(Str.toStringz(variable)));
776 	}
777 
778 	/**
779 	 * Gets the names of all variables set in the environment.
780 	 *
781 	 * Programs that want to be portable to Windows should typically use
782 	 * this function and g_getenv() instead of using the environ array
783 	 * from the C library directly. On Windows, the strings in the environ
784 	 * array are in system codepage encoding, while in most of the typical
785 	 * use cases for environment variables in GLib-using programs you want
786 	 * the UTF-8 encoding that this function and g_getenv() provide.
787 	 *
788 	 * Returns: a %NULL-terminated
789 	 *     list of strings which must be freed with g_strfreev().
790 	 *
791 	 * Since: 2.8
792 	 */
793 	public static string[] listenv()
794 	{
795 		auto retStr = g_listenv();
796 
797 		scope(exit) Str.freeStringArray(retStr);
798 		return Str.toStringArray(retStr);
799 	}
800 
801 	/**
802 	 * Set the pointer at the specified location to %NULL.
803 	 *
804 	 * Params:
805 	 *     nullifyLocation = the memory address of the pointer.
806 	 */
807 	public static void nullifyPointer(void** nullifyLocation)
808 	{
809 		g_nullify_pointer(nullifyLocation);
810 	}
811 
812 	/**
813 	 * Parses a string containing debugging options
814 	 * into a %guint containing bit flags. This is used
815 	 * within GDK and GTK+ to parse the debug options passed on the
816 	 * command line or through environment variables.
817 	 *
818 	 * If @string is equal to "all", all flags are set. Any flags
819 	 * specified along with "all" in @string are inverted; thus,
820 	 * "all,foo,bar" or "foo,bar,all" sets all flags except those
821 	 * corresponding to "foo" and "bar".
822 	 *
823 	 * If @string is equal to "help", all the available keys in @keys
824 	 * are printed out to standard error.
825 	 *
826 	 * Params:
827 	 *     str = a list of debug options separated by colons, spaces, or
828 	 *         commas, or %NULL.
829 	 *     keys = pointer to an array of #GDebugKey which associate
830 	 *         strings with bit flags.
831 	 *
832 	 * Returns: the combined set of bit flags.
833 	 */
834 	public static uint parseDebugString(string str, GDebugKey[] keys)
835 	{
836 		return g_parse_debug_string(Str.toStringz(str), keys.ptr, cast(uint)keys.length);
837 	}
838 
839 	/**
840 	 * Gets the last component of the filename.
841 	 *
842 	 * If @file_name ends with a directory separator it gets the component
843 	 * before the last slash. If @file_name consists only of directory
844 	 * separators (and on Windows, possibly a drive letter), a single
845 	 * separator is returned. If @file_name is empty, it gets ".".
846 	 *
847 	 * Params:
848 	 *     fileName = the name of the file
849 	 *
850 	 * Returns: a newly allocated string containing the last
851 	 *     component of the filename
852 	 */
853 	public static string pathGetBasename(string fileName)
854 	{
855 		auto retStr = g_path_get_basename(Str.toStringz(fileName));
856 
857 		scope(exit) Str.freeString(retStr);
858 		return Str.toString(retStr);
859 	}
860 
861 	/**
862 	 * Gets the directory components of a file name.
863 	 *
864 	 * If the file name has no directory components "." is returned.
865 	 * The returned string should be freed when no longer needed.
866 	 *
867 	 * Params:
868 	 *     fileName = the name of the file
869 	 *
870 	 * Returns: the directory components of the file
871 	 */
872 	public static string pathGetDirname(string fileName)
873 	{
874 		auto retStr = g_path_get_dirname(Str.toStringz(fileName));
875 
876 		scope(exit) Str.freeString(retStr);
877 		return Str.toString(retStr);
878 	}
879 
880 	/**
881 	 * Returns %TRUE if the given @file_name is an absolute file name.
882 	 * Note that this is a somewhat vague concept on Windows.
883 	 *
884 	 * On POSIX systems, an absolute file name is well-defined. It always
885 	 * starts from the single root directory. For example "/usr/local".
886 	 *
887 	 * On Windows, the concepts of current drive and drive-specific
888 	 * current directory introduce vagueness. This function interprets as
889 	 * an absolute file name one that either begins with a directory
890 	 * separator such as "\Users\tml" or begins with the root on a drive,
891 	 * for example "C:\Windows". The first case also includes UNC paths
892 	 * such as "\\myserver\docs\foo". In all cases, either slashes or
893 	 * backslashes are accepted.
894 	 *
895 	 * Note that a file name relative to the current drive root does not
896 	 * truly specify a file uniquely over time and across processes, as
897 	 * the current drive is a per-process value and can be changed.
898 	 *
899 	 * File names relative the current directory on some specific drive,
900 	 * such as "D:foo/bar", are not interpreted as absolute by this
901 	 * function, but they obviously are not relative to the normal current
902 	 * directory as returned by getcwd() or g_get_current_dir()
903 	 * either. Such paths should be avoided, or need to be handled using
904 	 * Windows-specific code.
905 	 *
906 	 * Params:
907 	 *     fileName = a file name
908 	 *
909 	 * Returns: %TRUE if @file_name is absolute
910 	 */
911 	public static bool pathIsAbsolute(string fileName)
912 	{
913 		return g_path_is_absolute(Str.toStringz(fileName)) != 0;
914 	}
915 
916 	/**
917 	 * Returns a pointer into @file_name after the root component,
918 	 * i.e. after the "/" in UNIX or "C:\" under Windows. If @file_name
919 	 * is not an absolute path it returns %NULL.
920 	 *
921 	 * Params:
922 	 *     fileName = a file name
923 	 *
924 	 * Returns: a pointer into @file_name after the
925 	 *     root component
926 	 */
927 	public static string pathSkipRoot(string fileName)
928 	{
929 		return Str.toString(g_path_skip_root(Str.toStringz(fileName)));
930 	}
931 
932 	/**
933 	 * This is just like the standard C qsort() function, but
934 	 * the comparison routine accepts a user data argument.
935 	 *
936 	 * This is guaranteed to be a stable sort since version 2.32.
937 	 *
938 	 * Params:
939 	 *     pbase = start of array to sort
940 	 *     totalElems = elements in the array
941 	 *     size = size of each element
942 	 *     compareFunc = function to compare elements
943 	 *     userData = data to pass to @compare_func
944 	 */
945 	public static void qsortWithData(void* pbase, int totalElems, size_t size, GCompareDataFunc compareFunc, void* userData)
946 	{
947 		g_qsort_with_data(pbase, totalElems, size, compareFunc, userData);
948 	}
949 
950 	/**
951 	 * Resets the cache used for g_get_user_special_dir(), so
952 	 * that the latest on-disk version is used. Call this only
953 	 * if you just changed the data on disk yourself.
954 	 *
955 	 * Due to threadsafety issues this may cause leaking of strings
956 	 * that were previously returned from g_get_user_special_dir()
957 	 * that can't be freed. We ensure to only leak the data for
958 	 * the directories that actually changed value though.
959 	 *
960 	 * Since: 2.22
961 	 */
962 	public static void reloadUserSpecialDirsCache()
963 	{
964 		g_reload_user_special_dirs_cache();
965 	}
966 
967 	/**
968 	 * Sets a human-readable name for the application. This name should be
969 	 * localized if possible, and is intended for display to the user.
970 	 * Contrast with g_set_prgname(), which sets a non-localized name.
971 	 * g_set_prgname() will be called automatically by gtk_init(),
972 	 * but g_set_application_name() will not.
973 	 *
974 	 * Note that for thread safety reasons, this function can only
975 	 * be called once.
976 	 *
977 	 * The application name will be used in contexts such as error messages,
978 	 * or when displaying an application's name in the task list.
979 	 *
980 	 * Params:
981 	 *     applicationName = localized name of the application
982 	 *
983 	 * Since: 2.2
984 	 */
985 	public static void setApplicationName(string applicationName)
986 	{
987 		g_set_application_name(Str.toStringz(applicationName));
988 	}
989 
990 	/**
991 	 * Sets the name of the program. This name should not be localized,
992 	 * in contrast to g_set_application_name().
993 	 *
994 	 * If you are using #GApplication the program name is set in
995 	 * g_application_run(). In case of GDK or GTK+ it is set in
996 	 * gdk_init(), which is called by gtk_init() and the
997 	 * #GtkApplication::startup handler. The program name is found by
998 	 * taking the last component of @argv[0].
999 	 *
1000 	 * Note that for thread-safety reasons this function can only be called once.
1001 	 *
1002 	 * Params:
1003 	 *     prgname = the name of the program.
1004 	 */
1005 	public static void setPrgname(string prgname)
1006 	{
1007 		g_set_prgname(Str.toStringz(prgname));
1008 	}
1009 
1010 	/**
1011 	 * Sets an environment variable. On UNIX, both the variable's name and
1012 	 * value can be arbitrary byte strings, except that the variable's name
1013 	 * cannot contain '='. On Windows, they should be in UTF-8.
1014 	 *
1015 	 * Note that on some systems, when variables are overwritten, the memory
1016 	 * used for the previous variables and its value isn't reclaimed.
1017 	 *
1018 	 * You should be mindful of the fact that environment variable handling
1019 	 * in UNIX is not thread-safe, and your program may crash if one thread
1020 	 * calls g_setenv() while another thread is calling getenv(). (And note
1021 	 * that many functions, such as gettext(), call getenv() internally.)
1022 	 * This function is only safe to use at the very start of your program,
1023 	 * before creating any other threads (or creating objects that create
1024 	 * worker threads of their own).
1025 	 *
1026 	 * If you need to set up the environment for a child process, you can
1027 	 * use g_get_environ() to get an environment array, modify that with
1028 	 * g_environ_setenv() and g_environ_unsetenv(), and then pass that
1029 	 * array directly to execvpe(), g_spawn_async(), or the like.
1030 	 *
1031 	 * Params:
1032 	 *     variable = the environment variable to set, must not contain '='.
1033 	 *     value = the value for to set the variable to.
1034 	 *     overwrite = whether to change the variable if it already exists.
1035 	 *
1036 	 * Returns: %FALSE if the environment variable couldn't be set.
1037 	 *
1038 	 * Since: 2.4
1039 	 */
1040 	public static bool setenv(string variable, string value, bool overwrite)
1041 	{
1042 		return g_setenv(Str.toStringz(variable), Str.toStringz(value), overwrite) != 0;
1043 	}
1044 
1045 	/**
1046 	 * Gets the smallest prime number from a built-in array of primes which
1047 	 * is larger than @num. This is used within GLib to calculate the optimum
1048 	 * size of a #GHashTable.
1049 	 *
1050 	 * The built-in array of primes ranges from 11 to 13845163 such that
1051 	 * each prime is approximately 1.5-2 times the previous prime.
1052 	 *
1053 	 * Params:
1054 	 *     num = a #guint
1055 	 *
1056 	 * Returns: the smallest prime number from a built-in array of primes
1057 	 *     which is larger than @num
1058 	 */
1059 	public static uint spacedPrimesClosest(uint num)
1060 	{
1061 		return g_spaced_primes_closest(num);
1062 	}
1063 
1064 	/**
1065 	 * Removes an environment variable from the environment.
1066 	 *
1067 	 * Note that on some systems, when variables are overwritten, the
1068 	 * memory used for the previous variables and its value isn't reclaimed.
1069 	 *
1070 	 * You should be mindful of the fact that environment variable handling
1071 	 * in UNIX is not thread-safe, and your program may crash if one thread
1072 	 * calls g_unsetenv() while another thread is calling getenv(). (And note
1073 	 * that many functions, such as gettext(), call getenv() internally.) This
1074 	 * function is only safe to use at the very start of your program, before
1075 	 * creating any other threads (or creating objects that create worker
1076 	 * threads of their own).
1077 	 *
1078 	 * If you need to set up the environment for a child process, you can
1079 	 * use g_get_environ() to get an environment array, modify that with
1080 	 * g_environ_setenv() and g_environ_unsetenv(), and then pass that
1081 	 * array directly to execvpe(), g_spawn_async(), or the like.
1082 	 *
1083 	 * Params:
1084 	 *     variable = the environment variable to remove, must not contain '='
1085 	 *
1086 	 * Since: 2.4
1087 	 */
1088 	public static void unsetenv(string variable)
1089 	{
1090 		g_unsetenv(Str.toStringz(variable));
1091 	}
1092 }