Imported Upstream version 2.55.2
authorHyunjee Kim <hj0426.kim@samsung.com>
Tue, 3 Dec 2019 00:48:48 +0000 (09:48 +0900)
committerHyunjee Kim <hj0426.kim@samsung.com>
Tue, 3 Dec 2019 00:48:48 +0000 (09:48 +0900)
88 files changed:
NEWS
config.h.meson
config.h.win32.in
configure.ac
docs/reference/gio/gdbus-codegen.xml
docs/reference/gio/gio-sections.txt
docs/reference/glib/glib-sections.txt
docs/reference/gobject/glib-mkenums.xml
gio/Makefile.am
gio/gdatainputstream.c
gio/gdatainputstream.h
gio/gdbus-2.0/codegen/codegen.py
gio/gdbus-2.0/codegen/codegen_docbook.py
gio/gdbus-2.0/codegen/codegen_main.py
gio/gdbus-2.0/codegen/dbustypes.py
gio/gdbus-2.0/codegen/parser.py
gio/gdbus-2.0/codegen/utils.py
gio/gdbusaddress.c
gio/gdbusconnection.c
gio/gdbusconnection.h
gio/gdbusinterfaceskeleton.c
gio/gdbusmessage.c
gio/gdbusmethodinvocation.c
gio/gdbusproxy.c
gio/gfile.c
gio/gfile.h
gio/gioenums.h
gio/giomodule.c
gio/gnetworkaddress.c
gio/gnetworkingprivate.h
gio/gnetworkmonitor.c
gio/gnetworkmonitor.h
gio/gnotification.c
gio/gpollableoutputstream.c
gio/gproxyaddressenumerator.c
gio/gproxyresolver.c
gio/gresolver.c
gio/gsettings-tool.c
gio/gsettingsschema.c
gio/gsimpleproxyresolver.c
gio/gsocketaddressenumerator.h
gio/gthreadedresolver.c
gio/gtlsclientconnection.c
gio/gtlsclientconnection.h
gio/gunixmounts.c
gio/gwin32networkmonitor.c [new file with mode: 0644]
gio/gwin32networkmonitor.h [new file with mode: 0644]
gio/meson.build
gio/tests/data-input-stream.c
gio/tests/file.c
gio/tests/gdbus-threading.c
gio/tests/simple-proxy.c
glib.doap
glib/docs.c
glib/gbookmarkfile.c
glib/gbytes.c
glib/gcharset.c
glib/gconvert.c
glib/gconvert.h
glib/gdataset.c
glib/gdatetime.c
glib/genviron.c
glib/gfileutils.h
glib/ghash.c
glib/gkeyfile.c
glib/gkeyfile.h
glib/glibconfig.h.in
glib/glibconfig.h.win32.in
glib/gmain.c
glib/gmem.c
glib/gmessages.c
glib/gmessages.h
glib/gsequence.c
glib/gspawn.c
glib/gthread-posix.c
glib/gutf8.c
glib/gvariant.c
glib/tests/bytes.c
glib/tests/convert.c
glib/tests/keyfile.c
gobject/gobject.c
gobject/gtypemodule.h
meson.build
po/gl.po
po/hu.po
po/id.po
po/pl.po
po/zh_TW.po

diff --git a/NEWS b/NEWS
index 8d5f000..4685309 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,53 @@
+Overview of changes in GLib 2.55.2
+==================================
+
+* GFile now has API to get the path without copying
+
+* A network monitor implementation for Windows has been added
+
+* Bugs fixed:
+ 520116 g_utf8_strlcpy()
+ 584284 g_data_input_stream_read_until_async behaves confusingly different f...
+ 605700 request for g_key_file_get_locale()
+ 658713 ngettext (plural forms) needed for "Message has %d file descriptors ...
+ 685442 windows GNetworkMonitor implementation
+ 723003 gsettings list-recursively reports some keys multiple times
+ 749583 GSequence performance improvements
+ 757284 Move G_DIR_SEPARATOR* and G_SEARCHPATH_SEPARATOR* into glibconfig.h
+ 760324 [PATCH] gkeyfile.c: find_file_in_data_dirs fails to return the path ...
+ 761102 Increase performance for main loop
+ 767976 GFile: Add g_file_peek_path()
+ 770335 gdbus-codegen: generated getter for 'ao' property is actually (trans...
+ 772989 Totem allows invalid urls that might cause segfault that's irrecover...
+ 790698 convert: test failure on NetBSD
+ 791015 gdbus-codegen: Split generation of header and source
+ 791622 Disable strict-aliasing in GLib
+ 792050 GResolver is not thread-safe
+ 792217 Deprecate GTlsClientConnection:use-ssl3
+ 792338 meson, autotools: figure out if mem barrier is needed for arm64 host...
+ 792351 gbookmarkfile: check length before dereferencing groups
+ 792364 gdbus-threading test method-calls-in-thread: assertion failed (elaps...
+ 792370 GNetworkMonitor: Rename "network-changed" signal argument
+ 792410 GDateTime new_from_iso8601 test broken in 2.55 on i386
+ 792432 flush stdout after logging (debug) messages
+ 792455 Improve docs of GSequence
+ 792499 deadlock on startup with TCP session bus
+ 792516 gconvert: More consistent handling of embedded NUL bytes
+ 792777 g_notification_set_urgent() unconditionally sets G_NOTIFICATION_PRIO...
+ 792780 gbytes should reference toplevel bytes when slicing with g_bytes_new...
+ 792856 off64_t isn't a part of C standard
+ 792862 gpollableoutputstream: document side effects of WOULD_BLOCK on D/TLS
+ 792903 Clarification between g_try_.. functions and their counterparts
+ 793006 High CPU load for GUnixMountsMonitor consumers
+ 793026 possible mem leak in g_mutex_impl_new
+ 793074 g_message() does not get -Wformat warnings when compiling with G_LOG...
+
+* Translation updates:
+ Hungarian
+ Indonesian
+ Polish
+
+
 Overview of changes in GLib 2.55.1
 ==================================
 
index 2350fd3..d540cb8 100644 (file)
 /* Define to 1 if you have the 'res_init' function. */
 #mesondefine HAVE_RES_INIT
 
+/* Define to 1 if you have the 'res_nclose' function. */
+#mesondefine HAVE_RES_NCLOSE
+
+/* Define to 1 if you have the 'res_ndestroy' function. */
+#mesondefine HAVE_RES_NDESTROY
+
+/* Define to 1 if you have the 'res_ninit' function. */
+#mesondefine HAVE_RES_NINIT
+
+/* Define to 1 if you have the 'res_nquery' function. */
+#mesondefine HAVE_RES_NQUERY
+
 /* Define to 1 if you have the <sched.h> header file. */
 #mesondefine HAVE_SCHED_H
 
index b607cca..b50d814 100644 (file)
 /* Define to 1 if you have the 'res_init' function. */
 /* #undef HAVE_RES_INIT */
 
+/* Define to 1 if you have the 'res_nclose' function. */
+/* #undef HAVE_RES_NCLOSE */
+
+/* Define to 1 if you have the 'res_ndestroy' function. */
+/* #undef HAVE_RES_NDESTROY */
+
+/* Define to 1 if you have the 'res_ninit' function. */
+/* #undef HAVE_RES_NINIT */
+
+/* Define to 1 if you have the 'res_nquery' function. */
+/* #undef HAVE_RES_NQUERY */
+
 /* Define to 1 if you have the <sched.h> header file. */
 /* #undef HAVE_SCHED_H */
 
index b28dbfb..44bebe5 100644 (file)
@@ -31,7 +31,7 @@ m4_define(glib_configure_ac)
 
 m4_define([glib_major_version], [2])
 m4_define([glib_minor_version], [55])
-m4_define([glib_micro_version], [1])
+m4_define([glib_micro_version], [2])
 m4_define([glib_interface_age], [0])
 m4_define([glib_binary_age],
           [m4_eval(100 * glib_minor_version + glib_micro_version)])
@@ -127,6 +127,8 @@ case "$host" in
     glib_pid_type='void *'
     glib_pid_format='p'
     glib_pollfd_format='%#x'
+    glib_dir_separator='\\\\'
+    glib_searchpath_separator=';'
     glib_cv_stack_grows=no
     # Unfortunately the mingw implementations of C99-style snprintf and vsnprintf
     # don't seem to be quite good enough, at least not in mingw-runtime-3.14.
@@ -151,6 +153,8 @@ case "$host" in
     glib_pid_type=int
     glib_pid_format='i'
     glib_pollfd_format='%d'
+    glib_dir_separator='/'
+    glib_searchpath_separator=':'
     ;;
 esac
 case $host in
@@ -1012,6 +1016,7 @@ AS_IF([test $glib_native_win32 = yes], [
                                        [AC_MSG_ERROR(Could not find socket())]))
   save_libs="$LIBS"
   LIBS="$LIBS $NETWORK_LIBS"
+
   AC_MSG_CHECKING([for res_init])
   AC_TRY_LINK([#include <sys/types.h>
               #include <netinet/in.h>
@@ -1022,6 +1027,54 @@ AS_IF([test $glib_native_win32 = yes], [
               ],[AC_MSG_RESULT([yes])
                 AC_DEFINE(HAVE_RES_INIT, 1, [Define to 1 if you have the 'res_init' function.])
              ],[AC_MSG_RESULT([no])])
+
+  AC_MSG_CHECKING([for res_nclose])
+  AC_TRY_LINK([#include <sys/types.h>
+              #include <netinet/in.h>
+              #include <arpa/nameser.h>
+              #include <resolv.h>
+              ],[
+               struct __res_state res;
+              res_nclose(&res);
+              ],[AC_MSG_RESULT([yes])
+                AC_DEFINE(HAVE_RES_NCLOSE, 1, [Define to 1 if you have the 'res_nclose' function.])
+             ],[AC_MSG_RESULT([no])])
+
+  AC_MSG_CHECKING([for res_ndestroy])
+  AC_TRY_LINK([#include <sys/types.h>
+              #include <netinet/in.h>
+              #include <arpa/nameser.h>
+              #include <resolv.h>
+              ],[
+               struct __res_state res;
+              res_ndestroy(&res);
+              ],[AC_MSG_RESULT([yes])
+                AC_DEFINE(HAVE_RES_NDESTROY, 1, [Define to 1 if you have the 'res_ndestroy' function.])
+             ],[AC_MSG_RESULT([no])])
+
+  AC_MSG_CHECKING([for res_ninit])
+  AC_TRY_LINK([#include <sys/types.h>
+              #include <netinet/in.h>
+              #include <arpa/nameser.h>
+              #include <resolv.h>
+              ],[
+               struct __res_state res;
+              res_ninit(&res);
+              ],[AC_MSG_RESULT([yes])
+                AC_DEFINE(HAVE_RES_NINIT, 1, [Define to 1 if you have the 'res_ninit' function.])
+             ],[AC_MSG_RESULT([no])])
+
+  AC_MSG_CHECKING([for res_nquery])
+  AC_TRY_LINK([#include <sys/types.h>
+              #include <netinet/in.h>
+              #include <arpa/nameser.h>
+              #include <resolv.h>
+              ],[
+               struct __res_state res;
+              res_nquery(&res, "test", 0, 0, (void *)0, 0);
+              ],[AC_MSG_RESULT([yes])
+                AC_DEFINE(HAVE_RES_NQUERY, 1, [Define to 1 if you have the 'res_nquery' function.])
+             ],[AC_MSG_RESULT([no])])
   LIBS="$save_libs"
 ])
 AC_SUBST(NETWORK_LIBS)
@@ -2945,6 +2998,11 @@ typedef $g_pid_type GPid;
 #define GLIB_SYSDEF_MSG_PEEK $g_msg_peek
 #define GLIB_SYSDEF_MSG_DONTROUTE $g_msg_dontroute
 
+#define G_DIR_SEPARATOR '$g_dir_separator'
+#define G_DIR_SEPARATOR_S "$g_dir_separator"
+#define G_SEARCHPATH_SEPARATOR '$g_searchpath_separator'
+#define G_SEARCHPATH_SEPARATOR_S "$g_searchpath_separator"
+
 G_END_DECLS
 
 #endif /* __GLIBCONFIG_H__ */
@@ -3217,6 +3275,9 @@ g_memory_barrier_needed="$glib_memory_barrier_needed"
 g_gcc_atomic_ops="$glib_cv_gcc_has_builtin_atomic_operations"
 
 g_module_suffix="$glib_gmodule_suffix"
+g_dir_separator="$glib_dir_separator"
+g_searchpath_separator="$glib_searchpath_separator"
+
 g_pid_type="$glib_pid_type"
 g_pid_format="\"$glib_pid_format\""
 g_pollfd_format="\"$glib_pollfd_format\""
@@ -3504,6 +3565,8 @@ tests/refcount/Makefile
 m4macros/Makefile
 ])
 
+# We need this command because the configure script will not preserve
+# the same attributes of the template files
 AC_CONFIG_COMMANDS([chmod-scripts],
 [chmod 0755 glib-zip
 chmod 0755 glib-gettextize
index 27b25ff..b1145e5 100644 (file)
     <arg><option>--c-generate-autocleanup</option> none|objects|all</arg>
     <arg><option>--output-directory</option> <replaceable>OUTDIR</replaceable></arg>
     <arg><option>--generate-docbook</option> <replaceable>OUTFILES</replaceable></arg>
+    <arg><option>--pragma-once</option></arg>
     <arg><option>--xml-files</option> <replaceable>FILE</replaceable></arg>
+    <arg><option>--header</option></arg>
+    <arg><option>--body</option></arg>
+    <arg><option>--output</option> <replaceable>OUTFILE</replaceable></arg>
     <group choice="plain" rep="repeat">
       <arg>
         <option>--annotate</option>
   <title>Description</title>
   <para>
     <command>gdbus-codegen</command> is used to generate code and/or
-    documentation for one or more D-Bus interfaces. The tool reads
+    documentation for one or more D-Bus interfaces.
+  </para>
+  <para>
+    <command>gdbus-codegen</command> reads
     <ulink
     url="http://dbus.freedesktop.org/doc/dbus-specification.html#introspection-format">D-Bus
-    Introspection XML</ulink> files and generates output files. The
-    tool currently supports generating C code (via
-    <option>--generate-c-code</option>) and Docbook XML (via
-    <option>--generate-docbook</option>).
+    Introspection XML</ulink> from files passed as additional
+    arguments on the command line and generates output files.
+    It currently supports generating C source code (via
+    <option>--body</option>) or header (via <option>--header</option>)
+    and Docbook XML (via <option>--generate-docbook</option>).
   </para>
 </refsect1>
 
     #GDBusObjectManagerServer instance.
   </para>
   <para>
+    For C code generation either <option>--body</option> that
+    generates source code, or <option>--header</option> that
+    generates headers, can be used. These options must be used along with
+    <option>--output</option>, which is used to specify the file to output to.
+  </para>
+  <para>
+    Both files can be generated at the same time by using
+    <option>--generate-c-code</option>, but this option is deprecated.
+    In this case <option>--output</option> cannot be used due to the
+    generation of multiple files. Instead pass
+    <option>--output-directory</option> to specify the directory to put
+    the output files in. By default the current directory will be used.
+  </para>
+  <para>
     The name of each generated C type is derived from the D-Bus
     interface name stripped with the prefix given with
     <option>--interface-prefix</option> and with the dots removed and
       <term><option>--xml-files</option> <replaceable>FILE</replaceable></term>
       <listitem>
         <para>
+          This option is deprecated; use positional arguments instead.
           The D-Bus introspection XML file.
         </para>
       </listitem>
           <literal>NAME</literal> is a place-holder for the interface
           name, e.g. <literal>net.Corp.FooBar</literal> and so on.
         </para>
+        <para>
+          Pass <option>--output-directory</option> to specify the directory
+          to put the output files in. By default the current directory
+          will be used.
+        </para>
       </listitem>
     </varlistentry>
 
     </varlistentry>
 
     <varlistentry>
+      <term><option>--pragma-once</option></term>
+      <listitem>
+        <para>
+          If this option is passed, the
+          <ulink url="https://en.wikipedia.org/wiki/Pragma_once">&#35;pragma once</ulink>
+          preprocessor directive is used instead of include guards.
+        </para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
       <term><option>--c-generate-object-manager</option></term>
       <listitem>
         <para>
         <para>
           Directory to output generated source to. Equivalent to changing directory before generation.
         </para>
+        <para>
+          This option cannot be used with neither <option>--body</option> nor
+          <option>--header</option>, and <option>--output</option> must be used.
+        </para>
+
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term><option>--header</option></term>
+      <listitem>
+        <para>
+          If this option is passed, it will generate the header code and write it to the disk by
+          using the path and file name provided by <option>--output</option>.
+        </para>
+        <para>
+          Using <option>--generate-c-code</option>, <option>--generate-docbook</option> or
+          <option>--output-directory</option> are not allowed to be used along with
+          <option>--header</option> and <option>--body</option> options, because these options
+          are used to generate only one file.
+        </para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term><option>--body</option></term>
+      <listitem>
+        <para>
+          If this option is passed, it will generate the source code and write it to the disk by
+          using the path and file name provided by <option>--output</option>.
+        </para>
+        <para>
+          Using <option>--generate-c-code</option>, <option>--generate-docbook</option> or
+          <option>--output-directory</option> are not allowed to be used along with
+          <option>--header</option> and <option>--body</option> options, because these options
+          are used to generate only one file.
+        </para>
+      </listitem>
+    </varlistentry>
+
+    <varlistentry>
+      <term><option>--output</option> <replaceable>OUTFILE</replaceable></term>
+      <listitem>
+        <para>
+          The full path where the header (<option>--header</option>) or the source code
+          (<option>--body</option>) will be written, using the path and filename provided by
+          <option>--output</option>. The full path could be something like
+          <literal>$($OUTFILE).{c,h}</literal>.
+        </para>
+        <para>
+          Using <option>--generate-c-code</option>, <option>--generate-docbook</option> or
+          <option>--output-directory</option> is not allowed along with
+          <option>--output</option>, because the latter is used to generate only one file.
+        </para>
       </listitem>
     </varlistentry>
 
index 277ca61..2eb7efc 100644 (file)
@@ -91,6 +91,7 @@ g_file_hash
 g_file_equal
 g_file_get_basename
 g_file_get_path
+g_file_peek_path
 g_file_get_uri
 g_file_get_parse_name
 g_file_get_parent
index dd1d5de..2832983 100644 (file)
@@ -1987,6 +1987,7 @@ g_key_file_has_key
 g_key_file_get_value
 g_key_file_get_string
 g_key_file_get_locale_string
+g_key_file_get_locale_for_key
 g_key_file_get_boolean
 g_key_file_get_integer
 g_key_file_get_int64
index 545857f..a59cacf 100644 (file)
 </refsynopsisdiv>
 
 <refsect1><title>Description</title>
-<para><command>glib-mkenums</command> is a small perl-script utility that
-parses C code to extract enum definitions and produces enum descriptions based
-on text templates specified by the user. Most frequently this script is used to
-produce C code that contains enum values as strings so programs can provide
-value name strings for introspection.
+<para><command>glib-mkenums</command> is a small utility that parses C code to
+extract enum definitions and produces enum descriptions based on text templates
+specified by the user. Typically, you can use this tool to generate enumeration
+types for the GType type system, for #GObject properties and signal marshalling;
+additionally, you can use it to generate enumeration values of #GSettings schemas.
 </para>
 
 <para><command>glib-mkenums</command> takes a list of valid C code files as
-input. The options specified control the text that is output, certain
-substitutions are performed on the text templates for keywords enclosed
-in @ characters.
+input. The options specified control the text that generated, substituting various
+keywords enclosed in @ characters in the templates.
 </para>
 
 <refsect2><title>Production text substitutions</title>
@@ -63,7 +62,7 @@ typedef enum
 <listitem><para>
 The name of the enum currently being processed, enum names are assumed to be
 properly namespaced and to use mixed capitalization to separate
-words (e.g. PrefixTheXEnum).
+words (e.g. <literal>PrefixTheXEnum</literal>).
 </para></listitem>
 </varlistentry>
 
@@ -71,7 +70,7 @@ words (e.g. PrefixTheXEnum).
 <term>@enum_name@</term>
 <listitem><para>
 The enum name with words lowercase and word-separated by underscores
-(e.g. prefix_the_xenum).
+(e.g. <literal>prefix_the_xenum</literal>).
 </para></listitem>
 </varlistentry>
 
@@ -79,7 +78,7 @@ The enum name with words lowercase and word-separated by underscores
 <term>@ENUMNAME@</term>
 <listitem><para>
 The enum name with words uppercase and word-separated by underscores
-(e.g. PREFIX_THE_XENUM).
+(e.g. <literal>PREFIX_THE_XENUM</literal>).
 </para></listitem>
 </varlistentry>
 
@@ -87,14 +86,14 @@ The enum name with words uppercase and word-separated by underscores
 <term>@ENUMSHORT@</term>
 <listitem><para>
 The enum name with words uppercase and word-separated by underscores,
-prefix stripped (e.g. THE_XENUM).
+prefix stripped (e.g. <literal>THE_XENUM</literal>).
 </para></listitem>
 </varlistentry>
 
 <varlistentry>
 <term>@ENUMPREFIX@</term>
 <listitem><para>
-The prefix of the enum name (e.g. PREFIX).
+The prefix of the enum name (e.g. <literal>PREFIX</literal>).
 </para></listitem>
 </varlistentry>
 
@@ -104,7 +103,7 @@ The prefix of the enum name (e.g. PREFIX).
 The enum value name currently being processed with words uppercase and
 word-separated by underscores,
 this is the assumed literal notation of enum values in the C sources
-(e.g. PREFIX_THE_XVALUE).
+(e.g. <literal>PREFIX_THE_XVALUE</literal>).
 </para></listitem>
 </varlistentry>
 
@@ -114,19 +113,17 @@ this is the assumed literal notation of enum values in the C sources
 A nick name for the enum value currently being processed, this is usually
 generated by stripping common prefix words of all the enum values of the
 current enum, the words are lowercase and underscores are substituted by a
-minus (e.g. the-xvalue).
+minus (e.g. <literal>the-xvalue</literal>).
 </para></listitem>
 </varlistentry>
 
 <varlistentry>
 <term>@valuenum@</term>
 <listitem><para>
-The integer value for the enum value currently being processed.  This is
-calculated by using <command>perl</command> to attempt to evaluate the
-expression as it appears in the C source code.  If evaluation fails then
-<command>glib-mkenums</command> will exit with an error status, but this
-only happens if <literal>@valuenum@</literal> appears in your value
-production template.  (Since: 2.26)
+The integer value for the enum value currently being processed. If the
+evaluation fails then <command>glib-mkenums</command> will exit with an
+error status, but this only happens if <literal>@valuenum@</literal>
+appears in your value production template. (Since: 2.26)
 </para></listitem>
 </varlistentry>
 
@@ -162,7 +159,8 @@ The name of the input file currently being processed (e.g. foo.h).
 <varlistentry>
 <term>@basename@</term>
 <listitem><para>
-The base name of the input file currently being processed (e.g. foo.h). (Since: 2.22)
+The base name of the input file currently being processed (e.g. foo.h). Typically
+you want to use <literal>@basename@</literal> in place of <literal>@filename@</literal> in your templates, to improve the reproducibility of the build. (Since: 2.22)
 </para></listitem>
 </varlistentry>
 </variablelist>
@@ -178,7 +176,7 @@ indicate this enum definition to be skipped, or for it to be treated as
 a flags definition, or to specify the common prefix to be stripped from
 all values to generate value nicknames, respectively. The "underscore_name"
 option can be used to specify the word separation used in the *_get_type()
-function. For instance, /*&lt; underscore_name=gnome_vfs_uri_hide_options &gt;*/.
+function. For instance, <literal>/*&lt; underscore_name=gnome_vfs_uri_hide_options &gt;*/</literal>.
 </para>
 <para>
 Per value definition, the options "skip" and "nick" are supported.
index 9b3d04e..d18f4db 100644 (file)
@@ -345,6 +345,8 @@ win32_actual_sources = \
        gwin32outputstream.c \
        gwin32outputstream.h \
        gwin32networking.h \
+       gwin32networkmonitor.c \
+       gwin32networkmonitor.h \
        $(NULL)
 
 win32_more_sources_for_vcproj = \
index 348ce44..78a9b7d 100644 (file)
@@ -915,6 +915,8 @@ scan_for_chars (GDataInputStream *stream,
  *     before encountering any of the stop characters. Set @length to
  *     a #gsize to get the length of the string. This function will
  *     return %NULL on an error.
+ * Deprecated: 2.56: Use g_data_input_stream_read_upto() instead, which has more
+ *     consistent behaviour regarding the stop character.
  */
 char *
 g_data_input_stream_read_until (GDataInputStream  *stream,
@@ -1170,6 +1172,8 @@ g_data_input_stream_read_line_async (GDataInputStream    *stream,
  * g_data_input_stream_read_upto_async() instead.
  *
  * Since: 2.20
+ * Deprecated: 2.56: Use g_data_input_stream_read_upto_async() instead, which
+ *     has more consistent behaviour regarding the stop character.
  */
 void
 g_data_input_stream_read_until_async (GDataInputStream    *stream,
@@ -1277,6 +1281,8 @@ g_data_input_stream_read_line_finish_utf8 (GDataInputStream  *stream,
  *     before encountering any of the stop characters. Set @length to
  *     a #gsize to get the length of the string. This function will
  *     return %NULL on an error.
+ * Deprecated: 2.56: Use g_data_input_stream_read_upto_finish() instead, which
+ *     has more consistent behaviour regarding the stop character.
  */
 gchar *
 g_data_input_stream_read_until_finish (GDataInputStream  *stream,
index c37b797..3ad3b82 100644 (file)
@@ -135,20 +135,20 @@ char *                 g_data_input_stream_read_line_finish_utf8(GDataInputStrea
                                                                  GAsyncResult            *result,
                                                                  gsize                   *length,
                                                                  GError                 **error);
-GLIB_AVAILABLE_IN_ALL
+GLIB_DEPRECATED_IN_2_56_FOR (g_data_input_stream_read_upto)
 char *                 g_data_input_stream_read_until           (GDataInputStream        *stream,
                                                                  const gchar             *stop_chars,
                                                                  gsize                   *length,
                                                                  GCancellable            *cancellable,
                                                                  GError                 **error);
-GLIB_AVAILABLE_IN_ALL
+GLIB_DEPRECATED_IN_2_56_FOR (g_data_input_stream_read_upto_async)
 void                   g_data_input_stream_read_until_async     (GDataInputStream        *stream,
                                                                  const gchar             *stop_chars,
                                                                  gint                     io_priority,
                                                                  GCancellable            *cancellable,
                                                                  GAsyncReadyCallback      callback,
                                                                  gpointer                 user_data);
-GLIB_AVAILABLE_IN_ALL
+GLIB_DEPRECATED_IN_2_56_FOR (g_data_input_stream_read_upto_finish)
 char *                 g_data_input_stream_read_until_finish    (GDataInputStream        *stream,
                                                                  GAsyncResult            *result,
                                                                  gsize                   *length,
index 1dbf94d..d98f897 100644 (file)
@@ -1,8 +1,10 @@
 # -*- Mode: Python -*-
+# coding=utf-8
 
 # GDBus - GLib D-Bus Library
 #
 # Copyright (C) 2008-2011 Red Hat, Inc.
+# Copyright (C) 2018 Iñigo Martínez <inigomartinez@gmail.com>
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -24,245 +26,88 @@ import sys
 from . import config
 from . import utils
 from . import dbustypes
+from .utils import print_error
+
+LICENSE_STR = '''/*
+ * Generated by gdbus-codegen {!s}. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the D-Bus interface description
+ * it was derived from.
+ */\n'''
+
+def generate_namespace(namespace):
+    ns = namespace
+    if len(namespace) > 0:
+        if utils.is_ugly_case(namespace):
+            ns = namespace.replace('_', '')
+            ns_upper = namespace.upper() + '_'
+            ns_lower = namespace.lower() + '_'
+        else:
+            ns_upper = utils.camel_case_to_uscore(namespace).upper() + '_'
+            ns_lower = utils.camel_case_to_uscore(namespace).lower() + '_'
+    else:
+        ns_upper = ''
+        ns_lower = ''
 
-# ----------------------------------------------------------------------------------------------------
+    return (ns, ns_upper, ns_lower)
 
-class CodeGenerator:
-    def __init__(self, ifaces, namespace, interface_prefix, generate_objmanager,
-                 generate_autocleanup, docbook_gen, h, c, header_name):
-        self.docbook_gen = docbook_gen
+class HeaderCodeGenerator:
+    def __init__(self, ifaces, namespace, generate_objmanager,
+                 generate_autocleanup, header_name, use_pragma, outfile):
+        self.ifaces = ifaces
+        self.namespace, self.ns_upper, self.ns_lower = generate_namespace(namespace)
         self.generate_objmanager = generate_objmanager
         self.generate_autocleanup = generate_autocleanup
-        self.ifaces = ifaces
-        self.h = h
-        self.c = c
-        self.header_name = header_name
-        self.namespace = namespace
-        if len(namespace) > 0:
-            if utils.is_ugly_case(namespace):
-                self.namespace = namespace.replace('_', '')
-                self.ns_upper = namespace.upper() + '_'
-                self.ns_lower = namespace.lower() + '_'
-            else:
-                self.ns_upper = utils.camel_case_to_uscore(namespace).upper() + '_'
-                self.ns_lower = utils.camel_case_to_uscore(namespace).lower() + '_'
-        else:
-            self.ns_upper = ''
-            self.ns_lower = ''
-        self.interface_prefix = interface_prefix
         self.header_guard = header_name.upper().replace('.', '_').replace('-', '_').replace('/', '_').replace(':', '_')
+        self.use_pragma = use_pragma
+        self.outfile = outfile
 
     # ----------------------------------------------------------------------------------------------------
 
-    def generate_intro(self):
-        self.c.write('/*\n'
-                     ' * Generated by gdbus-codegen %s. DO NOT EDIT.\n'
-                     ' *\n'
-                     ' * The license of this code is the same as for the D-Bus interface description\n'
-                     ' * it was derived from.\n'
-                     ' */\n'
-                     '\n'
-                     %(config.VERSION))
-        self.c.write('#ifdef HAVE_CONFIG_H\n'
-                     '#  include "config.h"\n'
-                     '#endif\n'
-                     '\n'
-                     '#include "%s"\n'
-                     '\n'
-                     '#include <string.h>\n'
-                     %(self.header_name))
-
-        self.c.write('#ifdef G_OS_UNIX\n'
-                     '#  include <gio/gunixfdlist.h>\n'
-                     '#endif\n'
-                     '\n')
-
-        self.c.write('typedef struct\n'
-                     '{\n'
-                     '  GDBusArgInfo parent_struct;\n'
-                     '  gboolean use_gvariant;\n'
-                     '} _ExtendedGDBusArgInfo;\n'
-                     '\n')
-
-        self.c.write('typedef struct\n'
-                     '{\n'
-                     '  GDBusMethodInfo parent_struct;\n'
-                     '  const gchar *signal_name;\n'
-                     '  gboolean pass_fdlist;\n'
-                     '} _ExtendedGDBusMethodInfo;\n'
-                     '\n')
-
-        self.c.write('typedef struct\n'
-                     '{\n'
-                     '  GDBusSignalInfo parent_struct;\n'
-                     '  const gchar *signal_name;\n'
-                     '} _ExtendedGDBusSignalInfo;\n'
-                     '\n')
-
-        self.c.write('typedef struct\n'
-                     '{\n'
-                     '  GDBusPropertyInfo parent_struct;\n'
-                     '  const gchar *hyphen_name;\n'
-                     '  gboolean use_gvariant;\n'
-                     '} _ExtendedGDBusPropertyInfo;\n'
-                     '\n')
-
-        self.c.write('typedef struct\n'
-                     '{\n'
-                     '  GDBusInterfaceInfo parent_struct;\n'
-                     '  const gchar *hyphen_name;\n'
-                     '} _ExtendedGDBusInterfaceInfo;\n'
-                     '\n')
-
-        self.c.write('typedef struct\n'
-                     '{\n'
-                     '  const _ExtendedGDBusPropertyInfo *info;\n'
-                     '  guint prop_id;\n'
-                     '  GValue orig_value; /* the value before the change */\n'
-                     '} ChangedProperty;\n'
-                     '\n'
-                     'static void\n'
-                     '_changed_property_free (ChangedProperty *data)\n'
-                     '{\n'
-                     '  g_value_unset (&data->orig_value);\n'
-                     '  g_free (data);\n'
-                     '}\n'
-                     '\n')
+    def generate_header_preamble(self):
+        self.outfile.write(LICENSE_STR.format(config.VERSION))
+        self.outfile.write('\n')
 
-        self.c.write('static gboolean\n'
-                     '_g_strv_equal0 (gchar **a, gchar **b)\n'
-                     '{\n'
-                     '  gboolean ret = FALSE;\n'
-                     '  guint n;\n'
-                     '  if (a == NULL && b == NULL)\n'
-                     '    {\n'
-                     '      ret = TRUE;\n'
-                     '      goto out;\n'
-                     '    }\n'
-                     '  if (a == NULL || b == NULL)\n'
-                     '    goto out;\n'
-                     '  if (g_strv_length (a) != g_strv_length (b))\n'
-                     '    goto out;\n'
-                     '  for (n = 0; a[n] != NULL; n++)\n'
-                     '    if (g_strcmp0 (a[n], b[n]) != 0)\n'
-                     '      goto out;\n'
-                     '  ret = TRUE;\n'
-                     'out:\n'
-                     '  return ret;\n'
-                     '}\n'
-                     '\n')
+        if self.use_pragma:
+            self.outfile.write('#pragma once\n')
+        else:
+            self.outfile.write('#ifndef __{!s}__\n'.format(self.header_guard))
+            self.outfile.write('#define __{!s}__\n'.format(self.header_guard))
 
-        self.c.write('static gboolean\n'
-                     '_g_variant_equal0 (GVariant *a, GVariant *b)\n'
-                     '{\n'
-                     '  gboolean ret = FALSE;\n'
-                     '  if (a == NULL && b == NULL)\n'
-                     '    {\n'
-                     '      ret = TRUE;\n'
-                     '      goto out;\n'
-                     '    }\n'
-                     '  if (a == NULL || b == NULL)\n'
-                     '    goto out;\n'
-                     '  ret = g_variant_equal (a, b);\n'
-                     'out:\n'
-                     '  return ret;\n'
-                     '}\n'
-                     '\n')
-
-        # simplified - only supports the types we use
-        self.c.write('G_GNUC_UNUSED static gboolean\n'
-                     '_g_value_equal (const GValue *a, const GValue *b)\n'
-                     '{\n'
-                     '  gboolean ret = FALSE;\n'
-                     '  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));\n'
-                     '  switch (G_VALUE_TYPE (a))\n'
-                     '    {\n'
-                     '      case G_TYPE_BOOLEAN:\n'
-                     '        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));\n'
-                     '        break;\n'
-                     '      case G_TYPE_UCHAR:\n'
-                     '        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));\n'
-                     '        break;\n'
-                     '      case G_TYPE_INT:\n'
-                     '        ret = (g_value_get_int (a) == g_value_get_int (b));\n'
-                     '        break;\n'
-                     '      case G_TYPE_UINT:\n'
-                     '        ret = (g_value_get_uint (a) == g_value_get_uint (b));\n'
-                     '        break;\n'
-                     '      case G_TYPE_INT64:\n'
-                     '        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));\n'
-                     '        break;\n'
-                     '      case G_TYPE_UINT64:\n'
-                     '        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));\n'
-                     '        break;\n'
-                     '      case G_TYPE_DOUBLE:\n'
-                     '        {\n'
-                     '          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */\n'
-                     '          gdouble da = g_value_get_double (a);\n'
-                     '          gdouble db = g_value_get_double (b);\n'
-                     '          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;\n'
-                     '        }\n'
-                     '        break;\n'
-                     '      case G_TYPE_STRING:\n'
-                     '        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);\n'
-                     '        break;\n'
-                     '      case G_TYPE_VARIANT:\n'
-                     '        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));\n'
-                     '        break;\n'
-                     '      default:\n'
-                     '        if (G_VALUE_TYPE (a) == G_TYPE_STRV)\n'
-                     '          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));\n'
-                     '        else\n'
-                     '          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));\n'
-                     '        break;\n'
-                     '    }\n'
-                     '  return ret;\n'
-                     '}\n'
-                     '\n')
-
-        self.h.write('/*\n'
-                     ' * Generated by gdbus-codegen %s. DO NOT EDIT.\n'
-                     ' *\n'
-                     ' * The license of this code is the same as for the D-Bus interface description\n'
-                     ' * it was derived from.\n'
-                     ' */\n'
-                     '\n'
-                     '#ifndef __%s__\n'
-                     '#define __%s__\n'
-                     '\n'%(config.VERSION, self.header_guard, self.header_guard))
-        self.h.write('#include <gio/gio.h>\n'
-                     '\n'
-                     'G_BEGIN_DECLS\n'
-                     '\n')
+        self.outfile.write('\n')
+        self.outfile.write('#include <gio/gio.h>\n')
+        self.outfile.write('\n')
+        self.outfile.write('G_BEGIN_DECLS\n')
+        self.outfile.write('\n')
 
     # ----------------------------------------------------------------------------------------------------
 
     def declare_types(self):
         for i in self.ifaces:
-            self.h.write('\n')
-            self.h.write('/* ------------------------------------------------------------------------ */\n')
-            self.h.write('/* Declarations for %s */\n'%i.name)
-            self.h.write('\n')
+            self.outfile.write('\n')
+            self.outfile.write('/* ------------------------------------------------------------------------ */\n')
+            self.outfile.write('/* Declarations for %s */\n'%i.name)
+            self.outfile.write('\n')
 
             # First the GInterface
-            self.h.write('#define %sTYPE_%s (%s_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower))
-            self.h.write('#define %s%s(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s, %s))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %sIS_%s(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
-            self.h.write('#define %s%s_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), %sTYPE_%s, %sIface))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('\n')
-            self.h.write('struct _%s;\n'%(i.camel_name))
-            self.h.write('typedef struct _%s %s;\n'%(i.camel_name, i.camel_name))
-            self.h.write('typedef struct _%sIface %sIface;\n'%(i.camel_name, i.camel_name))
-            self.h.write('\n')
-            self.h.write('struct _%sIface\n'%(i.camel_name))
-            self.h.write('{\n')
-            self.h.write('  GTypeInterface parent_iface;\n')
+            self.outfile.write('#define %sTYPE_%s (%s_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower))
+            self.outfile.write('#define %s%s(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s, %s))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %sIS_%s(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
+            self.outfile.write('#define %s%s_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), %sTYPE_%s, %sIface))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%s;\n'%(i.camel_name))
+            self.outfile.write('typedef struct _%s %s;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('typedef struct _%sIface %sIface;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sIface\n'%(i.camel_name))
+            self.outfile.write('{\n')
+            self.outfile.write('  GTypeInterface parent_iface;\n')
 
             function_pointers = {}
 
             # vfuncs for methods
             if len(i.methods) > 0:
-                self.h.write('\n')
+                self.outfile.write('\n')
                 for m in i.methods:
                     unix_fd = False
                     if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'):
@@ -280,7 +125,7 @@ class CodeGenerator:
 
             # vfuncs for signals
             if len(i.signals) > 0:
-                self.h.write('\n')
+                self.outfile.write('\n')
                 for s in i.signals:
                     key = (s.since, '_signal_%s'%s.name_lower)
                     value  = '  void (*%s) (\n'%(s.name_lower)
@@ -292,7 +137,7 @@ class CodeGenerator:
 
             # vfuncs for properties
             if len(i.properties) > 0:
-                self.h.write('\n')
+                self.outfile.write('\n')
                 for p in i.properties:
                     key = (p.since, '_prop_get_%s'%p.name_lower)
                     value = '  %s (*get_%s) (%s *object);\n\n'%(p.arg.ctype_in, p.name_lower, i.camel_name)
@@ -308,454 +153,635 @@ class CodeGenerator:
             # See https://bugzilla.gnome.org/show_bug.cgi?id=647577#c5
             # for discussion
             for key in sorted(function_pointers.keys(), key=utils.version_cmp_key):
-                self.h.write('%s'%function_pointers[key])
+                self.outfile.write('%s'%function_pointers[key])
 
-            self.h.write('};\n')
-            self.h.write('\n')
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
             if self.generate_autocleanup == 'all':
-                self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
-                self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, g_object_unref)\n' % (i.camel_name))
-                self.h.write('#endif\n')
-                self.h.write('\n')
-            self.h.write('GType %s_get_type (void) G_GNUC_CONST;\n'%(i.name_lower))
-            self.h.write('\n')
-            self.h.write('GDBusInterfaceInfo *%s_interface_info (void);\n'%(i.name_lower))
-            self.h.write('guint %s_override_properties (GObjectClass *klass, guint property_id_begin);\n'%(i.name_lower))
-            self.h.write('\n')
+                self.outfile.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
+                self.outfile.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, g_object_unref)\n' % (i.camel_name))
+                self.outfile.write('#endif\n')
+                self.outfile.write('\n')
+            self.outfile.write('GType %s_get_type (void) G_GNUC_CONST;\n'%(i.name_lower))
+            self.outfile.write('\n')
+            self.outfile.write('GDBusInterfaceInfo *%s_interface_info (void);\n'%(i.name_lower))
+            self.outfile.write('guint %s_override_properties (GObjectClass *klass, guint property_id_begin);\n'%(i.name_lower))
+            self.outfile.write('\n')
 
             # Then method call completion functions
             if len(i.methods) > 0:
-                self.h.write('\n')
-                self.h.write('/* D-Bus method call completion functions: */\n')
+                self.outfile.write('\n')
+                self.outfile.write('/* D-Bus method call completion functions: */\n')
                 for m in i.methods:
                     unix_fd = False
                     if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'):
                         unix_fd = True
                     if m.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('void %s_complete_%s (\n'
-                                 '    %s *object,\n'
-                                 '    GDBusMethodInvocation *invocation'%(i.name_lower, m.name_lower, i.camel_name))
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('void %s_complete_%s (\n'
+                                       '    %s *object,\n'
+                                       '    GDBusMethodInvocation *invocation'%(i.name_lower, m.name_lower, i.camel_name))
                     if unix_fd:
-                        self.h.write(',\n    GUnixFDList *fd_list')
+                        self.outfile.write(',\n    GUnixFDList *fd_list')
                     for a in m.out_args:
-                        self.h.write(',\n    %s%s'%(a.ctype_in, a.name))
-                    self.h.write(');\n')
-                    self.h.write('\n')
-                self.h.write('\n')
+                        self.outfile.write(',\n    %s%s'%(a.ctype_in, a.name))
+                    self.outfile.write(');\n')
+                    self.outfile.write('\n')
+                self.outfile.write('\n')
 
             # Then signal emission functions
             if len(i.signals) > 0:
-                self.h.write('\n')
-                self.h.write('/* D-Bus signal emissions functions: */\n')
+                self.outfile.write('\n')
+                self.outfile.write('/* D-Bus signal emissions functions: */\n')
                 for s in i.signals:
                     if s.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('void %s_emit_%s (\n'
-                                 '    %s *object'%(i.name_lower, s.name_lower, i.camel_name))
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('void %s_emit_%s (\n'
+                                       '    %s *object'%(i.name_lower, s.name_lower, i.camel_name))
                     for a in s.args:
-                        self.h.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
-                    self.h.write(');\n')
-                    self.h.write('\n')
-                self.h.write('\n')
+                        self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+                    self.outfile.write(');\n')
+                    self.outfile.write('\n')
+                self.outfile.write('\n')
 
             # Then method call declarations
             if len(i.methods) > 0:
-                self.h.write('\n')
-                self.h.write('/* D-Bus method calls: */\n')
+                self.outfile.write('\n')
+                self.outfile.write('/* D-Bus method calls: */\n')
                 for m in i.methods:
                     unix_fd = False
                     if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'):
                         unix_fd = True
                     # async begin
                     if m.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('void %s_call_%s (\n'
-                                 '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('void %s_call_%s (\n'
+                                       '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
                     for a in m.in_args:
-                        self.h.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+                        self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
                     if unix_fd:
-                        self.h.write(',\n    GUnixFDList *fd_list')
-                    self.h.write(',\n'
-                                 '    GCancellable *cancellable,\n'
-                                 '    GAsyncReadyCallback callback,\n'
-                                 '    gpointer user_data);\n')
-                    self.h.write('\n')
+                        self.outfile.write(',\n    GUnixFDList *fd_list')
+                    self.outfile.write(',\n'
+                                       '    GCancellable *cancellable,\n'
+                                       '    GAsyncReadyCallback callback,\n'
+                                       '    gpointer user_data);\n')
+                    self.outfile.write('\n')
                     # async finish
                     if m.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('gboolean %s_call_%s_finish (\n'
-                                 '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('gboolean %s_call_%s_finish (\n'
+                                       '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
                     for a in m.out_args:
-                        self.h.write(',\n    %sout_%s'%(a.ctype_out, a.name))
+                        self.outfile.write(',\n    %sout_%s'%(a.ctype_out, a.name))
                     if unix_fd:
-                        self.h.write(',\n    GUnixFDList **out_fd_list')
-                    self.h.write(',\n'
-                                 '    GAsyncResult *res,\n'
-                                 '    GError **error);\n')
-                    self.h.write('\n')
+                        self.outfile.write(',\n    GUnixFDList **out_fd_list')
+                    self.outfile.write(',\n'
+                                       '    GAsyncResult *res,\n'
+                                       '    GError **error);\n')
+                    self.outfile.write('\n')
                     # sync
                     if m.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('gboolean %s_call_%s_sync (\n'
-                                 '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('gboolean %s_call_%s_sync (\n'
+                                       '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
                     for a in m.in_args:
-                        self.h.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+                        self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
                     if unix_fd:
-                        self.h.write(',\n    GUnixFDList  *fd_list')
+                        self.outfile.write(',\n    GUnixFDList  *fd_list')
                     for a in m.out_args:
-                        self.h.write(',\n    %sout_%s'%(a.ctype_out, a.name))
+                        self.outfile.write(',\n    %sout_%s'%(a.ctype_out, a.name))
                     if unix_fd:
-                        self.h.write(',\n    GUnixFDList **out_fd_list')
-                    self.h.write(',\n'
-                                 '    GCancellable *cancellable,\n'
-                                 '    GError **error);\n')
-                    self.h.write('\n')
-                self.h.write('\n')
+                        self.outfile.write(',\n    GUnixFDList **out_fd_list')
+                    self.outfile.write(',\n'
+                                       '    GCancellable *cancellable,\n'
+                                       '    GError **error);\n')
+                    self.outfile.write('\n')
+                self.outfile.write('\n')
 
             # Then the property accessor declarations
             if len(i.properties) > 0:
-                self.h.write('\n')
-                self.h.write('/* D-Bus property accessors: */\n')
+                self.outfile.write('\n')
+                self.outfile.write('/* D-Bus property accessors: */\n')
                 for p in i.properties:
                     # getter
                     if p.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('%s%s_get_%s (%s *object);\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name))
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('%s%s_get_%s (%s *object);\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name))
                     if p.arg.free_func != None:
                         if p.deprecated:
-                            self.h.write('G_GNUC_DEPRECATED ')
-                        self.h.write('%s%s_dup_%s (%s *object);\n'%(p.arg.ctype_in_dup, i.name_lower, p.name_lower, i.camel_name))
+                            self.outfile.write('G_GNUC_DEPRECATED ')
+                        self.outfile.write('%s%s_dup_%s (%s *object);\n'%(p.arg.ctype_in_dup, i.name_lower, p.name_lower, i.camel_name))
                     # setter
                     if p.deprecated:
-                        self.h.write('G_GNUC_DEPRECATED ')
-                    self.h.write('void %s_set_%s (%s *object, %svalue);\n'%(i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in, ))
-                    self.h.write('\n')
+                        self.outfile.write('G_GNUC_DEPRECATED ')
+                    self.outfile.write('void %s_set_%s (%s *object, %svalue);\n'%(i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in, ))
+                    self.outfile.write('\n')
 
             # Then the proxy
-            self.h.write('\n')
-            self.h.write('/* ---- */\n')
-            self.h.write('\n')
-            self.h.write('#define %sTYPE_%s_PROXY (%s_proxy_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower))
-            self.h.write('#define %s%s_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s_PROXY, %sProxy))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %s%s_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_%s_PROXY, %sProxyClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %s%s_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_%s_PROXY, %sProxyClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %sIS_%s_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s_PROXY))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
-            self.h.write('#define %sIS_%s_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_%s_PROXY))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
-            self.h.write('\n')
-            self.h.write('typedef struct _%sProxy %sProxy;\n'%(i.camel_name, i.camel_name))
-            self.h.write('typedef struct _%sProxyClass %sProxyClass;\n'%(i.camel_name, i.camel_name))
-            self.h.write('typedef struct _%sProxyPrivate %sProxyPrivate;\n'%(i.camel_name, i.camel_name))
-            self.h.write('\n')
-            self.h.write('struct _%sProxy\n'%(i.camel_name))
-            self.h.write('{\n')
-            self.h.write('  /*< private >*/\n')
-            self.h.write('  GDBusProxy parent_instance;\n')
-            self.h.write('  %sProxyPrivate *priv;\n'%(i.camel_name))
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('struct _%sProxyClass\n'%(i.camel_name))
-            self.h.write('{\n')
-            self.h.write('  GDBusProxyClass parent_class;\n')
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('GType %s_proxy_get_type (void) G_GNUC_CONST;\n'%(i.name_lower))
-            self.h.write('\n')
+            self.outfile.write('\n')
+            self.outfile.write('/* ---- */\n')
+            self.outfile.write('\n')
+            self.outfile.write('#define %sTYPE_%s_PROXY (%s_proxy_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower))
+            self.outfile.write('#define %s%s_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s_PROXY, %sProxy))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %s%s_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_%s_PROXY, %sProxyClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %s%s_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_%s_PROXY, %sProxyClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %sIS_%s_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s_PROXY))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
+            self.outfile.write('#define %sIS_%s_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_%s_PROXY))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
+            self.outfile.write('\n')
+            self.outfile.write('typedef struct _%sProxy %sProxy;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('typedef struct _%sProxyClass %sProxyClass;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('typedef struct _%sProxyPrivate %sProxyPrivate;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sProxy\n'%(i.camel_name))
+            self.outfile.write('{\n')
+            self.outfile.write('  /*< private >*/\n')
+            self.outfile.write('  GDBusProxy parent_instance;\n')
+            self.outfile.write('  %sProxyPrivate *priv;\n'%(i.camel_name))
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sProxyClass\n'%(i.camel_name))
+            self.outfile.write('{\n')
+            self.outfile.write('  GDBusProxyClass parent_class;\n')
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('GType %s_proxy_get_type (void) G_GNUC_CONST;\n'%(i.name_lower))
+            self.outfile.write('\n')
             if self.generate_autocleanup in ('objects', 'all'):
-                self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
-                self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sProxy, g_object_unref)\n' % (i.camel_name))
-                self.h.write('#endif\n')
-                self.h.write('\n')
+                self.outfile.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
+                self.outfile.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sProxy, g_object_unref)\n' % (i.camel_name))
+                self.outfile.write('#endif\n')
+                self.outfile.write('\n')
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('void %s_proxy_new (\n'
-                         '    GDBusConnection     *connection,\n'
-                         '    GDBusProxyFlags      flags,\n'
-                         '    const gchar         *name,\n'
-                         '    const gchar         *object_path,\n'
-                         '    GCancellable        *cancellable,\n'
-                         '    GAsyncReadyCallback  callback,\n'
-                         '    gpointer             user_data);\n'
-                         %(i.name_lower))
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('void %s_proxy_new (\n'
+                               '    GDBusConnection     *connection,\n'
+                               '    GDBusProxyFlags      flags,\n'
+                               '    const gchar         *name,\n'
+                               '    const gchar         *object_path,\n'
+                               '    GCancellable        *cancellable,\n'
+                               '    GAsyncReadyCallback  callback,\n'
+                               '    gpointer             user_data);\n'
+                               %(i.name_lower))
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('%s *%s_proxy_new_finish (\n'
-                         '    GAsyncResult        *res,\n'
-                         '    GError             **error);\n'
-                         %(i.camel_name, i.name_lower))
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('%s *%s_proxy_new_finish (\n'
+                               '    GAsyncResult        *res,\n'
+                               '    GError             **error);\n'
+                               %(i.camel_name, i.name_lower))
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('%s *%s_proxy_new_sync (\n'
-                         '    GDBusConnection     *connection,\n'
-                         '    GDBusProxyFlags      flags,\n'
-                         '    const gchar         *name,\n'
-                         '    const gchar         *object_path,\n'
-                         '    GCancellable        *cancellable,\n'
-                         '    GError             **error);\n'
-                         %(i.camel_name, i.name_lower))
-            self.h.write('\n')
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('%s *%s_proxy_new_sync (\n'
+                               '    GDBusConnection     *connection,\n'
+                               '    GDBusProxyFlags      flags,\n'
+                               '    const gchar         *name,\n'
+                               '    const gchar         *object_path,\n'
+                               '    GCancellable        *cancellable,\n'
+                               '    GError             **error);\n'
+                               %(i.camel_name, i.name_lower))
+            self.outfile.write('\n')
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('void %s_proxy_new_for_bus (\n'
-                         '    GBusType             bus_type,\n'
-                         '    GDBusProxyFlags      flags,\n'
-                         '    const gchar         *name,\n'
-                         '    const gchar         *object_path,\n'
-                         '    GCancellable        *cancellable,\n'
-                         '    GAsyncReadyCallback  callback,\n'
-                         '    gpointer             user_data);\n'
-                         %(i.name_lower))
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('void %s_proxy_new_for_bus (\n'
+                               '    GBusType             bus_type,\n'
+                               '    GDBusProxyFlags      flags,\n'
+                               '    const gchar         *name,\n'
+                               '    const gchar         *object_path,\n'
+                               '    GCancellable        *cancellable,\n'
+                               '    GAsyncReadyCallback  callback,\n'
+                               '    gpointer             user_data);\n'
+                               %(i.name_lower))
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('%s *%s_proxy_new_for_bus_finish (\n'
-                         '    GAsyncResult        *res,\n'
-                         '    GError             **error);\n'
-                         %(i.camel_name, i.name_lower))
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('%s *%s_proxy_new_for_bus_finish (\n'
+                               '    GAsyncResult        *res,\n'
+                               '    GError             **error);\n'
+                               %(i.camel_name, i.name_lower))
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('%s *%s_proxy_new_for_bus_sync (\n'
-                         '    GBusType             bus_type,\n'
-                         '    GDBusProxyFlags      flags,\n'
-                         '    const gchar         *name,\n'
-                         '    const gchar         *object_path,\n'
-                         '    GCancellable        *cancellable,\n'
-                         '    GError             **error);\n'
-                         %(i.camel_name, i.name_lower))
-            self.h.write('\n')
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('%s *%s_proxy_new_for_bus_sync (\n'
+                               '    GBusType             bus_type,\n'
+                               '    GDBusProxyFlags      flags,\n'
+                               '    const gchar         *name,\n'
+                               '    const gchar         *object_path,\n'
+                               '    GCancellable        *cancellable,\n'
+                               '    GError             **error);\n'
+                               %(i.camel_name, i.name_lower))
+            self.outfile.write('\n')
 
             # Then the skeleton
-            self.h.write('\n')
-            self.h.write('/* ---- */\n')
-            self.h.write('\n')
-            self.h.write('#define %sTYPE_%s_SKELETON (%s_skeleton_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower))
-            self.h.write('#define %s%s_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s_SKELETON, %sSkeleton))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %s%s_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_%s_SKELETON, %sSkeletonClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %s%s_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_%s_SKELETON, %sSkeletonClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
-            self.h.write('#define %sIS_%s_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s_SKELETON))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
-            self.h.write('#define %sIS_%s_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_%s_SKELETON))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
-            self.h.write('\n')
-            self.h.write('typedef struct _%sSkeleton %sSkeleton;\n'%(i.camel_name, i.camel_name))
-            self.h.write('typedef struct _%sSkeletonClass %sSkeletonClass;\n'%(i.camel_name, i.camel_name))
-            self.h.write('typedef struct _%sSkeletonPrivate %sSkeletonPrivate;\n'%(i.camel_name, i.camel_name))
-            self.h.write('\n')
-            self.h.write('struct _%sSkeleton\n'%(i.camel_name))
-            self.h.write('{\n')
-            self.h.write('  /*< private >*/\n')
-            self.h.write('  GDBusInterfaceSkeleton parent_instance;\n')
-            self.h.write('  %sSkeletonPrivate *priv;\n'%(i.camel_name))
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('struct _%sSkeletonClass\n'%(i.camel_name))
-            self.h.write('{\n')
-            self.h.write('  GDBusInterfaceSkeletonClass parent_class;\n')
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('GType %s_skeleton_get_type (void) G_GNUC_CONST;\n'%(i.name_lower))
-            self.h.write('\n')
+            self.outfile.write('\n')
+            self.outfile.write('/* ---- */\n')
+            self.outfile.write('\n')
+            self.outfile.write('#define %sTYPE_%s_SKELETON (%s_skeleton_get_type ())\n'%(i.ns_upper, i.name_upper, i.name_lower))
+            self.outfile.write('#define %s%s_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_%s_SKELETON, %sSkeleton))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %s%s_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_%s_SKELETON, %sSkeletonClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %s%s_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_%s_SKELETON, %sSkeletonClass))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper, i.camel_name))
+            self.outfile.write('#define %sIS_%s_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_%s_SKELETON))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
+            self.outfile.write('#define %sIS_%s_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_%s_SKELETON))\n'%(i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
+            self.outfile.write('\n')
+            self.outfile.write('typedef struct _%sSkeleton %sSkeleton;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('typedef struct _%sSkeletonClass %sSkeletonClass;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('typedef struct _%sSkeletonPrivate %sSkeletonPrivate;\n'%(i.camel_name, i.camel_name))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sSkeleton\n'%(i.camel_name))
+            self.outfile.write('{\n')
+            self.outfile.write('  /*< private >*/\n')
+            self.outfile.write('  GDBusInterfaceSkeleton parent_instance;\n')
+            self.outfile.write('  %sSkeletonPrivate *priv;\n'%(i.camel_name))
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sSkeletonClass\n'%(i.camel_name))
+            self.outfile.write('{\n')
+            self.outfile.write('  GDBusInterfaceSkeletonClass parent_class;\n')
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('GType %s_skeleton_get_type (void) G_GNUC_CONST;\n'%(i.name_lower))
+            self.outfile.write('\n')
             if self.generate_autocleanup in ('objects', 'all'):
-                self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
-                self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sSkeleton, g_object_unref)\n' % (i.camel_name))
-                self.h.write('#endif\n')
-                self.h.write('\n')
+                self.outfile.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
+                self.outfile.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sSkeleton, g_object_unref)\n' % (i.camel_name))
+                self.outfile.write('#endif\n')
+                self.outfile.write('\n')
             if i.deprecated:
-                self.h.write('G_GNUC_DEPRECATED ')
-            self.h.write('%s *%s_skeleton_new (void);\n'%(i.camel_name, i.name_lower))
+                self.outfile.write('G_GNUC_DEPRECATED ')
+            self.outfile.write('%s *%s_skeleton_new (void);\n'%(i.camel_name, i.name_lower))
 
-            self.h.write('\n')
+            self.outfile.write('\n')
 
         # Finally, the Object, ObjectProxy, ObjectSkeleton and ObjectManagerClient
         if self.generate_objmanager:
-            self.h.write('\n')
-            self.h.write('/* ---- */\n')
-            self.h.write('\n')
-            self.h.write('#define %sTYPE_OBJECT (%sobject_get_type ())\n'%(self.ns_upper, self.ns_lower))
-            self.h.write('#define %sOBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT, %sObject))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sIS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('#define %sOBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), %sTYPE_OBJECT, %sObject))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('\n')
-            self.h.write('struct _%sObject;\n'%(self.namespace))
-            self.h.write('typedef struct _%sObject %sObject;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectIface %sObjectIface;\n'%(self.namespace, self.namespace))
-            self.h.write('\n')
-            self.h.write('struct _%sObjectIface\n'%(self.namespace))
-            self.h.write('{\n'
-                         '  GTypeInterface parent_iface;\n'
-                         '};\n'
-                         '\n')
-            self.h.write('GType %sobject_get_type (void) G_GNUC_CONST;\n'
-                         '\n'
-                         %(self.ns_lower))
+            self.outfile.write('\n')
+            self.outfile.write('/* ---- */\n')
+            self.outfile.write('\n')
+            self.outfile.write('#define %sTYPE_OBJECT (%sobject_get_type ())\n'%(self.ns_upper, self.ns_lower))
+            self.outfile.write('#define %sOBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT, %sObject))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sIS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('#define %sOBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), %sTYPE_OBJECT, %sObject))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObject;\n'%(self.namespace))
+            self.outfile.write('typedef struct _%sObject %sObject;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectIface %sObjectIface;\n'%(self.namespace, self.namespace))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectIface\n'%(self.namespace))
+            self.outfile.write('{\n'
+                               '  GTypeInterface parent_iface;\n'
+                               '};\n'
+                               '\n')
+            self.outfile.write('GType %sobject_get_type (void) G_GNUC_CONST;\n'
+                               '\n'
+                               %(self.ns_lower))
             for i in self.ifaces:
                 if i.deprecated:
-                    self.h.write('G_GNUC_DEPRECATED ')
-                self.h.write ('%s *%sobject_get_%s (%sObject *object);\n'
-                              %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
+                    self.outfile.write('G_GNUC_DEPRECATED ')
+                self.outfile.write('%s *%sobject_get_%s (%sObject *object);\n'
+                                   %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
             for i in self.ifaces:
                 if i.deprecated:
-                    self.h.write('G_GNUC_DEPRECATED ')
-                self.h.write ('%s *%sobject_peek_%s (%sObject *object);\n'
-                              %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
-            self.h.write('\n')
-            self.h.write('#define %sTYPE_OBJECT_PROXY (%sobject_proxy_get_type ())\n'%(self.ns_upper, self.ns_lower))
-            self.h.write('#define %sOBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_PROXY, %sObjectProxy))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sOBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_PROXY, %sObjectProxyClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sOBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_PROXY, %sObjectProxyClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sIS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_PROXY))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('#define %sIS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_PROXY))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('\n')
-            self.h.write('typedef struct _%sObjectProxy %sObjectProxy;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectProxyClass %sObjectProxyClass;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectProxyPrivate %sObjectProxyPrivate;\n'%(self.namespace, self.namespace))
-            self.h.write('\n')
-            self.h.write('struct _%sObjectProxy\n'%(self.namespace))
-            self.h.write('{\n')
-            self.h.write('  /*< private >*/\n')
-            self.h.write('  GDBusObjectProxy parent_instance;\n')
-            self.h.write('  %sObjectProxyPrivate *priv;\n'%(self.namespace))
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('struct _%sObjectProxyClass\n'%(self.namespace))
-            self.h.write('{\n')
-            self.h.write('  GDBusObjectProxyClass parent_class;\n')
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('GType %sobject_proxy_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower))
-            self.h.write('\n')
+                    self.outfile.write('G_GNUC_DEPRECATED ')
+                self.outfile.write('%s *%sobject_peek_%s (%sObject *object);\n'
+                                   %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
+            self.outfile.write('\n')
+            self.outfile.write('#define %sTYPE_OBJECT_PROXY (%sobject_proxy_get_type ())\n'%(self.ns_upper, self.ns_lower))
+            self.outfile.write('#define %sOBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_PROXY, %sObjectProxy))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sOBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_PROXY, %sObjectProxyClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sOBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_PROXY, %sObjectProxyClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sIS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_PROXY))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('#define %sIS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_PROXY))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('\n')
+            self.outfile.write('typedef struct _%sObjectProxy %sObjectProxy;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectProxyClass %sObjectProxyClass;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectProxyPrivate %sObjectProxyPrivate;\n'%(self.namespace, self.namespace))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectProxy\n'%(self.namespace))
+            self.outfile.write('{\n')
+            self.outfile.write('  /*< private >*/\n')
+            self.outfile.write('  GDBusObjectProxy parent_instance;\n')
+            self.outfile.write('  %sObjectProxyPrivate *priv;\n'%(self.namespace))
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectProxyClass\n'%(self.namespace))
+            self.outfile.write('{\n')
+            self.outfile.write('  GDBusObjectProxyClass parent_class;\n')
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('GType %sobject_proxy_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower))
+            self.outfile.write('\n')
             if self.generate_autocleanup in ('objects', 'all'):
-                self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
-                self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectProxy, g_object_unref)\n' % (self.namespace))
-                self.h.write('#endif\n')
-                self.h.write('\n')
-            self.h.write('%sObjectProxy *%sobject_proxy_new (GDBusConnection *connection, const gchar *object_path);\n'%(self.namespace, self.ns_lower))
-            self.h.write('\n')
-            self.h.write('#define %sTYPE_OBJECT_SKELETON (%sobject_skeleton_get_type ())\n'%(self.ns_upper, self.ns_lower))
-            self.h.write('#define %sOBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_SKELETON, %sObjectSkeleton))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sOBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_SKELETON, %sObjectSkeletonClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sOBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_SKELETON, %sObjectSkeletonClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sIS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_SKELETON))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('#define %sIS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_SKELETON))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('\n')
-            self.h.write('typedef struct _%sObjectSkeleton %sObjectSkeleton;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectSkeletonClass %sObjectSkeletonClass;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectSkeletonPrivate %sObjectSkeletonPrivate;\n'%(self.namespace, self.namespace))
-            self.h.write('\n')
-            self.h.write('struct _%sObjectSkeleton\n'%(self.namespace))
-            self.h.write('{\n')
-            self.h.write('  /*< private >*/\n')
-            self.h.write('  GDBusObjectSkeleton parent_instance;\n')
-            self.h.write('  %sObjectSkeletonPrivate *priv;\n'%(self.namespace))
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('struct _%sObjectSkeletonClass\n'%(self.namespace))
-            self.h.write('{\n')
-            self.h.write('  GDBusObjectSkeletonClass parent_class;\n')
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('GType %sobject_skeleton_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower))
-            self.h.write('\n')
+                self.outfile.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
+                self.outfile.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectProxy, g_object_unref)\n' % (self.namespace))
+                self.outfile.write('#endif\n')
+                self.outfile.write('\n')
+            self.outfile.write('%sObjectProxy *%sobject_proxy_new (GDBusConnection *connection, const gchar *object_path);\n'%(self.namespace, self.ns_lower))
+            self.outfile.write('\n')
+            self.outfile.write('#define %sTYPE_OBJECT_SKELETON (%sobject_skeleton_get_type ())\n'%(self.ns_upper, self.ns_lower))
+            self.outfile.write('#define %sOBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_SKELETON, %sObjectSkeleton))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sOBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_SKELETON, %sObjectSkeletonClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sOBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_SKELETON, %sObjectSkeletonClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sIS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_SKELETON))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('#define %sIS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_SKELETON))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('\n')
+            self.outfile.write('typedef struct _%sObjectSkeleton %sObjectSkeleton;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectSkeletonClass %sObjectSkeletonClass;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectSkeletonPrivate %sObjectSkeletonPrivate;\n'%(self.namespace, self.namespace))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectSkeleton\n'%(self.namespace))
+            self.outfile.write('{\n')
+            self.outfile.write('  /*< private >*/\n')
+            self.outfile.write('  GDBusObjectSkeleton parent_instance;\n')
+            self.outfile.write('  %sObjectSkeletonPrivate *priv;\n'%(self.namespace))
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectSkeletonClass\n'%(self.namespace))
+            self.outfile.write('{\n')
+            self.outfile.write('  GDBusObjectSkeletonClass parent_class;\n')
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('GType %sobject_skeleton_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower))
+            self.outfile.write('\n')
             if self.generate_autocleanup in ('objects', 'all'):
-                self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
-                self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectSkeleton, g_object_unref)\n' % (self.namespace))
-                self.h.write('#endif\n')
-                self.h.write('\n')
-            self.h.write('%sObjectSkeleton *%sobject_skeleton_new (const gchar *object_path);\n'
-                         %(self.namespace, self.ns_lower))
+                self.outfile.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
+                self.outfile.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectSkeleton, g_object_unref)\n' % (self.namespace))
+                self.outfile.write('#endif\n')
+                self.outfile.write('\n')
+            self.outfile.write('%sObjectSkeleton *%sobject_skeleton_new (const gchar *object_path);\n'
+                               %(self.namespace, self.ns_lower))
             for i in self.ifaces:
                 if i.deprecated:
-                    self.h.write('G_GNUC_DEPRECATED ')
-                self.h.write ('void %sobject_skeleton_set_%s (%sObjectSkeleton *object, %s *interface_);\n'
-                              %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name))
-            self.h.write('\n')
-
-            self.h.write('/* ---- */\n')
-            self.h.write('\n')
-            self.h.write('#define %sTYPE_OBJECT_MANAGER_CLIENT (%sobject_manager_client_get_type ())\n'%(self.ns_upper, self.ns_lower))
-            self.h.write('#define %sOBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClient))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sOBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClientClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sOBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClientClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
-            self.h.write('#define %sIS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_MANAGER_CLIENT))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('#define %sIS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_MANAGER_CLIENT))\n'%(self.ns_upper, self.ns_upper))
-            self.h.write('\n')
-            self.h.write('typedef struct _%sObjectManagerClient %sObjectManagerClient;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectManagerClientClass %sObjectManagerClientClass;\n'%(self.namespace, self.namespace))
-            self.h.write('typedef struct _%sObjectManagerClientPrivate %sObjectManagerClientPrivate;\n'%(self.namespace, self.namespace))
-            self.h.write('\n')
-            self.h.write('struct _%sObjectManagerClient\n'%(self.namespace))
-            self.h.write('{\n')
-            self.h.write('  /*< private >*/\n')
-            self.h.write('  GDBusObjectManagerClient parent_instance;\n')
-            self.h.write('  %sObjectManagerClientPrivate *priv;\n'%(self.namespace))
-            self.h.write('};\n')
-            self.h.write('\n')
-            self.h.write('struct _%sObjectManagerClientClass\n'%(self.namespace))
-            self.h.write('{\n')
-            self.h.write('  GDBusObjectManagerClientClass parent_class;\n')
-            self.h.write('};\n')
-            self.h.write('\n')
+                    self.outfile.write('G_GNUC_DEPRECATED ')
+                self.outfile.write('void %sobject_skeleton_set_%s (%sObjectSkeleton *object, %s *interface_);\n'
+                                   %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name))
+            self.outfile.write('\n')
+
+            self.outfile.write('/* ---- */\n')
+            self.outfile.write('\n')
+            self.outfile.write('#define %sTYPE_OBJECT_MANAGER_CLIENT (%sobject_manager_client_get_type ())\n'%(self.ns_upper, self.ns_lower))
+            self.outfile.write('#define %sOBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClient))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sOBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClientClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sOBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), %sTYPE_OBJECT_MANAGER_CLIENT, %sObjectManagerClientClass))\n'%(self.ns_upper, self.ns_upper, self.namespace))
+            self.outfile.write('#define %sIS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), %sTYPE_OBJECT_MANAGER_CLIENT))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('#define %sIS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), %sTYPE_OBJECT_MANAGER_CLIENT))\n'%(self.ns_upper, self.ns_upper))
+            self.outfile.write('\n')
+            self.outfile.write('typedef struct _%sObjectManagerClient %sObjectManagerClient;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectManagerClientClass %sObjectManagerClientClass;\n'%(self.namespace, self.namespace))
+            self.outfile.write('typedef struct _%sObjectManagerClientPrivate %sObjectManagerClientPrivate;\n'%(self.namespace, self.namespace))
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectManagerClient\n'%(self.namespace))
+            self.outfile.write('{\n')
+            self.outfile.write('  /*< private >*/\n')
+            self.outfile.write('  GDBusObjectManagerClient parent_instance;\n')
+            self.outfile.write('  %sObjectManagerClientPrivate *priv;\n'%(self.namespace))
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
+            self.outfile.write('struct _%sObjectManagerClientClass\n'%(self.namespace))
+            self.outfile.write('{\n')
+            self.outfile.write('  GDBusObjectManagerClientClass parent_class;\n')
+            self.outfile.write('};\n')
+            self.outfile.write('\n')
             if self.generate_autocleanup in ('objects', 'all'):
-                self.h.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
-                self.h.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectManagerClient, g_object_unref)\n' % (self.namespace))
-                self.h.write('#endif\n')
-                self.h.write('\n')
-            self.h.write('GType %sobject_manager_client_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower))
-            self.h.write('\n')
-            self.h.write('GType %sobject_manager_client_get_proxy_type (GDBusObjectManagerClient *manager, const gchar *object_path, const gchar *interface_name, gpointer user_data);\n'%(self.ns_lower))
-            self.h.write('\n')
-            self.h.write('void %sobject_manager_client_new (\n'
-                         '    GDBusConnection        *connection,\n'
-                         '    GDBusObjectManagerClientFlags  flags,\n'
-                         '    const gchar            *name,\n'
-                         '    const gchar            *object_path,\n'
-                         '    GCancellable           *cancellable,\n'
-                         '    GAsyncReadyCallback     callback,\n'
-                         '    gpointer                user_data);\n'
-                         %(self.ns_lower))
-            self.h.write('GDBusObjectManager *%sobject_manager_client_new_finish (\n'
-                         '    GAsyncResult        *res,\n'
-                         '    GError             **error);\n'
-                         %(self.ns_lower))
-            self.h.write('GDBusObjectManager *%sobject_manager_client_new_sync (\n'
-                         '    GDBusConnection        *connection,\n'
-                         '    GDBusObjectManagerClientFlags  flags,\n'
-                         '    const gchar            *name,\n'
-                         '    const gchar            *object_path,\n'
-                         '    GCancellable           *cancellable,\n'
-                         '    GError                **error);\n'
-                         %(self.ns_lower))
-            self.h.write('\n')
-            self.h.write('void %sobject_manager_client_new_for_bus (\n'
-                         '    GBusType                bus_type,\n'
-                         '    GDBusObjectManagerClientFlags  flags,\n'
-                         '    const gchar            *name,\n'
-                         '    const gchar            *object_path,\n'
-                         '    GCancellable           *cancellable,\n'
-                         '    GAsyncReadyCallback     callback,\n'
-                         '    gpointer                user_data);\n'
-                         %(self.ns_lower))
-            self.h.write('GDBusObjectManager *%sobject_manager_client_new_for_bus_finish (\n'
-                         '    GAsyncResult        *res,\n'
-                         '    GError             **error);\n'
-                         %(self.ns_lower))
-            self.h.write('GDBusObjectManager *%sobject_manager_client_new_for_bus_sync (\n'
-                         '    GBusType                bus_type,\n'
-                         '    GDBusObjectManagerClientFlags  flags,\n'
-                         '    const gchar            *name,\n'
-                         '    const gchar            *object_path,\n'
-                         '    GCancellable           *cancellable,\n'
-                         '    GError                **error);\n'
-                         %(self.ns_lower))
-            self.h.write('\n')
+                self.outfile.write('#if GLIB_CHECK_VERSION(2, 44, 0)\n')
+                self.outfile.write('G_DEFINE_AUTOPTR_CLEANUP_FUNC (%sObjectManagerClient, g_object_unref)\n' % (self.namespace))
+                self.outfile.write('#endif\n')
+                self.outfile.write('\n')
+            self.outfile.write('GType %sobject_manager_client_get_type (void) G_GNUC_CONST;\n'%(self.ns_lower))
+            self.outfile.write('\n')
+            self.outfile.write('GType %sobject_manager_client_get_proxy_type (GDBusObjectManagerClient *manager, const gchar *object_path, const gchar *interface_name, gpointer user_data);\n'%(self.ns_lower))
+            self.outfile.write('\n')
+            self.outfile.write('void %sobject_manager_client_new (\n'
+                               '    GDBusConnection        *connection,\n'
+                               '    GDBusObjectManagerClientFlags  flags,\n'
+                               '    const gchar            *name,\n'
+                               '    const gchar            *object_path,\n'
+                               '    GCancellable           *cancellable,\n'
+                               '    GAsyncReadyCallback     callback,\n'
+                               '    gpointer                user_data);\n'
+                               %(self.ns_lower))
+            self.outfile.write('GDBusObjectManager *%sobject_manager_client_new_finish (\n'
+                               '    GAsyncResult        *res,\n'
+                               '    GError             **error);\n'
+                               %(self.ns_lower))
+            self.outfile.write('GDBusObjectManager *%sobject_manager_client_new_sync (\n'
+                               '    GDBusConnection        *connection,\n'
+                               '    GDBusObjectManagerClientFlags  flags,\n'
+                               '    const gchar            *name,\n'
+                               '    const gchar            *object_path,\n'
+                               '    GCancellable           *cancellable,\n'
+                               '    GError                **error);\n'
+                               %(self.ns_lower))
+            self.outfile.write('\n')
+            self.outfile.write('void %sobject_manager_client_new_for_bus (\n'
+                               '    GBusType                bus_type,\n'
+                               '    GDBusObjectManagerClientFlags  flags,\n'
+                               '    const gchar            *name,\n'
+                               '    const gchar            *object_path,\n'
+                               '    GCancellable           *cancellable,\n'
+                               '    GAsyncReadyCallback     callback,\n'
+                               '    gpointer                user_data);\n'
+                               %(self.ns_lower))
+            self.outfile.write('GDBusObjectManager *%sobject_manager_client_new_for_bus_finish (\n'
+                               '    GAsyncResult        *res,\n'
+                               '    GError             **error);\n'
+                               %(self.ns_lower))
+            self.outfile.write('GDBusObjectManager *%sobject_manager_client_new_for_bus_sync (\n'
+                               '    GBusType                bus_type,\n'
+                               '    GDBusObjectManagerClientFlags  flags,\n'
+                               '    const gchar            *name,\n'
+                               '    const gchar            *object_path,\n'
+                               '    GCancellable           *cancellable,\n'
+                               '    GError                **error);\n'
+                               %(self.ns_lower))
+            self.outfile.write('\n')
 
     # ----------------------------------------------------------------------------------------------------
 
-    def generate_outro(self):
-        self.h.write('\n'
-                     'G_END_DECLS\n'
-                     '\n'
-                     '#endif /* __%s__ */\n'%(self.header_guard))
+    def generate_header_postamble(self):
+        self.outfile.write('\n')
+        self.outfile.write('G_END_DECLS\n')
+
+        if not self.use_pragma:
+            self.outfile.write('\n')
+            self.outfile.write('#endif /* __{!s}__ */\n'.format(self.header_guard))
+
+    # ----------------------------------------------------------------------------------------------------
+
+    def generate(self):
+        self.generate_header_preamble()
+        self.declare_types()
+        self.generate_header_postamble()
+
+# ----------------------------------------------------------------------------------------------------
+
+class CodeGenerator:
+    def __init__(self, ifaces, namespace, generate_objmanager, header_name,
+                 docbook_gen, outfile):
+        self.ifaces = ifaces
+        self.namespace, self.ns_upper, self.ns_lower = generate_namespace(namespace)
+        self.generate_objmanager = generate_objmanager
+        self.header_name = header_name
+        self.docbook_gen = docbook_gen
+        self.outfile = outfile
 
     # ----------------------------------------------------------------------------------------------------
 
+    def generate_body_preamble(self):
+        self.outfile.write(LICENSE_STR.format(config.VERSION))
+        self.outfile.write('\n')
+        self.outfile.write('#ifdef HAVE_CONFIG_H\n'
+                           '#  include "config.h"\n'
+                           '#endif\n'
+                           '\n'
+                           '#include "%s"\n'
+                           '\n'
+                           '#include <string.h>\n'
+                           %(self.header_name))
+
+        self.outfile.write('#ifdef G_OS_UNIX\n'
+                           '#  include <gio/gunixfdlist.h>\n'
+                           '#endif\n'
+                           '\n')
+
+        self.outfile.write('typedef struct\n'
+                           '{\n'
+                           '  GDBusArgInfo parent_struct;\n'
+                           '  gboolean use_gvariant;\n'
+                           '} _ExtendedGDBusArgInfo;\n'
+                           '\n')
+
+        self.outfile.write('typedef struct\n'
+                           '{\n'
+                           '  GDBusMethodInfo parent_struct;\n'
+                           '  const gchar *signal_name;\n'
+                           '  gboolean pass_fdlist;\n'
+                           '} _ExtendedGDBusMethodInfo;\n'
+                           '\n')
+
+        self.outfile.write('typedef struct\n'
+                           '{\n'
+                           '  GDBusSignalInfo parent_struct;\n'
+                           '  const gchar *signal_name;\n'
+                           '} _ExtendedGDBusSignalInfo;\n'
+                           '\n')
+
+        self.outfile.write('typedef struct\n'
+                           '{\n'
+                           '  GDBusPropertyInfo parent_struct;\n'
+                           '  const gchar *hyphen_name;\n'
+                           '  gboolean use_gvariant;\n'
+                           '} _ExtendedGDBusPropertyInfo;\n'
+                           '\n')
+
+        self.outfile.write('typedef struct\n'
+                           '{\n'
+                           '  GDBusInterfaceInfo parent_struct;\n'
+                           '  const gchar *hyphen_name;\n'
+                           '} _ExtendedGDBusInterfaceInfo;\n'
+                           '\n')
+
+        self.outfile.write('typedef struct\n'
+                           '{\n'
+                           '  const _ExtendedGDBusPropertyInfo *info;\n'
+                           '  guint prop_id;\n'
+                           '  GValue orig_value; /* the value before the change */\n'
+                           '} ChangedProperty;\n'
+                           '\n'
+                           'static void\n'
+                           '_changed_property_free (ChangedProperty *data)\n'
+                           '{\n'
+                           '  g_value_unset (&data->orig_value);\n'
+                           '  g_free (data);\n'
+                           '}\n'
+                           '\n')
+
+        self.outfile.write('static gboolean\n'
+                           '_g_strv_equal0 (gchar **a, gchar **b)\n'
+                           '{\n'
+                           '  gboolean ret = FALSE;\n'
+                           '  guint n;\n'
+                           '  if (a == NULL && b == NULL)\n'
+                           '    {\n'
+                           '      ret = TRUE;\n'
+                           '      goto out;\n'
+                           '    }\n'
+                           '  if (a == NULL || b == NULL)\n'
+                           '    goto out;\n'
+                           '  if (g_strv_length (a) != g_strv_length (b))\n'
+                           '    goto out;\n'
+                           '  for (n = 0; a[n] != NULL; n++)\n'
+                           '    if (g_strcmp0 (a[n], b[n]) != 0)\n'
+                           '      goto out;\n'
+                           '  ret = TRUE;\n'
+                           'out:\n'
+                           '  return ret;\n'
+                           '}\n'
+                           '\n')
+
+        self.outfile.write('static gboolean\n'
+                           '_g_variant_equal0 (GVariant *a, GVariant *b)\n'
+                           '{\n'
+                           '  gboolean ret = FALSE;\n'
+                           '  if (a == NULL && b == NULL)\n'
+                           '    {\n'
+                           '      ret = TRUE;\n'
+                           '      goto out;\n'
+                           '    }\n'
+                           '  if (a == NULL || b == NULL)\n'
+                           '    goto out;\n'
+                           '  ret = g_variant_equal (a, b);\n'
+                           'out:\n'
+                           '  return ret;\n'
+                           '}\n'
+                           '\n')
+
+        # simplified - only supports the types we use
+        self.outfile.write('G_GNUC_UNUSED static gboolean\n'
+                           '_g_value_equal (const GValue *a, const GValue *b)\n'
+                           '{\n'
+                           '  gboolean ret = FALSE;\n'
+                           '  g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));\n'
+                           '  switch (G_VALUE_TYPE (a))\n'
+                           '    {\n'
+                           '      case G_TYPE_BOOLEAN:\n'
+                           '        ret = (g_value_get_boolean (a) == g_value_get_boolean (b));\n'
+                           '        break;\n'
+                           '      case G_TYPE_UCHAR:\n'
+                           '        ret = (g_value_get_uchar (a) == g_value_get_uchar (b));\n'
+                           '        break;\n'
+                           '      case G_TYPE_INT:\n'
+                           '        ret = (g_value_get_int (a) == g_value_get_int (b));\n'
+                           '        break;\n'
+                           '      case G_TYPE_UINT:\n'
+                           '        ret = (g_value_get_uint (a) == g_value_get_uint (b));\n'
+                           '        break;\n'
+                           '      case G_TYPE_INT64:\n'
+                           '        ret = (g_value_get_int64 (a) == g_value_get_int64 (b));\n'
+                           '        break;\n'
+                           '      case G_TYPE_UINT64:\n'
+                           '        ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));\n'
+                           '        break;\n'
+                           '      case G_TYPE_DOUBLE:\n'
+                           '        {\n'
+                           '          /* Avoid -Wfloat-equal warnings by doing a direct bit compare */\n'
+                           '          gdouble da = g_value_get_double (a);\n'
+                           '          gdouble db = g_value_get_double (b);\n'
+                           '          ret = memcmp (&da, &db, sizeof (gdouble)) == 0;\n'
+                           '        }\n'
+                           '        break;\n'
+                           '      case G_TYPE_STRING:\n'
+                           '        ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);\n'
+                           '        break;\n'
+                           '      case G_TYPE_VARIANT:\n'
+                           '        ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));\n'
+                           '        break;\n'
+                           '      default:\n'
+                           '        if (G_VALUE_TYPE (a) == G_TYPE_STRV)\n'
+                           '          ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));\n'
+                           '        else\n'
+                           '          g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));\n'
+                           '        break;\n'
+                           '    }\n'
+                           '  return ret;\n'
+                           '}\n'
+                           '\n')
+
     def generate_annotations(self, prefix, annotations):
         if annotations == None:
             return
@@ -768,67 +794,67 @@ class CodeGenerator:
             if a.key.startswith('org.gtk.GDBus'):
                 continue
 
-            self.c.write('static const GDBusAnnotationInfo %s_%d =\n'
-                         '{\n'
-                         '  -1,\n'
-                         '  (gchar *) "%s",\n'
-                         '  (gchar *) "%s",\n'%(prefix, n, a.key, a.value))
+            self.outfile.write('static const GDBusAnnotationInfo %s_%d =\n'
+                               '{\n'
+                               '  -1,\n'
+                               '  (gchar *) "%s",\n'
+                               '  (gchar *) "%s",\n'%(prefix, n, a.key, a.value))
             if len(a.annotations) == 0:
-                self.c.write('  NULL\n')
+                self.outfile.write('  NULL\n')
             else:
-                self.c.write('  (GDBusAnnotationInfo **) &%s_%d_pointers\n'%(prefix, n))
-            self.c.write('};\n'
-                         '\n')
+                self.outfile.write('  (GDBusAnnotationInfo **) &%s_%d_pointers\n'%(prefix, n))
+            self.outfile.write('};\n'
+                               '\n')
             n += 1
 
         if n > 0:
-            self.c.write('static const GDBusAnnotationInfo * const %s_pointers[] =\n'
-                             '{\n'%(prefix))
+            self.outfile.write('static const GDBusAnnotationInfo * const %s_pointers[] =\n'
+                               '{\n'%(prefix))
             m = 0;
             for a in annotations:
                 if a.key.startswith('org.gtk.GDBus'):
                     continue
-                self.c.write('  &%s_%d,\n'%(prefix, m))
+                self.outfile.write('  &%s_%d,\n'%(prefix, m))
                 m += 1
-            self.c.write('  NULL\n'
-                         '};\n'
-                         '\n')
+            self.outfile.write('  NULL\n'
+                               '};\n'
+                               '\n')
         return n
 
     def generate_args(self, prefix, args):
         for a in args:
             num_anno = self.generate_annotations('%s_arg_%s_annotation_info'%(prefix, a.name), a.annotations)
 
-            self.c.write('static const _ExtendedGDBusArgInfo %s_%s =\n'
-                         '{\n'
-                         '  {\n'
-                         '    -1,\n'
-                         '    (gchar *) "%s",\n'
-                         '    (gchar *) "%s",\n'%(prefix, a.name, a.name, a.signature))
+            self.outfile.write('static const _ExtendedGDBusArgInfo %s_%s =\n'
+                               '{\n'
+                               '  {\n'
+                               '    -1,\n'
+                               '    (gchar *) "%s",\n'
+                               '    (gchar *) "%s",\n'%(prefix, a.name, a.name, a.signature))
             if num_anno == 0:
-                self.c.write('    NULL\n')
+                self.outfile.write('    NULL\n')
             else:
-                self.c.write('    (GDBusAnnotationInfo **) &%s_arg_%s_annotation_info_pointers\n'%(prefix, a.name))
-            self.c.write('  },\n')
+                self.outfile.write('    (GDBusAnnotationInfo **) &%s_arg_%s_annotation_info_pointers\n'%(prefix, a.name))
+            self.outfile.write('  },\n')
             if not utils.lookup_annotation(a.annotations, 'org.gtk.GDBus.C.ForceGVariant'):
-                self.c.write('  FALSE\n')
+                self.outfile.write('  FALSE\n')
             else:
-                self.c.write('  TRUE\n')
-            self.c.write('};\n'
-                         '\n')
+                self.outfile.write('  TRUE\n')
+            self.outfile.write('};\n'
+                               '\n')
 
         if len(args) > 0:
-            self.c.write('static const _ExtendedGDBusArgInfo * const %s_pointers[] =\n'
+            self.outfile.write('static const _ExtendedGDBusArgInfo * const %s_pointers[] =\n'
                              '{\n'%(prefix))
             for a in args:
-                self.c.write('  &%s_%s,\n'%(prefix, a.name))
-            self.c.write('  NULL\n'
-                         '};\n'
-                         '\n')
+                self.outfile.write('  &%s_%s,\n'%(prefix, a.name))
+            self.outfile.write('  NULL\n'
+                               '};\n'
+                               '\n')
 
     def generate_introspection_for_interface(self, i):
-            self.c.write('/* ---- Introspection data for %s ---- */\n'
-                         '\n'%(i.name))
+            self.outfile.write('/* ---- Introspection data for %s ---- */\n'
+                               '\n'%(i.name))
 
             if len(i.methods) > 0:
                 for m in i.methods:
@@ -840,37 +866,37 @@ class CodeGenerator:
 
                     num_anno = self.generate_annotations('_%s_method_%s_annotation_info'%(i.name_lower, m.name_lower), m.annotations)
 
-                    self.c.write('static const _ExtendedGDBusMethodInfo _%s_method_info_%s =\n'
-                                 '{\n'
-                                 '  {\n'
-                                 '    -1,\n'
-                                 '    (gchar *) "%s",\n'%(i.name_lower, m.name_lower, m.name))
+                    self.outfile.write('static const _ExtendedGDBusMethodInfo _%s_method_info_%s =\n'
+                                       '{\n'
+                                       '  {\n'
+                                       '    -1,\n'
+                                       '    (gchar *) "%s",\n'%(i.name_lower, m.name_lower, m.name))
                     if len(m.in_args) == 0:
-                        self.c.write('    NULL,\n')
+                        self.outfile.write('    NULL,\n')
                     else:
-                        self.c.write('    (GDBusArgInfo **) &_%s_method_info_%s_IN_ARG_pointers,\n'%(i.name_lower, m.name_lower))
+                        self.outfile.write('    (GDBusArgInfo **) &_%s_method_info_%s_IN_ARG_pointers,\n'%(i.name_lower, m.name_lower))
                     if len(m.out_args) == 0:
-                        self.c.write('    NULL,\n')
+                        self.outfile.write('    NULL,\n')
                     else:
-                        self.c.write('    (GDBusArgInfo **) &_%s_method_info_%s_OUT_ARG_pointers,\n'%(i.name_lower, m.name_lower))
+                        self.outfile.write('    (GDBusArgInfo **) &_%s_method_info_%s_OUT_ARG_pointers,\n'%(i.name_lower, m.name_lower))
                     if num_anno == 0:
-                        self.c.write('    NULL\n')
+                        self.outfile.write('    NULL\n')
                     else:
-                        self.c.write('    (GDBusAnnotationInfo **) &_%s_method_%s_annotation_info_pointers\n'%(i.name_lower, m.name_lower))
-                    self.c.write('  },\n'
-                                 '  "handle-%s",\n'
-                                 '  %s\n'
-                                 %(m.name_hyphen, 'TRUE' if unix_fd else 'FALSE'))
-                    self.c.write('};\n'
-                                 '\n')
-
-                self.c.write('static const _ExtendedGDBusMethodInfo * const _%s_method_info_pointers[] =\n'
-                             '{\n'%(i.name_lower))
+                        self.outfile.write('    (GDBusAnnotationInfo **) &_%s_method_%s_annotation_info_pointers\n'%(i.name_lower, m.name_lower))
+                    self.outfile.write('  },\n'
+                                       '  "handle-%s",\n'
+                                       '  %s\n'
+                                       %(m.name_hyphen, 'TRUE' if unix_fd else 'FALSE'))
+                    self.outfile.write('};\n'
+                                       '\n')
+
+                self.outfile.write('static const _ExtendedGDBusMethodInfo * const _%s_method_info_pointers[] =\n'
+                                   '{\n'%(i.name_lower))
                 for m in i.methods:
-                    self.c.write('  &_%s_method_info_%s,\n'%(i.name_lower, m.name_lower))
-                self.c.write('  NULL\n'
-                             '};\n'
-                             '\n')
+                    self.outfile.write('  &_%s_method_info_%s,\n'%(i.name_lower, m.name_lower))
+                self.outfile.write('  NULL\n'
+                                   '};\n'
+                                   '\n')
 
             # ---
 
@@ -879,32 +905,32 @@ class CodeGenerator:
                     self.generate_args('_%s_signal_info_%s_ARG'%(i.name_lower, s.name_lower), s.args)
 
                     num_anno = self.generate_annotations('_%s_signal_%s_annotation_info'%(i.name_lower, s.name_lower), s.annotations)
-                    self.c.write('static const _ExtendedGDBusSignalInfo _%s_signal_info_%s =\n'
-                                 '{\n'
-                                 '  {\n'
-                                 '    -1,\n'
-                                 '    (gchar *) "%s",\n'%(i.name_lower, s.name_lower, s.name))
+                    self.outfile.write('static const _ExtendedGDBusSignalInfo _%s_signal_info_%s =\n'
+                                       '{\n'
+                                       '  {\n'
+                                       '    -1,\n'
+                                       '    (gchar *) "%s",\n'%(i.name_lower, s.name_lower, s.name))
                     if len(s.args) == 0:
-                        self.c.write('    NULL,\n')
+                        self.outfile.write('    NULL,\n')
                     else:
-                        self.c.write('    (GDBusArgInfo **) &_%s_signal_info_%s_ARG_pointers,\n'%(i.name_lower, s.name_lower))
+                        self.outfile.write('    (GDBusArgInfo **) &_%s_signal_info_%s_ARG_pointers,\n'%(i.name_lower, s.name_lower))
                     if num_anno == 0:
-                        self.c.write('    NULL\n')
+                        self.outfile.write('    NULL\n')
                     else:
-                        self.c.write('    (GDBusAnnotationInfo **) &_%s_signal_%s_annotation_info_pointers\n'%(i.name_lower, s.name_lower))
-                    self.c.write('  },\n'
-                                 '  "%s"\n'
-                                 %(s.name_hyphen))
-                    self.c.write('};\n'
-                                 '\n')
-
-                self.c.write('static const _ExtendedGDBusSignalInfo * const _%s_signal_info_pointers[] =\n'
-                             '{\n'%(i.name_lower))
+                        self.outfile.write('    (GDBusAnnotationInfo **) &_%s_signal_%s_annotation_info_pointers\n'%(i.name_lower, s.name_lower))
+                    self.outfile.write('  },\n'
+                                       '  "%s"\n'
+                                       %(s.name_hyphen))
+                    self.outfile.write('};\n'
+                                       '\n')
+
+                self.outfile.write('static const _ExtendedGDBusSignalInfo * const _%s_signal_info_pointers[] =\n'
+                                   '{\n'%(i.name_lower))
                 for s in i.signals:
-                    self.c.write('  &_%s_signal_info_%s,\n'%(i.name_lower, s.name_lower))
-                self.c.write('  NULL\n'
-                             '};\n'
-                             '\n')
+                    self.outfile.write('  &_%s_signal_info_%s,\n'%(i.name_lower, s.name_lower))
+                self.outfile.write('  NULL\n'
+                                   '};\n'
+                                   '\n')
 
             # ---
 
@@ -919,64 +945,64 @@ class CodeGenerator:
                     else:
                         access = 'G_DBUS_PROPERTY_INFO_FLAGS_NONE'
                     num_anno = self.generate_annotations('_%s_property_%s_annotation_info'%(i.name_lower, p.name_lower), p.annotations)
-                    self.c.write('static const _ExtendedGDBusPropertyInfo _%s_property_info_%s =\n'
-                                 '{\n'
-                                 '  {\n'
-                                 '    -1,\n'
-                                 '    (gchar *) "%s",\n'
-                                 '    (gchar *) "%s",\n'
-                                 '    %s,\n'%(i.name_lower, p.name_lower, p.name, p.arg.signature, access))
+                    self.outfile.write('static const _ExtendedGDBusPropertyInfo _%s_property_info_%s =\n'
+                                       '{\n'
+                                       '  {\n'
+                                       '    -1,\n'
+                                       '    (gchar *) "%s",\n'
+                                       '    (gchar *) "%s",\n'
+                                       '    %s,\n'%(i.name_lower, p.name_lower, p.name, p.arg.signature, access))
                     if num_anno == 0:
-                        self.c.write('    NULL\n')
+                        self.outfile.write('    NULL\n')
                     else:
-                        self.c.write('    (GDBusAnnotationInfo **) &_%s_property_%s_annotation_info_pointers\n'%(i.name_lower, p.name_lower))
-                    self.c.write('  },\n'
-                                 '  "%s",\n'
-                                 %(p.name_hyphen))
+                        self.outfile.write('    (GDBusAnnotationInfo **) &_%s_property_%s_annotation_info_pointers\n'%(i.name_lower, p.name_lower))
+                    self.outfile.write('  },\n'
+                                       '  "%s",\n'
+                                       %(p.name_hyphen))
                     if not utils.lookup_annotation(p.annotations, 'org.gtk.GDBus.C.ForceGVariant'):
-                        self.c.write('  FALSE\n')
+                        self.outfile.write('  FALSE\n')
                     else:
-                        self.c.write('  TRUE\n')
-                    self.c.write('};\n'
-                                 '\n')
+                        self.outfile.write('  TRUE\n')
+                    self.outfile.write('};\n'
+                                       '\n')
 
-                self.c.write('static const _ExtendedGDBusPropertyInfo * const _%s_property_info_pointers[] =\n'
-                             '{\n'%(i.name_lower))
+                self.outfile.write('static const _ExtendedGDBusPropertyInfo * const _%s_property_info_pointers[] =\n'
+                                   '{\n'%(i.name_lower))
                 for p in i.properties:
-                    self.c.write('  &_%s_property_info_%s,\n'%(i.name_lower, p.name_lower))
-                self.c.write('  NULL\n'
-                             '};\n'
-                             '\n')
+                    self.outfile.write('  &_%s_property_info_%s,\n'%(i.name_lower, p.name_lower))
+                self.outfile.write('  NULL\n'
+                                   '};\n'
+                                   '\n')
 
             num_anno = self.generate_annotations('_%s_annotation_info'%(i.name_lower), i.annotations)
-            self.c.write('static const _ExtendedGDBusInterfaceInfo _%s_interface_info =\n'
-                         '{\n'
-                         '  {\n'
-                         '    -1,\n'
-                         '    (gchar *) "%s",\n'%(i.name_lower, i.name))
+            self.outfile.write('static const _ExtendedGDBusInterfaceInfo _%s_interface_info =\n'
+                               '{\n'
+                               '  {\n'
+                               '    -1,\n'
+                               '    (gchar *) "%s",\n'%(i.name_lower, i.name))
             if len(i.methods) == 0:
-                self.c.write('    NULL,\n')
+                self.outfile.write('    NULL,\n')
             else:
-                self.c.write('    (GDBusMethodInfo **) &_%s_method_info_pointers,\n'%(i.name_lower))
+                self.outfile.write('    (GDBusMethodInfo **) &_%s_method_info_pointers,\n'%(i.name_lower))
             if len(i.signals) == 0:
-                self.c.write('    NULL,\n')
+                self.outfile.write('    NULL,\n')
             else:
-                self.c.write('    (GDBusSignalInfo **) &_%s_signal_info_pointers,\n'%(i.name_lower))
+                self.outfile.write('    (GDBusSignalInfo **) &_%s_signal_info_pointers,\n'%(i.name_lower))
             if len(i.properties) == 0:
-                self.c.write('    NULL,\n')
+                self.outfile.write('    NULL,\n')
             else:
-                self.c.write('    (GDBusPropertyInfo **) &_%s_property_info_pointers,\n'%(i.name_lower))
+                self.outfile.write('    (GDBusPropertyInfo **) &_%s_property_info_pointers,\n'%(i.name_lower))
             if num_anno == 0:
-                self.c.write('    NULL\n')
+                self.outfile.write('    NULL\n')
             else:
-                self.c.write('    (GDBusAnnotationInfo **) &_%s_annotation_info_pointers\n'%(i.name_lower))
-            self.c.write('  },\n'
-                         '  "%s",\n'
-                         '};\n'
-                         '\n'
-                         %(i.name_hyphen))
-            self.c.write('\n')
-            self.c.write(self.docbook_gen.expand(
+                self.outfile.write('    (GDBusAnnotationInfo **) &_%s_annotation_info_pointers\n'%(i.name_lower))
+            self.outfile.write('  },\n'
+                               '  "%s",\n'
+                               '};\n'
+                               '\n'
+                               %(i.name_hyphen))
+            self.outfile.write('\n')
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %s_interface_info:\n'
                     ' *\n'
@@ -984,15 +1010,15 @@ class CodeGenerator:
                     ' *\n'
                     ' * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.\n'
                     %(i.name_lower, i.name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-            self.c.write('GDBusInterfaceInfo *\n'
-                         '%s_interface_info (void)\n'
-                         '{\n'
-                         '  return (GDBusInterfaceInfo *) &_%s_interface_info.parent_struct;\n'
-                         '}\n'
-                         '\n'%(i.name_lower, i.name_lower))
-
-            self.c.write(self.docbook_gen.expand(
+            self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+            self.outfile.write('GDBusInterfaceInfo *\n'
+                               '%s_interface_info (void)\n'
+                               '{\n'
+                               '  return (GDBusInterfaceInfo *) &_%s_interface_info.parent_struct;\n'
+                                '}\n'
+                                '\n'%(i.name_lower, i.name_lower))
+
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %s_override_properties:\n'
                     ' * @klass: The class structure for a #GObject derived class.\n'
@@ -1003,32 +1029,32 @@ class CodeGenerator:
                     ' *\n'
                     ' * Returns: The last property id.\n'
                     %(i.name_lower, i.camel_name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-            self.c.write('guint\n'
-                         '%s_override_properties (GObjectClass *klass, guint property_id_begin)\n'
-                         '{\n'%(i.name_lower))
+            self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+            self.outfile.write('guint\n'
+                               '%s_override_properties (GObjectClass *klass, guint property_id_begin)\n'
+                               '{\n'%(i.name_lower))
             for p in i.properties:
-                self.c.write ('  g_object_class_override_property (klass, property_id_begin++, "%s");\n'%(p.name_hyphen))
-            self.c.write('  return property_id_begin - 1;\n'
-                         '}\n'
-                         '\n')
-            self.c.write('\n')
+                self.outfile.write('  g_object_class_override_property (klass, property_id_begin++, "%s");\n'%(p.name_hyphen))
+            self.outfile.write('  return property_id_begin - 1;\n'
+                               '}\n'
+                               '\n')
+            self.outfile.write('\n')
 
     # ----------------------------------------------------------------------------------------------------
 
     def generate_interface(self, i):
-        self.c.write('\n')
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %s:\n'
                 ' *\n'
                 ' * Abstract interface type for the D-Bus interface #%s.\n'
                 %(i.camel_name, i.name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('\n')
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sIface:\n'
                 ' * @parent_iface: The parent interface.\n'
@@ -1054,40 +1080,40 @@ class CodeGenerator:
                 value += 'Getter for the #%s:%s property.'%(i.camel_name, p.name_hyphen)
                 doc_bits[key] = value
         for key in sorted(doc_bits.keys(), key=utils.version_cmp_key):
-            self.c.write(' * %s\n'%doc_bits[key])
+            self.outfile.write(' * %s\n'%doc_bits[key])
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 ' *\n'
                 ' * Virtual table for the D-Bus interface #%s.\n'
                 %(i.name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('\n')
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('\n')
 
-        self.c.write('typedef %sIface %sInterface;\n'%(i.camel_name, i.camel_name))
-        self.c.write('G_DEFINE_INTERFACE (%s, %s, G_TYPE_OBJECT)\n'%(i.camel_name, i.name_lower))
-        self.c.write('\n')
+        self.outfile.write('typedef %sIface %sInterface;\n'%(i.camel_name, i.camel_name))
+        self.outfile.write('G_DEFINE_INTERFACE (%s, %s, G_TYPE_OBJECT)\n'%(i.camel_name, i.name_lower))
+        self.outfile.write('\n')
 
-        self.c.write('static void\n'
-                     '%s_default_init (%sIface *iface)\n'
-                     '{\n'%(i.name_lower, i.camel_name));
+        self.outfile.write('static void\n'
+                           '%s_default_init (%sIface *iface)\n'
+                           '{\n'%(i.name_lower, i.camel_name));
 
         if len(i.methods) > 0:
-            self.c.write('  /* GObject signals for incoming D-Bus method calls: */\n')
+            self.outfile.write('  /* GObject signals for incoming D-Bus method calls: */\n')
             for m in i.methods:
                 unix_fd = False
                 if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'):
                     unix_fd = True
-                self.c.write(self.docbook_gen.expand(
+                self.outfile.write(self.docbook_gen.expand(
                         '  /**\n'
                         '   * %s::handle-%s:\n'
                         '   * @object: A #%s.\n'
                         '   * @invocation: A #GDBusMethodInvocation.\n'
                         %(i.camel_name, m.name_hyphen, i.camel_name), False))
                 if unix_fd:
-                    self.c.write ('   * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
+                    self.outfile.write('   * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
                 for a in m.in_args:
-                    self.c.write ('   * @arg_%s: Argument passed by remote caller.\n'%(a.name))
-                self.c.write(self.docbook_gen.expand(
+                    self.outfile.write('   * @arg_%s: Argument passed by remote caller.\n'%(a.name))
+                self.outfile.write(self.docbook_gen.expand(
                         '   *\n'
                         '   * Signal emitted when a remote caller is invoking the %s.%s() D-Bus method.\n'
                         '   *\n'
@@ -1095,63 +1121,63 @@ class CodeGenerator:
                         '   *\n'
                         '   * Returns: %%TRUE if the invocation was handled, %%FALSE to let other signal handlers run.\n'
                         %(i.name, m.name, i.name_lower, m.name_lower), False))
-                self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 2)
+                self.write_gtkdoc_deprecated_and_since_and_close(m, self.outfile, 2)
                 if unix_fd:
                     extra_args = 2
                 else:
                     extra_args = 1
-                self.c.write('  g_signal_new ("handle-%s",\n'
-                             '    G_TYPE_FROM_INTERFACE (iface),\n'
-                             '    G_SIGNAL_RUN_LAST,\n'
-                             '    G_STRUCT_OFFSET (%sIface, handle_%s),\n'
-                             '    g_signal_accumulator_true_handled,\n'
-                             '    NULL,\n' # accu_data
-                             '    g_cclosure_marshal_generic,\n'
-                             '    G_TYPE_BOOLEAN,\n'
-                             '    %d,\n'
-                             '    G_TYPE_DBUS_METHOD_INVOCATION'
-                             %(m.name_hyphen, i.camel_name, m.name_lower, len(m.in_args) + extra_args))
+                self.outfile.write('  g_signal_new ("handle-%s",\n'
+                                   '    G_TYPE_FROM_INTERFACE (iface),\n'
+                                   '    G_SIGNAL_RUN_LAST,\n'
+                                   '    G_STRUCT_OFFSET (%sIface, handle_%s),\n'
+                                   '    g_signal_accumulator_true_handled,\n'
+                                   '    NULL,\n' # accu_data
+                                   '    g_cclosure_marshal_generic,\n'
+                                   '    G_TYPE_BOOLEAN,\n'
+                                   '    %d,\n'
+                                   '    G_TYPE_DBUS_METHOD_INVOCATION'
+                                   %(m.name_hyphen, i.camel_name, m.name_lower, len(m.in_args) + extra_args))
                 if unix_fd:
-                    self.c.write(', G_TYPE_UNIX_FD_LIST')
+                    self.outfile.write(', G_TYPE_UNIX_FD_LIST')
                 for a in m.in_args:
-                    self.c.write (', %s'%(a.gtype))
-                self.c.write(');\n')
-                self.c.write('\n')
+                    self.outfile.write(', %s'%(a.gtype))
+                self.outfile.write(');\n')
+                self.outfile.write('\n')
 
         if len(i.signals) > 0:
-            self.c.write('  /* GObject signals for received D-Bus signals: */\n')
+            self.outfile.write('  /* GObject signals for received D-Bus signals: */\n')
             for s in i.signals:
-                self.c.write(self.docbook_gen.expand(
+                self.outfile.write(self.docbook_gen.expand(
                         '  /**\n'
                         '   * %s::%s:\n'
                         '   * @object: A #%s.\n'
                         %(i.camel_name, s.name_hyphen, i.camel_name), False))
                 for a in s.args:
-                    self.c.write ('   * @arg_%s: Argument.\n'%(a.name))
-                self.c.write(self.docbook_gen.expand(
+                    self.outfile.write('   * @arg_%s: Argument.\n'%(a.name))
+                self.outfile.write(self.docbook_gen.expand(
                         '   *\n'
                         '   * On the client-side, this signal is emitted whenever the D-Bus signal #%s::%s is received.\n'
                         '   *\n'
                         '   * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.\n'
                         %(i.name, s.name), False))
-                self.write_gtkdoc_deprecated_and_since_and_close(s, self.c, 2)
-                self.c.write('  g_signal_new ("%s",\n'
-                             '    G_TYPE_FROM_INTERFACE (iface),\n'
-                             '    G_SIGNAL_RUN_LAST,\n'
-                             '    G_STRUCT_OFFSET (%sIface, %s),\n'
-                             '    NULL,\n' # accumulator
-                             '    NULL,\n' # accu_data
-                             '    g_cclosure_marshal_generic,\n'
-                             '    G_TYPE_NONE,\n'
-                             '    %d'
-                             %(s.name_hyphen, i.camel_name, s.name_lower, len(s.args)))
+                self.write_gtkdoc_deprecated_and_since_and_close(s, self.outfile, 2)
+                self.outfile.write('  g_signal_new ("%s",\n'
+                                   '    G_TYPE_FROM_INTERFACE (iface),\n'
+                                   '    G_SIGNAL_RUN_LAST,\n'
+                                   '    G_STRUCT_OFFSET (%sIface, %s),\n'
+                                   '    NULL,\n' # accumulator
+                                   '    NULL,\n' # accu_data
+                                   '    g_cclosure_marshal_generic,\n'
+                                   '    G_TYPE_NONE,\n'
+                                   '    %d'
+                                   %(s.name_hyphen, i.camel_name, s.name_lower, len(s.args)))
                 for a in s.args:
-                    self.c.write (', %s'%(a.gtype))
-                self.c.write(');\n')
-                self.c.write('\n')
+                    self.outfile.write(', %s'%(a.gtype))
+                self.outfile.write(');\n')
+                self.outfile.write('\n')
 
         if len(i.properties) > 0:
-            self.c.write('  /* GObject properties for D-Bus properties: */\n')
+            self.outfile.write('  /* GObject properties for D-Bus properties: */\n')
             for p in i.properties:
                 if p.readable and p.writable:
                     hint = 'Since the D-Bus property for this #GObject property is both readable and writable, it is meaningful to both read from it and write to it on both the service- and client-side.'
@@ -1160,8 +1186,8 @@ class CodeGenerator:
                 elif p.writable:
                     hint = 'Since the D-Bus property for this #GObject property is writable but not readable, it is meaningful to write to it on both the client- and service-side. It is only meaningful, however, to read from it on the service-side.'
                 else:
-                    raise RuntimeError('Cannot handle property %s that neither readable nor writable'%(p.name))
-                self.c.write(self.docbook_gen.expand(
+                    print_error('Cannot handle property "{}" that neither readable nor writable'.format(p.name))
+                self.outfile.write(self.docbook_gen.expand(
                         '  /**\n'
                         '   * %s:%s:\n'
                         '   *\n'
@@ -1169,8 +1195,8 @@ class CodeGenerator:
                         '   *\n'
                         '   * %s\n'
                         %(i.camel_name, p.name_hyphen, i.name, p.name, hint), False))
-                self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 2)
-                self.c.write('  g_object_interface_install_property (iface,\n')
+                self.write_gtkdoc_deprecated_and_since_and_close(p, self.outfile, 2)
+                self.outfile.write('  g_object_interface_install_property (iface,\n')
                 if p.arg.gtype == 'G_TYPE_VARIANT':
                     s = 'g_param_spec_variant ("%s", "%s", "%s", G_VARIANT_TYPE ("%s"), NULL'%(p.name_hyphen, p.name, p.name, p.arg.signature)
                 elif p.arg.signature == 'b':
@@ -1206,12 +1232,12 @@ class CodeGenerator:
                 elif p.arg.signature == 'aay':
                     s = 'g_param_spec_boxed ("%s", "%s", "%s", G_TYPE_STRV'%(p.name_hyphen, p.name, p.name)
                 else:
-                    raise RuntimeError('Unsupported gtype %s for GParamSpec'%(p.arg.gtype))
-                self.c.write('    %s, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));'%s);
-                self.c.write('\n')
+                    print_error('Unsupported gtype "{}" for GParamSpec'.format(p.arg.gtype))
+                self.outfile.write('    %s, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));'%s);
+                self.outfile.write('\n')
 
-        self.c.write('}\n'
-                     '\n')
+        self.outfile.write('}\n'
+                           '\n')
 
     # ----------------------------------------------------------------------------------------------------
 
@@ -1225,8 +1251,8 @@ class CodeGenerator:
             elif p.writable:
                 hint = 'Since this D-Bus property is not readable, it is only meaningful to use this function on the service-side.'
             else:
-                raise RuntimeError('Cannot handle property %s that neither readable nor writable'%(p.name))
-            self.c.write(self.docbook_gen.expand(
+                print_error('Cannot handle property "{}" that neither readable nor writable'.format(p.name))
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %s_get_%s: (skip)\n'
                     ' * @object: A #%s.\n'
@@ -1237,22 +1263,22 @@ class CodeGenerator:
                     ' *\n'
                     %(i.name_lower, p.name_lower, i.camel_name, i.name, p.name, hint), False))
             if p.arg.free_func != None:
-                self.c.write(' * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use %s_dup_%s() if on another thread.</warning>\n'
-                             ' *\n'
-                             ' * Returns: (transfer none): The property value or %%NULL if the property is not set. Do not free the returned value, it belongs to @object.\n'
-                             %(i.name_lower, p.name_lower))
+                self.outfile.write(' * <warning>The returned value is only valid until the property changes so on the client-side it is only safe to use this function on the thread where @object was constructed. Use %s_dup_%s() if on another thread.</warning>\n'
+                                   ' *\n'
+                                   ' * Returns: (transfer none): The property value or %%NULL if the property is not set. Do not free the returned value, it belongs to @object.\n'
+                                   %(i.name_lower, p.name_lower))
             else:
-                self.c.write(' * Returns: The property value.\n')
-            self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 0)
-            self.c.write('%s\n'
-                         '%s_get_%s (%s *object)\n'
-                         '{\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name))
-            self.c.write('  return %s%s_GET_IFACE (object)->get_%s (object);\n'%(i.ns_upper, i.name_upper, p.name_lower))
-            self.c.write('}\n')
-            self.c.write('\n')
+                self.outfile.write(' * Returns: The property value.\n')
+            self.write_gtkdoc_deprecated_and_since_and_close(p, self.outfile, 0)
+            self.outfile.write('%s\n'
+                               '%s_get_%s (%s *object)\n'
+                               '{\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name))
+            self.outfile.write('  return %s%s_GET_IFACE (object)->get_%s (object);\n'%(i.ns_upper, i.name_upper, p.name_lower))
+            self.outfile.write('}\n')
+            self.outfile.write('\n')
             if p.arg.free_func != None:
 
-                self.c.write(self.docbook_gen.expand(
+                self.outfile.write(self.docbook_gen.expand(
                         '/**\n'
                         ' * %s_dup_%s: (skip)\n'
                         ' * @object: A #%s.\n'
@@ -1263,15 +1289,15 @@ class CodeGenerator:
                         ' *\n'
                         ' * Returns: (transfer full): The property value or %%NULL if the property is not set. The returned value should be freed with %s().\n'
                         %(i.name_lower, p.name_lower, i.camel_name, i.name, p.name, hint, p.arg.free_func), False))
-                self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 0)
-                self.c.write('%s\n'
-                             '%s_dup_%s (%s *object)\n'
-                             '{\n'
-                             '  %svalue;\n'%(p.arg.ctype_in_dup, i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in_dup))
-                self.c.write('  g_object_get (G_OBJECT (object), "%s", &value, NULL);\n'%(p.name_hyphen))
-                self.c.write('  return value;\n')
-                self.c.write('}\n')
-                self.c.write('\n')
+                self.write_gtkdoc_deprecated_and_since_and_close(p, self.outfile, 0)
+                self.outfile.write('%s\n'
+                                   '%s_dup_%s (%s *object)\n'
+                                   '{\n'
+                                   '  %svalue;\n'%(p.arg.ctype_in_dup, i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in_dup))
+                self.outfile.write('  g_object_get (G_OBJECT (object), "%s", &value, NULL);\n'%(p.name_hyphen))
+                self.outfile.write('  return value;\n')
+                self.outfile.write('}\n')
+                self.outfile.write('\n')
 
             # setter
             if p.readable and p.writable:
@@ -1281,8 +1307,8 @@ class CodeGenerator:
             elif p.writable:
                 hint = 'Since this D-Bus property is writable, it is meaningful to use this function on both the client- and service-side.'
             else:
-                raise RuntimeError('Cannot handle property %s that neither readable nor writable'%(p.name))
-            self.c.write(self.docbook_gen.expand(
+                print_error('Cannot handle property "{}" that neither readable nor writable'.format(p.name))
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %s_set_%s: (skip)\n'
                     ' * @object: A #%s.\n'
@@ -1292,43 +1318,43 @@ class CodeGenerator:
                     ' *\n'
                     ' * %s\n'
                     %(i.name_lower, p.name_lower, i.camel_name, i.name, p.name, hint), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(p, self.c, 0)
-            self.c.write('void\n'
-                         '%s_set_%s (%s *object, %svalue)\n'
-                         '{\n'%(i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in, ))
-            self.c.write('  g_object_set (G_OBJECT (object), "%s", value, NULL);\n'%(p.name_hyphen))
-            self.c.write('}\n')
-            self.c.write('\n')
+            self.write_gtkdoc_deprecated_and_since_and_close(p, self.outfile, 0)
+            self.outfile.write('void\n'
+                               '%s_set_%s (%s *object, %svalue)\n'
+                               '{\n'%(i.name_lower, p.name_lower, i.camel_name, p.arg.ctype_in, ))
+            self.outfile.write('  g_object_set (G_OBJECT (object), "%s", value, NULL);\n'%(p.name_hyphen))
+            self.outfile.write('}\n')
+            self.outfile.write('\n')
 
     # ---------------------------------------------------------------------------------------------------
 
     def generate_signal_emitters(self, i):
         for s in i.signals:
-            self.c.write(self.docbook_gen.expand(
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %s_emit_%s:\n'
                     ' * @object: A #%s.\n'
                     %(i.name_lower, s.name_lower, i.camel_name), False))
             for a in s.args:
-                self.c.write(' * @arg_%s: Argument to pass with the signal.\n'%(a.name))
-            self.c.write(self.docbook_gen.expand(
+                self.outfile.write(' * @arg_%s: Argument to pass with the signal.\n'%(a.name))
+            self.outfile.write(self.docbook_gen.expand(
                     ' *\n'
                     ' * Emits the #%s::%s D-Bus signal.\n'
                     %(i.name, s.name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(s, self.c, 0)
-            self.c.write('void\n'
-                         '%s_emit_%s (\n'
-                         '    %s *object'%(i.name_lower, s.name_lower, i.camel_name))
+            self.write_gtkdoc_deprecated_and_since_and_close(s, self.outfile, 0)
+            self.outfile.write('void\n'
+                               '%s_emit_%s (\n'
+                               '    %s *object'%(i.name_lower, s.name_lower, i.camel_name))
             for a in s.args:
-                self.c.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
-            self.c.write(')\n'
-                         '{\n'
-                         '  g_signal_emit_by_name (object, "%s"'%(s.name_hyphen))
+                self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+            self.outfile.write(')\n'
+                               '{\n'
+                               '  g_signal_emit_by_name (object, "%s"'%(s.name_hyphen))
             for a in s.args:
-                self.c.write(', arg_%s'%a.name)
-            self.c.write(');\n')
-            self.c.write('}\n'
-                         '\n')
+                self.outfile.write(', arg_%s'%a.name)
+            self.outfile.write(');\n')
+            self.outfile.write('}\n'
+                               '\n')
 
     # ---------------------------------------------------------------------------------------------------
 
@@ -1338,15 +1364,15 @@ class CodeGenerator:
             if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'):
                 unix_fd = True
             # async begin
-            self.c.write('/**\n'
-                         ' * %s_call_%s:\n'
-                         ' * @proxy: A #%sProxy.\n'
-                         %(i.name_lower, m.name_lower, i.camel_name))
+            self.outfile.write('/**\n'
+                               ' * %s_call_%s:\n'
+                               ' * @proxy: A #%sProxy.\n'
+                               %(i.name_lower, m.name_lower, i.camel_name))
             for a in m.in_args:
-                self.c.write(' * @arg_%s: Argument to pass with the method invocation.\n'%(a.name))
+                self.outfile.write(' * @arg_%s: Argument to pass with the method invocation.\n'%(a.name))
             if unix_fd:
-                self.c.write(' * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
-            self.c.write(self.docbook_gen.expand(
+                self.outfile.write(' * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
+            self.outfile.write(self.docbook_gen.expand(
                     ' * @cancellable: (nullable): A #GCancellable or %%NULL.\n'
                     ' * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %%NULL.\n'
                     ' * @user_data: User data to pass to @callback.\n'
@@ -1357,50 +1383,50 @@ class CodeGenerator:
                     ' *\n'
                     ' * See %s_call_%s_sync() for the synchronous, blocking version of this method.\n'
                     %(i.name, m.name, i.name_lower, m.name_lower, i.name_lower, m.name_lower), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0)
-            self.c.write('void\n'
-                         '%s_call_%s (\n'
-                         '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
+            self.write_gtkdoc_deprecated_and_since_and_close(m, self.outfile, 0)
+            self.outfile.write('void\n'
+                               '%s_call_%s (\n'
+                               '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
             for a in m.in_args:
-                self.c.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+                self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
             if unix_fd:
-                self.c.write(',\n    GUnixFDList *fd_list')
-            self.c.write(',\n'
-                         '    GCancellable *cancellable,\n'
-                         '    GAsyncReadyCallback callback,\n'
-                         '    gpointer user_data)\n'
-                         '{\n')
+                self.outfile.write(',\n    GUnixFDList *fd_list')
+            self.outfile.write(',\n'
+                               '    GCancellable *cancellable,\n'
+                               '    GAsyncReadyCallback callback,\n'
+                               '    gpointer user_data)\n'
+                               '{\n')
             if unix_fd:
-                self.c.write('  g_dbus_proxy_call_with_unix_fd_list (G_DBUS_PROXY (proxy),\n')
+                self.outfile.write('  g_dbus_proxy_call_with_unix_fd_list (G_DBUS_PROXY (proxy),\n')
             else:
-                self.c.write('  g_dbus_proxy_call (G_DBUS_PROXY (proxy),\n')
-            self.c.write('    "%s",\n'
-                         '    g_variant_new ("('%(m.name))
+                self.outfile.write('  g_dbus_proxy_call (G_DBUS_PROXY (proxy),\n')
+            self.outfile.write('    "%s",\n'
+                               '    g_variant_new ("('%(m.name))
             for a in m.in_args:
-                self.c.write('%s'%(a.format_in))
-            self.c.write(')"')
+                self.outfile.write('%s'%(a.format_in))
+            self.outfile.write(')"')
             for a in m.in_args:
-                self.c.write(',\n                   arg_%s'%(a.name))
-            self.c.write('),\n'
-                         '    G_DBUS_CALL_FLAGS_NONE,\n'
-                         '    -1,\n')
+                self.outfile.write(',\n                   arg_%s'%(a.name))
+            self.outfile.write('),\n'
+                               '    G_DBUS_CALL_FLAGS_NONE,\n'
+                               '    -1,\n')
             if unix_fd:
-                self.c.write('    fd_list,\n')
-            self.c.write('    cancellable,\n'
-                         '    callback,\n'
-                         '    user_data);\n')
-            self.c.write('}\n'
-                         '\n')
+                self.outfile.write('    fd_list,\n')
+            self.outfile.write('    cancellable,\n'
+                               '    callback,\n'
+                               '    user_data);\n')
+            self.outfile.write('}\n'
+                               '\n')
             # async finish
-            self.c.write('/**\n'
-                         ' * %s_call_%s_finish:\n'
-                         ' * @proxy: A #%sProxy.\n'
-                         %(i.name_lower, m.name_lower, i.camel_name))
+            self.outfile.write('/**\n'
+                               ' * %s_call_%s_finish:\n'
+                               ' * @proxy: A #%sProxy.\n'
+                               %(i.name_lower, m.name_lower, i.camel_name))
             for a in m.out_args:
-                self.c.write(' * @out_%s: (out)%s: Return location for return parameter or %%NULL to ignore.\n'%(a.name, ' ' + a.array_annotation if a.array_annotation else ''))
+                self.outfile.write(' * @out_%s: (out)%s: Return location for return parameter or %%NULL to ignore.\n'%(a.name, ' ' + a.array_annotation if a.array_annotation else ''))
             if unix_fd:
-                self.c.write(' * @out_fd_list: (out): Return location for a #GUnixFDList or %NULL.\n')
-            self.c.write(self.docbook_gen.expand(
+                self.outfile.write(' * @out_fd_list: (out): Return location for a #GUnixFDList or %NULL.\n')
+            self.outfile.write(self.docbook_gen.expand(
                     ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_call_%s().\n'
                     ' * @error: Return location for error or %%NULL.\n'
                     ' *\n'
@@ -1408,54 +1434,54 @@ class CodeGenerator:
                     ' *\n'
                     ' * Returns: (skip): %%TRUE if the call succeded, %%FALSE if @error is set.\n'
                     %(i.name_lower, m.name_lower, i.name_lower, m.name_lower), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0)
-            self.c.write('gboolean\n'
-                         '%s_call_%s_finish (\n'
-                         '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
+            self.write_gtkdoc_deprecated_and_since_and_close(m, self.outfile, 0)
+            self.outfile.write('gboolean\n'
+                               '%s_call_%s_finish (\n'
+                               '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
             for a in m.out_args:
-                self.c.write(',\n    %sout_%s'%(a.ctype_out, a.name))
+                self.outfile.write(',\n    %sout_%s'%(a.ctype_out, a.name))
             if unix_fd:
-                self.c.write(',\n    GUnixFDList **out_fd_list')
-            self.c.write(',\n'
-                         '    GAsyncResult *res,\n'
-                         '    GError **error)\n'
-                         '{\n'
-                         '  GVariant *_ret;\n')
+                self.outfile.write(',\n    GUnixFDList **out_fd_list')
+            self.outfile.write(',\n'
+                               '    GAsyncResult *res,\n'
+                               '    GError **error)\n'
+                               '{\n'
+                               '  GVariant *_ret;\n')
             if unix_fd:
-                self.c.write('  _ret = g_dbus_proxy_call_with_unix_fd_list_finish (G_DBUS_PROXY (proxy), out_fd_list, res, error);\n')
+                self.outfile.write('  _ret = g_dbus_proxy_call_with_unix_fd_list_finish (G_DBUS_PROXY (proxy), out_fd_list, res, error);\n')
             else:
-                self.c.write('  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);\n')
-            self.c.write('  if (_ret == NULL)\n'
-                         '    goto _out;\n')
-            self.c.write('  g_variant_get (_ret,\n'
-                         '                 \"(')
+                self.outfile.write('  _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);\n')
+            self.outfile.write('  if (_ret == NULL)\n'
+                               '    goto _out;\n')
+            self.outfile.write('  g_variant_get (_ret,\n'
+                               '                 \"(')
             for a in m.out_args:
-                self.c.write('%s'%(a.format_out))
-            self.c.write(')"')
+                self.outfile.write('%s'%(a.format_out))
+            self.outfile.write(')"')
             for a in m.out_args:
-                self.c.write(',\n                 out_%s'%(a.name))
-            self.c.write(');\n'
-                         '  g_variant_unref (_ret);\n')
-            self.c.write('_out:\n'
-                         '  return _ret != NULL;\n'
-                         '}\n'
-                         '\n')
+                self.outfile.write(',\n                 out_%s'%(a.name))
+            self.outfile.write(');\n'
+                               '  g_variant_unref (_ret);\n')
+            self.outfile.write('_out:\n'
+                               '  return _ret != NULL;\n'
+                               '}\n'
+                               '\n')
 
 
             # sync
-            self.c.write('/**\n'
-                         ' * %s_call_%s_sync:\n'
-                         ' * @proxy: A #%sProxy.\n'
-                         %(i.name_lower, m.name_lower, i.camel_name))
+            self.outfile.write('/**\n'
+                               ' * %s_call_%s_sync:\n'
+                               ' * @proxy: A #%sProxy.\n'
+                               %(i.name_lower, m.name_lower, i.camel_name))
             for a in m.in_args:
-                self.c.write(' * @arg_%s: Argument to pass with the method invocation.\n'%(a.name))
+                self.outfile.write(' * @arg_%s: Argument to pass with the method invocation.\n'%(a.name))
             if unix_fd:
-                self.c.write(' * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
+                self.outfile.write(' * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
             for a in m.out_args:
-                self.c.write(' * @out_%s: (out)%s: Return location for return parameter or %%NULL to ignore.\n'%(a.name, ' ' + a.array_annotation if a.array_annotation else ''))
+                self.outfile.write(' * @out_%s: (out)%s: Return location for return parameter or %%NULL to ignore.\n'%(a.name, ' ' + a.array_annotation if a.array_annotation else ''))
             if unix_fd:
-                self.c.write(' * @out_fd_list: (out): Return location for a #GUnixFDList or %NULL.\n')
-            self.c.write(self.docbook_gen.expand(
+                self.outfile.write(' * @out_fd_list: (out): Return location for a #GUnixFDList or %NULL.\n')
+            self.outfile.write(self.docbook_gen.expand(
                     ' * @cancellable: (nullable): A #GCancellable or %%NULL.\n'
                     ' * @error: Return location for error or %%NULL.\n'
                     ' *\n'
@@ -1465,57 +1491,57 @@ class CodeGenerator:
                     ' *\n'
                     ' * Returns: (skip): %%TRUE if the call succeded, %%FALSE if @error is set.\n'
                     %(i.name, m.name, i.name_lower, m.name_lower), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0)
-            self.c.write('gboolean\n'
-                         '%s_call_%s_sync (\n'
-                         '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
+            self.write_gtkdoc_deprecated_and_since_and_close(m, self.outfile, 0)
+            self.outfile.write('gboolean\n'
+                               '%s_call_%s_sync (\n'
+                               '    %s *proxy'%(i.name_lower, m.name_lower, i.camel_name))
             for a in m.in_args:
-                self.c.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+                self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
             if unix_fd:
-                self.c.write(',\n    GUnixFDList  *fd_list')
+                self.outfile.write(',\n    GUnixFDList  *fd_list')
             for a in m.out_args:
-                self.c.write(',\n    %sout_%s'%(a.ctype_out, a.name))
+                self.outfile.write(',\n    %sout_%s'%(a.ctype_out, a.name))
             if unix_fd:
-                self.c.write(',\n    GUnixFDList **out_fd_list')
-            self.c.write(',\n'
-                         '    GCancellable *cancellable,\n'
-                         '    GError **error)\n'
-                         '{\n'
-                         '  GVariant *_ret;\n')
+                self.outfile.write(',\n    GUnixFDList **out_fd_list')
+            self.outfile.write(',\n'
+                               '    GCancellable *cancellable,\n'
+                               '    GError **error)\n'
+                               '{\n'
+                               '  GVariant *_ret;\n')
             if unix_fd:
-                self.c.write('  _ret = g_dbus_proxy_call_with_unix_fd_list_sync (G_DBUS_PROXY (proxy),\n')
+                self.outfile.write('  _ret = g_dbus_proxy_call_with_unix_fd_list_sync (G_DBUS_PROXY (proxy),\n')
             else:
-                self.c.write('  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),\n')
-            self.c.write('    "%s",\n'
-                         '    g_variant_new ("('%(m.name))
+                self.outfile.write('  _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),\n')
+            self.outfile.write('    "%s",\n'
+                               '    g_variant_new ("('%(m.name))
             for a in m.in_args:
-                self.c.write('%s'%(a.format_in))
-            self.c.write(')"')
+                self.outfile.write('%s'%(a.format_in))
+            self.outfile.write(')"')
             for a in m.in_args:
-                self.c.write(',\n                   arg_%s'%(a.name))
-            self.c.write('),\n'
-                         '    G_DBUS_CALL_FLAGS_NONE,\n'
-                         '    -1,\n')
+                self.outfile.write(',\n                   arg_%s'%(a.name))
+            self.outfile.write('),\n'
+                               '    G_DBUS_CALL_FLAGS_NONE,\n'
+                               '    -1,\n')
             if unix_fd:
-                self.c.write('    fd_list,\n'
-                             '    out_fd_list,\n')
-            self.c.write('    cancellable,\n'
-                         '    error);\n'
-                         '  if (_ret == NULL)\n'
-                         '    goto _out;\n')
-            self.c.write('  g_variant_get (_ret,\n'
-                         '                 \"(')
+                self.outfile.write('    fd_list,\n'
+                                   '    out_fd_list,\n')
+            self.outfile.write('    cancellable,\n'
+                               '    error);\n'
+                               '  if (_ret == NULL)\n'
+                               '    goto _out;\n')
+            self.outfile.write('  g_variant_get (_ret,\n'
+                               '                 \"(')
             for a in m.out_args:
-                self.c.write('%s'%(a.format_out))
-            self.c.write(')"')
+                self.outfile.write('%s'%(a.format_out))
+            self.outfile.write(')"')
             for a in m.out_args:
-                self.c.write(',\n                 out_%s'%(a.name))
-            self.c.write(');\n'
-                         '  g_variant_unref (_ret);\n')
-            self.c.write('_out:\n'
-                         '  return _ret != NULL;\n'
-                         '}\n'
-                         '\n')
+                self.outfile.write(',\n                 out_%s'%(a.name))
+            self.outfile.write(');\n'
+                               '  g_variant_unref (_ret);\n')
+            self.outfile.write('_out:\n'
+                               '  return _ret != NULL;\n'
+                               '}\n'
+                               '\n')
 
     # ---------------------------------------------------------------------------------------------------
 
@@ -1524,368 +1550,368 @@ class CodeGenerator:
             unix_fd = False
             if utils.lookup_annotation(m.annotations, 'org.gtk.GDBus.C.UnixFD'):
                 unix_fd = True
-            self.c.write('/**\n'
-                         ' * %s_complete_%s:\n'
-                         ' * @object: A #%s.\n'
-                         ' * @invocation: (transfer full): A #GDBusMethodInvocation.\n'
-                         %(i.name_lower, m.name_lower, i.camel_name))
+            self.outfile.write('/**\n'
+                               ' * %s_complete_%s:\n'
+                               ' * @object: A #%s.\n'
+                               ' * @invocation: (transfer full): A #GDBusMethodInvocation.\n'
+                               %(i.name_lower, m.name_lower, i.camel_name))
             if unix_fd:
-                self.c.write (' * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
+                self.outfile.write(' * @fd_list: (nullable): A #GUnixFDList or %NULL.\n')
             for a in m.out_args:
-                self.c.write(' * @%s: Parameter to return.\n'%(a.name))
-            self.c.write(self.docbook_gen.expand(
+                self.outfile.write(' * @%s: Parameter to return.\n'%(a.name))
+            self.outfile.write(self.docbook_gen.expand(
                     ' *\n'
                     ' * Helper function used in service implementations to finish handling invocations of the %s.%s() D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.\n'
                     ' *\n'
                     ' * This method will free @invocation, you cannot use it afterwards.\n'
                     %(i.name, m.name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(m, self.c, 0)
-            self.c.write('void\n'
-                         '%s_complete_%s (\n'
-                         '    %s *object,\n'
-                         '    GDBusMethodInvocation *invocation'%(i.name_lower, m.name_lower, i.camel_name))
+            self.write_gtkdoc_deprecated_and_since_and_close(m, self.outfile, 0)
+            self.outfile.write('void\n'
+                               '%s_complete_%s (\n'
+                               '    %s *object,\n'
+                               '    GDBusMethodInvocation *invocation'%(i.name_lower, m.name_lower, i.camel_name))
             if unix_fd:
-                self.c.write(',\n    GUnixFDList *fd_list')
+                self.outfile.write(',\n    GUnixFDList *fd_list')
             for a in m.out_args:
-                self.c.write(',\n    %s%s'%(a.ctype_in, a.name))
-            self.c.write(')\n'
-                         '{\n')
+                self.outfile.write(',\n    %s%s'%(a.ctype_in, a.name))
+            self.outfile.write(')\n'
+                               '{\n')
 
             if unix_fd:
-                self.c.write('  g_dbus_method_invocation_return_value_with_unix_fd_list (invocation,\n'
-                             '    g_variant_new ("(')
+                self.outfile.write('  g_dbus_method_invocation_return_value_with_unix_fd_list (invocation,\n'
+                                   '    g_variant_new ("(')
             else:
-                self.c.write('  g_dbus_method_invocation_return_value (invocation,\n'
-                             '    g_variant_new ("(')
+                self.outfile.write('  g_dbus_method_invocation_return_value (invocation,\n'
+                                   '    g_variant_new ("(')
             for a in m.out_args:
-                self.c.write('%s'%(a.format_in))
-            self.c.write(')"')
+                self.outfile.write('%s'%(a.format_in))
+            self.outfile.write(')"')
             for a in m.out_args:
-                self.c.write(',\n                   %s'%(a.name))
+                self.outfile.write(',\n                   %s'%(a.name))
             if unix_fd:
-                self.c.write('),\n    fd_list);\n')
+                self.outfile.write('),\n    fd_list);\n')
             else:
-                self.c.write('));\n')
-            self.c.write('}\n'
-                         '\n')
+                self.outfile.write('));\n')
+            self.outfile.write('}\n'
+                               '\n')
 
     # ---------------------------------------------------------------------------------------------------
 
     def generate_proxy(self, i):
         # class boilerplate
-        self.c.write('/* ------------------------------------------------------------------------ */\n'
-                     '\n')
+        self.outfile.write('/* ------------------------------------------------------------------------ */\n'
+                           '\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sProxy:\n'
                 ' *\n'
                 ' * The #%sProxy structure contains only private data and should only be accessed using the provided API.\n'
                 %(i.camel_name, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('\n')
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sProxyClass:\n'
                 ' * @parent_class: The parent class.\n'
                 ' *\n'
                 ' * Class structure for #%sProxy.\n'
                 %(i.camel_name, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('\n')
-
-        self.c.write('struct _%sProxyPrivate\n'
-                     '{\n'
-                     '  GData *qdata;\n'
-                     '};\n'
-                     '\n'%i.camel_name)
-
-        self.c.write('static void %s_proxy_iface_init (%sIface *iface);\n'
-                     '\n'%(i.name_lower, i.camel_name))
-        self.c.write('#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n')
-        self.c.write('G_DEFINE_TYPE_WITH_CODE (%sProxy, %s_proxy, G_TYPE_DBUS_PROXY,\n'%(i.camel_name, i.name_lower))
-        self.c.write('                         G_ADD_PRIVATE (%sProxy)\n'%(i.camel_name))
-        self.c.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_proxy_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
-        self.c.write('#else\n')
-        self.c.write('G_DEFINE_TYPE_WITH_CODE (%sProxy, %s_proxy, G_TYPE_DBUS_PROXY,\n'%(i.camel_name, i.name_lower))
-        self.c.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_proxy_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
-        self.c.write('#endif\n')
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('\n')
+
+        self.outfile.write('struct _%sProxyPrivate\n'
+                           '{\n'
+                           '  GData *qdata;\n'
+                           '};\n'
+                           '\n'%i.camel_name)
+
+        self.outfile.write('static void %s_proxy_iface_init (%sIface *iface);\n'
+                           '\n'%(i.name_lower, i.camel_name))
+        self.outfile.write('#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n')
+        self.outfile.write('G_DEFINE_TYPE_WITH_CODE (%sProxy, %s_proxy, G_TYPE_DBUS_PROXY,\n'%(i.camel_name, i.name_lower))
+        self.outfile.write('                         G_ADD_PRIVATE (%sProxy)\n'%(i.camel_name))
+        self.outfile.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_proxy_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
+        self.outfile.write('#else\n')
+        self.outfile.write('G_DEFINE_TYPE_WITH_CODE (%sProxy, %s_proxy, G_TYPE_DBUS_PROXY,\n'%(i.camel_name, i.name_lower))
+        self.outfile.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_proxy_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
+        self.outfile.write('#endif\n')
 
         # finalize
-        self.c.write('static void\n'
-                     '%s_proxy_finalize (GObject *object)\n'
-                     '{\n'%(i.name_lower))
-        self.c.write('  %sProxy *proxy = %s%s_PROXY (object);\n'%(i.camel_name, i.ns_upper, i.name_upper))
-        self.c.write('  g_datalist_clear (&proxy->priv->qdata);\n')
-        self.c.write('  G_OBJECT_CLASS (%s_proxy_parent_class)->finalize (object);\n'
-                     '}\n'
-                     '\n'%(i.name_lower))
+        self.outfile.write('static void\n'
+                           '%s_proxy_finalize (GObject *object)\n'
+                           '{\n'%(i.name_lower))
+        self.outfile.write('  %sProxy *proxy = %s%s_PROXY (object);\n'%(i.camel_name, i.ns_upper, i.name_upper))
+        self.outfile.write('  g_datalist_clear (&proxy->priv->qdata);\n')
+        self.outfile.write('  G_OBJECT_CLASS (%s_proxy_parent_class)->finalize (object);\n'
+                           '}\n'
+                           '\n'%(i.name_lower))
 
         # property accessors
         #
         # Note that we are guaranteed that prop_id starts at 1 and is
         # laid out in the same order as introspection data pointers
         #
-        self.c.write('static void\n'
-                     '%s_proxy_get_property (GObject      *object,\n'
-                     '  guint         prop_id,\n'
-                     '  GValue       *value,\n'
-                     '  GParamSpec   *pspec G_GNUC_UNUSED)\n'
-                     '{\n'%(i.name_lower))
+        self.outfile.write('static void\n'
+                           '%s_proxy_get_property (GObject      *object,\n'
+                           '  guint         prop_id,\n'
+                           '  GValue       *value,\n'
+                           '  GParamSpec   *pspec G_GNUC_UNUSED)\n'
+                           '{\n'%(i.name_lower))
         if len(i.properties) > 0:
-            self.c.write('  const _ExtendedGDBusPropertyInfo *info;\n'
-                         '  GVariant *variant;\n'
-                         '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
-                         '  info = _%s_property_info_pointers[prop_id - 1];\n'
-                         '  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);\n'
-                         '  if (info->use_gvariant)\n'
-                         '    {\n'
-                         '      g_value_set_variant (value, variant);\n'
-                         '    }\n'
-                         '  else\n'
-                         '    {\n'
-                         # could be that we don't have the value in cache - in that case, we do
-                         # nothing and the user gets the default value for the GType
-                         '      if (variant != NULL)\n'
-                         '        g_dbus_gvariant_to_gvalue (variant, value);\n'
-                         '    }\n'
-                         '  if (variant != NULL)\n'
-                         '    g_variant_unref (variant);\n'
-                         %(len(i.properties), i.name_lower))
-        self.c.write('}\n'
-                     '\n')
+            self.outfile.write('  const _ExtendedGDBusPropertyInfo *info;\n'
+                               '  GVariant *variant;\n'
+                               '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
+                               '  info = _%s_property_info_pointers[prop_id - 1];\n'
+                               '  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (object), info->parent_struct.name);\n'
+                               '  if (info->use_gvariant)\n'
+                               '    {\n'
+                               '      g_value_set_variant (value, variant);\n'
+                               '    }\n'
+                               '  else\n'
+                               '    {\n'
+                               # could be that we don't have the value in cache - in that case, we do
+                               # nothing and the user gets the default value for the GType
+                               '      if (variant != NULL)\n'
+                               '        g_dbus_gvariant_to_gvalue (variant, value);\n'
+                               '    }\n'
+                               '  if (variant != NULL)\n'
+                               '    g_variant_unref (variant);\n'
+                               %(len(i.properties), i.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
         if len(i.properties) > 0:
-            self.c.write('static void\n'
-                         '%s_proxy_set_property_cb (GDBusProxy *proxy,\n'
-                         '  GAsyncResult *res,\n'
-                         '  gpointer      user_data)\n'
-                         '{\n'%(i.name_lower))
-            self.c.write('  const _ExtendedGDBusPropertyInfo *info = user_data;\n'
-                         '  GError *error;\n'
-                         '  GVariant *_ret;\n'
-                         '  error = NULL;\n'
-                         '  _ret = g_dbus_proxy_call_finish (proxy, res, &error);\n'
-                         '  if (!_ret)\n'
-                         '    {\n'
-                         '      g_warning ("Error setting property \'%%s\' on interface %s: %%s (%%s, %%d)",\n'
-                         '                 info->parent_struct.name, \n'
-                         '                 error->message, g_quark_to_string (error->domain), error->code);\n'
-                         '      g_error_free (error);\n'
-                         '    }\n'
-                         '  else\n'
-                         '    {\n'
-                         '      g_variant_unref (_ret);\n'
-                         '    }\n'
-                         %(i.name))
-            self.c.write('}\n'
-                         '\n')
-        self.c.write('static void\n'
-                     '%s_proxy_set_property (GObject      *object,\n'
-                     '  guint         prop_id,\n'
-                     '  const GValue *value,\n'
-                     '  GParamSpec   *pspec G_GNUC_UNUSED)\n'
-                     '{\n'%(i.name_lower))
+            self.outfile.write('static void\n'
+                               '%s_proxy_set_property_cb (GDBusProxy *proxy,\n'
+                               '  GAsyncResult *res,\n'
+                               '  gpointer      user_data)\n'
+                               '{\n'%(i.name_lower))
+            self.outfile.write('  const _ExtendedGDBusPropertyInfo *info = user_data;\n'
+                               '  GError *error;\n'
+                               '  GVariant *_ret;\n'
+                               '  error = NULL;\n'
+                               '  _ret = g_dbus_proxy_call_finish (proxy, res, &error);\n'
+                               '  if (!_ret)\n'
+                               '    {\n'
+                               '      g_warning ("Error setting property \'%%s\' on interface %s: %%s (%%s, %%d)",\n'
+                               '                 info->parent_struct.name, \n'
+                               '                 error->message, g_quark_to_string (error->domain), error->code);\n'
+                               '      g_error_free (error);\n'
+                               '    }\n'
+                               '  else\n'
+                               '    {\n'
+                               '      g_variant_unref (_ret);\n'
+                               '    }\n'
+                               %(i.name))
+            self.outfile.write('}\n'
+                               '\n')
+        self.outfile.write('static void\n'
+                           '%s_proxy_set_property (GObject      *object,\n'
+                           '  guint         prop_id,\n'
+                           '  const GValue *value,\n'
+                           '  GParamSpec   *pspec G_GNUC_UNUSED)\n'
+                           '{\n'%(i.name_lower))
         if len(i.properties) > 0:
-            self.c.write('  const _ExtendedGDBusPropertyInfo *info;\n'
-                         '  GVariant *variant;\n'
-                         '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
-                         '  info = _%s_property_info_pointers[prop_id - 1];\n'
-                         '  variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));\n'
-                         '  g_dbus_proxy_call (G_DBUS_PROXY (object),\n'
-                         '    "org.freedesktop.DBus.Properties.Set",\n'
-                         '    g_variant_new ("(ssv)", "%s", info->parent_struct.name, variant),\n'
-                         '    G_DBUS_CALL_FLAGS_NONE,\n'
-                         '    -1,\n'
-                         '    NULL, (GAsyncReadyCallback) %s_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct);\n'
-                         '  g_variant_unref (variant);\n'
-                         %(len(i.properties), i.name_lower, i.name, i.name_lower))
-        self.c.write('}\n'
-                     '\n')
+            self.outfile.write('  const _ExtendedGDBusPropertyInfo *info;\n'
+                               '  GVariant *variant;\n'
+                               '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
+                               '  info = _%s_property_info_pointers[prop_id - 1];\n'
+                               '  variant = g_dbus_gvalue_to_gvariant (value, G_VARIANT_TYPE (info->parent_struct.signature));\n'
+                               '  g_dbus_proxy_call (G_DBUS_PROXY (object),\n'
+                               '    "org.freedesktop.DBus.Properties.Set",\n'
+                               '    g_variant_new ("(ssv)", "%s", info->parent_struct.name, variant),\n'
+                               '    G_DBUS_CALL_FLAGS_NONE,\n'
+                               '    -1,\n'
+                               '    NULL, (GAsyncReadyCallback) %s_proxy_set_property_cb, (GDBusPropertyInfo *) &info->parent_struct);\n'
+                               '  g_variant_unref (variant);\n'
+                               %(len(i.properties), i.name_lower, i.name, i.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
 
         # signal received
-        self.c.write('static void\n'
-                     '%s_proxy_g_signal (GDBusProxy *proxy,\n'
-                     '  const gchar *sender_name G_GNUC_UNUSED,\n'
-                     '  const gchar *signal_name,\n'
-                     '  GVariant *parameters)\n'
-                     '{\n'%(i.name_lower))
-        self.c.write('  _ExtendedGDBusSignalInfo *info;\n'
-                     '  GVariantIter iter;\n'
-                     '  GVariant *child;\n'
-                     '  GValue *paramv;\n'
-                     '  gsize num_params;\n'
-                     '  gsize n;\n'
-                     '  guint signal_id;\n');
+        self.outfile.write('static void\n'
+                           '%s_proxy_g_signal (GDBusProxy *proxy,\n'
+                           '  const gchar *sender_name G_GNUC_UNUSED,\n'
+                           '  const gchar *signal_name,\n'
+                           '  GVariant *parameters)\n'
+                           '{\n'%(i.name_lower))
+        self.outfile.write('  _ExtendedGDBusSignalInfo *info;\n'
+                           '  GVariantIter iter;\n'
+                           '  GVariant *child;\n'
+                           '  GValue *paramv;\n'
+                           '  gsize num_params;\n'
+                           '  gsize n;\n'
+                           '  guint signal_id;\n');
         # Note: info could be NULL if we are talking to a newer version of the interface
-        self.c.write('  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, signal_name);\n'
-                     '  if (info == NULL)\n'
-                     '    return;\n'
-                     %(i.name_lower))
-        self.c.write ('  num_params = g_variant_n_children (parameters);\n'
-                      '  paramv = g_new0 (GValue, num_params + 1);\n'
-                      '  g_value_init (&paramv[0], %sTYPE_%s);\n'
-                      '  g_value_set_object (&paramv[0], proxy);\n'
-                      %(i.ns_upper, i.name_upper))
-        self.c.write('  g_variant_iter_init (&iter, parameters);\n'
-                     '  n = 1;\n'
-                     '  while ((child = g_variant_iter_next_value (&iter)) != NULL)\n'
-                     '    {\n'
-                     '      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];\n'
-                     '      if (arg_info->use_gvariant)\n'
-                     '        {\n'
-                     '          g_value_init (&paramv[n], G_TYPE_VARIANT);\n'
-                     '          g_value_set_variant (&paramv[n], child);\n'
-                     '          n++;\n'
-                     '        }\n'
-                     '      else\n'
-                     '        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);\n'
-                     '      g_variant_unref (child);\n'
-                     '    }\n'
-                     )
-        self.c.write('  signal_id = g_signal_lookup (info->signal_name, %sTYPE_%s);\n'
-                     %(i.ns_upper, i.name_upper))
-        self.c.write('  g_signal_emitv (paramv, signal_id, 0, NULL);\n')
-        self.c.write('  for (n = 0; n < num_params + 1; n++)\n'
-                     '    g_value_unset (&paramv[n]);\n'
-                     '  g_free (paramv);\n')
-        self.c.write('}\n'
-                     '\n')
+        self.outfile.write('  info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, signal_name);\n'
+                           '  if (info == NULL)\n'
+                           '    return;\n'
+                           %(i.name_lower))
+        self.outfile.write('  num_params = g_variant_n_children (parameters);\n'
+                           '  paramv = g_new0 (GValue, num_params + 1);\n'
+                           '  g_value_init (&paramv[0], %sTYPE_%s);\n'
+                           '  g_value_set_object (&paramv[0], proxy);\n'
+                           %(i.ns_upper, i.name_upper))
+        self.outfile.write('  g_variant_iter_init (&iter, parameters);\n'
+                           '  n = 1;\n'
+                           '  while ((child = g_variant_iter_next_value (&iter)) != NULL)\n'
+                           '    {\n'
+                           '      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];\n'
+                           '      if (arg_info->use_gvariant)\n'
+                           '        {\n'
+                           '          g_value_init (&paramv[n], G_TYPE_VARIANT);\n'
+                           '          g_value_set_variant (&paramv[n], child);\n'
+                           '          n++;\n'
+                           '        }\n'
+                           '      else\n'
+                           '        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);\n'
+                           '      g_variant_unref (child);\n'
+                           '    }\n'
+                           )
+        self.outfile.write('  signal_id = g_signal_lookup (info->signal_name, %sTYPE_%s);\n'
+                           %(i.ns_upper, i.name_upper))
+        self.outfile.write('  g_signal_emitv (paramv, signal_id, 0, NULL);\n')
+        self.outfile.write('  for (n = 0; n < num_params + 1; n++)\n'
+                           '    g_value_unset (&paramv[n]);\n'
+                           '  g_free (paramv);\n')
+        self.outfile.write('}\n'
+                           '\n')
 
         # property changed
-        self.c.write('static void\n'
-                     '%s_proxy_g_properties_changed (GDBusProxy *_proxy,\n'
-                     '  GVariant *changed_properties,\n'
-                     '  const gchar *const *invalidated_properties)\n'
-                     '{\n'%(i.name_lower))
+        self.outfile.write('static void\n'
+                           '%s_proxy_g_properties_changed (GDBusProxy *_proxy,\n'
+                           '  GVariant *changed_properties,\n'
+                           '  const gchar *const *invalidated_properties)\n'
+                           '{\n'%(i.name_lower))
         # Note: info could be NULL if we are talking to a newer version of the interface
-        self.c.write('  %sProxy *proxy = %s%s_PROXY (_proxy);\n'
-                     '  guint n;\n'
-                     '  const gchar *key;\n'
-                     '  GVariantIter *iter;\n'
-                     '  _ExtendedGDBusPropertyInfo *info;\n'
-                     '  g_variant_get (changed_properties, "a{sv}", &iter);\n'
-                     '  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))\n'
-                     '    {\n'
-                     '      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, key);\n'
-                     '      g_datalist_remove_data (&proxy->priv->qdata, key);\n'
-                     '      if (info != NULL)\n'
-                     '        g_object_notify (G_OBJECT (proxy), info->hyphen_name);\n'
-                     '    }\n'
-                     '  g_variant_iter_free (iter);\n'
-                     '  for (n = 0; invalidated_properties[n] != NULL; n++)\n'
-                     '    {\n'
-                     '      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, invalidated_properties[n]);\n'
-                     '      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);\n'
-                     '      if (info != NULL)\n'
-                     '        g_object_notify (G_OBJECT (proxy), info->hyphen_name);\n'
-                     '    }\n'
-                     '}\n'
-                     '\n'
-                     %(i.camel_name, i.ns_upper, i.name_upper,
-                       i.name_lower, i.name_lower))
+        self.outfile.write('  %sProxy *proxy = %s%s_PROXY (_proxy);\n'
+                           '  guint n;\n'
+                           '  const gchar *key;\n'
+                           '  GVariantIter *iter;\n'
+                           '  _ExtendedGDBusPropertyInfo *info;\n'
+                           '  g_variant_get (changed_properties, "a{sv}", &iter);\n'
+                           '  while (g_variant_iter_next (iter, "{&sv}", &key, NULL))\n'
+                           '    {\n'
+                           '      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, key);\n'
+                           '      g_datalist_remove_data (&proxy->priv->qdata, key);\n'
+                           '      if (info != NULL)\n'
+                           '        g_object_notify (G_OBJECT (proxy), info->hyphen_name);\n'
+                           '    }\n'
+                           '  g_variant_iter_free (iter);\n'
+                           '  for (n = 0; invalidated_properties[n] != NULL; n++)\n'
+                           '    {\n'
+                           '      info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, invalidated_properties[n]);\n'
+                           '      g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);\n'
+                           '      if (info != NULL)\n'
+                           '        g_object_notify (G_OBJECT (proxy), info->hyphen_name);\n'
+                           '    }\n'
+                           '}\n'
+                           '\n'
+                           %(i.camel_name, i.ns_upper, i.name_upper,
+                             i.name_lower, i.name_lower))
 
         # property vfuncs
         for p in i.properties:
             nul_value = '0'
             if p.arg.free_func != None:
                 nul_value = 'NULL'
-            self.c.write('static %s\n'
-                         '%s_proxy_get_%s (%s *object)\n'
-                         '{\n'
-                         '  %sProxy *proxy = %s%s_PROXY (object);\n'
-                         '  GVariant *variant;\n'
-                         '  %svalue = %s;\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name,
-                                              i.camel_name, i.ns_upper, i.name_upper,
-                                              p.arg.ctype_in, nul_value))
+            self.outfile.write('static %s\n'
+                               '%s_proxy_get_%s (%s *object)\n'
+                               '{\n'
+                               '  %sProxy *proxy = %s%s_PROXY (object);\n'
+                               '  GVariant *variant;\n'
+                               '  %svalue = %s;\n'%(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name,
+                                                    i.camel_name, i.ns_upper, i.name_upper,
+                                                    p.arg.ctype_in, nul_value))
             # For some property types, we have to free the returned
             # value (or part of it, e.g. the container) because of how
             # GVariant works.. see https://bugzilla.gnome.org/show_bug.cgi?id=657100
             # for details
             #
             free_container = False;
-            if p.arg.gvariant_get == 'g_variant_get_strv' or p.arg.gvariant_get == 'g_variant_get_objpathv' or p.arg.gvariant_get == 'g_variant_get_bytestring_array':
+            if p.arg.gvariant_get == 'g_variant_get_strv' or p.arg.gvariant_get == 'g_variant_get_objv' or p.arg.gvariant_get == 'g_variant_get_bytestring_array':
                 free_container = True;
-            # If already using an old value for strv, objpathv, bytestring_array (see below),
+            # If already using an old value for strv, objv, bytestring_array (see below),
             # then just return that... that way the result from multiple consecutive calls
             # to the getter are valid as long as they're freed
             #
             if free_container:
-                self.c.write('  value = g_datalist_get_data (&proxy->priv->qdata, \"%s\");\n'
-                             '  if (value != NULL)\n'
-                             '    return value;\n'
-                             %(p.name))
-            self.c.write('  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), \"%s\");\n'%(p.name))
+                self.outfile.write('  value = g_datalist_get_data (&proxy->priv->qdata, \"%s\");\n'
+                                   '  if (value != NULL)\n'
+                                   '    return value;\n'
+                                   %(p.name))
+            self.outfile.write('  variant = g_dbus_proxy_get_cached_property (G_DBUS_PROXY (proxy), \"%s\");\n'%(p.name))
             if p.arg.gtype == 'G_TYPE_VARIANT':
-                self.c.write('  value = variant;\n')
-                self.c.write('  if (variant != NULL)\n')
-                self.c.write('    g_variant_unref (variant);\n')
+                self.outfile.write('  value = variant;\n')
+                self.outfile.write('  if (variant != NULL)\n')
+                self.outfile.write('    g_variant_unref (variant);\n')
             else:
-                self.c.write('  if (variant != NULL)\n'
-                             '    {\n')
+                self.outfile.write('  if (variant != NULL)\n'
+                                   '    {\n')
                 extra_len = ''
                 if p.arg.gvariant_get == 'g_variant_get_string' or p.arg.gvariant_get == 'g_variant_get_strv' or p.arg.gvariant_get == 'g_variant_get_objv' or p.arg.gvariant_get == 'g_variant_get_bytestring_array':
                     extra_len = ', NULL'
-                self.c.write('      value = %s (variant%s);\n'%(p.arg.gvariant_get, extra_len))
+                self.outfile.write('      value = %s (variant%s);\n'%(p.arg.gvariant_get, extra_len))
                 if free_container:
-                    self.c.write('      g_datalist_set_data_full (&proxy->priv->qdata, \"%s\", (gpointer) value, g_free);\n'
-                                 %(p.name))
-                self.c.write('      g_variant_unref (variant);\n')
-                self.c.write('    }\n')
-            self.c.write('  return value;\n')
-            self.c.write('}\n')
-            self.c.write('\n')
+                    self.outfile.write('      g_datalist_set_data_full (&proxy->priv->qdata, \"%s\", (gpointer) value, g_free);\n'
+                                       %(p.name))
+                self.outfile.write('      g_variant_unref (variant);\n')
+                self.outfile.write('    }\n')
+            self.outfile.write('  return value;\n')
+            self.outfile.write('}\n')
+            self.outfile.write('\n')
 
         # class boilerplate
-        self.c.write('static void\n'
-                     '%s_proxy_init (%sProxy *proxy)\n'
-                     '{\n'
-                     '#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n'
-                     '  proxy->priv = %s_proxy_get_instance_private (proxy);\n'
-                     '#else\n'
-                     '  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, %sTYPE_%s_PROXY, %sProxyPrivate);\n'
-                     '#endif\n\n'
-                     '  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), %s_interface_info ());\n'
-                     '}\n'
-                     '\n'
-                     %(i.name_lower, i.camel_name,
-                       i.name_lower,
-                       i.ns_upper, i.name_upper, i.camel_name,
-                       i.name_lower))
-        self.c.write('static void\n'
-                     '%s_proxy_class_init (%sProxyClass *klass)\n'
-                     '{\n'
-                     '  GObjectClass *gobject_class;\n'
-                     '  GDBusProxyClass *proxy_class;\n'
-                     '\n'
-                     '  gobject_class = G_OBJECT_CLASS (klass);\n'
-                     '  gobject_class->finalize     = %s_proxy_finalize;\n'
-                     '  gobject_class->get_property = %s_proxy_get_property;\n'
-                     '  gobject_class->set_property = %s_proxy_set_property;\n'
-                     '\n'
-                     '  proxy_class = G_DBUS_PROXY_CLASS (klass);\n'
-                     '  proxy_class->g_signal = %s_proxy_g_signal;\n'
-                     '  proxy_class->g_properties_changed = %s_proxy_g_properties_changed;\n'
-                     '\n'%(i.name_lower, i.camel_name,
-                           i.name_lower, i.name_lower, i.name_lower, i.name_lower, i.name_lower))
+        self.outfile.write('static void\n'
+                           '%s_proxy_init (%sProxy *proxy)\n'
+                           '{\n'
+                           '#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n'
+                           '  proxy->priv = %s_proxy_get_instance_private (proxy);\n'
+                           '#else\n'
+                           '  proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, %sTYPE_%s_PROXY, %sProxyPrivate);\n'
+                           '#endif\n\n'
+                           '  g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), %s_interface_info ());\n'
+                           '}\n'
+                           '\n'
+                           %(i.name_lower, i.camel_name,
+                             i.name_lower,
+                             i.ns_upper, i.name_upper, i.camel_name,
+                             i.name_lower))
+        self.outfile.write('static void\n'
+                           '%s_proxy_class_init (%sProxyClass *klass)\n'
+                           '{\n'
+                           '  GObjectClass *gobject_class;\n'
+                           '  GDBusProxyClass *proxy_class;\n'
+                           '\n'
+                           '  gobject_class = G_OBJECT_CLASS (klass);\n'
+                           '  gobject_class->finalize     = %s_proxy_finalize;\n'
+                           '  gobject_class->get_property = %s_proxy_get_property;\n'
+                           '  gobject_class->set_property = %s_proxy_set_property;\n'
+                           '\n'
+                           '  proxy_class = G_DBUS_PROXY_CLASS (klass);\n'
+                           '  proxy_class->g_signal = %s_proxy_g_signal;\n'
+                           '  proxy_class->g_properties_changed = %s_proxy_g_properties_changed;\n'
+                           '\n'%(i.name_lower, i.camel_name,
+                                 i.name_lower, i.name_lower, i.name_lower, i.name_lower, i.name_lower))
         if len(i.properties) > 0:
-            self.c.write('  %s_override_properties (gobject_class, 1);\n\n'%(i.name_lower))
-        self.c.write('#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38\n'
-                     '  g_type_class_add_private (klass, sizeof (%sProxyPrivate));\n'
-                     '#endif\n'%(i.camel_name))
-        self.c.write('}\n'
-                     '\n')
-
-        self.c.write('static void\n'
-                     '%s_proxy_iface_init (%sIface *iface)\n'
-                     '{\n'%(i.name_lower, i.camel_name))
+            self.outfile.write('  %s_override_properties (gobject_class, 1);\n\n'%(i.name_lower))
+        self.outfile.write('#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38\n'
+                           '  g_type_class_add_private (klass, sizeof (%sProxyPrivate));\n'
+                           '#endif\n'%(i.camel_name))
+        self.outfile.write('}\n'
+                           '\n')
+
+        self.outfile.write('static void\n'
+                           '%s_proxy_iface_init (%sIface *iface)\n'
+                           '{\n'%(i.name_lower, i.camel_name))
         for p in i.properties:
-            self.c.write('  iface->get_%s = %s_proxy_get_%s;\n'%(p.name_lower, i.name_lower, p.name_lower))
-        self.c.write('}\n'
-                     '\n')
+            self.outfile.write('  iface->get_%s = %s_proxy_get_%s;\n'%(p.name_lower, i.name_lower, p.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
 
         # constructors
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %s_proxy_new:\n'
                 ' * @connection: A #GDBusConnection.\n'
@@ -1903,49 +1929,49 @@ class CodeGenerator:
                 ' *\n'
                 ' * See %s_proxy_new_sync() for the synchronous, blocking version of this constructor.\n'
                 %(i.name_lower, i.name, i.name_lower, i.name_lower), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('void\n'
-                     '%s_proxy_new (\n'
-                     '    GDBusConnection     *connection,\n'
-                     '    GDBusProxyFlags      flags,\n'
-                     '    const gchar         *name,\n'
-                     '    const gchar         *object_path,\n'
-                     '    GCancellable        *cancellable,\n'
-                     '    GAsyncReadyCallback  callback,\n'
-                     '    gpointer             user_data)\n'
-                     '{\n'
-                     '  g_async_initable_new_async (%sTYPE_%s_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
-                     '}\n'
-                     '\n'
-                     %(i.name_lower, i.ns_upper, i.name_upper, i.name))
-        self.c.write('/**\n'
-                     ' * %s_proxy_new_finish:\n'
-                     ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_proxy_new().\n'
-                     ' * @error: Return location for error or %%NULL\n'
-                     ' *\n'
-                     ' * Finishes an operation started with %s_proxy_new().\n'
-                     ' *\n'
-                     ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n'
-                     %(i.name_lower, i.name_lower, i.name_lower, i.camel_name))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('%s *\n'
-                     '%s_proxy_new_finish (\n'
-                     '    GAsyncResult        *res,\n'
-                     '    GError             **error)\n'
-                     '{\n'
-                     '  GObject *ret;\n'
-                     '  GObject *source_object;\n'
-                     '  source_object = g_async_result_get_source_object (res);\n'
-                     '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
-                     '  g_object_unref (source_object);\n'
-                     '  if (ret != NULL)\n'
-                     '    return %s%s (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper))
-        self.c.write(self.docbook_gen.expand(
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('void\n'
+                           '%s_proxy_new (\n'
+                           '    GDBusConnection     *connection,\n'
+                           '    GDBusProxyFlags      flags,\n'
+                           '    const gchar         *name,\n'
+                           '    const gchar         *object_path,\n'
+                           '    GCancellable        *cancellable,\n'
+                           '    GAsyncReadyCallback  callback,\n'
+                           '    gpointer             user_data)\n'
+                           '{\n'
+                           '  g_async_initable_new_async (%sTYPE_%s_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
+                           '}\n'
+                           '\n'
+                           %(i.name_lower, i.ns_upper, i.name_upper, i.name))
+        self.outfile.write('/**\n'
+                           ' * %s_proxy_new_finish:\n'
+                           ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_proxy_new().\n'
+                           ' * @error: Return location for error or %%NULL\n'
+                           ' *\n'
+                           ' * Finishes an operation started with %s_proxy_new().\n'
+                           ' *\n'
+                           ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n'
+                           %(i.name_lower, i.name_lower, i.name_lower, i.camel_name))
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('%s *\n'
+                           '%s_proxy_new_finish (\n'
+                           '    GAsyncResult        *res,\n'
+                           '    GError             **error)\n'
+                           '{\n'
+                           '  GObject *ret;\n'
+                           '  GObject *source_object;\n'
+                           '  source_object = g_async_result_get_source_object (res);\n'
+                           '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
+                           '  g_object_unref (source_object);\n'
+                           '  if (ret != NULL)\n'
+                           '    return %s%s (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper))
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %s_proxy_new_sync:\n'
                 ' * @connection: A #GDBusConnection.\n'
@@ -1963,27 +1989,27 @@ class CodeGenerator:
                 ' *\n'
                 ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n'
                 %(i.name_lower, i.name, i.name_lower, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('%s *\n'
-                     '%s_proxy_new_sync (\n'
-                     '    GDBusConnection     *connection,\n'
-                     '    GDBusProxyFlags      flags,\n'
-                     '    const gchar         *name,\n'
-                     '    const gchar         *object_path,\n'
-                     '    GCancellable        *cancellable,\n'
-                     '    GError             **error)\n'
-                     '{\n'
-                     '  GInitable *ret;\n'
-                     '  ret = g_initable_new (%sTYPE_%s_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
-                     '  if (ret != NULL)\n'
-                     '    return %s%s (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.name, i.ns_upper, i.name_upper))
-        self.c.write('\n')
-        self.c.write(self.docbook_gen.expand(
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('%s *\n'
+                           '%s_proxy_new_sync (\n'
+                           '    GDBusConnection     *connection,\n'
+                           '    GDBusProxyFlags      flags,\n'
+                           '    const gchar         *name,\n'
+                           '    const gchar         *object_path,\n'
+                           '    GCancellable        *cancellable,\n'
+                           '    GError             **error)\n'
+                           '{\n'
+                           '  GInitable *ret;\n'
+                           '  ret = g_initable_new (%sTYPE_%s_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
+                           '  if (ret != NULL)\n'
+                           '    return %s%s (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.name, i.ns_upper, i.name_upper))
+        self.outfile.write('\n')
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %s_proxy_new_for_bus:\n'
                 ' * @bus_type: A #GBusType.\n'
@@ -2001,49 +2027,49 @@ class CodeGenerator:
                 ' *\n'
                 ' * See %s_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.\n'
                 %(i.name_lower, i.name_lower, i.name_lower, i.name_lower), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('void\n'
-                     '%s_proxy_new_for_bus (\n'
-                     '    GBusType             bus_type,\n'
-                     '    GDBusProxyFlags      flags,\n'
-                     '    const gchar         *name,\n'
-                     '    const gchar         *object_path,\n'
-                     '    GCancellable        *cancellable,\n'
-                     '    GAsyncReadyCallback  callback,\n'
-                     '    gpointer             user_data)\n'
-                     '{\n'
-                     '  g_async_initable_new_async (%sTYPE_%s_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
-                     '}\n'
-                     '\n'
-                     %(i.name_lower, i.ns_upper, i.name_upper, i.name))
-        self.c.write('/**\n'
-                     ' * %s_proxy_new_for_bus_finish:\n'
-                     ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_proxy_new_for_bus().\n'
-                     ' * @error: Return location for error or %%NULL\n'
-                     ' *\n'
-                     ' * Finishes an operation started with %s_proxy_new_for_bus().\n'
-                     ' *\n'
-                     ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n'
-                     %(i.name_lower, i.name_lower, i.name_lower, i.camel_name))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('%s *\n'
-                     '%s_proxy_new_for_bus_finish (\n'
-                     '    GAsyncResult        *res,\n'
-                     '    GError             **error)\n'
-                     '{\n'
-                     '  GObject *ret;\n'
-                     '  GObject *source_object;\n'
-                     '  source_object = g_async_result_get_source_object (res);\n'
-                     '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
-                     '  g_object_unref (source_object);\n'
-                     '  if (ret != NULL)\n'
-                     '    return %s%s (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper))
-        self.c.write(self.docbook_gen.expand(
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('void\n'
+                           '%s_proxy_new_for_bus (\n'
+                           '    GBusType             bus_type,\n'
+                           '    GDBusProxyFlags      flags,\n'
+                           '    const gchar         *name,\n'
+                           '    const gchar         *object_path,\n'
+                           '    GCancellable        *cancellable,\n'
+                           '    GAsyncReadyCallback  callback,\n'
+                           '    gpointer             user_data)\n'
+                           '{\n'
+                           '  g_async_initable_new_async (%sTYPE_%s_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
+                           '}\n'
+                           '\n'
+                           %(i.name_lower, i.ns_upper, i.name_upper, i.name))
+        self.outfile.write('/**\n'
+                           ' * %s_proxy_new_for_bus_finish:\n'
+                           ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %s_proxy_new_for_bus().\n'
+                           ' * @error: Return location for error or %%NULL\n'
+                           ' *\n'
+                           ' * Finishes an operation started with %s_proxy_new_for_bus().\n'
+                           ' *\n'
+                           ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n'
+                           %(i.name_lower, i.name_lower, i.name_lower, i.camel_name))
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('%s *\n'
+                           '%s_proxy_new_for_bus_finish (\n'
+                           '    GAsyncResult        *res,\n'
+                           '    GError             **error)\n'
+                           '{\n'
+                           '  GObject *ret;\n'
+                           '  GObject *source_object;\n'
+                           '  source_object = g_async_result_get_source_object (res);\n'
+                           '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
+                           '  g_object_unref (source_object);\n'
+                           '  if (ret != NULL)\n'
+                           '    return %s%s (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper))
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %s_proxy_new_for_bus_sync:\n'
                 ' * @bus_type: A #GBusType.\n'
@@ -2061,379 +2087,377 @@ class CodeGenerator:
                 ' *\n'
                 ' * Returns: (transfer full) (type %sProxy): The constructed proxy object or %%NULL if @error is set.\n'
                 %(i.name_lower, i.name_lower, i.name_lower, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('%s *\n'
-                     '%s_proxy_new_for_bus_sync (\n'
-                     '    GBusType             bus_type,\n'
-                     '    GDBusProxyFlags      flags,\n'
-                     '    const gchar         *name,\n'
-                     '    const gchar         *object_path,\n'
-                     '    GCancellable        *cancellable,\n'
-                     '    GError             **error)\n'
-                     '{\n'
-                     '  GInitable *ret;\n'
-                     '  ret = g_initable_new (%sTYPE_%s_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
-                     '  if (ret != NULL)\n'
-                     '    return %s%s (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.name, i.ns_upper, i.name_upper))
-        self.c.write('\n')
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('%s *\n'
+                           '%s_proxy_new_for_bus_sync (\n'
+                           '    GBusType             bus_type,\n'
+                           '    GDBusProxyFlags      flags,\n'
+                           '    const gchar         *name,\n'
+                           '    const gchar         *object_path,\n'
+                           '    GCancellable        *cancellable,\n'
+                           '    GError             **error)\n'
+                           '{\n'
+                           '  GInitable *ret;\n'
+                           '  ret = g_initable_new (%sTYPE_%s_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "%s", NULL);\n'
+                           '  if (ret != NULL)\n'
+                           '    return %s%s (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.name, i.ns_upper, i.name_upper))
+        self.outfile.write('\n')
 
     # ---------------------------------------------------------------------------------------------------
 
     def generate_skeleton(self, i):
         # class boilerplate
-        self.c.write('/* ------------------------------------------------------------------------ */\n'
-                     '\n')
+        self.outfile.write('/* ------------------------------------------------------------------------ */\n'
+                           '\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sSkeleton:\n'
                 ' *\n'
                 ' * The #%sSkeleton structure contains only private data and should only be accessed using the provided API.\n'
                 %(i.camel_name, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('\n')
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sSkeletonClass:\n'
                 ' * @parent_class: The parent class.\n'
                 ' *\n'
                 ' * Class structure for #%sSkeleton.\n'
                 %(i.camel_name, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('\n')
-
-        self.c.write('struct _%sSkeletonPrivate\n'
-                     '{\n'
-                     '  GValue *properties;\n'
-                     '  GList *changed_properties;\n'
-                     '  GSource *changed_properties_idle_source;\n'
-                     '  GMainContext *context;\n'
-                     '  GMutex lock;\n'
-                     '};\n'
-                     '\n'%i.camel_name)
-
-        self.c.write('static void\n'
-                     '_%s_skeleton_handle_method_call (\n'
-                     '  GDBusConnection *connection G_GNUC_UNUSED,\n'
-                     '  const gchar *sender G_GNUC_UNUSED,\n'
-                     '  const gchar *object_path G_GNUC_UNUSED,\n'
-                     '  const gchar *interface_name,\n'
-                     '  const gchar *method_name,\n'
-                     '  GVariant *parameters,\n'
-                     '  GDBusMethodInvocation *invocation,\n'
-                     '  gpointer user_data)\n'
-                     '{\n'
-                     '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
-                     '  _ExtendedGDBusMethodInfo *info;\n'
-                     '  GVariantIter iter;\n'
-                     '  GVariant *child;\n'
-                     '  GValue *paramv;\n'
-                     '  gsize num_params;\n'
-                     '  guint num_extra;\n'
-                     '  gsize n;\n'
-                     '  guint signal_id;\n'
-                     '  GValue return_value = G_VALUE_INIT;\n'
-                     %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
-        self.c.write('  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);\n'
-                     '  g_assert (info != NULL);\n'
-                     %())
-        self.c.write ('  num_params = g_variant_n_children (parameters);\n'
-                      '  num_extra = info->pass_fdlist ? 3 : 2;'
-                      '  paramv = g_new0 (GValue, num_params + num_extra);\n'
-                      '  n = 0;\n'
-                      '  g_value_init (&paramv[n], %sTYPE_%s);\n'
-                      '  g_value_set_object (&paramv[n++], skeleton);\n'
-                      '  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);\n'
-                      '  g_value_set_object (&paramv[n++], invocation);\n'
-                      '  if (info->pass_fdlist)\n'
-                      '    {\n'
-                      '#ifdef G_OS_UNIX\n'
-                      '      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);\n'
-                      '      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));\n'
-                      '#else\n'
-                      '      g_assert_not_reached ();\n'
-                      '#endif\n'
-                      '    }\n'
-                      %(i.ns_upper, i.name_upper))
-        self.c.write('  g_variant_iter_init (&iter, parameters);\n'
-                     '  while ((child = g_variant_iter_next_value (&iter)) != NULL)\n'
-                     '    {\n'
-                     '      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];\n'
-                     '      if (arg_info->use_gvariant)\n'
-                     '        {\n'
-                     '          g_value_init (&paramv[n], G_TYPE_VARIANT);\n'
-                     '          g_value_set_variant (&paramv[n], child);\n'
-                     '          n++;\n'
-                     '        }\n'
-                     '      else\n'
-                     '        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);\n'
-                     '      g_variant_unref (child);\n'
-                     '    }\n'
-                     )
-        self.c.write('  signal_id = g_signal_lookup (info->signal_name, %sTYPE_%s);\n'
-                     %(i.ns_upper, i.name_upper))
-        self.c.write('  g_value_init (&return_value, G_TYPE_BOOLEAN);\n'
-                     '  g_signal_emitv (paramv, signal_id, 0, &return_value);\n'
-                     '  if (!g_value_get_boolean (&return_value))\n'
-                     '    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);\n'
-                     '  g_value_unset (&return_value);\n'
-                     )
-        self.c.write('  for (n = 0; n < num_params + num_extra; n++)\n'
-                     '    g_value_unset (&paramv[n]);\n'
-                     '  g_free (paramv);\n')
-        self.c.write('}\n'
-                     '\n')
-
-        self.c.write('static GVariant *\n'
-                     '_%s_skeleton_handle_get_property (\n'
-                     '  GDBusConnection *connection G_GNUC_UNUSED,\n'
-                     '  const gchar *sender G_GNUC_UNUSED,\n'
-                     '  const gchar *object_path G_GNUC_UNUSED,\n'
-                     '  const gchar *interface_name G_GNUC_UNUSED,\n'
-                     '  const gchar *property_name,\n'
-                     '  GError **error,\n'
-                     '  gpointer user_data)\n'
-                     '{\n'
-                     '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
-                     '  GValue value = G_VALUE_INIT;\n'
-                     '  GParamSpec *pspec;\n'
-                     '  _ExtendedGDBusPropertyInfo *info;\n'
-                     '  GVariant *ret;\n'
-                     %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
-        self.c.write('  ret = NULL;\n'
-                     '  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, property_name);\n'
-                     '  g_assert (info != NULL);\n'
-                     '  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);\n'
-                     '  if (pspec == NULL)\n'
-                     '    {\n'
-                     '      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %%s", property_name);\n'
-                     '    }\n'
-                     '  else\n'
-                     '    {\n'
-                     '      g_value_init (&value, pspec->value_type);\n'
-                     '      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);\n'
-                     '      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));\n'
-                     '      g_value_unset (&value);\n'
-                     '    }\n'
-                     '  return ret;\n'
-                     '}\n'
-                     '\n'
-                     %(i.name_lower))
-
-        self.c.write('static gboolean\n'
-                     '_%s_skeleton_handle_set_property (\n'
-                     '  GDBusConnection *connection G_GNUC_UNUSED,\n'
-                     '  const gchar *sender G_GNUC_UNUSED,\n'
-                     '  const gchar *object_path G_GNUC_UNUSED,\n'
-                     '  const gchar *interface_name G_GNUC_UNUSED,\n'
-                     '  const gchar *property_name,\n'
-                     '  GVariant *variant,\n'
-                     '  GError **error,\n'
-                     '  gpointer user_data)\n'
-                     '{\n'
-                     '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
-                     '  GValue value = G_VALUE_INIT;\n'
-                     '  GParamSpec *pspec;\n'
-                     '  _ExtendedGDBusPropertyInfo *info;\n'
-                     '  gboolean ret;\n'
-                     %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
-        self.c.write('  ret = FALSE;\n'
-                     '  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, property_name);\n'
-                     '  g_assert (info != NULL);\n'
-                     '  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);\n'
-                     '  if (pspec == NULL)\n'
-                     '    {\n'
-                     '      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %%s", property_name);\n'
-                     '    }\n'
-                     '  else\n'
-                     '    {\n'
-                     '      if (info->use_gvariant)\n'
-                     '        g_value_set_variant (&value, variant);\n'
-                     '      else\n'
-                     '        g_dbus_gvariant_to_gvalue (variant, &value);\n'
-                     '      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);\n'
-                     '      g_value_unset (&value);\n'
-                     '      ret = TRUE;\n'
-                     '    }\n'
-                     '  return ret;\n'
-                     '}\n'
-                     '\n'
-                     %(i.name_lower))
-
-
-        self.c.write('static const GDBusInterfaceVTable _%s_skeleton_vtable =\n'
-                     '{\n'
-                     '  _%s_skeleton_handle_method_call,\n'
-                     '  _%s_skeleton_handle_get_property,\n'
-                     '  _%s_skeleton_handle_set_property,\n'
-                     '  {NULL}\n'
-                     '};\n'
-                     '\n'%(i.name_lower, i.name_lower, i.name_lower, i.name_lower))
-
-        self.c.write('static GDBusInterfaceInfo *\n'
-                     '%s_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '  return %s_interface_info ();\n'
-                     %(i.name_lower, i.name_lower))
-        self.c.write('}\n'
-                     '\n')
-
-        self.c.write('static GDBusInterfaceVTable *\n'
-                     '%s_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '  return (GDBusInterfaceVTable *) &_%s_skeleton_vtable;\n'
-                     %(i.name_lower, i.name_lower))
-        self.c.write('}\n'
-                     '\n')
-
-        self.c.write('static GVariant *\n'
-                     '%s_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)\n'
-                     '{\n'
-                     '  %sSkeleton *skeleton = %s%s_SKELETON (_skeleton);\n'
-                     %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
-        self.c.write('\n'
-                     '  GVariantBuilder builder;\n'
-                     '  guint n;\n'
-                     '  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n'
-                     '  if (_%s_interface_info.parent_struct.properties == NULL)\n'
-                     '    goto out;\n'
-                     '  for (n = 0; _%s_interface_info.parent_struct.properties[n] != NULL; n++)\n'
-                     '    {\n'
-                     '      GDBusPropertyInfo *info = _%s_interface_info.parent_struct.properties[n];\n'
-                     '      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)\n'
-                     '        {\n'
-                     '          GVariant *value;\n'
-                     '          value = _%s_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "%s", info->name, NULL, skeleton);\n'
-                     '          if (value != NULL)\n'
-                     '            {\n'
-                     '              g_variant_take_ref (value);\n'
-                     '              g_variant_builder_add (&builder, "{sv}", info->name, value);\n'
-                     '              g_variant_unref (value);\n'
-                     '            }\n'
-                     '        }\n'
-                     '    }\n'
-                     'out:\n'
-                     '  return g_variant_builder_end (&builder);\n'
-                     '}\n'
-                     '\n'
-                     %(i.name_lower, i.name_lower, i.name_lower, i.name_lower, i.name))
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('\n')
+
+        self.outfile.write('struct _%sSkeletonPrivate\n'
+                           '{\n'
+                           '  GValue *properties;\n'
+                           '  GList *changed_properties;\n'
+                           '  GSource *changed_properties_idle_source;\n'
+                           '  GMainContext *context;\n'
+                           '  GMutex lock;\n'
+                           '};\n'
+                           '\n'%i.camel_name)
+
+        self.outfile.write('static void\n'
+                           '_%s_skeleton_handle_method_call (\n'
+                           '  GDBusConnection *connection G_GNUC_UNUSED,\n'
+                           '  const gchar *sender G_GNUC_UNUSED,\n'
+                           '  const gchar *object_path G_GNUC_UNUSED,\n'
+                           '  const gchar *interface_name,\n'
+                           '  const gchar *method_name,\n'
+                           '  GVariant *parameters,\n'
+                           '  GDBusMethodInvocation *invocation,\n'
+                           '  gpointer user_data)\n'
+                           '{\n'
+                           '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
+                           '  _ExtendedGDBusMethodInfo *info;\n'
+                           '  GVariantIter iter;\n'
+                           '  GVariant *child;\n'
+                           '  GValue *paramv;\n'
+                           '  gsize num_params;\n'
+                           '  guint num_extra;\n'
+                           '  gsize n;\n'
+                           '  guint signal_id;\n'
+                           '  GValue return_value = G_VALUE_INIT;\n'
+                           %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
+        self.outfile.write('  info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);\n'
+                           '  g_assert (info != NULL);\n'
+                           %())
+        self.outfile.write('  num_params = g_variant_n_children (parameters);\n'
+                           '  num_extra = info->pass_fdlist ? 3 : 2;'
+                           '  paramv = g_new0 (GValue, num_params + num_extra);\n'
+                           '  n = 0;\n'
+                           '  g_value_init (&paramv[n], %sTYPE_%s);\n'
+                           '  g_value_set_object (&paramv[n++], skeleton);\n'
+                           '  g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);\n'
+                           '  g_value_set_object (&paramv[n++], invocation);\n'
+                           '  if (info->pass_fdlist)\n'
+                           '    {\n'
+                           '#ifdef G_OS_UNIX\n'
+                           '      g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);\n'
+                           '      g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));\n'
+                           '#else\n'
+                           '      g_assert_not_reached ();\n'
+                           '#endif\n'
+                           '    }\n'
+                           %(i.ns_upper, i.name_upper))
+        self.outfile.write('  g_variant_iter_init (&iter, parameters);\n'
+                           '  while ((child = g_variant_iter_next_value (&iter)) != NULL)\n'
+                           '    {\n'
+                           '      _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];\n'
+                           '      if (arg_info->use_gvariant)\n'
+                           '        {\n'
+                           '          g_value_init (&paramv[n], G_TYPE_VARIANT);\n'
+                           '          g_value_set_variant (&paramv[n], child);\n'
+                           '          n++;\n'
+                           '        }\n'
+                           '      else\n'
+                           '        g_dbus_gvariant_to_gvalue (child, &paramv[n++]);\n'
+                           '      g_variant_unref (child);\n'
+                           '    }\n')
+        self.outfile.write('  signal_id = g_signal_lookup (info->signal_name, %sTYPE_%s);\n'
+                           %(i.ns_upper, i.name_upper))
+        self.outfile.write('  g_value_init (&return_value, G_TYPE_BOOLEAN);\n'
+                           '  g_signal_emitv (paramv, signal_id, 0, &return_value);\n'
+                           '  if (!g_value_get_boolean (&return_value))\n'
+                           '    g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);\n'
+                           '  g_value_unset (&return_value);\n')
+        self.outfile.write('  for (n = 0; n < num_params + num_extra; n++)\n'
+                           '    g_value_unset (&paramv[n]);\n'
+                           '  g_free (paramv);\n')
+        self.outfile.write('}\n'
+                           '\n')
+
+        self.outfile.write('static GVariant *\n'
+                           '_%s_skeleton_handle_get_property (\n'
+                           '  GDBusConnection *connection G_GNUC_UNUSED,\n'
+                           '  const gchar *sender G_GNUC_UNUSED,\n'
+                           '  const gchar *object_path G_GNUC_UNUSED,\n'
+                           '  const gchar *interface_name G_GNUC_UNUSED,\n'
+                           '  const gchar *property_name,\n'
+                           '  GError **error,\n'
+                           '  gpointer user_data)\n'
+                           '{\n'
+                           '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
+                           '  GValue value = G_VALUE_INIT;\n'
+                           '  GParamSpec *pspec;\n'
+                           '  _ExtendedGDBusPropertyInfo *info;\n'
+                           '  GVariant *ret;\n'
+                           %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
+        self.outfile.write('  ret = NULL;\n'
+                           '  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, property_name);\n'
+                           '  g_assert (info != NULL);\n'
+                           '  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);\n'
+                           '  if (pspec == NULL)\n'
+                           '    {\n'
+                           '      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %%s", property_name);\n'
+                           '    }\n'
+                           '  else\n'
+                           '    {\n'
+                           '      g_value_init (&value, pspec->value_type);\n'
+                           '      g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);\n'
+                           '      ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));\n'
+                           '      g_value_unset (&value);\n'
+                           '    }\n'
+                           '  return ret;\n'
+                           '}\n'
+                           '\n'
+                           %(i.name_lower))
+
+        self.outfile.write('static gboolean\n'
+                           '_%s_skeleton_handle_set_property (\n'
+                           '  GDBusConnection *connection G_GNUC_UNUSED,\n'
+                           '  const gchar *sender G_GNUC_UNUSED,\n'
+                           '  const gchar *object_path G_GNUC_UNUSED,\n'
+                           '  const gchar *interface_name G_GNUC_UNUSED,\n'
+                           '  const gchar *property_name,\n'
+                           '  GVariant *variant,\n'
+                           '  GError **error,\n'
+                           '  gpointer user_data)\n'
+                           '{\n'
+                           '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
+                           '  GValue value = G_VALUE_INIT;\n'
+                           '  GParamSpec *pspec;\n'
+                           '  _ExtendedGDBusPropertyInfo *info;\n'
+                           '  gboolean ret;\n'
+                           %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
+        self.outfile.write('  ret = FALSE;\n'
+                           '  info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_%s_interface_info.parent_struct, property_name);\n'
+                           '  g_assert (info != NULL);\n'
+                           '  pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);\n'
+                           '  if (pspec == NULL)\n'
+                           '    {\n'
+                           '      g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %%s", property_name);\n'
+                           '    }\n'
+                           '  else\n'
+                           '    {\n'
+                           '      if (info->use_gvariant)\n'
+                           '        g_value_set_variant (&value, variant);\n'
+                           '      else\n'
+                           '        g_dbus_gvariant_to_gvalue (variant, &value);\n'
+                           '      g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);\n'
+                           '      g_value_unset (&value);\n'
+                           '      ret = TRUE;\n'
+                           '    }\n'
+                           '  return ret;\n'
+                           '}\n'
+                           '\n'
+                           %(i.name_lower))
+
+
+        self.outfile.write('static const GDBusInterfaceVTable _%s_skeleton_vtable =\n'
+                           '{\n'
+                           '  _%s_skeleton_handle_method_call,\n'
+                           '  _%s_skeleton_handle_get_property,\n'
+                           '  _%s_skeleton_handle_set_property,\n'
+                           '  {NULL}\n'
+                           '};\n'
+                           '\n'%(i.name_lower, i.name_lower, i.name_lower, i.name_lower))
+
+        self.outfile.write('static GDBusInterfaceInfo *\n'
+                           '%s_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '  return %s_interface_info ();\n'
+                           %(i.name_lower, i.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
+
+        self.outfile.write('static GDBusInterfaceVTable *\n'
+                           '%s_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '  return (GDBusInterfaceVTable *) &_%s_skeleton_vtable;\n'
+                           %(i.name_lower, i.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
+
+        self.outfile.write('static GVariant *\n'
+                           '%s_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)\n'
+                           '{\n'
+                           '  %sSkeleton *skeleton = %s%s_SKELETON (_skeleton);\n'
+                           %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
+        self.outfile.write('\n'
+                           '  GVariantBuilder builder;\n'
+                           '  guint n;\n'
+                           '  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n'
+                           '  if (_%s_interface_info.parent_struct.properties == NULL)\n'
+                           '    goto out;\n'
+                           '  for (n = 0; _%s_interface_info.parent_struct.properties[n] != NULL; n++)\n'
+                           '    {\n'
+                           '      GDBusPropertyInfo *info = _%s_interface_info.parent_struct.properties[n];\n'
+                           '      if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)\n'
+                           '        {\n'
+                           '          GVariant *value;\n'
+                           '          value = _%s_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "%s", info->name, NULL, skeleton);\n'
+                           '          if (value != NULL)\n'
+                           '            {\n'
+                           '              g_variant_take_ref (value);\n'
+                           '              g_variant_builder_add (&builder, "{sv}", info->name, value);\n'
+                           '              g_variant_unref (value);\n'
+                           '            }\n'
+                           '        }\n'
+                           '    }\n'
+                           'out:\n'
+                           '  return g_variant_builder_end (&builder);\n'
+                           '}\n'
+                           '\n'
+                           %(i.name_lower, i.name_lower, i.name_lower, i.name_lower, i.name))
 
         if len(i.properties) > 0:
-            self.c.write('static gboolean _%s_emit_changed (gpointer user_data);\n'
-                         '\n'
-                         %(i.name_lower))
-
-        self.c.write('static void\n'
-                     '%s_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)\n'
-                     '{\n'
-                     %(i.name_lower))
+            self.outfile.write('static gboolean _%s_emit_changed (gpointer user_data);\n'
+                               '\n'
+                               %(i.name_lower))
+
+        self.outfile.write('static void\n'
+                           '%s_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)\n'
+                           '{\n'
+                           %(i.name_lower))
         if len(i.properties) > 0:
-            self.c.write('  %sSkeleton *skeleton = %s%s_SKELETON (_skeleton);\n'
-                         '  gboolean emit_changed = FALSE;\n'
-                         '\n'
-                         '  g_mutex_lock (&skeleton->priv->lock);\n'
-                         '  if (skeleton->priv->changed_properties_idle_source != NULL)\n'
-                         '    {\n'
-                         '      g_source_destroy (skeleton->priv->changed_properties_idle_source);\n'
-                         '      skeleton->priv->changed_properties_idle_source = NULL;\n'
-                         '      emit_changed = TRUE;\n'
-                         '    }\n'
-                         '  g_mutex_unlock (&skeleton->priv->lock);\n'
-                         '\n'
-                         '  if (emit_changed)\n'
-                         '    _%s_emit_changed (skeleton);\n'
-                         %(i.camel_name, i.ns_upper, i.name_upper, i.name_lower))
-        self.c.write('}\n'
-                     '\n')
+            self.outfile.write('  %sSkeleton *skeleton = %s%s_SKELETON (_skeleton);\n'
+                               '  gboolean emit_changed = FALSE;\n'
+                               '\n'
+                               '  g_mutex_lock (&skeleton->priv->lock);\n'
+                               '  if (skeleton->priv->changed_properties_idle_source != NULL)\n'
+                               '    {\n'
+                               '      g_source_destroy (skeleton->priv->changed_properties_idle_source);\n'
+                               '      skeleton->priv->changed_properties_idle_source = NULL;\n'
+                               '      emit_changed = TRUE;\n'
+                               '    }\n'
+                               '  g_mutex_unlock (&skeleton->priv->lock);\n'
+                               '\n'
+                               '  if (emit_changed)\n'
+                               '    _%s_emit_changed (skeleton);\n'
+                               %(i.camel_name, i.ns_upper, i.name_upper, i.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
 
         for s in i.signals:
-            self.c.write('static void\n'
-                         '_%s_on_signal_%s (\n'
-                         '    %s *object'%(i.name_lower, s.name_lower, i.camel_name))
+            self.outfile.write('static void\n'
+                               '_%s_on_signal_%s (\n'
+                               '    %s *object'%(i.name_lower, s.name_lower, i.camel_name))
             for a in s.args:
-                self.c.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
-            self.c.write(')\n'
-                         '{\n'
-                         '  %sSkeleton *skeleton = %s%s_SKELETON (object);\n\n'
-                         '  GList      *connections, *l;\n'
-                         '  GVariant   *signal_variant;\n'
-                         '  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));\n'
-                         %(i.camel_name, i.ns_upper, i.name_upper))
-            self.c.write('\n'
-                         '  signal_variant = g_variant_ref_sink (g_variant_new ("(')
+                self.outfile.write(',\n    %sarg_%s'%(a.ctype_in, a.name))
+            self.outfile.write(')\n'
+                               '{\n'
+                               '  %sSkeleton *skeleton = %s%s_SKELETON (object);\n\n'
+                               '  GList      *connections, *l;\n'
+                               '  GVariant   *signal_variant;\n'
+                               '  connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));\n'
+                               %(i.camel_name, i.ns_upper, i.name_upper))
+            self.outfile.write('\n'
+                               '  signal_variant = g_variant_ref_sink (g_variant_new ("(')
             for a in s.args:
-                self.c.write('%s'%(a.format_in))
-            self.c.write(')"')
+                self.outfile.write('%s'%(a.format_in))
+            self.outfile.write(')"')
             for a in s.args:
-                self.c.write(',\n                   arg_%s'%(a.name))
-            self.c.write('));\n')
-
-            self.c.write('  for (l = connections; l != NULL; l = l->next)\n'
-                         '    {\n'
-                         '      GDBusConnection *connection = l->data;\n'
-                         '      g_dbus_connection_emit_signal (connection,\n'
-                         '        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "%s", "%s",\n'
-                         '        signal_variant, NULL);\n'
-                         '    }\n'
-                         %(i.name, s.name))
-            self.c.write('  g_variant_unref (signal_variant);\n')
-            self.c.write('  g_list_free_full (connections, g_object_unref);\n')
-            self.c.write('}\n'
-                         '\n')
-
-        self.c.write('static void %s_skeleton_iface_init (%sIface *iface);\n'
-                     %(i.name_lower, i.camel_name))
-
-        self.c.write('#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n')
-        self.c.write('G_DEFINE_TYPE_WITH_CODE (%sSkeleton, %s_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,\n'%(i.camel_name, i.name_lower))
-        self.c.write('                         G_ADD_PRIVATE (%sSkeleton)\n'%(i.camel_name))
-        self.c.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_skeleton_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
-        self.c.write('#else\n')
-        self.c.write('G_DEFINE_TYPE_WITH_CODE (%sSkeleton, %s_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,\n'%(i.camel_name, i.name_lower))
-        self.c.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_skeleton_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
-        self.c.write('#endif\n')
+                self.outfile.write(',\n                   arg_%s'%(a.name))
+            self.outfile.write('));\n')
+
+            self.outfile.write('  for (l = connections; l != NULL; l = l->next)\n'
+                               '    {\n'
+                               '      GDBusConnection *connection = l->data;\n'
+                               '      g_dbus_connection_emit_signal (connection,\n'
+                               '        NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "%s", "%s",\n'
+                               '        signal_variant, NULL);\n'
+                               '    }\n'
+                               %(i.name, s.name))
+            self.outfile.write('  g_variant_unref (signal_variant);\n')
+            self.outfile.write('  g_list_free_full (connections, g_object_unref);\n')
+            self.outfile.write('}\n'
+                               '\n')
+
+        self.outfile.write('static void %s_skeleton_iface_init (%sIface *iface);\n'
+                           %(i.name_lower, i.camel_name))
+
+        self.outfile.write('#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n')
+        self.outfile.write('G_DEFINE_TYPE_WITH_CODE (%sSkeleton, %s_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,\n'%(i.camel_name, i.name_lower))
+        self.outfile.write('                         G_ADD_PRIVATE (%sSkeleton)\n'%(i.camel_name))
+        self.outfile.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_skeleton_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
+        self.outfile.write('#else\n')
+        self.outfile.write('G_DEFINE_TYPE_WITH_CODE (%sSkeleton, %s_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,\n'%(i.camel_name, i.name_lower))
+        self.outfile.write('                         G_IMPLEMENT_INTERFACE (%sTYPE_%s, %s_skeleton_iface_init))\n\n'%(i.ns_upper, i.name_upper, i.name_lower))
+        self.outfile.write('#endif\n')
 
         # finalize
-        self.c.write('static void\n'
-                     '%s_skeleton_finalize (GObject *object)\n'
-                     '{\n'%(i.name_lower))
-        self.c.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'%(i.camel_name, i.ns_upper, i.name_upper))
+        self.outfile.write('static void\n'
+                           '%s_skeleton_finalize (GObject *object)\n'
+                           '{\n'%(i.name_lower))
+        self.outfile.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'%(i.camel_name, i.ns_upper, i.name_upper))
         if len(i.properties) > 0:
-            self.c.write('  guint n;\n'
-                         '  for (n = 0; n < %d; n++)\n'
-                         '    g_value_unset (&skeleton->priv->properties[n]);\n'%(len(i.properties)))
-            self.c.write('  g_free (skeleton->priv->properties);\n')
-        self.c.write('  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);\n')
-        self.c.write('  if (skeleton->priv->changed_properties_idle_source != NULL)\n')
-        self.c.write('    g_source_destroy (skeleton->priv->changed_properties_idle_source);\n')
-        self.c.write('  g_main_context_unref (skeleton->priv->context);\n')
-        self.c.write('  g_mutex_clear (&skeleton->priv->lock);\n')
-        self.c.write('  G_OBJECT_CLASS (%s_skeleton_parent_class)->finalize (object);\n'
-                     '}\n'
-                     '\n'%(i.name_lower))
+            self.outfile.write('  guint n;\n'
+                               '  for (n = 0; n < %d; n++)\n'
+                               '    g_value_unset (&skeleton->priv->properties[n]);\n'%(len(i.properties)))
+            self.outfile.write('  g_free (skeleton->priv->properties);\n')
+        self.outfile.write('  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);\n')
+        self.outfile.write('  if (skeleton->priv->changed_properties_idle_source != NULL)\n')
+        self.outfile.write('    g_source_destroy (skeleton->priv->changed_properties_idle_source);\n')
+        self.outfile.write('  g_main_context_unref (skeleton->priv->context);\n')
+        self.outfile.write('  g_mutex_clear (&skeleton->priv->lock);\n')
+        self.outfile.write('  G_OBJECT_CLASS (%s_skeleton_parent_class)->finalize (object);\n'
+                           '}\n'
+                           '\n'%(i.name_lower))
 
         # property accessors (TODO: generate PropertiesChanged signals in setter)
         if len(i.properties) > 0:
-            self.c.write('static void\n'
-                         '%s_skeleton_get_property (GObject      *object,\n'
-                         '  guint         prop_id,\n'
-                         '  GValue       *value,\n'
-                         '  GParamSpec   *pspec G_GNUC_UNUSED)\n'
-                         '{\n'%(i.name_lower))
-            self.c.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'
-                         '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
-                         '  g_mutex_lock (&skeleton->priv->lock);\n'
-                         '  g_value_copy (&skeleton->priv->properties[prop_id - 1], value);\n'
-                         '  g_mutex_unlock (&skeleton->priv->lock);\n'
-                         %(i.camel_name, i.ns_upper, i.name_upper, len(i.properties)))
-            self.c.write('}\n'
-                         '\n')
+            self.outfile.write('static void\n'
+                               '%s_skeleton_get_property (GObject      *object,\n'
+                               '  guint         prop_id,\n'
+                            '  GValue       *value,\n'
+                            '  GParamSpec   *pspec G_GNUC_UNUSED)\n'
+                            '{\n'%(i.name_lower))
+            self.outfile.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'
+                               '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
+                               '  g_mutex_lock (&skeleton->priv->lock);\n'
+                               '  g_value_copy (&skeleton->priv->properties[prop_id - 1], value);\n'
+                               '  g_mutex_unlock (&skeleton->priv->lock);\n'
+                               %(i.camel_name, i.ns_upper, i.name_upper, len(i.properties)))
+            self.outfile.write('}\n'
+                               '\n')
 
             # if property is already scheduled then re-use entry.. though it could be
             # that the user did
@@ -2447,232 +2471,232 @@ class CodeGenerator:
             # change event. If the latest value is not different from the original
             # one, we can simply ignore the ChangedProperty
             #
-            self.c.write('static gboolean\n'
-                         '_%s_emit_changed (gpointer user_data)\n'
-                         '{\n'
-                         '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
-                         %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
-            self.c.write('  GList *l;\n'
-                         '  GVariantBuilder builder;\n'
-                         '  GVariantBuilder invalidated_builder;\n'
-                         '  guint num_changes;\n'
-                         '\n'
-                         '  g_mutex_lock (&skeleton->priv->lock);\n'
-                         '  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n'
-                         '  g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));\n'
-                         '  for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)\n'
-                         '    {\n'
-                         '      ChangedProperty *cp = l->data;\n'
-                         '      GVariant *variant;\n'
-                         '      const GValue *cur_value;\n'
-                         '\n'
-                         '      cur_value = &skeleton->priv->properties[cp->prop_id - 1];\n'
-                         '      if (!_g_value_equal (cur_value, &cp->orig_value))\n'
-                         '        {\n'
-                         '          variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));\n'
-                         '          g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);\n'
-                         '          g_variant_unref (variant);\n'
-                         '          num_changes++;\n'
-                         '        }\n'
-                         '    }\n'
-                         '  if (num_changes > 0)\n'
-                         '    {\n'
-                         '      GList *connections, *ll;\n'
-                         '      GVariant *signal_variant;'
-                         '\n'
-                         '      signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "%s",\n'
-                         '                                           &builder, &invalidated_builder));\n'
-                         '      connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));\n'
-                         '      for (ll = connections; ll != NULL; ll = ll->next)\n'
-                         '        {\n'
-                         '          GDBusConnection *connection = ll->data;\n'
-                         '\n'
-                         '          g_dbus_connection_emit_signal (connection,\n'
-                         '                                         NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),\n'
-                         '                                         "org.freedesktop.DBus.Properties",\n'
-                         '                                         "PropertiesChanged",\n'
-                         '                                         signal_variant,\n'
-                         '                                         NULL);\n'
-                         '        }\n'
-                         '      g_variant_unref (signal_variant);\n'
-                         '      g_list_free_full (connections, g_object_unref);\n'
-                         '    }\n'
-                         '  else\n'
-                         '    {\n'
-                         '      g_variant_builder_clear (&builder);\n'
-                         '      g_variant_builder_clear (&invalidated_builder);\n'
-                         '    }\n'
-                         %(i.name))
-            self.c.write('  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);\n')
-            self.c.write('  skeleton->priv->changed_properties = NULL;\n')
-            self.c.write('  skeleton->priv->changed_properties_idle_source = NULL;\n')
-            self.c.write('  g_mutex_unlock (&skeleton->priv->lock);\n')
-            self.c.write('  return FALSE;\n'
-                         '}\n'
-                         '\n')
+            self.outfile.write('static gboolean\n'
+                               '_%s_emit_changed (gpointer user_data)\n'
+                               '{\n'
+                               '  %sSkeleton *skeleton = %s%s_SKELETON (user_data);\n'
+                               %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper))
+            self.outfile.write('  GList *l;\n'
+                               '  GVariantBuilder builder;\n'
+                               '  GVariantBuilder invalidated_builder;\n'
+                               '  guint num_changes;\n'
+                               '\n'
+                               '  g_mutex_lock (&skeleton->priv->lock);\n'
+                               '  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));\n'
+                               '  g_variant_builder_init (&invalidated_builder, G_VARIANT_TYPE ("as"));\n'
+                               '  for (l = skeleton->priv->changed_properties, num_changes = 0; l != NULL; l = l->next)\n'
+                               '    {\n'
+                               '      ChangedProperty *cp = l->data;\n'
+                               '      GVariant *variant;\n'
+                               '      const GValue *cur_value;\n'
+                               '\n'
+                               '      cur_value = &skeleton->priv->properties[cp->prop_id - 1];\n'
+                               '      if (!_g_value_equal (cur_value, &cp->orig_value))\n'
+                               '        {\n'
+                               '          variant = g_dbus_gvalue_to_gvariant (cur_value, G_VARIANT_TYPE (cp->info->parent_struct.signature));\n'
+                               '          g_variant_builder_add (&builder, "{sv}", cp->info->parent_struct.name, variant);\n'
+                               '          g_variant_unref (variant);\n'
+                               '          num_changes++;\n'
+                               '        }\n'
+                               '    }\n'
+                               '  if (num_changes > 0)\n'
+                               '    {\n'
+                               '      GList *connections, *ll;\n'
+                               '      GVariant *signal_variant;'
+                               '\n'
+                               '      signal_variant = g_variant_ref_sink (g_variant_new ("(sa{sv}as)", "%s",\n'
+                               '                                           &builder, &invalidated_builder));\n'
+                               '      connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));\n'
+                               '      for (ll = connections; ll != NULL; ll = ll->next)\n'
+                               '        {\n'
+                               '          GDBusConnection *connection = ll->data;\n'
+                               '\n'
+                               '          g_dbus_connection_emit_signal (connection,\n'
+                               '                                         NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)),\n'
+                               '                                         "org.freedesktop.DBus.Properties",\n'
+                               '                                         "PropertiesChanged",\n'
+                               '                                         signal_variant,\n'
+                               '                                         NULL);\n'
+                               '        }\n'
+                               '      g_variant_unref (signal_variant);\n'
+                               '      g_list_free_full (connections, g_object_unref);\n'
+                               '    }\n'
+                               '  else\n'
+                               '    {\n'
+                               '      g_variant_builder_clear (&builder);\n'
+                               '      g_variant_builder_clear (&invalidated_builder);\n'
+                               '    }\n'
+                               %(i.name))
+            self.outfile.write('  g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);\n')
+            self.outfile.write('  skeleton->priv->changed_properties = NULL;\n')
+            self.outfile.write('  skeleton->priv->changed_properties_idle_source = NULL;\n')
+            self.outfile.write('  g_mutex_unlock (&skeleton->priv->lock);\n')
+            self.outfile.write('  return FALSE;\n'
+                               '}\n'
+                               '\n')
             # holding lock while being called
-            self.c.write('static void\n'
-                         '_%s_schedule_emit_changed (%sSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)\n'
-                         '{\n'
-                         '  ChangedProperty *cp;\n'
-                         '  GList *l;\n'
-                         '  cp = NULL;\n'
-                         '  for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)\n'
-                         '    {\n'
-                         '      ChangedProperty *i_cp = l->data;\n'
-                         '      if (i_cp->info == info)\n'
-                         '        {\n'
-                         '          cp = i_cp;\n'
-                         '          break;\n'
-                         '        }\n'
-                         '    }\n'
-                         %(i.name_lower, i.camel_name))
-            self.c.write('  if (cp == NULL)\n'
-                         '    {\n'
-                         '      cp = g_new0 (ChangedProperty, 1);\n'
-                         '      cp->prop_id = prop_id;\n'
-                         '      cp->info = info;\n'
-                         '      skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);\n'
-                         '      g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));\n'
-                         '      g_value_copy (orig_value, &cp->orig_value);\n'
-                         '    }\n'
-                         '}\n'
-                         '\n'
-                         %())
+            self.outfile.write('static void\n'
+                               '_%s_schedule_emit_changed (%sSkeleton *skeleton, const _ExtendedGDBusPropertyInfo *info, guint prop_id, const GValue *orig_value)\n'
+                               '{\n'
+                               '  ChangedProperty *cp;\n'
+                               '  GList *l;\n'
+                               '  cp = NULL;\n'
+                               '  for (l = skeleton->priv->changed_properties; l != NULL; l = l->next)\n'
+                               '    {\n'
+                               '      ChangedProperty *i_cp = l->data;\n'
+                               '      if (i_cp->info == info)\n'
+                               '        {\n'
+                               '          cp = i_cp;\n'
+                               '          break;\n'
+                               '        }\n'
+                               '    }\n'
+                               %(i.name_lower, i.camel_name))
+            self.outfile.write('  if (cp == NULL)\n'
+                               '    {\n'
+                               '      cp = g_new0 (ChangedProperty, 1);\n'
+                               '      cp->prop_id = prop_id;\n'
+                               '      cp->info = info;\n'
+                               '      skeleton->priv->changed_properties = g_list_prepend (skeleton->priv->changed_properties, cp);\n'
+                               '      g_value_init (&cp->orig_value, G_VALUE_TYPE (orig_value));\n'
+                               '      g_value_copy (orig_value, &cp->orig_value);\n'
+                               '    }\n'
+                               '}\n'
+                               '\n'
+                               %())
 
             # Postpone setting up the refresh source until the ::notify signal is emitted as
             # this allows use of g_object_freeze_notify()/g_object_thaw_notify() ...
             # This is useful when updating several properties from another thread than
             # where the idle will be emitted from
-            self.c.write('static void\n'
-                         '%s_skeleton_notify (GObject      *object,\n'
-                         '  GParamSpec *pspec G_GNUC_UNUSED)\n'
-                         '{\n'
-                         '  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'
-                         '  g_mutex_lock (&skeleton->priv->lock);\n'
-                         '  if (skeleton->priv->changed_properties != NULL &&\n'
-                         '      skeleton->priv->changed_properties_idle_source == NULL)\n'
-                         '    {\n'
-                         '      skeleton->priv->changed_properties_idle_source = g_idle_source_new ();\n'
-                         '      g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);\n'
-                         '      g_source_set_callback (skeleton->priv->changed_properties_idle_source, _%s_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);\n'
-                         '      g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _%s_emit_changed");\n'
-                         '      g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);\n'
-                         '      g_source_unref (skeleton->priv->changed_properties_idle_source);\n'
-                         '    }\n'
-                         '  g_mutex_unlock (&skeleton->priv->lock);\n'
-                         '}\n'
-                         '\n'
-                         %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper, i.name_lower, i.name_lower))
-
-            self.c.write('static void\n'
-                         '%s_skeleton_set_property (GObject      *object,\n'
-                         '  guint         prop_id,\n'
-                         '  const GValue *value,\n'
-                         '  GParamSpec   *pspec)\n'
-                         '{\n'%(i.name_lower))
-            self.c.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'
-                         '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
-                         '  g_mutex_lock (&skeleton->priv->lock);\n'
-                         '  g_object_freeze_notify (object);\n'
-                         '  if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))\n'
-                         '    {\n'
-                         '      if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)\n'
-                         '        _%s_schedule_emit_changed (skeleton, _%s_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);\n'
-                         '      g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);\n'
-                         '      g_object_notify_by_pspec (object, pspec);\n'
-                         '    }\n'
-                         '  g_mutex_unlock (&skeleton->priv->lock);\n'
-                         '  g_object_thaw_notify (object);\n'
-                         %(i.camel_name, i.ns_upper, i.name_upper, len(i.properties), i.name_lower, i.name_lower))
-            self.c.write('}\n'
-                         '\n')
-
-        self.c.write('static void\n'
-                     '%s_skeleton_init (%sSkeleton *skeleton)\n'
-                     '{\n'
-                     '#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n'
-                     '  skeleton->priv = %s_skeleton_get_instance_private (skeleton);\n'
-                     '#else\n'
-                     '  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, %sTYPE_%s_SKELETON, %sSkeletonPrivate);\n'
-                     '#endif\n\n'
-                     %(i.name_lower, i.camel_name,
-                       i.name_lower,
-                       i.ns_upper, i.name_upper, i.camel_name))
-        self.c.write('  g_mutex_init (&skeleton->priv->lock);\n')
-        self.c.write('  skeleton->priv->context = g_main_context_ref_thread_default ();\n')
+            self.outfile.write('static void\n'
+                               '%s_skeleton_notify (GObject      *object,\n'
+                               '  GParamSpec *pspec G_GNUC_UNUSED)\n'
+                               '{\n'
+                               '  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'
+                               '  g_mutex_lock (&skeleton->priv->lock);\n'
+                               '  if (skeleton->priv->changed_properties != NULL &&\n'
+                               '      skeleton->priv->changed_properties_idle_source == NULL)\n'
+                               '    {\n'
+                               '      skeleton->priv->changed_properties_idle_source = g_idle_source_new ();\n'
+                               '      g_source_set_priority (skeleton->priv->changed_properties_idle_source, G_PRIORITY_DEFAULT);\n'
+                               '      g_source_set_callback (skeleton->priv->changed_properties_idle_source, _%s_emit_changed, g_object_ref (skeleton), (GDestroyNotify) g_object_unref);\n'
+                               '      g_source_set_name (skeleton->priv->changed_properties_idle_source, "[generated] _%s_emit_changed");\n'
+                               '      g_source_attach (skeleton->priv->changed_properties_idle_source, skeleton->priv->context);\n'
+                               '      g_source_unref (skeleton->priv->changed_properties_idle_source);\n'
+                               '    }\n'
+                               '  g_mutex_unlock (&skeleton->priv->lock);\n'
+                               '}\n'
+                               '\n'
+                               %(i.name_lower, i.camel_name, i.ns_upper, i.name_upper, i.name_lower, i.name_lower))
+
+            self.outfile.write('static void\n'
+                               '%s_skeleton_set_property (GObject      *object,\n'
+                               '  guint         prop_id,\n'
+                               '  const GValue *value,\n'
+                               '  GParamSpec   *pspec)\n'
+                               '{\n'%(i.name_lower))
+            self.outfile.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'
+                               '  g_assert (prop_id != 0 && prop_id - 1 < %d);\n'
+                               '  g_mutex_lock (&skeleton->priv->lock);\n'
+                               '  g_object_freeze_notify (object);\n'
+                               '  if (!_g_value_equal (value, &skeleton->priv->properties[prop_id - 1]))\n'
+                               '    {\n'
+                               '      if (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)) != NULL)\n'
+                               '        _%s_schedule_emit_changed (skeleton, _%s_property_info_pointers[prop_id - 1], prop_id, &skeleton->priv->properties[prop_id - 1]);\n'
+                               '      g_value_copy (value, &skeleton->priv->properties[prop_id - 1]);\n'
+                               '      g_object_notify_by_pspec (object, pspec);\n'
+                               '    }\n'
+                               '  g_mutex_unlock (&skeleton->priv->lock);\n'
+                               '  g_object_thaw_notify (object);\n'
+                               %(i.camel_name, i.ns_upper, i.name_upper, len(i.properties), i.name_lower, i.name_lower))
+            self.outfile.write('}\n'
+                               '\n')
+
+        self.outfile.write('static void\n'
+                           '%s_skeleton_init (%sSkeleton *skeleton)\n'
+                           '{\n'
+                           '#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38\n'
+                           '  skeleton->priv = %s_skeleton_get_instance_private (skeleton);\n'
+                           '#else\n'
+                           '  skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, %sTYPE_%s_SKELETON, %sSkeletonPrivate);\n'
+                           '#endif\n\n'
+                           %(i.name_lower, i.camel_name,
+                             i.name_lower,
+                             i.ns_upper, i.name_upper, i.camel_name))
+        self.outfile.write('  g_mutex_init (&skeleton->priv->lock);\n')
+        self.outfile.write('  skeleton->priv->context = g_main_context_ref_thread_default ();\n')
         if len(i.properties) > 0:
-            self.c.write('  skeleton->priv->properties = g_new0 (GValue, %d);\n'%(len(i.properties)))
+            self.outfile.write('  skeleton->priv->properties = g_new0 (GValue, %d);\n'%(len(i.properties)))
             n = 0
             for p in i.properties:
-                self.c.write('  g_value_init (&skeleton->priv->properties[%d], %s);\n'%(n, p.arg.gtype))
+                self.outfile.write('  g_value_init (&skeleton->priv->properties[%d], %s);\n'%(n, p.arg.gtype))
                 n += 1
-        self.c.write('}\n'
-                     '\n')
+        self.outfile.write('}\n'
+                           '\n')
 
         # property vfuncs
         n = 0
         for p in i.properties:
-            self.c.write('static %s\n'
-                         '%s_skeleton_get_%s (%s *object)\n'
-                         '{\n'
-                         %(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name))
-            self.c.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'%(i.camel_name, i.ns_upper, i.name_upper))
-            self.c.write('  %svalue;\n'
-                         '  g_mutex_lock (&skeleton->priv->lock);\n'
-                         '  value = %s (&(skeleton->priv->properties[%d]));\n'
-                         '  g_mutex_unlock (&skeleton->priv->lock);\n'
-                         %(p.arg.ctype_in_g, p.arg.gvalue_get, n))
-            self.c.write('  return value;\n')
-            self.c.write('}\n')
-            self.c.write('\n')
+            self.outfile.write('static %s\n'
+                               '%s_skeleton_get_%s (%s *object)\n'
+                               '{\n'
+                               %(p.arg.ctype_in, i.name_lower, p.name_lower, i.camel_name))
+            self.outfile.write('  %sSkeleton *skeleton = %s%s_SKELETON (object);\n'%(i.camel_name, i.ns_upper, i.name_upper))
+            self.outfile.write('  %svalue;\n'
+                               '  g_mutex_lock (&skeleton->priv->lock);\n'
+                               '  value = %s (&(skeleton->priv->properties[%d]));\n'
+                               '  g_mutex_unlock (&skeleton->priv->lock);\n'
+                               %(p.arg.ctype_in_g, p.arg.gvalue_get, n))
+            self.outfile.write('  return value;\n')
+            self.outfile.write('}\n')
+            self.outfile.write('\n')
             n += 1
 
-        self.c.write('static void\n'
-                     '%s_skeleton_class_init (%sSkeletonClass *klass)\n'
-                     '{\n'
-                     '  GObjectClass *gobject_class;\n'
-                     '  GDBusInterfaceSkeletonClass *skeleton_class;\n'
-                     '\n'
-                     '  gobject_class = G_OBJECT_CLASS (klass);\n'
-                     '  gobject_class->finalize = %s_skeleton_finalize;\n'
-                     %(i.name_lower, i.camel_name, i.name_lower))
+        self.outfile.write('static void\n'
+                           '%s_skeleton_class_init (%sSkeletonClass *klass)\n'
+                           '{\n'
+                           '  GObjectClass *gobject_class;\n'
+                           '  GDBusInterfaceSkeletonClass *skeleton_class;\n'
+                           '\n'
+                           '  gobject_class = G_OBJECT_CLASS (klass);\n'
+                           '  gobject_class->finalize = %s_skeleton_finalize;\n'
+                           %(i.name_lower, i.camel_name, i.name_lower))
         if len(i.properties) > 0:
-            self.c.write('  gobject_class->get_property = %s_skeleton_get_property;\n'
-                         '  gobject_class->set_property = %s_skeleton_set_property;\n'
-                         '  gobject_class->notify       = %s_skeleton_notify;\n'
-                         '\n'%(i.name_lower, i.name_lower, i.name_lower))
-            self.c.write('\n'
-                         '  %s_override_properties (gobject_class, 1);\n'%(i.name_lower))
-        self.c.write('\n'
-                     '  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);\n');
-        self.c.write('  skeleton_class->get_info = %s_skeleton_dbus_interface_get_info;\n'%(i.name_lower))
-        self.c.write('  skeleton_class->get_properties = %s_skeleton_dbus_interface_get_properties;\n'%(i.name_lower))
-        self.c.write('  skeleton_class->flush = %s_skeleton_dbus_interface_flush;\n'%(i.name_lower))
-        self.c.write('  skeleton_class->get_vtable = %s_skeleton_dbus_interface_get_vtable;\n'%(i.name_lower))
-
-        self.c.write('\n'
-                     '#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38\n'
-                     '  g_type_class_add_private (klass, sizeof (%sSkeletonPrivate));\n'
-                     '#endif\n'%(i.camel_name))
-
-        self.c.write('}\n'
-                     '\n')
-
-        self.c.write('static void\n'
-                     '%s_skeleton_iface_init (%sIface *iface)\n'
-                     '{\n'
-                     %(i.name_lower, i.camel_name))
+            self.outfile.write('  gobject_class->get_property = %s_skeleton_get_property;\n'
+                               '  gobject_class->set_property = %s_skeleton_set_property;\n'
+                               '  gobject_class->notify       = %s_skeleton_notify;\n'
+                               '\n'%(i.name_lower, i.name_lower, i.name_lower))
+            self.outfile.write('\n'
+                               '  %s_override_properties (gobject_class, 1);\n'%(i.name_lower))
+        self.outfile.write('\n'
+                           '  skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);\n');
+        self.outfile.write('  skeleton_class->get_info = %s_skeleton_dbus_interface_get_info;\n'%(i.name_lower))
+        self.outfile.write('  skeleton_class->get_properties = %s_skeleton_dbus_interface_get_properties;\n'%(i.name_lower))
+        self.outfile.write('  skeleton_class->flush = %s_skeleton_dbus_interface_flush;\n'%(i.name_lower))
+        self.outfile.write('  skeleton_class->get_vtable = %s_skeleton_dbus_interface_get_vtable;\n'%(i.name_lower))
+
+        self.outfile.write('\n'
+                           '#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38\n'
+                           '  g_type_class_add_private (klass, sizeof (%sSkeletonPrivate));\n'
+                           '#endif\n'%(i.camel_name))
+
+        self.outfile.write('}\n'
+                           '\n')
+
+        self.outfile.write('static void\n'
+                           '%s_skeleton_iface_init (%sIface *iface)\n'
+                           '{\n'
+                           %(i.name_lower, i.camel_name))
         for s in i.signals:
-            self.c.write('  iface->%s = _%s_on_signal_%s;\n'
-                         %(s.name_lower, i.name_lower, s.name_lower))
+            self.outfile.write('  iface->%s = _%s_on_signal_%s;\n'
+                               %(s.name_lower, i.name_lower, s.name_lower))
         for p in i.properties:
-            self.c.write('  iface->get_%s = %s_skeleton_get_%s;\n'%(p.name_lower, i.name_lower, p.name_lower))
-        self.c.write('}\n'
-                     '\n')
+            self.outfile.write('  iface->get_%s = %s_skeleton_get_%s;\n'%(p.name_lower, i.name_lower, p.name_lower))
+        self.outfile.write('}\n'
+                           '\n')
 
         # constructors
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %s_skeleton_new:\n'
                 ' *\n'
@@ -2680,24 +2704,24 @@ class CodeGenerator:
                 ' *\n'
                 ' * Returns: (transfer full) (type %sSkeleton): The skeleton object.\n'
                 %(i.name_lower, i.name, i.camel_name), False))
-        self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-        self.c.write('%s *\n'
-                     '%s_skeleton_new (void)\n'
-                     '{\n'
-                     '  return %s%s (g_object_new (%sTYPE_%s_SKELETON, NULL));\n'
-                     '}\n'
-                     '\n'%(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
+        self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+        self.outfile.write('%s *\n'
+                           '%s_skeleton_new (void)\n'
+                           '{\n'
+                           '  return %s%s (g_object_new (%sTYPE_%s_SKELETON, NULL));\n'
+                           '}\n'
+                           '\n'%(i.camel_name, i.name_lower, i.ns_upper, i.name_upper, i.ns_upper, i.name_upper))
 
     # ---------------------------------------------------------------------------------------------------
 
     def generate_object(self):
-        self.c.write('/* ------------------------------------------------------------------------\n'
-                     ' * Code for Object, ObjectProxy and ObjectSkeleton\n'
-                     ' * ------------------------------------------------------------------------\n'
-                     ' */\n'
-                     '\n')
+        self.outfile.write('/* ------------------------------------------------------------------------\n'
+                           ' * Code for Object, ObjectProxy and ObjectSkeleton\n'
+                           ' * ------------------------------------------------------------------------\n'
+                           ' */\n'
+                           '\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * SECTION:%sObject\n'
                 ' * @title: %sObject\n'
@@ -2706,18 +2730,18 @@ class CodeGenerator:
                 ' * This section contains the #%sObject, #%sObjectProxy, and #%sObjectSkeleton types which make it easier to work with objects implementing generated types for D-Bus interfaces.\n'
                 ' */\n'
                 %(self.namespace, self.namespace, self.namespace, self.namespace, self.namespace), False))
-        self.c.write('\n')
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObject:\n'
                 ' *\n'
                 ' * The #%sObject type is a specialized container of interfaces.\n'
                 ' */\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write('\n')
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectIface:\n'
                 ' * @parent_iface: The parent interface.\n'
@@ -2725,17 +2749,17 @@ class CodeGenerator:
                 ' * Virtual table for the #%sObject interface.\n'
                 ' */\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write('\n')
-
-        self.c.write('typedef %sObjectIface %sObjectInterface;\n'%(self.namespace, self.namespace))
-        self.c.write('G_DEFINE_INTERFACE_WITH_CODE (%sObject, %sobject, G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT);)\n'%(self.namespace, self.ns_lower))
-        self.c.write('\n')
-        self.c.write('static void\n'
-                     '%sobject_default_init (%sObjectIface *iface)\n'
-                     '{\n'
-                     %(self.ns_lower, self.namespace));
+        self.outfile.write('\n')
+
+        self.outfile.write('typedef %sObjectIface %sObjectInterface;\n'%(self.namespace, self.namespace))
+        self.outfile.write('G_DEFINE_INTERFACE_WITH_CODE (%sObject, %sobject, G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT);)\n'%(self.namespace, self.ns_lower))
+        self.outfile.write('\n')
+        self.outfile.write('static void\n'
+                           '%sobject_default_init (%sObjectIface *iface)\n'
+                           '{\n'
+                           %(self.ns_lower, self.namespace));
         for i in self.ifaces:
-            self.c.write(self.docbook_gen.expand(
+            self.outfile.write(self.docbook_gen.expand(
                     '  /**\n'
                     '   * %sObject:%s:\n'
                     '   *\n'
@@ -2743,15 +2767,15 @@ class CodeGenerator:
                     '   *\n'
                     '   * Connect to the #GObject::notify signal to get informed of property changes.\n'
                     %(self.namespace, i.name_hyphen, i.camel_name, i.name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 2)
-            self.c.write('  g_object_interface_install_property (iface, g_param_spec_object ("%s", "%s", "%s", %sTYPE_%s, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));\n'
-                         '\n'
-                         %(i.name_hyphen, i.name_hyphen, i.name_hyphen, self.ns_upper, i.name_upper))
-        self.c.write('}\n'
-                     '\n')
+            self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 2)
+            self.outfile.write('  g_object_interface_install_property (iface, g_param_spec_object ("%s", "%s", "%s", %sTYPE_%s, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));\n'
+                               '\n'
+                               %(i.name_hyphen, i.name_hyphen, i.name_hyphen, self.ns_upper, i.name_upper))
+        self.outfile.write('}\n'
+                           '\n')
 
         for i in self.ifaces:
-            self.c.write(self.docbook_gen.expand(
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %sobject_get_%s:\n'
                     ' * @object: A #%sObject.\n'
@@ -2760,21 +2784,21 @@ class CodeGenerator:
                     ' *\n'
                     ' * Returns: (transfer full): A #%s that must be freed with g_object_unref() or %%NULL if @object does not implement the interface.\n'
                     %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name, i.name, i.camel_name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-            self.c.write ('%s *%sobject_get_%s (%sObject *object)\n'
-                          %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
-            self.c.write('{\n'
-                         '  GDBusInterface *ret;\n'
-                         '  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
-                         '  if (ret == NULL)\n'
-                         '    return NULL;\n'
-                         '  return %s%s (ret);\n'
-                         '}\n'
-                         '\n'
-                         %(i.name, self.ns_upper, i.name_upper))
-        self.c.write('\n')
+            self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+            self.outfile.write('%s *%sobject_get_%s (%sObject *object)\n'
+                               %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
+            self.outfile.write('{\n'
+                               '  GDBusInterface *ret;\n'
+                               '  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
+                               '  if (ret == NULL)\n'
+                               '    return NULL;\n'
+                               '  return %s%s (ret);\n'
+                               '}\n'
+                               '\n'
+                               %(i.name, self.ns_upper, i.name_upper))
+        self.outfile.write('\n')
         for i in self.ifaces:
-            self.c.write(self.docbook_gen.expand(
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %sobject_peek_%s: (skip)\n'
                     ' * @object: A #%sObject.\n'
@@ -2785,134 +2809,134 @@ class CodeGenerator:
                     ' *\n'
                     ' * Returns: (transfer none): A #%s or %%NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object.\n'
                     %(self.ns_lower, i.name_upper.lower(), self.namespace, self.ns_lower, i.name_upper.lower(), i.camel_name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-            self.c.write ('%s *%sobject_peek_%s (%sObject *object)\n'
-                          %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
-            self.c.write('{\n'
-                         '  GDBusInterface *ret;\n'
-                         '  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
-                         '  if (ret == NULL)\n'
-                         '    return NULL;\n'
-                         '  g_object_unref (ret);\n'
-                         '  return %s%s (ret);\n'
-                         '}\n'
-                         '\n'
-                         %(i.name, self.ns_upper, i.name_upper))
-        self.c.write('\n')
+            self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+            self.outfile.write('%s *%sobject_peek_%s (%sObject *object)\n'
+                               %(i.camel_name, self.ns_lower, i.name_upper.lower(), self.namespace))
+            self.outfile.write('{\n'
+                               '  GDBusInterface *ret;\n'
+                               '  ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
+                               '  if (ret == NULL)\n'
+                               '    return NULL;\n'
+                               '  g_object_unref (ret);\n'
+                               '  return %s%s (ret);\n'
+                               '}\n'
+                               '\n'
+                               %(i.name, self.ns_upper, i.name_upper))
+        self.outfile.write('\n')
         # shared by ObjectProxy and ObjectSkeleton classes
-        self.c.write('static void\n'
-                     '%sobject_notify (GDBusObject *object, GDBusInterface *interface)\n'
-                     '{\n'
-                     '  _ExtendedGDBusInterfaceInfo *info = (_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info (interface);\n'
-                     '  /* info can be NULL if the other end is using a D-Bus interface we don\'t know\n'
-                     '   * anything about, for example old generated code in this process talking to\n'
-                     '   * newer generated code in the other process. */\n'
-                     '  if (info != NULL)\n'
-                     '    g_object_notify (G_OBJECT (object), info->hyphen_name);\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower))
-
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write('static void\n'
+                           '%sobject_notify (GDBusObject *object, GDBusInterface *interface)\n'
+                           '{\n'
+                           '  _ExtendedGDBusInterfaceInfo *info = (_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info (interface);\n'
+                           '  /* info can be NULL if the other end is using a D-Bus interface we don\'t know\n'
+                           '   * anything about, for example old generated code in this process talking to\n'
+                           '   * newer generated code in the other process. */\n'
+                           '  if (info != NULL)\n'
+                           '    g_object_notify (G_OBJECT (object), info->hyphen_name);\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower))
+
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectProxy:\n'
                 ' *\n'
                 ' * The #%sObjectProxy structure contains only private data and should only be accessed using the provided API.\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('\n')
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(' */\n')
+        self.outfile.write('\n')
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectProxyClass:\n'
                 ' * @parent_class: The parent class.\n'
                 ' *\n'
                 ' * Class structure for #%sObjectProxy.\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('\n')
+        self.outfile.write(' */\n')
+        self.outfile.write('\n')
         # class boilerplate
-        self.c.write('static void\n'
-                     '%sobject_proxy__%sobject_iface_init (%sObjectIface *iface G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_lower, self.namespace))
-        self.c.write('static void\n'
-                     '%sobject_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface)\n'
-                     '{\n'
-                     '  iface->interface_added = %sobject_notify;\n'
-                     '  iface->interface_removed = %sobject_notify;\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_lower, self.ns_lower))
-        self.c.write('\n')
-        self.c.write('G_DEFINE_TYPE_WITH_CODE (%sObjectProxy, %sobject_proxy, G_TYPE_DBUS_OBJECT_PROXY,\n'
-                     '                         G_IMPLEMENT_INTERFACE (%sTYPE_OBJECT, %sobject_proxy__%sobject_iface_init)\n'
-                     '                         G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, %sobject_proxy__g_dbus_object_iface_init))\n'
-                     '\n'
-                     %(self.namespace, self.ns_lower, self.ns_upper, self.ns_lower, self.ns_lower, self.ns_lower))
+        self.outfile.write('static void\n'
+                           '%sobject_proxy__%sobject_iface_init (%sObjectIface *iface G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_lower, self.namespace))
+        self.outfile.write('static void\n'
+                           '%sobject_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface)\n'
+                           '{\n'
+                           '  iface->interface_added = %sobject_notify;\n'
+                           '  iface->interface_removed = %sobject_notify;\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_lower, self.ns_lower))
+        self.outfile.write('\n')
+        self.outfile.write('G_DEFINE_TYPE_WITH_CODE (%sObjectProxy, %sobject_proxy, G_TYPE_DBUS_OBJECT_PROXY,\n'
+                           '                         G_IMPLEMENT_INTERFACE (%sTYPE_OBJECT, %sobject_proxy__%sobject_iface_init)\n'
+                           '                         G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, %sobject_proxy__g_dbus_object_iface_init))\n'
+                           '\n'
+                           %(self.namespace, self.ns_lower, self.ns_upper, self.ns_lower, self.ns_lower, self.ns_lower))
         # class boilerplate
-        self.c.write('static void\n'
-                     '%sobject_proxy_init (%sObjectProxy *object G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '}\n'
-                     '\n'%(self.ns_lower, self.namespace))
-        self.c.write('static void\n'
-                     '%sobject_proxy_set_property (GObject      *gobject,\n'
-                     '  guint         prop_id,\n'
-                     '  const GValue *value G_GNUC_UNUSED,\n'
-                     '  GParamSpec   *pspec)\n'
-                     '{\n'
-                     '  G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
-                     %(self.ns_lower))
-        self.c.write('}\n'
-                     '\n'%())
-        self.c.write('static void\n'
-                     '%sobject_proxy_get_property (GObject      *gobject,\n'
-                     '  guint         prop_id,\n'
-                     '  GValue       *value,\n'
-                     '  GParamSpec   *pspec)\n'
-                     '{\n'
-                     '  %sObjectProxy *object = %sOBJECT_PROXY (gobject);\n'
-                     '  GDBusInterface *interface;\n'
-                     '\n'
-                     '  switch (prop_id)\n'
-                     '    {\n'
-                     %(self.ns_lower, self.namespace, self.ns_upper))
+        self.outfile.write('static void\n'
+                           '%sobject_proxy_init (%sObjectProxy *object G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '}\n'
+                           '\n'%(self.ns_lower, self.namespace))
+        self.outfile.write('static void\n'
+                           '%sobject_proxy_set_property (GObject      *gobject,\n'
+                           '  guint         prop_id,\n'
+                           '  const GValue *value G_GNUC_UNUSED,\n'
+                           '  GParamSpec   *pspec)\n'
+                           '{\n'
+                           '  G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
+                           %(self.ns_lower))
+        self.outfile.write('}\n'
+                           '\n'%())
+        self.outfile.write('static void\n'
+                           '%sobject_proxy_get_property (GObject      *gobject,\n'
+                           '  guint         prop_id,\n'
+                           '  GValue       *value,\n'
+                           '  GParamSpec   *pspec)\n'
+                           '{\n'
+                           '  %sObjectProxy *object = %sOBJECT_PROXY (gobject);\n'
+                           '  GDBusInterface *interface;\n'
+                           '\n'
+                           '  switch (prop_id)\n'
+                           '    {\n'
+                           %(self.ns_lower, self.namespace, self.ns_upper))
         n = 1
         for i in self.ifaces:
-            self.c.write('    case %d:\n'
-                         '      interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
-                         '      g_value_take_object (value, interface);\n'
-                         '      break;\n'
-                         '\n'
-                         %(n, i.name))
+            self.outfile.write('    case %d:\n'
+                               '      interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
+                               '      g_value_take_object (value, interface);\n'
+                               '      break;\n'
+                               '\n'
+                               %(n, i.name))
             n += 1
-        self.c.write('    default:\n'
-                     '      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
-                     '      break;\n'
-                     '  }\n'
-                     '}\n'
-                     '\n'%())
-        self.c.write('static void\n'
-                     '%sobject_proxy_class_init (%sObjectProxyClass *klass)\n'
-                     '{\n'
-                     '  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);\n'
-                     '\n'
-                     '  gobject_class->set_property = %sobject_proxy_set_property;\n'
-                     '  gobject_class->get_property = %sobject_proxy_get_property;\n'
-                     '\n'
-                     %(self.ns_lower, self.namespace, self.ns_lower, self.ns_lower))
+        self.outfile.write('    default:\n'
+                           '      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
+                           '      break;\n'
+                           '  }\n'
+                           '}\n'
+                           '\n'%())
+        self.outfile.write('static void\n'
+                           '%sobject_proxy_class_init (%sObjectProxyClass *klass)\n'
+                           '{\n'
+                           '  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);\n'
+                           '\n'
+                           '  gobject_class->set_property = %sobject_proxy_set_property;\n'
+                           '  gobject_class->get_property = %sobject_proxy_get_property;\n'
+                           '\n'
+                           %(self.ns_lower, self.namespace, self.ns_lower, self.ns_lower))
         n = 1
         for i in self.ifaces:
-            self.c.write('  g_object_class_override_property (gobject_class, %d, "%s");'
-                         '\n'
-                         %(n, i.name_hyphen))
+            self.outfile.write('  g_object_class_override_property (gobject_class, %d, "%s");'
+                               '\n'
+                               %(n, i.name_hyphen))
             n += 1
-        self.c.write('}\n'
-                     '\n')
+        self.outfile.write('}\n'
+                           '\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_proxy_new:\n'
                 ' * @connection: A #GDBusConnection.\n'
@@ -2923,7 +2947,7 @@ class CodeGenerator:
                 ' * Returns: (transfer full): The proxy object.\n'
                 ' */\n'
                 %(self.ns_lower), False))
-        self.c.write('%sObjectProxy *\n'
+        self.outfile.write('%sObjectProxy *\n'
                      '%sobject_proxy_new (GDBusConnection *connection,\n'
                      '  const gchar *object_path)\n'
                      '{\n'
@@ -2933,130 +2957,130 @@ class CodeGenerator:
                      '}\n'
                      '\n'%(self.namespace, self.ns_lower, self.ns_upper, self.ns_upper))
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectSkeleton:\n'
                 ' *\n'
                 ' * The #%sObjectSkeleton structure contains only private data and should only be accessed using the provided API.\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('\n')
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(' */\n')
+        self.outfile.write('\n')
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectSkeletonClass:\n'
                 ' * @parent_class: The parent class.\n'
                 ' *\n'
                 ' * Class structure for #%sObjectSkeleton.\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('\n')
+        self.outfile.write(' */\n')
+        self.outfile.write('\n')
         # class boilerplate
-        self.c.write('static void\n'
-                     '%sobject_skeleton__%sobject_iface_init (%sObjectIface *iface G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_lower, self.namespace))
-        self.c.write('\n')
-        self.c.write('static void\n'
-                     '%sobject_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface)\n'
-                     '{\n'
-                     '  iface->interface_added = %sobject_notify;\n'
-                     '  iface->interface_removed = %sobject_notify;\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_lower, self.ns_lower))
-        self.c.write('G_DEFINE_TYPE_WITH_CODE (%sObjectSkeleton, %sobject_skeleton, G_TYPE_DBUS_OBJECT_SKELETON,\n'
-                     '                         G_IMPLEMENT_INTERFACE (%sTYPE_OBJECT, %sobject_skeleton__%sobject_iface_init)\n'
-                     '                         G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, %sobject_skeleton__g_dbus_object_iface_init))\n'
-                     '\n'
-                     %(self.namespace, self.ns_lower, self.ns_upper, self.ns_lower, self.ns_lower, self.ns_lower))
+        self.outfile.write('static void\n'
+                           '%sobject_skeleton__%sobject_iface_init (%sObjectIface *iface G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_lower, self.namespace))
+        self.outfile.write('\n')
+        self.outfile.write('static void\n'
+                           '%sobject_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface)\n'
+                           '{\n'
+                           '  iface->interface_added = %sobject_notify;\n'
+                           '  iface->interface_removed = %sobject_notify;\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_lower, self.ns_lower))
+        self.outfile.write('G_DEFINE_TYPE_WITH_CODE (%sObjectSkeleton, %sobject_skeleton, G_TYPE_DBUS_OBJECT_SKELETON,\n'
+                           '                         G_IMPLEMENT_INTERFACE (%sTYPE_OBJECT, %sobject_skeleton__%sobject_iface_init)\n'
+                           '                         G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, %sobject_skeleton__g_dbus_object_iface_init))\n'
+                           '\n'
+                           %(self.namespace, self.ns_lower, self.ns_upper, self.ns_lower, self.ns_lower, self.ns_lower))
         # class boilerplate
-        self.c.write('static void\n'
-                     '%sobject_skeleton_init (%sObjectSkeleton *object G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '}\n'
-                     '\n'%(self.ns_lower, self.namespace))
-        self.c.write('static void\n'
-                     '%sobject_skeleton_set_property (GObject      *gobject,\n'
-                     '  guint         prop_id,\n'
-                     '  const GValue *value,\n'
-                     '  GParamSpec   *pspec)\n'
-                     '{\n'
-                     '  %sObjectSkeleton *object = %sOBJECT_SKELETON (gobject);\n'
-                     '  GDBusInterfaceSkeleton *interface;\n'
-                     '\n'
-                     '  switch (prop_id)\n'
-                     '    {\n'
-                     %(self.ns_lower, self.namespace, self.ns_upper))
+        self.outfile.write('static void\n'
+                           '%sobject_skeleton_init (%sObjectSkeleton *object G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '}\n'
+                           '\n'%(self.ns_lower, self.namespace))
+        self.outfile.write('static void\n'
+                           '%sobject_skeleton_set_property (GObject      *gobject,\n'
+                           '  guint         prop_id,\n'
+                           '  const GValue *value,\n'
+                           '  GParamSpec   *pspec)\n'
+                           '{\n'
+                           '  %sObjectSkeleton *object = %sOBJECT_SKELETON (gobject);\n'
+                           '  GDBusInterfaceSkeleton *interface;\n'
+                           '\n'
+                           '  switch (prop_id)\n'
+                           '    {\n'
+                           %(self.ns_lower, self.namespace, self.ns_upper))
         n = 1
         for i in self.ifaces:
-            self.c.write('    case %d:\n'
-                         '      interface = g_value_get_object (value);\n'
-                         '      if (interface != NULL)\n'
-                         '        {\n'
-                         '          g_warn_if_fail (%sIS_%s (interface));\n'
-                         '          g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);\n'
-                         '        }\n'
-                         '      else\n'
-                         '        {\n'
-                         '          g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "%s");\n'
-                         '        }\n'
-                         '      break;\n'
-                         '\n'
-                         %(n, self.ns_upper, i.name_upper, i.name))
+            self.outfile.write('    case %d:\n'
+                               '      interface = g_value_get_object (value);\n'
+                               '      if (interface != NULL)\n'
+                               '        {\n'
+                               '          g_warn_if_fail (%sIS_%s (interface));\n'
+                               '          g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);\n'
+                               '        }\n'
+                               '      else\n'
+                               '        {\n'
+                               '          g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "%s");\n'
+                               '        }\n'
+                               '      break;\n'
+                               '\n'
+                               %(n, self.ns_upper, i.name_upper, i.name))
             n += 1
-        self.c.write('    default:\n'
+        self.outfile.write('    default:\n'
                      '      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
                      '      break;\n'
                      '  }\n'
                      '}\n'
                      '\n'%())
-        self.c.write('static void\n'
-                     '%sobject_skeleton_get_property (GObject      *gobject,\n'
-                     '  guint         prop_id,\n'
-                     '  GValue       *value,\n'
-                     '  GParamSpec   *pspec)\n'
-                     '{\n'
-                     '  %sObjectSkeleton *object = %sOBJECT_SKELETON (gobject);\n'
-                     '  GDBusInterface *interface;\n'
-                     '\n'
-                     '  switch (prop_id)\n'
-                     '    {\n'
-                     %(self.ns_lower, self.namespace, self.ns_upper))
+        self.outfile.write('static void\n'
+                           '%sobject_skeleton_get_property (GObject      *gobject,\n'
+                           '  guint         prop_id,\n'
+                           '  GValue       *value,\n'
+                           '  GParamSpec   *pspec)\n'
+                           '{\n'
+                           '  %sObjectSkeleton *object = %sOBJECT_SKELETON (gobject);\n'
+                           '  GDBusInterface *interface;\n'
+                           '\n'
+                           '  switch (prop_id)\n'
+                           '    {\n'
+                           %(self.ns_lower, self.namespace, self.ns_upper))
         n = 1
         for i in self.ifaces:
-            self.c.write('    case %d:\n'
-                         '      interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
-                         '      g_value_take_object (value, interface);\n'
-                         '      break;\n'
-                         '\n'
-                         %(n, i.name))
+            self.outfile.write('    case %d:\n'
+                               '      interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "%s");\n'
+                               '      g_value_take_object (value, interface);\n'
+                               '      break;\n'
+                               '\n'
+                               %(n, i.name))
             n += 1
-        self.c.write('    default:\n'
-                     '      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
-                     '      break;\n'
-                     '  }\n'
-                     '}\n'
-                     '\n'%())
-        self.c.write('static void\n'
-                     '%sobject_skeleton_class_init (%sObjectSkeletonClass *klass)\n'
-                     '{\n'
-                     '  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);\n'
-                     '\n'
-                     '  gobject_class->set_property = %sobject_skeleton_set_property;\n'
-                     '  gobject_class->get_property = %sobject_skeleton_get_property;\n'
-                     '\n'
-                     %(self.ns_lower, self.namespace, self.ns_lower, self.ns_lower))
+        self.outfile.write('    default:\n'
+                           '      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);\n'
+                           '      break;\n'
+                           '  }\n'
+                           '}\n'
+                           '\n'%())
+        self.outfile.write('static void\n'
+                           '%sobject_skeleton_class_init (%sObjectSkeletonClass *klass)\n'
+                           '{\n'
+                           '  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);\n'
+                           '\n'
+                           '  gobject_class->set_property = %sobject_skeleton_set_property;\n'
+                           '  gobject_class->get_property = %sobject_skeleton_get_property;\n'
+                           '\n'
+                           %(self.ns_lower, self.namespace, self.ns_lower, self.ns_lower))
         n = 1
         for i in self.ifaces:
-            self.c.write('  g_object_class_override_property (gobject_class, %d, "%s");'
-                         '\n'
-                         %(n, i.name_hyphen))
+            self.outfile.write('  g_object_class_override_property (gobject_class, %d, "%s");'
+                               '\n'
+                               %(n, i.name_hyphen))
             n += 1
-        self.c.write('}\n'
-                     '\n')
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write('}\n'
+                           '\n')
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_skeleton_new:\n'
                 ' * @object_path: An object path.\n'
@@ -3066,15 +3090,15 @@ class CodeGenerator:
                 ' * Returns: (transfer full): The skeleton object.\n'
                 ' */\n'
                 %(self.ns_lower), False))
-        self.c.write('%sObjectSkeleton *\n'
-                     '%sobject_skeleton_new (const gchar *object_path)\n'
-                     '{\n'
-                     '  g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);\n'
-                     '  return %sOBJECT_SKELETON (g_object_new (%sTYPE_OBJECT_SKELETON, "g-object-path", object_path, NULL));\n'
-                     '}\n'
-                     '\n'%(self.namespace, self.ns_lower, self.ns_upper, self.ns_upper))
+        self.outfile.write('%sObjectSkeleton *\n'
+                           '%sobject_skeleton_new (const gchar *object_path)\n'
+                           '{\n'
+                           '  g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);\n'
+                           '  return %sOBJECT_SKELETON (g_object_new (%sTYPE_OBJECT_SKELETON, "g-object-path", object_path, NULL));\n'
+                           '}\n'
+                           '\n'%(self.namespace, self.ns_lower, self.ns_upper, self.ns_upper))
         for i in self.ifaces:
-            self.c.write(self.docbook_gen.expand(
+            self.outfile.write(self.docbook_gen.expand(
                     '/**\n'
                     ' * %sobject_skeleton_set_%s:\n'
                     ' * @object: A #%sObjectSkeleton.\n'
@@ -3082,25 +3106,25 @@ class CodeGenerator:
                     ' *\n'
                     ' * Sets the #%s instance for the D-Bus interface #%s on @object.\n'
                     %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name, i.camel_name, i.name), False))
-            self.write_gtkdoc_deprecated_and_since_and_close(i, self.c, 0)
-            self.c.write ('void %sobject_skeleton_set_%s (%sObjectSkeleton *object, %s *interface_)\n'
-                          %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name))
-            self.c.write('{\n'
-                         '  g_object_set (G_OBJECT (object), "%s", interface_, NULL);\n'
-                         '}\n'
-                         '\n'
-                         %(i.name_hyphen))
-        self.c.write('\n')
+            self.write_gtkdoc_deprecated_and_since_and_close(i, self.outfile, 0)
+            self.outfile.write('void %sobject_skeleton_set_%s (%sObjectSkeleton *object, %s *interface_)\n'
+                               %(self.ns_lower, i.name_upper.lower(), self.namespace, i.camel_name))
+            self.outfile.write('{\n'
+                               '  g_object_set (G_OBJECT (object), "%s", interface_, NULL);\n'
+                               '}\n'
+                               '\n'
+                               %(i.name_hyphen))
+        self.outfile.write('\n')
 
 
     def generate_object_manager_client(self):
-        self.c.write('/* ------------------------------------------------------------------------\n'
-                     ' * Code for ObjectManager client\n'
-                     ' * ------------------------------------------------------------------------\n'
-                     ' */\n'
-                     '\n')
+        self.outfile.write('/* ------------------------------------------------------------------------\n'
+                           ' * Code for ObjectManager client\n'
+                           ' * ------------------------------------------------------------------------\n'
+                           ' */\n'
+                           '\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * SECTION:%sObjectManagerClient\n'
                 ' * @title: %sObjectManagerClient\n'
@@ -3109,45 +3133,45 @@ class CodeGenerator:
                 ' * This section contains a #GDBusObjectManagerClient that uses %sobject_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc.\n'
                 ' */\n'
                 %(self.namespace, self.namespace, self.ns_lower), False))
-        self.c.write('\n')
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectManagerClient:\n'
                 ' *\n'
                 ' * The #%sObjectManagerClient structure contains only private data and should only be accessed using the provided API.\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('\n')
+        self.outfile.write(' */\n')
+        self.outfile.write('\n')
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sObjectManagerClientClass:\n'
                 ' * @parent_class: The parent class.\n'
                 ' *\n'
                 ' * Class structure for #%sObjectManagerClient.\n'
                 %(self.namespace, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('\n')
+        self.outfile.write(' */\n')
+        self.outfile.write('\n')
 
         # class boilerplate
-        self.c.write('G_DEFINE_TYPE (%sObjectManagerClient, %sobject_manager_client, G_TYPE_DBUS_OBJECT_MANAGER_CLIENT)\n'
-                     '\n'
-                     %(self.namespace, self.ns_lower))
+        self.outfile.write('G_DEFINE_TYPE (%sObjectManagerClient, %sobject_manager_client, G_TYPE_DBUS_OBJECT_MANAGER_CLIENT)\n'
+                           '\n'
+                           %(self.namespace, self.ns_lower))
 
         # class boilerplate
-        self.c.write('static void\n'
-                     '%sobject_manager_client_init (%sObjectManagerClient *manager G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '}\n'
-                     '\n'%(self.ns_lower, self.namespace))
-        self.c.write('static void\n'
-                     '%sobject_manager_client_class_init (%sObjectManagerClientClass *klass G_GNUC_UNUSED)\n'
-                     '{\n'
-                     '}\n'
-                     '\n'%(self.ns_lower, self.namespace))
-
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write('static void\n'
+                           '%sobject_manager_client_init (%sObjectManagerClient *manager G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '}\n'
+                           '\n'%(self.ns_lower, self.namespace))
+        self.outfile.write('static void\n'
+                           '%sobject_manager_client_class_init (%sObjectManagerClientClass *klass G_GNUC_UNUSED)\n'
+                           '{\n'
+                           '}\n'
+                           '\n'%(self.ns_lower, self.namespace))
+
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_manager_client_get_proxy_type:\n'
                 ' * @manager: A #GDBusObjectManagerClient.\n'
@@ -3159,35 +3183,35 @@ class CodeGenerator:
                 ' *\n'
                 ' * Returns: A #GDBusProxy derived #GType if @interface_name is not %%NULL, otherwise the #GType for #%sObjectProxy.\n'
                 %(self.ns_lower, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('GType\n'
-                     '%sobject_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED)\n'
-                     '{\n'
-                     %(self.ns_lower))
-        self.c.write('  static gsize once_init_value = 0;\n'
-                     '  static GHashTable *lookup_hash;\n'
-                     '  GType ret;\n'
-                     '\n'
-                     '  if (interface_name == NULL)\n'
-                     '    return %sTYPE_OBJECT_PROXY;\n'
-                     '  if (g_once_init_enter (&once_init_value))\n'
-                     '    {\n'
-                     '      lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);\n'
-                     %(self.ns_upper))
+        self.outfile.write(' */\n')
+        self.outfile.write('GType\n'
+                           '%sobject_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED)\n'
+                           '{\n'
+                           %(self.ns_lower))
+        self.outfile.write('  static gsize once_init_value = 0;\n'
+                           '  static GHashTable *lookup_hash;\n'
+                           '  GType ret;\n'
+                           '\n'
+                           '  if (interface_name == NULL)\n'
+                           '    return %sTYPE_OBJECT_PROXY;\n'
+                           '  if (g_once_init_enter (&once_init_value))\n'
+                           '    {\n'
+                           '      lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);\n'
+                           %(self.ns_upper))
         for i in self.ifaces:
-            self.c.write('      g_hash_table_insert (lookup_hash, (gpointer) "%s", GSIZE_TO_POINTER (%sTYPE_%s_PROXY));\n'
-                         %(i.name, i.ns_upper, i.name_upper))
-        self.c.write('      g_once_init_leave (&once_init_value, 1);\n'
-                     '    }\n')
-        self.c.write('  ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name));\n'
-                     '  if (ret == (GType) 0)\n'
-                     '    ret = G_TYPE_DBUS_PROXY;\n')
-        self.c.write('  return ret;\n'
-                     '}\n'
-                     '\n')
+            self.outfile.write('      g_hash_table_insert (lookup_hash, (gpointer) "%s", GSIZE_TO_POINTER (%sTYPE_%s_PROXY));\n'
+                               %(i.name, i.ns_upper, i.name_upper))
+        self.outfile.write('      g_once_init_leave (&once_init_value, 1);\n'
+                           '    }\n')
+        self.outfile.write('  ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name));\n'
+                           '  if (ret == (GType) 0)\n'
+                           '    ret = G_TYPE_DBUS_PROXY;\n')
+        self.outfile.write('  return ret;\n'
+                           '}\n'
+                           '\n')
 
         # constructors
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_manager_client_new:\n'
                 ' * @connection: A #GDBusConnection.\n'
@@ -3205,49 +3229,49 @@ class CodeGenerator:
                 ' *\n'
                 ' * See %sobject_manager_client_new_sync() for the synchronous, blocking version of this constructor.\n'
                 %(self.ns_lower, self.ns_lower, self.ns_lower, self.ns_lower), False))
-        self.c.write(' */\n')
-        self.c.write('void\n'
-                     '%sobject_manager_client_new (\n'
-                     '    GDBusConnection        *connection,\n'
-                     '    GDBusObjectManagerClientFlags  flags,\n'
-                     '    const gchar            *name,\n'
-                     '    const gchar            *object_path,\n'
-                     '    GCancellable           *cancellable,\n'
-                     '    GAsyncReadyCallback     callback,\n'
-                     '    gpointer                user_data)\n'
-                     '{\n'
-                     '  g_async_initable_new_async (%sTYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_upper, self.ns_lower))
-        self.c.write('/**\n'
-                     ' * %sobject_manager_client_new_finish:\n'
-                     ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %sobject_manager_client_new().\n'
-                     ' * @error: Return location for error or %%NULL\n'
-                     ' *\n'
-                     ' * Finishes an operation started with %sobject_manager_client_new().\n'
-                     ' *\n'
-                     ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n'
-                     %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace))
-        self.c.write(' */\n')
-        self.c.write('GDBusObjectManager *\n'
-                     '%sobject_manager_client_new_finish (\n'
-                     '    GAsyncResult        *res,\n'
-                     '    GError             **error)\n'
-                     '{\n'
-                     '  GObject *ret;\n'
-                     '  GObject *source_object;\n'
-                     '  source_object = g_async_result_get_source_object (res);\n'
-                     '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
-                     '  g_object_unref (source_object);\n'
-                     '  if (ret != NULL)\n'
-                     '    return G_DBUS_OBJECT_MANAGER (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower))
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(' */\n')
+        self.outfile.write('void\n'
+                           '%sobject_manager_client_new (\n'
+                           '    GDBusConnection        *connection,\n'
+                           '    GDBusObjectManagerClientFlags  flags,\n'
+                           '    const gchar            *name,\n'
+                           '    const gchar            *object_path,\n'
+                           '    GCancellable           *cancellable,\n'
+                           '    GAsyncReadyCallback     callback,\n'
+                           '    gpointer                user_data)\n'
+                           '{\n'
+                           '  g_async_initable_new_async (%sTYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_upper, self.ns_lower))
+        self.outfile.write('/**\n'
+                           ' * %sobject_manager_client_new_finish:\n'
+                           ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %sobject_manager_client_new().\n'
+                           ' * @error: Return location for error or %%NULL\n'
+                           ' *\n'
+                           ' * Finishes an operation started with %sobject_manager_client_new().\n'
+                           ' *\n'
+                           ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n'
+                           %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace))
+        self.outfile.write(' */\n')
+        self.outfile.write('GDBusObjectManager *\n'
+                           '%sobject_manager_client_new_finish (\n'
+                           '    GAsyncResult        *res,\n'
+                           '    GError             **error)\n'
+                           '{\n'
+                           '  GObject *ret;\n'
+                           '  GObject *source_object;\n'
+                           '  source_object = g_async_result_get_source_object (res);\n'
+                           '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
+                           '  g_object_unref (source_object);\n'
+                           '  if (ret != NULL)\n'
+                           '    return G_DBUS_OBJECT_MANAGER (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower))
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_manager_client_new_sync:\n'
                 ' * @connection: A #GDBusConnection.\n'
@@ -3265,27 +3289,27 @@ class CodeGenerator:
                 ' *\n'
                 ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n'
                 %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('GDBusObjectManager *\n'
-                     '%sobject_manager_client_new_sync (\n'
-                     '    GDBusConnection        *connection,\n'
-                     '    GDBusObjectManagerClientFlags  flags,\n'
-                     '    const gchar            *name,\n'
-                     '    const gchar            *object_path,\n'
-                     '    GCancellable           *cancellable,\n'
-                     '    GError                **error)\n'
-                     '{\n'
-                     '  GInitable *ret;\n'
-                     '  ret = g_initable_new (%sTYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
-                     '  if (ret != NULL)\n'
-                     '    return G_DBUS_OBJECT_MANAGER (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_upper, self.ns_lower))
-        self.c.write('\n')
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(' */\n')
+        self.outfile.write('GDBusObjectManager *\n'
+                           '%sobject_manager_client_new_sync (\n'
+                           '    GDBusConnection        *connection,\n'
+                           '    GDBusObjectManagerClientFlags  flags,\n'
+                           '    const gchar            *name,\n'
+                           '    const gchar            *object_path,\n'
+                           '    GCancellable           *cancellable,\n'
+                           '    GError                **error)\n'
+                           '{\n'
+                           '  GInitable *ret;\n'
+                           '  ret = g_initable_new (%sTYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
+                           '  if (ret != NULL)\n'
+                           '    return G_DBUS_OBJECT_MANAGER (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_upper, self.ns_lower))
+        self.outfile.write('\n')
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_manager_client_new_for_bus:\n'
                 ' * @bus_type: A #GBusType.\n'
@@ -3303,49 +3327,49 @@ class CodeGenerator:
                 ' *\n'
                 ' * See %sobject_manager_client_new_for_bus_sync() for the synchronous, blocking version of this constructor.\n'
                 %(self.ns_lower, self.ns_lower, self.ns_lower, self.ns_lower), False))
-        self.c.write(' */\n')
-        self.c.write('void\n'
-                     '%sobject_manager_client_new_for_bus (\n'
-                     '    GBusType                bus_type,\n'
-                     '    GDBusObjectManagerClientFlags  flags,\n'
-                     '    const gchar            *name,\n'
-                     '    const gchar            *object_path,\n'
-                     '    GCancellable           *cancellable,\n'
-                     '    GAsyncReadyCallback     callback,\n'
-                     '    gpointer                user_data)\n'
-                     '{\n'
-                     '  g_async_initable_new_async (%sTYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_upper, self.ns_lower))
-        self.c.write('/**\n'
-                     ' * %sobject_manager_client_new_for_bus_finish:\n'
-                     ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %sobject_manager_client_new_for_bus().\n'
-                     ' * @error: Return location for error or %%NULL\n'
-                     ' *\n'
-                     ' * Finishes an operation started with %sobject_manager_client_new_for_bus().\n'
-                     ' *\n'
-                     ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n'
-                     %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace))
-        self.c.write(' */\n')
-        self.c.write('GDBusObjectManager *\n'
-                     '%sobject_manager_client_new_for_bus_finish (\n'
-                     '    GAsyncResult        *res,\n'
-                     '    GError             **error)\n'
-                     '{\n'
-                     '  GObject *ret;\n'
-                     '  GObject *source_object;\n'
-                     '  source_object = g_async_result_get_source_object (res);\n'
-                     '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
-                     '  g_object_unref (source_object);\n'
-                     '  if (ret != NULL)\n'
-                     '    return G_DBUS_OBJECT_MANAGER (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower))
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(' */\n')
+        self.outfile.write('void\n'
+                           '%sobject_manager_client_new_for_bus (\n'
+                           '    GBusType                bus_type,\n'
+                           '    GDBusObjectManagerClientFlags  flags,\n'
+                           '    const gchar            *name,\n'
+                           '    const gchar            *object_path,\n'
+                           '    GCancellable           *cancellable,\n'
+                           '    GAsyncReadyCallback     callback,\n'
+                           '    gpointer                user_data)\n'
+                           '{\n'
+                           '  g_async_initable_new_async (%sTYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_upper, self.ns_lower))
+        self.outfile.write('/**\n'
+                           ' * %sobject_manager_client_new_for_bus_finish:\n'
+                           ' * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to %sobject_manager_client_new_for_bus().\n'
+                           ' * @error: Return location for error or %%NULL\n'
+                           ' *\n'
+                           ' * Finishes an operation started with %sobject_manager_client_new_for_bus().\n'
+                           ' *\n'
+                           ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n'
+                           %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace))
+        self.outfile.write(' */\n')
+        self.outfile.write('GDBusObjectManager *\n'
+                           '%sobject_manager_client_new_for_bus_finish (\n'
+                           '    GAsyncResult        *res,\n'
+                           '    GError             **error)\n'
+                           '{\n'
+                           '  GObject *ret;\n'
+                           '  GObject *source_object;\n'
+                           '  source_object = g_async_result_get_source_object (res);\n'
+                           '  ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);\n'
+                           '  g_object_unref (source_object);\n'
+                           '  if (ret != NULL)\n'
+                           '    return G_DBUS_OBJECT_MANAGER (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower))
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * %sobject_manager_client_new_for_bus_sync:\n'
                 ' * @bus_type: A #GBusType.\n'
@@ -3363,26 +3387,26 @@ class CodeGenerator:
                 ' *\n'
                 ' * Returns: (transfer full) (type %sObjectManagerClient): The constructed object manager client or %%NULL if @error is set.\n'
                 %(self.ns_lower, self.ns_lower, self.ns_lower, self.namespace), False))
-        self.c.write(' */\n')
-        self.c.write('GDBusObjectManager *\n'
-                     '%sobject_manager_client_new_for_bus_sync (\n'
-                     '    GBusType                bus_type,\n'
-                     '    GDBusObjectManagerClientFlags  flags,\n'
-                     '    const gchar            *name,\n'
-                     '    const gchar            *object_path,\n'
-                     '    GCancellable           *cancellable,\n'
-                     '    GError                **error)\n'
-                     '{\n'
-                     '  GInitable *ret;\n'
-                     '  ret = g_initable_new (%sTYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
-                     '  if (ret != NULL)\n'
-                     '    return G_DBUS_OBJECT_MANAGER (ret);\n'
-                     '  else\n'
-                     '    return NULL;\n'
-                     '}\n'
-                     '\n'
-                     %(self.ns_lower, self.ns_upper, self.ns_lower))
-        self.c.write('\n')
+        self.outfile.write(' */\n')
+        self.outfile.write('GDBusObjectManager *\n'
+                           '%sobject_manager_client_new_for_bus_sync (\n'
+                           '    GBusType                bus_type,\n'
+                           '    GDBusObjectManagerClientFlags  flags,\n'
+                           '    const gchar            *name,\n'
+                           '    const gchar            *object_path,\n'
+                           '    GCancellable           *cancellable,\n'
+                           '    GError                **error)\n'
+                           '{\n'
+                           '  GInitable *ret;\n'
+                           '  ret = g_initable_new (%sTYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", %sobject_manager_client_get_proxy_type, NULL);\n'
+                           '  if (ret != NULL)\n'
+                           '    return G_DBUS_OBJECT_MANAGER (ret);\n'
+                           '  else\n'
+                           '    return NULL;\n'
+                           '}\n'
+                           '\n'
+                           %(self.ns_lower, self.ns_upper, self.ns_lower))
+        self.outfile.write('\n')
 
     # ---------------------------------------------------------------------------------------------------
 
@@ -3401,7 +3425,7 @@ class CodeGenerator:
             elif isinstance(obj, dbustypes.Property):
                 thing = 'The D-Bus property'
             else:
-                raise RuntimeError('Cannot handle object ', obj)
+                print_error('Cannot handle object "{}"'.format(obj))
             f.write(self.docbook_gen.expand(
                     '%*s *\n'
                     '%*s * Deprecated: %s has been deprecated.\n'
@@ -3411,13 +3435,13 @@ class CodeGenerator:
     # ---------------------------------------------------------------------------------------------------
 
     def generate_interface_intro(self, i):
-        self.c.write('/* ------------------------------------------------------------------------\n'
-                     ' * Code for interface %s\n'
-                     ' * ------------------------------------------------------------------------\n'
-                     ' */\n'
-                     '\n'%(i.name))
+        self.outfile.write('/* ------------------------------------------------------------------------\n'
+                           ' * Code for interface %s\n'
+                           ' * ------------------------------------------------------------------------\n'
+                           ' */\n'
+                           '\n'%(i.name))
 
-        self.c.write(self.docbook_gen.expand(
+        self.outfile.write(self.docbook_gen.expand(
                 '/**\n'
                 ' * SECTION:%s\n'
                 ' * @title: %s\n'
@@ -3426,11 +3450,10 @@ class CodeGenerator:
                 ' * This section contains code for working with the #%s D-Bus interface in C.\n'
                 ' */\n'
                 %(i.camel_name, i.camel_name, i.name, i.name), False))
-        self.c.write('\n')
+        self.outfile.write('\n')
 
     def generate(self):
-        self.generate_intro()
-        self.declare_types()
+        self.generate_body_preamble()
         for i in self.ifaces:
             self.generate_interface_intro(i)
             self.generate_introspection_for_interface(i)
@@ -3444,5 +3467,3 @@ class CodeGenerator:
         if self.generate_objmanager:
             self.generate_object()
             self.generate_object_manager_client()
-
-        self.generate_outro()
index c727562..c08aa1a 100644 (file)
@@ -31,10 +31,8 @@ from . import parser
 # ----------------------------------------------------------------------------------------------------
 
 class DocbookCodeGenerator:
-    def __init__(self, ifaces, docbook, outdir):
+    def __init__(self, ifaces):
         self.ifaces = ifaces
-        self.docbook = docbook
-        self.outdir = outdir
         self.generate_expand_dicts()
 
     def print_method_prototype(self, i, m, in_synopsis):
@@ -270,9 +268,9 @@ class DocbookCodeGenerator:
         self.expand_member_dict_keys = sorted(self.expand_member_dict.keys(), reverse=True)
         self.expand_iface_dict_keys = sorted(self.expand_iface_dict.keys(), reverse=True)
 
-    def generate(self):
+    def generate(self, docbook, outdir):
         for i in self.ifaces:
-            self.out = open(path.join(self.outdir, '%s-%s.xml'%(self.docbook, i.name)), 'w')
+            self.out = open(path.join(outdir, '%s-%s.xml'%(docbook, i.name)), 'w')
             self.out.write(''%())
             self.out.write('<?xml version="1.0" encoding="utf-8"?>\n'%())
             self.out.write('<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"\n'%())
index 0f26f11..9d9099f 100755 (executable)
@@ -1,8 +1,10 @@
 # -*- Mode: Python -*-
+# coding=utf-8
 
 # GDBus - GLib D-Bus Library
 #
 # Copyright (C) 2008-2011 Red Hat, Inc.
+# Copyright (C) 2018 Iñigo Martínez <inigomartinez@gmail.com>
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 #
 # Author: David Zeuthen <davidz@redhat.com>
 
+import argparse
+import os
 import sys
-import optparse
-from os import path
 
 from . import config
-from . import utils
 from . import dbustypes
 from . import parser
 from . import codegen
 from . import codegen_docbook
+from .utils import print_error, print_warning
 
 def find_arg(arg_list, arg_name):
     for a in arg_list:
@@ -62,38 +64,38 @@ def apply_annotation(iface_list, iface, method, signal, prop, arg, key, value):
             break
 
     if iface_obj == None:
-        raise RuntimeError('No interface %s'%iface)
+        print_error('No interface "{}"'.format(iface))
 
     target_obj = None
 
     if method:
         method_obj = find_method(iface_obj, method)
         if method_obj == None:
-            raise RuntimeError('No method %s on interface %s'%(method, iface))
+            print_error('No method "{}" on interface "{}"'.format(method, iface))
         if arg:
             arg_obj = find_arg(method_obj.in_args, arg)
             if (arg_obj == None):
                 arg_obj = find_arg(method_obj.out_args, arg)
                 if (arg_obj == None):
-                    raise RuntimeError('No arg %s on method %s on interface %s'%(arg, method, iface))
+                    print_error('No arg "{}" on method "{}" on interface "{}"'.format(arg, method, iface))
             target_obj = arg_obj
         else:
             target_obj = method_obj
     elif signal:
         signal_obj = find_signal(iface_obj, signal)
         if signal_obj == None:
-            raise RuntimeError('No signal %s on interface %s'%(signal, iface))
+            print_error('No signal "{}" on interface "{}"'.format(signal, iface))
         if arg:
             arg_obj = find_arg(signal_obj.args, arg)
             if (arg_obj == None):
-                raise RuntimeError('No arg %s on signal %s on interface %s'%(arg, signal, iface))
+                print_error('No arg "{}" on signal "{}" on interface "{}"'.format(arg, signal, iface))
             target_obj = arg_obj
         else:
             target_obj = signal_obj
     elif prop:
         prop_obj = find_prop(iface_obj, prop)
         if prop_obj == None:
-            raise RuntimeError('No property %s on interface %s'%(prop, iface))
+            print_error('No property "{}" on interface "{}"'.format(prop, iface))
         target_obj = prop_obj
     else:
         target_obj = iface_obj
@@ -146,64 +148,107 @@ def apply_annotations(iface_list, annotation_list):
                     apply_annotation(iface_list, iface, None, None, None, None, key, value)
 
 def codegen_main():
-    arg_parser = optparse.OptionParser('%prog [options]')
-    arg_parser.add_option('', '--xml-files', metavar='FILE', action='append',
-                          help='D-Bus introspection XML file')
-    arg_parser.add_option('', '--interface-prefix', metavar='PREFIX', default='',
+    arg_parser = argparse.ArgumentParser(description='D-Bus code and documentation generator')
+    arg_parser.add_argument('files', metavar='FILE', nargs='*',
+                            help='D-Bus introspection XML file')
+    arg_parser.add_argument('--xml-files', metavar='FILE', action='append', default=[],
+                            help='D-Bus introspection XML file')
+    arg_parser.add_argument('--interface-prefix', metavar='PREFIX', default='',
                             help='String to strip from D-Bus interface names for code and docs')
-    arg_parser.add_option('', '--c-namespace', metavar='NAMESPACE', default='',
+    arg_parser.add_argument('--c-namespace', metavar='NAMESPACE', default='',
                             help='The namespace to use for generated C code')
-    arg_parser.add_option('', '--c-generate-object-manager', action='store_true',
+    arg_parser.add_argument('--c-generate-object-manager', action='store_true',
                             help='Generate a GDBusObjectManagerClient subclass when generating C code')
-    arg_parser.add_option('', '--generate-c-code', metavar='OUTFILES',
-                          help='Generate C code in OUTFILES.[ch]')
-    arg_parser.add_option('', '--c-generate-autocleanup', type='choice', choices=['none', 'objects', 'all'], default='objects',
-                             help='Generate autocleanup support')
-    arg_parser.add_option('', '--generate-docbook', metavar='OUTFILES',
-                          help='Generate Docbook in OUTFILES-org.Project.IFace.xml')
-    arg_parser.add_option('', '--annotate', nargs=3, action='append', metavar='WHAT KEY VALUE',
-                          help='Add annotation (may be used several times)')
-    arg_parser.add_option('', '--output-directory', metavar='OUTDIR', default='',
-                          help='Location to output generated files')
-    (opts, args) = arg_parser.parse_args();
+    arg_parser.add_argument('--c-generate-autocleanup', choices=['none', 'objects', 'all'], default='objects',
+                            help='Generate autocleanup support')
+    arg_parser.add_argument('--generate-docbook', metavar='OUTFILES',
+                            help='Generate Docbook in OUTFILES-org.Project.IFace.xml')
+    arg_parser.add_argument('--pragma-once', action='store_true',
+                            help='Use "pragma once" as the inclusion guard')
+    arg_parser.add_argument('--annotate', nargs=3, action='append', metavar='WHAT KEY VALUE',
+                            help='Add annotation (may be used several times)')
+
+    group = arg_parser.add_mutually_exclusive_group()
+    group.add_argument('--generate-c-code', metavar='OUTFILES',
+                       help='Generate C code in OUTFILES.[ch]')
+    group.add_argument('--header', action='store_true',
+                       help='Generate C headers')
+    group.add_argument('--body', action='store_true',
+                       help='Generate C code')
+
+    group = arg_parser.add_mutually_exclusive_group()
+    group.add_argument('--output', metavar='FILE',
+                       help='Write output into the specified file')
+    group.add_argument('--output-directory', metavar='OUTDIR', default='',
+                       help='Location to output generated files')
+
+    args = arg_parser.parse_args();
+
+    if len(args.xml_files) > 0:
+        print_warning('The "--xml-files" option is deprecated; use positional arguments instead')
+
+    if ((args.generate_c_code is not None or args.generate_docbook is not None) and
+            args.output is not None):
+        print_error('Using --generate-c-code or --generate-docbook and '
+                    '--output at the same time is not allowed')
+
+    if args.generate_c_code:
+        header_name = args.generate_c_code + '.h'
+        h_file = os.path.join(args.output_directory, header_name)
+        args.header = True
+        c_file = os.path.join(args.output_directory, args.generate_c_code + '.c')
+        args.body = True
+    elif args.header:
+        if args.output is None:
+            print_error('Using --header requires --output')
+
+        h_file = args.output
+        header_name = os.path.basename(h_file)
+    elif args.body:
+        if args.output is None:
+            print_error('Using --body requires --output')
+
+        c_file = args.output
+        header_name = os.path.splitext(c_file)[0] + '.h'
 
     all_ifaces = []
-    for fname in args:
-        f = open(fname, 'rb')
-        xml_data = f.read()
-        f.close()
+    for fname in args.files + args.xml_files:
+        with open(fname, 'rb') as f:
+            xml_data = f.read()
         parsed_ifaces = parser.parse_dbus_xml(xml_data)
         all_ifaces.extend(parsed_ifaces)
 
-    if opts.annotate != None:
-        apply_annotations(all_ifaces, opts.annotate)
+    if args.annotate != None:
+        apply_annotations(all_ifaces, args.annotate)
 
     for i in all_ifaces:
-        i.post_process(opts.interface_prefix, opts.c_namespace)
-
-    outdir = opts.output_directory
+        i.post_process(args.interface_prefix, args.c_namespace)
 
-    docbook = opts.generate_docbook
-    docbook_gen = codegen_docbook.DocbookCodeGenerator(all_ifaces, docbook, outdir);
+    docbook = args.generate_docbook
+    docbook_gen = codegen_docbook.DocbookCodeGenerator(all_ifaces);
     if docbook:
-        ret = docbook_gen.generate()
-
-    c_code = opts.generate_c_code
-    if c_code:
-        header_name = c_code + '.h'
-        h = open(path.join(outdir, header_name), 'w')
-        c = open(path.join(outdir, c_code + '.c'), 'w')
-        gen = codegen.CodeGenerator(all_ifaces,
-                                    opts.c_namespace,
-                                    opts.interface_prefix,
-                                    opts.c_generate_object_manager,
-                                    opts.c_generate_autocleanup,
-                                    docbook_gen,
-                                    h, c,
-                                    header_name)
-        ret = gen.generate()
-        h.close()
-        c.close()
+        ret = docbook_gen.generate(docbook, args.output_directory)
+
+    if args.header:
+        with open(h_file, 'w') as outfile:
+            gen = codegen.HeaderCodeGenerator(all_ifaces,
+                                              args.c_namespace,
+                                              args.c_generate_object_manager,
+                                              args.c_generate_autocleanup,
+                                              header_name,
+                                              args.pragma_once,
+                                              outfile)
+            gen.generate()
+
+    if args.body:
+        with open(c_file, 'w') as outfile:
+            gen = codegen.CodeGenerator(all_ifaces,
+                                        args.c_namespace,
+                                        args.c_generate_object_manager,
+                                        header_name,
+                                        docbook_gen,
+                                        outfile)
+            gen.generate()
 
     sys.exit(0)
 
index 2dc8e11..bfc69f5 100644 (file)
@@ -20,6 +20,7 @@
 # Author: David Zeuthen <davidz@redhat.com>
 
 from . import utils
+from .utils import print_error
 
 class Annotation:
     def __init__(self, key, value):
@@ -322,7 +323,7 @@ class Property:
         elif self.access == 'write':
             self.writable = True
         else:
-            raise RuntimeError('Invalid access type %s'%self.access)
+            print_error('Invalid access type "{}"'.format(self.access))
         self.doc_string = ''
         self.since = ''
         self.deprecated = False
@@ -399,7 +400,7 @@ class Interface:
             self.name_lower = cns_lower + overridden_name.lower()
             self.name_upper = overridden_name.upper()
 
-            #raise RuntimeError('handle Ugly_Case ', overridden_name)
+            #print_error('handle Ugly_Case "{}"'.format(overridden_name))
         else:
             if overridden_name:
                 name = overridden_name
index df8f845..f49136d 100644 (file)
@@ -23,6 +23,7 @@ import sys
 import xml.parsers.expat
 
 from . import dbustypes
+from .utils import print_error
 
 class DBusXMLParser:
     STATE_TOP = 'top'
@@ -203,7 +204,7 @@ class DBusXMLParser:
                 elif direction == 'out':
                     self._cur_object.out_args.append(arg)
                 else:
-                    raise RuntimeError('Invalid direction "%s"'%(direction))
+                    print_error('Invalid direction "{}"'.format(direction))
                 self._cur_object = arg
             elif name == DBusXMLParser.STATE_ANNOTATION:
                 self.state = DBusXMLParser.STATE_ANNOTATION
@@ -278,7 +279,7 @@ class DBusXMLParser:
                 self.state = DBusXMLParser.STATE_IGNORED
 
         else:
-            raise RuntimeError('Unhandled state "%s" while entering element with name "%s"'%(self.state, name))
+            print_error('Unhandled state "{}" while entering element with name "{}"'.format(self.state, name))
 
         self.state_stack.append(old_state)
         self._cur_object_stack.append(old_cur_object)
index 39e0463..bdfa703 100644 (file)
 # Author: David Zeuthen <davidz@redhat.com>
 
 import distutils.version
+import os
+import sys
+
+# pylint: disable=too-few-public-methods
+class Color:
+    '''ANSI Terminal colors'''
+    GREEN = '\033[1;32m'
+    BLUE = '\033[1;34m'
+    YELLOW = '\033[1;33m'
+    RED = '\033[1;31m'
+    END = '\033[0m'
+
+def print_color(msg, color=Color.END, prefix='MESSAGE'):
+    '''Print a string with a color prefix'''
+    if os.isatty(sys.stderr.fileno()):
+        real_prefix = '{start}{prefix}{end}'.format(start=color, prefix=prefix, end=Color.END)
+    else:
+        real_prefix = prefix
+    sys.stderr.write('{prefix}: {msg}\n'.format(prefix=real_prefix, msg=msg))
+
+def print_error(msg):
+    '''Print an error, and terminate'''
+    print_color(msg, color=Color.RED, prefix='ERROR')
+    sys.exit(1)
+
+def print_warning(msg, fatal=False):
+    '''Print a warning, and optionally terminate'''
+    if fatal:
+        color = Color.RED
+        prefix = 'ERROR'
+    else:
+        color = Color.YELLOW
+        prefix = 'WARNING'
+    print_color(msg, color, prefix)
+    if fatal:
+        sys.exit(1)
+
+def print_info(msg):
+    '''Print a message'''
+    print_color(msg, color=Color.GREEN, prefix='INFO')
 
 def strip_dots(s):
     ret = ''
index faee800..2191c11 100644 (file)
@@ -66,6 +66,9 @@
  * like `unix:tmpdir=/tmp/my-app-name`. The exact format of addresses
  * is explained in detail in the
  * [D-Bus specification](http://dbus.freedesktop.org/doc/dbus-specification.html#addresses).
+ *
+ * TCP D-Bus connections are supported, but accessing them via a proxy is
+ * currently not supported.
  */
 
 static gchar *get_session_address_platform_specific (GError **error);
@@ -675,6 +678,13 @@ g_dbus_address_connect (const gchar   *address_entry,
 
       g_assert (ret == NULL);
       client = g_socket_client_new ();
+
+      /* Disable proxy support to prevent a deadlock on startup, since loading a
+       * proxy resolver causes the GIO modules to be loaded, and there will
+       * almost certainly be one of them which then tries to use GDBus.
+       * See: https://bugzilla.gnome.org/show_bug.cgi?id=792499 */
+      g_socket_client_set_enable_proxy (client, FALSE);
+
       connection = g_socket_client_connect (client,
                                             connectable,
                                             cancellable,
index 9999806..6f922c4 100644 (file)
@@ -6006,7 +6006,8 @@ g_dbus_connection_call_sync_internal (GDBusConnection         *connection,
  * @method_name: the name of the method to invoke
  * @parameters: (nullable): a #GVariant tuple with parameters for the method
  *     or %NULL if not passing parameters
- * @reply_type: (nullable): the expected type of the reply, or %NULL
+ * @reply_type: (nullable): the expected type of the reply (which will be a
+ *     tuple), or %NULL
  * @flags: flags from the #GDBusCallFlags enumeration
  * @timeout_msec: the timeout in milliseconds, -1 to use the default
  *     timeout or %G_MAXINT for no timeout
@@ -6028,7 +6029,9 @@ g_dbus_connection_call_sync_internal (GDBusConnection         *connection,
  *
  * If @reply_type is non-%NULL then the reply will be checked for having this type and an
  * error will be raised if it does not match.  Said another way, if you give a @reply_type
- * then any non-%NULL return value will be of this type.
+ * then any non-%NULL return value will be of this type. Unless it’s
+ * %G_VARIANT_TYPE_UNIT, the @reply_type will be a tuple containing one or more
+ * values.
  *
  * If the @parameters #GVariant is floating, it is consumed. This allows
  * convenient 'inline' use of g_variant_new(), e.g.:
index b0219e9..b2c5035 100644 (file)
@@ -604,7 +604,7 @@ void             g_dbus_connection_signal_unsubscribe         (GDBusConnection
  *                 gboolean         incoming,
  *                 gpointer         user_data)
  * {
- *   /<!-- -->* inspect @message *<!-- -->/
+ *   // inspect @message
  *   return message;
  * }
  * ]|
@@ -637,10 +637,10 @@ void             g_dbus_connection_signal_unsubscribe         (GDBusConnection
  *
  *   error = NULL;
  *   copy = g_dbus_message_copy (message, &error);
- *   /<!-- -->* handle @error being is set *<!-- -->/
+ *   // handle @error being set
  *   g_object_unref (message);
  *
- *   /<!-- -->* modify @copy *<!-- -->/
+ *   // modify @copy
  *
  *   return copy;
  * }
index 4c82bd0..96bd520 100644 (file)
@@ -381,7 +381,7 @@ g_dbus_interface_skeleton_get_properties (GDBusInterfaceSkeleton *interface_)
  *
  * For example, an exported D-Bus interface may queue up property
  * changes and emit the
- * `org.freedesktop.DBus.Properties::PropertiesChanged`
+ * `org.freedesktop.DBus.Properties.PropertiesChanged`
  * signal later (e.g. in an idle handler). This technique is useful
  * for collapsing multiple property changes into one.
  *
index 717f269..be001ae 100644 (file)
@@ -2653,7 +2653,7 @@ g_dbus_message_to_blob (GDBusMessage          *message,
       g_set_error (error,
                    G_IO_ERROR,
                    G_IO_ERROR_INVALID_ARGUMENT,
-                   _("Message has %d file descriptors but the header field indicates %d file descriptors"),
+                   _("Number of file descriptors in message (%d) differs from header field (%d)"),
                    num_fds_in_message,
                    num_fds_according_to_header);
       goto out;
index fe28203..18ae9d1 100644 (file)
@@ -554,7 +554,7 @@ g_dbus_method_invocation_return_value_internal (GDBusMethodInvocation *invocatio
  *   g_dbus_method_invocation_return_value (invocation,
  *                                          g_variant_new ("(s)", result_string));
  *
- * /<!-- -->* Do not free @invocation here; returning a value does that *<!-- -->/
+ * // Do not free @invocation here; returning a value does that
  * ]|
  *
  * This method will take ownership of @invocation. See
index 14f4840..ef77e40 100644 (file)
@@ -53,7 +53,7 @@
  * both well-known and unique names.
  *
  * By default, #GDBusProxy will cache all properties (and listen to
- * changes) of the remote object, and proxy all signals that gets
+ * changes) of the remote object, and proxy all signals that get
  * emitted. This behaviour can be changed by passing suitable
  * #GDBusProxyFlags when the proxy is created. If the proxy is for a
  * well-known name, the property cache is flushed when the name owner
index 812b148..bf08d20 100644 (file)
@@ -534,6 +534,107 @@ g_file_get_path (GFile *file)
   return (* iface->get_path) (file);
 }
 
+/* Original commit introducing this in libgsystem:
+ *
+ *  fileutil: Handle recent: and trash: URIs
+ *
+ *  The gs_file_get_path_cached() was rather brittle in its handling
+ *  of URIs. It would assert() when a GFile didn't have a backing path
+ *  (such as when handling trash: or recent: URIs), and didn't know
+ *  how to get the target URI for those items either.
+ *
+ *  Make sure that we do not assert() when a backing path cannot be
+ *  found, and handle recent: and trash: URIs.
+ *
+ *  https://bugzilla.gnome.org/show_bug.cgi?id=708435
+ */
+static char *
+file_get_target_path (GFile *file)
+{
+  GFileInfo *info;
+  const char *target;
+  char *path;
+
+  info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NONE, NULL, NULL);
+  if (info == NULL)
+    return NULL;
+  target = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
+  path = g_filename_from_uri (target, NULL, NULL);
+  g_object_unref (info);
+
+  return path;
+}
+
+static const char *
+file_peek_path_generic (GFile *file)
+{
+  const char *path;
+  static GQuark _file_path_quark = 0;
+
+  if (G_UNLIKELY (_file_path_quark) == 0)
+    _file_path_quark = g_quark_from_static_string ("gio-file-path");
+
+  /* We need to be careful about threading, as two threads calling
+   * g_file_peek_path() on the same file could race: both would see
+   * (g_object_get_qdata(…) == NULL) to begin with, both would generate and add
+   * the path, but the second thread to add it would end up freeing the path
+   * set by the first thread. The first thread would still return the pointer
+   * to that freed path, though, resulting an a read-after-free. Handle that
+   * with a compare-and-swap loop. The g_object_*_qdata() functions are atomic. */
+
+  while (TRUE)
+    {
+      gchar *new_path = NULL;
+
+      path = g_object_get_qdata ((GObject*)file, _file_path_quark);
+
+      if (path != NULL)
+        break;
+
+      if (g_file_has_uri_scheme (file, "trash") ||
+          g_file_has_uri_scheme (file, "recent"))
+        new_path = file_get_target_path (file);
+      else
+        new_path = g_file_get_path (file);
+      if (new_path == NULL)
+        return NULL;
+
+      /* By passing NULL here, we ensure we never replace existing data: */
+      if (g_object_replace_qdata ((GObject *) file, _file_path_quark,
+                                  NULL, (gpointer) new_path,
+                                  (GDestroyNotify) g_free, NULL))
+        break;
+      else
+        g_free (new_path);
+    }
+
+  return path;
+}
+
+/**
+ * g_file_peek_path:
+ * @file: input #GFile
+ *
+ * Exactly like g_file_get_path(), but caches the result via
+ * g_object_set_qdata_full().  This is useful for example in C
+ * applications which mix `g_file_*` APIs with native ones.  It
+ * also avoids an extra duplicated string when possible, so will be
+ * generally more efficient.
+ *
+ * This call does no blocking I/O.
+ *
+ * Returns: (type filename) (nullable): string containing the #GFile's path,
+ *     or %NULL if no such path exists. The returned string is owned by @file.
+ * Since: 2.56
+ */
+const char *
+g_file_peek_path (GFile *file)
+{
+  if (G_IS_LOCAL_FILE (file))
+    return _g_local_file_get_filename ((GLocalFile *) file);
+  return file_peek_path_generic (file);
+}
+
 /**
  * g_file_get_uri:
  * @file: input #GFile
@@ -1060,7 +1161,7 @@ g_file_enumerate_children_finish (GFile         *file,
  * Utility function to check if a particular file exists. This is
  * implemented using g_file_query_info() and as such does blocking I/O.
  *
- * Note that in many cases it is racy to first check for file existence
+ * Note that in many cases it is [racy to first check for file existence](https://en.wikipedia.org/wiki/Time_of_check_to_time_of_use)
  * and then execute something based on the outcome of that, because the
  * file might have been created or removed in between the operations. The
  * general approach to handling that is to not check, but just do the
index 1717665..4aff644 100644 (file)
@@ -620,6 +620,8 @@ GLIB_AVAILABLE_IN_ALL
 char *                  g_file_get_basename               (GFile                      *file);
 GLIB_AVAILABLE_IN_ALL
 char *                  g_file_get_path                   (GFile                      *file);
+GLIB_AVAILABLE_IN_2_56
+const char *            g_file_peek_path                  (GFile                      *file);
 GLIB_AVAILABLE_IN_ALL
 char *                  g_file_get_uri                    (GFile                      *file);
 GLIB_AVAILABLE_IN_ALL
index c6ee8c4..bc844b9 100644 (file)
@@ -1816,12 +1816,12 @@ typedef enum /*< flags >*/ {
  *   spawned process that can be accessed with
  *   g_subprocess_get_stdout_pipe().
  * @G_SUBPROCESS_FLAGS_STDOUT_SILENCE: silence the stdout of the spawned
- *   process (ie: redirect to /dev/null).
+ *   process (ie: redirect to `/dev/null`).
  * @G_SUBPROCESS_FLAGS_STDERR_PIPE: create a pipe for the stderr of the
  *   spawned process that can be accessed with
  *   g_subprocess_get_stderr_pipe().
  * @G_SUBPROCESS_FLAGS_STDERR_SILENCE: silence the stderr of the spawned
- *   process (ie: redirect to /dev/null).
+ *   process (ie: redirect to `/dev/null`).
  * @G_SUBPROCESS_FLAGS_STDERR_MERGE: merge the stderr of the spawned
  *   process with whatever the stdout happens to be.  This is a good way
  *   of directing both streams to a common log file, for example.
@@ -1832,7 +1832,7 @@ typedef enum /*< flags >*/ {
  *
  * Flags to define the behaviour of a #GSubprocess.
  *
- * Note that the default for stdin is to redirect from /dev/null.  For
+ * Note that the default for stdin is to redirect from `/dev/null`.  For
  * stdout and stderr the default are for them to inherit the
  * corresponding descriptor from the calling process.
  *
index 1adfd93..1ead84c 100644 (file)
@@ -964,6 +964,7 @@ extern GType g_cocoa_notification_backend_get_type (void);
 #ifdef G_PLATFORM_WIN32
 
 #include <windows.h>
+extern GType _g_win32_network_monitor_get_type (void);
 
 static HMODULE gio_dll = NULL;
 
@@ -1180,6 +1181,9 @@ _g_io_modules_ensure_loaded (void)
       g_type_ensure (_g_network_monitor_netlink_get_type ());
       g_type_ensure (_g_network_monitor_nm_get_type ());
 #endif
+#ifdef G_OS_WIN32
+      g_type_ensure (_g_win32_network_monitor_get_type ());
+#endif
     }
 
   G_UNLOCK (loaded_dirs);
index 07f923a..4fa6412 100644 (file)
@@ -489,9 +489,10 @@ gboolean
 _g_uri_parse_authority (const char  *uri,
                        char       **host,
                        guint16     *port,
-                       char       **userinfo)
+                       char       **userinfo,
+                       GError     **error)
 {
-  char *tmp_str;
+  char *ascii_uri, *tmp_str;
   const char *start, *p, *at, *delim;
   char c;
 
@@ -506,6 +507,11 @@ _g_uri_parse_authority (const char  *uri,
   if (userinfo)
     *userinfo = NULL;
 
+  /* Catch broken URIs early by trying to convert to ASCII. */
+  ascii_uri = g_hostname_to_ascii (uri);
+  if (!ascii_uri)
+    goto error;
+
   /* From RFC 3986 Decodes:
    * URI          = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
    * hier-part    = "//" authority path-abempty
@@ -514,21 +520,21 @@ _g_uri_parse_authority (const char  *uri,
    */
 
   /* Check we have a valid scheme */
-  tmp_str = g_uri_parse_scheme (uri);
+  tmp_str = g_uri_parse_scheme (ascii_uri);
 
   if (tmp_str == NULL)
-    return FALSE;
+    goto error;
 
   g_free (tmp_str);
 
   /* Decode hier-part:
    *  hier-part   = "//" authority path-abempty
    */
-  p = uri;
+  p = ascii_uri;
   start = strstr (p, "//");
 
   if (start == NULL)
-    return FALSE;
+    goto error;
 
   start += 2;
 
@@ -559,7 +565,7 @@ _g_uri_parse_authority (const char  *uri,
            {
              if (!(g_ascii_isxdigit (p[0]) ||
                    g_ascii_isxdigit (p[1])))
-               return FALSE;
+          goto error;
 
              p++;
 
@@ -571,7 +577,7 @@ _g_uri_parse_authority (const char  *uri,
                strchr (G_URI_OTHER_UNRESERVED, c) ||
                strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
                c == ':'))
-           return FALSE;
+      goto error;
        }
 
       if (userinfo)
@@ -618,7 +624,7 @@ _g_uri_parse_authority (const char  *uri,
                strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
                c == ':' ||
                c == '.'))
-           goto error;
+      goto error;
        }
 
       if (host)
@@ -649,7 +655,7 @@ _g_uri_parse_authority (const char  *uri,
            {
              if (!(g_ascii_isxdigit (p[0]) ||
                    g_ascii_isxdigit (p[1])))
-               goto error;
+          goto error;
 
              p++;
 
@@ -660,7 +666,7 @@ _g_uri_parse_authority (const char  *uri,
          if (!(g_ascii_isalnum (c) ||
                strchr (G_URI_OTHER_UNRESERVED, c) ||
                strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c)))
-           goto error;
+      goto error;
        }
 
       if (host)
@@ -685,7 +691,7 @@ _g_uri_parse_authority (const char  *uri,
            break;
 
          if (!g_ascii_isdigit (c))
-           goto error;
+      goto error;
 
          tmp = (tmp * 10) + (c - '0');
 
@@ -696,9 +702,14 @@ _g_uri_parse_authority (const char  *uri,
        *port = (guint16) tmp;
     }
 
+  g_free (ascii_uri);
+
   return TRUE;
 
 error:
+  g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+               "Invalid URI ‘%s’", uri);
+
   if (host && *host)
     {
       g_free (*host);
@@ -711,6 +722,8 @@ error:
       *userinfo = NULL;
     }
 
+  g_free (ascii_uri);
+
   return FALSE;
 }
 
@@ -782,13 +795,8 @@ g_network_address_parse_uri (const gchar  *uri,
   gchar *hostname;
   guint16 port;
 
-  if (!_g_uri_parse_authority (uri, &hostname, &port, NULL))
-    {
-      g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
-                  "Invalid URI '%s'",
-                  uri);
-      return NULL;
-    }
+  if (!_g_uri_parse_authority (uri, &hostname, &port, NULL, error))
+    return NULL;
 
   if (port == 0)
     port = default_port;
index fe126d6..ed0feb8 100644 (file)
@@ -26,7 +26,8 @@ G_BEGIN_DECLS
 gboolean _g_uri_parse_authority            (const char       *uri,
                                            char            **host,
                                            guint16          *port,
-                                           char            **userinfo);
+                                           char            **userinfo,
+                                           GError          **error);
 gchar *  _g_uri_from_authority             (const gchar      *protocol,
                                            const gchar      *host,
                                            guint             port,
index b38f408..657c704 100644 (file)
@@ -309,13 +309,9 @@ g_network_monitor_default_init (GNetworkMonitorInterface *iface)
   /**
    * GNetworkMonitor::network-changed:
    * @monitor: a #GNetworkMonitor
-   * @available: the current value of #GNetworkMonitor:network-available
+   * @network_available: the current value of #GNetworkMonitor:network-available
    *
-   * Emitted when the network configuration changes. If @available is
-   * %TRUE, then some hosts may be reachable that were not reachable
-   * before, while others that were reachable before may no longer be
-   * reachable. If @available is %FALSE, then no remote hosts are
-   * reachable.
+   * Emitted when the network configuration changes.
    *
    * Since: 2.32
    */
index c863fbf..dcaeaad 100644 (file)
@@ -48,7 +48,7 @@ struct _GNetworkMonitorInterface {
   GTypeInterface g_iface;
 
   void     (*network_changed)  (GNetworkMonitor      *monitor,
-                               gboolean              available);
+                               gboolean              network_available);
 
   gboolean (*can_reach)        (GNetworkMonitor      *monitor,
                                GSocketConnectable   *connectable,
index 76f813e..8e837ed 100644 (file)
@@ -310,6 +310,8 @@ g_notification_get_priority (GNotification *notification)
  * Deprecated in favor of g_notification_set_priority().
  *
  * Since: 2.40
+ * Deprecated: 2.42: Since 2.42, this has been deprecated in favour of
+ *    g_notification_set_priority().
  */
 void
 g_notification_set_urgent (GNotification *notification,
@@ -317,7 +319,9 @@ g_notification_set_urgent (GNotification *notification,
 {
   g_return_if_fail (G_IS_NOTIFICATION (notification));
 
-  g_notification_set_priority (notification, G_NOTIFICATION_PRIORITY_URGENT);
+  notification->priority = urgent ?
+      G_NOTIFICATION_PRIORITY_URGENT :
+      G_NOTIFICATION_PRIORITY_NORMAL;
 }
 
 /**
index 9bd6b8c..40c649f 100644 (file)
@@ -178,6 +178,9 @@ g_pollable_output_stream_default_write_nonblocking (GPollableOutputStream  *stre
  * may happen if you call this method after a source triggers due
  * to having been cancelled.
  *
+ * Also note that if %G_IO_ERROR_WOULD_BLOCK is returned some underlying
+ * transports like D/TLS require that you send the same @buffer and @count.
+ *
  * Virtual: write_nonblocking
  * Returns: the number of bytes written, or -1 on error (including
  *   %G_IO_ERROR_WOULD_BLOCK).
index 698df3e..74a486e 100644 (file)
@@ -93,7 +93,7 @@ save_userinfo (GProxyAddressEnumeratorPrivate *priv,
       priv->proxy_password = NULL;
     }
   
-  if (_g_uri_parse_authority (proxy, NULL, NULL, &userinfo))
+  if (_g_uri_parse_authority (proxy, NULL, NULL, &userinfo, NULL))
     {
       if (userinfo)
        {
index 082274e..bd9528d 100644 (file)
 
 #include "gasyncresult.h"
 #include "gcancellable.h"
+#include "gtask.h"
 #include "giomodule.h"
 #include "giomodule-priv.h"
+#include "gnetworkingprivate.h"
 
 /**
  * SECTION:gproxyresolver
@@ -145,6 +147,9 @@ g_proxy_resolver_lookup (GProxyResolver  *resolver,
   g_return_val_if_fail (G_IS_PROXY_RESOLVER (resolver), NULL);
   g_return_val_if_fail (uri != NULL, NULL);
 
+  if (!_g_uri_parse_authority (uri, NULL, NULL, NULL, error))
+    return NULL;
+
   iface = G_PROXY_RESOLVER_GET_IFACE (resolver);
 
   return (* iface->lookup) (resolver, uri, cancellable, error);
@@ -171,10 +176,19 @@ g_proxy_resolver_lookup_async (GProxyResolver      *resolver,
                               gpointer             user_data)
 {
   GProxyResolverInterface *iface;
+  GError *error = NULL;
 
   g_return_if_fail (G_IS_PROXY_RESOLVER (resolver));
   g_return_if_fail (uri != NULL);
 
+  if (!_g_uri_parse_authority (uri, NULL, NULL, NULL, &error))
+    {
+      g_task_report_error (resolver, callback, user_data,
+                           g_proxy_resolver_lookup_async,
+                           g_steal_pointer (&error));
+      return;
+    }
+
   iface = G_PROXY_RESOLVER_GET_IFACE (resolver);
 
   (* iface->lookup_async) (resolver, uri, cancellable, callback, user_data);
index f9d0573..b60544a 100644 (file)
@@ -659,6 +659,8 @@ g_resolver_get_service_rrname (const char *service,
 
   if (g_hostname_is_non_ascii (domain))
     domain = ascii_domain = g_hostname_to_ascii (domain);
+  if (!domain)
+    return NULL;
 
   rrname = g_strdup_printf ("_%s._%s.%s", service, protocol, domain);
 
@@ -721,6 +723,12 @@ g_resolver_lookup_service (GResolver     *resolver,
   g_return_val_if_fail (domain != NULL, NULL);
 
   rrname = g_resolver_get_service_rrname (service, protocol, domain);
+  if (!rrname)
+    {
+      g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                           _("Invalid domain"));
+      return NULL;
+    }
 
   g_resolver_maybe_reload (resolver);
   targets = G_RESOLVER_GET_CLASS (resolver)->
@@ -765,6 +773,14 @@ g_resolver_lookup_service_async (GResolver           *resolver,
   g_return_if_fail (domain != NULL);
 
   rrname = g_resolver_get_service_rrname (service, protocol, domain);
+  if (!rrname)
+    {
+      g_task_report_new_error (resolver, callback, user_data,
+                               g_resolver_lookup_service_async,
+                               G_IO_ERROR, G_IO_ERROR_FAILED,
+                               _("Invalid domain"));
+      return;
+    }
 
   g_resolver_maybe_reload (resolver);
   G_RESOLVER_GET_CLASS (resolver)->
index 57eb838..b7dd9d8 100644 (file)
@@ -262,10 +262,28 @@ list_recursively (GSettings *settings)
   children = g_settings_list_children (settings);
   for (i = 0; children[i]; i++)
     {
+      gboolean will_see_elsewhere = FALSE;
       GSettings *child;
 
       child = g_settings_get_child (settings, children[i]);
-      list_recursively (child);
+
+      if (global_settings == NULL)
+        {
+         /* we're listing all non-relocatable settings objects from the
+          * top-level, so if this one is non-relocatable, don't recurse,
+          * because we will pick it up later on.
+          */
+
+         GSettingsSchema *child_schema;
+
+         g_object_get (child, "settings-schema", &child_schema, NULL);
+         will_see_elsewhere = !is_relocatable_schema (child_schema);
+         g_settings_schema_unref (child_schema);
+        }
+
+      if (!will_see_elsewhere)
+        list_recursively (child);
+
       g_object_unref (child);
     }
 
index 4e12243..f1274a3 100644 (file)
@@ -850,7 +850,7 @@ ensure_schema_lists (void)
 /**
  * g_settings_list_schemas:
  *
- * <!-- -->
+ * Deprecated.
  *
  * Returns: (element-type utf8) (transfer none):  a list of #GSettings
  *   schemas that are available.  The list must not be modified or
@@ -874,7 +874,7 @@ g_settings_list_schemas (void)
 /**
  * g_settings_list_relocatable_schemas:
  *
- * <!-- -->
+ * Deprecated.
  *
  * Returns: (element-type utf8) (transfer none): a list of relocatable
  *   #GSettings schemas that are available.  The list must not be
index 145bd5e..f33d49f 100644 (file)
@@ -287,11 +287,13 @@ ignore_host (GSimpleProxyResolver *resolver,
 
   if (priv->ignore_domains)
     {
+      length = 0;
       if (g_hostname_is_non_ascii (host))
         host = ascii_host = g_hostname_to_ascii (host);
-      length = strlen (host);
+      if (host)
+        length = strlen (host);
 
-      for (i = 0; priv->ignore_domains[i].length; i++)
+      for (i = 0; length > 0 && priv->ignore_domains[i].length; i++)
        {
          GSimpleProxyResolverDomain *domain = &priv->ignore_domains[i];
 
@@ -327,7 +329,7 @@ g_simple_proxy_resolver_lookup (GProxyResolver  *proxy_resolver,
       gchar *host = NULL;
       gushort port;
 
-      if (_g_uri_parse_authority (uri, &host, &port, NULL) &&
+      if (_g_uri_parse_authority (uri, &host, &port, NULL, NULL) &&
           ignore_host (resolver, host, port))
         proxy = "direct://";
 
index d11b7e4..f148f63 100644 (file)
@@ -38,7 +38,7 @@ G_BEGIN_DECLS
  * GSocketAddressEnumerator:
  *
  * Enumerator type for objects that contain or generate
- * #GSocketAddress<!-- -->es.
+ * #GSocketAddress instances.
  */
 typedef struct _GSocketAddressEnumeratorClass GSocketAddressEnumeratorClass;
 
index 7941d95..fc5c1bb 100644 (file)
@@ -824,12 +824,36 @@ do_lookup_records (GTask         *task,
   GByteArray *answer;
   gint rrtype;
 
+#ifdef HAVE_RES_NQUERY
+  /* Load the resolver state. This is done once per worker thread, and the
+   * #GResolver::reload signal is ignored (since we always reload). This could
+   * be improved by having an explicit worker thread pool, with each thread
+   * containing some state which is initialised at thread creation time and
+   * updated in response to #GResolver::reload.
+   *
+   * What we have currently is not particularly worse than using res_query() in
+   * worker threads, since it would transparently call res_init() for each new
+   * worker thread. (Although the workers would get reused by the
+   * #GThreadPool.) */
+  struct __res_state res;
+  if (res_ninit (&res) != 0)
+    {
+      g_task_return_new_error (task, G_RESOLVER_ERROR, G_RESOLVER_ERROR_INTERNAL,
+                               _("Error resolving “%s”"), lrd->rrname);
+      return;
+    }
+#endif
+
   rrtype = g_resolver_record_type_to_rrtype (lrd->record_type);
   answer = g_byte_array_new ();
   for (;;)
     {
       g_byte_array_set_size (answer, len * 2);
+#if defined(HAVE_RES_NQUERY)
+      len = res_nquery (&res, lrd->rrname, C_IN, rrtype, answer->data, answer->len);
+#else
       len = res_query (lrd->rrname, C_IN, rrtype, answer->data, answer->len);
+#endif
 
       /* If answer fit in the buffer then we're done */
       if (len < 0 || len < (gint)answer->len)
@@ -845,6 +869,14 @@ do_lookup_records (GTask         *task,
   records = g_resolver_records_from_res_query (lrd->rrname, rrtype, answer->data, len, herr, &error);
   g_byte_array_free (answer, TRUE);
 
+#if defined(HAVE_RES_NDESTROY)
+  res_ndestroy (&res);
+#elif defined(HAVE_RES_NCLOSE)
+  res_nclose (&res);
+#elif defined(HAVE_RES_NINIT)
+#error "Your platform has res_ninit() but not res_nclose() or res_ndestroy(). Please file a bug at https://bugzilla.gnome.org/enter_bug.cgi?product=glib"
+#endif
+
 #else
 
   DNS_STATUS status;
index 0fc188c..f80c625 100644 (file)
@@ -103,18 +103,21 @@ g_tls_client_connection_default_init (GTlsClientConnectionInterface *iface)
   /**
    * GTlsClientConnection:use-ssl3:
    *
-   * If %TRUE, tells the connection to use a fallback version of TLS
+   * If %TRUE, forces the connection to use a fallback version of TLS
    * or SSL, rather than trying to negotiate the best version of TLS
    * to use. This can be used when talking to servers that don't
    * implement version negotiation correctly and therefore refuse to
-   * handshake at all with a "modern" TLS handshake.
+   * handshake at all with a modern TLS handshake.
    *
-   * Despite the property name, the fallback version is not
-   * necessarily SSL 3.0; if SSL 3.0 has been disabled, the
-   * #GTlsClientConnection will use the next highest available version
-   * (normally TLS 1.0) as the fallback version.
+   * Despite the property name, the fallback version is usually not
+   * SSL 3.0, because SSL 3.0 is generally disabled by the #GTlsBackend.
+   * #GTlsClientConnection will use the next-highest available version
+   * as the fallback version.
    *
    * Since: 2.28
+   *
+   * Deprecated: 2.56: SSL 3.0 is insecure, and this property does not
+   * generally enable or disable it, despite its name.
    */
   g_object_interface_install_property (iface,
                                       g_param_spec_boolean ("use-ssl3",
@@ -123,7 +126,8 @@ g_tls_client_connection_default_init (GTlsClientConnectionInterface *iface)
                                                             FALSE,
                                                             G_PARAM_READWRITE |
                                                             G_PARAM_CONSTRUCT |
-                                                            G_PARAM_STATIC_STRINGS));
+                                                            G_PARAM_STATIC_STRINGS |
+                                                            G_PARAM_DEPRECATED));
 
   /**
    * GTlsClientConnection:accepted-cas: (type GLib.List) (element-type GLib.ByteArray)
@@ -273,13 +277,16 @@ g_tls_client_connection_set_server_identity (GTlsClientConnection *conn,
  * g_tls_client_connection_get_use_ssl3:
  * @conn: the #GTlsClientConnection
  *
- * Gets whether @conn will use SSL 3.0 rather than the
- * highest-supported version of TLS; see
- * g_tls_client_connection_set_use_ssl3().
+ * Gets whether @conn will force the lowest-supported TLS protocol
+ * version rather than attempt to negotiate the highest mutually-
+ * supported version of TLS; see g_tls_client_connection_set_use_ssl3().
  *
- * Returns: whether @conn will use SSL 3.0
+ * Returns: whether @conn will use the lowest-supported TLS protocol version
  *
  * Since: 2.28
+ *
+ * Deprecated: 2.56: SSL 3.0 is insecure, and this function does not
+ * actually indicate whether it is enabled.
  */
 gboolean
 g_tls_client_connection_get_use_ssl3 (GTlsClientConnection *conn)
@@ -295,15 +302,21 @@ g_tls_client_connection_get_use_ssl3 (GTlsClientConnection *conn)
 /**
  * g_tls_client_connection_set_use_ssl3:
  * @conn: the #GTlsClientConnection
- * @use_ssl3: whether to use SSL 3.0
+ * @use_ssl3: whether to use the lowest-supported protocol version
  *
- * If @use_ssl3 is %TRUE, this forces @conn to use SSL 3.0 rather than
- * trying to properly negotiate the right version of TLS or SSL to use.
- * This can be used when talking to servers that do not implement the
- * fallbacks correctly and which will therefore fail to handshake with
- * a "modern" TLS handshake attempt.
+ * If @use_ssl3 is %TRUE, this forces @conn to use the lowest-supported
+ * TLS protocol version rather than trying to properly negotiate the
+ * highest mutually-supported protocol version with the peer. This can
+ * be used when talking to broken TLS servers that exhibit protocol
+ * version intolerance.
+ *
+ * Be aware that SSL 3.0 is generally disabled by the #GTlsBackend, so
+ * the lowest-supported protocol version is probably not SSL 3.0.
  *
  * Since: 2.28
+ *
+ * Deprecated: 2.56: SSL 3.0 is insecure, and this function does not
+ * generally enable or disable it, despite its name.
  */
 void
 g_tls_client_connection_set_use_ssl3 (GTlsClientConnection *conn,
index 84711ec..29dbafc 100644 (file)
@@ -69,9 +69,9 @@ GSocketConnectable   *g_tls_client_connection_get_server_identity  (GTlsClientCo
 GLIB_AVAILABLE_IN_ALL
 void                  g_tls_client_connection_set_server_identity  (GTlsClientConnection    *conn,
                                                                    GSocketConnectable      *identity);
-GLIB_AVAILABLE_IN_ALL
+GLIB_DEPRECATED_IN_2_56
 gboolean              g_tls_client_connection_get_use_ssl3         (GTlsClientConnection    *conn);
-GLIB_AVAILABLE_IN_ALL
+GLIB_DEPRECATED_IN_2_56
 void                  g_tls_client_connection_set_use_ssl3         (GTlsClientConnection    *conn,
                                                                    gboolean                 use_ssl3);
 GLIB_AVAILABLE_IN_ALL
index fc37129..add8e3f 100644 (file)
@@ -1656,6 +1656,7 @@ static GFileMonitor          *fstab_monitor;
 static GFileMonitor          *mtab_monitor;
 static GSource               *proc_mounts_watch_source;
 static GList                 *mount_poller_mounts;
+static guint                  mtab_file_changed_id;
 
 static gboolean
 proc_mounts_watch_is_running (void)
@@ -1679,6 +1680,15 @@ fstab_file_changed (GFileMonitor      *monitor,
   g_context_specific_group_emit (&mount_monitor_group, signals[MOUNTPOINTS_CHANGED]);
 }
 
+static gboolean
+mtab_file_changed_cb (gpointer user_data)
+{
+  mtab_file_changed_id = 0;
+  g_context_specific_group_emit (&mount_monitor_group, signals[MOUNTS_CHANGED]);
+
+  return G_SOURCE_REMOVE;
+}
+
 static void
 mtab_file_changed (GFileMonitor      *monitor,
                    GFile             *file,
@@ -1691,7 +1701,14 @@ mtab_file_changed (GFileMonitor      *monitor,
       event_type != G_FILE_MONITOR_EVENT_DELETED)
     return;
 
-  g_context_specific_group_emit (&mount_monitor_group, signals[MOUNTS_CHANGED]);
+  /* Skip accumulated events from file monitor which we are not able to handle
+   * in a real time instead of emitting mounts_changed signal several times.
+   * This should behave equally to GIOChannel based monitoring. See Bug 792235.
+   */
+  if (mtab_file_changed_id > 0)
+    return;
+
+  mtab_file_changed_id = g_idle_add (mtab_file_changed_cb, NULL);
 }
 
 static gboolean
diff --git a/gio/gwin32networkmonitor.c b/gio/gwin32networkmonitor.c
new file mode 100644 (file)
index 0000000..8380f01
--- /dev/null
@@ -0,0 +1,333 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright 2014-2018 Jan-Michael Brummer <jan.brummer@tabos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <iphlpapi.h>
+#include <stdio.h>
+
+#include "gwin32networkmonitor.h"
+#include "ginetaddress.h"
+#include "ginetaddressmask.h"
+#include "ginitable.h"
+#include "giomodule-priv.h"
+#include "glibintl.h"
+#include "glib/gstdio.h"
+#include "gnetworkingprivate.h"
+#include "gsocket.h"
+#include "gnetworkmonitor.h"
+#include "gioerror.h"
+
+static void g_win32_network_monitor_iface_init (GNetworkMonitorInterface *iface);
+static void g_win32_network_monitor_initable_iface_init (GInitableIface *iface);
+
+struct _GWin32NetworkMonitorPrivate
+{
+  gboolean initialized;
+  GError *init_error;
+  GMainContext *main_context;
+  GSource *route_change_source;
+  HANDLE handle;
+};
+
+#define g_win32_network_monitor_get_type _g_win32_network_monitor_get_type
+G_DEFINE_TYPE_WITH_CODE (GWin32NetworkMonitor, g_win32_network_monitor, G_TYPE_NETWORK_MONITOR_BASE,
+                         G_ADD_PRIVATE (GWin32NetworkMonitor)
+                         G_IMPLEMENT_INTERFACE (G_TYPE_NETWORK_MONITOR,
+                                                g_win32_network_monitor_iface_init)
+                         G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
+                                                g_win32_network_monitor_initable_iface_init)
+                         _g_io_modules_ensure_extension_points_registered ();
+                         g_io_extension_point_implement (G_NETWORK_MONITOR_EXTENSION_POINT_NAME,
+                                                         g_define_type_id,
+                                                         "win32",
+                                                         20))
+
+static void
+g_win32_network_monitor_init (GWin32NetworkMonitor *win)
+{
+  win->priv = g_win32_network_monitor_get_instance_private (win);
+}
+
+static gboolean
+win_network_monitor_get_ip_info (IP_ADDRESS_PREFIX  prefix,
+                                 GSocketFamily     *family,
+                                 const guint8     **dest,
+                                 gsize             *len)
+{
+  switch (prefix.Prefix.si_family)
+    {
+      case AF_UNSPEC:
+        /* Fall-through: AF_UNSPEC deliveres both IPV4 and IPV6 infos, let`s stick with IPV4 here */
+      case AF_INET:
+        *family = G_SOCKET_FAMILY_IPV4;
+        *dest = (guint8 *) &prefix.Prefix.Ipv4.sin_addr;
+        *len = prefix.PrefixLength;
+        break;
+      case AF_INET6:
+        *family = G_SOCKET_FAMILY_IPV6;
+        *dest = (guint8 *) &prefix.Prefix.Ipv6.sin6_addr;
+        *len = prefix.PrefixLength;
+        break;
+      default:
+        return FALSE;
+    }
+
+  return TRUE;
+}
+
+static GInetAddressMask *
+get_network_mask (GSocketFamily  family,
+                  const guint8  *dest,
+                  gsize          len)
+{
+  GInetAddressMask *network;
+  GInetAddress *dest_addr;
+
+  if (dest != NULL)
+    dest_addr = g_inet_address_new_from_bytes (dest, family);
+  else
+    dest_addr = g_inet_address_new_any (family);
+
+  network = g_inet_address_mask_new (dest_addr, len, NULL);
+  g_object_unref (dest_addr);
+
+  return network;
+}
+
+static gboolean
+win_network_monitor_process_table (GWin32NetworkMonitor  *win,
+                                   GError                 **error)
+{
+  DWORD ret = 0;
+  GPtrArray *networks;
+  gsize i;
+  MIB_IPFORWARD_TABLE2 *routes = NULL;
+  MIB_IPFORWARD_ROW2 *route;
+
+  ret = GetIpForwardTable2 (AF_UNSPEC, &routes);
+  if (ret != ERROR_SUCCESS)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                   "GetIpForwardTable2 () failed: %ld", ret);
+
+      return FALSE;
+    }
+
+  networks = g_ptr_array_new_full (routes->NumEntries, g_object_unref);
+  for (i = 0; i < routes->NumEntries; i++)
+    {
+      GInetAddressMask *network;
+      const guint8 *dest;
+      gsize len;
+      GSocketFamily family;
+
+      route = routes->Table + i;
+
+      if (!win_network_monitor_get_ip_info (route->DestinationPrefix, &family, &dest, &len))
+        continue;
+
+      network = get_network_mask (family, dest, len);
+      if (network == NULL)
+        continue;
+
+      g_ptr_array_add (networks, network);
+    }
+
+  g_network_monitor_base_set_networks (G_NETWORK_MONITOR_BASE (win),
+                                       (GInetAddressMask **) networks->pdata,
+                                       networks->len);
+
+  return TRUE;
+}
+
+static void
+add_network (GWin32NetworkMonitor *win,
+             GSocketFamily         family,
+             const guint8         *dest,
+             gsize                 dest_len)
+{
+  GInetAddressMask *network;
+
+  network = get_network_mask (family, dest, dest_len);
+  if (network != NULL)
+    {
+      g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (win), network);
+      g_object_unref (network);
+    }
+}
+
+static void
+remove_network (GWin32NetworkMonitor *win,
+                GSocketFamily         family,
+                const guint8         *dest,
+                gsize                 dest_len)
+{
+  GInetAddressMask *network;
+
+  network = get_network_mask (family, dest, dest_len);
+  if (network != NULL)
+    {
+      g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (win), network);
+      g_object_unref (network);
+    }
+}
+
+typedef struct {
+  PMIB_IPFORWARD_ROW2 route;
+  MIB_NOTIFICATION_TYPE type;
+  GWin32NetworkMonitor *win;
+} RouteData;
+
+static gboolean
+win_network_monitor_invoke_route_changed (gpointer user_data)
+{
+  GSocketFamily family;
+  RouteData *route_data = user_data;
+  const guint8 *dest;
+  gsize len;
+
+  switch (route_data->type)
+    {
+      case MibDeleteInstance:
+        if (!win_network_monitor_get_ip_info (route_data->route->DestinationPrefix, &family, &dest, &len))
+          break;
+
+        remove_network (route_data->win, family, dest, len);
+        break;
+      case MibAddInstance:
+        if (!win_network_monitor_get_ip_info (route_data->route->DestinationPrefix, &family, &dest, &len))
+            break;
+
+        add_network (route_data->win, family, dest, len);
+        break;
+      case MibInitialNotification:
+      default:
+        break;
+    }
+
+  return G_SOURCE_REMOVE;
+}
+
+static VOID WINAPI
+win_network_monitor_route_changed_cb (PVOID                 context,
+                                      PMIB_IPFORWARD_ROW2   route,
+                                      MIB_NOTIFICATION_TYPE type)
+{
+  GWin32NetworkMonitor *win = context;
+  RouteData *route_data;
+
+  route_data = g_new0 (RouteData, 1);
+  route_data->route = route;
+  route_data->type = type;
+  route_data->win = win;
+
+  win->priv->route_change_source = g_idle_source_new ();
+  g_source_set_priority (win->priv->route_change_source, G_PRIORITY_DEFAULT);
+  g_source_set_callback (win->priv->route_change_source,
+                         win_network_monitor_invoke_route_changed,
+                         route_data,
+                         g_free);
+
+  g_source_attach (win->priv->route_change_source, win->priv->main_context);
+}
+
+static gboolean
+g_win32_network_monitor_initable_init (GInitable     *initable,
+                                       GCancellable  *cancellable,
+                                       GError       **error)
+{
+  GWin32NetworkMonitor *win = G_WIN32_NETWORK_MONITOR (initable);
+  NTSTATUS status;
+  gboolean read;
+
+  if (!win->priv->initialized)
+    {
+      win->priv->main_context = g_main_context_ref_thread_default ();
+
+      /* Read current IP routing table. */
+      read = win_network_monitor_process_table (win, &win->priv->init_error);
+      if (read)
+        {
+          /* Register for IPv4 and IPv6 route updates. */
+          status = NotifyRouteChange2 (AF_UNSPEC, (PIPFORWARD_CHANGE_CALLBACK) win_network_monitor_route_changed_cb, win, FALSE, &win->priv->handle);
+          if (status != NO_ERROR)
+            g_set_error (&win->priv->init_error, G_IO_ERROR, G_IO_ERROR_FAILED,
+                         "NotifyRouteChange2() error: %ld", status);
+        }
+
+      win->priv->initialized = TRUE;
+    }
+
+  /* Forward the results. */
+  if (win->priv->init_error != NULL)
+    {
+      g_propagate_error (error, g_error_copy (win->priv->init_error));
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static void
+g_win32_network_monitor_finalize (GObject *object)
+{
+  GWin32NetworkMonitor *win = G_WIN32_NETWORK_MONITOR (object);
+
+  /* Cancel notification event */
+  if (win->priv->handle)
+    CancelMibChangeNotify2 (win->priv->handle);
+
+  g_clear_error (&win->priv->init_error);
+
+  if (win->priv->route_change_source != NULL)
+    {
+      g_source_destroy (win->priv->route_change_source);
+      g_source_unref (win->priv->route_change_source);
+    }
+
+  g_main_context_unref (win->priv->main_context);
+
+  G_OBJECT_CLASS (g_win32_network_monitor_parent_class)->finalize (object);
+}
+
+static void
+g_win32_network_monitor_class_init (GWin32NetworkMonitorClass *win_class)
+{
+  GObjectClass *gobject_class = G_OBJECT_CLASS (win_class);
+
+  gobject_class->finalize = g_win32_network_monitor_finalize;
+}
+
+static void
+g_win32_network_monitor_iface_init (GNetworkMonitorInterface *monitor_iface)
+{
+}
+
+static void
+g_win32_network_monitor_initable_iface_init (GInitableIface *iface)
+{
+  iface->init = g_win32_network_monitor_initable_init;
+}
diff --git a/gio/gwin32networkmonitor.h b/gio/gwin32networkmonitor.h
new file mode 100644 (file)
index 0000000..49408cf
--- /dev/null
@@ -0,0 +1,53 @@
+/* GIO - GLib Input, Output and Streaming Library
+ *
+ * Copyright 2014-2018 Jan-Michael Brummer <jan.brummer@tabos.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __G_WIN32_NETWORK_MONITOR_H__
+#define __G_WIN32_NETWORK_MONITOR_H__
+
+#include "gnetworkmonitorbase.h"
+
+G_BEGIN_DECLS
+
+#define G_TYPE_WIN32_NETWORK_MONITOR         (_g_win32_network_monitor_get_type ())
+#define G_WIN32_NETWORK_MONITOR(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_WIN32_NETWORK_MONITOR, GWin32NetworkMonitor))
+#define G_WIN32_NETWORK_MONITOR_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_WIN32_NETWORK_MONITOR, GWin32NetworkMonitorClass))
+#define G_IS_WIN32_NETWORK_MONITOR(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_WIN32_NETWORK_MONITOR))
+#define G_IS_WIN32_NETWORK_MONITOR_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_WIN32_NETWORK_MONITOR))
+#define G_WIN32_NETWORK_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_WIN32_NETWORK_MONITOR, GWin32NetworkMonitorClass))
+
+typedef struct _GWin32NetworkMonitor        GWin32NetworkMonitor;
+typedef struct _GWin32NetworkMonitorClass   GWin32NetworkMonitorClass;
+typedef struct _GWin32NetworkMonitorPrivate GWin32NetworkMonitorPrivate;
+
+struct _GWin32NetworkMonitor {
+  GNetworkMonitorBase parent_instance;
+
+  GWin32NetworkMonitorPrivate *priv;
+};
+
+struct _GWin32NetworkMonitorClass {
+  GNetworkMonitorBaseClass parent_class;
+};
+
+GType _g_win32_network_monitor_get_type (void);
+
+G_END_DECLS
+
+#endif /* __G_WIN32_NETWORK_MONITOR_H__ */
index 8316073..1d61d23 100644 (file)
@@ -87,6 +87,54 @@ if host_system != 'windows'
     glib_conf.set('HAVE_RES_INIT', 1)
   endif
 
+  # res_nclose()
+  if cc.links('''#include <sys/types.h>
+                 #include <netinet/in.h>
+                 #include <arpa/nameser.h>
+                 #include <resolv.h>
+                 int main (int argc, char ** argv) {
+                   struct __res_state res;
+                   return res_nclose(&res);
+                 }''', args : network_args, name : 'res_nclose()')
+    glib_conf.set('HAVE_RES_NCLOSE', 1)
+  endif
+
+  # res_ndestroy()
+  if cc.links('''#include <sys/types.h>
+                 #include <netinet/in.h>
+                 #include <arpa/nameser.h>
+                 #include <resolv.h>
+                 int main (int argc, char ** argv) {
+                   struct __res_state res;
+                   return res_ndestroy(&res);
+                 }''', args : network_args, name : 'res_ndestroy()')
+    glib_conf.set('HAVE_RES_NDESTROY', 1)
+  endif
+
+  # res_ninit()
+  if cc.links('''#include <sys/types.h>
+                 #include <netinet/in.h>
+                 #include <arpa/nameser.h>
+                 #include <resolv.h>
+                 int main (int argc, char ** argv) {
+                   struct __res_state res;
+                   return res_ninit(&res);
+                 }''', args : network_args, name : 'res_ninit()')
+    glib_conf.set('HAVE_RES_NINIT', 1)
+  endif
+
+  # res_nquery()
+  if cc.links('''#include <sys/types.h>
+                 #include <netinet/in.h>
+                 #include <arpa/nameser.h>
+                 #include <resolv.h>
+                 int main (int argc, char ** argv) {
+                   struct __res_state res;
+                   return res_nquery(&res, "test", 0, 0, (void *)0, 0);
+                 }''', args : network_args, name : 'res_nquery()')
+    glib_conf.set('HAVE_RES_NQUERY', 1)
+  endif
+
   if cc.compiles('''#include <netinet/in.h>
                     struct ip_mreqn foo;''',
                  name : 'struct ip_mreqn')
@@ -388,6 +436,8 @@ else
     'gwin32volumemonitor.c',
     'gwin32inputstream.c',
     'gwin32outputstream.c',
+    'gwin32networkmonitor.c',
+    'gwin32networkmonitor.h',
   )
 
   gio_win_rc = configure_file(
index 58a3b3a..d82b3e3 100644 (file)
@@ -222,6 +222,8 @@ test_read_lines_LF_invalid_utf8 (void)
   g_object_unref (stream);
 }
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+
 static void
 test_read_until (void)
 {
@@ -268,6 +270,8 @@ test_read_until (void)
   g_object_unref (stream);
 }
 
+G_GNUC_END_IGNORE_DEPRECATIONS
+
 static void
 test_read_upto (void)
 {
index cf2aae2..98eeb85 100644 (file)
@@ -169,9 +169,12 @@ monitor_changed (GFileMonitor      *monitor,
 {
   CreateDeleteData *data = user_data;
   gchar *path;
+  const gchar *peeked_path;
 
   path = g_file_get_path (file);
+  peeked_path = g_file_peek_path (file);
   g_assert_cmpstr (data->monitor_path, ==, path);
+  g_assert_cmpstr (path, ==, peeked_path);
   g_free (path);
 
   if (event_type == G_FILE_MONITOR_EVENT_CREATED)
@@ -619,7 +622,7 @@ static void
 test_replace_load (void)
 {
   ReplaceLoadData *data;
-  gchar *path;
+  const gchar *path;
   GFileIOStream *iostream;
 
   data = g_new0 (ReplaceLoadData, 1);
@@ -631,7 +634,7 @@ test_replace_load (void)
   g_assert (data->file != NULL);
   g_object_unref (iostream);
 
-  path = g_file_get_path (data->file);
+  path = g_file_peek_path (data->file);
   remove (path);
 
   g_assert (!g_file_query_exists (data->file, NULL));
@@ -653,7 +656,6 @@ test_replace_load (void)
   g_main_loop_unref (data->loop);
   g_object_unref (data->file);
   g_free (data);
-  free (path);
 }
 
 static void
index a4ef721..3e4dc92 100644 (file)
@@ -406,7 +406,7 @@ test_method_calls_on_proxy (GDBusProxy *proxy)
 
       /* elapsed_msec should be 4000 msec +/- change for overhead/inaccuracy */
       g_assert_cmpint (elapsed_msec, >=, 3950);
-      g_assert_cmpint (elapsed_msec,  <, 8000);
+      g_assert_cmpint (elapsed_msec,  <, 30000);
 
       if (g_test_verbose ())
         g_printerr (" ");
index 0f1f63d..00bdb2e 100644 (file)
 #include <gio/gio.h>
 
 static void
+async_result_cb (GObject      *obj,
+                 GAsyncResult *result,
+                 gpointer      user_data)
+{
+  GAsyncResult **result_out = user_data;
+  *result_out = g_object_ref (result);
+}
+
+static void
 test_uris (void)
 {
   GProxyResolver *resolver;
   gchar *ignore_hosts[2] = { "127.0.0.1", NULL };
   gchar **proxies;
   GError *error = NULL;
+  const gchar *uri;
+  gchar *str = NULL;
+  GAsyncResult *result = NULL;
+
+  /* Valid URI. */
+  uri = "http://%E0%B4%A8%E0%B4%B2:80/";
+  resolver = g_simple_proxy_resolver_new (NULL, ignore_hosts);
+
+  proxies = g_proxy_resolver_lookup (resolver, uri, NULL, &error);
+  g_assert_no_error (error);
+  g_strfreev (proxies);
+
+  g_proxy_resolver_lookup_async (resolver, uri, NULL, async_result_cb, &result);
+  while (result == NULL)
+    g_main_context_iteration (NULL, TRUE);
+  proxies = g_proxy_resolver_lookup_finish (resolver, result, &error);
+  g_assert_no_error (error);
+  g_strfreev (proxies);
+  g_clear_object (&result);
+
+  g_object_unref (resolver);
+
+  /* Invalid URI. */
+  uri = "%E0%B4%A8%E0%B4%B2";
+  str = g_strdup_printf ("Invalid URI ‘%s’", uri);
+  resolver = g_simple_proxy_resolver_new (NULL, ignore_hosts);
+
+  proxies = g_proxy_resolver_lookup (resolver, uri, NULL, &error);
+  g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
+  g_assert_cmpstr (error->message, ==, str);
+  g_clear_error (&error);
+  g_assert_null (proxies);
+  g_clear_object (&result);
+
+  g_proxy_resolver_lookup_async (resolver, uri, NULL, async_result_cb, &result);
+  while (result == NULL)
+    g_main_context_iteration (NULL, TRUE);
+  proxies = g_proxy_resolver_lookup_finish (resolver, result, &error);
+  g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT);
+  g_assert_cmpstr (error->message, ==, str);
+  g_clear_error (&error);
+  g_assert_null (proxies);
+
+  g_object_unref (resolver);
+  g_free (str);
 
   resolver = g_simple_proxy_resolver_new ("default://", ignore_hosts);
   g_simple_proxy_resolver_set_uri_proxy (G_SIMPLE_PROXY_RESOLVER (resolver),
index a13dea8..0f43d3b 100644 (file)
--- a/glib.doap
+++ b/glib.doap
     </foaf:Person>
   </maintainer>
 
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Philip Withnall</foaf:name>
+      <foaf:mbox rdf:resource="mailto:philip@tecnocode.co.uk"/>
+      <foaf:mbox rdf:resource="mailto:withnall@endlessm.com"/>
+      <gnome:userid>pwithnall</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Emmanuele Bassi</foaf:name>
+      <foaf:mbox rdf:resource="mailto:ebassi@gnome.org"/>
+      <gnome:userid>ebassi</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+
   <repository>
     <GitRepository>
-        <browse rdf:resource="http://git.gnome.org/browse/glib/"/>
-      <location rdf:resource="git://git.gnome.org/glib"/>
+      <browse rdf:resource="https://gitlab.gnome.org/GNOME/glib/tree/master"/>
+      <location rdf:resource="https://gitlab.gnome.org/GNOME/glib.git"/>
     </GitRepository>
   </repository>
 
index b9c4245..5031a62 100644 (file)
  * goffset:
  *
  * A signed integer type that is used for file offsets,
- * corresponding to the C99 type off64_t.
+ * corresponding to the POSIX type `off_t` as if compiling with
+ * `_FILE_OFFSET_BITS` set to 64. #goffset is always 64 bits wide, even on
+ * 32-bit architectures.
  * Values of this type can range from #G_MINOFFSET to
  * #G_MAXOFFSET.
  *
  *
  *   membuf = g_malloc (8192);
  *
- *   /<!-- -->* Some computation on membuf *<!-- -->/
+ *   // Some computation on membuf
  *
- *   /<!-- -->* membuf will be automatically freed here *<!-- -->/
+ *   // membuf will be automatically freed here
  *   return TRUE;
  * }
  * ]|
index 92a5e0f..4661b9d 100644 (file)
@@ -2862,7 +2862,7 @@ g_bookmark_file_set_groups (GBookmarkFile  *bookmark,
   
   if (groups)
     {
-      for (i = 0; groups[i] != NULL && i < length; i++)
+      for (i = 0; i < length && groups[i] != NULL; i++)
         item->metadata->groups = g_list_append (item->metadata->groups,
                                                g_strdup (groups[i]));
     }
index 81dc9db..3b14a51 100644 (file)
@@ -64,6 +64,7 @@
  * Since: 2.32
  **/
 
+/* Keep in sync with glib/tests/bytes.c */
 struct _GBytes
 {
   gconstpointer data;  /* may be NULL iff (size == 0) */
@@ -203,6 +204,12 @@ g_bytes_new_with_free_func (gconstpointer  data,
  * A reference to @bytes will be held by the newly created #GBytes until
  * the byte data is no longer needed.
  *
+ * Since 2.56, if @offset is 0 and @length matches the size of @bytes, then
+ * @bytes will be returned with the reference count incremented by 1. If @bytes
+ * is a slice of another #GBytes, then the resulting #GBytes will reference
+ * the same #GBytes instead of @bytes. This allows consumers to simplify the
+ * usage of #GBytes when asynchronously writing to streams.
+ *
  * Returns: (transfer full): a new #GBytes
  *
  * Since: 2.32
@@ -212,12 +219,31 @@ g_bytes_new_from_bytes (GBytes  *bytes,
                         gsize    offset,
                         gsize    length)
 {
+  gchar *base;
+
   /* Note that length may be 0. */
   g_return_val_if_fail (bytes != NULL, NULL);
   g_return_val_if_fail (offset <= bytes->size, NULL);
   g_return_val_if_fail (offset + length <= bytes->size, NULL);
 
-  return g_bytes_new_with_free_func ((gchar *)bytes->data + offset, length,
+  /* Avoid an extra GBytes if all bytes were requested */
+  if (offset == 0 && length == bytes->size)
+    return g_bytes_ref (bytes);
+
+  base = (gchar *)bytes->data + offset;
+
+  /* Avoid referencing intermediate GBytes. In practice, this should
+   * only loop once.
+   */
+  while (bytes->free_func == (gpointer)g_bytes_unref)
+    bytes = bytes->user_data;
+
+  g_return_val_if_fail (bytes != NULL, NULL);
+  g_return_val_if_fail (base >= (gchar *)bytes->data, NULL);
+  g_return_val_if_fail (base <= (gchar *)bytes->data + bytes->size, NULL);
+  g_return_val_if_fail (base + length <= (gchar *)bytes->data + bytes->size, NULL);
+
+  return g_bytes_new_with_free_func (base, length,
                                      (GDestroyNotify)g_bytes_unref, g_bytes_ref (bytes));
 }
 
index 9d25db5..704ea13 100644 (file)
@@ -166,6 +166,10 @@ charset_cache_free (gpointer data)
  * handle file names. It might be different from the character set
  * used by the C library's current locale.
  *
+ * On Linux, the character set is found by consulting nl_langinfo() if
+ * available. If not, the environment variables `LC_ALL`, `LC_CTYPE`, `LANG`
+ * and `CHARSET` are queried in order.
+ *
  * The return value is %TRUE if the locale's encoding is UTF-8, in that
  * case you can perhaps avoid calling g_convert().
  *
index 194b2fc..3784a39 100644 (file)
@@ -76,7 +76,7 @@
  * in it ("/"). However, displaying file names may require conversion:
  * from the character set in which they were created, to the character
  * set in which the application operates. Consider the Spanish file name
- * "Presentaci&oacute;n.sxi". If the application which created it uses
+ * "Presentación.sxi". If the application which created it uses
  * ISO-8859-1 for its encoding,
  * |[
  * Character:  P  r  e  s  e  n  t  a  c  i  ó  n  .  s  x  i
  * Hex code:   50 72 65 73 65 6e 74 61 63 69 c3 b3 6e 2e 73 78 69
  * ]|
  * Glib uses UTF-8 for its strings, and GUI toolkits like GTK+ that use
- * Glib do the same thing. If you get a file name from the file system,
+ * GLib do the same thing. If you get a file name from the file system,
  * for example, from readdir() or from g_dir_read_name(), and you wish
  * to display the file name to the user, you  will need to convert it
  * into UTF-8. The opposite case is when the user types the name of a
- * file he wishes to save: the toolkit will give you that string in
+ * file they wish to save: the toolkit will give you that string in
  * UTF-8 encoding, and you will need to convert it to the character
  * set used for file names before you can create the file with open()
  * or fopen().
  *
- * By default, Glib assumes that file names on disk are in UTF-8
+ * By default, GLib assumes that file names on disk are in UTF-8
  * encoding. This is a valid assumption for file systems which
  * were created relatively recently: most applications use UTF-8
  * encoding for their strings, and that is also what they use for
  * the file names they create. However, older file systems may
  * still contain file names created in "older" encodings, such as
  * ISO-8859-1. In this case, for compatibility reasons, you may want
- * to instruct Glib to use that particular encoding for file names
+ * to instruct GLib to use that particular encoding for file names
  * rather than UTF-8. You can do this by specifying the encoding for
  * file names in the [`G_FILENAME_ENCODING`][G_FILENAME_ENCODING]
  * environment variable. For example, if your installation uses
- * ISO-8859-1 for file names, you can put this in your `~/.profile`
+ * ISO-8859-1 for file names, you can put this in your `~/.profile`:
  * |[
  * export G_FILENAME_ENCODING=ISO-8859-1
  * ]|
- * Glib provides the functions g_filename_to_utf8() and
+ * GLib provides the functions g_filename_to_utf8() and
  * g_filename_from_utf8() to perform the necessary conversions.
  * These functions convert file names from the encoding specified
  * in `G_FILENAME_ENCODING` to UTF-8 and vice-versa. This
@@ -264,6 +264,13 @@ g_iconv_open (const gchar  *to_codeset,
  * GLib provides g_convert() and g_locale_to_utf8() which are likely
  * more convenient than the raw iconv wrappers.
  * 
+ * Note that the behaviour of iconv() for characters which are valid in the
+ * input character set, but which have no representation in the output character
+ * set, is implementation defined. This function may return success (with a
+ * positive number of non-reversible conversions as replacement characters were
+ * used), or it may return -1 and set an error such as %EILSEQ, in such a
+ * situation.
+ *
  * Returns: count of non-reversible conversions, or -1 on error
  **/
 gsize 
@@ -340,29 +347,30 @@ close_converter (GIConv cd)
 
 /**
  * g_convert_with_iconv: (skip)
- * @str:           the string to convert
+ * @str:           (array length=len) (element-type guint8):
+ *                 the string to convert.
  * @len:           the length of the string in bytes, or -1 if the string is
  *                 nul-terminated (Note that some encodings may allow nul
  *                 bytes to occur inside strings. In that case, using -1
  *                 for the @len parameter is unsafe)
  * @converter:     conversion descriptor from g_iconv_open()
- * @bytes_read:    location to store the number of bytes in the
- *                 input string that were successfully converted, or %NULL.
+ * @bytes_read:    (out) (optional): location to store the number of bytes in
+ *                 the input string that were successfully converted, or %NULL.
  *                 Even if the conversion was successful, this may be 
  *                 less than @len if there were partial characters
  *                 at the end of the input. If the error
  *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
  *                 stored will the byte offset after the last valid
  *                 input sequence.
- * @bytes_written: the number of bytes stored in the output buffer (not 
- *                 including the terminating nul).
+ * @bytes_written: (out) (optional): the number of bytes stored in
+ *                 the output buffer (not including the terminating nul).
  * @error:         location to store the error occurring, or %NULL to ignore
  *                 errors. Any of the errors in #GConvertError may occur.
  *
  * Converts a string from one character set to another. 
  * 
  * Note that you should use g_iconv() for streaming conversions. 
- * Despite the fact that @byes_read can return information about partial 
+ * Despite the fact that @bytes_read can return information about partial
  * characters, the g_convert_... functions are not generally suitable
  * for streaming. If the underlying converter maintains internal state,
  * then this won't be preserved across successive calls to g_convert(),
@@ -371,8 +379,17 @@ close_converter (GIConv cd)
  * character until it knows that the next character is not a mark that
  * could combine with the base character.)
  *
- * Returns: If the conversion was successful, a newly allocated
- *               nul-terminated string, which must be freed with
+ * Characters which are valid in the input character set, but which have no
+ * representation in the output character set will result in a
+ * %G_CONVERT_ERROR_ILLEGAL_SEQUENCE error. This is in contrast to the iconv()
+ * specification, which leaves this behaviour implementation defined. Note that
+ * this is the same error code as is returned for an invalid byte sequence in
+ * the input character set. To get defined behaviour for conversion of
+ * unrepresentable characters, use g_convert_with_fallback().
+ *
+ * Returns: (array length=bytes_written) (element-type guint8) (transfer full):
+ *               If the conversion was successful, a newly allocated buffer
+ *               containing the converted string, which must be freed with
  *               g_free(). Otherwise %NULL and @error will be set.
  **/
 gchar*
@@ -449,6 +466,13 @@ g_convert_with_iconv (const gchar *str,
              break;
            }
        }
+      else if (err > 0)
+        {
+          /* @err gives the number of replacement characters used. */
+          g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Unrepresentable character in conversion input"));
+          have_error = TRUE;
+        }
       else 
        {
          if (!reset)
@@ -493,30 +517,31 @@ g_convert_with_iconv (const gchar *str,
 
 /**
  * g_convert:
- * @str:           the string to convert
+ * @str:           (array length=len) (element-type guint8):
+ *                 the string to convert.
  * @len:           the length of the string in bytes, or -1 if the string is
  *                 nul-terminated (Note that some encodings may allow nul
  *                 bytes to occur inside strings. In that case, using -1
  *                 for the @len parameter is unsafe)
  * @to_codeset:    name of character set into which to convert @str
  * @from_codeset:  character set of @str.
- * @bytes_read: (out):   location to store the number of bytes in the
- *                 input string that were successfully converted, or %NULL.
+ * @bytes_read:    (out) (optional): location to store the number of bytes in
+ *                 the input string that were successfully converted, or %NULL.
  *                 Even if the conversion was successful, this may be 
  *                 less than @len if there were partial characters
  *                 at the end of the input. If the error
  *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
  *                 stored will the byte offset after the last valid
  *                 input sequence.
- * @bytes_written: (out): the number of bytes stored in the output buffer (not 
- *                 including the terminating nul).
+ * @bytes_written: (out) (optional): the number of bytes stored in
+ *                 the output buffer (not including the terminating nul).
  * @error:         location to store the error occurring, or %NULL to ignore
  *                 errors. Any of the errors in #GConvertError may occur.
  *
  * Converts a string from one character set to another.
  *
  * Note that you should use g_iconv() for streaming conversions. 
- * Despite the fact that @byes_read can return information about partial 
+ * Despite the fact that @bytes_read can return information about partial
  * characters, the g_convert_... functions are not generally suitable
  * for streaming. If the underlying converter maintains internal state,
  * then this won't be preserved across successive calls to g_convert(),
@@ -528,9 +553,10 @@ g_convert_with_iconv (const gchar *str,
  * Using extensions such as "//TRANSLIT" may not work (or may not work
  * well) on many platforms.  Consider using g_str_to_ascii() instead.
  *
- * Returns: If the conversion was successful, a newly allocated
- *               nul-terminated string, which must be freed with
- *               g_free(). Otherwise %NULL and @error will be set.
+ * Returns: (array length=bytes_written) (element-type guint8) (transfer full):
+ *          If the conversion was successful, a newly allocated buffer
+ *          containing the converted string, which must be freed with g_free().
+ *          Otherwise %NULL and @error will be set.
  **/
 gchar*
 g_convert (const gchar *str,
@@ -572,25 +598,26 @@ g_convert (const gchar *str,
 
 /**
  * g_convert_with_fallback:
- * @str:          the string to convert
+ * @str:          (array length=len) (element-type guint8):
+ *                the string to convert.
  * @len:          the length of the string in bytes, or -1 if the string is
  *                 nul-terminated (Note that some encodings may allow nul
  *                 bytes to occur inside strings. In that case, using -1
  *                 for the @len parameter is unsafe)
  * @to_codeset:   name of character set into which to convert @str
  * @from_codeset: character set of @str.
- * @fallback:     UTF-8 string to use in place of character not
+ * @fallback:     UTF-8 string to use in place of characters not
  *                present in the target encoding. (The string must be
  *                representable in the target encoding). 
  *                If %NULL, characters not in the target encoding will 
  *                be represented as Unicode escapes \uxxxx or \Uxxxxyyyy.
- * @bytes_read:   location to store the number of bytes in the
- *                input string that were successfully converted, or %NULL.
+ * @bytes_read:   (out) (optional): location to store the number of bytes in
+ *                the input string that were successfully converted, or %NULL.
  *                Even if the conversion was successful, this may be 
  *                less than @len if there were partial characters
  *                at the end of the input.
- * @bytes_written: the number of bytes stored in the output buffer (not 
- *                including the terminating nul).
+ * @bytes_written: (out) (optional): the number of bytes stored in
+ *                 the output buffer (not including the terminating nul).
  * @error:        location to store the error occurring, or %NULL to ignore
  *                errors. Any of the errors in #GConvertError may occur.
  *
@@ -603,7 +630,7 @@ g_convert (const gchar *str,
  * in which case GLib will simply return that approximate conversion.
  *
  * Note that you should use g_iconv() for streaming conversions. 
- * Despite the fact that @byes_read can return information about partial 
+ * Despite the fact that @bytes_read can return information about partial
  * characters, the g_convert_... functions are not generally suitable
  * for streaming. If the underlying converter maintains internal state,
  * then this won't be preserved across successive calls to g_convert(),
@@ -612,9 +639,10 @@ g_convert (const gchar *str,
  * character until it knows that the next character is not a mark that
  * could combine with the base character.)
  *
- * Returns: If the conversion was successful, a newly allocated
- *               nul-terminated string, which must be freed with
- *               g_free(). Otherwise %NULL and @error will be set.
+ * Returns: (array length=bytes_written) (element-type guint8) (transfer full):
+ *          If the conversion was successful, a newly allocated buffer
+ *          containing the converted string, which must be freed with g_free().
+ *          Otherwise %NULL and @error will be set.
  **/
 gchar*
 g_convert_with_fallback (const gchar *str,
@@ -823,20 +851,31 @@ g_convert_with_fallback (const gchar *str,
  * 
  */
 
+/*
+ * Validate @string as UTF-8. @len can be negative if @string is
+ * nul-terminated, or a non-negative value in bytes. If @string ends in an
+ * incomplete sequence, or contains any illegal sequences or nul codepoints,
+ * %NULL will be returned and the error set to
+ * %G_CONVERT_ERROR_ILLEGAL_SEQUENCE.
+ * On success, @bytes_read and @bytes_written, if provided, will be set to
+ * the number of bytes in @string up to @len or the terminating nul byte.
+ * On error, @bytes_read will be set to the byte offset after the last valid
+ * and non-nul UTF-8 sequence in @string, and @bytes_written will be set to 0.
+ */
 static gchar *
 strdup_len (const gchar *string,
            gssize       len,
-           gsize       *bytes_written,
            gsize       *bytes_read,
-           GError      **error)
-        
+           gsize       *bytes_written,
+           GError     **error)
 {
   gsize real_len;
+  const gchar *end_valid;
 
-  if (!g_utf8_validate (string, len, NULL))
+  if (!g_utf8_validate (string, len, &end_valid))
     {
       if (bytes_read)
-       *bytes_read = 0;
+       *bytes_read = end_valid - string;
       if (bytes_written)
        *bytes_written = 0;
 
@@ -844,17 +883,9 @@ strdup_len (const gchar *string,
                            _("Invalid byte sequence in conversion input"));
       return NULL;
     }
-  
-  if (len < 0)
-    real_len = strlen (string);
-  else
-    {
-      real_len = 0;
-      
-      while (real_len < len && string[real_len])
-       real_len++;
-    }
-  
+
+  real_len = end_valid - string;
+
   if (bytes_read)
     *bytes_read = real_len;
   if (bytes_written)
@@ -863,9 +894,83 @@ strdup_len (const gchar *string,
   return g_strndup (string, real_len);
 }
 
+typedef enum
+{
+  CONVERT_CHECK_NO_NULS_IN_INPUT  = 1 << 0,
+  CONVERT_CHECK_NO_NULS_IN_OUTPUT = 1 << 1
+} ConvertCheckFlags;
+
+/*
+ * Convert from @string in the encoding identified by @from_codeset,
+ * returning a string in the encoding identifed by @to_codeset.
+ * @len can be negative if @string is nul-terminated, or a non-negative
+ * value in bytes. Flags defined in #ConvertCheckFlags can be set in @flags
+ * to check the input, the output, or both, for embedded nul bytes.
+ * On success, @bytes_read, if provided, will be set to the number of bytes
+ * in @string up to @len or the terminating nul byte, and @bytes_written, if
+ * provided, will be set to the number of output bytes written into the
+ * returned buffer, excluding the terminating nul sequence.
+ * On error, @bytes_read will be set to the byte offset after the last valid
+ * sequence in @string, and @bytes_written will be set to 0.
+ */
+static gchar *
+convert_checked (const gchar      *string,
+                 gssize            len,
+                 const gchar      *to_codeset,
+                 const gchar      *from_codeset,
+                 ConvertCheckFlags flags,
+                 gsize            *bytes_read,
+                 gsize            *bytes_written,
+                 GError          **error)
+{
+  gchar *out;
+  gsize outbytes;
+
+  if ((flags & CONVERT_CHECK_NO_NULS_IN_INPUT) && len > 0)
+    {
+      const gchar *early_nul = memchr (string, '\0', len);
+      if (early_nul != NULL)
+        {
+          if (bytes_read)
+            *bytes_read = early_nul - string;
+          if (bytes_written)
+            *bytes_written = 0;
+
+          g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE,
+                               _("Embedded NUL byte in conversion input"));
+          return NULL;
+        }
+    }
+
+  out = g_convert (string, len, to_codeset, from_codeset,
+                   bytes_read, &outbytes, error);
+  if (out == NULL)
+    {
+      if (bytes_written)
+        *bytes_written = 0;
+      return NULL;
+    }
+
+  if ((flags & CONVERT_CHECK_NO_NULS_IN_OUTPUT)
+      && memchr (out, '\0', outbytes) != NULL)
+    {
+      g_free (out);
+      if (bytes_written)
+        *bytes_written = 0;
+      g_set_error_literal (error, G_CONVERT_ERROR, G_CONVERT_ERROR_EMBEDDED_NUL,
+                           _("Embedded NUL byte in conversion output"));
+      return NULL;
+    }
+
+  if (bytes_written)
+    *bytes_written = outbytes;
+  return out;
+}
+
 /**
  * g_locale_to_utf8:
- * @opsysstring:   a string in the encoding of the current locale. On Windows
+ * @opsysstring:   (array length=len) (element-type guint8): a string in the
+ *                 encoding of the current locale. On Windows
  *                 this means the system codepage.
  * @len:           the length of the string, or -1 if the string is
  *                 nul-terminated (Note that some encodings may allow nul
@@ -876,7 +981,7 @@ strdup_len (const gchar *string,
  *                 Even if the conversion was successful, this may be 
  *                 less than @len if there were partial characters
  *                 at the end of the input. If the error
- *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 %G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
  *                 stored will the byte offset after the last valid
  *                 input sequence.
  * @bytes_written: (out) (optional): the number of bytes stored in the output
@@ -887,9 +992,16 @@ strdup_len (const gchar *string,
  * Converts a string which is in the encoding used for strings by
  * the C runtime (usually the same as that used by the operating
  * system) in the [current locale][setlocale] into a UTF-8 string.
+ *
+ * If the source encoding is not UTF-8 and the conversion output contains a
+ * nul character, the error %G_CONVERT_ERROR_EMBEDDED_NUL is set and the
+ * function returns %NULL.
+ * If the source encoding is UTF-8, an embedded nul character is treated with
+ * the %G_CONVERT_ERROR_ILLEGAL_SEQUENCE error for backward compatibility with
+ * earlier versions of this library. Use g_convert() to produce output that
+ * may contain embedded nul characters.
  * 
- * Returns: A newly-allocated buffer containing the converted string,
- *               or %NULL on an error, and error will be set.
+ * Returns: (type utf8): The converted string, or %NULL on an error.
  **/
 gchar *
 g_locale_to_utf8 (const gchar  *opsysstring,
@@ -903,23 +1015,22 @@ g_locale_to_utf8 (const gchar  *opsysstring,
   if (g_get_charset (&charset))
     return strdup_len (opsysstring, len, bytes_read, bytes_written, error);
   else
-    return g_convert (opsysstring, len, 
-                     "UTF-8", charset, bytes_read, bytes_written, error);
+    return convert_checked (opsysstring, len, "UTF-8", charset,
+                            CONVERT_CHECK_NO_NULS_IN_OUTPUT,
+                            bytes_read, bytes_written, error);
 }
 
 /**
  * g_locale_from_utf8:
  * @utf8string:    a UTF-8 encoded string 
  * @len:           the length of the string, or -1 if the string is
- *                 nul-terminated (Note that some encodings may allow nul
- *                 bytes to occur inside strings. In that case, using -1
- *                 for the @len parameter is unsafe)
+ *                 nul-terminated.
  * @bytes_read: (out) (optional): location to store the number of bytes in the
  *                 input string that were successfully converted, or %NULL.
  *                 Even if the conversion was successful, this may be 
  *                 less than @len if there were partial characters
  *                 at the end of the input. If the error
- *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 %G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
  *                 stored will the byte offset after the last valid
  *                 input sequence.
  * @bytes_written: (out) (optional): the number of bytes stored in the output
@@ -931,9 +1042,15 @@ g_locale_to_utf8 (const gchar  *opsysstring,
  * the C runtime (usually the same as that used by the operating
  * system) in the [current locale][setlocale]. On Windows this means
  * the system codepage.
- * 
- * Returns: A newly-allocated buffer containing the converted string,
- *               or %NULL on an error, and error will be set.
+ *
+ * The input string shall not contain nul characters even if the @len
+ * argument is positive. A nul character found inside the string will result
+ * in error %G_CONVERT_ERROR_ILLEGAL_SEQUENCE. Use g_convert() to convert
+ * input that may contain embedded nul characters.
+ *
+ * Returns: (array length=bytes_written) (element-type guint8) (transfer full):
+ *          A newly-allocated buffer containing the converted string,
+ *          or %NULL on an error, and error will be set.
  **/
 gchar *
 g_locale_from_utf8 (const gchar *utf8string,
@@ -947,8 +1064,9 @@ g_locale_from_utf8 (const gchar *utf8string,
   if (g_get_charset (&charset))
     return strdup_len (utf8string, len, bytes_read, bytes_written, error);
   else
-    return g_convert (utf8string, len,
-                     charset, "UTF-8", bytes_read, bytes_written, error);
+    return convert_checked (utf8string, len, charset, "UTF-8",
+                            CONVERT_CHECK_NO_NULS_IN_INPUT,
+                            bytes_read, bytes_written, error);
 }
 
 #ifndef G_PLATFORM_WIN32
@@ -972,7 +1090,8 @@ filename_charset_cache_free (gpointer data)
 
 /**
  * g_get_filename_charsets:
- * @charsets: return location for the %NULL-terminated list of encoding names
+ * @filename_charsets: (out) (transfer none) (array zero-terminated=1):
+ *    return location for the %NULL-terminated list of encoding names
  *
  * Determines the preferred character sets used for filenames.
  * The first character set from the @charsets is the filename encoding, the
@@ -1123,7 +1242,7 @@ get_filename_charset (const gchar **filename_charset)
  *                 Even if the conversion was successful, this may be 
  *                 less than @len if there were partial characters
  *                 at the end of the input. If the error
- *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 %G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
  *                 stored will the byte offset after the last valid
  *                 input sequence.
  * @bytes_written: (out) (optional): the number of bytes stored in the output
@@ -1135,8 +1254,16 @@ get_filename_charset (const gchar **filename_charset)
  * filenames into a UTF-8 string. Note that on Windows GLib uses UTF-8
  * for filenames; on other platforms, this function indirectly depends on 
  * the [current locale][setlocale].
+ *
+ * The input string shall not contain nul characters even if the @len
+ * argument is positive. A nul character found inside the string will result
+ * in error %G_CONVERT_ERROR_ILLEGAL_SEQUENCE.
+ * If the source encoding is not UTF-8 and the conversion output contains a
+ * nul character, the error %G_CONVERT_ERROR_EMBEDDED_NUL is set and the
+ * function returns %NULL. Use g_convert() to produce output that
+ * may contain embedded nul characters.
  * 
- * Returns: The converted string, or %NULL on an error.
+ * Returns: (type utf8): The converted string, or %NULL on an error.
  **/
 gchar*
 g_filename_to_utf8 (const gchar *opsysstring, 
@@ -1152,13 +1279,15 @@ g_filename_to_utf8 (const gchar *opsysstring,
   if (get_filename_charset (&charset))
     return strdup_len (opsysstring, len, bytes_read, bytes_written, error);
   else
-    return g_convert (opsysstring, len, 
-                     "UTF-8", charset, bytes_read, bytes_written, error);
+    return convert_checked (opsysstring, len, "UTF-8", charset,
+                            CONVERT_CHECK_NO_NULS_IN_INPUT |
+                            CONVERT_CHECK_NO_NULS_IN_OUTPUT,
+                            bytes_read, bytes_written, error);
 }
 
 /**
  * g_filename_from_utf8:
- * @utf8string:    a UTF-8 encoded string.
+ * @utf8string:    (type utf8): a UTF-8 encoded string.
  * @len:           the length of the string, or -1 if the string is
  *                 nul-terminated.
  * @bytes_read:    (out) (optional): location to store the number of bytes in
@@ -1166,11 +1295,11 @@ g_filename_to_utf8 (const gchar *opsysstring,
  *                 Even if the conversion was successful, this may be 
  *                 less than @len if there were partial characters
  *                 at the end of the input. If the error
- *                 #G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
+ *                 %G_CONVERT_ERROR_ILLEGAL_SEQUENCE occurs, the value
  *                 stored will the byte offset after the last valid
  *                 input sequence.
- * @bytes_written: (out): the number of bytes stored in the output buffer (not 
- *                 including the terminating nul).
+ * @bytes_written: (out) (optional): the number of bytes stored in
+ *                 the output buffer (not including the terminating nul).
  * @error:         location to store the error occurring, or %NULL to ignore
  *                 errors. Any of the errors in #GConvertError may occur.
  * 
@@ -1178,8 +1307,14 @@ g_filename_to_utf8 (const gchar *opsysstring,
  * filenames. Note that on Windows GLib uses UTF-8 for filenames;
  * on other platforms, this function indirectly depends on the 
  * [current locale][setlocale].
- * 
- * Returns: (array length=bytes_written) (element-type guint8) (transfer full):
+ *
+ * The input string shall not contain nul characters even if the @len
+ * argument is positive. A nul character found inside the string will result
+ * in error %G_CONVERT_ERROR_ILLEGAL_SEQUENCE. If the filename encoding is
+ * not UTF-8 and the conversion output contains a nul character, the error
+ * %G_CONVERT_ERROR_EMBEDDED_NUL is set and the function returns %NULL.
+ *
+ * Returns: (type filename):
  *               The converted string, or %NULL on an error.
  **/
 gchar*
@@ -1194,8 +1329,10 @@ g_filename_from_utf8 (const gchar *utf8string,
   if (get_filename_charset (&charset))
     return strdup_len (utf8string, len, bytes_read, bytes_written, error);
   else
-    return g_convert (utf8string, len,
-                     charset, "UTF-8", bytes_read, bytes_written, error);
+    return convert_checked (utf8string, len, charset, "UTF-8",
+                            CONVERT_CHECK_NO_NULS_IN_INPUT |
+                            CONVERT_CHECK_NO_NULS_IN_OUTPUT,
+                            bytes_read, bytes_written, error);
 }
 
 /* Test of haystack has the needle prefix, comparing case
index f064e41..d0d3721 100644 (file)
@@ -37,12 +37,17 @@ G_BEGIN_DECLS
  * GConvertError:
  * @G_CONVERT_ERROR_NO_CONVERSION: Conversion between the requested character
  *     sets is not supported.
- * @G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input.
+ * @G_CONVERT_ERROR_ILLEGAL_SEQUENCE: Invalid byte sequence in conversion input;
+ *    or the character sequence could not be represented in the target
+ *    character set.
  * @G_CONVERT_ERROR_FAILED: Conversion failed for some reason.
  * @G_CONVERT_ERROR_PARTIAL_INPUT: Partial character sequence at end of input.
  * @G_CONVERT_ERROR_BAD_URI: URI is invalid.
  * @G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: Pathname is not an absolute path.
  * @G_CONVERT_ERROR_NO_MEMORY: No memory available. Since: 2.40
+ * @G_CONVERT_ERROR_EMBEDDED_NUL: An embedded NUL character is present in
+ *     conversion output where a NUL-terminated string is expected.
+ *     Since: 2.56
  *
  * Error codes returned by character set conversion routines.
  */
@@ -54,7 +59,8 @@ typedef enum
   G_CONVERT_ERROR_PARTIAL_INPUT,
   G_CONVERT_ERROR_BAD_URI,
   G_CONVERT_ERROR_NOT_ABSOLUTE_PATH,
-  G_CONVERT_ERROR_NO_MEMORY
+  G_CONVERT_ERROR_NO_MEMORY,
+  G_CONVERT_ERROR_EMBEDDED_NUL
 } GConvertError;
 
 /**
index cc4397c..d763409 100644 (file)
@@ -900,7 +900,7 @@ g_datalist_id_dup_data (GData          **datalist,
  *
  * If the previous value was replaced then ownership of the
  * old value (@oldval) is passed to the caller, including
- * the registred destroy notify for it (passed out in @old_destroy).
+ * the registered destroy notify for it (passed out in @old_destroy).
  * Its up to the caller to free this as he wishes, which may
  * or may not include using @old_destroy as sometimes replacement
  * should not destroy the object in the normal way.
index 88af308..4bb13d1 100644 (file)
@@ -928,7 +928,7 @@ static gboolean
 get_iso8601_seconds (const gchar *text, gsize length, gdouble *value)
 {
   gint i;
-  gdouble multiplier = 0.1, v = 0;
+  gdouble divisor = 1, v = 0;
 
   if (length < 2)
     return FALSE;
@@ -952,11 +952,11 @@ get_iso8601_seconds (const gchar *text, gsize length, gdouble *value)
       const gchar c = text[i];
       if (c < '0' || c > '9')
         return FALSE;
-      v += (c - '0') * multiplier;
-      multiplier *= 0.1;
+      v = v * 10 + (c - '0');
+      divisor *= 10;
     }
 
-  *value = v;
+  *value = v / divisor;
   return TRUE;
 }
 
@@ -1294,7 +1294,11 @@ g_date_time_new (GTimeZone *tz,
 {
   GDateTime *datetime;
   gint64 full_time;
-  gint64 usec;
+  /* keep these variables as volatile. We do not want them ending up in
+   * registers - them doing so may cause us to hit precision problems on i386.
+   * See: https://bugzilla.gnome.org/show_bug.cgi?id=792410 */
+  volatile gint64 usec;
+  volatile gdouble usecd;
 
   g_return_val_if_fail (tz != NULL, NULL);
 
@@ -1328,7 +1332,8 @@ g_date_time_new (GTimeZone *tz,
    * FP numbers work.
    * See https://bugzilla.gnome.org/show_bug.cgi?id=697715. */
   usec = seconds * USEC_PER_SECOND;
-  if ((usec + 1) * 1e-6 <= seconds) {
+  usecd = (usec + 1) * 1e-6;
+  if (usecd <= seconds) {
     usec++;
   }
 
index 70cbce9..9c8151c 100644 (file)
@@ -665,7 +665,7 @@ g_setenv_utf8 (const gchar *variable,
 void
 g_unsetenv_utf8 (const gchar *variable)
 {
-  return g_unsetenv (variable);
+  g_unsetenv (variable);
 }
 
 #endif
index 4b4b1f9..b24651e 100644 (file)
@@ -23,6 +23,7 @@
 #error "Only <glib.h> can be included directly."
 #endif
 
+#include <glibconfig.h>
 #include <glib/gerror.h>
 
 G_BEGIN_DECLS
@@ -145,19 +146,11 @@ gint     g_mkdir_with_parents (const gchar *pathname,
  * the search path separator is the semicolon. Note that also the
  * (forward) slash works as directory separator.
  */
-#define G_DIR_SEPARATOR '\\'
-#define G_DIR_SEPARATOR_S "\\"
 #define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR || (c) == '/')
-#define G_SEARCHPATH_SEPARATOR ';'
-#define G_SEARCHPATH_SEPARATOR_S ";"
 
 #else  /* !G_OS_WIN32 */
 
-#define G_DIR_SEPARATOR '/'
-#define G_DIR_SEPARATOR_S "/"
 #define G_IS_DIR_SEPARATOR(c) ((c) == G_DIR_SEPARATOR)
-#define G_SEARCHPATH_SEPARATOR ':'
-#define G_SEARCHPATH_SEPARATOR_S ":"
 
 #endif /* !G_OS_WIN32 */
 
index d3c6c6e..1ddd4e9 100644 (file)
  * g_direct_hash() is also the appropriate hash function for keys
  * of the form `GINT_TO_POINTER (n)` (or similar macros).
  *
- * <!-- FIXME: Need more here. --> A good hash functions should produce
+ * A good hash functions should produce
  * hash values that are evenly distributed over a fairly large range.
  * The modulus is taken with the hash table size (a prime number) to
  * find the 'bucket' to place each key into. The function should also
index 732e05b..ae3bbbc 100644 (file)
@@ -789,7 +789,7 @@ find_file_in_data_dirs (const gchar   *file,
                              "found in search dirs"));
     }
 
-  if (output_file != NULL && fd > 0)
+  if (output_file != NULL && fd != -1)
     *output_file = g_strdup (path);
 
   g_free (path);
@@ -2263,6 +2263,71 @@ g_key_file_get_locale_string (GKeyFile     *key_file,
 }
 
 /**
+ * g_key_file_get_locale_for_key:
+ * @key_file: a #GKeyFile
+ * @group_name: a group name
+ * @key: a key
+ * @locale: (nullable): a locale identifier or %NULL
+ *
+ * Returns the actual locale which the result of
+ * g_key_file_get_locale_string() or g_key_file_get_locale_string_list()
+ * came from.
+ *
+ * If calling g_key_file_get_locale_string() or
+ * g_key_file_get_locale_string_list() with exactly the same @key_file,
+ * @group_name, @key and @locale, the result of those functions will
+ * have originally been tagged with the locale that is the result of
+ * this function.
+ *
+ * Returns: (nullable): the locale from the file, or %NULL if the key was not
+ *   found or the entry in the file was was untranslated
+ *
+ * Since: 2.56
+ */
+gchar *
+g_key_file_get_locale_for_key (GKeyFile    *key_file,
+                               const gchar *group_name,
+                               const gchar *key,
+                               const gchar *locale)
+{
+  gchar **languages_allocated = NULL;
+  const gchar * const *languages;
+  gchar *result = NULL;
+  gsize i;
+
+  g_return_val_if_fail (key_file != NULL, NULL);
+  g_return_val_if_fail (group_name != NULL, NULL);
+  g_return_val_if_fail (key != NULL, NULL);
+
+  if (locale != NULL)
+    {
+      languages_allocated = g_get_locale_variants (locale);
+      languages = (const gchar * const *) languages_allocated;
+    }
+  else
+    languages = g_get_language_names ();
+
+  for (i = 0; languages[i] != NULL; i++)
+    {
+      gchar *candidate_key, *translated_value;
+
+      candidate_key = g_strdup_printf ("%s[%s]", key, languages[i]);
+      translated_value = g_key_file_get_string (key_file, group_name, candidate_key, NULL);
+      g_free (translated_value);
+      g_free (candidate_key);
+
+      if (translated_value != NULL)
+        break;
+   }
+
+  result = g_strdup (languages[i]);
+
+  g_strfreev (languages_allocated);
+
+  return result;
+}
+
+/**
  * g_key_file_get_locale_string_list:
  * @key_file: a #GKeyFile
  * @group_name: a group name
index 7da7107..7849551 100644 (file)
@@ -146,6 +146,11 @@ gchar    *g_key_file_get_locale_string      (GKeyFile             *key_file,
                                             const gchar          *key,
                                             const gchar          *locale,
                                             GError              **error) G_GNUC_MALLOC;
+GLIB_AVAILABLE_IN_2_56
+gchar    *g_key_file_get_locale_for_key     (GKeyFile             *key_file,
+                                             const gchar          *group_name,
+                                             const gchar          *key,
+                                             const gchar          *locale) G_GNUC_MALLOC;
 GLIB_AVAILABLE_IN_ALL
 void      g_key_file_set_locale_string      (GKeyFile             *key_file,
                                             const gchar          *group_name,
index 076d7ac..fb456a9 100644 (file)
@@ -204,6 +204,11 @@ typedef @g_pid_type@ GPid;
 #define GLIB_SYSDEF_MSG_PEEK @g_msg_peek@
 #define GLIB_SYSDEF_MSG_DONTROUTE @g_msg_dontroute@
 
+#define G_DIR_SEPARATOR '@g_dir_separator@'
+#define G_DIR_SEPARATOR_S "@g_dir_separator@"
+#define G_SEARCHPATH_SEPARATOR '@g_searchpath_separator@'
+#define G_SEARCHPATH_SEPARATOR_S "@g_searchpath_separator@"
+
 G_END_DECLS
 
 #endif /* __GLIBCONFIG_H__ */
index d16e7c8..b8214c0 100644 (file)
@@ -252,6 +252,11 @@ typedef void * GPid;
 #define GLIB_SYSDEF_MSG_PEEK      2
 #define GLIB_SYSDEF_MSG_DONTROUTE 4
 
+#define G_DIR_SEPARATOR '\\'
+#define G_DIR_SEPARATOR_S "\\"
+#define G_SEARCHPATH_SEPARATOR ';'
+#define G_SEARCHPATH_SEPARATOR_S ";"
+
 G_END_DECLS
 
 #endif /* GLIBCONFIG_H */
index a30eaa7..227168a 100644 (file)
@@ -1118,29 +1118,6 @@ source_remove_from_context (GSource      *source,
     }
 }
 
-/* See https://bugzilla.gnome.org/show_bug.cgi?id=761102 for
- * the introduction of this.
- *
- * The main optimization is to avoid waking up the main
- * context if a change is made by the current owner.
- */
-static void
-conditional_wakeup (GMainContext *context)
-{
-  /* We want to signal wakeups in two cases:
-   *  1 When the context is owned by another thread
-   *  2 When the context owner is NULL (two subcases)
-   *   2a Possible if the context has never been acquired
-   *   2b Or if the context has no current owner
-   *
-   * At least case 2a) is necessary to ensure backwards compatibility with
-   * qemu's use of GMainContext.
-   * https://bugzilla.gnome.org/show_bug.cgi?id=761102#c14
-   */
-  if (context->owner != G_THREAD_SELF)
-    g_wakeup_signal (context->wakeup);
-}
-
 static guint
 g_source_attach_unlocked (GSource      *source,
                           GMainContext *context,
@@ -1187,8 +1164,8 @@ g_source_attach_unlocked (GSource      *source,
   /* If another thread has acquired the context, wake it up since it
    * might be in poll() right now.
    */
-  if (do_wakeup)
-    conditional_wakeup (context);
+  if (do_wakeup && context->owner && context->owner != G_THREAD_SELF)
+    g_wakeup_signal (context->wakeup);
 
   return source->source_id;
 }
@@ -1877,7 +1854,7 @@ g_source_set_ready_time (GSource *source,
     {
       /* Quite likely that we need to change the timeout on the poll */
       if (!SOURCE_BLOCKED (source))
-        conditional_wakeup (context);
+        g_wakeup_signal (context->wakeup);
       UNLOCK_CONTEXT (context);
     }
 }
@@ -4353,7 +4330,7 @@ g_main_context_add_poll_unlocked (GMainContext *context,
   context->poll_changed = TRUE;
 
   /* Now wake up the main loop if it is waiting in the poll() */
-  conditional_wakeup (context);
+  g_wakeup_signal (context->wakeup);
 }
 
 /**
@@ -4413,7 +4390,7 @@ g_main_context_remove_poll_unlocked (GMainContext *context,
   context->poll_changed = TRUE;
 
   /* Now wake up the main loop if it is waiting in the poll() */
-  conditional_wakeup (context);
+  g_wakeup_signal (context->wakeup);
 }
 
 /**
index 0140d4b..c4f42c5 100644 (file)
@@ -63,9 +63,14 @@ static GMemVTable glib_mem_vtable = {
  * 
  * These functions provide support for allocating and freeing memory.
  * 
- * If any call to allocate memory fails, the application is terminated.
- * This also means that there is no need to check if the call succeeded.
- * 
+ * If any call to allocate memory using functions g_new(), g_new0(), g_renew(),
+ * g_malloc(), g_malloc0(), g_malloc0_n(), g_realloc(), and g_realloc_n()
+ * fails, the application is terminated. This also means that there is no
+ * need to check if the call succeeded. On the other hand, g_try_...() family
+ * of functions returns %NULL on failure that can be used as a check
+ * for unsuccessful memory allocation. The application is not terminated
+ * in this case.
+ *
  * It's important to match g_malloc() (and wrappers such as g_new()) with
  * g_free(), g_slice_alloc() (and wrappers such as g_slice_new()) with
  * g_slice_free(), plain malloc() with free(), and (if you're using C++)
index 8c78568..cbaed5d 100644 (file)
@@ -1476,17 +1476,17 @@ log_level_to_color (GLogLevelFlags log_level,
     return "";
 
   if (log_level & G_LOG_LEVEL_ERROR)
-    return "\033[1;31m";
+    return "\033[1;31m"; /* red */
   else if (log_level & G_LOG_LEVEL_CRITICAL)
-    return "\033[1;35m";
+    return "\033[1;35m"; /* magenta */
   else if (log_level & G_LOG_LEVEL_WARNING)
-    return "\033[1;33m";
+    return "\033[1;33m"; /* yellow */
   else if (log_level & G_LOG_LEVEL_MESSAGE)
-    return "\033[1;32m";
+    return "\033[1;32m"; /* green */
   else if (log_level & G_LOG_LEVEL_INFO)
-    return "\033[1;32m";
+    return "\033[1;32m"; /* green */
   else if (log_level & G_LOG_LEVEL_DEBUG)
-    return "\033[1;32m";
+    return "\033[1;32m"; /* green */
 
   /* No color for custom log levels. */
   return "";
@@ -1976,6 +1976,59 @@ g_log_structured_array (GLogLevelFlags   log_level,
     _g_log_abort (!(log_level & G_LOG_FLAG_RECURSION));
 }
 
+/* Semi-private helper function to implement the g_message() (etc.) macros
+ * with support for G_GNUC_PRINTF so that @message_format can be checked
+ * with -Wformat. */
+void
+g_log_structured_standard (const gchar    *log_domain,
+                           GLogLevelFlags  log_level,
+                           const gchar    *file,
+                           const gchar    *line,
+                           const gchar    *func,
+                           const gchar    *message_format,
+                           ...)
+{
+  GLogField fields[] =
+    {
+      { "PRIORITY", log_level_to_priority (log_level), -1 },
+      { "CODE_FILE", file, -1 },
+      { "CODE_LINE", line, -1 },
+      { "CODE_FUNC", func, -1 },
+      /* Filled in later: */
+      { "MESSAGE", NULL, -1 },
+      /* If @log_domain is %NULL, we will not pass this field: */
+      { "GLIB_DOMAIN", log_domain, -1 },
+    };
+  gsize n_fields;
+  gchar *message_allocated = NULL;
+  gchar buffer[1025];
+  va_list args;
+
+  va_start (args, message_format);
+
+  if (log_level & G_LOG_FLAG_RECURSION)
+    {
+      /* we use a stack buffer of fixed size, since we're likely
+       * in an out-of-memory situation
+       */
+      gsize size G_GNUC_UNUSED;
+
+      size = _g_vsnprintf (buffer, sizeof (buffer), message_format, args);
+      fields[4].value = buffer;
+    }
+  else
+    {
+      fields[4].value = message_allocated = g_strdup_vprintf (message_format, args);
+    }
+
+  va_end (args);
+
+  n_fields = G_N_ELEMENTS (fields) - ((log_domain == NULL) ? 1 : 0);
+  g_log_structured_array (log_level, fields, n_fields);
+
+  g_free (message_allocated);
+}
+
 /**
  * g_log_set_writer_func:
  * @func: log writer function, which must not be %NULL
@@ -2556,6 +2609,7 @@ g_log_writer_standard_streams (GLogLevelFlags   log_level,
   out = g_log_writer_format_fields (log_level, fields, n_fields,
                                     g_log_writer_supports_color (fileno (stream)));
   _g_fprintf (stream, "%s\n", out);
+  fflush (stream);
   g_free (out);
 
   return G_LOG_WRITER_HANDLED;
index 1815186..cebdc16 100644 (file)
@@ -282,6 +282,14 @@ void g_assert_warning         (const char *log_domain,
                               const char *pretty_function,
                               const char *expression) G_GNUC_NORETURN;
 
+GLIB_AVAILABLE_IN_2_56
+void g_log_structured_standard (const gchar    *log_domain,
+                                GLogLevelFlags  log_level,
+                                const gchar    *file,
+                                const gchar    *line,
+                                const gchar    *func,
+                                const gchar    *message_format,
+                                ...) G_GNUC_PRINTF (6, 7);
 
 #ifndef G_LOG_DOMAIN
 #define G_LOG_DOMAIN    ((gchar*) 0)
@@ -290,38 +298,26 @@ void g_assert_warning         (const char *log_domain,
 #if defined(G_HAVE_ISO_VARARGS) && !G_ANALYZER_ANALYZING
 #ifdef G_LOG_USE_STRUCTURED
 #define g_error(...)  G_STMT_START {                                            \
-                        g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,      \
-                                          "CODE_FILE", __FILE__,                \
-                                          "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                          "CODE_FUNC", G_STRFUNC,                \
-                                          "MESSAGE", __VA_ARGS__);              \
+                        g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, \
+                                                   __FILE__, G_STRINGIFY (__LINE__), \
+                                                   G_STRFUNC, __VA_ARGS__); \
                         for (;;) ;                                              \
                       } G_STMT_END
-#define g_message(...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE,    \
-                                          "CODE_FILE", __FILE__,                \
-                                          "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                          "CODE_FUNC", G_STRFUNC,                \
-                                          "MESSAGE", __VA_ARGS__)
-#define g_critical(...) g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,   \
-                                          "CODE_FILE", __FILE__,                \
-                                          "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                          "CODE_FUNC", G_STRFUNC,                \
-                                          "MESSAGE", __VA_ARGS__)
-#define g_warning(...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,    \
-                                          "CODE_FILE", __FILE__,                \
-                                          "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                          "CODE_FUNC", G_STRFUNC,                \
-                                          "MESSAGE", __VA_ARGS__)
-#define g_info(...)     g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_INFO,       \
-                                          "CODE_FILE", __FILE__,                \
-                                          "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                          "CODE_FUNC", G_STRFUNC,                \
-                                          "MESSAGE", __VA_ARGS__)
-#define g_debug(...)    g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,      \
-                                          "CODE_FILE", __FILE__,                \
-                                          "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                          "CODE_FUNC", G_STRFUNC,                \
-                                          "MESSAGE", __VA_ARGS__)
+#define g_message(...)  g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, \
+                                                   __FILE__, G_STRINGIFY (__LINE__), \
+                                                   G_STRFUNC, __VA_ARGS__)
+#define g_critical(...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \
+                                                   __FILE__, G_STRINGIFY (__LINE__), \
+                                                   G_STRFUNC, __VA_ARGS__)
+#define g_warning(...)  g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, \
+                                                   __FILE__, G_STRINGIFY (__LINE__), \
+                                                   G_STRFUNC, __VA_ARGS__)
+#define g_info(...)     g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, \
+                                                   __FILE__, G_STRINGIFY (__LINE__), \
+                                                   G_STRFUNC, __VA_ARGS__)
+#define g_debug(...)    g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
+                                                   __FILE__, G_STRINGIFY (__LINE__), \
+                                                   G_STRFUNC, __VA_ARGS__)
 #else
 /* for(;;) ; so that GCC knows that control doesn't go past g_error().
  * Put space before ending semicolon to avoid C++ build warnings.
@@ -351,38 +347,26 @@ void g_assert_warning         (const char *log_domain,
 #elif defined(G_HAVE_GNUC_VARARGS)  && !G_ANALYZER_ANALYZING
 #ifdef G_LOG_USE_STRUCTURED
 #define g_error(format...)   G_STMT_START {                                          \
-                               g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR,    \
-                                                "CODE_FILE", __FILE__,               \
-                                                "CODE_LINE", G_STRINGIFY (__LINE__), \
-                                                "CODE_FUNC", G_STRFUNC,               \
-                                                "MESSAGE", format);                  \
+                               g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, \
+                                                          __FILE__, G_STRINGIFY (__LINE__), \
+                                                          G_STRFUNC, format); \
                                for (;;) ;                                            \
                              } G_STMT_END
-#define g_message(format...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE,   \
-                                               "CODE_FILE", __FILE__,                \
-                                               "CODE_LINE", G_STRINGIFY (__LINE__),  \
-                                               "CODE_FUNC", G_STRFUNC,                \
-                                               "MESSAGE", format)
-#define g_critical(format...) g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,  \
-                                                "CODE_FILE", __FILE__,               \
-                                                "CODE_LINE", G_STRINGIFY (__LINE__), \
-                                                "CODE_FUNC", G_STRFUNC,               \
-                                                "MESSAGE", format)
-#define g_warning(format...)  g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,   \
-                                                "CODE_FILE", __FILE__,               \
-                                                "CODE_LINE", G_STRINGIFY (__LINE__), \
-                                                "CODE_FUNC", G_STRFUNC,               \
-                                                "MESSAGE", format)
-#define g_info(format...)     g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_INFO,      \
-                                                "CODE_FILE", __FILE__,               \
-                                                "CODE_LINE", G_STRINGIFY (__LINE__), \
-                                                "CODE_FUNC", G_STRFUNC,               \
-                                                "MESSAGE", format)
-#define g_debug(format...)    g_log_structured (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,     \
-                                                "CODE_FILE", __FILE__,               \
-                                                "CODE_LINE", G_STRINGIFY (__LINE__), \
-                                                "CODE_FUNC", G_STRFUNC,               \
-                                                "MESSAGE", format)
+#define g_message(format...)  g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, \
+                                                         __FILE__, G_STRINGIFY (__LINE__), \
+                                                         G_STRFUNC, format)
+#define g_critical(format...) g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, \
+                                                         __FILE__, G_STRINGIFY (__LINE__), \
+                                                         G_STRFUNC, format)
+#define g_warning(format...)  g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, \
+                                                         __FILE__, G_STRINGIFY (__LINE__), \
+                                                         G_STRFUNC, format)
+#define g_info(format...)     g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, \
+                                                         __FILE__, G_STRINGIFY (__LINE__), \
+                                                         G_STRFUNC, format)
+#define g_debug(format...)    g_log_structured_standard (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, \
+                                                         __FILE__, G_STRINGIFY (__LINE__), \
+                                                         G_STRFUNC, format)
 #else
 #define g_error(format...)    G_STMT_START {                 \
                                 g_log (G_LOG_DOMAIN,         \
index 2dac88a..a59ff5b 100644 (file)
  * g_sequence_move_range() will not invalidate the iterators pointing
  * to it. The only operation that will invalidate an iterator is when
  * the element it points to is removed from any sequence.
+ *
+ * To sort the data, either use g_sequence_insert_sorted() or
+ * g_sequence_insert_sorted_iter() to add data to the #GSequence or, if
+ * you want to add a large amount of data, it is more efficient to call
+ * g_sequence_sort() or g_sequence_sort_iter() after doing unsorted
+ * insertions.
  */
 
 /**
@@ -175,10 +181,11 @@ get_sequence (GSequenceNode *node)
   return (GSequence *)node_get_last (node)->data;
 }
 
-static void
-check_iter_access (GSequenceIter *iter)
+static gboolean
+seq_is_end (GSequence     *seq,
+            GSequenceIter *iter)
 {
-  check_seq_access (get_sequence (iter));
+  return seq->end_node == iter;
 }
 
 static gboolean
@@ -412,13 +419,17 @@ g_sequence_iter_compare (GSequenceIter *a,
                          GSequenceIter *b)
 {
   gint a_pos, b_pos;
+  GSequence *seq_a, *seq_b;
 
   g_return_val_if_fail (a != NULL, 0);
   g_return_val_if_fail (b != NULL, 0);
-  g_return_val_if_fail (get_sequence (a) == get_sequence (b), 0);
 
-  check_iter_access (a);
-  check_iter_access (b);
+  seq_a = get_sequence (a);
+  seq_b = get_sequence (b);
+  g_return_val_if_fail (seq_a == seq_b, 0);
+
+  check_seq_access (seq_a);
+  check_seq_access (seq_b);
 
   a_pos = node_get_pos (a);
   b_pos = node_get_pos (b);
@@ -502,11 +513,13 @@ GSequenceIter *
 g_sequence_insert_before (GSequenceIter *iter,
                           gpointer       data)
 {
+  GSequence *seq;
   GSequenceNode *node;
 
   g_return_val_if_fail (iter != NULL, NULL);
 
-  check_iter_access (iter);
+  seq = get_sequence (iter);
+  check_seq_access (seq);
 
   node = node_new (data);
 
@@ -533,11 +546,11 @@ g_sequence_remove (GSequenceIter *iter)
   GSequence *seq;
 
   g_return_if_fail (iter != NULL);
-  g_return_if_fail (!is_end (iter));
-
-  check_iter_access (iter);
 
   seq = get_sequence (iter);
+  g_return_if_fail (!seq_is_end (seq, iter));
+
+  check_seq_access (seq);
 
   node_unlink (iter);
   node_free (iter, seq);
@@ -559,10 +572,12 @@ void
 g_sequence_remove_range (GSequenceIter *begin,
                          GSequenceIter *end)
 {
-  g_return_if_fail (get_sequence (begin) == get_sequence (end));
+  GSequence *seq_begin, *seq_end;
 
-  check_iter_access (begin);
-  check_iter_access (end);
+  seq_begin = get_sequence (begin);
+  seq_end = get_sequence (end);
+  g_return_if_fail (seq_begin == seq_end);
+  /* check_seq_access() calls are done by g_sequence_move_range() */
 
   g_sequence_move_range (NULL, begin, end);
 }
@@ -589,20 +604,25 @@ g_sequence_move_range (GSequenceIter *dest,
                        GSequenceIter *begin,
                        GSequenceIter *end)
 {
-  GSequence *src_seq;
+  GSequence *src_seq, *end_seq, *dest_seq;
   GSequenceNode *first;
 
   g_return_if_fail (begin != NULL);
   g_return_if_fail (end != NULL);
 
-  check_iter_access (begin);
-  check_iter_access (end);
-  if (dest)
-    check_iter_access (dest);
-
   src_seq = get_sequence (begin);
+  check_seq_access (src_seq);
+
+  end_seq = get_sequence (end);
+  check_seq_access (end_seq);
+
+  if (dest)
+    {
+      dest_seq = get_sequence (dest);
+      check_seq_access (dest_seq);
+    }
 
-  g_return_if_fail (src_seq == get_sequence (end));
+  g_return_if_fail (src_seq == end_seq);
 
   /* Dest points to begin or end? */
   if (dest == begin || dest == end)
@@ -613,15 +633,13 @@ g_sequence_move_range (GSequenceIter *dest,
     return;
 
   /* dest points somewhere in the (begin, end) range? */
-  if (dest && get_sequence (dest) == src_seq &&
+  if (dest && dest_seq == src_seq &&
       g_sequence_iter_compare (dest, begin) > 0 &&
       g_sequence_iter_compare (dest, end) < 0)
     {
       return;
     }
 
-  src_seq = get_sequence (begin);
-
   first = node_get_first (begin);
 
   node_cut (begin);
@@ -695,6 +713,10 @@ g_sequence_sort (GSequence        *seq,
  * if the first item comes before the second, and a positive value
  * if the second  item comes before the first.
  *
+ * Note that when adding a large amount of data to a #GSequence,
+ * it is more efficient to do unsorted insertions and then call
+ * g_sequence_sort() or g_sequence_sort_iter().
+ *
  * Returns: (transfer none): a #GSequenceIter pointing to the new item.
  *
  * Since: 2.14
@@ -741,14 +763,18 @@ g_sequence_sort_changed (GSequenceIter    *iter,
                          GCompareDataFunc  cmp_func,
                          gpointer          cmp_data)
 {
+  GSequence *seq;
   SortInfo info;
 
-  g_return_if_fail (!is_end (iter));
+  g_return_if_fail (iter != NULL);
+
+  seq = get_sequence (iter);
+  /* check_seq_access() call is done by g_sequence_sort_changed_iter() */
+  g_return_if_fail (!seq_is_end (seq, iter));
 
   info.cmp_func = cmp_func;
   info.cmp_data = cmp_data;
-  info.end_node = get_sequence (iter)->end_node;
-  check_iter_access (iter);
+  info.end_node = seq->end_node;
 
   g_sequence_sort_changed_iter (iter, iter_compare, &info);
 }
@@ -772,10 +798,7 @@ g_sequence_sort_changed (GSequenceIter    *iter,
  * consider using g_sequence_lookup().
  *
  * This function will fail if the data contained in the sequence is
- * unsorted.  Use g_sequence_insert_sorted() or
- * g_sequence_insert_sorted_iter() to add data to your sequence or, if
- * you want to add a large amount of data, call g_sequence_sort() after
- * doing unsorted insertions.
+ * unsorted.
  *
  * Returns: (transfer none): an #GSequenceIter pointing to the position where @data
  *     would have been inserted according to @cmp_func and @cmp_data
@@ -819,10 +842,7 @@ g_sequence_search (GSequence        *seq,
  * the second item comes before the first.
  *
  * This function will fail if the data contained in the sequence is
- * unsorted.  Use g_sequence_insert_sorted() or
- * g_sequence_insert_sorted_iter() to add data to your sequence or, if
- * you want to add a large amount of data, call g_sequence_sort() after
- * doing unsorted insertions.
+ * unsorted.
  *
  * Returns: (transfer none) (nullable): an #GSequenceIter pointing to the position of the
  *     first item found equal to @data according to @cmp_func and
@@ -928,9 +948,12 @@ g_sequence_sort_changed_iter (GSequenceIter            *iter,
   GSequenceIter *next, *prev;
 
   g_return_if_fail (iter != NULL);
-  g_return_if_fail (!is_end (iter));
   g_return_if_fail (iter_cmp != NULL);
-  check_iter_access (iter);
+
+  seq = get_sequence (iter);
+  g_return_if_fail (!seq_is_end (seq, iter));
+
+  check_seq_access (seq);
 
   /* If one of the neighbours is equal to iter, then
    * don't move it. This ensures that sort_changed() is
@@ -946,8 +969,6 @@ g_sequence_sort_changed_iter (GSequenceIter            *iter,
   if (!is_end (next) && iter_cmp (next, iter, cmp_data) == 0)
     return;
 
-  seq = get_sequence (iter);
-
   seq->access_prohibited = TRUE;
 
   tmp_seq = g_sequence_new (NULL);
@@ -985,6 +1006,10 @@ g_sequence_sort_changed_iter (GSequenceIter            *iter,
  * first iterator comes before the second, and a positive value
  * if the second iterator comes before the first.
  *
+ * Note that when adding a large amount of data to a #GSequence,
+ * it is more efficient to do unsorted insertions and then call
+ * g_sequence_sort() or g_sequence_sort_iter().
+ *
  * Returns: (transfer none): a #GSequenceIter pointing to the new item
  *
  * Since: 2.14
@@ -1051,10 +1076,7 @@ g_sequence_insert_sorted_iter (GSequence                *seq,
  * consider using g_sequence_lookup_iter().
  *
  * This function will fail if the data contained in the sequence is
- * unsorted.  Use g_sequence_insert_sorted() or
- * g_sequence_insert_sorted_iter() to add data to your sequence or, if
- * you want to add a large amount of data, call g_sequence_sort() after
- * doing unsorted insertions.
+ * unsorted.
  *
  * Returns: (transfer none): a #GSequenceIter pointing to the position in @seq
  *     where @data would have been inserted according to @iter_cmp
@@ -1109,10 +1131,7 @@ g_sequence_search_iter (GSequence                *seq,
  * value if the second iterator comes before the first.
  *
  * This function will fail if the data contained in the sequence is
- * unsorted.  Use g_sequence_insert_sorted() or
- * g_sequence_insert_sorted_iter() to add data to your sequence or, if
- * you want to add a large amount of data, call g_sequence_sort() after
- * doing unsorted insertions.
+ * unsorted.
  *
  * Returns: (transfer none) (nullable): an #GSequenceIter pointing to the position of
  *     the first item found equal to @data according to @cmp_func
@@ -1213,9 +1232,9 @@ g_sequence_set (GSequenceIter *iter,
   GSequence *seq;
 
   g_return_if_fail (iter != NULL);
-  g_return_if_fail (!is_end (iter));
 
   seq = get_sequence (iter);
+  g_return_if_fail (!seq_is_end (seq, iter));
 
   /* If @data is identical to iter->data, it is destroyed
    * here. This will work right in case of ref-counted objects. Also
index 5122570..89824d1 100644 (file)
@@ -616,7 +616,7 @@ g_spawn_sync (const gchar          *working_directory,
  * standard error. If you use this flag, @standard_error must be %NULL.
  * %G_SPAWN_CHILD_INHERITS_STDIN means that the child will inherit the parent's
  * standard input (by default, the child's standard input is attached to
- * /dev/null). If you use this flag, @standard_input must be %NULL.
+ * `/dev/null`). If you use this flag, @standard_input must be %NULL.
  * %G_SPAWN_FILE_AND_ARGV_ZERO means that the first element of @argv is
  * the file to execute, while the remaining elements are the actual
  * argument vector to pass to the file. Normally g_spawn_async_with_pipes()
@@ -653,8 +653,8 @@ g_spawn_sync (const gchar          *working_directory,
  * when they are no longer in use. If these parameters are %NULL, the
  * corresponding pipe won't be created.
  *
- * If @standard_input is NULL, the child's standard input is attached to 
- * /dev/null unless %G_SPAWN_CHILD_INHERITS_STDIN is set.
+ * If @standard_input is %NULL, the child's standard input is attached to
+ * `/dev/null` unless %G_SPAWN_CHILD_INHERITS_STDIN is set.
  *
  * If @standard_error is NULL, the child's standard error goes to the same 
  * location as the parent's standard error unless %G_SPAWN_STDERR_TO_DEV_NULL 
index 364c9eb..5fff514 100644 (file)
@@ -105,7 +105,7 @@ g_mutex_impl_new (void)
   if G_UNLIKELY ((status = pthread_mutex_init (mutex, pattr)) != 0)
     g_thread_abort (status, "pthread_mutex_init");
 
-#ifdef PTHREAD_ADAPTIVE_MUTEX_NP
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
   pthread_mutexattr_destroy (&attr);
 #endif
 
index ace4ee5..a0fb163 100644 (file)
@@ -421,6 +421,9 @@ g_utf8_pointer_to_offset (const gchar *str,
  * must be valid UTF-8 encoded text. (Use g_utf8_validate() on all
  * text before trying to use UTF-8 utility functions with it.)
  * 
+ * Note you must ensure @dest is at least 4 * @n to fit the
+ * largest possible UTF-8 characters
+ *
  * Returns: @dest
  */
 gchar *
index ad1ea16..8be9ce7 100644 (file)
@@ -5282,7 +5282,7 @@ g_variant_valist_get (const gchar **str,
  * GVariant *new_variant;
  *
  * new_variant = g_variant_new ("(t^as)",
- *                              /<!-- -->* This cast is required. *<!-- -->/
+ *                              // This cast is required.
  *                              (guint64) some_flags,
  *                              some_strings);
  * ]|
index a436eae..5ea5c2b 100644 (file)
 #include <string.h>
 #include "glib.h"
 
+/* Keep in sync with glib/gbytes.c */
+struct _GBytes
+{
+  gconstpointer data;
+  gsize size;
+  gint ref_count;
+  GDestroyNotify free_func;
+  gpointer user_data;
+};
+
 static const gchar *NYAN = "nyannyan";
 static const gsize N_NYAN = 8;
 
@@ -90,6 +100,59 @@ test_new_from_bytes (void)
   g_bytes_unref (sub);
 }
 
+/* Verify that creating slices of GBytes reference the top-most bytes
+ * at the correct offset. Ensure that intermediate GBytes are not referenced.
+ */
+static void
+test_new_from_bytes_slice (void)
+{
+  GBytes *bytes = g_bytes_new_static ("Some stupid data", strlen ("Some stupid data") + 1);
+  GBytes *bytes1 = g_bytes_new_from_bytes (bytes, 4, 13);
+  GBytes *bytes2 = g_bytes_new_from_bytes (bytes1, 1, 12);
+  GBytes *bytes3 = g_bytes_new_from_bytes (bytes2, 0, 6);
+
+  g_assert_cmpint (bytes->ref_count, ==, 4);
+  g_assert_cmpint (bytes1->ref_count, ==, 1);
+  g_assert_cmpint (bytes2->ref_count, ==, 1);
+  g_assert_cmpint (bytes3->ref_count, ==, 1);
+
+  g_assert_null (bytes->user_data);
+  g_assert (bytes1->user_data == bytes);
+  g_assert (bytes2->user_data == bytes);
+  g_assert (bytes3->user_data == bytes);
+
+  g_assert_cmpint (17, ==, g_bytes_get_size (bytes));
+  g_assert_cmpint (13, ==, g_bytes_get_size (bytes1));
+  g_assert_cmpint (12, ==, g_bytes_get_size (bytes2));
+  g_assert_cmpint (6, ==, g_bytes_get_size (bytes3));
+
+  g_assert_cmpint (0, ==, strncmp ("Some stupid data", (gchar *)bytes->data, 17));
+  g_assert_cmpint (0, ==, strncmp (" stupid data", (gchar *)bytes1->data, 13));
+  g_assert_cmpint (0, ==, strncmp ("stupid data", (gchar *)bytes2->data, 12));
+  g_assert_cmpint (0, ==, strncmp ("stupid", (gchar *)bytes3->data, 6));
+
+  g_bytes_unref (bytes);
+  g_bytes_unref (bytes1);
+  g_bytes_unref (bytes2);
+  g_bytes_unref (bytes3);
+}
+
+/* Ensure that referencing an entire GBytes just returns the same bytes
+ * instance (with incremented reference count) instead of a new instance.
+ */
+static void
+test_new_from_bytes_shared_ref (void)
+{
+  GBytes *bytes = g_bytes_new_static ("Some data", strlen ("Some data") + 1);
+  GBytes *other = g_bytes_new_from_bytes (bytes, 0, g_bytes_get_size (bytes));
+
+  g_assert (bytes == other);
+  g_assert_cmpint (bytes->ref_count, ==, 2);
+
+  g_bytes_unref (bytes);
+  g_bytes_unref (other);
+}
+
 static void
 on_destroy_increment (gpointer data)
 {
@@ -336,6 +399,8 @@ main (int argc, char *argv[])
   g_test_add_func ("/bytes/new-static", test_new_static);
   g_test_add_func ("/bytes/new-with-free-func", test_new_with_free_func);
   g_test_add_func ("/bytes/new-from-bytes", test_new_from_bytes);
+  g_test_add_func ("/bytes/new-from-bytes-slice", test_new_from_bytes_slice);
+  g_test_add_func ("/bytes/new-from-bytes-shared-ref", test_new_from_bytes_shared_ref);
   g_test_add_func ("/bytes/hash", test_hash);
   g_test_add_func ("/bytes/equal", test_equal);
   g_test_add_func ("/bytes/compare", test_compare);
index 5f13a2d..03c0d72 100644 (file)
@@ -25,6 +25,7 @@
 #undef G_DISABLE_ASSERT
 #undef G_LOG_DOMAIN
 
+#include <locale.h>
 #include <string.h>
 
 #include <glib.h>
@@ -53,17 +54,19 @@ test_iconv_state (void)
   g_free (out);
 }
 
-/* some tests involving "vulgar fraction one half" */
+/* Some tests involving "vulgar fraction one half" (U+00BD). This is
+ * represented in UTF-8 as \xC2\xBD, in ISO-8859-1 as \xBD, and is not
+ * represented in ISO-8859-15. */
 static void 
 test_one_half (void)
 {
-  gchar *in = "\xc2\xbd";
+  const gchar *in_utf8 = "\xc2\xbd";
   gchar *out;
   gsize bytes_read = 0;
   gsize bytes_written = 0;
   GError *error = NULL;  
 
-  out = g_convert (in, -1, 
+  out = g_convert (in_utf8, -1,
                   "ISO-8859-1", "UTF-8",
                   &bytes_read, &bytes_written,
                   &error);
@@ -74,7 +77,7 @@ test_one_half (void)
   g_assert_cmpstr (out, ==, "\xbd");
   g_free (out);
 
-  out = g_convert (in, -1, 
+  out = g_convert (in_utf8, -1,
                   "ISO-8859-15", "UTF-8",
                   &bytes_read, &bytes_written,
                   &error);
@@ -86,7 +89,7 @@ test_one_half (void)
   g_clear_error (&error);
   g_free (out);
 
-  out = g_convert_with_fallback (in, -1, 
+  out = g_convert_with_fallback (in_utf8, -1,
                                 "ISO8859-15", "UTF-8",
                                 "a",
                                 &bytes_read, &bytes_written,
@@ -683,6 +686,230 @@ test_filename_display (void)
   g_free (display);
 }
 
+/* g_convert() should accept and produce text buffers with embedded
+ * nul bytes/characters.
+ */
+static void
+test_convert_embedded_nul (void)
+{
+  gchar *res;
+  gsize bytes_read, bytes_written;
+  GError *error = NULL;
+
+  res = g_convert ("ab\0\xf6", 4, "UTF-8", "ISO-8859-1",
+                   &bytes_read, &bytes_written, &error);
+  g_assert_no_error (error);
+  g_assert_cmpuint (bytes_read, ==, 4);
+  g_assert_cmpmem (res, bytes_written, "ab\0\xc3\xb6", 5);
+  g_free (res);
+}
+
+static void
+test_locale_to_utf8_embedded_nul (void)
+{
+  g_test_trap_subprocess ("/conversion/locale-to-utf8/embedded-nul/subprocess/utf8", 0, 0);
+  g_test_trap_assert_passed ();
+  g_test_trap_subprocess ("/conversion/locale-to-utf8/embedded-nul/subprocess/iconv", 0, 0);
+  g_test_trap_assert_passed ();
+}
+
+/* Test that embedded nul characters in UTF-8 input to g_locale_to_utf8()
+ * result in an error.
+ */
+static void
+test_locale_to_utf8_embedded_nul_utf8 (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  setlocale (LC_ALL, "");
+  g_setenv ("CHARSET", "UTF-8", TRUE);
+  g_assert_true (g_get_charset (NULL));
+
+  res = g_locale_to_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
+/* Test that embedded nul characters in output of g_locale_to_utf8(),
+ * when converted from non-UTF8 input, result in an error.
+ */
+static void
+test_locale_to_utf8_embedded_nul_iconv (void)
+{
+  gchar *res;
+  GError *error = NULL;
+
+  setlocale (LC_ALL, "C");
+  g_setenv ("CHARSET", "US-ASCII", TRUE);
+  g_assert_false (g_get_charset (NULL));
+
+  res = g_locale_to_utf8 ("ab\0c", 4, NULL, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_EMBEDDED_NUL);
+  g_error_free (error);
+}
+
+static void
+test_locale_from_utf8_embedded_nul (void)
+{
+  g_test_trap_subprocess ("/conversion/locale-from-utf8/embedded-nul/subprocess/utf8", 0, 0);
+  g_test_trap_assert_passed ();
+  g_test_trap_subprocess ("/conversion/locale-from-utf8/embedded-nul/subprocess/iconv", 0, 0);
+  g_test_trap_assert_passed ();
+}
+
+/* Test that embedded nul characters in input to g_locale_from_utf8(),
+ * when converting (copying) to UTF-8 output, result in an error.
+ */
+static void
+test_locale_from_utf8_embedded_nul_utf8 (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  setlocale (LC_ALL, "");
+  g_setenv ("CHARSET", "UTF-8", TRUE);
+  g_assert_true (g_get_charset (NULL));
+
+  res = g_locale_from_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
+/* Test that embedded nul characters in input to g_locale_from_utf8(),
+ * when converting to non-UTF-8 output, result in an error.
+ */
+static void
+test_locale_from_utf8_embedded_nul_iconv (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  setlocale (LC_ALL, "C");
+  g_setenv ("CHARSET", "US-ASCII", TRUE);
+  g_assert_false (g_get_charset (NULL));
+
+  res = g_locale_from_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
+static void
+test_filename_to_utf8_embedded_nul (void)
+{
+  g_test_trap_subprocess ("/conversion/filename-to-utf8/embedded-nul/subprocess/utf8", 0, 0);
+  g_test_trap_assert_passed ();
+  g_test_trap_subprocess ("/conversion/filename-to-utf8/embedded-nul/subprocess/iconv", 0, 0);
+  g_test_trap_assert_passed ();
+}
+
+/* Test that embedded nul characters in UTF-8 input to g_filename_to_utf8()
+ * result in an error.
+ */
+static void
+test_filename_to_utf8_embedded_nul_utf8 (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  g_setenv ("G_FILENAME_ENCODING", "UTF-8", TRUE);
+  g_assert_true (g_get_filename_charsets (NULL));
+
+  res = g_filename_to_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
+/* Test that embedded nul characters in non-UTF-8 input of g_filename_to_utf8()
+ * result in an error.
+ */
+static void
+test_filename_to_utf8_embedded_nul_iconv (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  g_setenv ("G_FILENAME_ENCODING", "US-ASCII", TRUE);
+  g_assert_false (g_get_filename_charsets (NULL));
+
+  res = g_filename_to_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
+static void
+test_filename_from_utf8_embedded_nul (void)
+{
+  g_test_trap_subprocess ("/conversion/filename-from-utf8/embedded-nul/subprocess/utf8", 0, 0);
+  g_test_trap_assert_passed ();
+  g_test_trap_subprocess ("/conversion/filename-from-utf8/embedded-nul/subprocess/iconv", 0, 0);
+  g_test_trap_assert_passed ();
+}
+
+/* Test that embedded nul characters in input to g_filename_from_utf8(),
+ * when converting (copying) to UTF-8 output, result in an error.
+ */
+static void
+test_filename_from_utf8_embedded_nul_utf8 (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  g_setenv ("G_FILENAME_ENCODING", "UTF-8", TRUE);
+  g_assert_true (g_get_filename_charsets (NULL));
+
+  res = g_filename_from_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
+/* Test that embedded nul characters in input to g_filename_from_utf8(),
+ * when converting to non-UTF-8 output, result in an error.
+ */
+static void
+test_filename_from_utf8_embedded_nul_iconv (void)
+{
+  gchar *res;
+  gsize bytes_read;
+  GError *error = NULL;
+
+  g_setenv ("G_FILENAME_ENCODING", "US-ASCII", TRUE);
+  g_assert_false (g_get_filename_charsets (NULL));
+
+  res = g_filename_from_utf8 ("ab\0c", 4, &bytes_read, NULL, &error);
+
+  g_assert_null (res);
+  g_assert_error (error, G_CONVERT_ERROR, G_CONVERT_ERROR_ILLEGAL_SEQUENCE);
+  g_assert_cmpuint (bytes_read, ==, 2);
+  g_error_free (error);
+}
+
 static void
 test_no_conv (void)
 {
@@ -712,6 +939,19 @@ main (int argc, char *argv[])
   g_test_add_func ("/conversion/unicode", test_unicode_conversions);
   g_test_add_func ("/conversion/filename-utf8", test_filename_utf8);
   g_test_add_func ("/conversion/filename-display", test_filename_display);
+  g_test_add_func ("/conversion/convert-embedded-nul", test_convert_embedded_nul);
+  g_test_add_func ("/conversion/locale-to-utf8/embedded-nul", test_locale_to_utf8_embedded_nul);
+  g_test_add_func ("/conversion/locale-to-utf8/embedded-nul/subprocess/utf8", test_locale_to_utf8_embedded_nul_utf8);
+  g_test_add_func ("/conversion/locale-to-utf8/embedded-nul/subprocess/iconv", test_locale_to_utf8_embedded_nul_iconv);
+  g_test_add_func ("/conversion/locale-from-utf8/embedded-nul", test_locale_from_utf8_embedded_nul);
+  g_test_add_func ("/conversion/locale-from-utf8/embedded-nul/subprocess/utf8", test_locale_from_utf8_embedded_nul_utf8);
+  g_test_add_func ("/conversion/locale-from-utf8/embedded-nul/subprocess/iconv", test_locale_from_utf8_embedded_nul_iconv);
+  g_test_add_func ("/conversion/filename-to-utf8/embedded-nul", test_filename_to_utf8_embedded_nul);
+  g_test_add_func ("/conversion/filename-to-utf8/embedded-nul/subprocess/utf8", test_filename_to_utf8_embedded_nul_utf8);
+  g_test_add_func ("/conversion/filename-to-utf8/embedded-nul/subprocess/iconv", test_filename_to_utf8_embedded_nul_iconv);
+  g_test_add_func ("/conversion/filename-from-utf8/embedded-nul", test_filename_from_utf8_embedded_nul);
+  g_test_add_func ("/conversion/filename-from-utf8/embedded-nul/subprocess/utf8", test_filename_from_utf8_embedded_nul_utf8);
+  g_test_add_func ("/conversion/filename-from-utf8/embedded-nul/subprocess/iconv", test_filename_from_utf8_embedded_nul_iconv);
 
   return g_test_run ();
 }
index 865368b..16f3b78 100644 (file)
@@ -68,6 +68,20 @@ check_locale_string_value (GKeyFile    *keyfile,
 }
 
 static void
+check_string_locale_value (GKeyFile    *keyfile,
+                           const gchar *group,
+                           const gchar *key,
+                           const gchar *locale,
+                           const gchar *expected)
+{
+  gchar *value;
+
+  value = g_key_file_get_locale_for_key (keyfile, group, key, locale);
+  g_assert_cmpstr (value, ==, expected);
+  g_free (value);
+}
+
+static void
 check_string_list_value (GKeyFile    *keyfile,
                          const gchar *group,
                          const gchar *key,
@@ -1686,6 +1700,32 @@ test_bytes (void)
   g_key_file_free (kf);
 }
 
+static void
+test_get_locale (void)
+{
+  GKeyFile *kf;
+
+  kf = g_key_file_new ();
+  g_key_file_load_from_data (kf,
+                             "[Group]\n"
+                             "x[fr_CA]=a\n"
+                             "x[fr]=b\n"
+                             "x=c\n",
+                             -1, G_KEY_FILE_KEEP_TRANSLATIONS,
+                             NULL);
+
+  check_locale_string_value (kf, "Group", "x", "fr_CA", "a");
+  check_string_locale_value (kf, "Group", "x", "fr_CA", "fr_CA");
+
+  check_locale_string_value (kf, "Group", "x", "fr_CH", "b");
+  check_string_locale_value (kf, "Group", "x", "fr_CH", "fr");
+
+  check_locale_string_value (kf, "Group", "x", "eo", "c");
+  check_string_locale_value (kf, "Group", "x", "eo", NULL);
+
+  g_key_file_free (kf);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -1730,6 +1770,7 @@ main (int argc, char *argv[])
   g_test_add_func ("/keyfile/utf8", test_utf8);
   g_test_add_func ("/keyfile/roundtrip", test_roundtrip);
   g_test_add_func ("/keyfile/bytes", test_bytes);
+  g_test_add_func ("/keyfile/get-locale", test_get_locale);
 
   return g_test_run ();
 }
index d03d39f..c5bef2e 100644 (file)
@@ -3480,7 +3480,7 @@ g_object_dup_qdata (GObject        *object,
  * If the previous value was replaced then ownership of the
  * old value (@oldval) is passed to the caller, including
  * the registered destroy notify for it (passed out in @old_destroy).
- * Its up to the caller to free this as he wishes, which may
+ * It’s up to the caller to free this as needed, which may
  * or may not include using @old_destroy as sometimes replacement
  * should not destroy the object in the normal way.
  *
@@ -3690,7 +3690,7 @@ g_object_dup_data (GObject        *object,
  * If the previous value was replaced then ownership of the
  * old value (@oldval) is passed to the caller, including
  * the registered destroy notify for it (passed out in @old_destroy).
- * Its up to the caller to free this as he wishes, which may
+ * It’s up to the caller to free this as needed, which may
  * or may not include using @old_destroy as sometimes replacement
  * should not destroy the object in the normal way.
  *
index d989e82..deeadcd 100644 (file)
@@ -93,7 +93,7 @@ struct _GTypeModuleClass
  * A convenience macro for dynamic type implementations, which declares a
  * class initialization function, an instance initialization function (see 
  * #GTypeInfo for information about these) and a static variable named 
- * @t_n<!-- -->_parent_class pointing to the parent class. Furthermore, 
+ * `t_n`_parent_class pointing to the parent class. Furthermore,
  * it defines a `*_get_type()` and a static `*_register_type()` functions
  * for use in your `module_init()`.
  *
index e35b54d..efd1740 100644 (file)
@@ -1,5 +1,5 @@
 project('glib', 'c', 'cpp',
-  version : '2.55.1',
+  version : '2.55.2',
   meson_version : '>= 0.44.0',
   default_options : [
     'warning_level=1',
@@ -65,7 +65,9 @@ add_project_arguments('-D_GNU_SOURCE', language: 'c')
 
 # Disable strict aliasing;
 # see https://bugzilla.gnome.org/show_bug.cgi?id=791622
-add_project_arguments('-fno-strict-aliasing', language: 'c')
+if cc.has_argument('-fno-strict-aliasing')
+  add_project_arguments('-fno-strict-aliasing', language: 'c')
+endif
 
 ########################
 # Configuration begins #
@@ -997,10 +999,14 @@ if host_system == 'windows'
   else
     glibconfig_conf.set_quoted('g_pollfd_format', '%#x')
   endif
+  glibconfig_conf.set('g_dir_separator', '\\\\')
+  glibconfig_conf.set('g_searchpath_separator', ';')
 else
   glibconfig_conf.set('g_pid_type', 'int')
   glibconfig_conf.set_quoted('g_pid_format', 'i')
   glibconfig_conf.set_quoted('g_pollfd_format', '%d')
+  glibconfig_conf.set('g_dir_separator', '/')
+  glibconfig_conf.set('g_searchpath_separator', ':')
 endif
 
 if sizet_size == short_size
@@ -1289,7 +1295,7 @@ if host_cpu_family == 'x86' or host_cpu_family == 'x86_64' or host_cpu_family ==
 elif host_cpu_family.startswith('sparc') or host_cpu_family.startswith('alpha') or host_cpu_family.startswith('powerpc') or host_cpu_family == 'ia64'
   glib_memory_barrier_needed = true
 else
-  error('Unknown host cpu: ' + host_cpu_family)
+  warning('Unknown host cpu: ' + host_cpu_family)
   glib_memory_barrier_needed = true
 endif
 glibconfig_conf.set('G_ATOMIC_OP_MEMORY_BARRIER_NEEDED', glib_memory_barrier_needed)
index a7c39fd..16ba57c 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
 # Antón Méixome <meixome@mancomun.org>, 2009.
 # Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
 # Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
-# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016, 2017.
+# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib.master\n"
 "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=glib&k"
 "eywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2017-08-10 09:30+0000\n"
-"PO-Revision-Date: 2017-08-12 12:28+0200\n"
+"POT-Creation-Date: 2018-02-02 09:07+0000\n"
+"PO-Revision-Date: 2018-02-09 14:56+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
 "Language-Team: Galician\n"
 "Language: gl\n"
@@ -29,27 +29,27 @@ msgstr ""
 "X-Generator: Virtaal 0.7.1\n"
 "X-Project-Style: gnome\n"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "GApplication options"
 msgstr "Opcións de GApplication"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "Show GApplication options"
 msgstr "Mostrar as opcións de GApplication"
 
-#: ../gio/gapplication.c:535
+#: ../gio/gapplication.c:540
 msgid "Enter GApplication service mode (use from D-Bus service files)"
 msgstr ""
 "Escriba o modo de servizo de GApplication (usar desde os ficheiros de "
 "servizo D-Bus)"
 
-#: ../gio/gapplication.c:547
+#: ../gio/gapplication.c:552
 msgid "Override the application’s ID"
 msgstr "Omitir o ID do aplicativo"
 
 #: ../gio/gapplication-tool.c:45 ../gio/gapplication-tool.c:46
 #: ../gio/gio-tool.c:227 ../gio/gresource-tool.c:488
-#: ../gio/gsettings-tool.c:522
+#: ../gio/gsettings-tool.c:551
 msgid "Print help"
 msgstr "Imprimir axuda"
 
@@ -62,7 +62,7 @@ msgstr "[ORDE]"
 msgid "Print version"
 msgstr "Mostrar versión"
 
-#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:528
+#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:557
 msgid "Print version information and exit"
 msgstr "Mostrar información da versión e saír"
 
@@ -153,7 +153,7 @@ msgid "Optional parameter to the action invocation, in GVariant format"
 msgstr "Parámetro opcional para a invocación da acción, en formato GVariant"
 
 #: ../gio/gapplication-tool.c:96 ../gio/gresource-tool.c:526
-#: ../gio/gsettings-tool.c:614
+#: ../gio/gsettings-tool.c:643
 #, c-format
 msgid ""
 "Unknown command %s\n"
@@ -167,7 +167,7 @@ msgid "Usage:\n"
 msgstr "Uso:\n"
 
 #: ../gio/gapplication-tool.c:114 ../gio/gresource-tool.c:551
-#: ../gio/gsettings-tool.c:649
+#: ../gio/gsettings-tool.c:678
 msgid "Arguments:\n"
 msgstr "Argumentos:\n"
 
@@ -271,7 +271,7 @@ msgstr ""
 #: ../gio/ginputstream.c:179 ../gio/ginputstream.c:379
 #: ../gio/ginputstream.c:617 ../gio/ginputstream.c:1019
 #: ../gio/goutputstream.c:203 ../gio/goutputstream.c:834
-#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:206
+#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:209
 #, c-format
 msgid "Too large count value passed to %s"
 msgstr "O valor de conta pasado a %s é demasiado longo"
@@ -295,8 +295,8 @@ msgid "Truncate not supported on base stream"
 msgstr "Non se permite truncar no fluxo base"
 
 #: ../gio/gcancellable.c:317 ../gio/gdbusconnection.c:1849
-#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:870
-#: ../gio/gsimpleasyncresult.c:896
+#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:871
+#: ../gio/gsimpleasyncresult.c:897
 #, c-format
 msgid "Operation was cancelled"
 msgstr "A operación foi cancelada"
@@ -314,29 +314,29 @@ msgid "Not enough space in destination"
 msgstr "Non hai espazo abondo para o enderezo do socket"
 
 #: ../gio/gcharsetconverter.c:342 ../gio/gdatainputstream.c:848
-#: ../gio/gdatainputstream.c:1257 ../glib/gconvert.c:438 ../glib/gconvert.c:845
-#: ../glib/giochannel.c:1556 ../glib/giochannel.c:1598
-#: ../glib/giochannel.c:2442 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
+#: ../gio/gdatainputstream.c:1261 ../glib/gconvert.c:452 ../glib/gconvert.c:877
+#: ../glib/giochannel.c:1557 ../glib/giochannel.c:1599
+#: ../glib/giochannel.c:2443 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
 msgid "Invalid byte sequence in conversion input"
 msgstr "A secuencia de bytes non é válida na entrada da conversión"
 
-#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:446 ../glib/gconvert.c:770
-#: ../glib/giochannel.c:1563 ../glib/giochannel.c:2454
+#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:460 ../glib/gconvert.c:791
+#: ../glib/giochannel.c:1564 ../glib/giochannel.c:2455
 #, c-format
 msgid "Error during conversion: %s"
 msgstr "Produciuse un erro durante a conversión: %s"
 
-#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1096
+#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1104
 msgid "Cancellable initialization not supported"
 msgstr "Non se permite a inicialización cancelábel"
 
-#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:321
-#: ../glib/giochannel.c:1384
+#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:327
+#: ../glib/giochannel.c:1385
 #, c-format
 msgid "Conversion from character set “%s” to “%s” is not supported"
 msgstr "Non se admite a conversión do conxunto de caracteres «%s» a «%s»"
 
-#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:325
+#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:331
 #, c-format
 msgid "Could not open converter from “%s” to “%s”"
 msgstr "Non foi posíbel abrir o conversor de «%s» a «%s»"
@@ -375,13 +375,13 @@ msgstr "Non é posíbel burlar as credenciais neste SO"
 msgid "Unexpected early end-of-stream"
 msgstr "Final de fluxo inesperadamente prematuro"
 
-#: ../gio/gdbusaddress.c:155 ../gio/gdbusaddress.c:243
-#: ../gio/gdbusaddress.c:324
+#: ../gio/gdbusaddress.c:158 ../gio/gdbusaddress.c:246
+#: ../gio/gdbusaddress.c:327
 #, c-format
 msgid "Unsupported key “%s” in address entry “%s”"
 msgstr "Clave «%s» non admitida na entrada do enderezo «%s»"
 
-#: ../gio/gdbusaddress.c:182
+#: ../gio/gdbusaddress.c:185
 #, c-format
 msgid ""
 "Address “%s” is invalid (need exactly one of path, tmpdir or abstract keys)"
@@ -389,27 +389,27 @@ msgstr ""
 "O enderezo «%s» non é válido (necesítase exactamente unha ruta, tmpdir ou "
 "claves abstractas)"
 
-#: ../gio/gdbusaddress.c:195
+#: ../gio/gdbusaddress.c:198
 #, c-format
 msgid "Meaningless key/value pair combination in address entry “%s”"
 msgstr "Combinación de par clave/valor sen sentido na entrada do enderezo «%s»"
 
-#: ../gio/gdbusaddress.c:258 ../gio/gdbusaddress.c:339
+#: ../gio/gdbusaddress.c:261 ../gio/gdbusaddress.c:342
 #, c-format
 msgid "Error in address “%s” — the port attribute is malformed"
 msgstr "Erro no enderezo «%s» — o atributo do porto está mal formado"
 
-#: ../gio/gdbusaddress.c:269 ../gio/gdbusaddress.c:350
+#: ../gio/gdbusaddress.c:272 ../gio/gdbusaddress.c:353
 #, c-format
 msgid "Error in address “%s” — the family attribute is malformed"
 msgstr "Erro no enderezo «%s» — o atributo da familia está mal formado"
 
-#: ../gio/gdbusaddress.c:460
+#: ../gio/gdbusaddress.c:463
 #, c-format
 msgid "Address element “%s” does not contain a colon (:)"
 msgstr "O elemento do enderezo «%s» non contén un caracter dous puntos (:)"
 
-#: ../gio/gdbusaddress.c:481
+#: ../gio/gdbusaddress.c:484
 #, c-format
 msgid ""
 "Key/Value pair %d, “%s”, in address element “%s” does not contain an equal "
@@ -418,7 +418,7 @@ msgstr ""
 "O par clave/valor %d, «%s» no elemento do enderezo «%s» non contén un signo "
 "de igual"
 
-#: ../gio/gdbusaddress.c:495
+#: ../gio/gdbusaddress.c:498
 #, c-format
 msgid ""
 "Error unescaping key or value in Key/Value pair %d, “%s”, in address element "
@@ -427,7 +427,7 @@ msgstr ""
 "Produciuse un erro ao desescapar a clave ou o valor no par clave/valor %d, "
 "«%s», no elemento de enderezo «%s»"
 
-#: ../gio/gdbusaddress.c:573
+#: ../gio/gdbusaddress.c:576
 #, c-format
 msgid ""
 "Error in address “%s” — the unix transport requires exactly one of the keys "
@@ -436,98 +436,98 @@ msgstr ""
 "Erro no enderezo «%s» — o transporte unix require que se estabeleza "
 "exactamente unha das claves «path» ou «abstract»"
 
-#: ../gio/gdbusaddress.c:609
+#: ../gio/gdbusaddress.c:612
 #, c-format
 msgid "Error in address “%s” — the host attribute is missing or malformed"
 msgstr "Erro no enderezo «%s» — falta o atributo do equipo ou está mal formado"
 
-#: ../gio/gdbusaddress.c:623
+#: ../gio/gdbusaddress.c:626
 #, c-format
 msgid "Error in address “%s” — the port attribute is missing or malformed"
 msgstr "Erro no enderezo «%s» — falta o atributo do porto ou está mal formado"
 
-#: ../gio/gdbusaddress.c:637
+#: ../gio/gdbusaddress.c:640
 #, c-format
 msgid "Error in address “%s” — the noncefile attribute is missing or malformed"
 msgstr ""
 "Erro no enderezo «%s» — falta o atributo do ficheiro de uso de unha vez ou "
 "está mal formado"
 
-#: ../gio/gdbusaddress.c:658
+#: ../gio/gdbusaddress.c:661
 msgid "Error auto-launching: "
 msgstr "Produciuse un erro ao autoiniciar: "
 
-#: ../gio/gdbusaddress.c:666
+#: ../gio/gdbusaddress.c:669
 #, c-format
 msgid "Unknown or unsupported transport “%s” for address “%s”"
 msgstr "Transporte «%s» descoñecido ou non compatíbel para o enderezo «%s»"
 
-#: ../gio/gdbusaddress.c:704
+#: ../gio/gdbusaddress.c:714
 #, c-format
 msgid "Error opening nonce file “%s”: %s"
 msgstr "Produciuse un erro ao abrir o ficheiro de uso de unha vez «%s»: %s"
 
-#: ../gio/gdbusaddress.c:723
+#: ../gio/gdbusaddress.c:733
 #, c-format
 msgid "Error reading from nonce file “%s”: %s"
 msgstr "Produciuse un erro ao ler o ficheiro de uso de unha vez «%s»: %s"
 
-#: ../gio/gdbusaddress.c:732
+#: ../gio/gdbusaddress.c:742
 #, c-format
 msgid "Error reading from nonce file “%s”, expected 16 bytes, got %d"
 msgstr ""
 "Produciuse un erro ao ler o ficheiro de uso de unha vez «%s»:, esperábanse "
 "16 bytes, obtivéronse %d"
 
-#: ../gio/gdbusaddress.c:750
+#: ../gio/gdbusaddress.c:760
 #, c-format
 msgid "Error writing contents of nonce file “%s” to stream:"
 msgstr ""
 "Produciuse un erro ao gravar os contidos do ficheiro de uso de unha vez «%s» "
 "ao fluxo:"
 
-#: ../gio/gdbusaddress.c:959
+#: ../gio/gdbusaddress.c:969
 msgid "The given address is empty"
 msgstr "O enderezo fornecido está baleiro"
 
-#: ../gio/gdbusaddress.c:1072
+#: ../gio/gdbusaddress.c:1082
 #, c-format
 msgid "Cannot spawn a message bus when setuid"
 msgstr "Non é posíbel iniciar («spawn») unha bus de mensaxe sen setuid"
 
-#: ../gio/gdbusaddress.c:1079
+#: ../gio/gdbusaddress.c:1089
 msgid "Cannot spawn a message bus without a machine-id: "
 msgstr ""
 "Non é posíbel iniciar («spawn») unha mensaxe ao bus sen un ID de máquina:"
 
-#: ../gio/gdbusaddress.c:1086
+#: ../gio/gdbusaddress.c:1096
 #, c-format
 msgid "Cannot autolaunch D-Bus without X11 $DISPLAY"
 msgstr "Non é posíbel autoiniciar D-Bus sen un $DISPLAY X11"
 
-#: ../gio/gdbusaddress.c:1128
+#: ../gio/gdbusaddress.c:1138
 #, c-format
 msgid "Error spawning command line “%s”: "
 msgstr "Produciuse un erro ao iniciar («spawn») a orde «%s»:"
 
-#: ../gio/gdbusaddress.c:1345
+#: ../gio/gdbusaddress.c:1355
 #, c-format
 msgid "(Type any character to close this window)\n"
 msgstr "(Prema calquera caracter para pechar esta xanela)\n"
 
-#: ../gio/gdbusaddress.c:1499
+#: ../gio/gdbusaddress.c:1509
 #, c-format
 msgid "Session dbus not running, and autolaunch failed"
 msgstr "O DBus de sesión non está executándose e o autoiniciado fallou"
 
-#: ../gio/gdbusaddress.c:1510
+#: ../gio/gdbusaddress.c:1520
 #, c-format
 msgid "Cannot determine session bus address (not implemented for this OS)"
 msgstr ""
 "Non é posíbel determinar o enderezo do bus de sesión (non está implementado "
 "para este SO)"
 
-#: ../gio/gdbusaddress.c:1648
+#: ../gio/gdbusaddress.c:1658
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -536,7 +536,7 @@ msgstr ""
 "Non é posíbel determinar o enderezo do bus desde a variábel de ambiente "
 "DBUS_STARTER_BUS_TYPE - valor descoñecido «%s»"
 
-#: ../gio/gdbusaddress.c:1657 ../gio/gdbusconnection.c:7155
+#: ../gio/gdbusaddress.c:1667 ../gio/gdbusconnection.c:7158
 msgid ""
 "Cannot determine bus address because the DBUS_STARTER_BUS_TYPE environment "
 "variable is not set"
@@ -544,7 +544,7 @@ msgstr ""
 "Non é posíbel determinar o enderezo do bus xa que a variábel de ambiente "
 "DBUS_STARTER_BUS_TYPE non está estabelecida"
 
-#: ../gio/gdbusaddress.c:1667
+#: ../gio/gdbusaddress.c:1677
 #, c-format
 msgid "Unknown bus type %d"
 msgstr "Tipo de bus %d descoñecido"
@@ -565,7 +565,7 @@ msgstr ""
 "Agotáronse todos os mecanismos de autenticación dispoñíbel (tentaronse: %s) "
 "(dispoñíbeis: %s)"
 
-#: ../gio/gdbusauth.c:1174
+#: ../gio/gdbusauth.c:1171
 msgid "Cancelled via GDBusAuthObserver::authorize-authenticated-peer"
 msgstr "Cancelando mediante GDBusAuthObserver::authorize-authenticated-peer"
 
@@ -592,12 +592,12 @@ msgstr "Produciuse un erro ao crear o directorio %s: %s"
 msgid "Error opening keyring “%s” for reading: "
 msgstr "Produciuse un erro ao abrir o anel de chaves «%s» para a súa lectura:"
 
-#: ../gio/gdbusauthmechanismsha1.c:403 ../gio/gdbusauthmechanismsha1.c:721
+#: ../gio/gdbusauthmechanismsha1.c:402 ../gio/gdbusauthmechanismsha1.c:720
 #, c-format
 msgid "Line %d of the keyring at “%s” with content “%s” is malformed"
 msgstr "A liña %d do anel de chaves en «%s» con contido «%s» está malformada"
 
-#: ../gio/gdbusauthmechanismsha1.c:417 ../gio/gdbusauthmechanismsha1.c:735
+#: ../gio/gdbusauthmechanismsha1.c:416 ../gio/gdbusauthmechanismsha1.c:734
 #, c-format
 msgid ""
 "First token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -605,7 +605,7 @@ msgstr ""
 "O primeiro token da liña %d no anel de chaves en «%s» co contido «%s» está "
 "malformado"
 
-#: ../gio/gdbusauthmechanismsha1.c:432 ../gio/gdbusauthmechanismsha1.c:749
+#: ../gio/gdbusauthmechanismsha1.c:430 ../gio/gdbusauthmechanismsha1.c:748
 #, c-format
 msgid ""
 "Second token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -613,7 +613,7 @@ msgstr ""
 "O segundo token da liña %d no anel de chaves en «%s» co contido «%s» está "
 "malformado"
 
-#: ../gio/gdbusauthmechanismsha1.c:456
+#: ../gio/gdbusauthmechanismsha1.c:454
 #, c-format
 msgid "Didn’t find cookie with id %d in the keyring at “%s”"
 msgstr "Non foi posíbel atopar a cookie co id %d no anel de chave en «%s»"
@@ -623,27 +623,27 @@ msgstr "Non foi posíbel atopar a cookie co id %d no anel de chave en «%s»"
 msgid "Error deleting stale lock file “%s”: %s"
 msgstr "Produciuse un erro ao eliminar o ficheiro de bloqueo antigo «%s»: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:569
+#: ../gio/gdbusauthmechanismsha1.c:568
 #, c-format
 msgid "Error creating lock file “%s”: %s"
 msgstr "Produciuse un erro ao crear o ficheiro de bloqueo «%s»: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:600
+#: ../gio/gdbusauthmechanismsha1.c:599
 #, c-format
 msgid "Error closing (unlinked) lock file “%s”: %s"
 msgstr "Produciuse un erro ao pechar o ficheiro de bloqueo «%s»: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:611
+#: ../gio/gdbusauthmechanismsha1.c:610
 #, c-format
 msgid "Error unlinking lock file “%s”: %s"
 msgstr "Produciuse un erro ao abrir o ficheiro de bloqueo «%s»: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:688
+#: ../gio/gdbusauthmechanismsha1.c:687
 #, c-format
 msgid "Error opening keyring “%s” for writing: "
 msgstr "Produciuse un erro ao abrir o anel de chaves «%s» para escribir:"
 
-#: ../gio/gdbusauthmechanismsha1.c:885
+#: ../gio/gdbusauthmechanismsha1.c:883
 #, c-format
 msgid "(Additionally, releasing the lock for “%s” also failed: %s) "
 msgstr "(Ademais, a liberación do bloqueo para «%s» tamén fallou: %s) "
@@ -693,12 +693,12 @@ msgstr ""
 "pero obtívose «%s»"
 
 #: ../gio/gdbusconnection.c:4414 ../gio/gdbusconnection.c:4622
-#: ../gio/gdbusconnection.c:6586
+#: ../gio/gdbusconnection.c:6589
 #, c-format
 msgid "No such interface '%s'"
 msgstr "Non existe a interface «%s»"
 
-#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7095
+#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7098
 #, c-format
 msgid "No such interface '%s' on object at path %s"
 msgstr "Non existe a interface «%s» no obxecto coa ruta %s"
@@ -733,17 +733,17 @@ msgstr "Non é posíbel estabelecer a propiedade %s.%s"
 msgid "Method '%s' returned type '%s', but expected '%s'"
 msgstr "O método «%s» devolveu un tipo «%s» máis esperábase «%s»"
 
-#: ../gio/gdbusconnection.c:6697
+#: ../gio/gdbusconnection.c:6700
 #, c-format
 msgid "Method '%s' on interface '%s' with signature '%s' does not exist"
 msgstr "O método «%s» na interface «%s» coa sinatura «%s» non existe"
 
-#: ../gio/gdbusconnection.c:6818
+#: ../gio/gdbusconnection.c:6821
 #, c-format
 msgid "A subtree is already exported for %s"
 msgstr "Xa se exportou un subárbore para %s"
 
-#: ../gio/gdbusconnection.c:7146
+#: ../gio/gdbusconnection.c:7149
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -810,17 +810,17 @@ msgstr ""
 "byte desvío %d (a lonxitude da cadea é %d). A cadea UTF-8 correcta até ese "
 "punto foi «%s»"
 
-#: ../gio/gdbusmessage.c:1589
+#: ../gio/gdbusmessage.c:1593
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus object path"
 msgstr "O valor analizado «%s» non é unha ruta de obxecto D-Bus correcta"
 
-#: ../gio/gdbusmessage.c:1611
+#: ../gio/gdbusmessage.c:1615
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature"
 msgstr "O valor analizado «%s» non é unha sinatura D-Bus correcta"
 
-#: ../gio/gdbusmessage.c:1658
+#: ../gio/gdbusmessage.c:1662
 #, c-format
 msgid ""
 "Encountered array of length %u byte. Maximum length is 2<<26 bytes (64 MiB)."
@@ -833,7 +833,7 @@ msgstr[1] ""
 "Atopouse unha matriz cunha lonxitude de %u bytes. A lonxitude máxima é 2<<26 "
 "bytes (64 MiB)."
 
-#: ../gio/gdbusmessage.c:1678
+#: ../gio/gdbusmessage.c:1682
 #, c-format
 msgid ""
 "Encountered array of type “a%c”, expected to have a length a multiple of %u "
@@ -842,13 +842,13 @@ msgstr ""
 "Atopouse unha matriz de tipo «a%c», agardábase ter unha de lonxitude de "
 "varios %u bytes, aínda que se atopou unha de %u bytes."
 
-#: ../gio/gdbusmessage.c:1845
+#: ../gio/gdbusmessage.c:1849
 #, c-format
 msgid "Parsed value “%s” for variant is not a valid D-Bus signature"
 msgstr ""
 "O valor «%s» analizado para a variante non é unha sinatura de D-Bus correcta"
 
-#: ../gio/gdbusmessage.c:1869
+#: ../gio/gdbusmessage.c:1873
 #, c-format
 msgid ""
 "Error deserializing GVariant with type string “%s” from the D-Bus wire format"
@@ -856,7 +856,7 @@ msgstr ""
 "Produciuse un erro ao deserializar o GVariant co tipo cadea «%s» desde o "
 "formato ligado D-Bus"
 
-#: ../gio/gdbusmessage.c:2053
+#: ../gio/gdbusmessage.c:2055
 #, c-format
 msgid ""
 "Invalid endianness value. Expected 0x6c (“l”) or 0x42 (“B”) but found value "
@@ -865,26 +865,26 @@ msgstr ""
 "Valor de «endianness» non válido. Esperábase 0x6c («|») ou 0x42 («B») pero "
 "atopouse 0x%02x"
 
-#: ../gio/gdbusmessage.c:2066
+#: ../gio/gdbusmessage.c:2068
 #, c-format
 msgid "Invalid major protocol version. Expected 1 but found %d"
 msgstr ""
 "A versión maior do protocolo non é válida. Esperábase 1 pero atopouse a %d"
 
-#: ../gio/gdbusmessage.c:2122
+#: ../gio/gdbusmessage.c:2124
 #, c-format
 msgid "Signature header with signature “%s” found but message body is empty"
 msgstr ""
 "Atopouse a cabeceira de sinatura coa sinatura «%s» máis o corpo da mensaxe "
 "está baleiro"
 
-#: ../gio/gdbusmessage.c:2136
+#: ../gio/gdbusmessage.c:2138
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature (for body)"
 msgstr ""
 "O valor analizado «%s» non é unha sinatura D-Bus correcta (para o corpo)"
 
-#: ../gio/gdbusmessage.c:2166
+#: ../gio/gdbusmessage.c:2168
 #, c-format
 msgid "No signature header in message but the message body is %u byte"
 msgid_plural "No signature header in message but the message body is %u bytes"
@@ -895,11 +895,11 @@ msgstr[1] ""
 "Non hai unha cabeceira da sinatura na mensaxe pero o corpo da mensaxe ten %u "
 "bytes"
 
-#: ../gio/gdbusmessage.c:2176
+#: ../gio/gdbusmessage.c:2178
 msgid "Cannot deserialize message: "
 msgstr "Non foi posíbel deserializar a mensaxe: "
 
-#: ../gio/gdbusmessage.c:2517
+#: ../gio/gdbusmessage.c:2519
 #, c-format
 msgid ""
 "Error serializing GVariant with type string “%s” to the D-Bus wire format"
@@ -907,27 +907,26 @@ msgstr ""
 "Produciuse un erro ao serializar o GVariant co tipo cadea «%s» desde o "
 "formato ligado D-Bus"
 
-#: ../gio/gdbusmessage.c:2654
+#: ../gio/gdbusmessage.c:2656
 #, c-format
 msgid ""
-"Message has %d file descriptors but the header field indicates %d file "
-"descriptors"
+"Number of file descriptors in message (%d) differs from header field (%d)"
 msgstr ""
-"A mensaxe ten %d descritores de ficheiro pero o campo da cabeceira indica %d "
-"descritores de ficheiro"
+"O número de descritores de ficheiro no mensaxe (%d) difire do campo "
+"cabeceira (%d)"
 
-#: ../gio/gdbusmessage.c:2662
+#: ../gio/gdbusmessage.c:2664
 msgid "Cannot serialize message: "
 msgstr "Non foi posíbel serializar a mensaxe: "
 
-#: ../gio/gdbusmessage.c:2706
+#: ../gio/gdbusmessage.c:2708
 #, c-format
 msgid "Message body has signature “%s” but there is no signature header"
 msgstr ""
 "O corpo da mensaxe ten a sinatura «%s» máis non está presente a cabeceira de "
 "sinatura"
 
-#: ../gio/gdbusmessage.c:2716
+#: ../gio/gdbusmessage.c:2718
 #, c-format
 msgid ""
 "Message body has type signature “%s” but signature in the header field is "
@@ -936,19 +935,19 @@ msgstr ""
 "O corpo da mensaxe ten a sinatura de tipo «%s» pero a sintura no campo da "
 "cabeceira é «%s»"
 
-#: ../gio/gdbusmessage.c:2732
+#: ../gio/gdbusmessage.c:2734
 #, c-format
 msgid "Message body is empty but signature in the header field is “(%s)”"
 msgstr ""
 "O corpo da mensaxe está baleiro máis a sinatura do campo da cabeceira é "
 "«(%s)»"
 
-#: ../gio/gdbusmessage.c:3285
+#: ../gio/gdbusmessage.c:3287
 #, c-format
 msgid "Error return with body of type “%s”"
 msgstr "Produciuse un erro ao devolver co corpo de tipo «%s»"
 
-#: ../gio/gdbusmessage.c:3293
+#: ../gio/gdbusmessage.c:3295
 msgid "Error return with empty body"
 msgstr "Produciuse un erro ao devolver co corpo baleiro"
 
@@ -1027,60 +1026,60 @@ msgstr ""
 "\n"
 "Use '%s ORDE --help' para obter axuda sobre cada orde.\n"
 
-#: ../gio/gdbus-tool.c:165 ../gio/gdbus-tool.c:227 ../gio/gdbus-tool.c:299
-#: ../gio/gdbus-tool.c:323 ../gio/gdbus-tool.c:725 ../gio/gdbus-tool.c:1068
-#: ../gio/gdbus-tool.c:1510
+#: ../gio/gdbus-tool.c:167 ../gio/gdbus-tool.c:234 ../gio/gdbus-tool.c:306
+#: ../gio/gdbus-tool.c:330 ../gio/gdbus-tool.c:811 ../gio/gdbus-tool.c:1150
+#: ../gio/gdbus-tool.c:1592
 #, c-format
 msgid "Error: %s\n"
 msgstr "Erro: %s\n"
 
-#: ../gio/gdbus-tool.c:176 ../gio/gdbus-tool.c:240 ../gio/gdbus-tool.c:1526
+#: ../gio/gdbus-tool.c:178 ../gio/gdbus-tool.c:247 ../gio/gdbus-tool.c:1608
 #, c-format
 msgid "Error parsing introspection XML: %s\n"
 msgstr "Produciuse un erro ao analizar o XML de introspección: %s\n"
 
-#: ../gio/gdbus-tool.c:209
+#: ../gio/gdbus-tool.c:216
 #, c-format
 msgid "Error: %s is not a valid name\n"
 msgstr "Erro: %s non é un nome válido\n"
 
-#: ../gio/gdbus-tool.c:357
+#: ../gio/gdbus-tool.c:364
 msgid "Connect to the system bus"
 msgstr "Conectar ao bus do sistema"
 
-#: ../gio/gdbus-tool.c:358
+#: ../gio/gdbus-tool.c:365
 msgid "Connect to the session bus"
 msgstr "Conectar ao bus de sesión"
 
-#: ../gio/gdbus-tool.c:359
+#: ../gio/gdbus-tool.c:366
 msgid "Connect to given D-Bus address"
 msgstr "Conectar a un enderezo D-Bus fornecido"
 
-#: ../gio/gdbus-tool.c:369
+#: ../gio/gdbus-tool.c:376
 msgid "Connection Endpoint Options:"
 msgstr "Opcións da conexión do extremo:"
 
-#: ../gio/gdbus-tool.c:370
+#: ../gio/gdbus-tool.c:377
 msgid "Options specifying the connection endpoint"
 msgstr "Opción para especificar a conexión do extremo"
 
-#: ../gio/gdbus-tool.c:392
+#: ../gio/gdbus-tool.c:399
 #, c-format
 msgid "No connection endpoint specified"
 msgstr "Non se especificou o punto final da conexión"
 
-#: ../gio/gdbus-tool.c:402
+#: ../gio/gdbus-tool.c:409
 #, c-format
 msgid "Multiple connection endpoints specified"
 msgstr "Especificáronse varios puntos finais da conexión"
 
-#: ../gio/gdbus-tool.c:472
+#: ../gio/gdbus-tool.c:479
 #, c-format
 msgid ""
 "Warning: According to introspection data, interface “%s” does not exist\n"
 msgstr "Aviso: segundo os datos de introspección a interface «%s» non existe\n"
 
-#: ../gio/gdbus-tool.c:481
+#: ../gio/gdbus-tool.c:488
 #, c-format
 msgid ""
 "Warning: According to introspection data, method “%s” does not exist on "
@@ -1089,166 +1088,169 @@ msgstr ""
 "Aviso: segundo os datos de introspección o método «%s» non existe na "
 "interface «%s»\n"
 
-#: ../gio/gdbus-tool.c:543
+#: ../gio/gdbus-tool.c:550
 msgid "Optional destination for signal (unique name)"
 msgstr "Destino opcional para o sinal (nome único)"
 
-#: ../gio/gdbus-tool.c:544
+#: ../gio/gdbus-tool.c:551
 msgid "Object path to emit signal on"
 msgstr "Ruta do obxecto sobre o que emitir o sinal"
 
-#: ../gio/gdbus-tool.c:545
+#: ../gio/gdbus-tool.c:552
 msgid "Signal and interface name"
 msgstr "Nomes da interface e sinal"
 
-#: ../gio/gdbus-tool.c:579
+#: ../gio/gdbus-tool.c:587
 msgid "Emit a signal."
 msgstr "Emitir un sinal."
 
-#: ../gio/gdbus-tool.c:613 ../gio/gdbus-tool.c:858 ../gio/gdbus-tool.c:1616
-#: ../gio/gdbus-tool.c:1851 ../gio/gdbus-tool.c:2067
+#: ../gio/gdbus-tool.c:642 ../gio/gdbus-tool.c:944 ../gio/gdbus-tool.c:1698
+#: ../gio/gdbus-tool.c:1931 ../gio/gdbus-tool.c:2152
 #, c-format
 msgid "Error connecting: %s\n"
 msgstr "Produciuse un erro ao conectar: %s\n"
 
-#: ../gio/gdbus-tool.c:625
+#: ../gio/gdbus-tool.c:659 ../gio/gdbus-tool.c:961 ../gio/gdbus-tool.c:1715
+#: ../gio/gdbus-tool.c:1956
 #, c-format
-msgid "Error: object path not specified.\n"
-msgstr "Erro: non se especificou unha ruta de obxecto.\n"
+msgid "Error: Destination is not specified\n"
+msgstr "Erro: non se especificou un destino\n"
+
+#: ../gio/gdbus-tool.c:670
+#, c-format
+msgid "Error: %s is not a valid unique bus name.\n"
+msgstr "Erro: %s non é un nome de bus único correcto.\n"
+
+#: ../gio/gdbus-tool.c:685 ../gio/gdbus-tool.c:987 ../gio/gdbus-tool.c:1741
+#, c-format
+msgid "Error: Object path is not specified\n"
+msgstr "Erro: non se especificou unha ruta de obxecto\n"
 
-#: ../gio/gdbus-tool.c:630 ../gio/gdbus-tool.c:925 ../gio/gdbus-tool.c:1681
-#: ../gio/gdbus-tool.c:1917
+#: ../gio/gdbus-tool.c:705 ../gio/gdbus-tool.c:1007 ../gio/gdbus-tool.c:1761
+#: ../gio/gdbus-tool.c:2002
 #, c-format
 msgid "Error: %s is not a valid object path\n"
 msgstr "Erro: %s non é unha ruta a un obxecto correcta\n"
 
-#: ../gio/gdbus-tool.c:636
+#: ../gio/gdbus-tool.c:720
 #, c-format
-msgid "Error: signal not specified.\n"
-msgstr "Erro: non se especificou o sinal.\n"
+#| msgid "Error: Method name is not specified\n"
+msgid "Error: Signal name is not specified\n"
+msgstr "Erro: non se especificou o nome do sinal\n"
 
-#: ../gio/gdbus-tool.c:643
+#: ../gio/gdbus-tool.c:731
 #, c-format
-msgid "Error: signal must be the fully-qualified name.\n"
-msgstr "Erro: o sinal debe ser un nome cualificado completo.\n"
+#| msgid "Error: Method name “%s” is invalid\n"
+msgid "Error: Signal name “%s” is invalid\n"
+msgstr "Erro: o nome do sinal «%s» non é válido\n"
 
-#: ../gio/gdbus-tool.c:651
+#: ../gio/gdbus-tool.c:743
 #, c-format
 msgid "Error: %s is not a valid interface name\n"
 msgstr "Erro: %s non é un nome de interface correcto\n"
 
-#: ../gio/gdbus-tool.c:657
+#: ../gio/gdbus-tool.c:749
 #, c-format
 msgid "Error: %s is not a valid member name\n"
 msgstr "Erro: %s non é un nome de membro correcto\n"
 
-#: ../gio/gdbus-tool.c:663
-#, c-format
-msgid "Error: %s is not a valid unique bus name.\n"
-msgstr "Erro: %s non é un nome de bus único correcto.\n"
-
 #. Use the original non-"parse-me-harder" error
-#: ../gio/gdbus-tool.c:700 ../gio/gdbus-tool.c:1037
+#: ../gio/gdbus-tool.c:786 ../gio/gdbus-tool.c:1119
 #, c-format
 msgid "Error parsing parameter %d: %s\n"
 msgstr "Produciuse un erro ao analizar a opción %d: %s\n"
 
-#: ../gio/gdbus-tool.c:732
+#: ../gio/gdbus-tool.c:818
 #, c-format
 msgid "Error flushing connection: %s\n"
 msgstr "Produciuse un erro ao limpar a conexión: %s\n"
 
-#: ../gio/gdbus-tool.c:759
+#: ../gio/gdbus-tool.c:845
 msgid "Destination name to invoke method on"
 msgstr "Nome do destino onde invocar o método"
 
-#: ../gio/gdbus-tool.c:760
+#: ../gio/gdbus-tool.c:846
 msgid "Object path to invoke method on"
 msgstr "Ruta ao obxecto onde invocar o método"
 
-#: ../gio/gdbus-tool.c:761
+#: ../gio/gdbus-tool.c:847
 msgid "Method and interface name"
 msgstr "Método e nome da interface"
 
-#: ../gio/gdbus-tool.c:762
+#: ../gio/gdbus-tool.c:848
 msgid "Timeout in seconds"
 msgstr "Tempo de expiración en segundos"
 
-#: ../gio/gdbus-tool.c:803
+#: ../gio/gdbus-tool.c:889
 msgid "Invoke a method on a remote object."
 msgstr "Invocar un método nun obxecto remoto."
 
-#: ../gio/gdbus-tool.c:878 ../gio/gdbus-tool.c:1635 ../gio/gdbus-tool.c:1870
-#, c-format
-msgid "Error: Destination is not specified\n"
-msgstr "Erro: non se especificou un destino\n"
-
-#: ../gio/gdbus-tool.c:890 ../gio/gdbus-tool.c:1652 ../gio/gdbus-tool.c:1882
+#: ../gio/gdbus-tool.c:972 ../gio/gdbus-tool.c:1732 ../gio/gdbus-tool.c:1967
 #, c-format
 msgid "Error: %s is not a valid bus name\n"
 msgstr "Erro: %s non é un nome de bus válido\n"
 
-#: ../gio/gdbus-tool.c:905 ../gio/gdbus-tool.c:1661
-#, c-format
-msgid "Error: Object path is not specified\n"
-msgstr "Erro: non se especificou unha ruta de obxecto\n"
-
-#: ../gio/gdbus-tool.c:940
+#: ../gio/gdbus-tool.c:1022
 #, c-format
 msgid "Error: Method name is not specified\n"
 msgstr "Erro: non se especificou o nome do método\n"
 
-#: ../gio/gdbus-tool.c:951
+#: ../gio/gdbus-tool.c:1033
 #, c-format
 msgid "Error: Method name “%s” is invalid\n"
 msgstr "Erro: o nome do método «%s» non é válido\n"
 
-#: ../gio/gdbus-tool.c:1029
+#: ../gio/gdbus-tool.c:1111
 #, c-format
 msgid "Error parsing parameter %d of type “%s”: %s\n"
 msgstr "Produciuse un erro ao analizar o parámetro %d do tipo «%s»: %s\n"
 
-#: ../gio/gdbus-tool.c:1473
+#: ../gio/gdbus-tool.c:1555
 msgid "Destination name to introspect"
 msgstr "Nome de destino a introspeccionar"
 
-#: ../gio/gdbus-tool.c:1474
+#: ../gio/gdbus-tool.c:1556
 msgid "Object path to introspect"
 msgstr "Ruta do obxecto a introspeccionar"
 
-#: ../gio/gdbus-tool.c:1475
+#: ../gio/gdbus-tool.c:1557
 msgid "Print XML"
 msgstr "Imprimir XML"
 
-#: ../gio/gdbus-tool.c:1476
+#: ../gio/gdbus-tool.c:1558
 msgid "Introspect children"
 msgstr "Introspeccionar fillo"
 
-#: ../gio/gdbus-tool.c:1477
+#: ../gio/gdbus-tool.c:1559
 msgid "Only print properties"
 msgstr "Só mostrar propiedades"
 
-#: ../gio/gdbus-tool.c:1568
+#: ../gio/gdbus-tool.c:1650
 msgid "Introspect a remote object."
 msgstr "Introspecciona un obxecto remoto."
 
-#: ../gio/gdbus-tool.c:1773
+#: ../gio/gdbus-tool.c:1853
 msgid "Destination name to monitor"
 msgstr "Nome de destino a monitorizar"
 
-#: ../gio/gdbus-tool.c:1774
+#: ../gio/gdbus-tool.c:1854
 msgid "Object path to monitor"
 msgstr "Ruta do obxecto a monitorizar"
 
-#: ../gio/gdbus-tool.c:1803
+#: ../gio/gdbus-tool.c:1883
 msgid "Monitor a remote object."
 msgstr "Monitoriza un obxecto remoto."
 
-#: ../gio/gdbus-tool.c:1980
+#: ../gio/gdbus-tool.c:1941
+#, c-format
+msgid "Error: can’t monitor a non-message-bus connection\n"
+msgstr "Erro: non é posíbel monitorizar unha conexión non-message-bus\n"
+
+#: ../gio/gdbus-tool.c:2065
 msgid "Service to activate before waiting for the other one (well-known name)"
 msgstr "Servizo a activar antes de agardar polo outro (nome coñecido)"
 
-#: ../gio/gdbus-tool.c:1983
+#: ../gio/gdbus-tool.c:2068
 msgid ""
 "Timeout to wait for before exiting with an error (seconds); 0 for no timeout "
 "(default)"
@@ -1256,35 +1258,35 @@ msgstr ""
 "Tempo de espera máximo a agardar antes de saír con un erro (segundos); 0 "
 "para non ter tempo de espera (valor por omisión)"
 
-#: ../gio/gdbus-tool.c:2031
+#: ../gio/gdbus-tool.c:2116
 msgid "[OPTION…] BUS-NAME"
 msgstr "[OPCIÓN…] NOME-BUS"
 
-#: ../gio/gdbus-tool.c:2033
+#: ../gio/gdbus-tool.c:2118
 msgid "Wait for a bus name to appear."
 msgstr "Agardar que apareza un nome de bus."
 
-#: ../gio/gdbus-tool.c:2109
+#: ../gio/gdbus-tool.c:2194
 #, c-format
 msgid "Error: A service to activate for must be specified.\n"
 msgstr "Erro: Debe especificar un servizo a activar.\n"
 
-#: ../gio/gdbus-tool.c:2114
+#: ../gio/gdbus-tool.c:2199
 #, c-format
 msgid "Error: A service to wait for must be specified.\n"
 msgstr "Erro: Debe especificar un servizo a agardar.\n"
 
-#: ../gio/gdbus-tool.c:2119
+#: ../gio/gdbus-tool.c:2204
 #, c-format
 msgid "Error: Too many arguments.\n"
 msgstr "Erro: Demasiados argumentos.\n"
 
-#: ../gio/gdbus-tool.c:2127 ../gio/gdbus-tool.c:2134
+#: ../gio/gdbus-tool.c:2212 ../gio/gdbus-tool.c:2219
 #, c-format
 msgid "Error: %s is not a valid well-known bus name.\n"
 msgstr "Erro: %s non é un nome de bus válido e coñecido.\n"
 
-#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4533
+#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4566
 msgid "Unnamed"
 msgstr "Sen nome"
 
@@ -1292,33 +1294,33 @@ msgstr "Sen nome"
 msgid "Desktop file didn’t specify Exec field"
 msgstr "O ficheiro de escritorio non especificou o campo Exec"
 
-#: ../gio/gdesktopappinfo.c:2696
+#: ../gio/gdesktopappinfo.c:2701
 msgid "Unable to find terminal required for application"
 msgstr "Non é posíbel atopar o terminal requirido polo aplicativo"
 
-#: ../gio/gdesktopappinfo.c:3129
+#: ../gio/gdesktopappinfo.c:3135
 #, c-format
 msgid "Can’t create user application configuration folder %s: %s"
 msgstr ""
 "Non é posíbel crear o directorio de configuración do aplicativo de usuario "
 "%s: %s"
 
-#: ../gio/gdesktopappinfo.c:3133
+#: ../gio/gdesktopappinfo.c:3139
 #, c-format
 msgid "Can’t create user MIME configuration folder %s: %s"
 msgstr ""
 "Non é posíbel crear o directorio de configuración MIME %s do usuario: %s"
 
-#: ../gio/gdesktopappinfo.c:3373 ../gio/gdesktopappinfo.c:3397
+#: ../gio/gdesktopappinfo.c:3379 ../gio/gdesktopappinfo.c:3403
 msgid "Application information lacks an identifier"
 msgstr "A información do aplicativo carece dun identificador"
 
-#: ../gio/gdesktopappinfo.c:3631
+#: ../gio/gdesktopappinfo.c:3637
 #, c-format
 msgid "Can’t create user desktop file %s"
 msgstr "Non é posíbel crear o ficheiro de escritorio %s do usuario"
 
-#: ../gio/gdesktopappinfo.c:3765
+#: ../gio/gdesktopappinfo.c:3771
 #, c-format
 msgid "Custom definition for %s"
 msgstr "Definición personalizada para %s"
@@ -1382,14 +1384,14 @@ msgstr ""
 msgid "Expected a GEmblem for GEmblemedIcon"
 msgstr "Esperábase un GEmblem para o GEmblemedIcon"
 
-#: ../gio/gfile.c:969 ../gio/gfile.c:1207 ../gio/gfile.c:1345
-#: ../gio/gfile.c:1583 ../gio/gfile.c:1638 ../gio/gfile.c:1696
-#: ../gio/gfile.c:1780 ../gio/gfile.c:1837 ../gio/gfile.c:1901
-#: ../gio/gfile.c:1956 ../gio/gfile.c:3614 ../gio/gfile.c:3669
-#: ../gio/gfile.c:3905 ../gio/gfile.c:3947 ../gio/gfile.c:4415
-#: ../gio/gfile.c:4826 ../gio/gfile.c:4911 ../gio/gfile.c:5001
-#: ../gio/gfile.c:5098 ../gio/gfile.c:5185 ../gio/gfile.c:5286
-#: ../gio/gfile.c:7827 ../gio/gfile.c:7917 ../gio/gfile.c:8001
+#: ../gio/gfile.c:1071 ../gio/gfile.c:1309 ../gio/gfile.c:1447
+#: ../gio/gfile.c:1685 ../gio/gfile.c:1740 ../gio/gfile.c:1798
+#: ../gio/gfile.c:1882 ../gio/gfile.c:1939 ../gio/gfile.c:2003
+#: ../gio/gfile.c:2058 ../gio/gfile.c:3704 ../gio/gfile.c:3759
+#: ../gio/gfile.c:3995 ../gio/gfile.c:4037 ../gio/gfile.c:4505
+#: ../gio/gfile.c:4916 ../gio/gfile.c:5001 ../gio/gfile.c:5091
+#: ../gio/gfile.c:5188 ../gio/gfile.c:5275 ../gio/gfile.c:5376
+#: ../gio/gfile.c:7954 ../gio/gfile.c:8044 ../gio/gfile.c:8128
 #: ../gio/win32/gwinhttpfile.c:437
 msgid "Operation not supported"
 msgstr "Operación non permitida"
@@ -1398,69 +1400,69 @@ msgstr "Operación non permitida"
 #. * trying to find the enclosing (user visible)
 #. * mount of a file, but none exists.
 #.
-#: ../gio/gfile.c:1468
+#: ../gio/gfile.c:1570
 msgid "Containing mount does not exist"
 msgstr "O punto de montaxe contido non existe"
 
-#: ../gio/gfile.c:2515 ../gio/glocalfile.c:2377
+#: ../gio/gfile.c:2617 ../gio/glocalfile.c:2446
 msgid "Can’t copy over directory"
 msgstr "Non é posíbel copiar sobre o directorio"
 
-#: ../gio/gfile.c:2575
+#: ../gio/gfile.c:2677
 msgid "Can’t copy directory over directory"
 msgstr "Non é posíbel copiar un directorio sobre o directorio"
 
-#: ../gio/gfile.c:2583
+#: ../gio/gfile.c:2685
 msgid "Target file exists"
 msgstr "O ficheiro de destino xa existe"
 
-#: ../gio/gfile.c:2602
+#: ../gio/gfile.c:2704
 msgid "Can’t recursively copy directory"
 msgstr "Non é posíbel copiar o directorio recursivamente"
 
-#: ../gio/gfile.c:2889
+#: ../gio/gfile.c:2979
 msgid "Splice not supported"
 msgstr "Non se admite a unión"
 
-#: ../gio/gfile.c:2893
+#: ../gio/gfile.c:2983
 #, c-format
 msgid "Error splicing file: %s"
 msgstr "Produciuse un erro ao empalmar o ficheiro: %s"
 
-#: ../gio/gfile.c:3025
+#: ../gio/gfile.c:3115
 msgid "Copy (reflink/clone) between mounts is not supported"
 msgstr "Copiar (reflink/clonar) entre montaxes non é compatíbel"
 
-#: ../gio/gfile.c:3029
+#: ../gio/gfile.c:3119
 msgid "Copy (reflink/clone) is not supported or invalid"
 msgstr "Copiar (reflink/clone) non é compatíbel ou non é válido"
 
-#: ../gio/gfile.c:3034
+#: ../gio/gfile.c:3124
 msgid "Copy (reflink/clone) is not supported or didn’t work"
 msgstr "Copiar (reflink/clone) non é compatíbel ou non funciona"
 
-#: ../gio/gfile.c:3097
+#: ../gio/gfile.c:3187
 msgid "Can’t copy special file"
 msgstr "Non é posíbel copiar o ficheiro especial"
 
-#: ../gio/gfile.c:3895
+#: ../gio/gfile.c:3985
 msgid "Invalid symlink value given"
 msgstr "O valor da ligazón simbólica dada non é válido"
 
-#: ../gio/gfile.c:4056
+#: ../gio/gfile.c:4146
 msgid "Trash not supported"
 msgstr "O Lixo non é compatíbel"
 
-#: ../gio/gfile.c:4168
+#: ../gio/gfile.c:4258
 #, c-format
 msgid "File names cannot contain “%c”"
 msgstr "Os nomes de ficheiro non poden conter «%c»"
 
-#: ../gio/gfile.c:6614 ../gio/gvolume.c:363
+#: ../gio/gfile.c:6739 ../gio/gvolume.c:363
 msgid "volume doesn’t implement mount"
 msgstr "o volume non implementa o montado"
 
-#: ../gio/gfile.c:6723
+#: ../gio/gfile.c:6848
 msgid "No application is registered as handling this file"
 msgstr "Non hai ningún aplicativo rexistrado para manexar este ficheiro"
 
@@ -1506,7 +1508,7 @@ msgid "Truncate not supported on stream"
 msgstr "Non se permite truncar no fluxo"
 
 #: ../gio/ghttpproxy.c:91 ../gio/gresolver.c:410 ../gio/gresolver.c:476
-#: ../glib/gconvert.c:1650
+#: ../glib/gconvert.c:1777
 msgid "Invalid hostname"
 msgstr "O nome do host non é válido"
 
@@ -1588,7 +1590,7 @@ msgid "Could not parse “%s” as IP address mask"
 msgstr "Non foi posíbel analizar «%s» como unha máscara dun enderezo IP"
 
 #: ../gio/ginetsocketaddress.c:203 ../gio/ginetsocketaddress.c:220
-#: ../gio/gnativesocketaddress.c:106 ../gio/gunixsocketaddress.c:218
+#: ../gio/gnativesocketaddress.c:109 ../gio/gunixsocketaddress.c:218
 msgid "Not enough space for socket address"
 msgstr "Non hai espazo abondo para o enderezo do socket"
 
@@ -1708,27 +1710,27 @@ msgstr "Lista os contidos da localización nunha árbore"
 msgid "Use %s to get detailed help.\n"
 msgstr "Use '%s help ORDE' para obter axuda detallada.\n"
 
-#: ../gio/gio-tool-cat.c:83
+#: ../gio/gio-tool-cat.c:87
 msgid "Error writing to stdout"
 msgstr "Produciuse un erro ao escribir ao stdout"
 
 #. Translators: commandline placeholder
-#: ../gio/gio-tool-cat.c:127 ../gio/gio-tool-info.c:282
+#: ../gio/gio-tool-cat.c:133 ../gio/gio-tool-info.c:282
 #: ../gio/gio-tool-list.c:165 ../gio/gio-tool-mkdir.c:48
 #: ../gio/gio-tool-monitor.c:37 ../gio/gio-tool-monitor.c:39
 #: ../gio/gio-tool-monitor.c:41 ../gio/gio-tool-monitor.c:43
 #: ../gio/gio-tool-monitor.c:203 ../gio/gio-tool-mount.c:1141
-#: ../gio/gio-tool-open.c:45 ../gio/gio-tool-remove.c:48
+#: ../gio/gio-tool-open.c:113 ../gio/gio-tool-remove.c:48
 #: ../gio/gio-tool-rename.c:45 ../gio/gio-tool-set.c:89
 #: ../gio/gio-tool-trash.c:81 ../gio/gio-tool-tree.c:239
 msgid "LOCATION"
 msgstr "LOCALICCIÓN"
 
-#: ../gio/gio-tool-cat.c:132
+#: ../gio/gio-tool-cat.c:138
 msgid "Concatenate files and print to standard output."
 msgstr "Concatenar ficheiros e imprimir á saída estándar."
 
-#: ../gio/gio-tool-cat.c:134
+#: ../gio/gio-tool-cat.c:140
 msgid ""
 "gio cat works just like the traditional cat utility, but using GIO\n"
 "locations instead of local files: for example, you can use something\n"
@@ -1739,9 +1741,9 @@ msgstr ""
 "GIO no lugar de ficheiros locais: por exemplo, pode usar algo así como \n"
 "smb:////server/resource/file.txt como localización."
 
-#: ../gio/gio-tool-cat.c:156 ../gio/gio-tool-info.c:313
+#: ../gio/gio-tool-cat.c:162 ../gio/gio-tool-info.c:313
 #: ../gio/gio-tool-mkdir.c:76 ../gio/gio-tool-monitor.c:228
-#: ../gio/gio-tool-open.c:71 ../gio/gio-tool-remove.c:72
+#: ../gio/gio-tool-open.c:139 ../gio/gio-tool-remove.c:72
 msgid "No locations given"
 msgstr "Non se forneceron localizacións"
 
@@ -1782,7 +1784,7 @@ msgstr "ORIXE"
 
 #. Translators: commandline placeholder
 #: ../gio/gio-tool-copy.c:98 ../gio/gio-tool-move.c:94
-#: ../gio/gio-tool-save.c:165
+#: ../gio/gio-tool-save.c:160
 msgid "DESTINATION"
 msgstr "DESTINO"
 
@@ -2139,7 +2141,7 @@ msgstr ""
 msgid "Target %s is not a directory"
 msgstr "O destino %s non é un directorio"
 
-#: ../gio/gio-tool-open.c:50
+#: ../gio/gio-tool-open.c:118
 msgid ""
 "Open files with the default application that\n"
 "is registered to handle files of this type."
@@ -2168,7 +2170,7 @@ msgstr "Renomear un ficheiro."
 msgid "Missing argument"
 msgstr "Falta un argumento"
 
-#: ../gio/gio-tool-rename.c:76 ../gio/gio-tool-save.c:195
+#: ../gio/gio-tool-rename.c:76 ../gio/gio-tool-save.c:190
 #: ../gio/gio-tool-set.c:137
 msgid "Too many arguments"
 msgstr "Demasiados argumentos"
@@ -2208,21 +2210,21 @@ msgstr "O etag do ficheiro foi sobrescrito"
 msgid "ETAG"
 msgstr "ETAG"
 
-#: ../gio/gio-tool-save.c:119
+#: ../gio/gio-tool-save.c:113
 msgid "Error reading from standard input"
 msgstr "Produciuse un erro ao ler da entrada estándar"
 
 #. Translators: The "etag" is a token allowing to verify whether a file has been modified
-#: ../gio/gio-tool-save.c:145
+#: ../gio/gio-tool-save.c:139
 #, c-format
 msgid "Etag not available\n"
 msgstr "ETAG non dispoñíbel\n"
 
-#: ../gio/gio-tool-save.c:168
+#: ../gio/gio-tool-save.c:163
 msgid "Read from standard input and save to DEST."
 msgstr "Ler da entrada en estándar e gardar en DEST."
 
-#: ../gio/gio-tool-save.c:188
+#: ../gio/gio-tool-save.c:183
 msgid "No destination given"
 msgstr "Non se forneceu un destino"
 
@@ -2857,7 +2859,7 @@ msgstr "retirouse o ficheiro de saída existente.\n"
 msgid "Invalid filename %s"
 msgstr "O nome do ficheiro non é válido %s"
 
-#: ../gio/glocalfile.c:1037
+#: ../gio/glocalfile.c:1105
 #, c-format
 msgid "Error getting filesystem info for %s: %s"
 msgstr ""
@@ -2867,241 +2869,241 @@ msgstr ""
 #. * the enclosing (user visible) mount of a file, but none
 #. * exists.
 #.
-#: ../gio/glocalfile.c:1176
+#: ../gio/glocalfile.c:1244
 #, c-format
 msgid "Containing mount for file %s not found"
 msgstr "Non se atopa o punto de montaxe que contén o ficheiro %s"
 
-#: ../gio/glocalfile.c:1199
+#: ../gio/glocalfile.c:1267
 msgid "Can’t rename root directory"
 msgstr "Non é posíbel renomear o directorio raíz"
 
-#: ../gio/glocalfile.c:1217 ../gio/glocalfile.c:1240
+#: ../gio/glocalfile.c:1285 ../gio/glocalfile.c:1308
 #, c-format
 msgid "Error renaming file %s: %s"
 msgstr "Produciuse un erro ao renomear o ficheiro %s: %s"
 
-#: ../gio/glocalfile.c:1224
+#: ../gio/glocalfile.c:1292
 msgid "Can’t rename file, filename already exists"
 msgstr "Non é posíbel renomear o ficheiro, o ficheiro xa existe"
 
-#: ../gio/glocalfile.c:1237 ../gio/glocalfile.c:2253 ../gio/glocalfile.c:2281
-#: ../gio/glocalfile.c:2438 ../gio/glocalfileoutputstream.c:549
+#: ../gio/glocalfile.c:1305 ../gio/glocalfile.c:2322 ../gio/glocalfile.c:2350
+#: ../gio/glocalfile.c:2507 ../gio/glocalfileoutputstream.c:551
 msgid "Invalid filename"
 msgstr "O nome do ficheiro non é válido"
 
-#: ../gio/glocalfile.c:1404 ../gio/glocalfile.c:1419
+#: ../gio/glocalfile.c:1473 ../gio/glocalfile.c:1488
 #, c-format
 msgid "Error opening file %s: %s"
 msgstr "Produciuse un erro ao abrir o ficheiro %s: %s"
 
-#: ../gio/glocalfile.c:1544
+#: ../gio/glocalfile.c:1613
 #, c-format
 msgid "Error removing file %s: %s"
 msgstr "Produciuse un erro ao eliminar o ficheiro %s: %s"
 
-#: ../gio/glocalfile.c:1928
+#: ../gio/glocalfile.c:1997
 #, c-format
 msgid "Error trashing file %s: %s"
 msgstr "Produciuse un erro ao mover ao lixo o ficheiro %s: %s"
 
-#: ../gio/glocalfile.c:1951
+#: ../gio/glocalfile.c:2020
 #, c-format
 msgid "Unable to create trash dir %s: %s"
 msgstr "Non é posíbel crear o directorio do lixo %s: %s"
 
-#: ../gio/glocalfile.c:1971
+#: ../gio/glocalfile.c:2040
 #, c-format
 msgid "Unable to find toplevel directory to trash %s"
 msgstr ""
 "Non é posíbel atopar o directorio de nivel superior para mover ao lixo %s"
 
-#: ../gio/glocalfile.c:2050 ../gio/glocalfile.c:2070
+#: ../gio/glocalfile.c:2119 ../gio/glocalfile.c:2139
 #, c-format
 msgid "Unable to find or create trash directory for %s"
 msgstr "Non é posíbel atopar ou crear o directorio do lixo para %s"
 
-#: ../gio/glocalfile.c:2105
+#: ../gio/glocalfile.c:2174
 #, c-format
 msgid "Unable to create trashing info file for %s: %s"
 msgstr "Non é posíbel crear a información de lixo para o ficheiro %s: %s"
 
-#: ../gio/glocalfile.c:2164
+#: ../gio/glocalfile.c:2233
 #, c-format
 msgid "Unable to trash file %s across filesystem boundaries"
 msgstr ""
 "Non é posíbel mover ao lixo o ficheiro %s a través dos límites do sistema de "
 "ficheiros"
 
-#: ../gio/glocalfile.c:2168 ../gio/glocalfile.c:2224
+#: ../gio/glocalfile.c:2237 ../gio/glocalfile.c:2293
 #, c-format
 msgid "Unable to trash file %s: %s"
 msgstr "Non é posíbel mover ao lixo o ficheiro %s:  %s"
 
-#: ../gio/glocalfile.c:2230
+#: ../gio/glocalfile.c:2299
 #, c-format
 msgid "Unable to trash file %s"
 msgstr "Non é posíbel mover ao lixo o ficheiro %s"
 
-#: ../gio/glocalfile.c:2256
+#: ../gio/glocalfile.c:2325
 #, c-format
 msgid "Error creating directory %s: %s"
 msgstr "Produciuse un erro ao crear o directorio %s: %s"
 
-#: ../gio/glocalfile.c:2285
+#: ../gio/glocalfile.c:2354
 #, c-format
 msgid "Filesystem does not support symbolic links"
 msgstr "O sistema de ficheiros non é compatíbel coas ligazóns simbólicas"
 
-#: ../gio/glocalfile.c:2288
+#: ../gio/glocalfile.c:2357
 #, c-format
 msgid "Error making symbolic link %s: %s"
 msgstr "Produciuse un erro ao crear a ligazón simbólica %s: %s"
 
-#: ../gio/glocalfile.c:2294 ../glib/gfileutils.c:2077
+#: ../gio/glocalfile.c:2363 ../glib/gfileutils.c:2127
 msgid "Symbolic links not supported"
 msgstr "As ligazóns simbólicas non se admiten"
 
-#: ../gio/glocalfile.c:2349 ../gio/glocalfile.c:2384 ../gio/glocalfile.c:2441
+#: ../gio/glocalfile.c:2418 ../gio/glocalfile.c:2453 ../gio/glocalfile.c:2510
 #, c-format
 msgid "Error moving file %s: %s"
 msgstr "Produciuse un erro ao mover o ficheiro %s: %s"
 
-#: ../gio/glocalfile.c:2372
+#: ../gio/glocalfile.c:2441
 msgid "Can’t move directory over directory"
 msgstr "Non é posíbel mover o directorio sobre un directorio"
 
-#: ../gio/glocalfile.c:2398 ../gio/glocalfileoutputstream.c:933
-#: ../gio/glocalfileoutputstream.c:947 ../gio/glocalfileoutputstream.c:962
-#: ../gio/glocalfileoutputstream.c:979 ../gio/glocalfileoutputstream.c:993
+#: ../gio/glocalfile.c:2467 ../gio/glocalfileoutputstream.c:935
+#: ../gio/glocalfileoutputstream.c:949 ../gio/glocalfileoutputstream.c:964
+#: ../gio/glocalfileoutputstream.c:981 ../gio/glocalfileoutputstream.c:995
 msgid "Backup file creation failed"
 msgstr "Fallou a creación do ficheiro de seguranza"
 
-#: ../gio/glocalfile.c:2417
+#: ../gio/glocalfile.c:2486
 #, c-format
 msgid "Error removing target file: %s"
 msgstr "Produciuse un erro ao retirar o ficheiro obxectivo: %s"
 
-#: ../gio/glocalfile.c:2431
+#: ../gio/glocalfile.c:2500
 msgid "Move between mounts not supported"
 msgstr "Non se permite mover entre puntos de montaxe"
 
-#: ../gio/glocalfile.c:2622
+#: ../gio/glocalfile.c:2691
 #, c-format
 msgid "Could not determine the disk usage of %s: %s"
 msgstr "Non foi posíbel determinar o uso de disco de %s: %s"
 
-#: ../gio/glocalfileinfo.c:731
+#: ../gio/glocalfileinfo.c:745
 msgid "Attribute value must be non-NULL"
 msgstr "O valor do atributo debe ser non nulo"
 
-#: ../gio/glocalfileinfo.c:738
+#: ../gio/glocalfileinfo.c:752
 msgid "Invalid attribute type (string expected)"
 msgstr "Tipo de atributo non válido (esperábase unha cadea)"
 
-#: ../gio/glocalfileinfo.c:745
+#: ../gio/glocalfileinfo.c:759
 msgid "Invalid extended attribute name"
 msgstr "Nome estendido do atributo non válido"
 
-#: ../gio/glocalfileinfo.c:785
+#: ../gio/glocalfileinfo.c:799
 #, c-format
 msgid "Error setting extended attribute “%s”: %s"
 msgstr "Produciuse un erro ao estabelecer o atributo estendido «%s»: %s"
 
-#: ../gio/glocalfileinfo.c:1586
+#: ../gio/glocalfileinfo.c:1607
 msgid " (invalid encoding)"
 msgstr " (codificación non válida)"
 
-#: ../gio/glocalfileinfo.c:1777 ../gio/glocalfileoutputstream.c:811
+#: ../gio/glocalfileinfo.c:1776 ../gio/glocalfileoutputstream.c:813
 #, c-format
 msgid "Error when getting information for file “%s”: %s"
 msgstr "Produciuse un erro ao obter a información do ficheiro «%s»: %s"
 
-#: ../gio/glocalfileinfo.c:2028
+#: ../gio/glocalfileinfo.c:2038
 #, c-format
 msgid "Error when getting information for file descriptor: %s"
 msgstr "Produciuse un erro ao obter información do descritor do ficheiro: %s"
 
-#: ../gio/glocalfileinfo.c:2073
+#: ../gio/glocalfileinfo.c:2083
 msgid "Invalid attribute type (uint32 expected)"
 msgstr "O tipo de atributo non é válido (esperábase uint32)"
 
-#: ../gio/glocalfileinfo.c:2091
+#: ../gio/glocalfileinfo.c:2101
 msgid "Invalid attribute type (uint64 expected)"
 msgstr "O tipo de atributo non é válido (esperábase uint64)"
 
-#: ../gio/glocalfileinfo.c:2110 ../gio/glocalfileinfo.c:2129
+#: ../gio/glocalfileinfo.c:2120 ../gio/glocalfileinfo.c:2139
 msgid "Invalid attribute type (byte string expected)"
 msgstr "O tipo de atributo non é válido (esperábase unha cadea de bytes)"
 
-#: ../gio/glocalfileinfo.c:2164
+#: ../gio/glocalfileinfo.c:2184
 msgid "Cannot set permissions on symlinks"
 msgstr "Non foi posíbel estabelecer os permisos nas ligazóns simbólicas"
 
-#: ../gio/glocalfileinfo.c:2180
+#: ../gio/glocalfileinfo.c:2200
 #, c-format
 msgid "Error setting permissions: %s"
 msgstr "Produciuse un erro ao estabelecer os permisos: %s"
 
-#: ../gio/glocalfileinfo.c:2231
+#: ../gio/glocalfileinfo.c:2251
 #, c-format
 msgid "Error setting owner: %s"
 msgstr "Produciuse un erro ao estabelecer o propietario: %s"
 
-#: ../gio/glocalfileinfo.c:2254
+#: ../gio/glocalfileinfo.c:2274
 msgid "symlink must be non-NULL"
 msgstr "a ligazón simbólica debe ser non nula"
 
-#: ../gio/glocalfileinfo.c:2264 ../gio/glocalfileinfo.c:2283
-#: ../gio/glocalfileinfo.c:2294
+#: ../gio/glocalfileinfo.c:2284 ../gio/glocalfileinfo.c:2303
+#: ../gio/glocalfileinfo.c:2314
 #, c-format
 msgid "Error setting symlink: %s"
 msgstr "Produciuse un erro ao estabelecer a ligazón simbólica: %s"
 
-#: ../gio/glocalfileinfo.c:2273
+#: ../gio/glocalfileinfo.c:2293
 msgid "Error setting symlink: file is not a symlink"
 msgstr ""
 "Produciuse un erro ao estabelecer a ligazón simbólica: o ficheiro non é unha "
 "ligazón"
 
-#: ../gio/glocalfileinfo.c:2399
+#: ../gio/glocalfileinfo.c:2419
 #, c-format
 msgid "Error setting modification or access time: %s"
 msgstr ""
 "Produciuse un erro ao modificar a configuración ou o tempo de acceso: %s"
 
-#: ../gio/glocalfileinfo.c:2422
+#: ../gio/glocalfileinfo.c:2442
 msgid "SELinux context must be non-NULL"
 msgstr "O contexto SELinux debe ser non-NULL"
 
-#: ../gio/glocalfileinfo.c:2437
+#: ../gio/glocalfileinfo.c:2457
 #, c-format
 msgid "Error setting SELinux context: %s"
 msgstr "Produciuse un erro ao estabelecer o contexto SELinux: %s"
 
-#: ../gio/glocalfileinfo.c:2444
+#: ../gio/glocalfileinfo.c:2464
 msgid "SELinux is not enabled on this system"
 msgstr "SELinux non está activado neste sistema"
 
-#: ../gio/glocalfileinfo.c:2536
+#: ../gio/glocalfileinfo.c:2556
 #, c-format
 msgid "Setting attribute %s not supported"
 msgstr "Non se permite estabelecer o atributo %s "
 
-#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:694
+#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:696
 #, c-format
 msgid "Error reading from file: %s"
 msgstr "Produciuse un erro ao ler do ficheiro: %s"
 
 #: ../gio/glocalfileinputstream.c:199 ../gio/glocalfileinputstream.c:211
 #: ../gio/glocalfileinputstream.c:225 ../gio/glocalfileinputstream.c:333
-#: ../gio/glocalfileoutputstream.c:456 ../gio/glocalfileoutputstream.c:1011
+#: ../gio/glocalfileoutputstream.c:458 ../gio/glocalfileoutputstream.c:1013
 #, c-format
 msgid "Error seeking in file: %s"
 msgstr "Produciuse un erro ao buscar no ficheiro: %s"
 
-#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:246
-#: ../gio/glocalfileoutputstream.c:340
+#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:248
+#: ../gio/glocalfileoutputstream.c:342
 #, c-format
 msgid "Error closing file: %s"
 msgstr "Produciuse un erro ao pechar o ficheiro: %s"
@@ -3112,52 +3114,52 @@ msgstr ""
 "Non é posíbel atopar o tipo de monitorización do ficheiro local "
 "predeterminado"
 
-#: ../gio/glocalfileoutputstream.c:194 ../gio/glocalfileoutputstream.c:226
-#: ../gio/glocalfileoutputstream.c:715
+#: ../gio/glocalfileoutputstream.c:196 ../gio/glocalfileoutputstream.c:228
+#: ../gio/glocalfileoutputstream.c:717
 #, c-format
 msgid "Error writing to file: %s"
 msgstr "Produciuse un erro ao escribir no ficheiro: %s"
 
-#: ../gio/glocalfileoutputstream.c:273
+#: ../gio/glocalfileoutputstream.c:275
 #, c-format
 msgid "Error removing old backup link: %s"
 msgstr ""
 "Produciuse un erro ao retirar a ligazón da copia de seguranza antiga: %s"
 
-#: ../gio/glocalfileoutputstream.c:287 ../gio/glocalfileoutputstream.c:300
+#: ../gio/glocalfileoutputstream.c:289 ../gio/glocalfileoutputstream.c:302
 #, c-format
 msgid "Error creating backup copy: %s"
 msgstr "Produciuse un erro ao crear a copia de seguranza: %s"
 
-#: ../gio/glocalfileoutputstream.c:318
+#: ../gio/glocalfileoutputstream.c:320
 #, c-format
 msgid "Error renaming temporary file: %s"
 msgstr "Produciuse un erro ao renomear o ficheiro temporal: %s"
 
-#: ../gio/glocalfileoutputstream.c:502 ../gio/glocalfileoutputstream.c:1062
+#: ../gio/glocalfileoutputstream.c:504 ../gio/glocalfileoutputstream.c:1064
 #, c-format
 msgid "Error truncating file: %s"
 msgstr "Produciuse un erro ao truncar o ficheiro: %s"
 
-#: ../gio/glocalfileoutputstream.c:555 ../gio/glocalfileoutputstream.c:793
-#: ../gio/glocalfileoutputstream.c:1043 ../gio/gsubprocess.c:380
+#: ../gio/glocalfileoutputstream.c:557 ../gio/glocalfileoutputstream.c:795
+#: ../gio/glocalfileoutputstream.c:1045 ../gio/gsubprocess.c:380
 #, c-format
 msgid "Error opening file “%s”: %s"
 msgstr "Produciuse un erro ao abrir o ficheiro %s: %s"
 
-#: ../gio/glocalfileoutputstream.c:824
+#: ../gio/glocalfileoutputstream.c:826
 msgid "Target file is a directory"
 msgstr "O ficheiro destino é un directorio"
 
-#: ../gio/glocalfileoutputstream.c:829
+#: ../gio/glocalfileoutputstream.c:831
 msgid "Target file is not a regular file"
 msgstr "O ficheiro destino non é un ficheiro normal"
 
-#: ../gio/glocalfileoutputstream.c:841
+#: ../gio/glocalfileoutputstream.c:843
 msgid "The file was externally modified"
 msgstr "O ficheiro foi modificado externamente"
 
-#: ../gio/glocalfileoutputstream.c:1027
+#: ../gio/glocalfileoutputstream.c:1029
 #, c-format
 msgid "Error removing old file: %s"
 msgstr "Produciuse un erro ao retirar o ficheiro antigo: %s"
@@ -3201,49 +3203,49 @@ msgstr "Solicitouse unha busca máis aló do final do fluxo"
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement unmount.
-#: ../gio/gmount.c:393
+#: ../gio/gmount.c:396
 msgid "mount doesn’t implement “unmount”"
 msgstr "montaxe non implementa «desmontaxe»"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement eject.
-#: ../gio/gmount.c:469
+#: ../gio/gmount.c:472
 msgid "mount doesn’t implement “eject”"
 msgstr "mount non implementa «extraer»"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of unmount or unmount_with_operation.
-#: ../gio/gmount.c:547
+#: ../gio/gmount.c:550
 msgid "mount doesn’t implement “unmount” or “unmount_with_operation”"
 msgstr "a montaxe non implementa o «unmount» ou a «unmount_with_operation»"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of eject or eject_with_operation.
-#: ../gio/gmount.c:632
+#: ../gio/gmount.c:635
 msgid "mount doesn’t implement “eject” or “eject_with_operation”"
 msgstr "a montaxe non implementa a «eject» ou a \"eject_with_operation\""
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement remount.
-#: ../gio/gmount.c:720
+#: ../gio/gmount.c:723
 msgid "mount doesn’t implement “remount”"
 msgstr "a montaxe non implementa \"remount\""
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:802
+#: ../gio/gmount.c:805
 msgid "mount doesn’t implement content type guessing"
 msgstr "a montaxe non implementa a averiguación do tipo de contido"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:889
+#: ../gio/gmount.c:892
 msgid "mount doesn’t implement synchronous content type guessing"
 msgstr "a montaxe non implementa a averiguación síncrona do tipo de contido"
 
@@ -3293,25 +3295,30 @@ msgstr "O fluxo de orixe xa está pechado"
 msgid "Error resolving “%s”: %s"
 msgstr "Produciuse un erro ao resolver «%s»: %s"
 
-#: ../gio/gresource.c:606 ../gio/gresource.c:857 ../gio/gresource.c:874
-#: ../gio/gresource.c:998 ../gio/gresource.c:1070 ../gio/gresource.c:1143
-#: ../gio/gresource.c:1213 ../gio/gresourcefile.c:453
-#: ../gio/gresourcefile.c:576 ../gio/gresourcefile.c:713
+#: ../gio/gresolver.c:729 ../gio/gresolver.c:781
+#| msgid "Invalid hostname"
+msgid "Invalid domain"
+msgstr "Dominio non válido"
+
+#: ../gio/gresource.c:621 ../gio/gresource.c:880 ../gio/gresource.c:919
+#: ../gio/gresource.c:1043 ../gio/gresource.c:1115 ../gio/gresource.c:1188
+#: ../gio/gresource.c:1258 ../gio/gresourcefile.c:476
+#: ../gio/gresourcefile.c:599 ../gio/gresourcefile.c:736
 #, c-format
 msgid "The resource at “%s” does not exist"
 msgstr "Non existe o recurso en «%s»"
 
-#: ../gio/gresource.c:771
+#: ../gio/gresource.c:786
 #, c-format
 msgid "The resource at “%s” failed to decompress"
 msgstr "Produciuse un erro ao descomprimir o recurso en «%s»"
 
-#: ../gio/gresourcefile.c:709
+#: ../gio/gresourcefile.c:732
 #, c-format
 msgid "The resource at “%s” is not a directory"
 msgstr "O recurso en «%s» non é un cartafol"
 
-#: ../gio/gresourcefile.c:917
+#: ../gio/gresourcefile.c:940
 msgid "Input stream doesn’t implement seek"
 msgstr "O fluxo de entrada non implementa seek"
 
@@ -3405,7 +3412,7 @@ msgstr ""
 msgid "  SECTION   An (optional) elf section name\n"
 msgstr "  SECCIÓN   Un nome de sección elf (opcional)\n"
 
-#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:656
+#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:685
 msgid "  COMMAND   The (optional) command to explain\n"
 msgstr "  ORDE   A orde que explicar (opcional)\n"
 
@@ -3439,7 +3446,7 @@ msgid "  PATH      A resource path\n"
 msgstr "  RUTA      Unha ruta dun recurso\n"
 
 #: ../gio/gsettings-tool.c:51 ../gio/gsettings-tool.c:72
-#: ../gio/gsettings-tool.c:853
+#: ../gio/gsettings-tool.c:890
 #, c-format
 msgid "No such schema “%s”\n"
 msgstr "Non existe o esquema «%s»\n"
@@ -3474,38 +3481,38 @@ msgstr "A ruta debe rematar cunha barra (/)\n"
 msgid "Path must not contain two adjacent slashes (//)\n"
 msgstr "A ruta non debe conter dúas barras adxacentes (//)\n"
 
-#: ../gio/gsettings-tool.c:491
+#: ../gio/gsettings-tool.c:520
 #, c-format
 msgid "The provided value is outside of the valid range\n"
 msgstr "O valor fornecido está fora do intervalo válido\n"
 
-#: ../gio/gsettings-tool.c:498
+#: ../gio/gsettings-tool.c:527
 #, c-format
 msgid "The key is not writable\n"
 msgstr "Esta chave non é escribíbel\n"
 
-#: ../gio/gsettings-tool.c:534
+#: ../gio/gsettings-tool.c:563
 msgid "List the installed (non-relocatable) schemas"
 msgstr "Lista dos esquemas instalados (non reposicionábeis)"
 
-#: ../gio/gsettings-tool.c:540
+#: ../gio/gsettings-tool.c:569
 msgid "List the installed relocatable schemas"
 msgstr "Lista dos esquemas instalados reposicionábeis"
 
-#: ../gio/gsettings-tool.c:546
+#: ../gio/gsettings-tool.c:575
 msgid "List the keys in SCHEMA"
 msgstr "Lista das claves de ESQUEMA"
 
-#: ../gio/gsettings-tool.c:547 ../gio/gsettings-tool.c:553
-#: ../gio/gsettings-tool.c:596
+#: ../gio/gsettings-tool.c:576 ../gio/gsettings-tool.c:582
+#: ../gio/gsettings-tool.c:625
 msgid "SCHEMA[:PATH]"
 msgstr "ESQUEMA[:RUTA]"
 
-#: ../gio/gsettings-tool.c:552
+#: ../gio/gsettings-tool.c:581
 msgid "List the children of SCHEMA"
 msgstr "Lista dos fillos do SCHEMA"
 
-#: ../gio/gsettings-tool.c:558
+#: ../gio/gsettings-tool.c:587
 msgid ""
 "List keys and values, recursively\n"
 "If no SCHEMA is given, list all keys\n"
@@ -3513,50 +3520,50 @@ msgstr ""
 "Lista as clave e valores, recursivamente\n"
 "Se non se fornece un ESQUEMA, lista todas as claves\n"
 
-#: ../gio/gsettings-tool.c:560
+#: ../gio/gsettings-tool.c:589
 msgid "[SCHEMA[:PATH]]"
 msgstr "[ESQUEMA[:RUTA]]"
 
-#: ../gio/gsettings-tool.c:565
+#: ../gio/gsettings-tool.c:594
 msgid "Get the value of KEY"
 msgstr "Obtén o valor de CLAVE"
 
-#: ../gio/gsettings-tool.c:566 ../gio/gsettings-tool.c:572
-#: ../gio/gsettings-tool.c:578 ../gio/gsettings-tool.c:590
-#: ../gio/gsettings-tool.c:602
+#: ../gio/gsettings-tool.c:595 ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:607 ../gio/gsettings-tool.c:619
+#: ../gio/gsettings-tool.c:631
 msgid "SCHEMA[:PATH] KEY"
 msgstr "ESQUEMA[:RUTA] CLAVE"
 
-#: ../gio/gsettings-tool.c:571
+#: ../gio/gsettings-tool.c:600
 msgid "Query the range of valid values for KEY"
 msgstr "Consulta o intervalo de valores válidos de CLAVE"
 
-#: ../gio/gsettings-tool.c:577
+#: ../gio/gsettings-tool.c:606
 msgid "Query the description for KEY"
 msgstr "Consulta a descrición para a CLAVE"
 
-#: ../gio/gsettings-tool.c:583
+#: ../gio/gsettings-tool.c:612
 msgid "Set the value of KEY to VALUE"
 msgstr "Estabelece o valor de CLAVE a VALOR"
 
-#: ../gio/gsettings-tool.c:584
+#: ../gio/gsettings-tool.c:613
 msgid "SCHEMA[:PATH] KEY VALUE"
 msgstr "ESQUEMA[:RUTA] CLAVE VALOR"
 
-#: ../gio/gsettings-tool.c:589
+#: ../gio/gsettings-tool.c:618
 msgid "Reset KEY to its default value"
 msgstr "Estabelece a CLAVE ao seu valor predeterminado"
 
-#: ../gio/gsettings-tool.c:595
+#: ../gio/gsettings-tool.c:624
 msgid "Reset all keys in SCHEMA to their defaults"
 msgstr ""
 "Restabelecer todas as claves nun ESQUEMA aos seus valores predeterminados"
 
-#: ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:630
 msgid "Check if KEY is writable"
 msgstr "Comproba se a CLAVE é escribíbel"
 
-#: ../gio/gsettings-tool.c:607
+#: ../gio/gsettings-tool.c:636
 msgid ""
 "Monitor KEY for changes.\n"
 "If no KEY is specified, monitor all keys in SCHEMA.\n"
@@ -3566,11 +3573,11 @@ msgstr ""
 "Se non se especifica a CLAVE, monitoriza todos os cambios en ESQUEMA.\n"
 "Use ^C para deter a monitorización.\n"
 
-#: ../gio/gsettings-tool.c:610
+#: ../gio/gsettings-tool.c:639
 msgid "SCHEMA[:PATH] [KEY]"
 msgstr "ESQUEMA[:RUTA] [CLAVE]"
 
-#: ../gio/gsettings-tool.c:622
+#: ../gio/gsettings-tool.c:651
 msgid ""
 "Usage:\n"
 "  gsettings --version\n"
@@ -3619,7 +3626,7 @@ msgstr ""
 "Use 'gsettings help ORDE' para obter máis axuda.\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:646
+#: ../gio/gsettings-tool.c:675
 #, c-format
 msgid ""
 "Usage:\n"
@@ -3634,11 +3641,11 @@ msgstr ""
 "%s\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:652
+#: ../gio/gsettings-tool.c:681
 msgid "  SCHEMADIR A directory to search for additional schemas\n"
 msgstr "  CARTAFOL_ESQUEMA: un directorio para buscar esquemas adicionais\n"
 
-#: ../gio/gsettings-tool.c:660
+#: ../gio/gsettings-tool.c:689
 msgid ""
 "  SCHEMA    The name of the schema\n"
 "  PATH      The path, for relocatable schemas\n"
@@ -3646,180 +3653,213 @@ msgstr ""
 "  SCHEMA    O nome do esquema\n"
 "  KEY       A ruta, para os esquemas reposicionábeis\n"
 
-#: ../gio/gsettings-tool.c:665
+#: ../gio/gsettings-tool.c:694
 msgid "  KEY       The (optional) key within the schema\n"
 msgstr "  KEY       A clave (opcional) no esquema\n"
 
-#: ../gio/gsettings-tool.c:669
+#: ../gio/gsettings-tool.c:698
 msgid "  KEY       The key within the schema\n"
 msgstr "  KEY       A clave nun esquema\n"
 
-#: ../gio/gsettings-tool.c:673
+#: ../gio/gsettings-tool.c:702
 msgid "  VALUE     The value to set\n"
 msgstr "  VALUE     O valor a estabelecer\n"
 
-#: ../gio/gsettings-tool.c:728
+#: ../gio/gsettings-tool.c:757
 #, c-format
 msgid "Could not load schemas from %s: %s\n"
 msgstr "Non foi posíbel cargar os esquemas desde %s a %s\n"
 
-#: ../gio/gsettings-tool.c:740
+#: ../gio/gsettings-tool.c:769
 #, c-format
 msgid "No schemas installed\n"
 msgstr "Non hai esquemas instalados\n"
 
-#: ../gio/gsettings-tool.c:811
+#: ../gio/gsettings-tool.c:848
 #, c-format
 msgid "Empty schema name given\n"
 msgstr "Forneceuse un nome de esquema baleiro\n"
 
-#: ../gio/gsettings-tool.c:866
+#: ../gio/gsettings-tool.c:903
 #, c-format
 msgid "No such key “%s”\n"
 msgstr "Non existe a clave «%s»\n"
 
-#: ../gio/gsocket.c:379
+#: ../gio/gsocket.c:384
 msgid "Invalid socket, not initialized"
 msgstr "O socket non é válido, non se inicializou"
 
-#: ../gio/gsocket.c:386
+#: ../gio/gsocket.c:391
 #, c-format
 msgid "Invalid socket, initialization failed due to: %s"
 msgstr "O socket non é válido, a inicialización fallou debido a: %s"
 
-#: ../gio/gsocket.c:394
+#: ../gio/gsocket.c:399
 msgid "Socket is already closed"
 msgstr "O fluxo de orixe xa está pechado"
 
-#: ../gio/gsocket.c:409 ../gio/gsocket.c:2765 ../gio/gsocket.c:3950
-#: ../gio/gsocket.c:4008
+#: ../gio/gsocket.c:414 ../gio/gsocket.c:3010 ../gio/gsocket.c:4220
+#: ../gio/gsocket.c:4278
 msgid "Socket I/O timed out"
 msgstr "Tempo de espera do Socket de E/S superado"
 
-#: ../gio/gsocket.c:541
+#: ../gio/gsocket.c:549
 #, c-format
 msgid "creating GSocket from fd: %s"
 msgstr "creando o GSocket a partir de fd: %s"
 
-#: ../gio/gsocket.c:570 ../gio/gsocket.c:624 ../gio/gsocket.c:631
+#: ../gio/gsocket.c:578 ../gio/gsocket.c:632 ../gio/gsocket.c:639
 #, c-format
 msgid "Unable to create socket: %s"
 msgstr "Non é posíbel crear o socket: %s"
 
-#: ../gio/gsocket.c:624
+#: ../gio/gsocket.c:632
 msgid "Unknown family was specified"
 msgstr "Especificouse unha familia descoñecida"
 
-#: ../gio/gsocket.c:631
+#: ../gio/gsocket.c:639
 msgid "Unknown protocol was specified"
 msgstr "Especificouse un protocolo descoñecido"
 
-#: ../gio/gsocket.c:1122
+#: ../gio/gsocket.c:1130
 #, c-format
 msgid "Cannot use datagram operations on a non-datagram socket."
 msgstr ""
 "Non é posíbel usar as operacions de datagramas nun socket que non é de "
 "datagramas."
 
-#: ../gio/gsocket.c:1139
+#: ../gio/gsocket.c:1147
 #, c-format
 msgid "Cannot use datagram operations on a socket with a timeout set."
 msgstr ""
 "Non é posíbel usar operacións de datagramas nun socket con un tempo de "
 "espera máximo estabelecido."
 
-#: ../gio/gsocket.c:1943
+#: ../gio/gsocket.c:1954
 #, c-format
 msgid "could not get local address: %s"
 msgstr "non foi posíbel obter un enderezo local: %s"
 
-#: ../gio/gsocket.c:1986
+#: ../gio/gsocket.c:2000
 #, c-format
 msgid "could not get remote address: %s"
 msgstr "non foi posíbel obter un enderezo remoto: %s"
 
-#: ../gio/gsocket.c:2052
+#: ../gio/gsocket.c:2066
 #, c-format
 msgid "could not listen: %s"
 msgstr "non foi posíbel escoitar: %s"
 
-#: ../gio/gsocket.c:2151
+#: ../gio/gsocket.c:2168
 #, c-format
 msgid "Error binding to address: %s"
 msgstr "Produciuse un erro ao conectar co enderezo: %s"
 
-#: ../gio/gsocket.c:2266 ../gio/gsocket.c:2303
+#: ../gio/gsocket.c:2226 ../gio/gsocket.c:2263 ../gio/gsocket.c:2373
+#: ../gio/gsocket.c:2391 ../gio/gsocket.c:2461 ../gio/gsocket.c:2519
+#: ../gio/gsocket.c:2537
 #, c-format
 msgid "Error joining multicast group: %s"
 msgstr "Produciuse un erro ao unirse ao grupo multicast: %s"
 
-#: ../gio/gsocket.c:2267 ../gio/gsocket.c:2304
+#: ../gio/gsocket.c:2227 ../gio/gsocket.c:2264 ../gio/gsocket.c:2374
+#: ../gio/gsocket.c:2392 ../gio/gsocket.c:2462 ../gio/gsocket.c:2520
+#: ../gio/gsocket.c:2538
 #, c-format
 msgid "Error leaving multicast group: %s"
 msgstr "Produciuse un erro ao deixar o grupo multicast: %s"
 
-#: ../gio/gsocket.c:2268
+#: ../gio/gsocket.c:2228
 msgid "No support for source-specific multicast"
 msgstr "Non se admite o multicast específico da fonte"
 
-#: ../gio/gsocket.c:2488
+#: ../gio/gsocket.c:2375
+#| msgid "Unsupported socket address"
+msgid "Unsupported socket family"
+msgstr "Familia de socket non admitida"
+
+#: ../gio/gsocket.c:2393
+msgid "source-specific not an IPv4 address"
+msgstr "o source-specific non é un enderezo IPv4"
+
+#: ../gio/gsocket.c:2411 ../gio/gsocket.c:2440 ../gio/gsocket.c:2487
+#, c-format
+msgid "Interface not found: %s"
+msgstr "Interface non atopada: %s"
+
+#: ../gio/gsocket.c:2427
+#, c-format
+msgid "Interface name too long"
+msgstr "Nome da interface demasiado larga"
+
+#: ../gio/gsocket.c:2463
+#| msgid "No support for source-specific multicast"
+msgid "No support for IPv4 source-specific multicast"
+msgstr "Non se admite o multicast IPv4 específico da fonte"
+
+#: ../gio/gsocket.c:2521
+#| msgid "No support for source-specific multicast"
+msgid "No support for IPv6 source-specific multicast"
+msgstr "Non se admite o multicast IPv6 específico da fonte"
+
+#: ../gio/gsocket.c:2730
 #, c-format
 msgid "Error accepting connection: %s"
 msgstr "Produciuse un erro ao aceptar a conexión: %s"
 
-#: ../gio/gsocket.c:2609
+#: ../gio/gsocket.c:2854
 msgid "Connection in progress"
 msgstr "Conexión en marcha"
 
-#: ../gio/gsocket.c:2658
+#: ../gio/gsocket.c:2903
 msgid "Unable to get pending error: "
 msgstr "Non é posíbel obter o erro pendente:"
 
-#: ../gio/gsocket.c:2828
+#: ../gio/gsocket.c:3073
 #, c-format
 msgid "Error receiving data: %s"
 msgstr "Produciuse un erro ao recibir datos: %s"
 
-#: ../gio/gsocket.c:3023
+#: ../gio/gsocket.c:3268
 #, c-format
 msgid "Error sending data: %s"
 msgstr "Produciuse un erro ao enviar datos: %s"
 
-#: ../gio/gsocket.c:3210
+#: ../gio/gsocket.c:3455
 #, c-format
 msgid "Unable to shutdown socket: %s"
 msgstr "Non é posíbel desconectar o socket: %s"
 
-#: ../gio/gsocket.c:3291
+#: ../gio/gsocket.c:3536
 #, c-format
 msgid "Error closing socket: %s"
 msgstr "Produciuse un erro ao pechar o socket: %s"
 
-#: ../gio/gsocket.c:3943
+#: ../gio/gsocket.c:4213
 #, c-format
 msgid "Waiting for socket condition: %s"
 msgstr "Agardando pola situación do socket: %s"
 
-#: ../gio/gsocket.c:4417 ../gio/gsocket.c:4497 ../gio/gsocket.c:4675
+#: ../gio/gsocket.c:4687 ../gio/gsocket.c:4767 ../gio/gsocket.c:4945
 #, c-format
 msgid "Error sending message: %s"
 msgstr "Produciuse un erro ao enviar a mensaxe: %s"
 
-#: ../gio/gsocket.c:4441
+#: ../gio/gsocket.c:4711
 msgid "GSocketControlMessage not supported on Windows"
 msgstr "O GSocketControlMessage non está permitido en Windows"
 
-#: ../gio/gsocket.c:4894 ../gio/gsocket.c:4967 ../gio/gsocket.c:5193
+#: ../gio/gsocket.c:5164 ../gio/gsocket.c:5237 ../gio/gsocket.c:5463
 #, c-format
 msgid "Error receiving message: %s"
 msgstr "Produciuse un erro ao recibir a mensaxe: %s"
 
-#: ../gio/gsocket.c:5465
+#: ../gio/gsocket.c:5735
 #, c-format
 msgid "Unable to read socket credentials: %s"
 msgstr "Non é posíbel ler as credenciais do socket: %s"
 
-#: ../gio/gsocket.c:5474
+#: ../gio/gsocket.c:5744
 msgid "g_socket_get_credentials not implemented for this OS"
 msgstr ""
 "g_socket_get_credentials non está implementado para este sistema operativo"
@@ -3965,18 +4005,18 @@ msgstr "Non se atopou ningún enderezo válido"
 msgid "Error reverse-resolving “%s”: %s"
 msgstr "Produciuse un erro ao resolver inversamente «%s»: %s"
 
-#: ../gio/gthreadedresolver.c:550 ../gio/gthreadedresolver.c:630
-#: ../gio/gthreadedresolver.c:728 ../gio/gthreadedresolver.c:778
+#: ../gio/gthreadedresolver.c:549 ../gio/gthreadedresolver.c:628
+#: ../gio/gthreadedresolver.c:726 ../gio/gthreadedresolver.c:776
 #, c-format
 msgid "No DNS record of the requested type for “%s”"
 msgstr "Non hai un rexistro de DNS do tipo solicitado para «%s»"
 
-#: ../gio/gthreadedresolver.c:555 ../gio/gthreadedresolver.c:733
+#: ../gio/gthreadedresolver.c:554 ../gio/gthreadedresolver.c:731
 #, c-format
 msgid "Temporarily unable to resolve “%s”"
 msgstr "Non é posíbel resolver temporalmente «%s»"
 
-#: ../gio/gthreadedresolver.c:560 ../gio/gthreadedresolver.c:738
+#: ../gio/gthreadedresolver.c:559 ../gio/gthreadedresolver.c:736
 #, c-format
 msgid "Error resolving “%s”"
 msgstr "Produciuse un erro ao resolver «%s»"
@@ -4088,7 +4128,7 @@ msgstr "Produciuse un erro ao ler do descritor do ficheiro: %s"
 msgid "Error closing file descriptor: %s"
 msgstr "Produciuse un erro ao pechar o descritor do ficheiro: %s"
 
-#: ../gio/gunixmounts.c:2430 ../gio/gunixmounts.c:2483
+#: ../gio/gunixmounts.c:2556 ../gio/gunixmounts.c:2609
 msgid "Filesystem root"
 msgstr "Raíz do sistema de ficheiros"
 
@@ -4193,93 +4233,108 @@ msgstr "Etiqueta «%s» inesperada, esperábase a etiqueta «%s»"
 msgid "Unexpected tag “%s” inside “%s”"
 msgstr "Etiqueta «%s» inesperada dentro de «%s»"
 
-#: ../glib/gbookmarkfile.c:1756
+#: ../glib/gbookmarkfile.c:1757
 msgid "No valid bookmark file found in data dirs"
 msgstr ""
 "Non foi posíbel atopar un ficheiro de marcadores válido nos directorios de "
 "datos"
 
-#: ../glib/gbookmarkfile.c:1957
+#: ../glib/gbookmarkfile.c:1958
 #, c-format
 msgid "A bookmark for URI “%s” already exists"
 msgstr "Xa existe un marcador para o URI «%s»"
 
-#: ../glib/gbookmarkfile.c:2003 ../glib/gbookmarkfile.c:2161
-#: ../glib/gbookmarkfile.c:2246 ../glib/gbookmarkfile.c:2326
-#: ../glib/gbookmarkfile.c:2411 ../glib/gbookmarkfile.c:2494
-#: ../glib/gbookmarkfile.c:2572 ../glib/gbookmarkfile.c:2651
-#: ../glib/gbookmarkfile.c:2693 ../glib/gbookmarkfile.c:2790
-#: ../glib/gbookmarkfile.c:2910 ../glib/gbookmarkfile.c:3100
-#: ../glib/gbookmarkfile.c:3176 ../glib/gbookmarkfile.c:3344
-#: ../glib/gbookmarkfile.c:3433 ../glib/gbookmarkfile.c:3522
-#: ../glib/gbookmarkfile.c:3638
+#: ../glib/gbookmarkfile.c:2004 ../glib/gbookmarkfile.c:2162
+#: ../glib/gbookmarkfile.c:2247 ../glib/gbookmarkfile.c:2327
+#: ../glib/gbookmarkfile.c:2412 ../glib/gbookmarkfile.c:2495
+#: ../glib/gbookmarkfile.c:2573 ../glib/gbookmarkfile.c:2652
+#: ../glib/gbookmarkfile.c:2694 ../glib/gbookmarkfile.c:2791
+#: ../glib/gbookmarkfile.c:2912 ../glib/gbookmarkfile.c:3102
+#: ../glib/gbookmarkfile.c:3178 ../glib/gbookmarkfile.c:3346
+#: ../glib/gbookmarkfile.c:3435 ../glib/gbookmarkfile.c:3524
+#: ../glib/gbookmarkfile.c:3640
 #, c-format
 msgid "No bookmark found for URI “%s”"
 msgstr "Non se atopou ningún marcador para o URI «%s»"
 
-#: ../glib/gbookmarkfile.c:2335
+#: ../glib/gbookmarkfile.c:2336
 #, c-format
 msgid "No MIME type defined in the bookmark for URI “%s”"
 msgstr "Non hai ningún tipo MIME definido no marcador para o URI «%s»"
 
-#: ../glib/gbookmarkfile.c:2420
+#: ../glib/gbookmarkfile.c:2421
 #, c-format
 msgid "No private flag has been defined in bookmark for URI “%s”"
 msgstr "Non se definiu ningún parámetro privado no marcador para o URI «%s»"
 
-#: ../glib/gbookmarkfile.c:2799
+#: ../glib/gbookmarkfile.c:2800
 #, c-format
 msgid "No groups set in bookmark for URI “%s”"
 msgstr "Non existe ningún grupo definido no marcador para o URI «%s»"
 
-#: ../glib/gbookmarkfile.c:3197 ../glib/gbookmarkfile.c:3354
+#: ../glib/gbookmarkfile.c:3199 ../glib/gbookmarkfile.c:3356
 #, c-format
 msgid "No application with name “%s” registered a bookmark for “%s”"
 msgstr "Ningún aplicativo denominado «%s» rexistrou un marcador para «%s»"
 
-#: ../glib/gbookmarkfile.c:3377
+#: ../glib/gbookmarkfile.c:3379
 #, c-format
 msgid "Failed to expand exec line “%s” with URI “%s”"
 msgstr "Produciuse un erro ao expandir a liña executábel «%s» co URI «%s»"
 
-#: ../glib/gconvert.c:477 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
+#: ../glib/gconvert.c:471
+#| msgid "Invalid sequence in conversion input"
+msgid "Unrepresentable character in conversion input"
+msgstr "Caracter non representábel na entrada da conversión"
+
+#: ../glib/gconvert.c:498 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
 #: ../glib/gutf8.c:1211 ../glib/gutf8.c:1315
 msgid "Partial character sequence at end of input"
 msgstr "Hai unha secuencia de carácter parcial ao final da entrada"
 
-#: ../glib/gconvert.c:742
+#: ../glib/gconvert.c:763
 #, c-format
 msgid "Cannot convert fallback “%s” to codeset “%s”"
 msgstr ""
 "Non é posíbel converter o modo de emerxencia «%s» na codificación de "
 "caracteres «%s»"
 
-#: ../glib/gconvert.c:1513
+#: ../glib/gconvert.c:934
+#| msgid "Invalid byte sequence in conversion input"
+msgid "Embedded NUL byte in conversion input"
+msgstr "Byte NUL incrustado na entrada de conversión"
+
+#: ../glib/gconvert.c:955
+#| msgid "Invalid byte sequence in conversion input"
+msgid "Embedded NUL byte in conversion output"
+msgstr "Byte NUL incrustado na saída de conversión"
+
+#: ../glib/gconvert.c:1640
 #, c-format
 msgid "The URI “%s” is not an absolute URI using the “file” scheme"
 msgstr "O URI «%s» non é un URI absoluto usando o esquema «file»"
 
-#: ../glib/gconvert.c:1523
+#: ../glib/gconvert.c:1650
 #, c-format
 msgid "The local file URI “%s” may not include a “#”"
 msgstr "O URI do ficheiro local «%s» non pode incluír un «#»"
 
-#: ../glib/gconvert.c:1540
+#: ../glib/gconvert.c:1667
 #, c-format
 msgid "The URI “%s” is invalid"
 msgstr "O URI «%s» non é válido"
 
-#: ../glib/gconvert.c:1552
+#: ../glib/gconvert.c:1679
 #, c-format
 msgid "The hostname of the URI “%s” is invalid"
 msgstr "O nome de host do URI «%s» non é válido"
 
-#: ../glib/gconvert.c:1568
+#: ../glib/gconvert.c:1695
 #, c-format
 msgid "The URI “%s” contains invalidly escaped characters"
 msgstr "O URI «%s» contén caracteres de escape non válidos"
 
-#: ../glib/gconvert.c:1640
+#: ../glib/gconvert.c:1767
 #, c-format
 msgid "The pathname “%s” is not an absolute path"
 msgstr "O nome da ruta «%s» non é un camiño absoluto"
@@ -4515,120 +4570,120 @@ msgstr "PM"
 msgid "Error opening directory “%s”: %s"
 msgstr "Produciuse un erro ao abrir o directorio «%s»: %s"
 
-#: ../glib/gfileutils.c:706 ../glib/gfileutils.c:798
+#: ../glib/gfileutils.c:716 ../glib/gfileutils.c:808
 #, c-format
 msgid "Could not allocate %lu byte to read file “%s”"
 msgid_plural "Could not allocate %lu bytes to read file “%s”"
 msgstr[0] "Non foi posíbel asignar %lu byte para ler o ficheiro «%s»"
 msgstr[1] "Non foi posíbel asignar %lu bytes para ler o ficheiro «%s»"
 
-#: ../glib/gfileutils.c:723
+#: ../glib/gfileutils.c:733
 #, c-format
 msgid "Error reading file “%s”: %s"
 msgstr "Produciuse un erro ao ler o ficheiro «%s»: %s"
 
-#: ../glib/gfileutils.c:759
+#: ../glib/gfileutils.c:769
 #, c-format
 msgid "File “%s” is too large"
 msgstr "O ficheiro «%s» é demasiado grande"
 
-#: ../glib/gfileutils.c:823
+#: ../glib/gfileutils.c:833
 #, c-format
 msgid "Failed to read from file “%s”: %s"
 msgstr "Produciuse un erro ao ler desde o ficheiro «%s»: %s"
 
-#: ../glib/gfileutils.c:871 ../glib/gfileutils.c:943
+#: ../glib/gfileutils.c:881 ../glib/gfileutils.c:953
 #, c-format
 msgid "Failed to open file “%s”: %s"
 msgstr "Produciuse un erro ao abrir o ficheiro «%s»: %s"
 
-#: ../glib/gfileutils.c:883
+#: ../glib/gfileutils.c:893
 #, c-format
 msgid "Failed to get attributes of file “%s”: fstat() failed: %s"
 msgstr ""
 "Produciuse un erro ao obter os atributos do ficheiro «%s»: fstat() fallou: %s"
 
-#: ../glib/gfileutils.c:913
+#: ../glib/gfileutils.c:923
 #, c-format
 msgid "Failed to open file “%s”: fdopen() failed: %s"
 msgstr "Produciuse un erro ao abrir o ficheiro «%s»: fdopen() fallou: %s"
 
-#: ../glib/gfileutils.c:1012
+#: ../glib/gfileutils.c:1022
 #, c-format
 msgid "Failed to rename file “%s” to “%s”: g_rename() failed: %s"
 msgstr ""
 "Produciuse un erro ao renomear o ficheiro «%s» como «%s»: g_rename() fallou: "
 "%s"
 
-#: ../glib/gfileutils.c:1047 ../glib/gfileutils.c:1554
+#: ../glib/gfileutils.c:1057 ../glib/gfileutils.c:1564
 #, c-format
 msgid "Failed to create file “%s”: %s"
 msgstr "Produciuse un erro ao crear o ficheiro «%s»: %s"
 
-#: ../glib/gfileutils.c:1074
+#: ../glib/gfileutils.c:1084
 #, c-format
 msgid "Failed to write file “%s”: write() failed: %s"
 msgstr "Produciuse un erro ao escribir o ficheiro «%s»: write() fallou: %s"
 
-#: ../glib/gfileutils.c:1117
+#: ../glib/gfileutils.c:1127
 #, c-format
 msgid "Failed to write file “%s”: fsync() failed: %s"
 msgstr "Produciuse un erro ao escribir o ficheiro «%s»: fsync() fallou: %s"
 
-#: ../glib/gfileutils.c:1241
+#: ../glib/gfileutils.c:1251
 #, c-format
 msgid "Existing file “%s” could not be removed: g_unlink() failed: %s"
 msgstr ""
 "Non foi posíbel retirar o ficheiro existente «%s»: g_unlink() fallou: %s"
 
-#: ../glib/gfileutils.c:1520
+#: ../glib/gfileutils.c:1530
 #, c-format
 msgid "Template “%s” invalid, should not contain a “%s”"
 msgstr "O modelo «%s» non é válido, non debería conter «%s»"
 
-#: ../glib/gfileutils.c:1533
+#: ../glib/gfileutils.c:1543
 #, c-format
 msgid "Template “%s” doesn’t contain XXXXXX"
 msgstr "O modelo «%s» non contén XXXXXX"
 
-#: ../glib/gfileutils.c:2058
+#: ../glib/gfileutils.c:2105
 #, c-format
 msgid "Failed to read the symbolic link “%s”: %s"
 msgstr "Produciuse un erro ao ler a ligazón simbólica «%s»: %s"
 
-#: ../glib/giochannel.c:1388
+#: ../glib/giochannel.c:1389
 #, c-format
 msgid "Could not open converter from “%s” to “%s”: %s"
 msgstr "Non foi posíbel abrir o conversor de «%s» a «%s»: %s"
 
-#: ../glib/giochannel.c:1733
+#: ../glib/giochannel.c:1734
 msgid "Can’t do a raw read in g_io_channel_read_line_string"
 msgstr ""
 "Non é posíbel facer unha lectura en bruto en g_io_channel_read_line_string"
 
-#: ../glib/giochannel.c:1780 ../glib/giochannel.c:2038
-#: ../glib/giochannel.c:2125
+#: ../glib/giochannel.c:1781 ../glib/giochannel.c:2039
+#: ../glib/giochannel.c:2126
 msgid "Leftover unconverted data in read buffer"
 msgstr "Datos restantes non convertidos no búfer de lectura"
 
-#: ../glib/giochannel.c:1861 ../glib/giochannel.c:1938
+#: ../glib/giochannel.c:1862 ../glib/giochannel.c:1939
 msgid "Channel terminates in a partial character"
 msgstr "O canal termina nun carácter parcial"
 
-#: ../glib/giochannel.c:1924
+#: ../glib/giochannel.c:1925
 msgid "Can’t do a raw read in g_io_channel_read_to_end"
 msgstr "Non é posíbel facer unha lectura en bruto en g_io_channel_read_to_end"
 
-#: ../glib/gkeyfile.c:736
+#: ../glib/gkeyfile.c:788
 msgid "Valid key file could not be found in search dirs"
 msgstr ""
 "Non é posíbel atopar un ficheiro de clave correcto nos directorios de busca"
 
-#: ../glib/gkeyfile.c:773
+#: ../glib/gkeyfile.c:825
 msgid "Not a regular file"
 msgstr "Non é un ficheiro normal"
 
-#: ../glib/gkeyfile.c:1218
+#: ../glib/gkeyfile.c:1270
 #, c-format
 msgid ""
 "Key file contains line “%s” which is not a key-value pair, group, or comment"
@@ -4636,43 +4691,43 @@ msgstr ""
 "O ficheiro clave contén a liña «%s» que non é un par valor-clave, grupo ou "
 "comentario"
 
-#: ../glib/gkeyfile.c:1275
+#: ../glib/gkeyfile.c:1327
 #, c-format
 msgid "Invalid group name: %s"
 msgstr "Nome de grupo non válido: %s"
 
-#: ../glib/gkeyfile.c:1297
+#: ../glib/gkeyfile.c:1349
 msgid "Key file does not start with a group"
 msgstr "O ficheiro clave non comeza cun grupo"
 
-#: ../glib/gkeyfile.c:1323
+#: ../glib/gkeyfile.c:1375
 #, c-format
 msgid "Invalid key name: %s"
 msgstr "Nome de clave non válido: %s"
 
-#: ../glib/gkeyfile.c:1350
+#: ../glib/gkeyfile.c:1402
 #, c-format
 msgid "Key file contains unsupported encoding “%s”"
 msgstr "O ficheiro clave contén unha codificación non permitida «%s»"
 
-#: ../glib/gkeyfile.c:1593 ../glib/gkeyfile.c:1766 ../glib/gkeyfile.c:3146
-#: ../glib/gkeyfile.c:3209 ../glib/gkeyfile.c:3339 ../glib/gkeyfile.c:3469
-#: ../glib/gkeyfile.c:3613 ../glib/gkeyfile.c:3842 ../glib/gkeyfile.c:3909
+#: ../glib/gkeyfile.c:1645 ../glib/gkeyfile.c:1818 ../glib/gkeyfile.c:3206
+#: ../glib/gkeyfile.c:3269 ../glib/gkeyfile.c:3399 ../glib/gkeyfile.c:3529
+#: ../glib/gkeyfile.c:3673 ../glib/gkeyfile.c:3902 ../glib/gkeyfile.c:3969
 #, c-format
 msgid "Key file does not have group “%s”"
 msgstr "O ficheiro clave non ten un grupo «%s»"
 
-#: ../glib/gkeyfile.c:1721
+#: ../glib/gkeyfile.c:1773
 #, c-format
 msgid "Key file does not have key “%s” in group “%s”"
 msgstr "O ficheiro clave non ten a clave «%s» no grupo «%s»"
 
-#: ../glib/gkeyfile.c:1883 ../glib/gkeyfile.c:1999
+#: ../glib/gkeyfile.c:1935 ../glib/gkeyfile.c:2051
 #, c-format
 msgid "Key file contains key “%s” with value “%s” which is not UTF-8"
 msgstr "O ficheiro clave contén a clave «%s» co valor «%s» que non é UTF-8"
 
-#: ../glib/gkeyfile.c:1903 ../glib/gkeyfile.c:2019 ../glib/gkeyfile.c:2388
+#: ../glib/gkeyfile.c:1955 ../glib/gkeyfile.c:2071 ../glib/gkeyfile.c:2448
 #, c-format
 msgid ""
 "Key file contains key “%s” which has a value that cannot be interpreted."
@@ -4680,7 +4735,7 @@ msgstr ""
 "O ficheiro clave contén a clave «%s» que ten un valor que non é posíbel "
 "interpretar."
 
-#: ../glib/gkeyfile.c:2606 ../glib/gkeyfile.c:2975
+#: ../glib/gkeyfile.c:2666 ../glib/gkeyfile.c:3035
 #, c-format
 msgid ""
 "Key file contains key “%s” in group “%s” which has a value that cannot be "
@@ -4689,36 +4744,36 @@ msgstr ""
 "O ficheiro clave contén a clave «%s» no grupo «%s» que ten un valor que non "
 "é posíbel interpretar."
 
-#: ../glib/gkeyfile.c:2684 ../glib/gkeyfile.c:2761
+#: ../glib/gkeyfile.c:2744 ../glib/gkeyfile.c:2821
 #, c-format
 msgid "Key “%s” in group “%s” has value “%s” where %s was expected"
 msgstr "A clave «%s» do grupo «%s» ten o valor «%s», pero agardábase %s"
 
-#: ../glib/gkeyfile.c:4149
+#: ../glib/gkeyfile.c:4209
 msgid "Key file contains escape character at end of line"
 msgstr "O ficheiro clave contén un carácter de escape ao final da liña"
 
-#: ../glib/gkeyfile.c:4171
+#: ../glib/gkeyfile.c:4231
 #, c-format
 msgid "Key file contains invalid escape sequence “%s”"
 msgstr "O ficheiro clave contén a secuencia de escape non válida «%s»"
 
-#: ../glib/gkeyfile.c:4315
+#: ../glib/gkeyfile.c:4375
 #, c-format
 msgid "Value “%s” cannot be interpreted as a number."
 msgstr "Non é posíbel interpretar o valor «%s» como un número."
 
-#: ../glib/gkeyfile.c:4329
+#: ../glib/gkeyfile.c:4389
 #, c-format
 msgid "Integer value “%s” out of range"
 msgstr "O valor enteiro «%s» está fóra do intervalo"
 
-#: ../glib/gkeyfile.c:4362
+#: ../glib/gkeyfile.c:4422
 #, c-format
 msgid "Value “%s” cannot be interpreted as a float number."
 msgstr "Non é posíbel interpretar o valor «%s» como un número flotante."
 
-#: ../glib/gkeyfile.c:4401
+#: ../glib/gkeyfile.c:4461
 #, c-format
 msgid "Value “%s” cannot be interpreted as a boolean."
 msgstr "Non é posíbel interpretar o valor «%s» como un booleano."
@@ -5414,78 +5469,78 @@ msgstr ""
 msgid "Text was empty (or contained only whitespace)"
 msgstr "O texto estaba baleiro (ou só contiña espazos en branco)"
 
-#: ../glib/gspawn.c:250
+#: ../glib/gspawn.c:253
 #, c-format
 msgid "Failed to read data from child process (%s)"
 msgstr "Produciuse un erro ao ler datos desde un proceso fillo (%s)"
 
-#: ../glib/gspawn.c:394
+#: ../glib/gspawn.c:401
 #, c-format
 msgid "Unexpected error in select() reading data from a child process (%s)"
 msgstr "Erro inesperado en select() ao ler datos dun proceso fillo (%s)"
 
-#: ../glib/gspawn.c:479
+#: ../glib/gspawn.c:486
 #, c-format
 msgid "Unexpected error in waitpid() (%s)"
 msgstr "Erro inesperado en waitpid() (%s)"
 
-#: ../glib/gspawn.c:886 ../glib/gspawn-win32.c:1231
+#: ../glib/gspawn.c:897 ../glib/gspawn-win32.c:1231
 #, c-format
 msgid "Child process exited with code %ld"
 msgstr "O proceso fillo rematou co código %ld"
 
-#: ../glib/gspawn.c:894
+#: ../glib/gspawn.c:905
 #, c-format
 msgid "Child process killed by signal %ld"
 msgstr "O proceso fillo rematou polo sinal %ld"
 
-#: ../glib/gspawn.c:901
+#: ../glib/gspawn.c:912
 #, c-format
 msgid "Child process stopped by signal %ld"
 msgstr "O proceso fillo detívose polo sinal %ld"
 
-#: ../glib/gspawn.c:908
+#: ../glib/gspawn.c:919
 #, c-format
 msgid "Child process exited abnormally"
 msgstr "O proceso fillo rematou de forma anormal"
 
-#: ../glib/gspawn.c:1313 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
+#: ../glib/gspawn.c:1324 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
 #, c-format
 msgid "Failed to read from child pipe (%s)"
 msgstr "Produciuse un erro ao ler desde a canalización filla (%s)"
 
-#: ../glib/gspawn.c:1383
+#: ../glib/gspawn.c:1394
 #, c-format
 msgid "Failed to fork (%s)"
 msgstr "Produciuse un erro ao facer fork (%s)"
 
-#: ../glib/gspawn.c:1532 ../glib/gspawn-win32.c:368
+#: ../glib/gspawn.c:1543 ../glib/gspawn-win32.c:368
 #, c-format
 msgid "Failed to change to directory “%s” (%s)"
 msgstr "Produciuse un erro ao cambiar ao directorio «%s» (%s)"
 
-#: ../glib/gspawn.c:1542
+#: ../glib/gspawn.c:1553
 #, c-format
 msgid "Failed to execute child process “%s” (%s)"
 msgstr "Produciuse un erro ao executar o proceso fillo «%s» (%s)"
 
-#: ../glib/gspawn.c:1552
+#: ../glib/gspawn.c:1563
 #, c-format
 msgid "Failed to redirect output or input of child process (%s)"
 msgstr ""
 "Produciuse un erro ao redireccionar a saída ou entrada do proceso fillo (%s)"
 
-#: ../glib/gspawn.c:1561
+#: ../glib/gspawn.c:1572
 #, c-format
 msgid "Failed to fork child process (%s)"
 msgstr "Produciuse un erro ao facer fork ao proceso fillo (%s)"
 
-#: ../glib/gspawn.c:1569
+#: ../glib/gspawn.c:1580
 #, c-format
 msgid "Unknown error executing child process “%s”"
 msgstr "Produciuse un erro descoñecido ao executar o proceso fillo «%s»"
 
-#: ../glib/gspawn.c:1593
+#: ../glib/gspawn.c:1604
 #, c-format
 msgid "Failed to read enough data from child pid pipe (%s)"
 msgstr ""
@@ -5576,91 +5631,198 @@ msgstr "Secuencia non válida na entrada da conversión"
 msgid "Character out of range for UTF-16"
 msgstr "Carácter fóra de intervalo para UTF-16"
 
-#: ../glib/gutils.c:2149 ../glib/gutils.c:2176 ../glib/gutils.c:2282
+#: ../glib/gutils.c:2229
 #, c-format
-msgid "%u byte"
-msgid_plural "%u bytes"
-msgstr[0] "%u byte"
-msgstr[1] "%u bytes"
+msgid "%.1f kB"
+msgstr "%.1f kiB"
+
+#: ../glib/gutils.c:2230 ../glib/gutils.c:2436
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: ../glib/gutils.c:2231 ../glib/gutils.c:2441
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: ../glib/gutils.c:2232 ../glib/gutils.c:2446
+#, c-format
+msgid "%.1f TB"
+msgstr "%.1f TB"
+
+#: ../glib/gutils.c:2233 ../glib/gutils.c:2451
+#, c-format
+msgid "%.1f PB"
+msgstr "%.1f PB"
+
+#: ../glib/gutils.c:2234 ../glib/gutils.c:2456
+#, c-format
+msgid "%.1f EB"
+msgstr "%.1f EB"
 
-#: ../glib/gutils.c:2155
+#: ../glib/gutils.c:2237
 #, c-format
 msgid "%.1f KiB"
 msgstr "%.1f KiB"
 
-#: ../glib/gutils.c:2157
+#: ../glib/gutils.c:2238
 #, c-format
 msgid "%.1f MiB"
 msgstr "%.1f MiB"
 
-#: ../glib/gutils.c:2160
+#: ../glib/gutils.c:2239
 #, c-format
 msgid "%.1f GiB"
 msgstr "%.1f GiB"
 
-#: ../glib/gutils.c:2163
+#: ../glib/gutils.c:2240
 #, c-format
 msgid "%.1f TiB"
 msgstr "%.1f TiB"
 
-#: ../glib/gutils.c:2166
+#: ../glib/gutils.c:2241
 #, c-format
 msgid "%.1f PiB"
 msgstr "%.1f PiB"
 
-#: ../glib/gutils.c:2169
+#: ../glib/gutils.c:2242
 #, c-format
 msgid "%.1f EiB"
 msgstr "%.1f EiB"
 
-#: ../glib/gutils.c:2182
+#: ../glib/gutils.c:2245
 #, c-format
-msgid "%.1f kB"
-msgstr "%.1f kiB"
+#| msgid "%.1f kB"
+msgid "%.1f kb"
+msgstr "%.1f kb"
 
-#: ../glib/gutils.c:2185 ../glib/gutils.c:2300
+#: ../glib/gutils.c:2246
 #, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
+#| msgid "%.1f MB"
+msgid "%.1f Mb"
+msgstr "%.1f Mb"
 
-#: ../glib/gutils.c:2188 ../glib/gutils.c:2305
+#: ../glib/gutils.c:2247
 #, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
+#| msgid "%.1f GB"
+msgid "%.1f Gb"
+msgstr "%.1f Gb"
 
-#: ../glib/gutils.c:2190 ../glib/gutils.c:2310
+#: ../glib/gutils.c:2248
 #, c-format
-msgid "%.1f TB"
-msgstr "%.1f TB"
+#| msgid "%.1f TB"
+msgid "%.1f Tb"
+msgstr "%.1f Tb"
 
-#: ../glib/gutils.c:2193 ../glib/gutils.c:2315
+#: ../glib/gutils.c:2249
 #, c-format
-msgid "%.1f PB"
-msgstr "%.1f PB"
+#| msgid "%.1f PB"
+msgid "%.1f Pb"
+msgstr "%.1f Pb"
 
-#: ../glib/gutils.c:2196 ../glib/gutils.c:2320
+#: ../glib/gutils.c:2250
 #, c-format
-msgid "%.1f EB"
-msgstr "%.1f EB"
+#| msgid "%.1f EB"
+msgid "%.1f Eb"
+msgstr "%.1f Eb"
+
+#: ../glib/gutils.c:2253
+#, c-format
+#| msgid "%.1f KiB"
+msgid "%.1f Kib"
+msgstr "%.1f Kib"
+
+#: ../glib/gutils.c:2254
+#, c-format
+#| msgid "%.1f MiB"
+msgid "%.1f Mib"
+msgstr "%.1f Mib"
+
+#: ../glib/gutils.c:2255
+#, c-format
+#| msgid "%.1f GiB"
+msgid "%.1f Gib"
+msgstr "%.1f Gib"
+
+#: ../glib/gutils.c:2256
+#, c-format
+#| msgid "%.1f TiB"
+msgid "%.1f Tib"
+msgstr "%.1f Tib"
+
+#: ../glib/gutils.c:2257
+#, c-format
+#| msgid "%.1f PiB"
+msgid "%.1f Pib"
+msgstr "%.1f Pib"
+
+#: ../glib/gutils.c:2258
+#, c-format
+#| msgid "%.1f EiB"
+msgid "%.1f Eib"
+msgstr "%.1f Eib"
+
+#: ../glib/gutils.c:2292 ../glib/gutils.c:2418
+#, c-format
+msgid "%u byte"
+msgid_plural "%u bytes"
+msgstr[0] "%u byte"
+msgstr[1] "%u bytes"
+
+#: ../glib/gutils.c:2296
+#, c-format
+#| msgid "%u byte"
+#| msgid_plural "%u bytes"
+msgid "%u bit"
+msgid_plural "%u bits"
+msgstr[0] "%u bit"
+msgstr[1] "%u bit"
 
 #. Translators: the %s in "%s bytes" will always be replaced by a number.
-#: ../glib/gutils.c:2233
+#: ../glib/gutils.c:2363
 #, c-format
 msgid "%s byte"
 msgid_plural "%s bytes"
 msgstr[0] "%s byte"
 msgstr[1] "%s bytes"
 
+#. Translators: the %s in "%s bits" will always be replaced by a number.
+#: ../glib/gutils.c:2368
+#, c-format
+#| msgid "%s byte"
+#| msgid_plural "%s bytes"
+msgid "%s bit"
+msgid_plural "%s bits"
+msgstr[0] "%s bit"
+msgstr[1] "%s bit"
+
 #. Translators: this is from the deprecated function g_format_size_for_display() which uses 'KB' to
 #. * mean 1024 bytes.  I am aware that 'KB' is not correct, but it has been preserved for reasons of
 #. * compatibility.  Users will not see this string unless a program is using this deprecated function.
 #. * Please translate as literally as possible.
 #.
-#: ../glib/gutils.c:2295
+#: ../glib/gutils.c:2431
 #, c-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
+#~ msgid ""
+#~ "Message has %d file descriptors but the header field indicates %d file "
+#~ "descriptors"
+#~ msgstr ""
+#~ "A mensaxe ten %d descritores de ficheiro pero o campo da cabeceira indica "
+#~ "%d descritores de ficheiro"
+
+#~ msgid "Error: object path not specified.\n"
+#~ msgstr "Erro: non se especificou unha ruta de obxecto.\n"
+
+#~ msgid "Error: signal not specified.\n"
+#~ msgstr "Erro: non se especificou o sinal.\n"
+
+#~ msgid "Error: signal must be the fully-qualified name.\n"
+#~ msgstr "Erro: o sinal debe ser un nome cualificado completo.\n"
+
 #~ msgid "No such interface"
 #~ msgstr "Non existe a interface"
 
index 8a0fd57..7c7cf97 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -1,19 +1,19 @@
 # Hungarian translation for glib.
-# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016. Free Software Foundation, Inc.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. Free Software Foundation, Inc.
 # This file is distributed under the same license as the glib package.
 #
 # Szabolcs Varga <shirokuma at shirokuma dot hu>, 2005.
 # Gabor Kelemen <kelemeng at gnome dot hu>, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2016, 2017.
-# Balázs Úr <urbalazs at gmail dot com>, 2013, 2014, 2015, 2016.
-# Balázs Meskó <meskobalazs at fedoraproject dot org>, 2017.
+# Balázs Úr <urbalazs at gmail dot com>, 2013, 2014, 2015, 2016, 2018.
+# Balázs Meskó <meskobalazs at fedoraproject dot org>, 2017, 2018.
 msgid ""
 msgstr ""
 "Project-Id-Version: glib master\n"
 "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2017-08-03 15:40+0000\n"
-"PO-Revision-Date: 2017-08-18 10:30+0200\n"
-"Last-Translator: Gabor Kelemen <kelemeng at ubuntu dot com>\n"
+"POT-Creation-Date: 2018-01-19 12:11+0000\n"
+"PO-Revision-Date: 2018-01-21 21:59+0100\n"
+"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 "Language-Team: Hungarian <openscope at googlegroups dot com>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
@@ -21,30 +21,30 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
 "X-Loco-Source-Locale: de_AT\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Generator: Lokalize 1.2\n"
 "X-Loco-Parser: loco_parse_po\n"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "GApplication options"
 msgstr "GApplication kapcsolói"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "Show GApplication options"
 msgstr "A GApplication kapcsolóinak megjelenítése"
 
-#: ../gio/gapplication.c:535
+#: ../gio/gapplication.c:540
 msgid "Enter GApplication service mode (use from D-Bus service files)"
 msgstr ""
 "Belépés GApplication szolgáltatásmódba (használja D-Bus "
 "szolgáltatásfájlokból)"
 
-#: ../gio/gapplication.c:547
+#: ../gio/gapplication.c:552
 msgid "Override the application’s ID"
 msgstr "Alkalmazások azonosítójának felülbírálása"
 
 #: ../gio/gapplication-tool.c:45 ../gio/gapplication-tool.c:46
 #: ../gio/gio-tool.c:227 ../gio/gresource-tool.c:488
-#: ../gio/gsettings-tool.c:522
+#: ../gio/gsettings-tool.c:551
 msgid "Print help"
 msgstr "Súgó kiírása"
 
@@ -57,7 +57,7 @@ msgstr "[PARANCS]"
 msgid "Print version"
 msgstr "Verzió kiírása"
 
-#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:528
+#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:557
 msgid "Print version information and exit"
 msgstr "Verzióinformációk kiírása és kilépés"
 
@@ -89,7 +89,7 @@ msgstr "Egy művelet aktiválása"
 
 #: ../gio/gapplication-tool.c:60
 msgid "Invoke an action on the application"
-msgstr "Művelet meghívása az alkalmazáson."
+msgstr "Művelet meghívása az alkalmazáson"
 
 #: ../gio/gapplication-tool.c:61
 msgid "APPID ACTION [PARAMETER]"
@@ -147,7 +147,7 @@ msgid "Optional parameter to the action invocation, in GVariant format"
 msgstr "A művelethívás elhagyható paramétere GVariant formátumban"
 
 #: ../gio/gapplication-tool.c:96 ../gio/gresource-tool.c:526
-#: ../gio/gsettings-tool.c:614
+#: ../gio/gsettings-tool.c:643
 #, c-format
 msgid ""
 "Unknown command %s\n"
@@ -161,7 +161,7 @@ msgid "Usage:\n"
 msgstr "Használat:\n"
 
 #: ../gio/gapplication-tool.c:114 ../gio/gresource-tool.c:551
-#: ../gio/gsettings-tool.c:649
+#: ../gio/gsettings-tool.c:678
 msgid "Arguments:\n"
 msgstr "Argumentumok:\n"
 
@@ -211,7 +211,7 @@ msgstr ""
 #: ../gio/gapplication-tool.c:266
 #, c-format
 msgid "unable to connect to D-Bus: %s\n"
-msgstr "Nem sikerült kapcsolódni a D-Bushoz: %s\n"
+msgstr "nem sikerült kapcsolódni a D-Bushoz: %s\n"
 
 #: ../gio/gapplication-tool.c:286
 #, c-format
@@ -290,8 +290,8 @@ msgid "Truncate not supported on base stream"
 msgstr "Az alap adatfolyam csonkítása nem engedélyezett"
 
 #: ../gio/gcancellable.c:317 ../gio/gdbusconnection.c:1849
-#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:870
-#: ../gio/gsimpleasyncresult.c:896
+#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:871
+#: ../gio/gsimpleasyncresult.c:897
 #, c-format
 msgid "Operation was cancelled"
 msgstr "A művelet megszakítva"
@@ -309,29 +309,29 @@ msgid "Not enough space in destination"
 msgstr "Nincs elég hely a célon"
 
 #: ../gio/gcharsetconverter.c:342 ../gio/gdatainputstream.c:848
-#: ../gio/gdatainputstream.c:1257 ../glib/gconvert.c:438 ../glib/gconvert.c:845
-#: ../glib/giochannel.c:1556 ../glib/giochannel.c:1598
-#: ../glib/giochannel.c:2442 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
+#: ../gio/gdatainputstream.c:1257 ../glib/gconvert.c:437 ../glib/gconvert.c:855
+#: ../glib/giochannel.c:1557 ../glib/giochannel.c:1599
+#: ../glib/giochannel.c:2443 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
 msgid "Invalid byte sequence in conversion input"
 msgstr "Érvénytelen bájtsorrend az átalakítás bemenetében"
 
-#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:446 ../glib/gconvert.c:770
-#: ../glib/giochannel.c:1563 ../glib/giochannel.c:2454
+#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:445 ../glib/gconvert.c:769
+#: ../glib/giochannel.c:1564 ../glib/giochannel.c:2455
 #, c-format
 msgid "Error during conversion: %s"
 msgstr "Hiba az átalakításkor: %s"
 
-#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1096
+#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1104
 msgid "Cancellable initialization not supported"
 msgstr "A megszakítható előkészítés nem támogatott"
 
-#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:321
-#: ../glib/giochannel.c:1384
+#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:320
+#: ../glib/giochannel.c:1385
 #, c-format
 msgid "Conversion from character set “%s” to “%s” is not supported"
 msgstr "A(z) „%s” és „%s” karakterkészletek közötti átalakítás nem támogatott"
 
-#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:325
+#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:324
 #, c-format
 msgid "Could not open converter from “%s” to “%s”"
 msgstr ""
@@ -420,7 +420,7 @@ msgid ""
 "“%s”"
 msgstr ""
 "Hiba a(z) „%3$s” címelemben található a(z) %1$d. kulcspárban lévő „%2$s” "
-"kulcs vagy érték értelmezésekor."
+"kulcs vagy érték értelmezésekor"
 
 #: ../gio/gdbusaddress.c:573
 #, c-format
@@ -529,7 +529,7 @@ msgstr ""
 "Nem határozható meg a busz címe a DBUS_STARTER_BUS_TYPE környezeti "
 "változóból – ismeretlen „%s” érték"
 
-#: ../gio/gdbusaddress.c:1657 ../gio/gdbusconnection.c:7155
+#: ../gio/gdbusaddress.c:1657 ../gio/gdbusconnection.c:7158
 msgid ""
 "Cannot determine bus address because the DBUS_STARTER_BUS_TYPE environment "
 "variable is not set"
@@ -558,7 +558,7 @@ msgstr ""
 "Minden elérhető hitelesítési mechanizmus kimerítve (próbálva: %s, elérhető: "
 "%s)"
 
-#: ../gio/gdbusauth.c:1174
+#: ../gio/gdbusauth.c:1171
 msgid "Cancelled via GDBusAuthObserver::authorize-authenticated-peer"
 msgstr ""
 "Megszakítva a GDBusAuthObserver::authorize-authenticated-peer használatával"
@@ -586,12 +586,12 @@ msgstr "Hiba a(z) %s könyvtár létrehozásakor: %s"
 msgid "Error opening keyring “%s” for reading: "
 msgstr "Hiba a(z) „%s” kulcstartó megnyitásakor olvasásra: "
 
-#: ../gio/gdbusauthmechanismsha1.c:403 ../gio/gdbusauthmechanismsha1.c:721
+#: ../gio/gdbusauthmechanismsha1.c:402 ../gio/gdbusauthmechanismsha1.c:720
 #, c-format
 msgid "Line %d of the keyring at “%s” with content “%s” is malformed"
 msgstr "A(z) „%2$s” kulcstartó „%3$s” tartalmú „%1$d”. sora rosszul formázott"
 
-#: ../gio/gdbusauthmechanismsha1.c:417 ../gio/gdbusauthmechanismsha1.c:735
+#: ../gio/gdbusauthmechanismsha1.c:416 ../gio/gdbusauthmechanismsha1.c:734
 #, c-format
 msgid ""
 "First token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -599,7 +599,7 @@ msgstr ""
 "A(z) „%2$s” kulcstartó „%3$s” tartalmú „%1$d”. sorának első egysége rosszul "
 "formázott"
 
-#: ../gio/gdbusauthmechanismsha1.c:432 ../gio/gdbusauthmechanismsha1.c:749
+#: ../gio/gdbusauthmechanismsha1.c:430 ../gio/gdbusauthmechanismsha1.c:748
 #, c-format
 msgid ""
 "Second token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -607,7 +607,7 @@ msgstr ""
 "A(z) „%2$s” kulcstartó „%3$s” tartalmú „%1$d”. sorának második egysége "
 "rosszul formázott"
 
-#: ../gio/gdbusauthmechanismsha1.c:456
+#: ../gio/gdbusauthmechanismsha1.c:454
 #, c-format
 msgid "Didn’t find cookie with id %d in the keyring at “%s”"
 msgstr "Nem található %d azonosítójú süti a kulcstartóban itt: „%s ”"
@@ -617,27 +617,27 @@ msgstr "Nem található %d azonosítójú süti a kulcstartóban itt: „%s ”"
 msgid "Error deleting stale lock file “%s”: %s"
 msgstr "Hiba az elavult „%s” zárolásfájl törlésekor: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:569
+#: ../gio/gdbusauthmechanismsha1.c:568
 #, c-format
 msgid "Error creating lock file “%s”: %s"
 msgstr "Hiba a(z) „%s” zárolási fájl létrehozásakor: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:600
+#: ../gio/gdbusauthmechanismsha1.c:599
 #, c-format
 msgid "Error closing (unlinked) lock file “%s”: %s"
 msgstr "Hiba a (törölt) „%s” zárolási fájl lezárásakor: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:611
+#: ../gio/gdbusauthmechanismsha1.c:610
 #, c-format
 msgid "Error unlinking lock file “%s”: %s"
 msgstr "Hiba a(z) „%s” zárolási fájl törlésekor: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:688
+#: ../gio/gdbusauthmechanismsha1.c:687
 #, c-format
 msgid "Error opening keyring “%s” for writing: "
 msgstr "Hiba a(z) „%s” kulcstartó írásra való megnyitásakor: "
 
-#: ../gio/gdbusauthmechanismsha1.c:885
+#: ../gio/gdbusauthmechanismsha1.c:883
 #, c-format
 msgid "(Additionally, releasing the lock for “%s” also failed: %s) "
 msgstr "(Ezen kívül a(z) „%s” zárolásának feloldása is meghiúsult: %s) "
@@ -661,7 +661,7 @@ msgstr ""
 msgid ""
 "No such interface 'org.freedesktop.DBus.Properties' on object at path %s"
 msgstr ""
-"Nincs „org.freedesktop.DBus.Properties” felület a(z) %s útvonalon lévő "
+"Nincs „org.freedesktop.DBus.Properties” interfész a(z) %s útvonalon lévő "
 "objektumon"
 
 #: ../gio/gdbusconnection.c:4266
@@ -687,15 +687,15 @@ msgstr ""
 "érkezett"
 
 #: ../gio/gdbusconnection.c:4414 ../gio/gdbusconnection.c:4622
-#: ../gio/gdbusconnection.c:6586
+#: ../gio/gdbusconnection.c:6589
 #, c-format
 msgid "No such interface '%s'"
-msgstr "Nincs „%s” felület"
+msgstr "Nincs ilyen interfész: „%s”"
 
-#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7095
+#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7098
 #, c-format
 msgid "No such interface '%s' on object at path %s"
-msgstr "Nincs „%s” felület a(z) %s útvonalon lévő objektumon"
+msgstr "Nincs „%s” interfész a(z) %s útvonalon lévő objektumon"
 
 #: ../gio/gdbusconnection.c:4938
 #, c-format
@@ -710,7 +710,7 @@ msgstr "Az üzenet „%s” típusa nem felel meg a várt „%s” típusnak"
 #: ../gio/gdbusconnection.c:5167
 #, c-format
 msgid "An object is already exported for the interface %s at %s"
-msgstr "Már exportálva van egy objektum a(z) %s felülethez itt: %s"
+msgstr "Már exportálva van egy objektum a(z) %s interfészhez itt: %s"
 
 #: ../gio/gdbusconnection.c:5393
 #, c-format
@@ -727,17 +727,17 @@ msgstr "Nem sikerült beállítani a tulajdonságot: %s.%s"
 msgid "Method '%s' returned type '%s', but expected '%s'"
 msgstr "A metódus („%s”) a(z) „%s” típust adta vissza a várt „%s” helyett"
 
-#: ../gio/gdbusconnection.c:6697
+#: ../gio/gdbusconnection.c:6700
 #, c-format
 msgid "Method '%s' on interface '%s' with signature '%s' does not exist"
-msgstr "A metódus („%s”) nem létezik a(z) „%s” felületen „%s” aláírással"
+msgstr "A(z) „%s” metódus nem létezik a(z) „%s” interfészen „%s” aláírással"
 
-#: ../gio/gdbusconnection.c:6818
+#: ../gio/gdbusconnection.c:6821
 #, c-format
 msgid "A subtree is already exported for %s"
 msgstr "Egy részfa már exportálva van a következőhöz: %s"
 
-#: ../gio/gdbusconnection.c:7146
+#: ../gio/gdbusconnection.c:7149
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -804,17 +804,17 @@ msgstr ""
 "a(z) %d bájteltolásnál (a karakterlánc hossza: %d). Az érvényes UTF-8 "
 "karakterlánc az adott pontig: „%s”"
 
-#: ../gio/gdbusmessage.c:1589
+#: ../gio/gdbusmessage.c:1593
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus object path"
 msgstr "A feldolgozott „%s” érték nem érvényes D-Bus objektumútvonal"
 
-#: ../gio/gdbusmessage.c:1611
+#: ../gio/gdbusmessage.c:1615
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature"
 msgstr "A feldolgozott „%s” érték nem érvényes D-Bus aláírás"
 
-#: ../gio/gdbusmessage.c:1658
+#: ../gio/gdbusmessage.c:1662
 #, c-format
 msgid ""
 "Encountered array of length %u byte. Maximum length is 2<<26 bytes (64 MiB)."
@@ -825,7 +825,7 @@ msgstr[0] ""
 msgstr[1] ""
 "%u bájt hosszú tömb található. A maximális hossz 2<<26 bájt (64 MiB)."
 
-#: ../gio/gdbusmessage.c:1678
+#: ../gio/gdbusmessage.c:1682
 #, c-format
 msgid ""
 "Encountered array of type “a%c”, expected to have a length a multiple of %u "
@@ -834,19 +834,19 @@ msgstr ""
 "Egy „a%c” típusú tömb található, az elvárt hossz a(z) %u bájt többszöröse, "
 "de %u bájt hosszú található"
 
-#: ../gio/gdbusmessage.c:1845
+#: ../gio/gdbusmessage.c:1849
 #, c-format
 msgid "Parsed value “%s” for variant is not a valid D-Bus signature"
 msgstr "A változat feldolgozott „%s” értéke nem érvényes D-Bus aláírás"
 
-#: ../gio/gdbusmessage.c:1869
+#: ../gio/gdbusmessage.c:1873
 #, c-format
 msgid ""
 "Error deserializing GVariant with type string “%s” from the D-Bus wire format"
 msgstr ""
 "Hiba a(z) „%s” típusú GVariant visszafejtésekor a D-Bus átviteli formátumból"
 
-#: ../gio/gdbusmessage.c:2053
+#: ../gio/gdbusmessage.c:2055
 #, c-format
 msgid ""
 "Invalid endianness value. Expected 0x6c (“l”) or 0x42 (“B”) but found value "
@@ -855,40 +855,40 @@ msgstr ""
 "Érvénytelen bájtsorrend-érték. A várt  0x6c („l”) vagy 0x42 („B”) helyett 0x"
 "%02x érték található"
 
-#: ../gio/gdbusmessage.c:2066
+#: ../gio/gdbusmessage.c:2068
 #, c-format
 msgid "Invalid major protocol version. Expected 1 but found %d"
 msgstr "Érvénytelen fő protokollverzió. A várt 1 helyett %d található"
 
-#: ../gio/gdbusmessage.c:2122
+#: ../gio/gdbusmessage.c:2124
 #, c-format
 msgid "Signature header with signature “%s” found but message body is empty"
 msgstr "Aláírásfejléc található „%s” aláírással, de az üzenettörzs üres"
 
-#: ../gio/gdbusmessage.c:2136
+#: ../gio/gdbusmessage.c:2138
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature (for body)"
 msgstr "A feldolgozott „%s” érték nem érvényes D-Bus aláírás (a törzshöz)"
 
-#: ../gio/gdbusmessage.c:2166
+#: ../gio/gdbusmessage.c:2168
 #, c-format
 msgid "No signature header in message but the message body is %u byte"
 msgid_plural "No signature header in message but the message body is %u bytes"
 msgstr[0] "Nincs aláírásfejléc az üzenetben, de az üzenettörzs %u bájt"
 msgstr[1] "Nincs aláírásfejléc az üzenetben, de az üzenettörzs %u bájt"
 
-#: ../gio/gdbusmessage.c:2176
+#: ../gio/gdbusmessage.c:2178
 msgid "Cannot deserialize message: "
 msgstr "Nem fejthető sorba az üzenet: "
 
-#: ../gio/gdbusmessage.c:2517
+#: ../gio/gdbusmessage.c:2519
 #, c-format
 msgid ""
 "Error serializing GVariant with type string “%s” to the D-Bus wire format"
 msgstr ""
 "Hiba a(z) „%s” típusú GVariant sorbafejtésekor a D-Bus átviteli formátumba"
 
-#: ../gio/gdbusmessage.c:2654
+#: ../gio/gdbusmessage.c:2656
 #, c-format
 msgid ""
 "Message has %d file descriptors but the header field indicates %d file "
@@ -896,16 +896,16 @@ msgid ""
 msgstr ""
 "Az üzenethez %d fájlleíró tartozik, de a fejlécmező %d fájlleírót jelez"
 
-#: ../gio/gdbusmessage.c:2662
+#: ../gio/gdbusmessage.c:2664
 msgid "Cannot serialize message: "
 msgstr "Az üzenet nem fejthető sorba: "
 
-#: ../gio/gdbusmessage.c:2706
+#: ../gio/gdbusmessage.c:2708
 #, c-format
 msgid "Message body has signature “%s” but there is no signature header"
 msgstr "Az üzenettörzs „%s” aláírással rendelkezik, de nincs aláírásfejléc"
 
-#: ../gio/gdbusmessage.c:2716
+#: ../gio/gdbusmessage.c:2718
 #, c-format
 msgid ""
 "Message body has type signature “%s” but signature in the header field is "
@@ -914,17 +914,17 @@ msgstr ""
 "Az üzenettörzs „%s” típusaláírással rendelkezik, de az aláírásfejlécben lévő "
 "aláírás: „%s”"
 
-#: ../gio/gdbusmessage.c:2732
+#: ../gio/gdbusmessage.c:2734
 #, c-format
 msgid "Message body is empty but signature in the header field is “(%s)”"
 msgstr "Az üzenettörzs üres, de az aláírásfejlécben lévő aláírás: „%s”"
 
-#: ../gio/gdbusmessage.c:3285
+#: ../gio/gdbusmessage.c:3287
 #, c-format
 msgid "Error return with body of type “%s”"
 msgstr "Hiba került visszaadásra a(z) „%s” típusú törzzsel"
 
-#: ../gio/gdbusmessage.c:3293
+#: ../gio/gdbusmessage.c:3295
 msgid "Error return with empty body"
 msgstr "Hiba került visszaadásra az üres törzzsel"
 
@@ -1000,229 +1000,233 @@ msgstr ""
 "\n"
 "Az egyes parancsok súgója a „%s PARANCS --help” kiadásával érhető el.\n"
 
-#: ../gio/gdbus-tool.c:165 ../gio/gdbus-tool.c:227 ../gio/gdbus-tool.c:299
-#: ../gio/gdbus-tool.c:323 ../gio/gdbus-tool.c:725 ../gio/gdbus-tool.c:1068
-#: ../gio/gdbus-tool.c:1510
+#: ../gio/gdbus-tool.c:167 ../gio/gdbus-tool.c:234 ../gio/gdbus-tool.c:306
+#: ../gio/gdbus-tool.c:330 ../gio/gdbus-tool.c:811 ../gio/gdbus-tool.c:1150
+#: ../gio/gdbus-tool.c:1592
 #, c-format
 msgid "Error: %s\n"
 msgstr "Hiba: %s\n"
 
-#: ../gio/gdbus-tool.c:176 ../gio/gdbus-tool.c:240 ../gio/gdbus-tool.c:1526
+#: ../gio/gdbus-tool.c:178 ../gio/gdbus-tool.c:247 ../gio/gdbus-tool.c:1608
 #, c-format
 msgid "Error parsing introspection XML: %s\n"
 msgstr "Hiba a betekintési XML feldolgozásakor: %s\n"
 
-#: ../gio/gdbus-tool.c:209
+#: ../gio/gdbus-tool.c:216
 #, c-format
 msgid "Error: %s is not a valid name\n"
 msgstr "Hiba: a(z) %s nem érvényes név\n"
 
-#: ../gio/gdbus-tool.c:357
+#: ../gio/gdbus-tool.c:364
 msgid "Connect to the system bus"
 msgstr "Csatlakozás a rendszerbuszhoz"
 
-#: ../gio/gdbus-tool.c:358
+#: ../gio/gdbus-tool.c:365
 msgid "Connect to the session bus"
 msgstr "Csatlakozás a munkamenetbuszhoz"
 
-#: ../gio/gdbus-tool.c:359
+#: ../gio/gdbus-tool.c:366
 msgid "Connect to given D-Bus address"
 msgstr "Csatlakozás a megadott D-Bus címhez"
 
-#: ../gio/gdbus-tool.c:369
+#: ../gio/gdbus-tool.c:376
 msgid "Connection Endpoint Options:"
 msgstr "Kapcsolatvégpont beállításai:"
 
-#: ../gio/gdbus-tool.c:370
+#: ../gio/gdbus-tool.c:377
 msgid "Options specifying the connection endpoint"
 msgstr "A kapcsolat végpontját megadó beállítások"
 
-#: ../gio/gdbus-tool.c:392
+#: ../gio/gdbus-tool.c:399
 #, c-format
 msgid "No connection endpoint specified"
 msgstr "Nincs megadva kapcsolatvégpont"
 
-#: ../gio/gdbus-tool.c:402
+#: ../gio/gdbus-tool.c:409
 #, c-format
 msgid "Multiple connection endpoints specified"
 msgstr "Több kapcsolatvégpontot adott meg"
 
-#: ../gio/gdbus-tool.c:472
+#: ../gio/gdbus-tool.c:479
 #, c-format
 msgid ""
 "Warning: According to introspection data, interface “%s” does not exist\n"
 msgstr ""
-"Figyelmeztetés: a betekintési adatok szerint a(z) „%s” felület nem létezik\n"
+"Figyelmeztetés: a betekintési adatok szerint a(z) „%s” interfész nem "
+"létezik\n"
 
-#: ../gio/gdbus-tool.c:481
+#: ../gio/gdbus-tool.c:488
 #, c-format
 msgid ""
 "Warning: According to introspection data, method “%s” does not exist on "
 "interface “%s”\n"
 msgstr ""
-"Figyelmeztetés: a betekintési adatok szerint a felületen („%2$s”) nem "
+"Figyelmeztetés: a betekintési adatok szerint a(z) „%2$s” interfészen nem "
 "létezik „%1$s” metódus\n"
 
-#: ../gio/gdbus-tool.c:543
+#: ../gio/gdbus-tool.c:550
 msgid "Optional destination for signal (unique name)"
 msgstr "A szignál elhagyható célja (egyedi név)"
 
-#: ../gio/gdbus-tool.c:544
+#: ../gio/gdbus-tool.c:551
 msgid "Object path to emit signal on"
 msgstr "Szignál kibocsátása ezen az objektumútvonalon"
 
-#: ../gio/gdbus-tool.c:545
+#: ../gio/gdbus-tool.c:552
 msgid "Signal and interface name"
-msgstr "Szignál és felület neve"
+msgstr "Szignál és interfész neve"
 
-#: ../gio/gdbus-tool.c:579
+#: ../gio/gdbus-tool.c:587
 msgid "Emit a signal."
 msgstr "Szignál kibocsátása."
 
-#: ../gio/gdbus-tool.c:613 ../gio/gdbus-tool.c:858 ../gio/gdbus-tool.c:1616
-#: ../gio/gdbus-tool.c:1851 ../gio/gdbus-tool.c:2067
+#: ../gio/gdbus-tool.c:642 ../gio/gdbus-tool.c:944 ../gio/gdbus-tool.c:1698
+#: ../gio/gdbus-tool.c:1931 ../gio/gdbus-tool.c:2152
 #, c-format
 msgid "Error connecting: %s\n"
 msgstr "Hiba a csatlakozáskor: %s\n"
 
-#: ../gio/gdbus-tool.c:625
+#: ../gio/gdbus-tool.c:659 ../gio/gdbus-tool.c:961 ../gio/gdbus-tool.c:1715
+#: ../gio/gdbus-tool.c:1956
 #, c-format
-msgid "Error: object path not specified.\n"
-msgstr "Hiba: az objektumútvonal nincs megadva.\n"
+msgid "Error: Destination is not specified\n"
+msgstr "Hiba: a cél nincs megadva\n"
+
+#: ../gio/gdbus-tool.c:670
+#, c-format
+msgid "Error: %s is not a valid unique bus name.\n"
+msgstr "Hiba: a(z) %s nem érvényes egyedi busznév.\n"
 
-#: ../gio/gdbus-tool.c:630 ../gio/gdbus-tool.c:925 ../gio/gdbus-tool.c:1681
-#: ../gio/gdbus-tool.c:1917
+#: ../gio/gdbus-tool.c:685 ../gio/gdbus-tool.c:987 ../gio/gdbus-tool.c:1741
+#, c-format
+msgid "Error: Object path is not specified\n"
+msgstr "Hiba: az objektumútvonal nincs megadva\n"
+
+#: ../gio/gdbus-tool.c:705 ../gio/gdbus-tool.c:1007 ../gio/gdbus-tool.c:1761
+#: ../gio/gdbus-tool.c:2002
 #, c-format
 msgid "Error: %s is not a valid object path\n"
 msgstr "Hiba: a(z) %s nem érvényes objektumútvonal\n"
 
-#: ../gio/gdbus-tool.c:636
+#: ../gio/gdbus-tool.c:720
 #, c-format
-msgid "Error: signal not specified.\n"
-msgstr "Hiba: a szignál nincs megadva.\n"
+#| msgid "Error: Method name is not specified\n"
+msgid "Error: Signal name is not specified\n"
+msgstr "Hiba: a szignálnév nincs megadva\n"
 
-#: ../gio/gdbus-tool.c:643
+#: ../gio/gdbus-tool.c:731
 #, c-format
-msgid "Error: signal must be the fully-qualified name.\n"
-msgstr "Hiba: a szignálnak teljes képzésű névnek kell lennie.\n"
+#| msgid "Error: Method name “%s” is invalid\n"
+msgid "Error: Signal name “%s” is invalid\n"
+msgstr "Hiba: a szignálnév („%s”) érvénytelen\n"
 
-#: ../gio/gdbus-tool.c:651
+#: ../gio/gdbus-tool.c:743
 #, c-format
 msgid "Error: %s is not a valid interface name\n"
-msgstr "Hiba: a(z) %s nem érvényes felületnév\n"
+msgstr "Hiba: a(z) %s nem érvényes interfésznév\n"
 
-#: ../gio/gdbus-tool.c:657
+#: ../gio/gdbus-tool.c:749
 #, c-format
 msgid "Error: %s is not a valid member name\n"
 msgstr "Hiba: a(z) %s nem érvényes tagnév\n"
 
-#: ../gio/gdbus-tool.c:663
-#, c-format
-msgid "Error: %s is not a valid unique bus name.\n"
-msgstr "Hiba: a(z) %s nem érvényes egyedi busznév.\n"
-
 #. Use the original non-"parse-me-harder" error
-#: ../gio/gdbus-tool.c:700 ../gio/gdbus-tool.c:1037
+#: ../gio/gdbus-tool.c:786 ../gio/gdbus-tool.c:1119
 #, c-format
 msgid "Error parsing parameter %d: %s\n"
 msgstr "Hiba a(z) %d. paraméter feldolgozásakor: %s\n"
 
-#: ../gio/gdbus-tool.c:732
+#: ../gio/gdbus-tool.c:818
 #, c-format
 msgid "Error flushing connection: %s\n"
 msgstr "Hiba a kapcsolat kiürítésekor: %s\n"
 
-#: ../gio/gdbus-tool.c:759
+#: ../gio/gdbus-tool.c:845
 msgid "Destination name to invoke method on"
 msgstr "A cél neve a metódushíváshoz"
 
-#: ../gio/gdbus-tool.c:760
+#: ../gio/gdbus-tool.c:846
 msgid "Object path to invoke method on"
 msgstr "Objektum útvonala a metódushíváshoz"
 
-#: ../gio/gdbus-tool.c:761
+#: ../gio/gdbus-tool.c:847
 msgid "Method and interface name"
-msgstr "Metódus és felület neve"
+msgstr "Metódus és interfész neve"
 
-#: ../gio/gdbus-tool.c:762
+#: ../gio/gdbus-tool.c:848
 msgid "Timeout in seconds"
 msgstr "Időkorlát másodpercben"
 
-#: ../gio/gdbus-tool.c:803
+#: ../gio/gdbus-tool.c:889
 msgid "Invoke a method on a remote object."
 msgstr "Metódus hívása távoli objektumon."
 
-#: ../gio/gdbus-tool.c:878 ../gio/gdbus-tool.c:1635 ../gio/gdbus-tool.c:1870
-#, c-format
-msgid "Error: Destination is not specified\n"
-msgstr "Hiba: a cél nincs megadva\n"
-
-#: ../gio/gdbus-tool.c:890 ../gio/gdbus-tool.c:1652 ../gio/gdbus-tool.c:1882
+#: ../gio/gdbus-tool.c:972 ../gio/gdbus-tool.c:1732 ../gio/gdbus-tool.c:1967
 #, c-format
 msgid "Error: %s is not a valid bus name\n"
 msgstr "Hiba: a(z) %s nem érvényes busznév\n"
 
-#: ../gio/gdbus-tool.c:905 ../gio/gdbus-tool.c:1661
-#, c-format
-msgid "Error: Object path is not specified\n"
-msgstr "Hiba: az objektumútvonal nincs megadva\n"
-
-#: ../gio/gdbus-tool.c:940
+#: ../gio/gdbus-tool.c:1022
 #, c-format
 msgid "Error: Method name is not specified\n"
 msgstr "Hiba: a metódusnév nincs megadva\n"
 
-#: ../gio/gdbus-tool.c:951
+#: ../gio/gdbus-tool.c:1033
 #, c-format
 msgid "Error: Method name “%s” is invalid\n"
 msgstr "Hiba: a metódusnév („%s”) érvénytelen\n"
 
-#: ../gio/gdbus-tool.c:1029
+#: ../gio/gdbus-tool.c:1111
 #, c-format
 msgid "Error parsing parameter %d of type “%s”: %s\n"
 msgstr "Hiba a(z) „%2$s” típusú %1$d. paraméter feldolgozásakor: %3$s\n"
 
-#: ../gio/gdbus-tool.c:1473
+#: ../gio/gdbus-tool.c:1555
 msgid "Destination name to introspect"
 msgstr "A cél neve a betekintéshez"
 
-#: ../gio/gdbus-tool.c:1474
+#: ../gio/gdbus-tool.c:1556
 msgid "Object path to introspect"
 msgstr "Az objektumútvonal a betekintéshez"
 
-#: ../gio/gdbus-tool.c:1475
+#: ../gio/gdbus-tool.c:1557
 msgid "Print XML"
 msgstr "XML kiírása"
 
-#: ../gio/gdbus-tool.c:1476
+#: ../gio/gdbus-tool.c:1558
 msgid "Introspect children"
 msgstr "Betekintés gyermekekbe"
 
-#: ../gio/gdbus-tool.c:1477
+#: ../gio/gdbus-tool.c:1559
 msgid "Only print properties"
 msgstr "Csak a tulajdonságok kiírása"
 
-#: ../gio/gdbus-tool.c:1568
+#: ../gio/gdbus-tool.c:1650
 msgid "Introspect a remote object."
 msgstr "Betekintés távoli objektumba."
 
-#: ../gio/gdbus-tool.c:1773
+#: ../gio/gdbus-tool.c:1853
 msgid "Destination name to monitor"
 msgstr "Megfigyelendő cél neve"
 
-#: ../gio/gdbus-tool.c:1774
+#: ../gio/gdbus-tool.c:1854
 msgid "Object path to monitor"
 msgstr "Megfigyelendő objektumútvonal"
 
-#: ../gio/gdbus-tool.c:1803
+#: ../gio/gdbus-tool.c:1883
 msgid "Monitor a remote object."
 msgstr "Távoli objektum megfigyelése."
 
-#: ../gio/gdbus-tool.c:1980
+#: ../gio/gdbus-tool.c:1941
+#, c-format
+msgid "Error: can’t monitor a non-message-bus connection\n"
+msgstr "Hiba: nem figyelhető meg a nem üzenetbusz kapcsolat\n"
+
+#: ../gio/gdbus-tool.c:2065
 msgid "Service to activate before waiting for the other one (well-known name)"
 msgstr "Az aktiválandó szolgáltatás, mielőtt a másikra várna (ismert név)"
 
-#: ../gio/gdbus-tool.c:1983
+#: ../gio/gdbus-tool.c:2068
 msgid ""
 "Timeout to wait for before exiting with an error (seconds); 0 for no timeout "
 "(default)"
@@ -1230,35 +1234,35 @@ msgstr ""
 "Az időtúllépés, mielőtt hibával kilépne (másodpercben); 0, ha nincs "
 "időtúllépés (alapértelmezett)"
 
-#: ../gio/gdbus-tool.c:2031
+#: ../gio/gdbus-tool.c:2116
 msgid "[OPTION…] BUS-NAME"
 msgstr "[KAPCSOLÓ…] BUSZNÉV"
 
-#: ../gio/gdbus-tool.c:2033
+#: ../gio/gdbus-tool.c:2118
 msgid "Wait for a bus name to appear."
 msgstr "Várakozás egy busznévre."
 
-#: ../gio/gdbus-tool.c:2109
+#: ../gio/gdbus-tool.c:2194
 #, c-format
 msgid "Error: A service to activate for must be specified.\n"
 msgstr "Hiba: az objektumútvonal nincs megadva.\n"
 
-#: ../gio/gdbus-tool.c:2114
+#: ../gio/gdbus-tool.c:2199
 #, c-format
 msgid "Error: A service to wait for must be specified.\n"
 msgstr "Hiba: az objektumútvonal nincs megadva.\n"
 
-#: ../gio/gdbus-tool.c:2119
+#: ../gio/gdbus-tool.c:2204
 #, c-format
 msgid "Error: Too many arguments.\n"
 msgstr "Hiba: Túl sok argumentum.\n"
 
-#: ../gio/gdbus-tool.c:2127 ../gio/gdbus-tool.c:2134
+#: ../gio/gdbus-tool.c:2212 ../gio/gdbus-tool.c:2219
 #, c-format
 msgid "Error: %s is not a valid well-known bus name.\n"
 msgstr "Hiba: a(z) %s nem érvényes busznév\n"
 
-#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4533
+#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4566
 msgid "Unnamed"
 msgstr "Névtelen"
 
@@ -1266,31 +1270,31 @@ msgstr "Névtelen"
 msgid "Desktop file didn’t specify Exec field"
 msgstr "A desktop fájl nem adta meg az Exec mezőt"
 
-#: ../gio/gdesktopappinfo.c:2696
+#: ../gio/gdesktopappinfo.c:2701
 msgid "Unable to find terminal required for application"
 msgstr "Nem található az alkalmazáshoz szükséges terminál"
 
-#: ../gio/gdesktopappinfo.c:3129
+#: ../gio/gdesktopappinfo.c:3135
 #, c-format
 msgid "Can’t create user application configuration folder %s: %s"
 msgstr ""
 "Nem hozható létre a(z) %s felhasználói alkalmazáskonfigurációs mappa: %s"
 
-#: ../gio/gdesktopappinfo.c:3133
+#: ../gio/gdesktopappinfo.c:3139
 #, c-format
 msgid "Can’t create user MIME configuration folder %s: %s"
 msgstr "Nem hozható létre a(z) %s felhasználói MIME konfigurációs mappa: %s"
 
-#: ../gio/gdesktopappinfo.c:3373 ../gio/gdesktopappinfo.c:3397
+#: ../gio/gdesktopappinfo.c:3379 ../gio/gdesktopappinfo.c:3403
 msgid "Application information lacks an identifier"
 msgstr "Az alkalmazásinformációkból hiányzik az azonosító"
 
-#: ../gio/gdesktopappinfo.c:3631
+#: ../gio/gdesktopappinfo.c:3637
 #, c-format
 msgid "Can’t create user desktop file %s"
 msgstr "Nem hozható létre a felhasználói desktop fájl (%s)"
 
-#: ../gio/gdesktopappinfo.c:3765
+#: ../gio/gdesktopappinfo.c:3771
 #, c-format
 msgid "Custom definition for %s"
 msgstr "%s egyéni meghatározása"
@@ -1352,14 +1356,14 @@ msgstr "A GEmblemedIcon kódolásban a jelsorok száma (%d) hibásan formált"
 msgid "Expected a GEmblem for GEmblemedIcon"
 msgstr "Egy GEmblem kellene a GEmblemedIconhoz"
 
-#: ../gio/gfile.c:969 ../gio/gfile.c:1207 ../gio/gfile.c:1345
-#: ../gio/gfile.c:1583 ../gio/gfile.c:1638 ../gio/gfile.c:1696
-#: ../gio/gfile.c:1780 ../gio/gfile.c:1837 ../gio/gfile.c:1901
-#: ../gio/gfile.c:1956 ../gio/gfile.c:3614 ../gio/gfile.c:3669
-#: ../gio/gfile.c:3905 ../gio/gfile.c:3947 ../gio/gfile.c:4415
-#: ../gio/gfile.c:4826 ../gio/gfile.c:4911 ../gio/gfile.c:5001
-#: ../gio/gfile.c:5098 ../gio/gfile.c:5185 ../gio/gfile.c:5286
-#: ../gio/gfile.c:7827 ../gio/gfile.c:7917 ../gio/gfile.c:8001
+#: ../gio/gfile.c:1071 ../gio/gfile.c:1309 ../gio/gfile.c:1447
+#: ../gio/gfile.c:1685 ../gio/gfile.c:1740 ../gio/gfile.c:1798
+#: ../gio/gfile.c:1882 ../gio/gfile.c:1939 ../gio/gfile.c:2003
+#: ../gio/gfile.c:2058 ../gio/gfile.c:3704 ../gio/gfile.c:3759
+#: ../gio/gfile.c:3995 ../gio/gfile.c:4037 ../gio/gfile.c:4505
+#: ../gio/gfile.c:4916 ../gio/gfile.c:5001 ../gio/gfile.c:5091
+#: ../gio/gfile.c:5188 ../gio/gfile.c:5275 ../gio/gfile.c:5376
+#: ../gio/gfile.c:7954 ../gio/gfile.c:8044 ../gio/gfile.c:8128
 #: ../gio/win32/gwinhttpfile.c:437
 msgid "Operation not supported"
 msgstr "A művelet nem támogatott"
@@ -1368,69 +1372,69 @@ msgstr "A művelet nem támogatott"
 #. * trying to find the enclosing (user visible)
 #. * mount of a file, but none exists.
 #.
-#: ../gio/gfile.c:1468
+#: ../gio/gfile.c:1570
 msgid "Containing mount does not exist"
 msgstr "A tartalmazó csatolás nem létezik"
 
-#: ../gio/gfile.c:2515 ../gio/glocalfile.c:2377
+#: ../gio/gfile.c:2617 ../gio/glocalfile.c:2446
 msgid "Can’t copy over directory"
 msgstr "Nem lehet a könyvtárra másolni"
 
-#: ../gio/gfile.c:2575
+#: ../gio/gfile.c:2677
 msgid "Can’t copy directory over directory"
 msgstr "A könyvtár nem másolható könyvtárba"
 
-#: ../gio/gfile.c:2583
+#: ../gio/gfile.c:2685
 msgid "Target file exists"
 msgstr "A célfájl létezik"
 
-#: ../gio/gfile.c:2602
+#: ../gio/gfile.c:2704
 msgid "Can’t recursively copy directory"
 msgstr "A könyvtár nem másolható rekurzívan"
 
-#: ../gio/gfile.c:2889
+#: ../gio/gfile.c:2979
 msgid "Splice not supported"
 msgstr "A fájlillesztés nem támogatott"
 
-#: ../gio/gfile.c:2893
+#: ../gio/gfile.c:2983
 #, c-format
 msgid "Error splicing file: %s"
 msgstr "Hiba a fájl illesztésekor: %s"
 
-#: ../gio/gfile.c:3025
+#: ../gio/gfile.c:3115
 msgid "Copy (reflink/clone) between mounts is not supported"
 msgstr "A csatolások közti másolás (reflink/clone) nem támogatott"
 
-#: ../gio/gfile.c:3029
+#: ../gio/gfile.c:3119
 msgid "Copy (reflink/clone) is not supported or invalid"
 msgstr "A másolás (reflink/clone) nem támogatott vagy érvénytelen"
 
-#: ../gio/gfile.c:3034
+#: ../gio/gfile.c:3124
 msgid "Copy (reflink/clone) is not supported or didn’t work"
 msgstr "A másolás (reflink/clone) nem támogatott vagy nem működött"
 
-#: ../gio/gfile.c:3097
+#: ../gio/gfile.c:3187
 msgid "Can’t copy special file"
 msgstr "A speciális fájl nem másolható"
 
-#: ../gio/gfile.c:3895
+#: ../gio/gfile.c:3985
 msgid "Invalid symlink value given"
 msgstr "Érvénytelen szimbolikus link érték került megadásra"
 
-#: ../gio/gfile.c:4056
+#: ../gio/gfile.c:4146
 msgid "Trash not supported"
 msgstr "A Kuka nem támogatott"
 
-#: ../gio/gfile.c:4168
+#: ../gio/gfile.c:4258
 #, c-format
 msgid "File names cannot contain “%c”"
 msgstr "A fájlnevek nem tartalmazhatnak „%c” karaktert"
 
-#: ../gio/gfile.c:6614 ../gio/gvolume.c:363
+#: ../gio/gfile.c:6739 ../gio/gvolume.c:363
 msgid "volume doesn’t implement mount"
 msgstr "a kötet nem valósítja meg a csatolást"
 
-#: ../gio/gfile.c:6723
+#: ../gio/gfile.c:6848
 msgid "No application is registered as handling this file"
 msgstr "Nincs alkalmazás regisztrálva a fájl kezeléséhez"
 
@@ -1476,7 +1480,7 @@ msgid "Truncate not supported on stream"
 msgstr "Az adatfolyam csonkítása nem engedélyezett"
 
 #: ../gio/ghttpproxy.c:91 ../gio/gresolver.c:410 ../gio/gresolver.c:476
-#: ../glib/gconvert.c:1650
+#: ../glib/gconvert.c:1755
 msgid "Invalid hostname"
 msgstr "Érvénytelen gépnév"
 
@@ -1518,7 +1522,7 @@ msgstr "Nincs típus az osztálynévhez: %s"
 #: ../gio/gicon.c:320
 #, c-format
 msgid "Type %s does not implement the GIcon interface"
-msgstr "A típus (%s) nem valósítja meg a GIcon felületet"
+msgstr "A(z) %s típus nem valósítja meg a GIcon interfészt"
 
 #: ../gio/gicon.c:331
 #, c-format
@@ -1534,7 +1538,7 @@ msgstr "Rosszul formált verziószám: %s"
 #, c-format
 msgid "Type %s does not implement from_tokens() on the GIcon interface"
 msgstr ""
-"A típus (%s) nem valósítja meg a from_tokens() függvényt a GIcon felületen"
+"A(z) %s típus nem valósítja meg a from_tokens() függvényt a GIcon interfészen"
 
 #: ../gio/gicon.c:461
 msgid "Can’t handle the supplied version of the icon encoding"
@@ -1559,7 +1563,7 @@ msgid "Could not parse “%s” as IP address mask"
 msgstr "Nem dolgozható fel a(z) „%s” IP-cím maszkként"
 
 #: ../gio/ginetsocketaddress.c:203 ../gio/ginetsocketaddress.c:220
-#: ../gio/gnativesocketaddress.c:106 ../gio/gunixsocketaddress.c:218
+#: ../gio/gnativesocketaddress.c:109 ../gio/gunixsocketaddress.c:218
 msgid "Not enough space for socket address"
 msgstr "Nincs elég hely a foglalat címének"
 
@@ -1679,27 +1683,27 @@ msgstr "A helyek tartalmának felsorolása egy fában"
 msgid "Use %s to get detailed help.\n"
 msgstr "Részletes segítségért adja ki a %s parancsot.\n"
 
-#: ../gio/gio-tool-cat.c:83
+#: ../gio/gio-tool-cat.c:87
 msgid "Error writing to stdout"
 msgstr "Hiba a szabványos kimenetre íráskor"
 
 #. Translators: commandline placeholder
-#: ../gio/gio-tool-cat.c:127 ../gio/gio-tool-info.c:282
+#: ../gio/gio-tool-cat.c:133 ../gio/gio-tool-info.c:282
 #: ../gio/gio-tool-list.c:165 ../gio/gio-tool-mkdir.c:48
 #: ../gio/gio-tool-monitor.c:37 ../gio/gio-tool-monitor.c:39
 #: ../gio/gio-tool-monitor.c:41 ../gio/gio-tool-monitor.c:43
 #: ../gio/gio-tool-monitor.c:203 ../gio/gio-tool-mount.c:1141
-#: ../gio/gio-tool-open.c:45 ../gio/gio-tool-remove.c:48
+#: ../gio/gio-tool-open.c:113 ../gio/gio-tool-remove.c:48
 #: ../gio/gio-tool-rename.c:45 ../gio/gio-tool-set.c:89
 #: ../gio/gio-tool-trash.c:81 ../gio/gio-tool-tree.c:239
 msgid "LOCATION"
 msgstr "HELY"
 
-#: ../gio/gio-tool-cat.c:132
+#: ../gio/gio-tool-cat.c:138
 msgid "Concatenate files and print to standard output."
 msgstr "Fájlok összefűzése és kiírása a szabványos kimenetre."
 
-#: ../gio/gio-tool-cat.c:134
+#: ../gio/gio-tool-cat.c:140
 msgid ""
 "gio cat works just like the traditional cat utility, but using GIO\n"
 "locations instead of local files: for example, you can use something\n"
@@ -1709,9 +1713,9 @@ msgstr ""
 "fájlok helyett GIO helyeket használ: megadható például helyként az\n"
 "smb://kiszolgáló/erőforrás/fájl.txt."
 
-#: ../gio/gio-tool-cat.c:156 ../gio/gio-tool-info.c:313
+#: ../gio/gio-tool-cat.c:162 ../gio/gio-tool-info.c:313
 #: ../gio/gio-tool-mkdir.c:76 ../gio/gio-tool-monitor.c:228
-#: ../gio/gio-tool-open.c:71 ../gio/gio-tool-remove.c:72
+#: ../gio/gio-tool-open.c:139 ../gio/gio-tool-remove.c:72
 msgid "No locations given"
 msgstr "Nincsenek megadva helyek"
 
@@ -1752,7 +1756,7 @@ msgstr "FORRÁS"
 
 #. Translators: commandline placeholder
 #: ../gio/gio-tool-copy.c:98 ../gio/gio-tool-move.c:94
-#: ../gio/gio-tool-save.c:165
+#: ../gio/gio-tool-save.c:160
 msgid "DESTINATION"
 msgstr "CÉL"
 
@@ -1893,7 +1897,7 @@ msgid ""
 "like smb://server/resource/file.txt as location. File attributes can\n"
 "be specified with their GIO name, e.g. standard::icon"
 msgstr ""
-"A GIO list a hagyományos ls segédprogramhoz hasonlóan működik, de helyi\n"
+"A gio list a hagyományos ls segédprogramhoz hasonlóan működik, de helyi\n"
 "fájlok helyett GIO helyeket használ: megadható például helyként az\n"
 "smb://kiszolgáló/erőforrás/fájl.txt. A fájlattribútumok a GIO nevükkel\n"
 "adhatók meg, például: standard::icon"
@@ -2105,7 +2109,7 @@ msgstr ""
 msgid "Target %s is not a directory"
 msgstr "A megadott cél (%s) nem könyvtár"
 
-#: ../gio/gio-tool-open.c:50
+#: ../gio/gio-tool-open.c:118
 msgid ""
 "Open files with the default application that\n"
 "is registered to handle files of this type."
@@ -2133,7 +2137,7 @@ msgstr "Fájl átnevezése."
 msgid "Missing argument"
 msgstr "Hiányzó argumentum"
 
-#: ../gio/gio-tool-rename.c:76 ../gio/gio-tool-save.c:195
+#: ../gio/gio-tool-rename.c:76 ../gio/gio-tool-save.c:190
 #: ../gio/gio-tool-set.c:137
 msgid "Too many arguments"
 msgstr "Túl sok argumentum"
@@ -2173,21 +2177,21 @@ msgstr "A felülírt fájl etagja"
 msgid "ETAG"
 msgstr "ECÍMKE"
 
-#: ../gio/gio-tool-save.c:119
+#: ../gio/gio-tool-save.c:113
 msgid "Error reading from standard input"
 msgstr "Hiba a szabványos bemenetről olvasáskor"
 
 #. Translators: The "etag" is a token allowing to verify whether a file has been modified
-#: ../gio/gio-tool-save.c:145
+#: ../gio/gio-tool-save.c:139
 #, c-format
 msgid "Etag not available\n"
 msgstr "Az etag nem érhető el\n"
 
-#: ../gio/gio-tool-save.c:168
+#: ../gio/gio-tool-save.c:163
 msgid "Read from standard input and save to DEST."
 msgstr "Szabványos bemenet olvasása és a CÉLBA mentése."
 
-#: ../gio/gio-tool-save.c:188
+#: ../gio/gio-tool-save.c:183
 msgid "No destination given"
 msgstr "Nincs megadva cél"
 
@@ -2374,19 +2378,16 @@ msgstr "az álnévnek legalább 2 karakternek kell lennie"
 
 #: ../gio/glib-compile-schemas.c:106
 #, c-format
-#| msgid "Invalid symlink value given"
 msgid "Invalid numeric value"
 msgstr "Érvénytelen számérték"
 
 #: ../gio/glib-compile-schemas.c:114
 #, c-format
-#| msgid "<%s id='%s'> already specified"
 msgid "<value nick='%s'/> already specified"
 msgstr "<value nick='%s'/> már meg van adva"
 
 #: ../gio/glib-compile-schemas.c:122
 #, c-format
-#| msgid "<key name='%s'> already specified"
 msgid "value='%s' already specified"
 msgstr "value='%s' már meg van adva"
 
@@ -2402,7 +2403,6 @@ msgstr "<%s> legalább egy <value> címkét kell tartalmazzon"
 
 #: ../gio/glib-compile-schemas.c:315
 #, c-format
-#| msgid "No connection endpoint specified"
 msgid "<%s> is not contained in the specified range"
 msgstr "<%s> nincs a megadott tartományon belül"
 
@@ -2422,7 +2422,6 @@ msgid "<%s> contains a string not in <choices>"
 msgstr "<%s> nem a <choices> közti karakterláncot tartalmaz"
 
 #: ../gio/glib-compile-schemas.c:373
-#| msgid "<key name='%s'> already specified"
 msgid "<range/> already specified for this key"
 msgstr "<range/> már meg van adva ehhez a kulcshoz"
 
@@ -2451,7 +2450,6 @@ msgstr "fordítási kontextus megadva egy lokalizáció nélküli értékhez"
 
 #: ../gio/glib-compile-schemas.c:475
 #, c-format
-#| msgid "Failed to create file “%s”: %s"
 msgid "Failed to parse <default> value of type “%s”: "
 msgstr "Nem sikerült feldolgozni a(z) „%s” típusú <default> értéket: "
 
@@ -2461,7 +2459,6 @@ msgid ""
 msgstr "a <choices> nem adható meg felsorolás típusúként megjelölt kulcsokhoz"
 
 #: ../gio/glib-compile-schemas.c:501
-#| msgid "<child name='%s'> already specified"
 msgid "<choices> already specified for this key"
 msgstr "<choices> már meg van adva ehhez a kulcshoz"
 
@@ -2472,7 +2469,6 @@ msgstr "<choices> nem engedélyezett ezen típusú kulcshoz: „%s”"
 
 #: ../gio/glib-compile-schemas.c:529
 #, c-format
-#| msgid "<child name='%s'> already specified"
 msgid "<choice value='%s'/> already given"
 msgstr "<choice value='%s'/> már meg van adva"
 
@@ -2482,7 +2478,6 @@ msgid "<choices> must contain at least one <choice>"
 msgstr "<choices> legalább egy <choice> címkét kell tartalmazzon"
 
 #: ../gio/glib-compile-schemas.c:558
-#| msgid "<child name='%s'> already specified"
 msgid "<aliases> already specified for this key"
 msgstr "<aliases> már meg van adva ehhez a kulcshoz"
 
@@ -2506,18 +2501,16 @@ msgstr ""
 #, c-format
 msgid "<alias value='%s'/> given when <choice value='%s'/> was already given"
 msgstr ""
-"<alias value='%s'/> van megadva, miközben már meg van adva <choice value='%"
-"s'/>"
+"<alias value='%s'/> van megadva, miközben már meg van adva <choice "
+"value='%s'/>"
 
 #: ../gio/glib-compile-schemas.c:595
 #, c-format
-#| msgid "<%s id='%s'> already specified"
 msgid "<alias value='%s'/> already specified"
 msgstr "<alias value='%s'/> már meg van adva"
 
 #: ../gio/glib-compile-schemas.c:605
 #, c-format
-#| msgid "“%s” is not a signed number"
 msgid "alias target “%s” is not in enumerated type"
 msgstr "„%s” álnév célja nem felsorolás típusban van"
 
@@ -2532,21 +2525,16 @@ msgid "<aliases> must contain at least one <alias>"
 msgstr "<aliases> legalább egy <alias> címkét kell tartalmazzon"
 
 #: ../gio/glib-compile-schemas.c:786
-#| msgid "empty names are not permitted"
 msgid "Empty names are not permitted"
 msgstr "Az üres nevek nem engedélyezettek"
 
 #: ../gio/glib-compile-schemas.c:796
 #, c-format
-#| msgid "invalid name '%s': names must begin with a lowercase letter"
 msgid "Invalid name “%s”: names must begin with a lowercase letter"
 msgstr "Érvénytelen név („%s”): a neveknek kisbetűvel kell kezdődniük"
 
 #: ../gio/glib-compile-schemas.c:808
 #, c-format
-#| msgid ""
-#| "invalid name '%s': invalid character '%c'; only lowercase letters, "
-#| "numbers and hyphen ('-') are permitted."
 msgid ""
 "Invalid name “%s”: invalid character “%c”; only lowercase letters, numbers "
 "and hyphen (“-”) are permitted"
@@ -2556,20 +2544,17 @@ msgstr ""
 
 #: ../gio/glib-compile-schemas.c:817
 #, c-format
-#| msgid "invalid name '%s': two successive hyphens ('--') are not permitted."
 msgid "Invalid name “%s”: two successive hyphens (“--”) are not permitted"
 msgstr ""
 "Érvénytelen név („%s”): két egymást követő kötőjel („--”) nem engedélyezett"
 
 #: ../gio/glib-compile-schemas.c:826
 #, c-format
-#| msgid "invalid name '%s': the last character may not be a hyphen ('-')."
 msgid "Invalid name “%s”: the last character may not be a hyphen (“-”)"
 msgstr "Érvénytelen név („%s”): az utolsó karakter nem lehet kötőjel („-”)"
 
 #: ../gio/glib-compile-schemas.c:834
 #, c-format
-#| msgid "invalid name '%s': maximum length is 1024"
 msgid "Invalid name “%s”: maximum length is 1024"
 msgstr "Érvénytelen név („%s”): a maximális hossz 1024 karakter"
 
@@ -2579,7 +2564,6 @@ msgid "<child name='%s'> already specified"
 msgstr "<child name='%s'> már meg van adva"
 
 #: ../gio/glib-compile-schemas.c:930
-#| msgid "cannot add keys to a 'list-of' schema"
 msgid "Cannot add keys to a “list-of” schema"
 msgstr "Nem adhatók kulcsok „list-of” sémához"
 
@@ -2599,9 +2583,6 @@ msgstr ""
 
 #: ../gio/glib-compile-schemas.c:970
 #, c-format
-#| msgid ""
-#| "exactly one of 'type', 'enum' or 'flags' must be specified as an "
-#| "attribute to <key>"
 msgid ""
 "Exactly one of “type”, “enum” or “flags” must be specified as an attribute "
 "to <key>"
@@ -2615,18 +2596,15 @@ msgstr "<%s id='%s'> (még) nincs megadva."
 
 #: ../gio/glib-compile-schemas.c:1004
 #, c-format
-#| msgid "invalid GVariant type string '%s'"
 msgid "Invalid GVariant type string “%s”"
 msgstr "Érvénytelen GVariant típuskarakterlánc: „%s”"
 
 #: ../gio/glib-compile-schemas.c:1034
-#| msgid "<override> given but schema isn't extending anything"
 msgid "<override> given but schema isn’t extending anything"
 msgstr "Az <override> megadva, de a séma nem terjeszt ki semmit"
 
 #: ../gio/glib-compile-schemas.c:1047
 #, c-format
-#| msgid "no <key name='%s'> to override"
 msgid "No <key name='%s'> to override"
 msgstr "Nincs felülírandó <key name='%s'>"
 
@@ -2642,25 +2620,21 @@ msgstr "<schema id='%s'> már megadva"
 
 #: ../gio/glib-compile-schemas.c:1140
 #, c-format
-#| msgid "<schema id='%s'> extends not yet existing schema '%s'"
 msgid "<schema id='%s'> extends not yet existing schema “%s”"
 msgstr "A <schema id='%s'> a még nem létező „%s” sémát terjeszti ki"
 
 #: ../gio/glib-compile-schemas.c:1156
 #, c-format
-#| msgid "<schema id='%s'> is list of not yet existing schema '%s'"
 msgid "<schema id='%s'> is list of not yet existing schema “%s”"
 msgstr "A <schema id='%s'> a még nem létező „%s” séma listája"
 
 #: ../gio/glib-compile-schemas.c:1164
 #, c-format
-#| msgid "Can not be a list of a schema with a path"
 msgid "Cannot be a list of a schema with a path"
 msgstr "Nem lehet séma listája útvonallal"
 
 #: ../gio/glib-compile-schemas.c:1174
 #, c-format
-#| msgid "Can not extend a schema with a path"
 msgid "Cannot extend a schema with a path"
 msgstr "Nem terjeszthet ki sémát útvonallal"
 
@@ -2673,9 +2647,6 @@ msgstr ""
 
 #: ../gio/glib-compile-schemas.c:1194
 #, c-format
-#| msgid ""
-#| "<schema id='%s' list-of='%s'> extends <schema id='%s' list-of='%s'> but "
-#| "'%s' does not extend '%s'"
 msgid ""
 "<schema id='%s' list-of='%s'> extends <schema id='%s' list-of='%s'> but “%s” "
 "does not extend “%s”"
@@ -2685,14 +2656,12 @@ msgstr ""
 
 #: ../gio/glib-compile-schemas.c:1211
 #, c-format
-#| msgid "a path, if given, must begin and end with a slash"
 msgid "A path, if given, must begin and end with a slash"
 msgstr ""
 "Ha meg van adva útvonal, akkor osztásjellel kell kezdődnie és végződnie"
 
 #: ../gio/glib-compile-schemas.c:1218
 #, c-format
-#| msgid "the path of a list must end with ':/'"
 msgid "The path of a list must end with “:/”"
 msgstr "A lista útvonalának „:/” karakterekkel kell végződnie"
 
@@ -2702,8 +2671,8 @@ msgid ""
 "Warning: Schema “%s” has path “%s”.  Paths starting with “/apps/”, “/"
 "desktop/” or “/system/” are deprecated."
 msgstr ""
-"Figyelmeztetés: „%s” sémához „%s” útvonal tartozik. Az „/apps/”, \"/desktop/” "
-"vagy „/system/” kezdetű útvonalak elavultak."
+"Figyelmeztetés: „%s” sémához „%s” útvonal tartozik. Az „/apps/”, \"/"
+"desktop/” vagy „/system/” kezdetű útvonalak elavultak."
 
 #: ../gio/glib-compile-schemas.c:1257
 #, c-format
@@ -2726,7 +2695,6 @@ msgstr "A <default> elem kötelező a <key>-ben"
 
 #: ../gio/glib-compile-schemas.c:1613
 #, c-format
-#| msgid "text may not appear inside <%s>"
 msgid "Text may not appear inside <%s>"
 msgstr "Nem jelenhet meg szöveg ezen belül: <%s>"
 
@@ -2853,7 +2821,7 @@ msgstr "meglévő kimeneti fájl eltávolítva.\n"
 msgid "Invalid filename %s"
 msgstr "Érvénytelen fájlnév: %s"
 
-#: ../gio/glocalfile.c:1037
+#: ../gio/glocalfile.c:1105
 #, c-format
 msgid "Error getting filesystem info for %s: %s"
 msgstr "Hiba a(z) %s fájlrendszer-információinak lekérésekor: %s"
@@ -2862,235 +2830,235 @@ msgstr "Hiba a(z) %s fájlrendszer-információinak lekérésekor: %s"
 #. * the enclosing (user visible) mount of a file, but none
 #. * exists.
 #.
-#: ../gio/glocalfile.c:1176
+#: ../gio/glocalfile.c:1244
 #, c-format
 msgid "Containing mount for file %s not found"
 msgstr "A(z) %s fájlt tartalmazó csatolás nem található"
 
-#: ../gio/glocalfile.c:1199
+#: ../gio/glocalfile.c:1267
 msgid "Can’t rename root directory"
 msgstr "Nem nevezhető át a gyökérkönyvtár"
 
-#: ../gio/glocalfile.c:1217 ../gio/glocalfile.c:1240
+#: ../gio/glocalfile.c:1285 ../gio/glocalfile.c:1308
 #, c-format
 msgid "Error renaming file %s: %s"
 msgstr "Hiba a(z) %s fájl átnevezésekor: %s"
 
-#: ../gio/glocalfile.c:1224
+#: ../gio/glocalfile.c:1292
 msgid "Can’t rename file, filename already exists"
 msgstr "A fájl nem nevezhető át, a fájlnév már létezik"
 
-#: ../gio/glocalfile.c:1237 ../gio/glocalfile.c:2253 ../gio/glocalfile.c:2281
-#: ../gio/glocalfile.c:2438 ../gio/glocalfileoutputstream.c:549
+#: ../gio/glocalfile.c:1305 ../gio/glocalfile.c:2322 ../gio/glocalfile.c:2350
+#: ../gio/glocalfile.c:2507 ../gio/glocalfileoutputstream.c:551
 msgid "Invalid filename"
 msgstr "Érvénytelen fájlnév"
 
-#: ../gio/glocalfile.c:1404 ../gio/glocalfile.c:1419
+#: ../gio/glocalfile.c:1473 ../gio/glocalfile.c:1488
 #, c-format
 msgid "Error opening file %s: %s"
 msgstr "Hiba a(z) %s fájl megnyitásakor: %s"
 
-#: ../gio/glocalfile.c:1544
+#: ../gio/glocalfile.c:1613
 #, c-format
 msgid "Error removing file %s: %s"
 msgstr "Hiba a(z) %s fájl eltávolításakor: %s"
 
-#: ../gio/glocalfile.c:1928
+#: ../gio/glocalfile.c:1997
 #, c-format
 msgid "Error trashing file %s: %s"
 msgstr "Hiba a(z) %s fájl Kukába dobásakor: %s"
 
-#: ../gio/glocalfile.c:1951
+#: ../gio/glocalfile.c:2020
 #, c-format
 msgid "Unable to create trash dir %s: %s"
 msgstr "Nem sikerült létrehozni a(z) %s Kuka könyvtárat: %s"
 
-#: ../gio/glocalfile.c:1971
+#: ../gio/glocalfile.c:2040
 #, c-format
 msgid "Unable to find toplevel directory to trash %s"
 msgstr "Nem található a felső szintű könyvtár a(z) %s kidobásához"
 
-#: ../gio/glocalfile.c:2050 ../gio/glocalfile.c:2070
+#: ../gio/glocalfile.c:2119 ../gio/glocalfile.c:2139
 #, c-format
 msgid "Unable to find or create trash directory for %s"
 msgstr "Nem található vagy nem hozható létre a Kuka könyvtár ehhez: %s"
 
-#: ../gio/glocalfile.c:2105
+#: ../gio/glocalfile.c:2174
 #, c-format
 msgid "Unable to create trashing info file for %s: %s"
 msgstr "Nem sikerült létrehozni a(z) %s kukainformációs fájlját: %s"
 
-#: ../gio/glocalfile.c:2164
+#: ../gio/glocalfile.c:2233
 #, c-format
 msgid "Unable to trash file %s across filesystem boundaries"
 msgstr "Nem lehet fájlrendszer-határokon át Kukába dobni a(z) %s fájlt"
 
-#: ../gio/glocalfile.c:2168 ../gio/glocalfile.c:2224
+#: ../gio/glocalfile.c:2237 ../gio/glocalfile.c:2293
 #, c-format
 msgid "Unable to trash file %s: %s"
 msgstr "Nem lehet a Kukába dobni a(z) %s fájlt: %s"
 
-#: ../gio/glocalfile.c:2230
+#: ../gio/glocalfile.c:2299
 #, c-format
 msgid "Unable to trash file %s"
 msgstr "Nem lehet a Kukába dobni a(z) %s fájlt"
 
-#: ../gio/glocalfile.c:2256
+#: ../gio/glocalfile.c:2325
 #, c-format
 msgid "Error creating directory %s: %s"
 msgstr "Hiba a(z) %s könyvtár létrehozásakor: %s"
 
-#: ../gio/glocalfile.c:2285
+#: ../gio/glocalfile.c:2354
 #, c-format
 msgid "Filesystem does not support symbolic links"
 msgstr "A fájlrendszer nem támogatja a szimbolikus linkeket"
 
-#: ../gio/glocalfile.c:2288
+#: ../gio/glocalfile.c:2357
 #, c-format
 msgid "Error making symbolic link %s: %s"
 msgstr "Hiba a(z) %s szimbolikus link létrehozásakor: %s"
 
-#: ../gio/glocalfile.c:2294 ../glib/gfileutils.c:2077
+#: ../gio/glocalfile.c:2363 ../glib/gfileutils.c:2127
 msgid "Symbolic links not supported"
 msgstr "A szimbolikus linkek használata nem támogatott"
 
-#: ../gio/glocalfile.c:2349 ../gio/glocalfile.c:2384 ../gio/glocalfile.c:2441
+#: ../gio/glocalfile.c:2418 ../gio/glocalfile.c:2453 ../gio/glocalfile.c:2510
 #, c-format
 msgid "Error moving file %s: %s"
 msgstr "Hiba a(z) %s fájl áthelyezésekor: %s"
 
-#: ../gio/glocalfile.c:2372
+#: ../gio/glocalfile.c:2441
 msgid "Can’t move directory over directory"
 msgstr "A könyvtár nem helyezhető át könyvtárba"
 
-#: ../gio/glocalfile.c:2398 ../gio/glocalfileoutputstream.c:933
-#: ../gio/glocalfileoutputstream.c:947 ../gio/glocalfileoutputstream.c:962
-#: ../gio/glocalfileoutputstream.c:979 ../gio/glocalfileoutputstream.c:993
+#: ../gio/glocalfile.c:2467 ../gio/glocalfileoutputstream.c:935
+#: ../gio/glocalfileoutputstream.c:949 ../gio/glocalfileoutputstream.c:964
+#: ../gio/glocalfileoutputstream.c:981 ../gio/glocalfileoutputstream.c:995
 msgid "Backup file creation failed"
 msgstr "A mentési fájl létrehozása meghiúsult"
 
-#: ../gio/glocalfile.c:2417
+#: ../gio/glocalfile.c:2486
 #, c-format
 msgid "Error removing target file: %s"
 msgstr "Hiba a célfájl eltávolításakor: %s"
 
-#: ../gio/glocalfile.c:2431
+#: ../gio/glocalfile.c:2500
 msgid "Move between mounts not supported"
 msgstr "A csatolások közti áthelyezés nem támogatott"
 
-#: ../gio/glocalfile.c:2622
+#: ../gio/glocalfile.c:2691
 #, c-format
 msgid "Could not determine the disk usage of %s: %s"
 msgstr "Nem lehet meghatározni %s lemezhasználatát: %s"
 
-#: ../gio/glocalfileinfo.c:731
+#: ../gio/glocalfileinfo.c:745
 msgid "Attribute value must be non-NULL"
 msgstr "Az attribútum értéke nem lehet NULL"
 
-#: ../gio/glocalfileinfo.c:738
+#: ../gio/glocalfileinfo.c:752
 msgid "Invalid attribute type (string expected)"
 msgstr "Érvénytelen attribútumtípus (a várt karakterlánc helyett)"
 
-#: ../gio/glocalfileinfo.c:745
+#: ../gio/glocalfileinfo.c:759
 msgid "Invalid extended attribute name"
 msgstr "Érvénytelen kiterjesztett attribútumnév"
 
-#: ../gio/glocalfileinfo.c:785
+#: ../gio/glocalfileinfo.c:799
 #, c-format
 msgid "Error setting extended attribute “%s”: %s"
 msgstr "Hiba a(z) „%s” kiterjesztett attribútum beállításakor: %s"
 
-#: ../gio/glocalfileinfo.c:1586
+#: ../gio/glocalfileinfo.c:1607
 msgid " (invalid encoding)"
 msgstr " (érvénytelen kódolás)"
 
-#: ../gio/glocalfileinfo.c:1777 ../gio/glocalfileoutputstream.c:811
+#: ../gio/glocalfileinfo.c:1776 ../gio/glocalfileoutputstream.c:813
 #, c-format
 msgid "Error when getting information for file “%s”: %s"
 msgstr "Hiba a(z) „%s” fájl információinak lekérésekor: %s"
 
-#: ../gio/glocalfileinfo.c:2028
+#: ../gio/glocalfileinfo.c:2038
 #, c-format
 msgid "Error when getting information for file descriptor: %s"
 msgstr "Hiba a fájlleíró információinak lekérésekor: %s"
 
-#: ../gio/glocalfileinfo.c:2073
+#: ../gio/glocalfileinfo.c:2083
 msgid "Invalid attribute type (uint32 expected)"
 msgstr "Érvénytelen attribútumtípus (a várt uint32 helyett)"
 
-#: ../gio/glocalfileinfo.c:2091
+#: ../gio/glocalfileinfo.c:2101
 msgid "Invalid attribute type (uint64 expected)"
 msgstr "Érvénytelen attribútumtípus (a várt uint64 helyett)"
 
-#: ../gio/glocalfileinfo.c:2110 ../gio/glocalfileinfo.c:2129
+#: ../gio/glocalfileinfo.c:2120 ../gio/glocalfileinfo.c:2139
 msgid "Invalid attribute type (byte string expected)"
 msgstr "Érvénytelen attribútumtípus (a várt bájtkarakterlánc helyett)"
 
-#: ../gio/glocalfileinfo.c:2164
+#: ../gio/glocalfileinfo.c:2184
 msgid "Cannot set permissions on symlinks"
 msgstr "Nem állíthatók be a szimbolikus linkek jogosultságai"
 
-#: ../gio/glocalfileinfo.c:2180
+#: ../gio/glocalfileinfo.c:2200
 #, c-format
 msgid "Error setting permissions: %s"
 msgstr "Hiba a jogosultságok beállításakor: %s"
 
-#: ../gio/glocalfileinfo.c:2231
+#: ../gio/glocalfileinfo.c:2251
 #, c-format
 msgid "Error setting owner: %s"
 msgstr "Hiba a tulajdonos beállításakor: %s"
 
-#: ../gio/glocalfileinfo.c:2254
+#: ../gio/glocalfileinfo.c:2274
 msgid "symlink must be non-NULL"
 msgstr "a szimbolikus link nem lehet NULL"
 
-#: ../gio/glocalfileinfo.c:2264 ../gio/glocalfileinfo.c:2283
-#: ../gio/glocalfileinfo.c:2294
+#: ../gio/glocalfileinfo.c:2284 ../gio/glocalfileinfo.c:2303
+#: ../gio/glocalfileinfo.c:2314
 #, c-format
 msgid "Error setting symlink: %s"
 msgstr "Hiba a szimbolikus link beállításakor: %s"
 
-#: ../gio/glocalfileinfo.c:2273
+#: ../gio/glocalfileinfo.c:2293
 msgid "Error setting symlink: file is not a symlink"
 msgstr "Hiba a szimbolikus link beállításakor: a fájl nem szimbolikus link"
 
-#: ../gio/glocalfileinfo.c:2399
+#: ../gio/glocalfileinfo.c:2419
 #, c-format
 msgid "Error setting modification or access time: %s"
 msgstr "Hiba a módosítási vagy hozzáférési idő beállításakor: %s"
 
-#: ../gio/glocalfileinfo.c:2422
+#: ../gio/glocalfileinfo.c:2442
 msgid "SELinux context must be non-NULL"
 msgstr "A SELinux környezet nem lehet NULL"
 
-#: ../gio/glocalfileinfo.c:2437
+#: ../gio/glocalfileinfo.c:2457
 #, c-format
 msgid "Error setting SELinux context: %s"
 msgstr "Hiba a SELinux környezet beállításakor: %s"
 
-#: ../gio/glocalfileinfo.c:2444
+#: ../gio/glocalfileinfo.c:2464
 msgid "SELinux is not enabled on this system"
 msgstr "A SELinux nem engedélyezett ezen rendszeren"
 
-#: ../gio/glocalfileinfo.c:2536
+#: ../gio/glocalfileinfo.c:2556
 #, c-format
 msgid "Setting attribute %s not supported"
 msgstr "A(z) %s attribútum beállítása nem támogatott"
 
-#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:694
+#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:696
 #, c-format
 msgid "Error reading from file: %s"
 msgstr "Hiba a fájl olvasásakor: %s"
 
 #: ../gio/glocalfileinputstream.c:199 ../gio/glocalfileinputstream.c:211
 #: ../gio/glocalfileinputstream.c:225 ../gio/glocalfileinputstream.c:333
-#: ../gio/glocalfileoutputstream.c:456 ../gio/glocalfileoutputstream.c:1011
+#: ../gio/glocalfileoutputstream.c:458 ../gio/glocalfileoutputstream.c:1013
 #, c-format
 msgid "Error seeking in file: %s"
 msgstr "Hiba a fájlban kereséskor: %s"
 
-#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:246
-#: ../gio/glocalfileoutputstream.c:340
+#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:248
+#: ../gio/glocalfileoutputstream.c:342
 #, c-format
 msgid "Error closing file: %s"
 msgstr "Hiba a fájl lezárásakor: %s"
@@ -3099,51 +3067,51 @@ msgstr "Hiba a fájl lezárásakor: %s"
 msgid "Unable to find default local file monitor type"
 msgstr "Nem található az alapértelmezett helyi fájlfigyelő típus"
 
-#: ../gio/glocalfileoutputstream.c:194 ../gio/glocalfileoutputstream.c:226
-#: ../gio/glocalfileoutputstream.c:715
+#: ../gio/glocalfileoutputstream.c:196 ../gio/glocalfileoutputstream.c:228
+#: ../gio/glocalfileoutputstream.c:717
 #, c-format
 msgid "Error writing to file: %s"
 msgstr "Hiba a fájl írásakor: %s"
 
-#: ../gio/glocalfileoutputstream.c:273
+#: ../gio/glocalfileoutputstream.c:275
 #, c-format
 msgid "Error removing old backup link: %s"
 msgstr "Hiba a régi mentési link eltávolításakor: %s"
 
-#: ../gio/glocalfileoutputstream.c:287 ../gio/glocalfileoutputstream.c:300
+#: ../gio/glocalfileoutputstream.c:289 ../gio/glocalfileoutputstream.c:302
 #, c-format
 msgid "Error creating backup copy: %s"
 msgstr "Hiba a mentés létrehozásakor: %s"
 
-#: ../gio/glocalfileoutputstream.c:318
+#: ../gio/glocalfileoutputstream.c:320
 #, c-format
 msgid "Error renaming temporary file: %s"
 msgstr "Hiba az ideiglenes fájl átnézésekor: %s"
 
-#: ../gio/glocalfileoutputstream.c:502 ../gio/glocalfileoutputstream.c:1062
+#: ../gio/glocalfileoutputstream.c:504 ../gio/glocalfileoutputstream.c:1064
 #, c-format
 msgid "Error truncating file: %s"
 msgstr "Hiba a fájl csonkításakor: %s"
 
-#: ../gio/glocalfileoutputstream.c:555 ../gio/glocalfileoutputstream.c:793
-#: ../gio/glocalfileoutputstream.c:1043 ../gio/gsubprocess.c:380
+#: ../gio/glocalfileoutputstream.c:557 ../gio/glocalfileoutputstream.c:795
+#: ../gio/glocalfileoutputstream.c:1045 ../gio/gsubprocess.c:380
 #, c-format
 msgid "Error opening file “%s”: %s"
 msgstr "Hiba a(z) %s fájl megnyitásakor: %s"
 
-#: ../gio/glocalfileoutputstream.c:824
+#: ../gio/glocalfileoutputstream.c:826
 msgid "Target file is a directory"
 msgstr "A célfájl egy könyvtár"
 
-#: ../gio/glocalfileoutputstream.c:829
+#: ../gio/glocalfileoutputstream.c:831
 msgid "Target file is not a regular file"
 msgstr "A célfájl nem szabályos fájl"
 
-#: ../gio/glocalfileoutputstream.c:841
+#: ../gio/glocalfileoutputstream.c:843
 msgid "The file was externally modified"
 msgstr "A fájlt külső program módosította"
 
-#: ../gio/glocalfileoutputstream.c:1027
+#: ../gio/glocalfileoutputstream.c:1029
 #, c-format
 msgid "Error removing old file: %s"
 msgstr "Hiba a régi fájl eltávolításakor: %s"
@@ -3187,21 +3155,21 @@ msgstr "Pozicionálási kérés az adatfolyam vége mögé"
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement unmount.
-#: ../gio/gmount.c:393
+#: ../gio/gmount.c:396
 msgid "mount doesn’t implement “unmount”"
 msgstr "A csatolás nem valósítja meg az „unmount” függvényt"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement eject.
-#: ../gio/gmount.c:469
+#: ../gio/gmount.c:472
 msgid "mount doesn’t implement “eject”"
 msgstr "A csatolás nem valósítja meg az „eject” függvényt"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of unmount or unmount_with_operation.
-#: ../gio/gmount.c:547
+#: ../gio/gmount.c:550
 msgid "mount doesn’t implement “unmount” or “unmount_with_operation”"
 msgstr ""
 "A csatolás nem valósítja meg az „unmount” vagy az „unmount_with_operation” "
@@ -3210,7 +3178,7 @@ msgstr ""
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of eject or eject_with_operation.
-#: ../gio/gmount.c:632
+#: ../gio/gmount.c:635
 msgid "mount doesn’t implement “eject” or “eject_with_operation”"
 msgstr ""
 "A csatolás nem valósítja meg az „eject” vagy az „eject_with_operation” "
@@ -3219,21 +3187,21 @@ msgstr ""
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement remount.
-#: ../gio/gmount.c:720
+#: ../gio/gmount.c:723
 msgid "mount doesn’t implement “remount”"
 msgstr "A csatolás nem valósítja meg a „remount” függvényt"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:802
+#: ../gio/gmount.c:805
 msgid "mount doesn’t implement content type guessing"
 msgstr "A csatolás nem valósítja meg a tartalomtípus meghatározását"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:889
+#: ../gio/gmount.c:892
 msgid "mount doesn’t implement synchronous content type guessing"
 msgstr "A csatolás nem valósítja meg a tartalomtípus szinkron meghatározását"
 
@@ -3283,25 +3251,25 @@ msgstr "A forrás adatfolyam már le van zárva"
 msgid "Error resolving “%s”: %s"
 msgstr "Hiba a(z) „%s” feloldásakor: %s"
 
-#: ../gio/gresource.c:606 ../gio/gresource.c:857 ../gio/gresource.c:874
-#: ../gio/gresource.c:998 ../gio/gresource.c:1070 ../gio/gresource.c:1143
-#: ../gio/gresource.c:1213 ../gio/gresourcefile.c:453
-#: ../gio/gresourcefile.c:576 ../gio/gresourcefile.c:713
+#: ../gio/gresource.c:621 ../gio/gresource.c:880 ../gio/gresource.c:919
+#: ../gio/gresource.c:1043 ../gio/gresource.c:1115 ../gio/gresource.c:1188
+#: ../gio/gresource.c:1258 ../gio/gresourcefile.c:476
+#: ../gio/gresourcefile.c:599 ../gio/gresourcefile.c:736
 #, c-format
 msgid "The resource at “%s” does not exist"
 msgstr "Az erőforrás nem létezik itt: „%s”"
 
-#: ../gio/gresource.c:771
+#: ../gio/gresource.c:786
 #, c-format
 msgid "The resource at “%s” failed to decompress"
 msgstr "Az erőforrás kicsomagolása meghiúsult itt: „%s”"
 
-#: ../gio/gresourcefile.c:709
+#: ../gio/gresourcefile.c:732
 #, c-format
 msgid "The resource at “%s” is not a directory"
 msgstr "Az erőforrás nem könyvtár itt: „%s”"
 
-#: ../gio/gresourcefile.c:917
+#: ../gio/gresourcefile.c:940
 msgid "Input stream doesn’t implement seek"
 msgstr "A bemeneti adatfolyam nem valósítja meg a pozicionálást"
 
@@ -3398,7 +3366,7 @@ msgstr ""
 msgid "  SECTION   An (optional) elf section name\n"
 msgstr "  SZAKASZ   Egy elhagyható elf szakasznév\n"
 
-#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:656
+#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:685
 msgid "  COMMAND   The (optional) command to explain\n"
 msgstr "  PARANCS   A megmagyarázandó (elhagyható) parancs\n"
 
@@ -3432,7 +3400,7 @@ msgid "  PATH      A resource path\n"
 msgstr "  ÚTVONAL   Egy erőforrás-útvonal\n"
 
 #: ../gio/gsettings-tool.c:51 ../gio/gsettings-tool.c:72
-#: ../gio/gsettings-tool.c:853
+#: ../gio/gsettings-tool.c:890
 #, c-format
 msgid "No such schema “%s”\n"
 msgstr "Nincs „%s” séma\n"
@@ -3467,38 +3435,38 @@ msgstr "Az útvonalnak osztásjellel (/) kell végződnie\n"
 msgid "Path must not contain two adjacent slashes (//)\n"
 msgstr "Az útvonal nem tartalmazhat két szomszédos osztásjelet (//)\n"
 
-#: ../gio/gsettings-tool.c:491
+#: ../gio/gsettings-tool.c:520
 #, c-format
 msgid "The provided value is outside of the valid range\n"
 msgstr "A megadott érték kívül esik az érvényes tartományon\n"
 
-#: ../gio/gsettings-tool.c:498
+#: ../gio/gsettings-tool.c:527
 #, c-format
 msgid "The key is not writable\n"
 msgstr "A kulcs nem írható\n"
 
-#: ../gio/gsettings-tool.c:534
+#: ../gio/gsettings-tool.c:563
 msgid "List the installed (non-relocatable) schemas"
 msgstr "A telepített (át nem helyezhető) sémák felsorolása"
 
-#: ../gio/gsettings-tool.c:540
+#: ../gio/gsettings-tool.c:569
 msgid "List the installed relocatable schemas"
 msgstr "A telepített áthelyezhető sémák felsorolása"
 
-#: ../gio/gsettings-tool.c:546
+#: ../gio/gsettings-tool.c:575
 msgid "List the keys in SCHEMA"
 msgstr "A SÉMA kulcsainak felsorolása"
 
-#: ../gio/gsettings-tool.c:547 ../gio/gsettings-tool.c:553
-#: ../gio/gsettings-tool.c:596
+#: ../gio/gsettings-tool.c:576 ../gio/gsettings-tool.c:582
+#: ../gio/gsettings-tool.c:625
 msgid "SCHEMA[:PATH]"
 msgstr "SÉMA[:ÚTVONAL]"
 
-#: ../gio/gsettings-tool.c:552
+#: ../gio/gsettings-tool.c:581
 msgid "List the children of SCHEMA"
 msgstr "A SÉMA gyermekeinek felsorolása"
 
-#: ../gio/gsettings-tool.c:558
+#: ../gio/gsettings-tool.c:587
 msgid ""
 "List keys and values, recursively\n"
 "If no SCHEMA is given, list all keys\n"
@@ -3506,49 +3474,49 @@ msgstr ""
 "Kulcsok és értékek rekurzív felsorolása\n"
 "Ha nincs megadva SÉMA, az összes kulcs felsorolása\n"
 
-#: ../gio/gsettings-tool.c:560
+#: ../gio/gsettings-tool.c:589
 msgid "[SCHEMA[:PATH]]"
 msgstr "[SÉMA[:ÚTVONAL]]"
 
-#: ../gio/gsettings-tool.c:565
+#: ../gio/gsettings-tool.c:594
 msgid "Get the value of KEY"
 msgstr "A KULCS értékének lekérése"
 
-#: ../gio/gsettings-tool.c:566 ../gio/gsettings-tool.c:572
-#: ../gio/gsettings-tool.c:578 ../gio/gsettings-tool.c:590
-#: ../gio/gsettings-tool.c:602
+#: ../gio/gsettings-tool.c:595 ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:607 ../gio/gsettings-tool.c:619
+#: ../gio/gsettings-tool.c:631
 msgid "SCHEMA[:PATH] KEY"
 msgstr "SÉMA[:ÚTVONAL] KULCS"
 
-#: ../gio/gsettings-tool.c:571
+#: ../gio/gsettings-tool.c:600
 msgid "Query the range of valid values for KEY"
 msgstr "A KULCS érvényes értékei tartományának lekérése"
 
-#: ../gio/gsettings-tool.c:577
+#: ../gio/gsettings-tool.c:606
 msgid "Query the description for KEY"
 msgstr "A KULCS leírásának lekérése"
 
-#: ../gio/gsettings-tool.c:583
+#: ../gio/gsettings-tool.c:612
 msgid "Set the value of KEY to VALUE"
 msgstr "A KULCS értékének beállítása az ÉRTÉKRE"
 
-#: ../gio/gsettings-tool.c:584
+#: ../gio/gsettings-tool.c:613
 msgid "SCHEMA[:PATH] KEY VALUE"
 msgstr "SÉMA[:ÚTVONAL] KULCS ÉRTÉK"
 
-#: ../gio/gsettings-tool.c:589
+#: ../gio/gsettings-tool.c:618
 msgid "Reset KEY to its default value"
 msgstr "A KULCS visszaállítása az alapértékére"
 
-#: ../gio/gsettings-tool.c:595
+#: ../gio/gsettings-tool.c:624
 msgid "Reset all keys in SCHEMA to their defaults"
 msgstr "A SÉMA minden kulcsának visszaállítása az alapértékekre"
 
-#: ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:630
 msgid "Check if KEY is writable"
 msgstr "A KULCS írhatóságának ellenőrzése"
 
-#: ../gio/gsettings-tool.c:607
+#: ../gio/gsettings-tool.c:636
 msgid ""
 "Monitor KEY for changes.\n"
 "If no KEY is specified, monitor all keys in SCHEMA.\n"
@@ -3558,11 +3526,11 @@ msgstr ""
 "Ha nincs megadva KULCS, akkor a SÉMA összes kulcsának figyelése.\n"
 "A figyelés befejezéséhez nyomja meg a ^C kombinációt.\n"
 
-#: ../gio/gsettings-tool.c:610
+#: ../gio/gsettings-tool.c:639
 msgid "SCHEMA[:PATH] [KEY]"
 msgstr "SÉMA[:ÚTVONAL] [KULCS]"
 
-#: ../gio/gsettings-tool.c:622
+#: ../gio/gsettings-tool.c:651
 msgid ""
 "Usage:\n"
 "  gsettings --version\n"
@@ -3611,7 +3579,7 @@ msgstr ""
 "Részletes segítségért adja ki a „gsettings help PARANCS” parancsot.\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:646
+#: ../gio/gsettings-tool.c:675
 #, c-format
 msgid ""
 "Usage:\n"
@@ -3626,11 +3594,11 @@ msgstr ""
 "%s\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:652
+#: ../gio/gsettings-tool.c:681
 msgid "  SCHEMADIR A directory to search for additional schemas\n"
 msgstr "  SÉMAKVT    További sémák keresése ebben a könyvtárban\n"
 
-#: ../gio/gsettings-tool.c:660
+#: ../gio/gsettings-tool.c:689
 msgid ""
 "  SCHEMA    The name of the schema\n"
 "  PATH      The path, for relocatable schemas\n"
@@ -3638,178 +3606,211 @@ msgstr ""
 "  SÉMA      A séma neve\n"
 "  ÚTVONAL   Az áthelyezhető sémák útvonala\n"
 
-#: ../gio/gsettings-tool.c:665
+#: ../gio/gsettings-tool.c:694
 msgid "  KEY       The (optional) key within the schema\n"
 msgstr "  KULCS     A sémán belüli (elhagyható) kulcs\n"
 
-#: ../gio/gsettings-tool.c:669
+#: ../gio/gsettings-tool.c:698
 msgid "  KEY       The key within the schema\n"
 msgstr "  KULCS     A sémán belüli kulcs\n"
 
-#: ../gio/gsettings-tool.c:673
+#: ../gio/gsettings-tool.c:702
 msgid "  VALUE     The value to set\n"
 msgstr "  ÉRTÉK     A beállítandó érték\n"
 
-#: ../gio/gsettings-tool.c:728
+#: ../gio/gsettings-tool.c:757
 #, c-format
 msgid "Could not load schemas from %s: %s\n"
 msgstr "Nem lehet sémákat betölteni ebből: %s: %s\n"
 
-#: ../gio/gsettings-tool.c:740
+#: ../gio/gsettings-tool.c:769
 #, c-format
 msgid "No schemas installed\n"
 msgstr "Nincsenek telepítve sémák\n"
 
-#: ../gio/gsettings-tool.c:811
+#: ../gio/gsettings-tool.c:848
 #, c-format
 msgid "Empty schema name given\n"
 msgstr "Üres sémanevet adott meg\n"
 
-#: ../gio/gsettings-tool.c:866
+#: ../gio/gsettings-tool.c:903
 #, c-format
 msgid "No such key “%s”\n"
 msgstr "Nincs „%s” kulcs\n"
 
-#: ../gio/gsocket.c:379
+#: ../gio/gsocket.c:384
 msgid "Invalid socket, not initialized"
 msgstr "Érvénytelen foglalat, nincs előkészítve"
 
-#: ../gio/gsocket.c:386
+#: ../gio/gsocket.c:391
 #, c-format
 msgid "Invalid socket, initialization failed due to: %s"
 msgstr "Érvénytelen foglalat, az előkészítés meghiúsulásának oka: %s"
 
-#: ../gio/gsocket.c:394
+#: ../gio/gsocket.c:399
 msgid "Socket is already closed"
 msgstr "A foglalat már le van zárva"
 
-#: ../gio/gsocket.c:409 ../gio/gsocket.c:2765 ../gio/gsocket.c:3950
-#: ../gio/gsocket.c:4008
+#: ../gio/gsocket.c:414 ../gio/gsocket.c:3010 ../gio/gsocket.c:4220
+#: ../gio/gsocket.c:4278
 msgid "Socket I/O timed out"
 msgstr "A foglalat I/O túllépte az időkorlátot"
 
-#: ../gio/gsocket.c:541
+#: ../gio/gsocket.c:549
 #, c-format
 msgid "creating GSocket from fd: %s"
 msgstr "GSocket létrehozása fájlleíróból: %s"
 
-#: ../gio/gsocket.c:570 ../gio/gsocket.c:624 ../gio/gsocket.c:631
+#: ../gio/gsocket.c:578 ../gio/gsocket.c:632 ../gio/gsocket.c:639
 #, c-format
 msgid "Unable to create socket: %s"
 msgstr "Nem sikerült létrehozni foglalatot: %s"
 
-#: ../gio/gsocket.c:624
+#: ../gio/gsocket.c:632
 msgid "Unknown family was specified"
 msgstr "Ismeretlen családot adtak meg"
 
-#: ../gio/gsocket.c:631
+#: ../gio/gsocket.c:639
 msgid "Unknown protocol was specified"
 msgstr "Ismeretlen protokollt adtak meg"
 
-#: ../gio/gsocket.c:1122
+#: ../gio/gsocket.c:1130
 #, c-format
 msgid "Cannot use datagram operations on a non-datagram socket."
 msgstr "A datagram műveletek nem használhatóak nem-datagram foglalaton."
 
-#: ../gio/gsocket.c:1139
+#: ../gio/gsocket.c:1147
 #, c-format
 msgid "Cannot use datagram operations on a socket with a timeout set."
 msgstr ""
 "A datagram műveletek nem használhatóak olyan foglalaton, amelyre időtúllépés "
 "van beállítva."
 
-#: ../gio/gsocket.c:1943
+#: ../gio/gsocket.c:1954
 #, c-format
 msgid "could not get local address: %s"
 msgstr "nem kérhető le a helyi cím: %s"
 
-#: ../gio/gsocket.c:1986
+#: ../gio/gsocket.c:2000
 #, c-format
 msgid "could not get remote address: %s"
 msgstr "nem kérhető le a távoli cím: %s"
 
-#: ../gio/gsocket.c:2052
+#: ../gio/gsocket.c:2066
 #, c-format
 msgid "could not listen: %s"
 msgstr "nem lehet figyelni: %s"
 
-#: ../gio/gsocket.c:2151
+#: ../gio/gsocket.c:2168
 #, c-format
 msgid "Error binding to address: %s"
 msgstr "Hiba a címhez csatlakozáskor: %s"
 
-#: ../gio/gsocket.c:2266 ../gio/gsocket.c:2303
+#: ../gio/gsocket.c:2226 ../gio/gsocket.c:2263 ../gio/gsocket.c:2373
+#: ../gio/gsocket.c:2391 ../gio/gsocket.c:2461 ../gio/gsocket.c:2519
+#: ../gio/gsocket.c:2537
 #, c-format
 msgid "Error joining multicast group: %s"
 msgstr "Hiba a multicast csoporthoz csatlakozáskor: %s"
 
-#: ../gio/gsocket.c:2267 ../gio/gsocket.c:2304
+#: ../gio/gsocket.c:2227 ../gio/gsocket.c:2264 ../gio/gsocket.c:2374
+#: ../gio/gsocket.c:2392 ../gio/gsocket.c:2462 ../gio/gsocket.c:2520
+#: ../gio/gsocket.c:2538
 #, c-format
 msgid "Error leaving multicast group: %s"
 msgstr "Hiba a multicast csoport elhagyásakor: %s"
 
-#: ../gio/gsocket.c:2268
+#: ../gio/gsocket.c:2228
 msgid "No support for source-specific multicast"
 msgstr "A forrásspecifikus multicast nem támogatott"
 
-#: ../gio/gsocket.c:2488
+#: ../gio/gsocket.c:2375
+#| msgid "Unsupported socket address"
+msgid "Unsupported socket family"
+msgstr "Nem támogatott foglalatcsalád"
+
+#: ../gio/gsocket.c:2393
+msgid "source-specific not an IPv4 address"
+msgstr "A forrásspecifikus nem egy IPv4-cím"
+
+#: ../gio/gsocket.c:2411 ../gio/gsocket.c:2440 ../gio/gsocket.c:2487
+#, c-format
+msgid "Interface not found: %s"
+msgstr "Interfész nem található: %s"
+
+#: ../gio/gsocket.c:2427
+#, c-format
+msgid "Interface name too long"
+msgstr "Az interfésznév túl hosszú"
+
+#: ../gio/gsocket.c:2463
+#| msgid "No support for source-specific multicast"
+msgid "No support for IPv4 source-specific multicast"
+msgstr "Az IPv4 forrásspecifikus multicast nem támogatott"
+
+#: ../gio/gsocket.c:2521
+#| msgid "No support for source-specific multicast"
+msgid "No support for IPv6 source-specific multicast"
+msgstr "Az IPv6 forrásspecifikus multicast nem támogatott"
+
+#: ../gio/gsocket.c:2730
 #, c-format
 msgid "Error accepting connection: %s"
 msgstr "Hiba a kapcsolat elfogadásakor: %s"
 
-#: ../gio/gsocket.c:2609
+#: ../gio/gsocket.c:2854
 msgid "Connection in progress"
 msgstr "Csatlakozás folyamatban"
 
-#: ../gio/gsocket.c:2658
+#: ../gio/gsocket.c:2903
 msgid "Unable to get pending error: "
 msgstr "Nem lehet lekérni a függőben lévő hibát:"
 
-#: ../gio/gsocket.c:2828
+#: ../gio/gsocket.c:3073
 #, c-format
 msgid "Error receiving data: %s"
 msgstr "Hiba az adatok fogadásakor: %s"
 
-#: ../gio/gsocket.c:3023
+#: ../gio/gsocket.c:3268
 #, c-format
 msgid "Error sending data: %s"
 msgstr "Hiba az adatok küldésekor: %s"
 
-#: ../gio/gsocket.c:3210
+#: ../gio/gsocket.c:3455
 #, c-format
 msgid "Unable to shutdown socket: %s"
 msgstr "Nem sikerült leállítani a foglalatot: %s"
 
-#: ../gio/gsocket.c:3291
+#: ../gio/gsocket.c:3536
 #, c-format
 msgid "Error closing socket: %s"
 msgstr "Hiba a foglalat lezárásakor: %s"
 
-#: ../gio/gsocket.c:3943
+#: ../gio/gsocket.c:4213
 #, c-format
 msgid "Waiting for socket condition: %s"
 msgstr "Várakozás a foglalat állapotára: %s"
 
-#: ../gio/gsocket.c:4417 ../gio/gsocket.c:4497 ../gio/gsocket.c:4675
+#: ../gio/gsocket.c:4687 ../gio/gsocket.c:4767 ../gio/gsocket.c:4945
 #, c-format
 msgid "Error sending message: %s"
 msgstr "Hiba az üzenet küldésekor: %s"
 
-#: ../gio/gsocket.c:4441
+#: ../gio/gsocket.c:4711
 msgid "GSocketControlMessage not supported on Windows"
 msgstr "A GSocketControlMessage nem támogatott Windowson"
 
-#: ../gio/gsocket.c:4894 ../gio/gsocket.c:4967 ../gio/gsocket.c:5193
+#: ../gio/gsocket.c:5164 ../gio/gsocket.c:5237 ../gio/gsocket.c:5463
 #, c-format
 msgid "Error receiving message: %s"
 msgstr "Hiba az üzenet fájl eltávolítása fogadásakor: %s"
 
-#: ../gio/gsocket.c:5465
+#: ../gio/gsocket.c:5735
 #, c-format
 msgid "Unable to read socket credentials: %s"
 msgstr "Nem sikerült olvasni a foglalat hitelesítési adatait: %s"
 
-#: ../gio/gsocket.c:5474
+#: ../gio/gsocket.c:5744
 msgid "g_socket_get_credentials not implemented for this OS"
 msgstr "a g_socket_get_credentials nincs megvalósítva erre az OS-re"
 
@@ -3949,18 +3950,18 @@ msgstr "Nem találhatók érvényes címek"
 msgid "Error reverse-resolving “%s”: %s"
 msgstr "Hiba a(z) „%s” fájl fordított feloldásakor: %s"
 
-#: ../gio/gthreadedresolver.c:550 ../gio/gthreadedresolver.c:630
-#: ../gio/gthreadedresolver.c:728 ../gio/gthreadedresolver.c:778
+#: ../gio/gthreadedresolver.c:549 ../gio/gthreadedresolver.c:628
+#: ../gio/gthreadedresolver.c:726 ../gio/gthreadedresolver.c:776
 #, c-format
 msgid "No DNS record of the requested type for “%s”"
 msgstr "Nincs kért típusú DNS-rekord ehhez: „%s”"
 
-#: ../gio/gthreadedresolver.c:555 ../gio/gthreadedresolver.c:733
+#: ../gio/gthreadedresolver.c:554 ../gio/gthreadedresolver.c:731
 #, c-format
 msgid "Temporarily unable to resolve “%s”"
 msgstr "Ideiglenesen nem oldható fel: „%s”"
 
-#: ../gio/gthreadedresolver.c:560 ../gio/gthreadedresolver.c:738
+#: ../gio/gthreadedresolver.c:559 ../gio/gthreadedresolver.c:736
 #, c-format
 msgid "Error resolving “%s”"
 msgstr "Hiba a(z) „%s” feloldásakor"
@@ -3996,9 +3997,6 @@ msgstr ""
 #. Translators: This is not the 'This is the last chance' string. It is
 #. * displayed when more than one attempt is allowed.
 #: ../gio/gtlspassword.c:115
-#| msgid ""
-#| "Several password entered have been incorrect, and your access will be "
-#| "locked out after further failures."
 msgid ""
 "Several passwords entered have been incorrect, and your access will be "
 "locked out after further failures."
@@ -4075,7 +4073,7 @@ msgstr "Hiba a fájlleíróból olvasáskor: %s"
 msgid "Error closing file descriptor: %s"
 msgstr "Hiba a fájlleíró lezárásakor: %s"
 
-#: ../gio/gunixmounts.c:2430 ../gio/gunixmounts.c:2483
+#: ../gio/gunixmounts.c:2539 ../gio/gunixmounts.c:2592
 msgid "Filesystem root"
 msgstr "Fájlrendszer gyökere"
 
@@ -4181,93 +4179,103 @@ msgstr "Váratlan címke: „%s” a várt „%s” helyett"
 msgid "Unexpected tag “%s” inside “%s”"
 msgstr "Váratlan címke: „%s” a következőn belül: „%s”"
 
-#: ../glib/gbookmarkfile.c:1756
+#: ../glib/gbookmarkfile.c:1757
 msgid "No valid bookmark file found in data dirs"
 msgstr "Az adatkönyvtárakban nem található érvényes könyvjelzőfájl"
 
-#: ../glib/gbookmarkfile.c:1957
+#: ../glib/gbookmarkfile.c:1958
 #, c-format
 msgid "A bookmark for URI “%s” already exists"
 msgstr "Már létezik könyvjelző a következő URI címhez: „%s”"
 
-#: ../glib/gbookmarkfile.c:2003 ../glib/gbookmarkfile.c:2161
-#: ../glib/gbookmarkfile.c:2246 ../glib/gbookmarkfile.c:2326
-#: ../glib/gbookmarkfile.c:2411 ../glib/gbookmarkfile.c:2494
-#: ../glib/gbookmarkfile.c:2572 ../glib/gbookmarkfile.c:2651
-#: ../glib/gbookmarkfile.c:2693 ../glib/gbookmarkfile.c:2790
-#: ../glib/gbookmarkfile.c:2910 ../glib/gbookmarkfile.c:3100
-#: ../glib/gbookmarkfile.c:3176 ../glib/gbookmarkfile.c:3344
-#: ../glib/gbookmarkfile.c:3433 ../glib/gbookmarkfile.c:3522
-#: ../glib/gbookmarkfile.c:3638
+#: ../glib/gbookmarkfile.c:2004 ../glib/gbookmarkfile.c:2162
+#: ../glib/gbookmarkfile.c:2247 ../glib/gbookmarkfile.c:2327
+#: ../glib/gbookmarkfile.c:2412 ../glib/gbookmarkfile.c:2495
+#: ../glib/gbookmarkfile.c:2573 ../glib/gbookmarkfile.c:2652
+#: ../glib/gbookmarkfile.c:2694 ../glib/gbookmarkfile.c:2791
+#: ../glib/gbookmarkfile.c:2912 ../glib/gbookmarkfile.c:3102
+#: ../glib/gbookmarkfile.c:3178 ../glib/gbookmarkfile.c:3346
+#: ../glib/gbookmarkfile.c:3435 ../glib/gbookmarkfile.c:3524
+#: ../glib/gbookmarkfile.c:3640
 #, c-format
 msgid "No bookmark found for URI “%s”"
 msgstr "Nem található könyvjelző a következő URI címhez: „%s”"
 
-#: ../glib/gbookmarkfile.c:2335
+#: ../glib/gbookmarkfile.c:2336
 #, c-format
 msgid "No MIME type defined in the bookmark for URI “%s”"
 msgstr "Nincs MIME típus meghatározva a következő URI könyvjelzőjéhez: „%s”"
 
-#: ../glib/gbookmarkfile.c:2420
+#: ../glib/gbookmarkfile.c:2421
 #, c-format
 msgid "No private flag has been defined in bookmark for URI “%s”"
 msgstr "Nincs magán jelző meghatározva a következő URI könyvjelzőjéhez: „%s”"
 
-#: ../glib/gbookmarkfile.c:2799
+#: ../glib/gbookmarkfile.c:2800
 #, c-format
 msgid "No groups set in bookmark for URI “%s”"
 msgstr "Nincsenek csoportok beállítva a következő URI könyvjelzőjéhez: „%s”"
 
 # FIXME: hol jön ez elő?
-#: ../glib/gbookmarkfile.c:3197 ../glib/gbookmarkfile.c:3354
+#: ../glib/gbookmarkfile.c:3199 ../glib/gbookmarkfile.c:3356
 #, c-format
 msgid "No application with name “%s” registered a bookmark for “%s”"
 msgstr ""
 "Nincs „%s” nevű alkalmazás regisztrálva a következő könyvjelzőjéhez: „%s”"
 
-#: ../glib/gbookmarkfile.c:3377
+#: ../glib/gbookmarkfile.c:3379
 #, c-format
 msgid "Failed to expand exec line “%s” with URI “%s”"
 msgstr ""
 "Nem sikerült kiterjeszteni a(z) „%s” végrehajtási sort a(z) „%s” URL címmel"
 
-#: ../glib/gconvert.c:477 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
+#: ../glib/gconvert.c:476 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
 #: ../glib/gutf8.c:1211 ../glib/gutf8.c:1315
 msgid "Partial character sequence at end of input"
 msgstr "Részleges karaktersorozat a bemenet végén"
 
-#: ../glib/gconvert.c:742
+#: ../glib/gconvert.c:741
 #, c-format
 msgid "Cannot convert fallback “%s” to codeset “%s”"
 msgstr "Nem alakítható át a tartalék „%s” a(z) „%s” kódkészletre"
 
-#: ../glib/gconvert.c:1513
+#: ../glib/gconvert.c:912
+#| msgid "Invalid byte sequence in conversion input"
+msgid "Embedded NUL byte in conversion input"
+msgstr "Beágyazott NUL bájt az átalakítás bemenetében"
+
+#: ../glib/gconvert.c:933
+#| msgid "Invalid byte sequence in conversion input"
+msgid "Embedded NUL byte in conversion output"
+msgstr "Beágyazott NUL bájt az átalakítás kimenetében"
+
+#: ../glib/gconvert.c:1618
 #, c-format
 msgid "The URI “%s” is not an absolute URI using the “file” scheme"
 msgstr "A(z) „%s” URI nem abszolút, a „file” sémát használó URI"
 
-#: ../glib/gconvert.c:1523
+#: ../glib/gconvert.c:1628
 #, c-format
 msgid "The local file URI “%s” may not include a “#”"
 msgstr "A(z) „%s” helyi fájl URI nem tartalmazhat „#” karaktert"
 
-#: ../glib/gconvert.c:1540
+#: ../glib/gconvert.c:1645
 #, c-format
 msgid "The URI “%s” is invalid"
 msgstr "A(z) „%s” URI érvénytelen"
 
-#: ../glib/gconvert.c:1552
+#: ../glib/gconvert.c:1657
 #, c-format
 msgid "The hostname of the URI “%s” is invalid"
 msgstr "A(z) „%s” gépneve érvénytelen"
 
-#: ../glib/gconvert.c:1568
+#: ../glib/gconvert.c:1673
 #, c-format
 msgid "The URI “%s” contains invalidly escaped characters"
 msgstr ""
 "A(z) „%s” URI érvénytelen, escape sorozatként megadott karaktereket tartalmaz"
 
-#: ../glib/gconvert.c:1640
+#: ../glib/gconvert.c:1745
 #, c-format
 msgid "The pathname “%s” is not an absolute path"
 msgstr "A(z) „%s” elérési út neve nem abszolút útvonal"
@@ -4503,118 +4511,118 @@ msgstr "DU"
 msgid "Error opening directory “%s”: %s"
 msgstr "Hiba a(z) „%s” könyvtár megnyitásakor: %s"
 
-#: ../glib/gfileutils.c:706 ../glib/gfileutils.c:798
+#: ../glib/gfileutils.c:716 ../glib/gfileutils.c:808
 #, c-format
 msgid "Could not allocate %lu byte to read file “%s”"
 msgid_plural "Could not allocate %lu bytes to read file “%s”"
 msgstr[0] "Nem sikerült %lu bájtot lefoglalni a(z) „%s” fájl olvasásához"
 msgstr[1] "Nem sikerült %lu bájtot lefoglalni a(z) „%s” fájl olvasásához"
 
-#: ../glib/gfileutils.c:723
+#: ../glib/gfileutils.c:733
 #, c-format
 msgid "Error reading file “%s”: %s"
 msgstr "Hiba a(z) „%s” fájl olvasásakor: %s"
 
-#: ../glib/gfileutils.c:759
+#: ../glib/gfileutils.c:769
 #, c-format
 msgid "File “%s” is too large"
 msgstr "A fájl („%s”) túl nagy"
 
-#: ../glib/gfileutils.c:823
+#: ../glib/gfileutils.c:833
 #, c-format
 msgid "Failed to read from file “%s”: %s"
 msgstr "Nem sikerült olvasni a(z) „%s” fájlból: %s"
 
-#: ../glib/gfileutils.c:871 ../glib/gfileutils.c:943
+#: ../glib/gfileutils.c:881 ../glib/gfileutils.c:953
 #, c-format
 msgid "Failed to open file “%s”: %s"
 msgstr "Nem sikerült megnyitni a(z) „%s” fájlt: %s"
 
-#: ../glib/gfileutils.c:883
+#: ../glib/gfileutils.c:893
 #, c-format
 msgid "Failed to get attributes of file “%s”: fstat() failed: %s"
 msgstr ""
 "Nem sikerült lekérni a(z) „%s” fájl attribútumait. Az fstat() sikertelen: %s"
 
-#: ../glib/gfileutils.c:913
+#: ../glib/gfileutils.c:923
 #, c-format
 msgid "Failed to open file “%s”: fdopen() failed: %s"
 msgstr "Nem sikerült megnyitni a(z) „%s” fájlt. Az fdopen() sikertelen: %s"
 
-#: ../glib/gfileutils.c:1012
+#: ../glib/gfileutils.c:1022
 #, c-format
 msgid "Failed to rename file “%s” to “%s”: g_rename() failed: %s"
 msgstr ""
 "Nem sikerült átnevezni a(z) „%s” fájlt erre: „%s”. A g_rename() sikertelen: "
 "%s"
 
-#: ../glib/gfileutils.c:1047 ../glib/gfileutils.c:1554
+#: ../glib/gfileutils.c:1057 ../glib/gfileutils.c:1564
 #, c-format
 msgid "Failed to create file “%s”: %s"
 msgstr "Nem sikerült létrehozni a(z) „%s” fájlt: %s"
 
-#: ../glib/gfileutils.c:1074
+#: ../glib/gfileutils.c:1084
 #, c-format
 msgid "Failed to write file “%s”: write() failed: %s"
 msgstr "Nem sikerült írni a(z) „%s” fájlt: a write() sikertelen: %s"
 
-#: ../glib/gfileutils.c:1117
+#: ../glib/gfileutils.c:1127
 #, c-format
 msgid "Failed to write file “%s”: fsync() failed: %s"
 msgstr "Nem sikerült írni a(z) „%s” fájlt: az fsync() sikertelen: %s"
 
-#: ../glib/gfileutils.c:1241
+#: ../glib/gfileutils.c:1251
 #, c-format
 msgid "Existing file “%s” could not be removed: g_unlink() failed: %s"
 msgstr "A létező „%s” fájl nem távolítható el: a g_unlink() sikertelen: %s"
 
-#: ../glib/gfileutils.c:1520
+#: ../glib/gfileutils.c:1530
 #, c-format
 msgid "Template “%s” invalid, should not contain a “%s”"
 msgstr "A(z) „%s” sablon érvénytelen, „%s” nem lehet benne"
 
-#: ../glib/gfileutils.c:1533
+#: ../glib/gfileutils.c:1543
 #, c-format
 msgid "Template “%s” doesn’t contain XXXXXX"
 msgstr "A(z) „%s” sablon nem tartalmaz XXXXXX karaktersorozatot"
 
-#: ../glib/gfileutils.c:2058
+#: ../glib/gfileutils.c:2105
 #, c-format
 msgid "Failed to read the symbolic link “%s”: %s"
 msgstr "Nem sikerült kiolvasni a(z) „%s” szimbolikus linket: %s"
 
-#: ../glib/giochannel.c:1388
+#: ../glib/giochannel.c:1389
 #, c-format
 msgid "Could not open converter from “%s” to “%s”: %s"
 msgstr "Az átalakító a(z) „%s” elemről „%s” elemre nem nyitható meg: %s"
 
-#: ../glib/giochannel.c:1733
+#: ../glib/giochannel.c:1734
 msgid "Can’t do a raw read in g_io_channel_read_line_string"
 msgstr ""
 "Nem lehet nyers (raw) olvasást végezni a g_io_channel_read_line_string-ben"
 
-#: ../glib/giochannel.c:1780 ../glib/giochannel.c:2038
-#: ../glib/giochannel.c:2125
+#: ../glib/giochannel.c:1781 ../glib/giochannel.c:2039
+#: ../glib/giochannel.c:2126
 msgid "Leftover unconverted data in read buffer"
 msgstr "Át nem alakított adatok maradtak az olvasási pufferben"
 
-#: ../glib/giochannel.c:1861 ../glib/giochannel.c:1938
+#: ../glib/giochannel.c:1862 ../glib/giochannel.c:1939
 msgid "Channel terminates in a partial character"
 msgstr "A csatorna töredék karakterrel ér véget"
 
-#: ../glib/giochannel.c:1924
+#: ../glib/giochannel.c:1925
 msgid "Can’t do a raw read in g_io_channel_read_to_end"
 msgstr "Nem lehet nyers (raw) olvasást végezni a g_io_channel_read_to_end-ben"
 
-#: ../glib/gkeyfile.c:736
+#: ../glib/gkeyfile.c:788
 msgid "Valid key file could not be found in search dirs"
 msgstr "A keresési könyvtárakban nem található érvényes kulcsfájl"
 
-#: ../glib/gkeyfile.c:773
+#: ../glib/gkeyfile.c:825
 msgid "Not a regular file"
 msgstr "Nem szabályos fájl"
 
-#: ../glib/gkeyfile.c:1218
+#: ../glib/gkeyfile.c:1270
 #, c-format
 msgid ""
 "Key file contains line “%s” which is not a key-value pair, group, or comment"
@@ -4622,52 +4630,52 @@ msgstr ""
 "A kulcsfájl tartalmazza a(z) „%s” sort, amelyik nem egy kulcs-érték pár, "
 "csoport, vagy megjegyzés"
 
-#: ../glib/gkeyfile.c:1275
+#: ../glib/gkeyfile.c:1327
 #, c-format
 msgid "Invalid group name: %s"
 msgstr "Érvénytelen csoportnév: %s"
 
-#: ../glib/gkeyfile.c:1297
+#: ../glib/gkeyfile.c:1349
 msgid "Key file does not start with a group"
 msgstr "A kulcsfájl nem csoporttal kezdődik"
 
-#: ../glib/gkeyfile.c:1323
+#: ../glib/gkeyfile.c:1375
 #, c-format
 msgid "Invalid key name: %s"
 msgstr "Érvénytelen kulcsnév: %s"
 
-#: ../glib/gkeyfile.c:1350
+#: ../glib/gkeyfile.c:1402
 #, c-format
 msgid "Key file contains unsupported encoding “%s”"
 msgstr "A kulcsfájl a nem támogatott „%s” kódolást tartalmazza"
 
-#: ../glib/gkeyfile.c:1593 ../glib/gkeyfile.c:1766 ../glib/gkeyfile.c:3146
-#: ../glib/gkeyfile.c:3209 ../glib/gkeyfile.c:3339 ../glib/gkeyfile.c:3469
-#: ../glib/gkeyfile.c:3613 ../glib/gkeyfile.c:3842 ../glib/gkeyfile.c:3909
+#: ../glib/gkeyfile.c:1645 ../glib/gkeyfile.c:1818 ../glib/gkeyfile.c:3206
+#: ../glib/gkeyfile.c:3269 ../glib/gkeyfile.c:3399 ../glib/gkeyfile.c:3529
+#: ../glib/gkeyfile.c:3673 ../glib/gkeyfile.c:3902 ../glib/gkeyfile.c:3969
 #, c-format
 msgid "Key file does not have group “%s”"
 msgstr "A kulcsfájlból hiányzik a(z) „%s” csoport"
 
-#: ../glib/gkeyfile.c:1721
+#: ../glib/gkeyfile.c:1773
 #, c-format
 msgid "Key file does not have key “%s” in group “%s”"
 msgstr "A kulcsfájl nem tartalmazza a(z) „%s” kulcsot a(z) „%s” csoportban."
 
-#: ../glib/gkeyfile.c:1883 ../glib/gkeyfile.c:1999
+#: ../glib/gkeyfile.c:1935 ../glib/gkeyfile.c:2051
 #, c-format
 msgid "Key file contains key “%s” with value “%s” which is not UTF-8"
 msgstr ""
 "A kulcsfájl tartalmazza a(z) „%s” kulcsot „%s” értékkel, amelyik azonban nem "
 "UTF-8"
 
-#: ../glib/gkeyfile.c:1903 ../glib/gkeyfile.c:2019 ../glib/gkeyfile.c:2388
+#: ../glib/gkeyfile.c:1955 ../glib/gkeyfile.c:2071 ../glib/gkeyfile.c:2448
 #, c-format
 msgid ""
 "Key file contains key “%s” which has a value that cannot be interpreted."
 msgstr ""
 "A kulcsfájl tartalmazza a(z) „%s” kulcsot, amelynek értéke nem értelmezhető."
 
-#: ../glib/gkeyfile.c:2606 ../glib/gkeyfile.c:2975
+#: ../glib/gkeyfile.c:2666 ../glib/gkeyfile.c:3035
 #, c-format
 msgid ""
 "Key file contains key “%s” in group “%s” which has a value that cannot be "
@@ -4676,38 +4684,38 @@ msgstr ""
 "A kulcsfájl tartalmazza a(z) „%s” kulcsot a(z) „%s” csoportban, amelynek "
 "értéke nem értelmezhető."
 
-#: ../glib/gkeyfile.c:2684 ../glib/gkeyfile.c:2761
+#: ../glib/gkeyfile.c:2744 ../glib/gkeyfile.c:2821
 #, c-format
 msgid "Key “%s” in group “%s” has value “%s” where %s was expected"
 msgstr ""
 "A(z) „%s” kulcs a(z) „%s” csoportban „%s” értékkel rendelkezik a várt %s "
 "helyett"
 
-#: ../glib/gkeyfile.c:4149
+#: ../glib/gkeyfile.c:4209
 msgid "Key file contains escape character at end of line"
 msgstr "A kulcsfájl escape sorozattal megadott karaktert tartalmaz a sor végén"
 
-#: ../glib/gkeyfile.c:4171
+#: ../glib/gkeyfile.c:4231
 #, c-format
 msgid "Key file contains invalid escape sequence “%s”"
 msgstr "A kulcsfájl érvénytelen escape sorozatot tartalmaz („%s”)"
 
-#: ../glib/gkeyfile.c:4315
+#: ../glib/gkeyfile.c:4375
 #, c-format
 msgid "Value “%s” cannot be interpreted as a number."
 msgstr "A(z) „%s” érték nem értelmezhető számként."
 
-#: ../glib/gkeyfile.c:4329
+#: ../glib/gkeyfile.c:4389
 #, c-format
 msgid "Integer value “%s” out of range"
 msgstr "A(z) „%s” egész érték a tartományon kívülre esik"
 
-#: ../glib/gkeyfile.c:4362
+#: ../glib/gkeyfile.c:4422
 #, c-format
 msgid "Value “%s” cannot be interpreted as a float number."
 msgstr "A(z) „%s” érték nem értelmezhető lebegőpontos számként."
 
-#: ../glib/gkeyfile.c:4401
+#: ../glib/gkeyfile.c:4461
 #, c-format
 msgid "Value “%s” cannot be interpreted as a boolean."
 msgstr "A(z) „%s” érték nem értelmezhető logikai értékként."
@@ -5397,79 +5405,79 @@ msgid "Text was empty (or contained only whitespace)"
 msgstr ""
 "A szöveg üres volt (vagy legfeljebb üres hely karaktereket tartalmazott)"
 
-#: ../glib/gspawn.c:250
+#: ../glib/gspawn.c:253
 #, c-format
 msgid "Failed to read data from child process (%s)"
 msgstr "Nem sikerült adatokat olvasni a gyermekfolyamatból (%s)"
 
-#: ../glib/gspawn.c:394
+#: ../glib/gspawn.c:401
 #, c-format
 msgid "Unexpected error in select() reading data from a child process (%s)"
 msgstr ""
 "Váratlan hiba, miközben a select() adatokat próbált olvasni egy "
 "gyermekfolyamatból (%s)"
 
-#: ../glib/gspawn.c:479
+#: ../glib/gspawn.c:486
 #, c-format
 msgid "Unexpected error in waitpid() (%s)"
 msgstr "Váratlan hiba a waitpid()-ben (%s)"
 
-#: ../glib/gspawn.c:886 ../glib/gspawn-win32.c:1231
+#: ../glib/gspawn.c:897 ../glib/gspawn-win32.c:1231
 #, c-format
 msgid "Child process exited with code %ld"
 msgstr "A gyermekfolyamat a következő kóddal lépett ki: %ld"
 
-#: ../glib/gspawn.c:894
+#: ../glib/gspawn.c:905
 #, c-format
 msgid "Child process killed by signal %ld"
 msgstr "A gyermekfolyamat kilőve %ld szignállal"
 
-#: ../glib/gspawn.c:901
+#: ../glib/gspawn.c:912
 #, c-format
 msgid "Child process stopped by signal %ld"
 msgstr "A gyermekfolyamat megállítva %ld szignállal"
 
-#: ../glib/gspawn.c:908
+#: ../glib/gspawn.c:919
 #, c-format
 msgid "Child process exited abnormally"
 msgstr "A gyermekfolyamat abnormálisan lépett ki"
 
-#: ../glib/gspawn.c:1313 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
+#: ../glib/gspawn.c:1324 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
 #, c-format
 msgid "Failed to read from child pipe (%s)"
 msgstr "Nem sikerült olvasni a gyermek csővezetékből (%s)"
 
-#: ../glib/gspawn.c:1383
+#: ../glib/gspawn.c:1394
 #, c-format
 msgid "Failed to fork (%s)"
 msgstr "Nem sikerült folyamatot indítani (%s)"
 
-#: ../glib/gspawn.c:1532 ../glib/gspawn-win32.c:368
+#: ../glib/gspawn.c:1543 ../glib/gspawn-win32.c:368
 #, c-format
 msgid "Failed to change to directory “%s” (%s)"
 msgstr "Nem sikerült átváltani a(z) „%s” könyvtárra (%s)"
 
-#: ../glib/gspawn.c:1542
+#: ../glib/gspawn.c:1553
 #, c-format
 msgid "Failed to execute child process “%s” (%s)"
 msgstr "Nem sikerült a gyermekfolyamat („%s”) végrehajtása (%s)"
 
-#: ../glib/gspawn.c:1552
+#: ../glib/gspawn.c:1563
 #, c-format
 msgid "Failed to redirect output or input of child process (%s)"
 msgstr "Nem sikerült a gyermekfolyamat ki- vagy bemenetének átirányítása (%s)"
 
-#: ../glib/gspawn.c:1561
+#: ../glib/gspawn.c:1572
 #, c-format
 msgid "Failed to fork child process (%s)"
 msgstr "Nem sikerült a gyermekfolyamat elindítása (%s)"
 
-#: ../glib/gspawn.c:1569
+#: ../glib/gspawn.c:1580
 #, c-format
 msgid "Unknown error executing child process “%s”"
 msgstr "Ismeretlen hiba a gyermekfolyamat („%s”) végrehajtásakor"
 
-#: ../glib/gspawn.c:1593
+#: ../glib/gspawn.c:1604
 #, c-format
 msgid "Failed to read enough data from child pid pipe (%s)"
 msgstr "Nem sikerült elég adatot kiolvasni a gyermek pid csővezetékből (%s)"
@@ -5559,89 +5567,179 @@ msgstr "Érvénytelen sorozat az átalakítási bemenetben"
 msgid "Character out of range for UTF-16"
 msgstr "A karakter az UTF-16 tartományon kívülre esik"
 
-#: ../glib/gutils.c:2149 ../glib/gutils.c:2176 ../glib/gutils.c:2282
+#: ../glib/gutils.c:2229
 #, c-format
-msgid "%u byte"
-msgid_plural "%u bytes"
-msgstr[0] "%u bájt"
-msgstr[1] "%u bájt"
+msgid "%.1f kB"
+msgstr "%.1f kB"
+
+#: ../glib/gutils.c:2230 ../glib/gutils.c:2436
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: ../glib/gutils.c:2231 ../glib/gutils.c:2441
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: ../glib/gutils.c:2232 ../glib/gutils.c:2446
+#, c-format
+msgid "%.1f TB"
+msgstr "%.1f TB"
 
-#: ../glib/gutils.c:2155
+#: ../glib/gutils.c:2233 ../glib/gutils.c:2451
+#, c-format
+msgid "%.1f PB"
+msgstr "%.1f PB"
+
+#: ../glib/gutils.c:2234 ../glib/gutils.c:2456
+#, c-format
+msgid "%.1f EB"
+msgstr "%.1f EB"
+
+#: ../glib/gutils.c:2237
 #, c-format
 msgid "%.1f KiB"
 msgstr "%.1f KiB"
 
-#: ../glib/gutils.c:2157
+#: ../glib/gutils.c:2238
 #, c-format
 msgid "%.1f MiB"
 msgstr "%.1f MiB"
 
-#: ../glib/gutils.c:2160
+#: ../glib/gutils.c:2239
 #, c-format
 msgid "%.1f GiB"
 msgstr "%.1f GiB"
 
-#: ../glib/gutils.c:2163
+#: ../glib/gutils.c:2240
 #, c-format
 msgid "%.1f TiB"
 msgstr "%.1f TiB"
 
-#: ../glib/gutils.c:2166
+#: ../glib/gutils.c:2241
 #, c-format
 msgid "%.1f PiB"
 msgstr "%.1f PiB"
 
-#: ../glib/gutils.c:2169
+#: ../glib/gutils.c:2242
 #, c-format
 msgid "%.1f EiB"
 msgstr "%.1f EiB"
 
-#: ../glib/gutils.c:2182
+#: ../glib/gutils.c:2245
 #, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
+#| msgid "%.1f kB"
+msgid "%.1f kb"
+msgstr "%.1f kb"
 
-#: ../glib/gutils.c:2185 ../glib/gutils.c:2300
+#: ../glib/gutils.c:2246
 #, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
+#| msgid "%.1f MB"
+msgid "%.1f Mb"
+msgstr "%.1f Mb"
 
-#: ../glib/gutils.c:2188 ../glib/gutils.c:2305
+#: ../glib/gutils.c:2247
 #, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
+#| msgid "%.1f GB"
+msgid "%.1f Gb"
+msgstr "%.1f Gb"
 
-#: ../glib/gutils.c:2190 ../glib/gutils.c:2310
+#: ../glib/gutils.c:2248
 #, c-format
-msgid "%.1f TB"
-msgstr "%.1f TB"
+#| msgid "%.1f TB"
+msgid "%.1f Tb"
+msgstr "%.1f Tb"
 
-#: ../glib/gutils.c:2193 ../glib/gutils.c:2315
+#: ../glib/gutils.c:2249
 #, c-format
-msgid "%.1f PB"
-msgstr "%.1f PB"
+#| msgid "%.1f PB"
+msgid "%.1f Pb"
+msgstr "%.1f Pb"
 
-#: ../glib/gutils.c:2196 ../glib/gutils.c:2320
+#: ../glib/gutils.c:2250
 #, c-format
-msgid "%.1f EB"
-msgstr "%.1f EB"
+#| msgid "%.1f EB"
+msgid "%.1f Eb"
+msgstr "%.1f Eb"
+
+#: ../glib/gutils.c:2253
+#, c-format
+#| msgid "%.1f KiB"
+msgid "%.1f Kib"
+msgstr "%.1f Kib"
+
+#: ../glib/gutils.c:2254
+#, c-format
+#| msgid "%.1f MiB"
+msgid "%.1f Mib"
+msgstr "%.1f Mib"
+
+#: ../glib/gutils.c:2255
+#, c-format
+#| msgid "%.1f GiB"
+msgid "%.1f Gib"
+msgstr "%.1f Gib"
+
+#: ../glib/gutils.c:2256
+#, c-format
+#| msgid "%.1f TiB"
+msgid "%.1f Tib"
+msgstr "%.1f Tib"
+
+#: ../glib/gutils.c:2257
+#, c-format
+#| msgid "%.1f PiB"
+msgid "%.1f Pib"
+msgstr "%.1f Pib"
+
+#: ../glib/gutils.c:2258
+#, c-format
+#| msgid "%.1f EiB"
+msgid "%.1f Eib"
+msgstr "%.1f Eib"
+
+#: ../glib/gutils.c:2292 ../glib/gutils.c:2418
+#, c-format
+msgid "%u byte"
+msgid_plural "%u bytes"
+msgstr[0] "%u bájt"
+msgstr[1] "%u bájt"
+
+#: ../glib/gutils.c:2296
+#, c-format
+#| msgid "%u byte"
+#| msgid_plural "%u bytes"
+msgid "%u bit"
+msgid_plural "%u bits"
+msgstr[0] "%u bit"
+msgstr[1] "%u bit"
 
 #. Translators: the %s in "%s bytes" will always be replaced by a number.
-#: ../glib/gutils.c:2233
+#: ../glib/gutils.c:2363
 #, c-format
 msgid "%s byte"
 msgid_plural "%s bytes"
 msgstr[0] "%s bájt"
 msgstr[1] "%s bájt"
 
+#. Translators: the %s in "%s bits" will always be replaced by a number.
+#: ../glib/gutils.c:2368
+#, c-format
+#| msgid "%s byte"
+#| msgid_plural "%s bytes"
+msgid "%s bit"
+msgid_plural "%s bits"
+msgstr[0] "%s bit"
+msgstr[1] "%s bit"
+
 #. Translators: this is from the deprecated function g_format_size_for_display() which uses 'KB' to
 #. * mean 1024 bytes.  I am aware that 'KB' is not correct, but it has been preserved for reasons of
 #. * compatibility.  Users will not see this string unless a program is using this deprecated function.
 #. * Please translate as literally as possible.
 #.
-#: ../glib/gutils.c:2295
+#: ../glib/gutils.c:2431
 #, c-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-
index a912694..e3fd0fb 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -10,8 +10,8 @@ msgstr ""
 "Project-Id-Version: glib master\n"
 "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2017-11-28 14:26+0000\n"
-"PO-Revision-Date: 2017-12-05 14:29+0700\n"
+"POT-Creation-Date: 2018-02-03 11:13+0000\n"
+"PO-Revision-Date: 2018-02-05 12:10+0700\n"
 "Last-Translator: Kukuh Syafaat <syafaatkukuh@gmail.com>\n"
 "Language-Team: Indonesian <gnome@i15n.org>\n"
 "Language: id\n"
@@ -19,27 +19,27 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 2.0.4\n"
+"X-Generator: Poedit 2.0.6\n"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "GApplication options"
 msgstr "Opsi GApplication"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "Show GApplication options"
 msgstr "Tunjukkan opsi GApplication"
 
-#: ../gio/gapplication.c:535
+#: ../gio/gapplication.c:540
 msgid "Enter GApplication service mode (use from D-Bus service files)"
 msgstr "Masuk mode layanan GApplication (pakai dari berkas layanan D-Bus)"
 
-#: ../gio/gapplication.c:547
+#: ../gio/gapplication.c:552
 msgid "Override the application’s ID"
 msgstr "Timpa ID aplikasi"
 
 #: ../gio/gapplication-tool.c:45 ../gio/gapplication-tool.c:46
 #: ../gio/gio-tool.c:227 ../gio/gresource-tool.c:488
-#: ../gio/gsettings-tool.c:522
+#: ../gio/gsettings-tool.c:569
 msgid "Print help"
 msgstr "Cetak bantuan"
 
@@ -52,7 +52,7 @@ msgstr "[PERINTAH]"
 msgid "Print version"
 msgstr "Cetak versi"
 
-#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:528
+#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:575
 msgid "Print version information and exit"
 msgstr "Cetak informasi versi dan keluar"
 
@@ -142,7 +142,7 @@ msgid "Optional parameter to the action invocation, in GVariant format"
 msgstr "Parameter opsional untuk pemanggilan aksi, dalam format GVariant"
 
 #: ../gio/gapplication-tool.c:96 ../gio/gresource-tool.c:526
-#: ../gio/gsettings-tool.c:614
+#: ../gio/gsettings-tool.c:661
 #, c-format
 msgid ""
 "Unknown command %s\n"
@@ -156,7 +156,7 @@ msgid "Usage:\n"
 msgstr "Cara pakai:\n"
 
 #: ../gio/gapplication-tool.c:114 ../gio/gresource-tool.c:551
-#: ../gio/gsettings-tool.c:649
+#: ../gio/gsettings-tool.c:696
 msgid "Arguments:\n"
 msgstr "Argumen:\n"
 
@@ -260,7 +260,7 @@ msgstr ""
 #: ../gio/ginputstream.c:179 ../gio/ginputstream.c:379
 #: ../gio/ginputstream.c:617 ../gio/ginputstream.c:1019
 #: ../gio/goutputstream.c:203 ../gio/goutputstream.c:834
-#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:206
+#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:209
 #, c-format
 msgid "Too large count value passed to %s"
 msgstr "Nilai cacah yang dilewatkan ke %s terlalu besar"
@@ -303,29 +303,29 @@ msgid "Not enough space in destination"
 msgstr "Tak cukup ruang di tujuan"
 
 #: ../gio/gcharsetconverter.c:342 ../gio/gdatainputstream.c:848
-#: ../gio/gdatainputstream.c:1257 ../glib/gconvert.c:437 ../glib/gconvert.c:844
+#: ../gio/gdatainputstream.c:1261 ../glib/gconvert.c:452 ../glib/gconvert.c:877
 #: ../glib/giochannel.c:1557 ../glib/giochannel.c:1599
-#: ../glib/giochannel.c:2443 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
+#: ../glib/giochannel.c:2443 ../glib/gutf8.c:869 ../glib/gutf8.c:1322
 msgid "Invalid byte sequence in conversion input"
 msgstr "Rangkaian bita dalam input konversi tidak benar"
 
-#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:445 ../glib/gconvert.c:769
+#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:460 ../glib/gconvert.c:791
 #: ../glib/giochannel.c:1564 ../glib/giochannel.c:2455
 #, c-format
 msgid "Error during conversion: %s"
 msgstr "Galat ketika konversi: %s"
 
-#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1101
+#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1104
 msgid "Cancellable initialization not supported"
 msgstr "Inisialisasi yang dapat dibatalkan tak didukung"
 
-#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:320
+#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:327
 #: ../glib/giochannel.c:1385
 #, c-format
 msgid "Conversion from character set “%s” to “%s” is not supported"
 msgstr "Konversi dari gugus karakter \"%s\" ke \"%s\" tak didukung"
 
-#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:324
+#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:331
 #, c-format
 msgid "Could not open converter from “%s” to “%s”"
 msgstr "Tidak dapat membuka pengubah dari \"%s\" ke \"%s\""
@@ -364,13 +364,13 @@ msgstr "Pemalsuan kredensial tak diimplementasikan di OS ini"
 msgid "Unexpected early end-of-stream"
 msgstr "Akhir stream terlalu dini, tak diharapkan"
 
-#: ../gio/gdbusaddress.c:155 ../gio/gdbusaddress.c:243
-#: ../gio/gdbusaddress.c:324
+#: ../gio/gdbusaddress.c:158 ../gio/gdbusaddress.c:246
+#: ../gio/gdbusaddress.c:327
 #, c-format
 msgid "Unsupported key “%s” in address entry “%s”"
 msgstr "Kunci \"%s\" tak didukung pada entri alamat \"%s\""
 
-#: ../gio/gdbusaddress.c:182
+#: ../gio/gdbusaddress.c:185
 #, c-format
 msgid ""
 "Address “%s” is invalid (need exactly one of path, tmpdir or abstract keys)"
@@ -378,27 +378,27 @@ msgstr ""
 "Alamat \"%s\" tak valid (perlu hanya salah satu dari path, tmpdir, atau "
 "kunci abstrak)"
 
-#: ../gio/gdbusaddress.c:195
+#: ../gio/gdbusaddress.c:198
 #, c-format
 msgid "Meaningless key/value pair combination in address entry “%s”"
 msgstr "Kombinasi pasangan kunci/nilai tanpa arti di entri alamat \"%s\""
 
-#: ../gio/gdbusaddress.c:258 ../gio/gdbusaddress.c:339
+#: ../gio/gdbusaddress.c:261 ../gio/gdbusaddress.c:342
 #, c-format
 msgid "Error in address “%s” — the port attribute is malformed"
 msgstr "Galat dalam alamat \"%s\" — atribut port salah bentuk"
 
-#: ../gio/gdbusaddress.c:269 ../gio/gdbusaddress.c:350
+#: ../gio/gdbusaddress.c:272 ../gio/gdbusaddress.c:353
 #, c-format
 msgid "Error in address “%s” — the family attribute is malformed"
 msgstr "Galat dalam alamat \"%s\" — atribut family salah bentuk"
 
-#: ../gio/gdbusaddress.c:460
+#: ../gio/gdbusaddress.c:463
 #, c-format
 msgid "Address element “%s” does not contain a colon (:)"
 msgstr "Elemen alamat \"%s\" tak memuat titik dua (:)"
 
-#: ../gio/gdbusaddress.c:481
+#: ../gio/gdbusaddress.c:484
 #, c-format
 msgid ""
 "Key/Value pair %d, “%s”, in address element “%s” does not contain an equal "
@@ -407,7 +407,7 @@ msgstr ""
 "Pasangan kunci/nilai %d, \"%s\", dalam elemen alamat \"%s\" tak memuat tanda "
 "sama dengan"
 
-#: ../gio/gdbusaddress.c:495
+#: ../gio/gdbusaddress.c:498
 #, c-format
 msgid ""
 "Error unescaping key or value in Key/Value pair %d, “%s”, in address element "
@@ -416,7 +416,7 @@ msgstr ""
 "Galat saat membongkar kunci atau nilai dalam pasangan Key/Value %d, \"%s\", "
 "dalam elemen alamat \"%s\""
 
-#: ../gio/gdbusaddress.c:573
+#: ../gio/gdbusaddress.c:576
 #, c-format
 msgid ""
 "Error in address “%s” — the unix transport requires exactly one of the keys "
@@ -425,90 +425,90 @@ msgstr ""
 "Galat dalam alamat \"%s\" — transport unix memerlukan hanya satu dari kunci "
 "\"path\" atau \"abstract\" untuk ditata"
 
-#: ../gio/gdbusaddress.c:609
+#: ../gio/gdbusaddress.c:612
 #, c-format
 msgid "Error in address “%s” — the host attribute is missing or malformed"
 msgstr "Galat dalam alamat \"%s\" — atribut host kurang atau salah bentuk"
 
-#: ../gio/gdbusaddress.c:623
+#: ../gio/gdbusaddress.c:626
 #, c-format
 msgid "Error in address “%s” — the port attribute is missing or malformed"
 msgstr "Galat dalam alamat \"%s\" — atribut portt kurang atau salah bentuk"
 
-#: ../gio/gdbusaddress.c:637
+#: ../gio/gdbusaddress.c:640
 #, c-format
 msgid "Error in address “%s” — the noncefile attribute is missing or malformed"
 msgstr "Galat di alamat \"%s\" — atribut berkas nonce kurang atau salah bentuk"
 
-#: ../gio/gdbusaddress.c:658
+#: ../gio/gdbusaddress.c:661
 msgid "Error auto-launching: "
 msgstr "Galat saat meluncurkan otomatis: "
 
-#: ../gio/gdbusaddress.c:666
+#: ../gio/gdbusaddress.c:669
 #, c-format
 msgid "Unknown or unsupported transport “%s” for address “%s”"
 msgstr "Transport \"%s\" tak dikenal atau tak didukung bagi alamat \"%s\""
 
-#: ../gio/gdbusaddress.c:704
+#: ../gio/gdbusaddress.c:714
 #, c-format
 msgid "Error opening nonce file “%s”: %s"
 msgstr "Galat saat membuka berkas nonce \"%s\": %s"
 
-#: ../gio/gdbusaddress.c:723
+#: ../gio/gdbusaddress.c:733
 #, c-format
 msgid "Error reading from nonce file “%s”: %s"
 msgstr "Galat saat membaca berkas nonce \"%s\": %s"
 
-#: ../gio/gdbusaddress.c:732
+#: ../gio/gdbusaddress.c:742
 #, c-format
 msgid "Error reading from nonce file “%s”, expected 16 bytes, got %d"
 msgstr "Galat saat membaca berkas nonce \"%s\", berharap 16 byte, mendapat %d"
 
-#: ../gio/gdbusaddress.c:750
+#: ../gio/gdbusaddress.c:760
 #, c-format
 msgid "Error writing contents of nonce file “%s” to stream:"
 msgstr "Galat saat menulis isi dari berkas nonce \"%s\" ke stream:"
 
-#: ../gio/gdbusaddress.c:959
+#: ../gio/gdbusaddress.c:969
 msgid "The given address is empty"
 msgstr "Tidak ada alamat yang diberikan"
 
-#: ../gio/gdbusaddress.c:1072
+#: ../gio/gdbusaddress.c:1082
 #, c-format
 msgid "Cannot spawn a message bus when setuid"
 msgstr "Tidak bisa spawn suatu bus pesan ketika setuid"
 
-#: ../gio/gdbusaddress.c:1079
+#: ../gio/gdbusaddress.c:1089
 msgid "Cannot spawn a message bus without a machine-id: "
 msgstr "Tidak bisa spawn suatu bus pesan tanpa id-mesin: "
 
-#: ../gio/gdbusaddress.c:1086
+#: ../gio/gdbusaddress.c:1096
 #, c-format
 msgid "Cannot autolaunch D-Bus without X11 $DISPLAY"
 msgstr "Tidak bisa meluncurkan mandiri D-Bus tanpa $DISPLAY X11"
 
-#: ../gio/gdbusaddress.c:1128
+#: ../gio/gdbusaddress.c:1138
 #, c-format
 msgid "Error spawning command line “%s”: "
 msgstr "Galat saat spawn baris perintah \"%s\": "
 
-#: ../gio/gdbusaddress.c:1345
+#: ../gio/gdbusaddress.c:1355
 #, c-format
 msgid "(Type any character to close this window)\n"
 msgstr "(Ketikkan karakter apapun untuk menutup jendela ini)\n"
 
-#: ../gio/gdbusaddress.c:1499
+#: ../gio/gdbusaddress.c:1509
 #, c-format
 msgid "Session dbus not running, and autolaunch failed"
 msgstr "dbus sesi tak sedang berjalan, dan peluncuran-otomatis gagal"
 
-#: ../gio/gdbusaddress.c:1510
+#: ../gio/gdbusaddress.c:1520
 #, c-format
 msgid "Cannot determine session bus address (not implemented for this OS)"
 msgstr ""
 "Tidak bisa menentukan alamat bus sesi (tidak diimplementasi bagi OS ini)"
 
-#: ../gio/gdbusaddress.c:1648
+#: ../gio/gdbusaddress.c:1658
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -517,7 +517,7 @@ msgstr ""
 "Tak bisa menentukan alamat bus dari variabel lingkungan "
 "DBUS_STARTER_BUS_TYPE — nilai tak dikenal \"%s\""
 
-#: ../gio/gdbusaddress.c:1657 ../gio/gdbusconnection.c:7155
+#: ../gio/gdbusaddress.c:1667 ../gio/gdbusconnection.c:7158
 msgid ""
 "Cannot determine bus address because the DBUS_STARTER_BUS_TYPE environment "
 "variable is not set"
@@ -525,7 +525,7 @@ msgstr ""
 "Tak bisa menentukan alamat bus karena variabel lingkungan "
 "DBUS_STARTER_BUS_TYPE tak diisi"
 
-#: ../gio/gdbusaddress.c:1667
+#: ../gio/gdbusaddress.c:1677
 #, c-format
 msgid "Unknown bus type %d"
 msgstr "Tipe bus %d tak dikenal"
@@ -672,12 +672,12 @@ msgstr ""
 "Galat menata properti '%s': Tipe yang diharapkan '%s' tapi diperoleh '%s'"
 
 #: ../gio/gdbusconnection.c:4414 ../gio/gdbusconnection.c:4622
-#: ../gio/gdbusconnection.c:6586
+#: ../gio/gdbusconnection.c:6589
 #, c-format
 msgid "No such interface '%s'"
 msgstr "Tak ada antar muka '%s'"
 
-#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7095
+#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7098
 #, c-format
 msgid "No such interface '%s' on object at path %s"
 msgstr "Tak ada antar muka '%s' pada objek di lokasi %s"
@@ -712,17 +712,17 @@ msgstr "Tak bisa menata properti %s.%s"
 msgid "Method '%s' returned type '%s', but expected '%s'"
 msgstr "Metoda '%s' mengembalikan tipe '%s', tapi yang diharapkan '%s'"
 
-#: ../gio/gdbusconnection.c:6697
+#: ../gio/gdbusconnection.c:6700
 #, c-format
 msgid "Method '%s' on interface '%s' with signature '%s' does not exist"
 msgstr "Metoda '%s' pada antar muka '%s' dengan tanda tangan '%s' tak ada"
 
-#: ../gio/gdbusconnection.c:6818
+#: ../gio/gdbusconnection.c:6821
 #, c-format
 msgid "A subtree is already exported for %s"
 msgstr "Subtree telah diekspor bagi %s"
 
-#: ../gio/gdbusconnection.c:7146
+#: ../gio/gdbusconnection.c:7149
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -879,11 +879,9 @@ msgstr ""
 #: ../gio/gdbusmessage.c:2656
 #, c-format
 msgid ""
-"Message has %d file descriptors but the header field indicates %d file "
-"descriptors"
+"Number of file descriptors in message (%d) differs from header field (%d)"
 msgstr ""
-"Pesan punya %d deskriptor berkas tapi ruas header mengindikasikan %d "
-"deskriptor berkas"
+"Jumlah deskriptor berkas dalam pesan (%d) berbeda dari field header (%d)"
 
 #: ../gio/gdbusmessage.c:2664
 msgid "Cannot serialize message: "
@@ -1251,7 +1249,7 @@ msgstr "Galat: Terlalu banyak argumen.\n"
 msgid "Error: %s is not a valid well-known bus name.\n"
 msgstr "Galat: %s bukan nama bus yang dikenal baik dan valid\n"
 
-#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4531
+#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4566
 msgid "Unnamed"
 msgstr "Tanpa nama"
 
@@ -1259,31 +1257,31 @@ msgstr "Tanpa nama"
 msgid "Desktop file didn’t specify Exec field"
 msgstr "Berkas desktop tak menyatakan ruas Exec"
 
-#: ../gio/gdesktopappinfo.c:2694
+#: ../gio/gdesktopappinfo.c:2701
 msgid "Unable to find terminal required for application"
 msgstr "Tak bisa temukan terminal yang diperlukan bagi aplikasi"
 
-#: ../gio/gdesktopappinfo.c:3127
+#: ../gio/gdesktopappinfo.c:3135
 #, c-format
 msgid "Can’t create user application configuration folder %s: %s"
 msgstr ""
 "Tak bisa membuat folder %s untuk konfigurasi aplikasi bagi pengguna: %s"
 
-#: ../gio/gdesktopappinfo.c:3131
+#: ../gio/gdesktopappinfo.c:3139
 #, c-format
 msgid "Can’t create user MIME configuration folder %s: %s"
 msgstr "Tak bisa membuat folder %s untuk konfigurasi MIME bagi pengguna: %s"
 
-#: ../gio/gdesktopappinfo.c:3371 ../gio/gdesktopappinfo.c:3395
+#: ../gio/gdesktopappinfo.c:3379 ../gio/gdesktopappinfo.c:3403
 msgid "Application information lacks an identifier"
 msgstr "Informasi aplikasi tak punya identifier"
 
-#: ../gio/gdesktopappinfo.c:3629
+#: ../gio/gdesktopappinfo.c:3637
 #, c-format
 msgid "Can’t create user desktop file %s"
 msgstr "Tak bisa membuat berkas desktop pengguna %s"
 
-#: ../gio/gdesktopappinfo.c:3763
+#: ../gio/gdesktopappinfo.c:3771
 #, c-format
 msgid "Custom definition for %s"
 msgstr "Definisi gubahan bagi %s"
@@ -1344,14 +1342,14 @@ msgstr "Cacah token (%d) salah bentuk di pengkodean GEmblemedIcon"
 msgid "Expected a GEmblem for GEmblemedIcon"
 msgstr "Berharap suatu GEmblem bagi GEmblemedIcon"
 
-#: ../gio/gfile.c:970 ../gio/gfile.c:1208 ../gio/gfile.c:1346
-#: ../gio/gfile.c:1584 ../gio/gfile.c:1639 ../gio/gfile.c:1697
-#: ../gio/gfile.c:1781 ../gio/gfile.c:1838 ../gio/gfile.c:1902
-#: ../gio/gfile.c:1957 ../gio/gfile.c:3603 ../gio/gfile.c:3658
-#: ../gio/gfile.c:3894 ../gio/gfile.c:3936 ../gio/gfile.c:4404
-#: ../gio/gfile.c:4815 ../gio/gfile.c:4900 ../gio/gfile.c:4990
-#: ../gio/gfile.c:5087 ../gio/gfile.c:5174 ../gio/gfile.c:5275
-#: ../gio/gfile.c:7853 ../gio/gfile.c:7943 ../gio/gfile.c:8027
+#: ../gio/gfile.c:1071 ../gio/gfile.c:1309 ../gio/gfile.c:1447
+#: ../gio/gfile.c:1685 ../gio/gfile.c:1740 ../gio/gfile.c:1798
+#: ../gio/gfile.c:1882 ../gio/gfile.c:1939 ../gio/gfile.c:2003
+#: ../gio/gfile.c:2058 ../gio/gfile.c:3704 ../gio/gfile.c:3759
+#: ../gio/gfile.c:3995 ../gio/gfile.c:4037 ../gio/gfile.c:4505
+#: ../gio/gfile.c:4916 ../gio/gfile.c:5001 ../gio/gfile.c:5091
+#: ../gio/gfile.c:5188 ../gio/gfile.c:5275 ../gio/gfile.c:5376
+#: ../gio/gfile.c:7954 ../gio/gfile.c:8044 ../gio/gfile.c:8128
 #: ../gio/win32/gwinhttpfile.c:437
 msgid "Operation not supported"
 msgstr "Operasi tak didukung"
@@ -1360,69 +1358,69 @@ msgstr "Operasi tak didukung"
 #. * trying to find the enclosing (user visible)
 #. * mount of a file, but none exists.
 #.
-#: ../gio/gfile.c:1469
+#: ../gio/gfile.c:1570
 msgid "Containing mount does not exist"
 msgstr "Kait yang memuat tak ada"
 
-#: ../gio/gfile.c:2516 ../gio/glocalfile.c:2380
+#: ../gio/gfile.c:2617 ../gio/glocalfile.c:2446
 msgid "Can’t copy over directory"
 msgstr "Tak bisa menyalin direktori atas direktori"
 
-#: ../gio/gfile.c:2576
+#: ../gio/gfile.c:2677
 msgid "Can’t copy directory over directory"
 msgstr "Tak bisa menyalin direktori atas direktori"
 
-#: ../gio/gfile.c:2584
+#: ../gio/gfile.c:2685
 msgid "Target file exists"
 msgstr "Berkas tujuan telah ada"
 
-#: ../gio/gfile.c:2603
+#: ../gio/gfile.c:2704
 msgid "Can’t recursively copy directory"
 msgstr "Tak bisa menyalin direktori secara rekursif"
 
-#: ../gio/gfile.c:2878
+#: ../gio/gfile.c:2979
 msgid "Splice not supported"
 msgstr "Splice tidak didukung"
 
-#: ../gio/gfile.c:2882
+#: ../gio/gfile.c:2983
 #, c-format
 msgid "Error splicing file: %s"
 msgstr "Galat saat men-splice berkas: %s"
 
-#: ../gio/gfile.c:3014
+#: ../gio/gfile.c:3115
 msgid "Copy (reflink/clone) between mounts is not supported"
 msgstr "Menyalin (reflink/clone) antar kait tak didukung"
 
-#: ../gio/gfile.c:3018
+#: ../gio/gfile.c:3119
 msgid "Copy (reflink/clone) is not supported or invalid"
 msgstr "Menyalin (reflink/clone) tak didukung atau tak valid"
 
-#: ../gio/gfile.c:3023
+#: ../gio/gfile.c:3124
 msgid "Copy (reflink/clone) is not supported or didn’t work"
 msgstr "Menyalin (reflink/clone) tak didukung atau tak bekerja"
 
-#: ../gio/gfile.c:3086
+#: ../gio/gfile.c:3187
 msgid "Can’t copy special file"
 msgstr "Tak bisa menyalin berkas spesial"
 
-#: ../gio/gfile.c:3884
+#: ../gio/gfile.c:3985
 msgid "Invalid symlink value given"
 msgstr "Diberikan nilai link simbolik yang tak valid"
 
-#: ../gio/gfile.c:4045
+#: ../gio/gfile.c:4146
 msgid "Trash not supported"
 msgstr "Tong sampah tak didukung"
 
-#: ../gio/gfile.c:4157
+#: ../gio/gfile.c:4258
 #, c-format
 msgid "File names cannot contain “%c”"
 msgstr "Nama berkas tak boleh mengandung \"%c\""
 
-#: ../gio/gfile.c:6638 ../gio/gvolume.c:363
+#: ../gio/gfile.c:6739 ../gio/gvolume.c:363
 msgid "volume doesn’t implement mount"
 msgstr "volume tak mengimplementasi pengaitan"
 
-#: ../gio/gfile.c:6747
+#: ../gio/gfile.c:6848
 msgid "No application is registered as handling this file"
 msgstr "Tak ada aplikasi terdaftar yang menangani berkas ini"
 
@@ -1468,7 +1466,7 @@ msgid "Truncate not supported on stream"
 msgstr "Pemenggalan tak didukung pada stream"
 
 #: ../gio/ghttpproxy.c:91 ../gio/gresolver.c:410 ../gio/gresolver.c:476
-#: ../glib/gconvert.c:1649
+#: ../glib/gconvert.c:1777
 msgid "Invalid hostname"
 msgstr "Nama host salah"
 
@@ -1550,7 +1548,7 @@ msgid "Could not parse “%s” as IP address mask"
 msgstr "Tak bisa mengurai \"%s\" sebagai mask alamat IP"
 
 #: ../gio/ginetsocketaddress.c:203 ../gio/ginetsocketaddress.c:220
-#: ../gio/gnativesocketaddress.c:106 ../gio/gunixsocketaddress.c:218
+#: ../gio/gnativesocketaddress.c:109 ../gio/gunixsocketaddress.c:218
 msgid "Not enough space for socket address"
 msgstr "Tak cukup ruang bagi alamat soket"
 
@@ -2815,7 +2813,7 @@ msgstr "menghapus berkas keluaran yang telah ada.\n"
 msgid "Invalid filename %s"
 msgstr "Nama berkas tak valid: %s"
 
-#: ../gio/glocalfile.c:1039
+#: ../gio/glocalfile.c:1105
 #, c-format
 msgid "Error getting filesystem info for %s: %s"
 msgstr "Galat saat mengambil info sistem berkas bagi %s: %s"
@@ -2824,125 +2822,125 @@ msgstr "Galat saat mengambil info sistem berkas bagi %s: %s"
 #. * the enclosing (user visible) mount of a file, but none
 #. * exists.
 #.
-#: ../gio/glocalfile.c:1178
+#: ../gio/glocalfile.c:1244
 #, c-format
 msgid "Containing mount for file %s not found"
 msgstr "Kait wadah bagi berkas %s tak ditemukan"
 
-#: ../gio/glocalfile.c:1201
+#: ../gio/glocalfile.c:1267
 msgid "Can’t rename root directory"
 msgstr "Tidak bisa mengubah nama direktori root"
 
-#: ../gio/glocalfile.c:1219 ../gio/glocalfile.c:1242
+#: ../gio/glocalfile.c:1285 ../gio/glocalfile.c:1308
 #, c-format
 msgid "Error renaming file %s: %s"
 msgstr "Galat saat mengubah nama berkas %s: %s"
 
-#: ../gio/glocalfile.c:1226
+#: ../gio/glocalfile.c:1292
 msgid "Can’t rename file, filename already exists"
 msgstr "Tidak bisa mengubah nama berkas, nama telah dipakai"
 
-#: ../gio/glocalfile.c:1239 ../gio/glocalfile.c:2256 ../gio/glocalfile.c:2284
-#: ../gio/glocalfile.c:2441 ../gio/glocalfileoutputstream.c:551
+#: ../gio/glocalfile.c:1305 ../gio/glocalfile.c:2322 ../gio/glocalfile.c:2350
+#: ../gio/glocalfile.c:2507 ../gio/glocalfileoutputstream.c:551
 msgid "Invalid filename"
 msgstr "Nama berkas tak valid"
 
-#: ../gio/glocalfile.c:1407 ../gio/glocalfile.c:1422
+#: ../gio/glocalfile.c:1473 ../gio/glocalfile.c:1488
 #, c-format
 msgid "Error opening file %s: %s"
 msgstr "Galat saat membuka berkas %s: %s"
 
-#: ../gio/glocalfile.c:1547
+#: ../gio/glocalfile.c:1613
 #, c-format
 msgid "Error removing file %s: %s"
 msgstr "Galat saat menghapus berkas %s: %s"
 
-#: ../gio/glocalfile.c:1931
+#: ../gio/glocalfile.c:1997
 #, c-format
 msgid "Error trashing file %s: %s"
 msgstr "Galat saat memindah berkas %s ke tong sampah: %s"
 
-#: ../gio/glocalfile.c:1954
+#: ../gio/glocalfile.c:2020
 #, c-format
 msgid "Unable to create trash dir %s: %s"
 msgstr "Tak bisa membuat direktori tong sampah %s: %s"
 
-#: ../gio/glocalfile.c:1974
+#: ../gio/glocalfile.c:2040
 #, c-format
 msgid "Unable to find toplevel directory to trash %s"
 msgstr ""
 "Tidak bisa menemukan direktori puncak %s yang akan dibuang ke tong sampah"
 
-#: ../gio/glocalfile.c:2053 ../gio/glocalfile.c:2073
+#: ../gio/glocalfile.c:2119 ../gio/glocalfile.c:2139
 #, c-format
 msgid "Unable to find or create trash directory for %s"
 msgstr "Tidak bisa menemukan atau membuat direktori tong sampah bagi %s"
 
-#: ../gio/glocalfile.c:2108
+#: ../gio/glocalfile.c:2174
 #, c-format
 msgid "Unable to create trashing info file for %s: %s"
 msgstr "Tidak bisa membuat berkas info pembuangan ke tong sampah bagi %s: %s"
 
-#: ../gio/glocalfile.c:2167
+#: ../gio/glocalfile.c:2233
 #, c-format
 msgid "Unable to trash file %s across filesystem boundaries"
 msgstr ""
 "Tidak bisa membuang berkas %s ke tong sampah menyeberang batas sistem berkas"
 
-#: ../gio/glocalfile.c:2171 ../gio/glocalfile.c:2227
+#: ../gio/glocalfile.c:2237 ../gio/glocalfile.c:2293
 #, c-format
 msgid "Unable to trash file %s: %s"
 msgstr "Tak bisa membuang berkas %s ke tong sampah: %s"
 
-#: ../gio/glocalfile.c:2233
+#: ../gio/glocalfile.c:2299
 #, c-format
 msgid "Unable to trash file %s"
 msgstr "Tak bisa membuang berkas ke tong sampah %s"
 
-#: ../gio/glocalfile.c:2259
+#: ../gio/glocalfile.c:2325
 #, c-format
 msgid "Error creating directory %s: %s"
 msgstr "Galat saat membuat direktori %s: %s"
 
-#: ../gio/glocalfile.c:2288
+#: ../gio/glocalfile.c:2354
 #, c-format
 msgid "Filesystem does not support symbolic links"
 msgstr "Sistem berkas tak mendukung taut simbolik"
 
-#: ../gio/glocalfile.c:2291
+#: ../gio/glocalfile.c:2357
 #, c-format
 msgid "Error making symbolic link %s: %s"
 msgstr "Galat saat membuat taut simbolis %s: %s"
 
-#: ../gio/glocalfile.c:2297 ../glib/gfileutils.c:2127
+#: ../gio/glocalfile.c:2363 ../glib/gfileutils.c:2127
 msgid "Symbolic links not supported"
 msgstr "Taut simbolik tidak didukung"
 
-#: ../gio/glocalfile.c:2352 ../gio/glocalfile.c:2387 ../gio/glocalfile.c:2444
+#: ../gio/glocalfile.c:2418 ../gio/glocalfile.c:2453 ../gio/glocalfile.c:2510
 #, c-format
 msgid "Error moving file %s: %s"
 msgstr "Galat saat memindah berkas %s: %s"
 
-#: ../gio/glocalfile.c:2375
+#: ../gio/glocalfile.c:2441
 msgid "Can’t move directory over directory"
 msgstr "Tidak bisa memindah direktori atas direktori"
 
-#: ../gio/glocalfile.c:2401 ../gio/glocalfileoutputstream.c:935
+#: ../gio/glocalfile.c:2467 ../gio/glocalfileoutputstream.c:935
 #: ../gio/glocalfileoutputstream.c:949 ../gio/glocalfileoutputstream.c:964
 #: ../gio/glocalfileoutputstream.c:981 ../gio/glocalfileoutputstream.c:995
 msgid "Backup file creation failed"
 msgstr "Pembuatan berkas cadangan gagal"
 
-#: ../gio/glocalfile.c:2420
+#: ../gio/glocalfile.c:2486
 #, c-format
 msgid "Error removing target file: %s"
 msgstr "Galat saat menghapus berkas tujuan: %s"
 
-#: ../gio/glocalfile.c:2434
+#: ../gio/glocalfile.c:2500
 msgid "Move between mounts not supported"
 msgstr "Perpindahan antar kait tak didukung"
 
-#: ../gio/glocalfile.c:2625
+#: ../gio/glocalfile.c:2691
 #, c-format
 msgid "Could not determine the disk usage of %s: %s"
 msgstr "Tak bisa menentukan penggunaan diska dari %s: %s"
@@ -2973,70 +2971,70 @@ msgstr " (pengkodean tak valid)"
 msgid "Error when getting information for file “%s”: %s"
 msgstr "Galat saat mengambil informasi bagi berkas \"%s\": %s"
 
-#: ../gio/glocalfileinfo.c:2034
+#: ../gio/glocalfileinfo.c:2038
 #, c-format
 msgid "Error when getting information for file descriptor: %s"
 msgstr "Galat saat mengambil informasi bagi descriptor berkas: %s"
 
-#: ../gio/glocalfileinfo.c:2079
+#: ../gio/glocalfileinfo.c:2083
 msgid "Invalid attribute type (uint32 expected)"
 msgstr "Tipe atribut tak valid (diharapkan uint32)"
 
-#: ../gio/glocalfileinfo.c:2097
+#: ../gio/glocalfileinfo.c:2101
 msgid "Invalid attribute type (uint64 expected)"
 msgstr "Tipe atribut tak valid (diharapkan uint64)"
 
-#: ../gio/glocalfileinfo.c:2116 ../gio/glocalfileinfo.c:2135
+#: ../gio/glocalfileinfo.c:2120 ../gio/glocalfileinfo.c:2139
 msgid "Invalid attribute type (byte string expected)"
 msgstr "Jenis atribut tidak sah (diharapkan bita berjenis string)"
 
-#: ../gio/glocalfileinfo.c:2180
+#: ../gio/glocalfileinfo.c:2184
 msgid "Cannot set permissions on symlinks"
 msgstr "Tak bisa menata ijin pada taut simbolik"
 
-#: ../gio/glocalfileinfo.c:2196
+#: ../gio/glocalfileinfo.c:2200
 #, c-format
 msgid "Error setting permissions: %s"
 msgstr "Galat saat menata ijin: %s"
 
-#: ../gio/glocalfileinfo.c:2247
+#: ../gio/glocalfileinfo.c:2251
 #, c-format
 msgid "Error setting owner: %s"
 msgstr "Galat saat menata pemilik: %s"
 
-#: ../gio/glocalfileinfo.c:2270
+#: ../gio/glocalfileinfo.c:2274
 msgid "symlink must be non-NULL"
 msgstr "symlink tak boleh NULL"
 
-#: ../gio/glocalfileinfo.c:2280 ../gio/glocalfileinfo.c:2299
-#: ../gio/glocalfileinfo.c:2310
+#: ../gio/glocalfileinfo.c:2284 ../gio/glocalfileinfo.c:2303
+#: ../gio/glocalfileinfo.c:2314
 #, c-format
 msgid "Error setting symlink: %s"
 msgstr "Galat saat menata taut simbolis: %s"
 
-#: ../gio/glocalfileinfo.c:2289
+#: ../gio/glocalfileinfo.c:2293
 msgid "Error setting symlink: file is not a symlink"
 msgstr "Galat saat menata symlink: berkas bukan suatu link simbolik"
 
-#: ../gio/glocalfileinfo.c:2415
+#: ../gio/glocalfileinfo.c:2419
 #, c-format
 msgid "Error setting modification or access time: %s"
 msgstr "Galat saat menata waktu modifikasi atau akses: %s"
 
-#: ../gio/glocalfileinfo.c:2438
+#: ../gio/glocalfileinfo.c:2442
 msgid "SELinux context must be non-NULL"
 msgstr "Konteks SELinux tak boleh NULL"
 
-#: ../gio/glocalfileinfo.c:2453
+#: ../gio/glocalfileinfo.c:2457
 #, c-format
 msgid "Error setting SELinux context: %s"
 msgstr "Galat saat menata konteks SELinux: %s"
 
-#: ../gio/glocalfileinfo.c:2460
+#: ../gio/glocalfileinfo.c:2464
 msgid "SELinux is not enabled on this system"
 msgstr "SELinux tak diaktifkan di sistem ini"
 
-#: ../gio/glocalfileinfo.c:2552
+#: ../gio/glocalfileinfo.c:2556
 #, c-format
 msgid "Setting attribute %s not supported"
 msgstr "Penataan atribut %s tak didukung"
@@ -3243,6 +3241,10 @@ msgstr "Stream sumber telah ditutup"
 msgid "Error resolving “%s”: %s"
 msgstr "Galat saat mengurai \"%s\": %s"
 
+#: ../gio/gresolver.c:729 ../gio/gresolver.c:781
+msgid "Invalid domain"
+msgstr "Domain tidak valid"
+
 #: ../gio/gresource.c:621 ../gio/gresource.c:880 ../gio/gresource.c:919
 #: ../gio/gresource.c:1043 ../gio/gresource.c:1115 ../gio/gresource.c:1188
 #: ../gio/gresource.c:1258 ../gio/gresourcefile.c:476
@@ -3355,7 +3357,7 @@ msgstr ""
 msgid "  SECTION   An (optional) elf section name\n"
 msgstr "  SEKSI     Nama seksi elf (opsional)\n"
 
-#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:656
+#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:703
 msgid "  COMMAND   The (optional) command to explain\n"
 msgstr "  PERINTAH   Perintah (opsional) untuk dijelaskan\n"
 
@@ -3388,7 +3390,7 @@ msgid "  PATH      A resource path\n"
 msgstr "  PATH      Path sumber daya\n"
 
 #: ../gio/gsettings-tool.c:51 ../gio/gsettings-tool.c:72
-#: ../gio/gsettings-tool.c:853
+#: ../gio/gsettings-tool.c:908
 #, c-format
 msgid "No such schema “%s”\n"
 msgstr "Tidak ada skema \"%s\"\n"
@@ -3424,38 +3426,38 @@ msgstr "Path harus diakhiri dengan garis miring (/)\n"
 msgid "Path must not contain two adjacent slashes (//)\n"
 msgstr "Path tak boleh memuat dua slash berturutan (//)\n"
 
-#: ../gio/gsettings-tool.c:491
+#: ../gio/gsettings-tool.c:538
 #, c-format
 msgid "The provided value is outside of the valid range\n"
 msgstr "Nilai yang diberikan diluar rentang yang valid\n"
 
-#: ../gio/gsettings-tool.c:498
+#: ../gio/gsettings-tool.c:545
 #, c-format
 msgid "The key is not writable\n"
 msgstr "Kunci tidak dapat ditulisi\n"
 
-#: ../gio/gsettings-tool.c:534
+#: ../gio/gsettings-tool.c:581
 msgid "List the installed (non-relocatable) schemas"
 msgstr "Daftar skema (yang tak bisa dipindah) yang terpasang"
 
-#: ../gio/gsettings-tool.c:540
+#: ../gio/gsettings-tool.c:587
 msgid "List the installed relocatable schemas"
 msgstr "Daftar skema yang dapat dipindah yang terpasang"
 
-#: ../gio/gsettings-tool.c:546
+#: ../gio/gsettings-tool.c:593
 msgid "List the keys in SCHEMA"
 msgstr "Daftar kunci di SKEMA"
 
-#: ../gio/gsettings-tool.c:547 ../gio/gsettings-tool.c:553
-#: ../gio/gsettings-tool.c:596
+#: ../gio/gsettings-tool.c:594 ../gio/gsettings-tool.c:600
+#: ../gio/gsettings-tool.c:643
 msgid "SCHEMA[:PATH]"
 msgstr "SKEMA[:PATH]"
 
-#: ../gio/gsettings-tool.c:552
+#: ../gio/gsettings-tool.c:599
 msgid "List the children of SCHEMA"
 msgstr "Daftar anak dari SKEMA"
 
-#: ../gio/gsettings-tool.c:558
+#: ../gio/gsettings-tool.c:605
 msgid ""
 "List keys and values, recursively\n"
 "If no SCHEMA is given, list all keys\n"
@@ -3463,49 +3465,49 @@ msgstr ""
 "Daftar kunci dan nilai, secara rekursif\n"
 "Bila tak ada SKEMA diberikan, daftar semua kunci\n"
 
-#: ../gio/gsettings-tool.c:560
+#: ../gio/gsettings-tool.c:607
 msgid "[SCHEMA[:PATH]]"
 msgstr "[SKEMA[:PATH]]"
 
-#: ../gio/gsettings-tool.c:565
+#: ../gio/gsettings-tool.c:612
 msgid "Get the value of KEY"
 msgstr "Ambil nilai dari KUNCI"
 
-#: ../gio/gsettings-tool.c:566 ../gio/gsettings-tool.c:572
-#: ../gio/gsettings-tool.c:578 ../gio/gsettings-tool.c:590
-#: ../gio/gsettings-tool.c:602
+#: ../gio/gsettings-tool.c:613 ../gio/gsettings-tool.c:619
+#: ../gio/gsettings-tool.c:625 ../gio/gsettings-tool.c:637
+#: ../gio/gsettings-tool.c:649
 msgid "SCHEMA[:PATH] KEY"
 msgstr "SKEMA[:PATH] KUNCI"
 
-#: ../gio/gsettings-tool.c:571
+#: ../gio/gsettings-tool.c:618
 msgid "Query the range of valid values for KEY"
 msgstr "Kueri rentang nilai yang valid bagi KUNCI"
 
-#: ../gio/gsettings-tool.c:577
+#: ../gio/gsettings-tool.c:624
 msgid "Query the description for KEY"
 msgstr "Kueri deskripsi bagi KUNCI"
 
-#: ../gio/gsettings-tool.c:583
+#: ../gio/gsettings-tool.c:630
 msgid "Set the value of KEY to VALUE"
 msgstr "Menata nilai KUNCI ke NILAI"
 
-#: ../gio/gsettings-tool.c:584
+#: ../gio/gsettings-tool.c:631
 msgid "SCHEMA[:PATH] KEY VALUE"
 msgstr "SKEMA[:PATH] KUNCI NILAI"
 
-#: ../gio/gsettings-tool.c:589
+#: ../gio/gsettings-tool.c:636
 msgid "Reset KEY to its default value"
 msgstr "Menata KUNCI ke nilai bawaannya"
 
-#: ../gio/gsettings-tool.c:595
+#: ../gio/gsettings-tool.c:642
 msgid "Reset all keys in SCHEMA to their defaults"
 msgstr "Tata ulang semua kunci dalam SKEMA ke nilai baku"
 
-#: ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:648
 msgid "Check if KEY is writable"
 msgstr "Periksa apakah KUNCI dapat ditulisi"
 
-#: ../gio/gsettings-tool.c:607
+#: ../gio/gsettings-tool.c:654
 msgid ""
 "Monitor KEY for changes.\n"
 "If no KEY is specified, monitor all keys in SCHEMA.\n"
@@ -3515,11 +3517,11 @@ msgstr ""
 "Bila tak ada KUNCI yang dinyatakan, memantau semua kunci dalam SKEMA.\n"
 "Gunakan ^C untuk berhenti memantau.\n"
 
-#: ../gio/gsettings-tool.c:610
+#: ../gio/gsettings-tool.c:657
 msgid "SCHEMA[:PATH] [KEY]"
 msgstr "SKEMA[:PATH] [KUNCI]"
 
-#: ../gio/gsettings-tool.c:622
+#: ../gio/gsettings-tool.c:669
 msgid ""
 "Usage:\n"
 "  gsettings --version\n"
@@ -3566,7 +3568,7 @@ msgstr ""
 "Pakai 'gsettings help PERINTAH' untuk mendapat bantuan terrinci.\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:646
+#: ../gio/gsettings-tool.c:693
 #, c-format
 msgid ""
 "Usage:\n"
@@ -3581,11 +3583,11 @@ msgstr ""
 "%s\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:652
+#: ../gio/gsettings-tool.c:699
 msgid "  SCHEMADIR A directory to search for additional schemas\n"
 msgstr "  DIRSKEMA Adalah direktori tempat mencari skema tambahan\n"
 
-#: ../gio/gsettings-tool.c:660
+#: ../gio/gsettings-tool.c:707
 msgid ""
 "  SCHEMA    The name of the schema\n"
 "  PATH      The path, for relocatable schemas\n"
@@ -3593,34 +3595,34 @@ msgstr ""
 "  SKEMA     Nama skema\n"
 "  PATH      Path, bagi skema yang dapat dipindah\n"
 
-#: ../gio/gsettings-tool.c:665
+#: ../gio/gsettings-tool.c:712
 msgid "  KEY       The (optional) key within the schema\n"
 msgstr "  KUNCI     Kunci (opsional) dalam skema\n"
 
-#: ../gio/gsettings-tool.c:669
+#: ../gio/gsettings-tool.c:716
 msgid "  KEY       The key within the schema\n"
 msgstr "  KUNCI     Kunci dalam skema\n"
 
-#: ../gio/gsettings-tool.c:673
+#: ../gio/gsettings-tool.c:720
 msgid "  VALUE     The value to set\n"
 msgstr "  NILAI     Tatanan nilai\n"
 
-#: ../gio/gsettings-tool.c:728
+#: ../gio/gsettings-tool.c:775
 #, c-format
 msgid "Could not load schemas from %s: %s\n"
 msgstr "Tidak dapat memuat skema dari %s: %s\n"
 
-#: ../gio/gsettings-tool.c:740
+#: ../gio/gsettings-tool.c:787
 #, c-format
 msgid "No schemas installed\n"
 msgstr "Tidak ada skema yang terpasang\n"
 
-#: ../gio/gsettings-tool.c:811
+#: ../gio/gsettings-tool.c:866
 #, c-format
 msgid "Empty schema name given\n"
 msgstr "Nama skema yang diberikan kosong\n"
 
-#: ../gio/gsettings-tool.c:866
+#: ../gio/gsettings-tool.c:921
 #, c-format
 msgid "No such key “%s”\n"
 msgstr "Tidak ada kunci seperti \"%s\"\n"
@@ -3638,163 +3640,163 @@ msgstr "Soket tak valid, inisialisasi gagal karena: %s"
 msgid "Socket is already closed"
 msgstr "Soket telah ditutup"
 
-#: ../gio/gsocket.c:414 ../gio/gsocket.c:2995 ../gio/gsocket.c:4205
-#: ../gio/gsocket.c:4263
+#: ../gio/gsocket.c:414 ../gio/gsocket.c:3010 ../gio/gsocket.c:4220
+#: ../gio/gsocket.c:4278
 msgid "Socket I/O timed out"
 msgstr "I/O soket kehabisan waktu"
 
-#: ../gio/gsocket.c:546
+#: ../gio/gsocket.c:549
 #, c-format
 msgid "creating GSocket from fd: %s"
 msgstr "membuat GSocket dari fd: %s"
 
-#: ../gio/gsocket.c:575 ../gio/gsocket.c:629 ../gio/gsocket.c:636
+#: ../gio/gsocket.c:578 ../gio/gsocket.c:632 ../gio/gsocket.c:639
 #, c-format
 msgid "Unable to create socket: %s"
 msgstr "Tak bisa membuat soket: %s"
 
-#: ../gio/gsocket.c:629
+#: ../gio/gsocket.c:632
 msgid "Unknown family was specified"
 msgstr "Famili tak dikenal dinyatakan"
 
-#: ../gio/gsocket.c:636
+#: ../gio/gsocket.c:639
 msgid "Unknown protocol was specified"
 msgstr "Protokol tak dikenal dinyatakan"
 
-#: ../gio/gsocket.c:1127
+#: ../gio/gsocket.c:1130
 #, c-format
 msgid "Cannot use datagram operations on a non-datagram socket."
 msgstr "Tidak bisa memakai operasi datagram pada suatu soket bukan datagram."
 
-#: ../gio/gsocket.c:1144
+#: ../gio/gsocket.c:1147
 #, c-format
 msgid "Cannot use datagram operations on a socket with a timeout set."
 msgstr ""
 "Tidak bisa memakai operasi datagram pada suatu soket yang tenggang waktunya "
 "ditata."
 
-#: ../gio/gsocket.c:1948
+#: ../gio/gsocket.c:1954
 #, c-format
 msgid "could not get local address: %s"
 msgstr "tak bisa mendapat alamat lokal: %s"
 
-#: ../gio/gsocket.c:1991
+#: ../gio/gsocket.c:2000
 #, c-format
 msgid "could not get remote address: %s"
 msgstr "tak bisa mendapat alamat jauh: %s"
 
-#: ../gio/gsocket.c:2057
+#: ../gio/gsocket.c:2066
 #, c-format
 msgid "could not listen: %s"
 msgstr "tak bisa mendengarkan: %s"
 
-#: ../gio/gsocket.c:2156
+#: ../gio/gsocket.c:2168
 #, c-format
 msgid "Error binding to address: %s"
 msgstr "Galat saat mengikat ke alamat: %s"
 
-#: ../gio/gsocket.c:2214 ../gio/gsocket.c:2251 ../gio/gsocket.c:2361
-#: ../gio/gsocket.c:2379 ../gio/gsocket.c:2449 ../gio/gsocket.c:2507
-#: ../gio/gsocket.c:2525
+#: ../gio/gsocket.c:2226 ../gio/gsocket.c:2263 ../gio/gsocket.c:2373
+#: ../gio/gsocket.c:2391 ../gio/gsocket.c:2461 ../gio/gsocket.c:2519
+#: ../gio/gsocket.c:2537
 #, c-format
 msgid "Error joining multicast group: %s"
 msgstr "Galat saat bergabung dengan grup multicast: %s"
 
-#: ../gio/gsocket.c:2215 ../gio/gsocket.c:2252 ../gio/gsocket.c:2362
-#: ../gio/gsocket.c:2380 ../gio/gsocket.c:2450 ../gio/gsocket.c:2508
-#: ../gio/gsocket.c:2526
+#: ../gio/gsocket.c:2227 ../gio/gsocket.c:2264 ../gio/gsocket.c:2374
+#: ../gio/gsocket.c:2392 ../gio/gsocket.c:2462 ../gio/gsocket.c:2520
+#: ../gio/gsocket.c:2538
 #, c-format
 msgid "Error leaving multicast group: %s"
 msgstr "Galat saat meninggalkan grup multicast: %s"
 
-#: ../gio/gsocket.c:2216
+#: ../gio/gsocket.c:2228
 msgid "No support for source-specific multicast"
 msgstr "Tak ada dukungan bagi multicast spesifik sumber"
 
-#: ../gio/gsocket.c:2363
+#: ../gio/gsocket.c:2375
 msgid "Unsupported socket family"
 msgstr "Keluarga soket tak didukung"
 
-#: ../gio/gsocket.c:2381
+#: ../gio/gsocket.c:2393
 msgid "source-specific not an IPv4 address"
 msgstr "spesifik sumber bukan alamat IPv4"
 
-#: ../gio/gsocket.c:2399 ../gio/gsocket.c:2428 ../gio/gsocket.c:2475
+#: ../gio/gsocket.c:2411 ../gio/gsocket.c:2440 ../gio/gsocket.c:2487
 #, c-format
 msgid "Interface not found: %s"
 msgstr "Antarmuka tidak ditemukan: %s"
 
-#: ../gio/gsocket.c:2415
+#: ../gio/gsocket.c:2427
 #, c-format
 msgid "Interface name too long"
 msgstr "Nama antarmuka terlalu panjang"
 
-#: ../gio/gsocket.c:2451
+#: ../gio/gsocket.c:2463
 msgid "No support for IPv4 source-specific multicast"
 msgstr "Tak ada dukungan bagi multicast spesifik sumber IPV4"
 
-#: ../gio/gsocket.c:2509
+#: ../gio/gsocket.c:2521
 msgid "No support for IPv6 source-specific multicast"
 msgstr "Tak ada dukungan bagi multicast spesifik sumber IPV6"
 
-#: ../gio/gsocket.c:2718
+#: ../gio/gsocket.c:2730
 #, c-format
 msgid "Error accepting connection: %s"
 msgstr "Galat saat menerima sambungan: %s"
 
-#: ../gio/gsocket.c:2839
+#: ../gio/gsocket.c:2854
 msgid "Connection in progress"
 msgstr "Penyambungan tengah berlangsung"
 
-#: ../gio/gsocket.c:2888
+#: ../gio/gsocket.c:2903
 msgid "Unable to get pending error: "
 msgstr "Tak bisa mendapat kesalahan yang tertunda: "
 
-#: ../gio/gsocket.c:3058
+#: ../gio/gsocket.c:3073
 #, c-format
 msgid "Error receiving data: %s"
 msgstr "Galat saat menerima data: %s"
 
-#: ../gio/gsocket.c:3253
+#: ../gio/gsocket.c:3268
 #, c-format
 msgid "Error sending data: %s"
 msgstr "Galat saat mengirim data: %s"
 
-#: ../gio/gsocket.c:3440
+#: ../gio/gsocket.c:3455
 #, c-format
 msgid "Unable to shutdown socket: %s"
 msgstr "Tak bisa mematikan soket: %s"
 
-#: ../gio/gsocket.c:3521
+#: ../gio/gsocket.c:3536
 #, c-format
 msgid "Error closing socket: %s"
 msgstr "Galat saat menutup soket: %s"
 
-#: ../gio/gsocket.c:4198
+#: ../gio/gsocket.c:4213
 #, c-format
 msgid "Waiting for socket condition: %s"
 msgstr "Menunggu kondisi soket: %s"
 
-#: ../gio/gsocket.c:4672 ../gio/gsocket.c:4752 ../gio/gsocket.c:4930
+#: ../gio/gsocket.c:4687 ../gio/gsocket.c:4767 ../gio/gsocket.c:4945
 #, c-format
 msgid "Error sending message: %s"
 msgstr "Galat saat menerima pesan: %s"
 
-#: ../gio/gsocket.c:4696
+#: ../gio/gsocket.c:4711
 msgid "GSocketControlMessage not supported on Windows"
 msgstr "GSocketControlMessage tak didukung pada Windows"
 
-#: ../gio/gsocket.c:5149 ../gio/gsocket.c:5222 ../gio/gsocket.c:5448
+#: ../gio/gsocket.c:5164 ../gio/gsocket.c:5237 ../gio/gsocket.c:5463
 #, c-format
 msgid "Error receiving message: %s"
 msgstr "Galat saat menerima pesan: %s"
 
-#: ../gio/gsocket.c:5720
+#: ../gio/gsocket.c:5735
 #, c-format
 msgid "Unable to read socket credentials: %s"
 msgstr "Tak bisa membaca kredensial soket: %s"
 
-#: ../gio/gsocket.c:5729
+#: ../gio/gsocket.c:5744
 msgid "g_socket_get_credentials not implemented for this OS"
 msgstr "g_socket_get_credentials tidak diimplementasikan untuk OS ini"
 
@@ -3945,6 +3947,7 @@ msgid "Temporarily unable to resolve “%s”"
 msgstr "Sementara tidak dapat mengurai \"%s\""
 
 #: ../gio/gthreadedresolver.c:559 ../gio/gthreadedresolver.c:736
+#: ../gio/gthreadedresolver.c:842
 #, c-format
 msgid "Error resolving “%s”"
 msgstr "Galat saat mengurai \"%s\""
@@ -4053,7 +4056,7 @@ msgstr "Galat saat membaca dari descriptor berkas: %s"
 msgid "Error closing file descriptor: %s"
 msgstr "Galat saat menutup descriptor berkas: %s"
 
-#: ../gio/gunixmounts.c:2539 ../gio/gunixmounts.c:2592
+#: ../gio/gunixmounts.c:2556 ../gio/gunixmounts.c:2609
 msgid "Filesystem root"
 msgstr "Akar sistem berkas"
 
@@ -4157,92 +4160,104 @@ msgstr "Tag \"%s\" yang tak diharapkan, diharapkan tag \"%s\""
 msgid "Unexpected tag “%s” inside “%s”"
 msgstr "Tag \"%s\" yang tak diharapkan di dalam \"%s\""
 
-#: ../glib/gbookmarkfile.c:1756
+#: ../glib/gbookmarkfile.c:1757
 msgid "No valid bookmark file found in data dirs"
 msgstr "Tak ditemukan penanda buku yang valid di direktori data"
 
-#: ../glib/gbookmarkfile.c:1957
+#: ../glib/gbookmarkfile.c:1958
 #, c-format
 msgid "A bookmark for URI “%s” already exists"
 msgstr "Penanda taut untuk URI \"%s\" telah ada"
 
-#: ../glib/gbookmarkfile.c:2003 ../glib/gbookmarkfile.c:2161
-#: ../glib/gbookmarkfile.c:2246 ../glib/gbookmarkfile.c:2326
-#: ../glib/gbookmarkfile.c:2411 ../glib/gbookmarkfile.c:2494
-#: ../glib/gbookmarkfile.c:2572 ../glib/gbookmarkfile.c:2651
-#: ../glib/gbookmarkfile.c:2693 ../glib/gbookmarkfile.c:2790
-#: ../glib/gbookmarkfile.c:2910 ../glib/gbookmarkfile.c:3100
-#: ../glib/gbookmarkfile.c:3176 ../glib/gbookmarkfile.c:3344
-#: ../glib/gbookmarkfile.c:3433 ../glib/gbookmarkfile.c:3522
-#: ../glib/gbookmarkfile.c:3638
+#: ../glib/gbookmarkfile.c:2004 ../glib/gbookmarkfile.c:2162
+#: ../glib/gbookmarkfile.c:2247 ../glib/gbookmarkfile.c:2327
+#: ../glib/gbookmarkfile.c:2412 ../glib/gbookmarkfile.c:2495
+#: ../glib/gbookmarkfile.c:2573 ../glib/gbookmarkfile.c:2652
+#: ../glib/gbookmarkfile.c:2694 ../glib/gbookmarkfile.c:2791
+#: ../glib/gbookmarkfile.c:2912 ../glib/gbookmarkfile.c:3102
+#: ../glib/gbookmarkfile.c:3178 ../glib/gbookmarkfile.c:3346
+#: ../glib/gbookmarkfile.c:3435 ../glib/gbookmarkfile.c:3524
+#: ../glib/gbookmarkfile.c:3640
 #, c-format
 msgid "No bookmark found for URI “%s”"
 msgstr "Tak ditemukan penanda taut untuk URI \"%s\""
 
-#: ../glib/gbookmarkfile.c:2335
+#: ../glib/gbookmarkfile.c:2336
 #, c-format
 msgid "No MIME type defined in the bookmark for URI “%s”"
 msgstr ""
 "Tidak ada jenis MIME yang didefinisikan pada penanda taut untuk URI \"%s\""
 
-#: ../glib/gbookmarkfile.c:2420
+#: ../glib/gbookmarkfile.c:2421
 #, c-format
 msgid "No private flag has been defined in bookmark for URI “%s”"
 msgstr ""
 "Tidak ada flag privat yang ditetapkan dalam penanda taut untuk URI \"%s\""
 
-#: ../glib/gbookmarkfile.c:2799
+#: ../glib/gbookmarkfile.c:2800
 #, c-format
 msgid "No groups set in bookmark for URI “%s”"
 msgstr "Tidak ada grup yang ditetapkan dalam penanda taut untuk URI \"%s\""
 
-#: ../glib/gbookmarkfile.c:3197 ../glib/gbookmarkfile.c:3354
+#: ../glib/gbookmarkfile.c:3199 ../glib/gbookmarkfile.c:3356
 #, c-format
 msgid "No application with name “%s” registered a bookmark for “%s”"
 msgstr ""
 "Tak ditemukan aplikasi terdaftar dengan nama \"%s\" bagi penanda taut \"%s\""
 
-#: ../glib/gbookmarkfile.c:3377
+#: ../glib/gbookmarkfile.c:3379
 #, c-format
 msgid "Failed to expand exec line “%s” with URI “%s”"
 msgstr "Gagal mengembangkan baris eksekusi \"%s\" dengan URI \"%s\""
 
-#: ../glib/gconvert.c:476 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
-#: ../glib/gutf8.c:1211 ../glib/gutf8.c:1315
+#: ../glib/gconvert.c:471
+msgid "Unrepresentable character in conversion input"
+msgstr "Karakter yang tidak dapat diterima dalam masukan konversi"
+
+#: ../glib/gconvert.c:498 ../glib/gutf8.c:865 ../glib/gutf8.c:1077
+#: ../glib/gutf8.c:1214 ../glib/gutf8.c:1318
 msgid "Partial character sequence at end of input"
 msgstr "Rangkaian karakter sebagian pada akhir input"
 
-#: ../glib/gconvert.c:741
+#: ../glib/gconvert.c:763
 #, c-format
 msgid "Cannot convert fallback “%s” to codeset “%s”"
 msgstr "Tidak dapat mengonversi fallback \"%s\" menjadi codeset \"%s\""
 
-#: ../glib/gconvert.c:1512
+#: ../glib/gconvert.c:934
+msgid "Embedded NUL byte in conversion input"
+msgstr "NUL bita tertanam dalam masukan konversi"
+
+#: ../glib/gconvert.c:955
+msgid "Embedded NUL byte in conversion output"
+msgstr "NUL bita tertanam dalam keluaran konversi"
+
+#: ../glib/gconvert.c:1640
 #, c-format
 msgid "The URI “%s” is not an absolute URI using the “file” scheme"
 msgstr "URI \"%s\" bukanlah URI absolut dengan menggunakan skema \"file\""
 
-#: ../glib/gconvert.c:1522
+#: ../glib/gconvert.c:1650
 #, c-format
 msgid "The local file URI “%s” may not include a “#”"
 msgstr "URI berkas lokal \"%s\" tak boleh mengandung \"#\""
 
-#: ../glib/gconvert.c:1539
+#: ../glib/gconvert.c:1667
 #, c-format
 msgid "The URI “%s” is invalid"
 msgstr "URI \"%s\" tidak valid"
 
-#: ../glib/gconvert.c:1551
+#: ../glib/gconvert.c:1679
 #, c-format
 msgid "The hostname of the URI “%s” is invalid"
 msgstr "Nama host dari URI \"%s\" tidak valid"
 
-#: ../glib/gconvert.c:1567
+#: ../glib/gconvert.c:1695
 #, c-format
 msgid "The URI “%s” contains invalidly escaped characters"
 msgstr "URI \"%s\" mengandung karakter yang di-escape secara tidak valid"
 
-#: ../glib/gconvert.c:1639
+#: ../glib/gconvert.c:1767
 #, c-format
 msgid "The pathname “%s” is not an absolute path"
 msgstr "Nama path \"%s\" bukan lokasi absolut"
@@ -4612,9 +4627,9 @@ msgstr "Nama kunci tak valid: %s"
 msgid "Key file contains unsupported encoding “%s”"
 msgstr "Berkas kunci mengandung enkoding \"%s\" yang tidak didukung"
 
-#: ../glib/gkeyfile.c:1645 ../glib/gkeyfile.c:1818 ../glib/gkeyfile.c:3198
-#: ../glib/gkeyfile.c:3261 ../glib/gkeyfile.c:3391 ../glib/gkeyfile.c:3521
-#: ../glib/gkeyfile.c:3665 ../glib/gkeyfile.c:3894 ../glib/gkeyfile.c:3961
+#: ../glib/gkeyfile.c:1645 ../glib/gkeyfile.c:1818 ../glib/gkeyfile.c:3206
+#: ../glib/gkeyfile.c:3269 ../glib/gkeyfile.c:3399 ../glib/gkeyfile.c:3529
+#: ../glib/gkeyfile.c:3673 ../glib/gkeyfile.c:3902 ../glib/gkeyfile.c:3969
 #, c-format
 msgid "Key file does not have group “%s”"
 msgstr "Berkas kunci tidak memiliki grup \"%s\""
@@ -4630,14 +4645,14 @@ msgid "Key file contains key “%s” with value “%s” which is not UTF-8"
 msgstr ""
 "Berkas kunci mengandung kunci \"%s\" dengan nilai \"%s\" yang bukan UTF-8"
 
-#: ../glib/gkeyfile.c:1955 ../glib/gkeyfile.c:2071 ../glib/gkeyfile.c:2440
+#: ../glib/gkeyfile.c:1955 ../glib/gkeyfile.c:2071 ../glib/gkeyfile.c:2448
 #, c-format
 msgid ""
 "Key file contains key “%s” which has a value that cannot be interpreted."
 msgstr ""
 "Berkas kunci mengandung kunci \"%s\" yang nilainya tidak dapat diterjemahkan."
 
-#: ../glib/gkeyfile.c:2658 ../glib/gkeyfile.c:3027
+#: ../glib/gkeyfile.c:2666 ../glib/gkeyfile.c:3035
 #, c-format
 msgid ""
 "Key file contains key “%s” in group “%s” which has a value that cannot be "
@@ -4646,36 +4661,36 @@ msgstr ""
 "Berkas kunci mengandung kunci \"%s\" dalam grup \"%s\" yang nilainya tidak "
 "dapat diterjemahkan."
 
-#: ../glib/gkeyfile.c:2736 ../glib/gkeyfile.c:2813
+#: ../glib/gkeyfile.c:2744 ../glib/gkeyfile.c:2821
 #, c-format
 msgid "Key “%s” in group “%s” has value “%s” where %s was expected"
 msgstr "Kunci \"%s\" dalam grup \"%s\" bernilai \"%s\" padahal diharapkan %s"
 
-#: ../glib/gkeyfile.c:4201
+#: ../glib/gkeyfile.c:4209
 msgid "Key file contains escape character at end of line"
 msgstr "Berkas kunci mengandung karakter escape pada akhir baris"
 
-#: ../glib/gkeyfile.c:4223
+#: ../glib/gkeyfile.c:4231
 #, c-format
 msgid "Key file contains invalid escape sequence “%s”"
 msgstr "Berkas kunci memuat urutan escape \"%s\" yang tidak valid"
 
-#: ../glib/gkeyfile.c:4367
+#: ../glib/gkeyfile.c:4375
 #, c-format
 msgid "Value “%s” cannot be interpreted as a number."
 msgstr "Nilai \"%s\" tidak bisa diterjemahkan sebagai sebuah bilangan."
 
-#: ../glib/gkeyfile.c:4381
+#: ../glib/gkeyfile.c:4389
 #, c-format
 msgid "Integer value “%s” out of range"
 msgstr "Nilai bilangan bulat \"%s\" di luar jangkauan"
 
-#: ../glib/gkeyfile.c:4414
+#: ../glib/gkeyfile.c:4422
 #, c-format
 msgid "Value “%s” cannot be interpreted as a float number."
 msgstr "Nilai \"%s\" tidak dapat diterjemahkan sebagai sebuah bilangan float."
 
-#: ../glib/gkeyfile.c:4453
+#: ../glib/gkeyfile.c:4461
 #, c-format
 msgid "Value “%s” cannot be interpreted as a boolean."
 msgstr "Nilai \"%s\" tidak dapat diterjemahkan sebagai sebuah boolean."
@@ -5503,20 +5518,20 @@ msgstr "Nomor \"%s\" berada di luar batas [%s, %s]"
 msgid "“%s” is not an unsigned number"
 msgstr "\"%s\" bukan bilangan tak bertanda"
 
-#: ../glib/gutf8.c:808
+#: ../glib/gutf8.c:811
 msgid "Failed to allocate memory"
 msgstr "Gagal mengalokasikan memori"
 
-#: ../glib/gutf8.c:941
+#: ../glib/gutf8.c:944
 msgid "Character out of range for UTF-8"
 msgstr "Karakter di luar jangkauan UTF-8"
 
-#: ../glib/gutf8.c:1042 ../glib/gutf8.c:1051 ../glib/gutf8.c:1181
-#: ../glib/gutf8.c:1190 ../glib/gutf8.c:1329 ../glib/gutf8.c:1426
+#: ../glib/gutf8.c:1045 ../glib/gutf8.c:1054 ../glib/gutf8.c:1184
+#: ../glib/gutf8.c:1193 ../glib/gutf8.c:1332 ../glib/gutf8.c:1429
 msgid "Invalid sequence in conversion input"
 msgstr "Rangkaian input konversi salah"
 
-#: ../glib/gutf8.c:1340 ../glib/gutf8.c:1437
+#: ../glib/gutf8.c:1343 ../glib/gutf8.c:1440
 msgid "Character out of range for UTF-16"
 msgstr "Karakter di luar jangkauan UTF-16"
 
@@ -5676,6 +5691,13 @@ msgstr[0] "%s bita"
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
+#~ msgid ""
+#~ "Message has %d file descriptors but the header field indicates %d file "
+#~ "descriptors"
+#~ msgstr ""
+#~ "Pesan punya %d deskriptor berkas tapi ruas header mengindikasikan %d "
+#~ "deskriptor berkas"
+
 #~ msgid "Error: object path not specified.\n"
 #~ msgstr "Galat: path objek tak dinyatakan\n"
 
index 388563f..5d7f4f4 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,20 +1,20 @@
 # Polish translation for glib.
-# Copyright © 2002-2017 the glib authors.
+# Copyright © 2002-2018 the glib authors.
 # This file is distributed under the same license as the glib package.
 # Zbigniew Chyla <chyla@alice.ci.pwr.wroc.pl>, 2002-2003.
 # Artur Flinta <aflinta@at.kernel.pl>, 2003-2006.
 # Tomasz Kłoczko <kloczek@rudy.mif.pg.gda.pl>, 2005.
 # Wadim Dziedzic <wdziedzic@aviary.pl>, 2007-2009.
 # Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2009.
-# Piotr Drąg <piotrdrag@gmail.com>, 2009-2017.
-# Aviary.pl <community-poland@mozilla.org>, 2007-2017.
+# Piotr Drąg <piotrdrag@gmail.com>, 2009-2018.
+# Aviary.pl <community-poland@mozilla.org>, 2007-2018.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: glib\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-08-24 01:02+0200\n"
-"PO-Revision-Date: 2017-08-24 01:03+0200\n"
+"POT-Creation-Date: 2018-02-05 00:09+0100\n"
+"PO-Revision-Date: 2018-02-05 00:10+0100\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <community-poland@mozilla.org>\n"
 "Language: pl\n"
@@ -24,25 +24,25 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "GApplication options"
 msgstr "Opcje GApplication"
 
-#: ../gio/gapplication.c:490
+#: ../gio/gapplication.c:495
 msgid "Show GApplication options"
 msgstr "Wyświetla opcje GApplication"
 
-#: ../gio/gapplication.c:535
+#: ../gio/gapplication.c:540
 msgid "Enter GApplication service mode (use from D-Bus service files)"
 msgstr "Przechodzi do trybu usługi GApplication (używane z plików usług D-Bus)"
 
-#: ../gio/gapplication.c:547
+#: ../gio/gapplication.c:552
 msgid "Override the application’s ID"
 msgstr "Zastępuje identyfikator programu"
 
 #: ../gio/gapplication-tool.c:45 ../gio/gapplication-tool.c:46
 #: ../gio/gio-tool.c:227 ../gio/gresource-tool.c:488
-#: ../gio/gsettings-tool.c:522
+#: ../gio/gsettings-tool.c:569
 msgid "Print help"
 msgstr "Wyświetla pomoc"
 
@@ -55,7 +55,7 @@ msgstr "[POLECENIE]"
 msgid "Print version"
 msgstr "Wyświetla wersję"
 
-#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:528
+#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:575
 msgid "Print version information and exit"
 msgstr "Wyświetla informację o wersji i kończy działanie"
 
@@ -148,7 +148,7 @@ msgid "Optional parameter to the action invocation, in GVariant format"
 msgstr "Opcjonalny parametr do wywołania działania w formacie GVariant"
 
 #: ../gio/gapplication-tool.c:96 ../gio/gresource-tool.c:526
-#: ../gio/gsettings-tool.c:614
+#: ../gio/gsettings-tool.c:661
 #, c-format
 msgid ""
 "Unknown command %s\n"
@@ -162,7 +162,7 @@ msgid "Usage:\n"
 msgstr "Użycie:\n"
 
 #: ../gio/gapplication-tool.c:114 ../gio/gresource-tool.c:551
-#: ../gio/gsettings-tool.c:649
+#: ../gio/gsettings-tool.c:696
 msgid "Arguments:\n"
 msgstr "Parametry:\n"
 
@@ -266,7 +266,7 @@ msgstr ""
 #: ../gio/ginputstream.c:179 ../gio/ginputstream.c:379
 #: ../gio/ginputstream.c:617 ../gio/ginputstream.c:1019
 #: ../gio/goutputstream.c:203 ../gio/goutputstream.c:834
-#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:206
+#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:209
 #, c-format
 msgid "Too large count value passed to %s"
 msgstr "Za duża wartość licznika przekazana do %s"
@@ -290,8 +290,8 @@ msgid "Truncate not supported on base stream"
 msgstr "Skracanie nie jest dozwolone na podstawowym potoku"
 
 #: ../gio/gcancellable.c:317 ../gio/gdbusconnection.c:1849
-#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:870
-#: ../gio/gsimpleasyncresult.c:896
+#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:871
+#: ../gio/gsimpleasyncresult.c:897
 #, c-format
 msgid "Operation was cancelled"
 msgstr "Działanie zostało anulowane"
@@ -309,29 +309,29 @@ msgid "Not enough space in destination"
 msgstr "Brak wystarczającej ilości miejsca w miejscu docelowym"
 
 #: ../gio/gcharsetconverter.c:342 ../gio/gdatainputstream.c:848
-#: ../gio/gdatainputstream.c:1257 ../glib/gconvert.c:438 ../glib/gconvert.c:845
-#: ../glib/giochannel.c:1556 ../glib/giochannel.c:1598
-#: ../glib/giochannel.c:2442 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
+#: ../gio/gdatainputstream.c:1261 ../glib/gconvert.c:452 ../glib/gconvert.c:877
+#: ../glib/giochannel.c:1557 ../glib/giochannel.c:1599
+#: ../glib/giochannel.c:2443 ../glib/gutf8.c:869 ../glib/gutf8.c:1322
 msgid "Invalid byte sequence in conversion input"
 msgstr "Nieprawidłowa sekwencja bajtów na wejściu konwersji"
 
-#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:446 ../glib/gconvert.c:770
-#: ../glib/giochannel.c:1563 ../glib/giochannel.c:2454
+#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:460 ../glib/gconvert.c:791
+#: ../glib/giochannel.c:1564 ../glib/giochannel.c:2455
 #, c-format
 msgid "Error during conversion: %s"
 msgstr "Błąd podczas konwersji: %s"
 
-#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1096
+#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1104
 msgid "Cancellable initialization not supported"
 msgstr "Zainicjowanie, które można anulować nie jest obsługiwane"
 
-#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:321
-#: ../glib/giochannel.c:1384
+#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:327
+#: ../glib/giochannel.c:1385
 #, c-format
 msgid "Conversion from character set “%s” to “%s” is not supported"
 msgstr "Konwersja z zestawu znaków „%s” na zestaw „%s” nie jest obsługiwana"
 
-#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:325
+#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:331
 #, c-format
 msgid "Could not open converter from “%s” to “%s”"
 msgstr "Nie można otworzyć konwertera z „%s” na „%s”"
@@ -373,13 +373,13 @@ msgstr ""
 msgid "Unexpected early end-of-stream"
 msgstr "Nieoczekiwany, przedwczesny koniec potoku"
 
-#: ../gio/gdbusaddress.c:155 ../gio/gdbusaddress.c:243
-#: ../gio/gdbusaddress.c:324
+#: ../gio/gdbusaddress.c:158 ../gio/gdbusaddress.c:246
+#: ../gio/gdbusaddress.c:327
 #, c-format
 msgid "Unsupported key “%s” in address entry “%s”"
 msgstr "Nieobsługiwany klucz „%s” we wpisie adresu „%s”"
 
-#: ../gio/gdbusaddress.c:182
+#: ../gio/gdbusaddress.c:185
 #, c-format
 msgid ""
 "Address “%s” is invalid (need exactly one of path, tmpdir or abstract keys)"
@@ -387,27 +387,27 @@ msgstr ""
 "Adres „%s” jest nieprawidłowy (wymaga dokładnie jednej ścieżki, katalogu "
 "tymczasowego lub kluczy abstrakcyjnych)"
 
-#: ../gio/gdbusaddress.c:195
+#: ../gio/gdbusaddress.c:198
 #, c-format
 msgid "Meaningless key/value pair combination in address entry “%s”"
 msgstr "Para klucz/wartość we wpisie adresu „%s” nie ma znaczenia"
 
-#: ../gio/gdbusaddress.c:258 ../gio/gdbusaddress.c:339
+#: ../gio/gdbusaddress.c:261 ../gio/gdbusaddress.c:342
 #, c-format
 msgid "Error in address “%s” — the port attribute is malformed"
 msgstr "Błąd w adresie „%s” — atrybut portu jest błędnie sformatowany"
 
-#: ../gio/gdbusaddress.c:269 ../gio/gdbusaddress.c:350
+#: ../gio/gdbusaddress.c:272 ../gio/gdbusaddress.c:353
 #, c-format
 msgid "Error in address “%s” — the family attribute is malformed"
 msgstr "Błąd w adresie „%s” — atrybut rodziny jest błędnie sformatowany"
 
-#: ../gio/gdbusaddress.c:460
+#: ../gio/gdbusaddress.c:463
 #, c-format
 msgid "Address element “%s” does not contain a colon (:)"
 msgstr "Element adresu „%s” nie zawiera dwukropka (:)"
 
-#: ../gio/gdbusaddress.c:481
+#: ../gio/gdbusaddress.c:484
 #, c-format
 msgid ""
 "Key/Value pair %d, “%s”, in address element “%s” does not contain an equal "
@@ -416,7 +416,7 @@ msgstr ""
 "Para klucz/wartość %d, „%s” w elemencie adresu „%s” nie zawiera znaku "
 "równości"
 
-#: ../gio/gdbusaddress.c:495
+#: ../gio/gdbusaddress.c:498
 #, c-format
 msgid ""
 "Error unescaping key or value in Key/Value pair %d, “%s”, in address element "
@@ -425,7 +425,7 @@ msgstr ""
 "Błąd podczas usuwania znaku sterującego klucza lub wartości w parze klucz/"
 "wartość %d, „%s” w elemencie adresu „%s”"
 
-#: ../gio/gdbusaddress.c:573
+#: ../gio/gdbusaddress.c:576
 #, c-format
 msgid ""
 "Error in address “%s” — the unix transport requires exactly one of the keys "
@@ -434,101 +434,101 @@ msgstr ""
 "Błąd w adresie „%s” — transport systemu UNIX wymaga ustawienia dokładnie "
 "jednego z kluczy „path” lub „abstract”"
 
-#: ../gio/gdbusaddress.c:609
+#: ../gio/gdbusaddress.c:612
 #, c-format
 msgid "Error in address “%s” — the host attribute is missing or malformed"
 msgstr ""
 "Błąd w adresie „%s” — brak atrybutu komputera lub jest błędnie sformatowany"
 
-#: ../gio/gdbusaddress.c:623
+#: ../gio/gdbusaddress.c:626
 #, c-format
 msgid "Error in address “%s” — the port attribute is missing or malformed"
 msgstr ""
 "Błąd w adresie „%s” — brak atrybutu portu lub jest błędnie sformatowany"
 
-#: ../gio/gdbusaddress.c:637
+#: ../gio/gdbusaddress.c:640
 #, c-format
 msgid "Error in address “%s” — the noncefile attribute is missing or malformed"
 msgstr ""
 "Błąd w adresie „%s” — brak atrybutu pliku nonce lub jest błędnie sformatowany"
 
-#: ../gio/gdbusaddress.c:658
+#: ../gio/gdbusaddress.c:661
 msgid "Error auto-launching: "
 msgstr "Błąd podczas automatycznego uruchamiania: "
 
-#: ../gio/gdbusaddress.c:666
+#: ../gio/gdbusaddress.c:669
 #, c-format
 msgid "Unknown or unsupported transport “%s” for address “%s”"
 msgstr "Nieznany lub nieobsługiwany transport „%s” dla adresu „%s”"
 
-#: ../gio/gdbusaddress.c:704
+#: ../gio/gdbusaddress.c:714
 #, c-format
 msgid "Error opening nonce file “%s”: %s"
 msgstr "Błąd podczas otwierania pliku nonce „%s”: %s"
 
-#: ../gio/gdbusaddress.c:723
+#: ../gio/gdbusaddress.c:733
 #, c-format
 msgid "Error reading from nonce file “%s”: %s"
 msgstr "Błąd podczas odczytywania pliku nonce „%s”: %s"
 
-#: ../gio/gdbusaddress.c:732
+#: ../gio/gdbusaddress.c:742
 #, c-format
 msgid "Error reading from nonce file “%s”, expected 16 bytes, got %d"
 msgstr ""
 "Błąd podczas odczytywania pliku nonce „%s”, oczekiwano 16 bajtów, otrzymano "
 "%d"
 
-#: ../gio/gdbusaddress.c:750
+#: ../gio/gdbusaddress.c:760
 #, c-format
 msgid "Error writing contents of nonce file “%s” to stream:"
 msgstr "Błąd podczas zapisywania zawartości pliku nonce „%s” do potoku:"
 
-#: ../gio/gdbusaddress.c:959
+#: ../gio/gdbusaddress.c:969
 msgid "The given address is empty"
 msgstr "Podany adres jest pusty"
 
-#: ../gio/gdbusaddress.c:1072
+#: ../gio/gdbusaddress.c:1082
 #, c-format
 msgid "Cannot spawn a message bus when setuid"
 msgstr "Nie można wywołać magistrali komunikatów, kiedy używane jest setuid"
 
-#: ../gio/gdbusaddress.c:1079
+#: ../gio/gdbusaddress.c:1089
 msgid "Cannot spawn a message bus without a machine-id: "
 msgstr ""
 "Nie można wywołać magistrali komunikatów bez identyfikatora komputera: "
 
-#: ../gio/gdbusaddress.c:1086
+#: ../gio/gdbusaddress.c:1096
 #, c-format
 msgid "Cannot autolaunch D-Bus without X11 $DISPLAY"
 msgstr ""
 "Nie można automatycznie uruchomić usługi D-Bus bez zmiennej $DISPLAY "
 "środowiska X11"
 
-#: ../gio/gdbusaddress.c:1128
+#: ../gio/gdbusaddress.c:1138
 #, c-format
 msgid "Error spawning command line “%s”: "
 msgstr "Błąd podczas wywoływania wiersza poleceń „%s”: "
 
-#: ../gio/gdbusaddress.c:1345
+#: ../gio/gdbusaddress.c:1355
 #, c-format
 msgid "(Type any character to close this window)\n"
 msgstr "(Wpisanie dowolnego znaku zamknie to okno)\n"
 
-#: ../gio/gdbusaddress.c:1499
+#: ../gio/gdbusaddress.c:1509
 #, c-format
 msgid "Session dbus not running, and autolaunch failed"
 msgstr ""
 "Magistrala D-Bus sesji nie jest uruchomiona, i automatyczne uruchomienie się "
 "nie powiodło"
 
-#: ../gio/gdbusaddress.c:1510
+#: ../gio/gdbusaddress.c:1520
 #, c-format
 msgid "Cannot determine session bus address (not implemented for this OS)"
 msgstr ""
 "Nie można ustalić adresu magistrali sesji (nie jest zaimplementowane dla "
 "tego systemu operacyjnego)"
 
-#: ../gio/gdbusaddress.c:1648
+#: ../gio/gdbusaddress.c:1658
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -537,7 +537,7 @@ msgstr ""
 "Nie można ustalić adresu magistrali ze zmiennej środowiskowej "
 "DBUS_STARTER_BUS_TYPE — nieznana wartość „%s”"
 
-#: ../gio/gdbusaddress.c:1657 ../gio/gdbusconnection.c:7155
+#: ../gio/gdbusaddress.c:1667 ../gio/gdbusconnection.c:7158
 msgid ""
 "Cannot determine bus address because the DBUS_STARTER_BUS_TYPE environment "
 "variable is not set"
@@ -545,7 +545,7 @@ msgstr ""
 "Nie można ustalić adresu magistrali, ponieważ nie ustawiono zmiennej "
 "środowiskowej DBUS_STARTER_BUS_TYPE"
 
-#: ../gio/gdbusaddress.c:1667
+#: ../gio/gdbusaddress.c:1677
 #, c-format
 msgid "Unknown bus type %d"
 msgstr "Nieznany typ magistrali %d"
@@ -567,7 +567,7 @@ msgstr ""
 "Wyczerpano wszystkie dostępne mechanizmy uwierzytelniania (próby: %s, "
 "dostępne: %s)"
 
-#: ../gio/gdbusauth.c:1174
+#: ../gio/gdbusauth.c:1171
 msgid "Cancelled via GDBusAuthObserver::authorize-authenticated-peer"
 msgstr "Anulowano przez GDBusAuthObserver::authorize-authenticated-peer"
 
@@ -594,13 +594,13 @@ msgstr "Błąd podczas tworzenia katalogu „%s”: %s"
 msgid "Error opening keyring “%s” for reading: "
 msgstr "Błąd podczas otwierania bazy kluczy „%s” do odczytania: "
 
-#: ../gio/gdbusauthmechanismsha1.c:403 ../gio/gdbusauthmechanismsha1.c:721
+#: ../gio/gdbusauthmechanismsha1.c:402 ../gio/gdbusauthmechanismsha1.c:720
 #, c-format
 msgid "Line %d of the keyring at “%s” with content “%s” is malformed"
 msgstr ""
 "%d. wiersz bazy kluczy w „%s” z zawartością „%s” jest błędnie sformatowany"
 
-#: ../gio/gdbusauthmechanismsha1.c:417 ../gio/gdbusauthmechanismsha1.c:735
+#: ../gio/gdbusauthmechanismsha1.c:416 ../gio/gdbusauthmechanismsha1.c:734
 #, c-format
 msgid ""
 "First token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -608,7 +608,7 @@ msgstr ""
 "Pierwszy token %d. wiersza bazy kluczy w „%s” z zawartością „%s” jest "
 "błędnie sformatowany"
 
-#: ../gio/gdbusauthmechanismsha1.c:432 ../gio/gdbusauthmechanismsha1.c:749
+#: ../gio/gdbusauthmechanismsha1.c:430 ../gio/gdbusauthmechanismsha1.c:748
 #, c-format
 msgid ""
 "Second token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -616,7 +616,7 @@ msgstr ""
 "Drugi token %d. wiersza bazy kluczy w „%s” z zawartością „%s” jest błędnie "
 "sformatowany"
 
-#: ../gio/gdbusauthmechanismsha1.c:456
+#: ../gio/gdbusauthmechanismsha1.c:454
 #, c-format
 msgid "Didn’t find cookie with id %d in the keyring at “%s”"
 msgstr "Nie odnaleziono ciasteczka z identyfikatorem %d w bazie kluczy w „%s”"
@@ -626,27 +626,27 @@ msgstr "Nie odnaleziono ciasteczka z identyfikatorem %d w bazie kluczy w „%
 msgid "Error deleting stale lock file “%s”: %s"
 msgstr "Błąd podczas usuwania starego pliku blokady „%s”: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:569
+#: ../gio/gdbusauthmechanismsha1.c:568
 #, c-format
 msgid "Error creating lock file “%s”: %s"
 msgstr "Błąd podczas tworzenia pliku blokady „%s”: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:600
+#: ../gio/gdbusauthmechanismsha1.c:599
 #, c-format
 msgid "Error closing (unlinked) lock file “%s”: %s"
 msgstr "Błąd podczas zamykania (niedowiązanego) pliku blokady „%s”: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:611
+#: ../gio/gdbusauthmechanismsha1.c:610
 #, c-format
 msgid "Error unlinking lock file “%s”: %s"
 msgstr "Błąd podczas odwiązywania pliku blokady „%s”: %s"
 
-#: ../gio/gdbusauthmechanismsha1.c:688
+#: ../gio/gdbusauthmechanismsha1.c:687
 #, c-format
 msgid "Error opening keyring “%s” for writing: "
 msgstr "Błąd podczas otwierania bazy kluczy „%s” do zapisania: "
 
-#: ../gio/gdbusauthmechanismsha1.c:885
+#: ../gio/gdbusauthmechanismsha1.c:883
 #, c-format
 msgid "(Additionally, releasing the lock for “%s” also failed: %s) "
 msgstr "(Dodatkowo, uwolnienie blokady „%s” także się nie powiodło: %s) "
@@ -695,12 +695,12 @@ msgstr ""
 "„%s”"
 
 #: ../gio/gdbusconnection.c:4414 ../gio/gdbusconnection.c:4622
-#: ../gio/gdbusconnection.c:6586
+#: ../gio/gdbusconnection.c:6589
 #, c-format
 msgid "No such interface '%s'"
 msgstr "Brak interfejsu „%s”"
 
-#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7095
+#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7098
 #, c-format
 msgid "No such interface '%s' on object at path %s"
 msgstr "Brak interfejsu „%s” w obiekcie w ścieżce %s"
@@ -735,17 +735,17 @@ msgstr "Nie można ustawić właściwości %s.%s"
 msgid "Method '%s' returned type '%s', but expected '%s'"
 msgstr "Metoda „%s” zwróciła typ „%s”, ale oczekiwano „%s”"
 
-#: ../gio/gdbusconnection.c:6697
+#: ../gio/gdbusconnection.c:6700
 #, c-format
 msgid "Method '%s' on interface '%s' with signature '%s' does not exist"
 msgstr "Metoda „%s” w interfejsie „%s” z podpisem „%s” nie istnieje"
 
-#: ../gio/gdbusconnection.c:6818
+#: ../gio/gdbusconnection.c:6821
 #, c-format
 msgid "A subtree is already exported for %s"
 msgstr "Poddrzewo zostało już wyeksportowane dla %s"
 
-#: ../gio/gdbusconnection.c:7146
+#: ../gio/gdbusconnection.c:7149
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
@@ -813,18 +813,18 @@ msgstr ""
 "w wyrównaniu bajtu %d (długość ciągu wynosi %d). Prawidłowy ciąg UTF-8 do "
 "tego miejsca to „%s”"
 
-#: ../gio/gdbusmessage.c:1589
+#: ../gio/gdbusmessage.c:1593
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus object path"
 msgstr ""
 "Przetworzona wartość „%s” nie jest prawidłową ścieżką do obiektu usługi D-Bus"
 
-#: ../gio/gdbusmessage.c:1611
+#: ../gio/gdbusmessage.c:1615
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature"
 msgstr "Przetworzona wartość „%s” nie jest prawidłowym podpisem usługi D-Bus"
 
-#: ../gio/gdbusmessage.c:1658
+#: ../gio/gdbusmessage.c:1662
 #, c-format
 msgid ""
 "Encountered array of length %u byte. Maximum length is 2<<26 bytes (64 MiB)."
@@ -840,7 +840,7 @@ msgstr[2] ""
 "Wystąpiła macierz o długości %u bajtów. Maksymalna długość to 2<<26 bajtów "
 "(64 MiB)."
 
-#: ../gio/gdbusmessage.c:1678
+#: ../gio/gdbusmessage.c:1682
 #, c-format
 msgid ""
 "Encountered array of type “a%c”, expected to have a length a multiple of %u "
@@ -849,14 +849,14 @@ msgstr ""
 "Wystąpiła macierz typu „a%c”, której oczekiwana długość jest wielokrotnością "
 "%u B, ale wynosi %u B"
 
-#: ../gio/gdbusmessage.c:1845
+#: ../gio/gdbusmessage.c:1849
 #, c-format
 msgid "Parsed value “%s” for variant is not a valid D-Bus signature"
 msgstr ""
 "Przetworzona wartość „%s” dla wariantu nie jest prawidłowym podpisem usługi "
 "D-Bus"
 
-#: ../gio/gdbusmessage.c:1869
+#: ../gio/gdbusmessage.c:1873
 #, c-format
 msgid ""
 "Error deserializing GVariant with type string “%s” from the D-Bus wire format"
@@ -864,7 +864,7 @@ msgstr ""
 "Błąd podczas deserializowania GVariant za pomocą ciągu typu „%s” z formatu "
 "przewodu usługi D-Bus"
 
-#: ../gio/gdbusmessage.c:2053
+#: ../gio/gdbusmessage.c:2055
 #, c-format
 msgid ""
 "Invalid endianness value. Expected 0x6c (“l”) or 0x42 (“B”) but found value "
@@ -873,26 +873,26 @@ msgstr ""
 "Nieprawidłowa wartość kolejności bajtów. Oczekiwano 0x6c („l”) lub 0x42 "
 "(„B”), ale odnaleziono wartość 0x%02x"
 
-#: ../gio/gdbusmessage.c:2066
+#: ../gio/gdbusmessage.c:2068
 #, c-format
 msgid "Invalid major protocol version. Expected 1 but found %d"
 msgstr ""
 "Nieprawidłowa główna wersja protokołu. Oczekiwano 1, ale odnaleziono %d"
 
-#: ../gio/gdbusmessage.c:2122
+#: ../gio/gdbusmessage.c:2124
 #, c-format
 msgid "Signature header with signature “%s” found but message body is empty"
 msgstr ""
 "Odnaleziono nagłówek podpisu z podpisem „%s”, ale treść komunikatu jest pusta"
 
-#: ../gio/gdbusmessage.c:2136
+#: ../gio/gdbusmessage.c:2138
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature (for body)"
 msgstr ""
 "Przetworzona wartość „%s” nie jest prawidłowym podpisem usługi D-Bus (dla "
 "treści)"
 
-#: ../gio/gdbusmessage.c:2166
+#: ../gio/gdbusmessage.c:2168
 #, c-format
 msgid "No signature header in message but the message body is %u byte"
 msgid_plural "No signature header in message but the message body is %u bytes"
@@ -903,11 +903,11 @@ msgstr[1] ""
 msgstr[2] ""
 "Brak nagłówka podpisu w komunikacie, ale treść komunikatu liczy %u bajtów"
 
-#: ../gio/gdbusmessage.c:2176
+#: ../gio/gdbusmessage.c:2178
 msgid "Cannot deserialize message: "
 msgstr "Nie można deserializować komunikatu: "
 
-#: ../gio/gdbusmessage.c:2517
+#: ../gio/gdbusmessage.c:2519
 #, c-format
 msgid ""
 "Error serializing GVariant with type string “%s” to the D-Bus wire format"
@@ -915,42 +915,40 @@ msgstr ""
 "Błąd podczas serializowania GVariant za pomocą ciągu typu „%s” z formatu "
 "przewodu usługi D-Bus"
 
-#: ../gio/gdbusmessage.c:2654
+#: ../gio/gdbusmessage.c:2656
 #, c-format
 msgid ""
-"Message has %d file descriptors but the header field indicates %d file "
-"descriptors"
+"Number of file descriptors in message (%d) differs from header field (%d)"
 msgstr ""
-"Komunikat ma %d deskryptorów plików, ale pole nagłówka wskazuje na %d "
-"deskryptorów plików"
+"Liczba deskryptorów plików w komunikacie (%d) różni się od pola nagłówka (%d)"
 
-#: ../gio/gdbusmessage.c:2662
+#: ../gio/gdbusmessage.c:2664
 msgid "Cannot serialize message: "
 msgstr "Nie można serializować komunikatu: "
 
-#: ../gio/gdbusmessage.c:2706
+#: ../gio/gdbusmessage.c:2708
 #, c-format
 msgid "Message body has signature “%s” but there is no signature header"
 msgstr "Treść komunikatu ma podpis „%s”, ale brak nagłówka podpisu"
 
-#: ../gio/gdbusmessage.c:2716
+#: ../gio/gdbusmessage.c:2718
 #, c-format
 msgid ""
 "Message body has type signature “%s” but signature in the header field is "
 "“%s”"
 msgstr "Treść komunikatu ma podpis „%s”, ale podpis w polu nagłówka to „%s”"
 
-#: ../gio/gdbusmessage.c:2732
+#: ../gio/gdbusmessage.c:2734
 #, c-format
 msgid "Message body is empty but signature in the header field is “(%s)”"
 msgstr "Treść komunikatu jest pusta, ale podpis w polu nagłówka to „(%s)”"
 
-#: ../gio/gdbusmessage.c:3285
+#: ../gio/gdbusmessage.c:3287
 #, c-format
 msgid "Error return with body of type “%s”"
 msgstr "Błąd zwrotu z treścią typu „%s”"
 
-#: ../gio/gdbusmessage.c:3293
+#: ../gio/gdbusmessage.c:3295
 msgid "Error return with empty body"
 msgstr "Błąd zwrotu z pustą treścią"
 
@@ -1028,60 +1026,60 @@ msgstr ""
 "\n"
 "Polecenie „%s POLECENIE --help” wyświetla pomoc o każdym poleceniu.\n"
 
-#: ../gio/gdbus-tool.c:165 ../gio/gdbus-tool.c:227 ../gio/gdbus-tool.c:299
-#: ../gio/gdbus-tool.c:323 ../gio/gdbus-tool.c:725 ../gio/gdbus-tool.c:1068
-#: ../gio/gdbus-tool.c:1510
+#: ../gio/gdbus-tool.c:167 ../gio/gdbus-tool.c:234 ../gio/gdbus-tool.c:306
+#: ../gio/gdbus-tool.c:330 ../gio/gdbus-tool.c:811 ../gio/gdbus-tool.c:1150
+#: ../gio/gdbus-tool.c:1592
 #, c-format
 msgid "Error: %s\n"
 msgstr "Błąd: %s\n"
 
-#: ../gio/gdbus-tool.c:176 ../gio/gdbus-tool.c:240 ../gio/gdbus-tool.c:1526
+#: ../gio/gdbus-tool.c:178 ../gio/gdbus-tool.c:247 ../gio/gdbus-tool.c:1608
 #, c-format
 msgid "Error parsing introspection XML: %s\n"
 msgstr "Błąd podczas przetwarzania kodu XML introspekcji: %s\n"
 
-#: ../gio/gdbus-tool.c:209
+#: ../gio/gdbus-tool.c:216
 #, c-format
 msgid "Error: %s is not a valid name\n"
 msgstr "Błąd: %s nie jest prawidłową nazwą\n"
 
-#: ../gio/gdbus-tool.c:357
+#: ../gio/gdbus-tool.c:364
 msgid "Connect to the system bus"
 msgstr "Łączy z magistralą systemową"
 
-#: ../gio/gdbus-tool.c:358
+#: ../gio/gdbus-tool.c:365
 msgid "Connect to the session bus"
 msgstr "Łączy z magistralą sesji"
 
-#: ../gio/gdbus-tool.c:359
+#: ../gio/gdbus-tool.c:366
 msgid "Connect to given D-Bus address"
 msgstr "Łączy z podanym adresem usługi D-Bus"
 
-#: ../gio/gdbus-tool.c:369
+#: ../gio/gdbus-tool.c:376
 msgid "Connection Endpoint Options:"
 msgstr "Opcje punktów końcowych połączenia:"
 
-#: ../gio/gdbus-tool.c:370
+#: ../gio/gdbus-tool.c:377
 msgid "Options specifying the connection endpoint"
 msgstr "Opcje określające punkt końcowy połączenia"
 
-#: ../gio/gdbus-tool.c:392
+#: ../gio/gdbus-tool.c:399
 #, c-format
 msgid "No connection endpoint specified"
 msgstr "Nie określono żadnych punktów końcowych połączenia"
 
-#: ../gio/gdbus-tool.c:402
+#: ../gio/gdbus-tool.c:409
 #, c-format
 msgid "Multiple connection endpoints specified"
 msgstr "Określono wiele punktów końcowych połączenia"
 
-#: ../gio/gdbus-tool.c:472
+#: ../gio/gdbus-tool.c:479
 #, c-format
 msgid ""
 "Warning: According to introspection data, interface “%s” does not exist\n"
 msgstr "Ostrzeżenie: według danych introspekcji, interfejs „%s” nie istnieje\n"
 
-#: ../gio/gdbus-tool.c:481
+#: ../gio/gdbus-tool.c:488
 #, c-format
 msgid ""
 "Warning: According to introspection data, method “%s” does not exist on "
@@ -1090,166 +1088,168 @@ msgstr ""
 "Ostrzeżenie: według danych introspekcji, metoda „%s” nie istnieje "
 "w interfejsie „%s”\n"
 
-#: ../gio/gdbus-tool.c:543
+#: ../gio/gdbus-tool.c:550
 msgid "Optional destination for signal (unique name)"
 msgstr "Opcjonalny cel sygnału (unikalna nazwa)"
 
-#: ../gio/gdbus-tool.c:544
+#: ../gio/gdbus-tool.c:551
 msgid "Object path to emit signal on"
 msgstr "Ścieżka do obiektu do wyemitowania sygnału"
 
-#: ../gio/gdbus-tool.c:545
+#: ../gio/gdbus-tool.c:552
 msgid "Signal and interface name"
 msgstr "Nazwa sygnału i interfejsu"
 
-#: ../gio/gdbus-tool.c:579
+#: ../gio/gdbus-tool.c:587
 msgid "Emit a signal."
 msgstr "Emituje sygnał."
 
-#: ../gio/gdbus-tool.c:613 ../gio/gdbus-tool.c:858 ../gio/gdbus-tool.c:1616
-#: ../gio/gdbus-tool.c:1851 ../gio/gdbus-tool.c:2067
+#: ../gio/gdbus-tool.c:642 ../gio/gdbus-tool.c:944 ../gio/gdbus-tool.c:1698
+#: ../gio/gdbus-tool.c:1931 ../gio/gdbus-tool.c:2152
 #, c-format
 msgid "Error connecting: %s\n"
 msgstr "Błąd podczas łączenia: %s\n"
 
-#: ../gio/gdbus-tool.c:625
+#: ../gio/gdbus-tool.c:659 ../gio/gdbus-tool.c:961 ../gio/gdbus-tool.c:1715
+#: ../gio/gdbus-tool.c:1956
+#, c-format
+msgid "Error: Destination is not specified\n"
+msgstr "Błąd: nie podano celu\n"
+
+#: ../gio/gdbus-tool.c:670
 #, c-format
-msgid "Error: object path not specified.\n"
-msgstr "Błąd: nie podano ścieżki do obiektu.\n"
+msgid "Error: %s is not a valid unique bus name.\n"
+msgstr "Błąd: %s nie jest prawidłową unikalną nazwą magistrali.\n"
 
-#: ../gio/gdbus-tool.c:630 ../gio/gdbus-tool.c:925 ../gio/gdbus-tool.c:1681
-#: ../gio/gdbus-tool.c:1917
+#: ../gio/gdbus-tool.c:685 ../gio/gdbus-tool.c:987 ../gio/gdbus-tool.c:1741
+#, c-format
+msgid "Error: Object path is not specified\n"
+msgstr "Błąd: nie podano ścieżki do obiektu\n"
+
+#: ../gio/gdbus-tool.c:705 ../gio/gdbus-tool.c:1007 ../gio/gdbus-tool.c:1761
+#: ../gio/gdbus-tool.c:2002
 #, c-format
 msgid "Error: %s is not a valid object path\n"
 msgstr "Błąd: %s nie jest prawidłową ścieżką do obiektu\n"
 
-#: ../gio/gdbus-tool.c:636
+#: ../gio/gdbus-tool.c:720
 #, c-format
-msgid "Error: signal not specified.\n"
-msgstr "Błąd: nie podano sygnału.\n"
+msgid "Error: Signal name is not specified\n"
+msgstr "Błąd: nie podano nazwy sygnału\n"
 
-#: ../gio/gdbus-tool.c:643
+#: ../gio/gdbus-tool.c:731
 #, c-format
-msgid "Error: signal must be the fully-qualified name.\n"
-msgstr "Błąd: sygnał musi być w pełni kwalifikowaną nazwą.\n"
+msgid "Error: Signal name “%s” is invalid\n"
+msgstr "Błąd: nazwa sygnału „%s” jest nieprawidłowa\n"
 
-#: ../gio/gdbus-tool.c:651
+#: ../gio/gdbus-tool.c:743
 #, c-format
 msgid "Error: %s is not a valid interface name\n"
 msgstr "Błąd: %s nie jest prawidłową nazwą interfejsu\n"
 
-#: ../gio/gdbus-tool.c:657
+#: ../gio/gdbus-tool.c:749
 #, c-format
 msgid "Error: %s is not a valid member name\n"
 msgstr "Błąd: %s nie jest prawidłową nazwą elementu\n"
 
-#: ../gio/gdbus-tool.c:663
-#, c-format
-msgid "Error: %s is not a valid unique bus name.\n"
-msgstr "Błąd: %s nie jest prawidłową unikalną nazwą magistrali.\n"
-
 #. Use the original non-"parse-me-harder" error
-#: ../gio/gdbus-tool.c:700 ../gio/gdbus-tool.c:1037
+#: ../gio/gdbus-tool.c:786 ../gio/gdbus-tool.c:1119
 #, c-format
 msgid "Error parsing parameter %d: %s\n"
 msgstr "Błąd podczas przetwarzania parametru %d: %s\n"
 
-#: ../gio/gdbus-tool.c:732
+#: ../gio/gdbus-tool.c:818
 #, c-format
 msgid "Error flushing connection: %s\n"
 msgstr "Błąd podczas czyszczenia połączenia: %s\n"
 
-#: ../gio/gdbus-tool.c:759
+#: ../gio/gdbus-tool.c:845
 msgid "Destination name to invoke method on"
 msgstr "Nazwa docelowa do wywołania na niej metody"
 
-#: ../gio/gdbus-tool.c:760
+#: ../gio/gdbus-tool.c:846
 msgid "Object path to invoke method on"
 msgstr "Ścieżka do obiektu do wywołania na niej metody"
 
-#: ../gio/gdbus-tool.c:761
+#: ../gio/gdbus-tool.c:847
 msgid "Method and interface name"
 msgstr "Nazwa metody i interfejsu"
 
-#: ../gio/gdbus-tool.c:762
+#: ../gio/gdbus-tool.c:848
 msgid "Timeout in seconds"
 msgstr "Czas oczekiwania w sekundach"
 
-#: ../gio/gdbus-tool.c:803
+#: ../gio/gdbus-tool.c:889
 msgid "Invoke a method on a remote object."
 msgstr "Wywołuje metodę na zdalnym obiekcie."
 
-#: ../gio/gdbus-tool.c:878 ../gio/gdbus-tool.c:1635 ../gio/gdbus-tool.c:1870
-#, c-format
-msgid "Error: Destination is not specified\n"
-msgstr "Błąd: nie podano celu\n"
-
-#: ../gio/gdbus-tool.c:890 ../gio/gdbus-tool.c:1652 ../gio/gdbus-tool.c:1882
+#: ../gio/gdbus-tool.c:972 ../gio/gdbus-tool.c:1732 ../gio/gdbus-tool.c:1967
 #, c-format
 msgid "Error: %s is not a valid bus name\n"
 msgstr "Błąd: %s nie jest prawidłową nazwą magistrali\n"
 
-#: ../gio/gdbus-tool.c:905 ../gio/gdbus-tool.c:1661
-#, c-format
-msgid "Error: Object path is not specified\n"
-msgstr "Błąd: nie podano ścieżki do obiektu\n"
-
-#: ../gio/gdbus-tool.c:940
+#: ../gio/gdbus-tool.c:1022
 #, c-format
 msgid "Error: Method name is not specified\n"
 msgstr "Błąd: nie podano nazwy metody\n"
 
-#: ../gio/gdbus-tool.c:951
+#: ../gio/gdbus-tool.c:1033
 #, c-format
 msgid "Error: Method name “%s” is invalid\n"
 msgstr "Błąd: nazwa metody „%s” jest nieprawidłowa\n"
 
-#: ../gio/gdbus-tool.c:1029
+#: ../gio/gdbus-tool.c:1111
 #, c-format
 msgid "Error parsing parameter %d of type “%s”: %s\n"
 msgstr "Błąd podczas przetwarzania parametru %d typu „%s”: %s\n"
 
-#: ../gio/gdbus-tool.c:1473
+#: ../gio/gdbus-tool.c:1555
 msgid "Destination name to introspect"
 msgstr "Nazwa docelowa do zbadania"
 
-#: ../gio/gdbus-tool.c:1474
+#: ../gio/gdbus-tool.c:1556
 msgid "Object path to introspect"
 msgstr "Ścieżka do obiektu do zbadania"
 
-#: ../gio/gdbus-tool.c:1475
+#: ../gio/gdbus-tool.c:1557
 msgid "Print XML"
 msgstr "Wyświetla kod XML"
 
-#: ../gio/gdbus-tool.c:1476
+#: ../gio/gdbus-tool.c:1558
 msgid "Introspect children"
 msgstr "Bada elementy potomne"
 
-#: ../gio/gdbus-tool.c:1477
+#: ../gio/gdbus-tool.c:1559
 msgid "Only print properties"
 msgstr "Wyświetla tylko właściwości"
 
-#: ../gio/gdbus-tool.c:1568
+#: ../gio/gdbus-tool.c:1650
 msgid "Introspect a remote object."
 msgstr "Bada zdalny obiekt."
 
-#: ../gio/gdbus-tool.c:1773
+#: ../gio/gdbus-tool.c:1853
 msgid "Destination name to monitor"
 msgstr "Nazwa docelowa do monitorowania"
 
-#: ../gio/gdbus-tool.c:1774
+#: ../gio/gdbus-tool.c:1854
 msgid "Object path to monitor"
 msgstr "Ścieżka do obiektu do monitorowania"
 
-#: ../gio/gdbus-tool.c:1803
+#: ../gio/gdbus-tool.c:1883
 msgid "Monitor a remote object."
 msgstr "Monitoruje zdalny obiekt."
 
-#: ../gio/gdbus-tool.c:1980
+#: ../gio/gdbus-tool.c:1941
+#, c-format
+msgid "Error: can’t monitor a non-message-bus connection\n"
+msgstr ""
+"Błąd: nie można monitorować połączenia niebędącego magistralą komunikatów\n"
+
+#: ../gio/gdbus-tool.c:2065
 msgid "Service to activate before waiting for the other one (well-known name)"
 msgstr "Usługa do aktywowania przed oczekiwaniem na drugą (znaną nazwę)"
 
-#: ../gio/gdbus-tool.c:1983
+#: ../gio/gdbus-tool.c:2068
 msgid ""
 "Timeout to wait for before exiting with an error (seconds); 0 for no timeout "
 "(default)"
@@ -1257,35 +1257,35 @@ msgstr ""
 "Czas oczekiwania przed zakończeniem z błędem (w sekundach), 0 oznacza brak "
 "ograniczenia (domyślne)"
 
-#: ../gio/gdbus-tool.c:2031
+#: ../gio/gdbus-tool.c:2116
 msgid "[OPTION…] BUS-NAME"
 msgstr "[OPCJA…] NAZWA-MAGISTRALI"
 
-#: ../gio/gdbus-tool.c:2033
+#: ../gio/gdbus-tool.c:2118
 msgid "Wait for a bus name to appear."
 msgstr "Oczekuje na pojawienie się nazwy magistrali."
 
-#: ../gio/gdbus-tool.c:2109
+#: ../gio/gdbus-tool.c:2194
 #, c-format
 msgid "Error: A service to activate for must be specified.\n"
 msgstr "Błąd: należy podać usługę, dla której aktywować.\n"
 
-#: ../gio/gdbus-tool.c:2114
+#: ../gio/gdbus-tool.c:2199
 #, c-format
 msgid "Error: A service to wait for must be specified.\n"
 msgstr "Błąd: należy podać usługę, na którą oczekiwać.\n"
 
-#: ../gio/gdbus-tool.c:2119
+#: ../gio/gdbus-tool.c:2204
 #, c-format
 msgid "Error: Too many arguments.\n"
 msgstr "Błąd: za dużo parametrów.\n"
 
-#: ../gio/gdbus-tool.c:2127 ../gio/gdbus-tool.c:2134
+#: ../gio/gdbus-tool.c:2212 ../gio/gdbus-tool.c:2219
 #, c-format
 msgid "Error: %s is not a valid well-known bus name.\n"
 msgstr "Błąd: %s nie jest prawidłową znaną nazwą magistrali.\n"
 
-#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4533
+#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4566
 msgid "Unnamed"
 msgstr "Bez nazwy"
 
@@ -1293,31 +1293,31 @@ msgstr "Bez nazwy"
 msgid "Desktop file didn’t specify Exec field"
 msgstr "Plik .desktop nie określa pola Exec"
 
-#: ../gio/gdesktopappinfo.c:2696
+#: ../gio/gdesktopappinfo.c:2701
 msgid "Unable to find terminal required for application"
 msgstr "Nie można odnaleźć terminala wymaganego przez program"
 
-#: ../gio/gdesktopappinfo.c:3129
+#: ../gio/gdesktopappinfo.c:3135
 #, c-format
 msgid "Can’t create user application configuration folder %s: %s"
 msgstr ""
 "Nie można utworzyć katalogu użytkownika dla konfiguracji programu %s: %s"
 
-#: ../gio/gdesktopappinfo.c:3133
+#: ../gio/gdesktopappinfo.c:3139
 #, c-format
 msgid "Can’t create user MIME configuration folder %s: %s"
 msgstr "Nie można utworzyć katalogu użytkownika dla konfiguracji MIME %s: %s"
 
-#: ../gio/gdesktopappinfo.c:3373 ../gio/gdesktopappinfo.c:3397
+#: ../gio/gdesktopappinfo.c:3379 ../gio/gdesktopappinfo.c:3403
 msgid "Application information lacks an identifier"
 msgstr "Brak identyfikatora w informacjach o programie"
 
-#: ../gio/gdesktopappinfo.c:3631
+#: ../gio/gdesktopappinfo.c:3637
 #, c-format
 msgid "Can’t create user desktop file %s"
 msgstr "Nie można utworzyć pliku .desktop dla użytkownika %s"
 
-#: ../gio/gdesktopappinfo.c:3765
+#: ../gio/gdesktopappinfo.c:3771
 #, c-format
 msgid "Custom definition for %s"
 msgstr "Własna definicja dla %s"
@@ -1378,14 +1378,14 @@ msgstr "Błędna liczba elementów (%d) w kodowaniu GEmblemedIcon"
 msgid "Expected a GEmblem for GEmblemedIcon"
 msgstr "Oczekiwano obiektu GEmblem dla GEmblemedIcon"
 
-#: ../gio/gfile.c:969 ../gio/gfile.c:1207 ../gio/gfile.c:1345
-#: ../gio/gfile.c:1583 ../gio/gfile.c:1638 ../gio/gfile.c:1696
-#: ../gio/gfile.c:1780 ../gio/gfile.c:1837 ../gio/gfile.c:1901
-#: ../gio/gfile.c:1956 ../gio/gfile.c:3602 ../gio/gfile.c:3657
-#: ../gio/gfile.c:3893 ../gio/gfile.c:3935 ../gio/gfile.c:4403
-#: ../gio/gfile.c:4814 ../gio/gfile.c:4899 ../gio/gfile.c:4989
-#: ../gio/gfile.c:5086 ../gio/gfile.c:5173 ../gio/gfile.c:5274
-#: ../gio/gfile.c:7815 ../gio/gfile.c:7905 ../gio/gfile.c:7989
+#: ../gio/gfile.c:1071 ../gio/gfile.c:1309 ../gio/gfile.c:1447
+#: ../gio/gfile.c:1685 ../gio/gfile.c:1740 ../gio/gfile.c:1798
+#: ../gio/gfile.c:1882 ../gio/gfile.c:1939 ../gio/gfile.c:2003
+#: ../gio/gfile.c:2058 ../gio/gfile.c:3704 ../gio/gfile.c:3759
+#: ../gio/gfile.c:3995 ../gio/gfile.c:4037 ../gio/gfile.c:4505
+#: ../gio/gfile.c:4916 ../gio/gfile.c:5001 ../gio/gfile.c:5091
+#: ../gio/gfile.c:5188 ../gio/gfile.c:5275 ../gio/gfile.c:5376
+#: ../gio/gfile.c:7954 ../gio/gfile.c:8044 ../gio/gfile.c:8128
 #: ../gio/win32/gwinhttpfile.c:437
 msgid "Operation not supported"
 msgstr "Działanie nie jest obsługiwane"
@@ -1394,70 +1394,70 @@ msgstr "Działanie nie jest obsługiwane"
 #. * trying to find the enclosing (user visible)
 #. * mount of a file, but none exists.
 #.
-#: ../gio/gfile.c:1468
+#: ../gio/gfile.c:1570
 msgid "Containing mount does not exist"
 msgstr "Nie istnieje zawierający punkt montowania"
 
-#: ../gio/gfile.c:2515 ../gio/glocalfile.c:2377
+#: ../gio/gfile.c:2617 ../gio/glocalfile.c:2446
 msgid "Can’t copy over directory"
 msgstr "Nie można skopiować na katalog"
 
-#: ../gio/gfile.c:2575
+#: ../gio/gfile.c:2677
 msgid "Can’t copy directory over directory"
 msgstr "Nie można skopiować katalogu na katalog"
 
-#: ../gio/gfile.c:2583
+#: ../gio/gfile.c:2685
 msgid "Target file exists"
 msgstr "Plik docelowy istnieje"
 
-#: ../gio/gfile.c:2602
+#: ../gio/gfile.c:2704
 msgid "Can’t recursively copy directory"
 msgstr "Nie można skopiować katalogu rekurencyjnie"
 
-#: ../gio/gfile.c:2877
+#: ../gio/gfile.c:2979
 msgid "Splice not supported"
 msgstr "Wywołanie „splice” nie jest obsługiwane"
 
-#: ../gio/gfile.c:2881
+#: ../gio/gfile.c:2983
 #, c-format
 msgid "Error splicing file: %s"
 msgstr "Błąd podczas dzielenia pliku: %s"
 
-#: ../gio/gfile.c:3013
+#: ../gio/gfile.c:3115
 msgid "Copy (reflink/clone) between mounts is not supported"
 msgstr ""
 "Kopiowanie (reflink/clone) między punktami montowania nie jest obsługiwane"
 
-#: ../gio/gfile.c:3017
+#: ../gio/gfile.c:3119
 msgid "Copy (reflink/clone) is not supported or invalid"
 msgstr "Kopiowanie (reflink/clone) nie jest obsługiwane lub jest nieprawidłowe"
 
-#: ../gio/gfile.c:3022
+#: ../gio/gfile.c:3124
 msgid "Copy (reflink/clone) is not supported or didn’t work"
 msgstr "Kopiowanie (reflink/clone) nie jest obsługiwane lub nie zadziałało"
 
-#: ../gio/gfile.c:3085
+#: ../gio/gfile.c:3187
 msgid "Can’t copy special file"
 msgstr "Nie można skopiować pliku specjalnego"
 
-#: ../gio/gfile.c:3883
+#: ../gio/gfile.c:3985
 msgid "Invalid symlink value given"
 msgstr "Wprowadzono nieprawidłową wartość dowiązania symbolicznego"
 
-#: ../gio/gfile.c:4044
+#: ../gio/gfile.c:4146
 msgid "Trash not supported"
 msgstr "Kosz nie jest obsługiwany"
 
-#: ../gio/gfile.c:4156
+#: ../gio/gfile.c:4258
 #, c-format
 msgid "File names cannot contain “%c”"
 msgstr "Nazwy plików nie mogą zawierać „%c”"
 
-#: ../gio/gfile.c:6602 ../gio/gvolume.c:363
+#: ../gio/gfile.c:6739 ../gio/gvolume.c:363
 msgid "volume doesn’t implement mount"
 msgstr "wolumin nie obsługuje montowania"
 
-#: ../gio/gfile.c:6711
+#: ../gio/gfile.c:6848
 msgid "No application is registered as handling this file"
 msgstr "Żaden program nie jest zarejestrowany do obsługi tego pliku"
 
@@ -1503,7 +1503,7 @@ msgid "Truncate not supported on stream"
 msgstr "Skracanie nie jest dozwolone na potoku"
 
 #: ../gio/ghttpproxy.c:91 ../gio/gresolver.c:410 ../gio/gresolver.c:476
-#: ../glib/gconvert.c:1650
+#: ../glib/gconvert.c:1777
 msgid "Invalid hostname"
 msgstr "Nieprawidłowa nazwa komputera"
 
@@ -1585,7 +1585,7 @@ msgid "Could not parse “%s” as IP address mask"
 msgstr "Nie można przetworzyć „%s” jako maskę adresu IP"
 
 #: ../gio/ginetsocketaddress.c:203 ../gio/ginetsocketaddress.c:220
-#: ../gio/gnativesocketaddress.c:106 ../gio/gunixsocketaddress.c:218
+#: ../gio/gnativesocketaddress.c:109 ../gio/gunixsocketaddress.c:218
 msgid "Not enough space for socket address"
 msgstr "Brak wystarczającej ilości miejsca dla adresu gniazda"
 
@@ -1716,7 +1716,7 @@ msgstr "Błąd podczas zapisywania do standardowego wyjścia"
 #: ../gio/gio-tool-monitor.c:37 ../gio/gio-tool-monitor.c:39
 #: ../gio/gio-tool-monitor.c:41 ../gio/gio-tool-monitor.c:43
 #: ../gio/gio-tool-monitor.c:203 ../gio/gio-tool-mount.c:1141
-#: ../gio/gio-tool-open.c:45 ../gio/gio-tool-remove.c:48
+#: ../gio/gio-tool-open.c:113 ../gio/gio-tool-remove.c:48
 #: ../gio/gio-tool-rename.c:45 ../gio/gio-tool-set.c:89
 #: ../gio/gio-tool-trash.c:81 ../gio/gio-tool-tree.c:239
 msgid "LOCATION"
@@ -1738,7 +1738,7 @@ msgstr ""
 
 #: ../gio/gio-tool-cat.c:162 ../gio/gio-tool-info.c:313
 #: ../gio/gio-tool-mkdir.c:76 ../gio/gio-tool-monitor.c:228
-#: ../gio/gio-tool-open.c:71 ../gio/gio-tool-remove.c:72
+#: ../gio/gio-tool-open.c:139 ../gio/gio-tool-remove.c:72
 msgid "No locations given"
 msgstr "Nie podano położeń"
 
@@ -2134,7 +2134,7 @@ msgstr ""
 msgid "Target %s is not a directory"
 msgstr "Plik docelowy %s nie jest katalogiem"
 
-#: ../gio/gio-tool-open.c:50
+#: ../gio/gio-tool-open.c:118
 msgid ""
 "Open files with the default application that\n"
 "is registered to handle files of this type."
@@ -2847,7 +2847,7 @@ msgstr "usunięto istniejący plik wyjściowy.\n"
 msgid "Invalid filename %s"
 msgstr "Nieprawidłowa nazwa pliku %s"
 
-#: ../gio/glocalfile.c:1037
+#: ../gio/glocalfile.c:1105
 #, c-format
 msgid "Error getting filesystem info for %s: %s"
 msgstr "Błąd podczas pobierania informacji o systemie plików dla %s: %s"
@@ -2856,237 +2856,237 @@ msgstr "Błąd podczas pobierania informacji o systemie plików dla %s: %s"
 #. * the enclosing (user visible) mount of a file, but none
 #. * exists.
 #.
-#: ../gio/glocalfile.c:1176
+#: ../gio/glocalfile.c:1244
 #, c-format
 msgid "Containing mount for file %s not found"
 msgstr "Nie odnaleziono punktu montowania zawierającego plik %s"
 
-#: ../gio/glocalfile.c:1199
+#: ../gio/glocalfile.c:1267
 msgid "Can’t rename root directory"
 msgstr "Nie można zmienić nazwy katalogu głównego"
 
-#: ../gio/glocalfile.c:1217 ../gio/glocalfile.c:1240
+#: ../gio/glocalfile.c:1285 ../gio/glocalfile.c:1308
 #, c-format
 msgid "Error renaming file %s: %s"
 msgstr "Błąd podczas zmieniania nazwy pliku %s: %s"
 
-#: ../gio/glocalfile.c:1224
+#: ../gio/glocalfile.c:1292
 msgid "Can’t rename file, filename already exists"
 msgstr "Nie można zmienić nazwy pliku, plik o takiej nazwie już istnieje"
 
-#: ../gio/glocalfile.c:1237 ../gio/glocalfile.c:2253 ../gio/glocalfile.c:2281
-#: ../gio/glocalfile.c:2438 ../gio/glocalfileoutputstream.c:549
+#: ../gio/glocalfile.c:1305 ../gio/glocalfile.c:2322 ../gio/glocalfile.c:2350
+#: ../gio/glocalfile.c:2507 ../gio/glocalfileoutputstream.c:551
 msgid "Invalid filename"
 msgstr "Nieprawidłowa nazwa pliku"
 
-#: ../gio/glocalfile.c:1404 ../gio/glocalfile.c:1419
+#: ../gio/glocalfile.c:1473 ../gio/glocalfile.c:1488
 #, c-format
 msgid "Error opening file %s: %s"
 msgstr "Błąd podczas otwierania pliku %s: %s"
 
-#: ../gio/glocalfile.c:1544
+#: ../gio/glocalfile.c:1613
 #, c-format
 msgid "Error removing file %s: %s"
 msgstr "Błąd podczas usuwania pliku %s: %s"
 
-#: ../gio/glocalfile.c:1928
+#: ../gio/glocalfile.c:1997
 #, c-format
 msgid "Error trashing file %s: %s"
 msgstr "Błąd podczas przenoszenia pliku %s do kosza: %s"
 
-#: ../gio/glocalfile.c:1951
+#: ../gio/glocalfile.c:2020
 #, c-format
 msgid "Unable to create trash dir %s: %s"
 msgstr "Nie można utworzyć katalogu kosza %s: %s"
 
-#: ../gio/glocalfile.c:1971
+#: ../gio/glocalfile.c:2040
 #, c-format
 msgid "Unable to find toplevel directory to trash %s"
 msgstr "Nie można odnaleźć głównego katalogu dla kosza %s"
 
-#: ../gio/glocalfile.c:2050 ../gio/glocalfile.c:2070
+#: ../gio/glocalfile.c:2119 ../gio/glocalfile.c:2139
 #, c-format
 msgid "Unable to find or create trash directory for %s"
 msgstr "Nie można odnaleźć lub utworzyć katalogu kosza dla %s"
 
-#: ../gio/glocalfile.c:2105
+#: ../gio/glocalfile.c:2174
 #, c-format
 msgid "Unable to create trashing info file for %s: %s"
 msgstr "Nie można utworzyć pliku informacji o koszu dla %s: %s"
 
-#: ../gio/glocalfile.c:2164
+#: ../gio/glocalfile.c:2233
 #, c-format
 msgid "Unable to trash file %s across filesystem boundaries"
 msgstr "Nie można przenieść pliku %s do kosza pomiędzy systemami plików"
 
-#: ../gio/glocalfile.c:2168 ../gio/glocalfile.c:2224
+#: ../gio/glocalfile.c:2237 ../gio/glocalfile.c:2293
 #, c-format
 msgid "Unable to trash file %s: %s"
 msgstr "Nie można przenieść pliku %s do kosza: %s"
 
-#: ../gio/glocalfile.c:2230
+#: ../gio/glocalfile.c:2299
 #, c-format
 msgid "Unable to trash file %s"
 msgstr "Nie można przenieść pliku %s do kosza"
 
-#: ../gio/glocalfile.c:2256
+#: ../gio/glocalfile.c:2325
 #, c-format
 msgid "Error creating directory %s: %s"
 msgstr "Błąd podczas tworzenia katalogu %s: %s"
 
-#: ../gio/glocalfile.c:2285
+#: ../gio/glocalfile.c:2354
 #, c-format
 msgid "Filesystem does not support symbolic links"
 msgstr "System plików nie obsługuje dowiązań symbolicznych"
 
-#: ../gio/glocalfile.c:2288
+#: ../gio/glocalfile.c:2357
 #, c-format
 msgid "Error making symbolic link %s: %s"
 msgstr "Błąd podczas tworzenia dowiązania symbolicznego %s: %s"
 
-#: ../gio/glocalfile.c:2294 ../glib/gfileutils.c:2077
+#: ../gio/glocalfile.c:2363 ../glib/gfileutils.c:2127
 msgid "Symbolic links not supported"
 msgstr "Dowiązania symboliczne nie są obsługiwane"
 
-#: ../gio/glocalfile.c:2349 ../gio/glocalfile.c:2384 ../gio/glocalfile.c:2441
+#: ../gio/glocalfile.c:2418 ../gio/glocalfile.c:2453 ../gio/glocalfile.c:2510
 #, c-format
 msgid "Error moving file %s: %s"
 msgstr "Błąd podczas przenoszenia pliku %s: %s"
 
-#: ../gio/glocalfile.c:2372
+#: ../gio/glocalfile.c:2441
 msgid "Can’t move directory over directory"
 msgstr "Nie można przenieść katalogu na katalog"
 
-#: ../gio/glocalfile.c:2398 ../gio/glocalfileoutputstream.c:933
-#: ../gio/glocalfileoutputstream.c:947 ../gio/glocalfileoutputstream.c:962
-#: ../gio/glocalfileoutputstream.c:979 ../gio/glocalfileoutputstream.c:993
+#: ../gio/glocalfile.c:2467 ../gio/glocalfileoutputstream.c:935
+#: ../gio/glocalfileoutputstream.c:949 ../gio/glocalfileoutputstream.c:964
+#: ../gio/glocalfileoutputstream.c:981 ../gio/glocalfileoutputstream.c:995
 msgid "Backup file creation failed"
 msgstr "Utworzenie pliku kopii zapasowej się nie powiodło"
 
-#: ../gio/glocalfile.c:2417
+#: ../gio/glocalfile.c:2486
 #, c-format
 msgid "Error removing target file: %s"
 msgstr "Błąd podczas usuwania pliku docelowego: %s"
 
-#: ../gio/glocalfile.c:2431
+#: ../gio/glocalfile.c:2500
 msgid "Move between mounts not supported"
 msgstr "Przenoszenie między punktami montowania nie jest obsługiwane"
 
-#: ../gio/glocalfile.c:2622
+#: ../gio/glocalfile.c:2691
 #, c-format
 msgid "Could not determine the disk usage of %s: %s"
 msgstr "Nie można ustalić wykorzystania dysku %s: %s"
 
-#: ../gio/glocalfileinfo.c:731
+#: ../gio/glocalfileinfo.c:745
 msgid "Attribute value must be non-NULL"
 msgstr "Wartość atrybutu nie może być pusta"
 
-#: ../gio/glocalfileinfo.c:738
+#: ../gio/glocalfileinfo.c:752
 msgid "Invalid attribute type (string expected)"
 msgstr "Nieprawidłowy typ atrybutu (oczekiwano „string”)"
 
-#: ../gio/glocalfileinfo.c:745
+#: ../gio/glocalfileinfo.c:759
 msgid "Invalid extended attribute name"
 msgstr "Nieprawidłowa nazwa rozszerzonego atrybutu"
 
-#: ../gio/glocalfileinfo.c:785
+#: ../gio/glocalfileinfo.c:799
 #, c-format
 msgid "Error setting extended attribute “%s”: %s"
 msgstr "Błąd podczas ustawiania rozszerzonego atrybutu „%s”: %s"
 
-#: ../gio/glocalfileinfo.c:1586
+#: ../gio/glocalfileinfo.c:1607
 msgid " (invalid encoding)"
 msgstr " (nieprawidłowe kodowanie)"
 
-#: ../gio/glocalfileinfo.c:1777 ../gio/glocalfileoutputstream.c:811
+#: ../gio/glocalfileinfo.c:1776 ../gio/glocalfileoutputstream.c:813
 #, c-format
 msgid "Error when getting information for file “%s”: %s"
 msgstr "Błąd podczas pobierania informacji o pliku „%s”: %s"
 
-#: ../gio/glocalfileinfo.c:2028
+#: ../gio/glocalfileinfo.c:2038
 #, c-format
 msgid "Error when getting information for file descriptor: %s"
 msgstr "Błąd podczas pobierania informacji o deskryptorze pliku: %s"
 
-#: ../gio/glocalfileinfo.c:2073
+#: ../gio/glocalfileinfo.c:2083
 msgid "Invalid attribute type (uint32 expected)"
 msgstr "Nieprawidłowy typ atrybutu (oczekiwano „uint32”)"
 
-#: ../gio/glocalfileinfo.c:2091
+#: ../gio/glocalfileinfo.c:2101
 msgid "Invalid attribute type (uint64 expected)"
 msgstr "Nieprawidłowy typ atrybutu (oczekiwano „uint64”)"
 
-#: ../gio/glocalfileinfo.c:2110 ../gio/glocalfileinfo.c:2129
+#: ../gio/glocalfileinfo.c:2120 ../gio/glocalfileinfo.c:2139
 msgid "Invalid attribute type (byte string expected)"
 msgstr "Nieprawidłowy typ atrybutu (oczekiwano „byte string”)"
 
-#: ../gio/glocalfileinfo.c:2164
+#: ../gio/glocalfileinfo.c:2184
 msgid "Cannot set permissions on symlinks"
 msgstr "Nie można ustawić uprawnień na dowiązaniach symbolicznych"
 
-#: ../gio/glocalfileinfo.c:2180
+#: ../gio/glocalfileinfo.c:2200
 #, c-format
 msgid "Error setting permissions: %s"
 msgstr "Błąd podczas ustawiania uprawnień: %s"
 
-#: ../gio/glocalfileinfo.c:2231
+#: ../gio/glocalfileinfo.c:2251
 #, c-format
 msgid "Error setting owner: %s"
 msgstr "Błąd podczas ustawiania właściciela: %s"
 
-#: ../gio/glocalfileinfo.c:2254
+#: ../gio/glocalfileinfo.c:2274
 msgid "symlink must be non-NULL"
 msgstr "dowiązanie symboliczne nie może być puste"
 
-#: ../gio/glocalfileinfo.c:2264 ../gio/glocalfileinfo.c:2283
-#: ../gio/glocalfileinfo.c:2294
+#: ../gio/glocalfileinfo.c:2284 ../gio/glocalfileinfo.c:2303
+#: ../gio/glocalfileinfo.c:2314
 #, c-format
 msgid "Error setting symlink: %s"
 msgstr "Błąd podczas ustawiania dowiązania symbolicznego: %s"
 
-#: ../gio/glocalfileinfo.c:2273
+#: ../gio/glocalfileinfo.c:2293
 msgid "Error setting symlink: file is not a symlink"
 msgstr ""
 "Błąd podczas ustawiania dowiązania symbolicznego: plik nie jest dowiązaniem "
 "symbolicznym"
 
-#: ../gio/glocalfileinfo.c:2399
+#: ../gio/glocalfileinfo.c:2419
 #, c-format
 msgid "Error setting modification or access time: %s"
 msgstr "Błąd podczas ustawiania czasu modyfikacji lub dostępu: %s"
 
-#: ../gio/glocalfileinfo.c:2422
+#: ../gio/glocalfileinfo.c:2442
 msgid "SELinux context must be non-NULL"
 msgstr "Kontekst SELinux nie może być pusty"
 
-#: ../gio/glocalfileinfo.c:2437
+#: ../gio/glocalfileinfo.c:2457
 #, c-format
 msgid "Error setting SELinux context: %s"
 msgstr "Błąd podczas ustawiania kontekstu SELinux: %s"
 
-#: ../gio/glocalfileinfo.c:2444
+#: ../gio/glocalfileinfo.c:2464
 msgid "SELinux is not enabled on this system"
 msgstr "SELinux nie jest włączony w tym systemie"
 
-#: ../gio/glocalfileinfo.c:2536
+#: ../gio/glocalfileinfo.c:2556
 #, c-format
 msgid "Setting attribute %s not supported"
 msgstr "Ustawianie atrybutu %s nie jest obsługiwane"
 
-#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:694
+#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:696
 #, c-format
 msgid "Error reading from file: %s"
 msgstr "Błąd podczas odczytywania z pliku: %s"
 
 #: ../gio/glocalfileinputstream.c:199 ../gio/glocalfileinputstream.c:211
 #: ../gio/glocalfileinputstream.c:225 ../gio/glocalfileinputstream.c:333
-#: ../gio/glocalfileoutputstream.c:456 ../gio/glocalfileoutputstream.c:1011
+#: ../gio/glocalfileoutputstream.c:458 ../gio/glocalfileoutputstream.c:1013
 #, c-format
 msgid "Error seeking in file: %s"
 msgstr "Błąd podczas wyszukiwania w pliku: %s"
 
-#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:246
-#: ../gio/glocalfileoutputstream.c:340
+#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:248
+#: ../gio/glocalfileoutputstream.c:342
 #, c-format
 msgid "Error closing file: %s"
 msgstr "Błąd podczas zamykania pliku: %s"
@@ -3095,51 +3095,51 @@ msgstr "Błąd podczas zamykania pliku: %s"
 msgid "Unable to find default local file monitor type"
 msgstr "Nie można odnaleźć domyślnego typu monitora pliku lokalnego"
 
-#: ../gio/glocalfileoutputstream.c:194 ../gio/glocalfileoutputstream.c:226
-#: ../gio/glocalfileoutputstream.c:715
+#: ../gio/glocalfileoutputstream.c:196 ../gio/glocalfileoutputstream.c:228
+#: ../gio/glocalfileoutputstream.c:717
 #, c-format
 msgid "Error writing to file: %s"
 msgstr "Błąd podczas zapisywania do pliku: %s"
 
-#: ../gio/glocalfileoutputstream.c:273
+#: ../gio/glocalfileoutputstream.c:275
 #, c-format
 msgid "Error removing old backup link: %s"
 msgstr "Błąd podczas usuwania odnośnika do starej kopii zapasowej: %s"
 
-#: ../gio/glocalfileoutputstream.c:287 ../gio/glocalfileoutputstream.c:300
+#: ../gio/glocalfileoutputstream.c:289 ../gio/glocalfileoutputstream.c:302
 #, c-format
 msgid "Error creating backup copy: %s"
 msgstr "Błąd podczas tworzenia kopii zapasowej: %s"
 
-#: ../gio/glocalfileoutputstream.c:318
+#: ../gio/glocalfileoutputstream.c:320
 #, c-format
 msgid "Error renaming temporary file: %s"
 msgstr "Błąd podczas zmieniania nazwy pliku tymczasowego: %s"
 
-#: ../gio/glocalfileoutputstream.c:502 ../gio/glocalfileoutputstream.c:1062
+#: ../gio/glocalfileoutputstream.c:504 ../gio/glocalfileoutputstream.c:1064
 #, c-format
 msgid "Error truncating file: %s"
 msgstr "Błąd podczas skracania pliku: %s"
 
-#: ../gio/glocalfileoutputstream.c:555 ../gio/glocalfileoutputstream.c:793
-#: ../gio/glocalfileoutputstream.c:1043 ../gio/gsubprocess.c:380
+#: ../gio/glocalfileoutputstream.c:557 ../gio/glocalfileoutputstream.c:795
+#: ../gio/glocalfileoutputstream.c:1045 ../gio/gsubprocess.c:380
 #, c-format
 msgid "Error opening file “%s”: %s"
 msgstr "Błąd podczas otwierania pliku „%s”: %s"
 
-#: ../gio/glocalfileoutputstream.c:824
+#: ../gio/glocalfileoutputstream.c:826
 msgid "Target file is a directory"
 msgstr "Plik docelowy jest katalogiem"
 
-#: ../gio/glocalfileoutputstream.c:829
+#: ../gio/glocalfileoutputstream.c:831
 msgid "Target file is not a regular file"
 msgstr "Plik docelowy nie jest zwykłym plikiem"
 
-#: ../gio/glocalfileoutputstream.c:841
+#: ../gio/glocalfileoutputstream.c:843
 msgid "The file was externally modified"
 msgstr "Plik został zmieniony poza programem"
 
-#: ../gio/glocalfileoutputstream.c:1027
+#: ../gio/glocalfileoutputstream.c:1029
 #, c-format
 msgid "Error removing old file: %s"
 msgstr "Błąd podczas usuwania starego pliku: %s"
@@ -3183,21 +3183,21 @@ msgstr "Zażądano przejścia poza koniec potoku"
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement unmount.
-#: ../gio/gmount.c:393
+#: ../gio/gmount.c:396
 msgid "mount doesn’t implement “unmount”"
 msgstr "punkt montowania nie obsługuje odmontowania"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement eject.
-#: ../gio/gmount.c:469
+#: ../gio/gmount.c:472
 msgid "mount doesn’t implement “eject”"
 msgstr "punkt montowania nie obsługuje wysunięcia"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of unmount or unmount_with_operation.
-#: ../gio/gmount.c:547
+#: ../gio/gmount.c:550
 msgid "mount doesn’t implement “unmount” or “unmount_with_operation”"
 msgstr ""
 "punkt montowania nie obsługuje odmontowania lub „unmount_with_operation”"
@@ -3205,28 +3205,28 @@ msgstr ""
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of eject or eject_with_operation.
-#: ../gio/gmount.c:632
+#: ../gio/gmount.c:635
 msgid "mount doesn’t implement “eject” or “eject_with_operation”"
 msgstr "punkt montowania nie obsługuje wysunięcia lub „eject_with_operation”"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement remount.
-#: ../gio/gmount.c:720
+#: ../gio/gmount.c:723
 msgid "mount doesn’t implement “remount”"
 msgstr "punkt montowania nie obsługuje ponownego montowania"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:802
+#: ../gio/gmount.c:805
 msgid "mount doesn’t implement content type guessing"
 msgstr "punkt montowania nie obsługuje rozpoznania typu zawartości"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:889
+#: ../gio/gmount.c:892
 msgid "mount doesn’t implement synchronous content type guessing"
 msgstr ""
 "punkt montowania nie obsługuje synchronicznego rozpoznania typu zawartości"
@@ -3277,25 +3277,29 @@ msgstr "Potok źródłowy jest już zamknięty"
 msgid "Error resolving “%s”: %s"
 msgstr "Błąd podczas rozwiązywania „%s”: %s"
 
-#: ../gio/gresource.c:606 ../gio/gresource.c:857 ../gio/gresource.c:874
-#: ../gio/gresource.c:998 ../gio/gresource.c:1070 ../gio/gresource.c:1143
-#: ../gio/gresource.c:1213 ../gio/gresourcefile.c:453
-#: ../gio/gresourcefile.c:576 ../gio/gresourcefile.c:713
+#: ../gio/gresolver.c:729 ../gio/gresolver.c:781
+msgid "Invalid domain"
+msgstr "Nieprawidłowa domena"
+
+#: ../gio/gresource.c:621 ../gio/gresource.c:880 ../gio/gresource.c:919
+#: ../gio/gresource.c:1043 ../gio/gresource.c:1115 ../gio/gresource.c:1188
+#: ../gio/gresource.c:1258 ../gio/gresourcefile.c:476
+#: ../gio/gresourcefile.c:599 ../gio/gresourcefile.c:736
 #, c-format
 msgid "The resource at “%s” does not exist"
 msgstr "Zasób w „%s” nie istnieje"
 
-#: ../gio/gresource.c:771
+#: ../gio/gresource.c:786
 #, c-format
 msgid "The resource at “%s” failed to decompress"
 msgstr "Dekompresowanie zasobu w „%s” się nie powiodło"
 
-#: ../gio/gresourcefile.c:709
+#: ../gio/gresourcefile.c:732
 #, c-format
 msgid "The resource at “%s” is not a directory"
 msgstr "Zasób w „%s” nie jest katalogiem"
 
-#: ../gio/gresourcefile.c:917
+#: ../gio/gresourcefile.c:940
 msgid "Input stream doesn’t implement seek"
 msgstr "Potok wejściowy nie obsługuje szukania"
 
@@ -3389,7 +3393,7 @@ msgstr ""
 msgid "  SECTION   An (optional) elf section name\n"
 msgstr "  SEKCJA    (Opcjonalna) nazwa sekcji formatu ELF\n"
 
-#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:656
+#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:703
 msgid "  COMMAND   The (optional) command to explain\n"
 msgstr "  POLECENIE (Opcjonalne) polecenie do wyjaśnienia\n"
 
@@ -3424,7 +3428,7 @@ msgid "  PATH      A resource path\n"
 msgstr "  ŚCIEŻKA   Ścieżka do zasobu\n"
 
 #: ../gio/gsettings-tool.c:51 ../gio/gsettings-tool.c:72
-#: ../gio/gsettings-tool.c:853
+#: ../gio/gsettings-tool.c:908
 #, c-format
 msgid "No such schema “%s”\n"
 msgstr "Brak schematu „%s”\n"
@@ -3459,39 +3463,39 @@ msgstr "Ścieżka musi kończyć się ukośnikiem (/)\n"
 msgid "Path must not contain two adjacent slashes (//)\n"
 msgstr "Ścieżka nie może zawierać dwóch sąsiadujących ukośników (//)\n"
 
-#: ../gio/gsettings-tool.c:491
+#: ../gio/gsettings-tool.c:538
 #, c-format
 msgid "The provided value is outside of the valid range\n"
 msgstr "Podana wartość jest poza prawidłowym zakresem\n"
 
-#: ../gio/gsettings-tool.c:498
+#: ../gio/gsettings-tool.c:545
 #, c-format
 msgid "The key is not writable\n"
 msgstr "Klucz nie jest zapisywalny\n"
 
-#: ../gio/gsettings-tool.c:534
+#: ../gio/gsettings-tool.c:581
 msgid "List the installed (non-relocatable) schemas"
 msgstr ""
 "Wyświetla listę zainstalowanych schematów (których nie można przenosić)"
 
-#: ../gio/gsettings-tool.c:540
+#: ../gio/gsettings-tool.c:587
 msgid "List the installed relocatable schemas"
 msgstr "Wyświetla listę zainstalowanych schematów (które można przenosić)"
 
-#: ../gio/gsettings-tool.c:546
+#: ../gio/gsettings-tool.c:593
 msgid "List the keys in SCHEMA"
 msgstr "Wyświetla listę kluczy w SCHEMACIE"
 
-#: ../gio/gsettings-tool.c:547 ../gio/gsettings-tool.c:553
-#: ../gio/gsettings-tool.c:596
+#: ../gio/gsettings-tool.c:594 ../gio/gsettings-tool.c:600
+#: ../gio/gsettings-tool.c:643
 msgid "SCHEMA[:PATH]"
 msgstr "SCHEMAT[:ŚCIEŻKA]"
 
-#: ../gio/gsettings-tool.c:552
+#: ../gio/gsettings-tool.c:599
 msgid "List the children of SCHEMA"
 msgstr "Wyświetla listę elementów potomnych SCHEMATU"
 
-#: ../gio/gsettings-tool.c:558
+#: ../gio/gsettings-tool.c:605
 msgid ""
 "List keys and values, recursively\n"
 "If no SCHEMA is given, list all keys\n"
@@ -3499,49 +3503,49 @@ msgstr ""
 "Wyświetla listę kluczy i wartości, rekursywnie\n"
 "Jeśli nie podano SCHEMATU, to wyświetla listę wszystkich kluczy\n"
 
-#: ../gio/gsettings-tool.c:560
+#: ../gio/gsettings-tool.c:607
 msgid "[SCHEMA[:PATH]]"
 msgstr "[SCHEMAT[:ŚCIEŻKA]]"
 
-#: ../gio/gsettings-tool.c:565
+#: ../gio/gsettings-tool.c:612
 msgid "Get the value of KEY"
 msgstr "Uzyskuje wartość KLUCZA"
 
-#: ../gio/gsettings-tool.c:566 ../gio/gsettings-tool.c:572
-#: ../gio/gsettings-tool.c:578 ../gio/gsettings-tool.c:590
-#: ../gio/gsettings-tool.c:602
+#: ../gio/gsettings-tool.c:613 ../gio/gsettings-tool.c:619
+#: ../gio/gsettings-tool.c:625 ../gio/gsettings-tool.c:637
+#: ../gio/gsettings-tool.c:649
 msgid "SCHEMA[:PATH] KEY"
 msgstr "SCHEMAT[:ŚCIEŻKA] KLUCZ"
 
-#: ../gio/gsettings-tool.c:571
+#: ../gio/gsettings-tool.c:618
 msgid "Query the range of valid values for KEY"
 msgstr "Odpytuje zakres prawidłowych wartości KLUCZA"
 
-#: ../gio/gsettings-tool.c:577
+#: ../gio/gsettings-tool.c:624
 msgid "Query the description for KEY"
 msgstr "Odpytuje opis KLUCZA"
 
-#: ../gio/gsettings-tool.c:583
+#: ../gio/gsettings-tool.c:630
 msgid "Set the value of KEY to VALUE"
 msgstr "Ustawia wartość KLUCZA na WARTOŚĆ"
 
-#: ../gio/gsettings-tool.c:584
+#: ../gio/gsettings-tool.c:631
 msgid "SCHEMA[:PATH] KEY VALUE"
 msgstr "SCHEMAT[:ŚCIEŻKA] KLUCZ WARTOŚĆ"
 
-#: ../gio/gsettings-tool.c:589
+#: ../gio/gsettings-tool.c:636
 msgid "Reset KEY to its default value"
 msgstr "Przywraca KLUCZ na jego domyślną wartość"
 
-#: ../gio/gsettings-tool.c:595
+#: ../gio/gsettings-tool.c:642
 msgid "Reset all keys in SCHEMA to their defaults"
 msgstr "Przywraca wszystkie klucze w SCHEMACIE do domyślnych wartości"
 
-#: ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:648
 msgid "Check if KEY is writable"
 msgstr "Sprawdza, czy KLUCZ jest zapisywalny"
 
-#: ../gio/gsettings-tool.c:607
+#: ../gio/gsettings-tool.c:654
 msgid ""
 "Monitor KEY for changes.\n"
 "If no KEY is specified, monitor all keys in SCHEMA.\n"
@@ -3551,11 +3555,11 @@ msgstr ""
 "Jeśli nie podano KLUCZA, to monitoruje wszystkie klucze w SCHEMACIE.\n"
 "Użycie ^C zatrzymuje monitorowanie.\n"
 
-#: ../gio/gsettings-tool.c:610
+#: ../gio/gsettings-tool.c:657
 msgid "SCHEMA[:PATH] [KEY]"
 msgstr "SCHEMAT[:ŚCIEŻKA] [KLUCZ]"
 
-#: ../gio/gsettings-tool.c:622
+#: ../gio/gsettings-tool.c:669
 msgid ""
 "Usage:\n"
 "  gsettings --version\n"
@@ -3605,7 +3609,7 @@ msgstr ""
 "Polecenie „gsettings help POLECENIE” wyświetla szczegółową pomoc.\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:646
+#: ../gio/gsettings-tool.c:693
 #, c-format
 msgid ""
 "Usage:\n"
@@ -3620,11 +3624,11 @@ msgstr ""
 "%s\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:652
+#: ../gio/gsettings-tool.c:699
 msgid "  SCHEMADIR A directory to search for additional schemas\n"
 msgstr "  KATALOG-SCHEMATÓW Katalog do wyszukiwania dodatkowych schematów\n"
 
-#: ../gio/gsettings-tool.c:660
+#: ../gio/gsettings-tool.c:707
 msgid ""
 "  SCHEMA    The name of the schema\n"
 "  PATH      The path, for relocatable schemas\n"
@@ -3632,178 +3636,208 @@ msgstr ""
 "  SCHEMAT   Identyfikator schematu\n"
 "  ŚCIEŻKA   Ścieżka (dla schematów, które można przenosić)\n"
 
-#: ../gio/gsettings-tool.c:665
+#: ../gio/gsettings-tool.c:712
 msgid "  KEY       The (optional) key within the schema\n"
 msgstr "  KLUCZ     (Opcjonalny) klucz w schemacie\n"
 
-#: ../gio/gsettings-tool.c:669
+#: ../gio/gsettings-tool.c:716
 msgid "  KEY       The key within the schema\n"
 msgstr "  KLUCZ     Klucz w schemacie\n"
 
-#: ../gio/gsettings-tool.c:673
+#: ../gio/gsettings-tool.c:720
 msgid "  VALUE     The value to set\n"
 msgstr "  WARTOŚĆ   Wartość do ustawienia\n"
 
-#: ../gio/gsettings-tool.c:728
+#: ../gio/gsettings-tool.c:775
 #, c-format
 msgid "Could not load schemas from %s: %s\n"
 msgstr "Nie można wczytać schematów z %s: %s\n"
 
-#: ../gio/gsettings-tool.c:740
+#: ../gio/gsettings-tool.c:787
 #, c-format
 msgid "No schemas installed\n"
 msgstr "Nie zainstalowano schematów\n"
 
-#: ../gio/gsettings-tool.c:811
+#: ../gio/gsettings-tool.c:866
 #, c-format
 msgid "Empty schema name given\n"
 msgstr "Podano pustą nazwę schematu\n"
 
-#: ../gio/gsettings-tool.c:866
+#: ../gio/gsettings-tool.c:921
 #, c-format
 msgid "No such key “%s”\n"
 msgstr "Brak klucza „%s”\n"
 
-#: ../gio/gsocket.c:379
+#: ../gio/gsocket.c:384
 msgid "Invalid socket, not initialized"
 msgstr "Nieprawidłowe gniazdo, nie zainicjowano"
 
-#: ../gio/gsocket.c:386
+#: ../gio/gsocket.c:391
 #, c-format
 msgid "Invalid socket, initialization failed due to: %s"
 msgstr "Nieprawidłowe gniazdo, zainicjowanie się nie powiodło z powodu: %s"
 
-#: ../gio/gsocket.c:394
+#: ../gio/gsocket.c:399
 msgid "Socket is already closed"
 msgstr "Gniazdo jest już zamknięte"
 
-#: ../gio/gsocket.c:409 ../gio/gsocket.c:2765 ../gio/gsocket.c:3950
-#: ../gio/gsocket.c:4008
+#: ../gio/gsocket.c:414 ../gio/gsocket.c:3010 ../gio/gsocket.c:4220
+#: ../gio/gsocket.c:4278
 msgid "Socket I/O timed out"
 msgstr "Przekroczono czas oczekiwania wejścia/wyjścia gniazda"
 
-#: ../gio/gsocket.c:541
+#: ../gio/gsocket.c:549
 #, c-format
 msgid "creating GSocket from fd: %s"
 msgstr "tworzenie GSocket z fd: %s"
 
-#: ../gio/gsocket.c:570 ../gio/gsocket.c:624 ../gio/gsocket.c:631
+#: ../gio/gsocket.c:578 ../gio/gsocket.c:632 ../gio/gsocket.c:639
 #, c-format
 msgid "Unable to create socket: %s"
 msgstr "Nie można utworzyć gniazda: %s"
 
-#: ../gio/gsocket.c:624
+#: ../gio/gsocket.c:632
 msgid "Unknown family was specified"
 msgstr "Podano nieznaną rodzinę"
 
-#: ../gio/gsocket.c:631
+#: ../gio/gsocket.c:639
 msgid "Unknown protocol was specified"
 msgstr "Podano nieznany protokół"
 
-#: ../gio/gsocket.c:1122
+#: ../gio/gsocket.c:1130
 #, c-format
 msgid "Cannot use datagram operations on a non-datagram socket."
 msgstr "Nie można używać działań datagramowych na niedatagramowych gniazdach."
 
-#: ../gio/gsocket.c:1139
+#: ../gio/gsocket.c:1147
 #, c-format
 msgid "Cannot use datagram operations on a socket with a timeout set."
 msgstr ""
 "Nie można używać działań datagramowych na gniazdach z ustawionym czasem "
 "oczekiwania."
 
-#: ../gio/gsocket.c:1943
+#: ../gio/gsocket.c:1954
 #, c-format
 msgid "could not get local address: %s"
 msgstr "nie można uzyskać lokalnego adresu: %s"
 
-#: ../gio/gsocket.c:1986
+#: ../gio/gsocket.c:2000
 #, c-format
 msgid "could not get remote address: %s"
 msgstr "nie można uzyskać zdalnego adresu: %s"
 
-#: ../gio/gsocket.c:2052
+#: ../gio/gsocket.c:2066
 #, c-format
 msgid "could not listen: %s"
 msgstr "nie można nasłuchiwać: %s"
 
-#: ../gio/gsocket.c:2151
+#: ../gio/gsocket.c:2168
 #, c-format
 msgid "Error binding to address: %s"
 msgstr "Błąd podczas dowiązywania do adresu: %s"
 
-#: ../gio/gsocket.c:2266 ../gio/gsocket.c:2303
+#: ../gio/gsocket.c:2226 ../gio/gsocket.c:2263 ../gio/gsocket.c:2373
+#: ../gio/gsocket.c:2391 ../gio/gsocket.c:2461 ../gio/gsocket.c:2519
+#: ../gio/gsocket.c:2537
 #, c-format
 msgid "Error joining multicast group: %s"
 msgstr "Błąd podczas dołączania do grupy multicast: %s"
 
-#: ../gio/gsocket.c:2267 ../gio/gsocket.c:2304
+#: ../gio/gsocket.c:2227 ../gio/gsocket.c:2264 ../gio/gsocket.c:2374
+#: ../gio/gsocket.c:2392 ../gio/gsocket.c:2462 ../gio/gsocket.c:2520
+#: ../gio/gsocket.c:2538
 #, c-format
 msgid "Error leaving multicast group: %s"
 msgstr "Błąd podczas opuszczania grupy multicast: %s"
 
-#: ../gio/gsocket.c:2268
+#: ../gio/gsocket.c:2228
 msgid "No support for source-specific multicast"
 msgstr "Brak obsługi multicastu dla konkretnych źródeł"
 
-#: ../gio/gsocket.c:2488
+#: ../gio/gsocket.c:2375
+msgid "Unsupported socket family"
+msgstr "Nieobsługiwana rodzina gniazda"
+
+#: ../gio/gsocket.c:2393
+msgid "source-specific not an IPv4 address"
+msgstr "konkretne źródła nie są adresem IPv4"
+
+#: ../gio/gsocket.c:2411 ../gio/gsocket.c:2440 ../gio/gsocket.c:2487
+#, c-format
+msgid "Interface not found: %s"
+msgstr "Nie odnaleziono interfejsu: %s"
+
+#: ../gio/gsocket.c:2427
+#, c-format
+msgid "Interface name too long"
+msgstr "Nazwa interfejsu jest za długa"
+
+#: ../gio/gsocket.c:2463
+msgid "No support for IPv4 source-specific multicast"
+msgstr "Brak obsługi multicastu IPv4 dla konkretnych źródeł"
+
+#: ../gio/gsocket.c:2521
+msgid "No support for IPv6 source-specific multicast"
+msgstr "Brak obsługi multicastu IPv6 dla konkretnych źródeł"
+
+#: ../gio/gsocket.c:2730
 #, c-format
 msgid "Error accepting connection: %s"
 msgstr "Błąd podczas akceptowania połączenia: %s"
 
-#: ../gio/gsocket.c:2609
+#: ../gio/gsocket.c:2854
 msgid "Connection in progress"
 msgstr "Trwa połączenie"
 
-#: ../gio/gsocket.c:2658
+#: ../gio/gsocket.c:2903
 msgid "Unable to get pending error: "
 msgstr "Nie można uzyskać oczekującego błędu: "
 
-#: ../gio/gsocket.c:2828
+#: ../gio/gsocket.c:3073
 #, c-format
 msgid "Error receiving data: %s"
 msgstr "Błąd podczas pobierania danych: %s"
 
-#: ../gio/gsocket.c:3023
+#: ../gio/gsocket.c:3268
 #, c-format
 msgid "Error sending data: %s"
 msgstr "Błąd podczas wysyłania danych: %s"
 
-#: ../gio/gsocket.c:3210
+#: ../gio/gsocket.c:3455
 #, c-format
 msgid "Unable to shutdown socket: %s"
 msgstr "Nie można zamknąć gniazda: %s"
 
-#: ../gio/gsocket.c:3291
+#: ../gio/gsocket.c:3536
 #, c-format
 msgid "Error closing socket: %s"
 msgstr "Błąd podczas zamykania gniazda: %s"
 
-#: ../gio/gsocket.c:3943
+#: ../gio/gsocket.c:4213
 #, c-format
 msgid "Waiting for socket condition: %s"
 msgstr "Oczekiwanie na warunek gniazda: %s"
 
-#: ../gio/gsocket.c:4417 ../gio/gsocket.c:4497 ../gio/gsocket.c:4675
+#: ../gio/gsocket.c:4687 ../gio/gsocket.c:4767 ../gio/gsocket.c:4945
 #, c-format
 msgid "Error sending message: %s"
 msgstr "Błąd podczas wysyłania komunikatu: %s"
 
-#: ../gio/gsocket.c:4441
+#: ../gio/gsocket.c:4711
 msgid "GSocketControlMessage not supported on Windows"
 msgstr "GSocketControlMessage nie jest obsługiwane w systemie Windows"
 
-#: ../gio/gsocket.c:4894 ../gio/gsocket.c:4967 ../gio/gsocket.c:5193
+#: ../gio/gsocket.c:5164 ../gio/gsocket.c:5237 ../gio/gsocket.c:5463
 #, c-format
 msgid "Error receiving message: %s"
 msgstr "Błąd podczas pobierania komunikatu: %s"
 
-#: ../gio/gsocket.c:5465
+#: ../gio/gsocket.c:5735
 #, c-format
 msgid "Unable to read socket credentials: %s"
 msgstr "Nie można odczytać danych uwierzytelniających gniazda: %s"
 
-#: ../gio/gsocket.c:5474
+#: ../gio/gsocket.c:5744
 msgid "g_socket_get_credentials not implemented for this OS"
 msgstr ""
 "g_socket_get_credentials nie jest zaimplementowane dla tego systemu "
@@ -3947,18 +3981,19 @@ msgstr "Nie odnaleziono prawidłowych adresów"
 msgid "Error reverse-resolving “%s”: %s"
 msgstr "Błąd podczas odwrotnego rozwiązywania „%s”: %s"
 
-#: ../gio/gthreadedresolver.c:550 ../gio/gthreadedresolver.c:630
-#: ../gio/gthreadedresolver.c:728 ../gio/gthreadedresolver.c:778
+#: ../gio/gthreadedresolver.c:549 ../gio/gthreadedresolver.c:628
+#: ../gio/gthreadedresolver.c:726 ../gio/gthreadedresolver.c:776
 #, c-format
 msgid "No DNS record of the requested type for “%s”"
 msgstr "Brak wpisu DNS żądanego typu dla „%s”"
 
-#: ../gio/gthreadedresolver.c:555 ../gio/gthreadedresolver.c:733
+#: ../gio/gthreadedresolver.c:554 ../gio/gthreadedresolver.c:731
 #, c-format
 msgid "Temporarily unable to resolve “%s”"
 msgstr "Nie można tymczasowo rozwiązać „%s”"
 
-#: ../gio/gthreadedresolver.c:560 ../gio/gthreadedresolver.c:738
+#: ../gio/gthreadedresolver.c:559 ../gio/gthreadedresolver.c:736
+#: ../gio/gthreadedresolver.c:842
 #, c-format
 msgid "Error resolving “%s”"
 msgstr "Błąd podczas rozwiązywania „%s”"
@@ -4073,7 +4108,7 @@ msgstr "Błąd podczas odczytywania z deskryptora pliku: %s"
 msgid "Error closing file descriptor: %s"
 msgstr "Błąd podczas zamykania deskryptora pliku: %s"
 
-#: ../gio/gunixmounts.c:2430 ../gio/gunixmounts.c:2483
+#: ../gio/gunixmounts.c:2556 ../gio/gunixmounts.c:2609
 msgid "Filesystem root"
 msgstr "Katalog główny systemu plików"
 
@@ -4179,90 +4214,102 @@ msgstr "Nieoczekiwany znacznik „%s”, oczekiwano znacznika „%s”"
 msgid "Unexpected tag “%s” inside “%s”"
 msgstr "Nieoczekiwany znacznik „%s” wewnątrz „%s”"
 
-#: ../glib/gbookmarkfile.c:1756
+#: ../glib/gbookmarkfile.c:1757
 msgid "No valid bookmark file found in data dirs"
 msgstr "Nie można odnaleźć prawidłowego pliku zakładek w katalogach danych"
 
-#: ../glib/gbookmarkfile.c:1957
+#: ../glib/gbookmarkfile.c:1958
 #, c-format
 msgid "A bookmark for URI “%s” already exists"
 msgstr "Zakładka dla adresu URI „%s” już istnieje"
 
-#: ../glib/gbookmarkfile.c:2003 ../glib/gbookmarkfile.c:2161
-#: ../glib/gbookmarkfile.c:2246 ../glib/gbookmarkfile.c:2326
-#: ../glib/gbookmarkfile.c:2411 ../glib/gbookmarkfile.c:2494
-#: ../glib/gbookmarkfile.c:2572 ../glib/gbookmarkfile.c:2651
-#: ../glib/gbookmarkfile.c:2693 ../glib/gbookmarkfile.c:2790
-#: ../glib/gbookmarkfile.c:2910 ../glib/gbookmarkfile.c:3100
-#: ../glib/gbookmarkfile.c:3176 ../glib/gbookmarkfile.c:3344
-#: ../glib/gbookmarkfile.c:3433 ../glib/gbookmarkfile.c:3522
-#: ../glib/gbookmarkfile.c:3638
+#: ../glib/gbookmarkfile.c:2004 ../glib/gbookmarkfile.c:2162
+#: ../glib/gbookmarkfile.c:2247 ../glib/gbookmarkfile.c:2327
+#: ../glib/gbookmarkfile.c:2412 ../glib/gbookmarkfile.c:2495
+#: ../glib/gbookmarkfile.c:2573 ../glib/gbookmarkfile.c:2652
+#: ../glib/gbookmarkfile.c:2694 ../glib/gbookmarkfile.c:2791
+#: ../glib/gbookmarkfile.c:2912 ../glib/gbookmarkfile.c:3102
+#: ../glib/gbookmarkfile.c:3178 ../glib/gbookmarkfile.c:3346
+#: ../glib/gbookmarkfile.c:3435 ../glib/gbookmarkfile.c:3524
+#: ../glib/gbookmarkfile.c:3640
 #, c-format
 msgid "No bookmark found for URI “%s”"
 msgstr "Nie odnaleziono zakładki dla adresu URI „%s”"
 
-#: ../glib/gbookmarkfile.c:2335
+#: ../glib/gbookmarkfile.c:2336
 #, c-format
 msgid "No MIME type defined in the bookmark for URI “%s”"
 msgstr "Nie zdefiniowano typu MIME w zakładce dla adresu URI „%s”"
 
-#: ../glib/gbookmarkfile.c:2420
+#: ../glib/gbookmarkfile.c:2421
 #, c-format
 msgid "No private flag has been defined in bookmark for URI “%s”"
 msgstr "Nie zdefiniowano prywatnej flagi w zakładce dla adresu URI „%s”"
 
-#: ../glib/gbookmarkfile.c:2799
+#: ../glib/gbookmarkfile.c:2800
 #, c-format
 msgid "No groups set in bookmark for URI “%s”"
 msgstr "Nie ustawiono grup w zakładce dla adresu URI „%s”"
 
-#: ../glib/gbookmarkfile.c:3197 ../glib/gbookmarkfile.c:3354
+#: ../glib/gbookmarkfile.c:3199 ../glib/gbookmarkfile.c:3356
 #, c-format
 msgid "No application with name “%s” registered a bookmark for “%s”"
 msgstr "Żaden program o nazwie „%s” nie zarejestrował zakładki dla „%s”"
 
-#: ../glib/gbookmarkfile.c:3377
+#: ../glib/gbookmarkfile.c:3379
 #, c-format
 msgid "Failed to expand exec line “%s” with URI “%s”"
 msgstr "Rozwinięcie wiersza exec „%s” z adresem URI „%s” się nie powiodło"
 
-#: ../glib/gconvert.c:477 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
-#: ../glib/gutf8.c:1211 ../glib/gutf8.c:1315
+#: ../glib/gconvert.c:471
+msgid "Unrepresentable character in conversion input"
+msgstr "Nieprzedstawialny znak na wejściu konwersji"
+
+#: ../glib/gconvert.c:498 ../glib/gutf8.c:865 ../glib/gutf8.c:1077
+#: ../glib/gutf8.c:1214 ../glib/gutf8.c:1318
 msgid "Partial character sequence at end of input"
 msgstr "Na końcu wejścia występuje sekwencja odpowiadająca części znaku"
 
-#: ../glib/gconvert.c:742
+#: ../glib/gconvert.c:763
 #, c-format
 msgid "Cannot convert fallback “%s” to codeset “%s”"
 msgstr "Nie można skonwertować napisu zastępczego „%s” na zestaw znaków „%s”"
 
-#: ../glib/gconvert.c:1513
+#: ../glib/gconvert.c:934
+msgid "Embedded NUL byte in conversion input"
+msgstr "Osadzony bajt NUL na wejściu konwersji"
+
+#: ../glib/gconvert.c:955
+msgid "Embedded NUL byte in conversion output"
+msgstr "Osadzony bajt NUL na wyjściu konwersji"
+
+#: ../glib/gconvert.c:1640
 #, c-format
 msgid "The URI “%s” is not an absolute URI using the “file” scheme"
 msgstr ""
 "Adres URI „%s” nie jest bezwzględnym adresem URI, używającym schematu „file”"
 
-#: ../glib/gconvert.c:1523
+#: ../glib/gconvert.c:1650
 #, c-format
 msgid "The local file URI “%s” may not include a “#”"
 msgstr "Adres URI lokalnego pliku „%s” nie może zawierać znaku „#”"
 
-#: ../glib/gconvert.c:1540
+#: ../glib/gconvert.c:1667
 #, c-format
 msgid "The URI “%s” is invalid"
 msgstr "Adres URI „%s” jest nieprawidłowy"
 
-#: ../glib/gconvert.c:1552
+#: ../glib/gconvert.c:1679
 #, c-format
 msgid "The hostname of the URI “%s” is invalid"
 msgstr "Nazwa komputera w adresie URI „%s” jest nieprawidłowa"
 
-#: ../glib/gconvert.c:1568
+#: ../glib/gconvert.c:1695
 #, c-format
 msgid "The URI “%s” contains invalidly escaped characters"
 msgstr "Adres URI „%s” zawiera nieprawidłowe znaki sterujące"
 
-#: ../glib/gconvert.c:1640
+#: ../glib/gconvert.c:1767
 #, c-format
 msgid "The pathname “%s” is not an absolute path"
 msgstr "Ścieżka „%s” nie jest ścieżką bezwzględną"
@@ -4498,7 +4545,7 @@ msgstr "PM"
 msgid "Error opening directory “%s”: %s"
 msgstr "Błąd podczas otwierania katalogu „%s”: %s"
 
-#: ../glib/gfileutils.c:706 ../glib/gfileutils.c:798
+#: ../glib/gfileutils.c:716 ../glib/gfileutils.c:808
 #, c-format
 msgid "Could not allocate %lu byte to read file “%s”"
 msgid_plural "Could not allocate %lu bytes to read file “%s”"
@@ -4506,118 +4553,118 @@ msgstr[0] "Nie można przydzielić %lu bajtu do odczytu pliku „%s”"
 msgstr[1] "Nie można przydzielić %lu bajtów do odczytu pliku „%s”"
 msgstr[2] "Nie można przydzielić %lu bajtów do odczytu pliku „%s”"
 
-#: ../glib/gfileutils.c:723
+#: ../glib/gfileutils.c:733
 #, c-format
 msgid "Error reading file “%s”: %s"
 msgstr "Błąd podczas odczytywania pliku „%s”: %s"
 
-#: ../glib/gfileutils.c:759
+#: ../glib/gfileutils.c:769
 #, c-format
 msgid "File “%s” is too large"
 msgstr "Plik „%s” jest za duży"
 
-#: ../glib/gfileutils.c:823
+#: ../glib/gfileutils.c:833
 #, c-format
 msgid "Failed to read from file “%s”: %s"
 msgstr "Odczytanie z pliku „%s” się nie powiodło: %s"
 
-#: ../glib/gfileutils.c:871 ../glib/gfileutils.c:943
+#: ../glib/gfileutils.c:881 ../glib/gfileutils.c:953
 #, c-format
 msgid "Failed to open file “%s”: %s"
 msgstr "Otwarcie pliku „%s” się nie powiodło: %s"
 
-#: ../glib/gfileutils.c:883
+#: ../glib/gfileutils.c:893
 #, c-format
 msgid "Failed to get attributes of file “%s”: fstat() failed: %s"
 msgstr ""
 "Uzyskanie atrybutów pliku „%s” się nie powiodło: funkcja fstat() zwróciła "
 "błąd: %s"
 
-#: ../glib/gfileutils.c:913
+#: ../glib/gfileutils.c:923
 #, c-format
 msgid "Failed to open file “%s”: fdopen() failed: %s"
 msgstr ""
 "Otwarcie pliku „%s” się nie powiodło: funkcja fdopen() zwróciła błąd: %s"
 
-#: ../glib/gfileutils.c:1012
+#: ../glib/gfileutils.c:1022
 #, c-format
 msgid "Failed to rename file “%s” to “%s”: g_rename() failed: %s"
 msgstr ""
 "Zmiana nazwy pliku „%s” na „%s” się nie powiodła: funkcja g_rename() "
 "zwróciła błąd: %s"
 
-#: ../glib/gfileutils.c:1047 ../glib/gfileutils.c:1554
+#: ../glib/gfileutils.c:1057 ../glib/gfileutils.c:1564
 #, c-format
 msgid "Failed to create file “%s”: %s"
 msgstr "Utworzenie pliku „%s” się nie powiodło: %s"
 
-#: ../glib/gfileutils.c:1074
+#: ../glib/gfileutils.c:1084
 #, c-format
 msgid "Failed to write file “%s”: write() failed: %s"
 msgstr ""
 "Zapisanie pliku „%s” się nie powiodło: funkcja write() zwróciła błąd: %s"
 
-#: ../glib/gfileutils.c:1117
+#: ../glib/gfileutils.c:1127
 #, c-format
 msgid "Failed to write file “%s”: fsync() failed: %s"
 msgstr ""
 "Zapisanie pliku „%s” się nie powiodło: funkcja fsync() zwróciła błąd: %s"
 
-#: ../glib/gfileutils.c:1241
+#: ../glib/gfileutils.c:1251
 #, c-format
 msgid "Existing file “%s” could not be removed: g_unlink() failed: %s"
 msgstr ""
 "Nie można usunąć istniejącego pliku „%s”: funkcja g_unlink() zwróciła błąd: "
 "%s"
 
-#: ../glib/gfileutils.c:1520
+#: ../glib/gfileutils.c:1530
 #, c-format
 msgid "Template “%s” invalid, should not contain a “%s”"
 msgstr "Szablon „%s” jest nieprawidłowy, nie powinien on zawierać „%s”"
 
-#: ../glib/gfileutils.c:1533
+#: ../glib/gfileutils.c:1543
 #, c-format
 msgid "Template “%s” doesn’t contain XXXXXX"
 msgstr "Szablon „%s” nie zawiera XXXXXX"
 
-#: ../glib/gfileutils.c:2058
+#: ../glib/gfileutils.c:2105
 #, c-format
 msgid "Failed to read the symbolic link “%s”: %s"
 msgstr "Odczytanie dowiązania symbolicznego „%s” się nie powiodło: %s"
 
-#: ../glib/giochannel.c:1388
+#: ../glib/giochannel.c:1389
 #, c-format
 msgid "Could not open converter from “%s” to “%s”: %s"
 msgstr "Nie można otworzyć konwertera z „%s” na „%s”: %s"
 
-#: ../glib/giochannel.c:1733
+#: ../glib/giochannel.c:1734
 msgid "Can’t do a raw read in g_io_channel_read_line_string"
 msgstr ""
 "Nie można wykonać surowego odczytu w zmiennej g_io_channel_read_line_string"
 
-#: ../glib/giochannel.c:1780 ../glib/giochannel.c:2038
-#: ../glib/giochannel.c:2125
+#: ../glib/giochannel.c:1781 ../glib/giochannel.c:2039
+#: ../glib/giochannel.c:2126
 msgid "Leftover unconverted data in read buffer"
 msgstr "W buforze odczytu pozostały nieskonwertowane dane"
 
-#: ../glib/giochannel.c:1861 ../glib/giochannel.c:1938
+#: ../glib/giochannel.c:1862 ../glib/giochannel.c:1939
 msgid "Channel terminates in a partial character"
 msgstr "Na końcu kanału występuje sekwencja odpowiadająca części znaku"
 
-#: ../glib/giochannel.c:1924
+#: ../glib/giochannel.c:1925
 msgid "Can’t do a raw read in g_io_channel_read_to_end"
 msgstr "Nie można wykonać surowego odczytu w zmiennej g_io_channel_read_to_end"
 
-#: ../glib/gkeyfile.c:736
+#: ../glib/gkeyfile.c:788
 msgid "Valid key file could not be found in search dirs"
 msgstr ""
 "Nie można odnaleźć prawidłowego pliku klucza w przeszukiwanych katalogach"
 
-#: ../glib/gkeyfile.c:773
+#: ../glib/gkeyfile.c:825
 msgid "Not a regular file"
 msgstr "To nie jest zwykły plik"
 
-#: ../glib/gkeyfile.c:1218
+#: ../glib/gkeyfile.c:1270
 #, c-format
 msgid ""
 "Key file contains line “%s” which is not a key-value pair, group, or comment"
@@ -4625,45 +4672,45 @@ msgstr ""
 "Plik klucza zawiera wiersz „%s”, który nie jest parą klucz-wartość, grupą "
 "lub komentarzem"
 
-#: ../glib/gkeyfile.c:1275
+#: ../glib/gkeyfile.c:1327
 #, c-format
 msgid "Invalid group name: %s"
 msgstr "Nieprawidłowa nazwa grupy: %s"
 
-#: ../glib/gkeyfile.c:1297
+#: ../glib/gkeyfile.c:1349
 msgid "Key file does not start with a group"
 msgstr "Plik klucza nie rozpoczyna się od grupy"
 
-#: ../glib/gkeyfile.c:1323
+#: ../glib/gkeyfile.c:1375
 #, c-format
 msgid "Invalid key name: %s"
 msgstr "Nieprawidłowa nazwa klucza: %s"
 
-#: ../glib/gkeyfile.c:1350
+#: ../glib/gkeyfile.c:1402
 #, c-format
 msgid "Key file contains unsupported encoding “%s”"
 msgstr "Plik klucza zawiera nieobsługiwane kodowanie „%s”"
 
-#: ../glib/gkeyfile.c:1593 ../glib/gkeyfile.c:1766 ../glib/gkeyfile.c:3146
-#: ../glib/gkeyfile.c:3209 ../glib/gkeyfile.c:3339 ../glib/gkeyfile.c:3469
-#: ../glib/gkeyfile.c:3613 ../glib/gkeyfile.c:3842 ../glib/gkeyfile.c:3909
+#: ../glib/gkeyfile.c:1645 ../glib/gkeyfile.c:1818 ../glib/gkeyfile.c:3206
+#: ../glib/gkeyfile.c:3269 ../glib/gkeyfile.c:3399 ../glib/gkeyfile.c:3529
+#: ../glib/gkeyfile.c:3673 ../glib/gkeyfile.c:3902 ../glib/gkeyfile.c:3969
 #, c-format
 msgid "Key file does not have group “%s”"
 msgstr "Plik klucza nie zawiera grupy „%s”"
 
-#: ../glib/gkeyfile.c:1721
+#: ../glib/gkeyfile.c:1773
 #, c-format
 msgid "Key file does not have key “%s” in group “%s”"
 msgstr "Plik klucza nie zawiera klucza „%s” w grupie „%s”"
 
-#: ../glib/gkeyfile.c:1883 ../glib/gkeyfile.c:1999
+#: ../glib/gkeyfile.c:1935 ../glib/gkeyfile.c:2051
 #, c-format
 msgid "Key file contains key “%s” with value “%s” which is not UTF-8"
 msgstr ""
 "Plik klucza zawiera klucz „%s” o wartości „%s”, która nie jest zapisana "
 "w UTF-8"
 
-#: ../glib/gkeyfile.c:1903 ../glib/gkeyfile.c:2019 ../glib/gkeyfile.c:2388
+#: ../glib/gkeyfile.c:1955 ../glib/gkeyfile.c:2071 ../glib/gkeyfile.c:2448
 #, c-format
 msgid ""
 "Key file contains key “%s” which has a value that cannot be interpreted."
@@ -4671,7 +4718,7 @@ msgstr ""
 "Plik klucza zawiera klucz „%s”, który ma wartość niemożliwą do "
 "zinterpretowania."
 
-#: ../glib/gkeyfile.c:2606 ../glib/gkeyfile.c:2975
+#: ../glib/gkeyfile.c:2666 ../glib/gkeyfile.c:3035
 #, c-format
 msgid ""
 "Key file contains key “%s” in group “%s” which has a value that cannot be "
@@ -4680,36 +4727,36 @@ msgstr ""
 "Plik klucza zawiera klucz „%s” w grupie „%s”, która ma wartość niemożliwą do "
 "zinterpretowania."
 
-#: ../glib/gkeyfile.c:2684 ../glib/gkeyfile.c:2761
+#: ../glib/gkeyfile.c:2744 ../glib/gkeyfile.c:2821
 #, c-format
 msgid "Key “%s” in group “%s” has value “%s” where %s was expected"
 msgstr "Klucz „%s” w grupie „%s” ma wartość „%s”, podczas gdy oczekiwano %s"
 
-#: ../glib/gkeyfile.c:4149
+#: ../glib/gkeyfile.c:4209
 msgid "Key file contains escape character at end of line"
 msgstr "Plik klucza zawiera znak sterujący na końcu linii"
 
-#: ../glib/gkeyfile.c:4171
+#: ../glib/gkeyfile.c:4231
 #, c-format
 msgid "Key file contains invalid escape sequence “%s”"
 msgstr "Plik klucza zawiera nieprawidłową sekwencję sterującą „%s”"
 
-#: ../glib/gkeyfile.c:4315
+#: ../glib/gkeyfile.c:4375
 #, c-format
 msgid "Value “%s” cannot be interpreted as a number."
 msgstr "Nie można zinterpretować „%s” jako liczby."
 
-#: ../glib/gkeyfile.c:4329
+#: ../glib/gkeyfile.c:4389
 #, c-format
 msgid "Integer value “%s” out of range"
 msgstr "Wartość całkowita „%s” jest spoza dopuszczalnego zakresu"
 
-#: ../glib/gkeyfile.c:4362
+#: ../glib/gkeyfile.c:4422
 #, c-format
 msgid "Value “%s” cannot be interpreted as a float number."
 msgstr "Nie można zinterpretować „%s” jako liczby zmiennoprzecinkowej."
 
-#: ../glib/gkeyfile.c:4401
+#: ../glib/gkeyfile.c:4461
 #, c-format
 msgid "Value “%s” cannot be interpreted as a boolean."
 msgstr "Nie można zinterpretować „%s” jako wartości logicznej."
@@ -5405,82 +5452,82 @@ msgstr ""
 msgid "Text was empty (or contained only whitespace)"
 msgstr "Tekst jest pusty (lub zawiera tylko spacje)"
 
-#: ../glib/gspawn.c:250
+#: ../glib/gspawn.c:253
 #, c-format
 msgid "Failed to read data from child process (%s)"
 msgstr "Odczytanie danych z procesu potomnego (%s) się nie powiodło"
 
-#: ../glib/gspawn.c:394
+#: ../glib/gspawn.c:401
 #, c-format
 msgid "Unexpected error in select() reading data from a child process (%s)"
 msgstr ""
 "Nieoczekiwany błąd w funkcji select() podczas odczytywania danych z procesu "
 "potomnego (%s)"
 
-#: ../glib/gspawn.c:479
+#: ../glib/gspawn.c:486
 #, c-format
 msgid "Unexpected error in waitpid() (%s)"
 msgstr "Nieoczekiwany błąd w waitpid() (%s)"
 
-#: ../glib/gspawn.c:886 ../glib/gspawn-win32.c:1231
+#: ../glib/gspawn.c:897 ../glib/gspawn-win32.c:1231
 #, c-format
 msgid "Child process exited with code %ld"
 msgstr "Proces potomny został zakończony z kodem %ld"
 
-#: ../glib/gspawn.c:894
+#: ../glib/gspawn.c:905
 #, c-format
 msgid "Child process killed by signal %ld"
 msgstr "Proces potomny został zakończony sygnałem %ld"
 
-#: ../glib/gspawn.c:901
+#: ../glib/gspawn.c:912
 #, c-format
 msgid "Child process stopped by signal %ld"
 msgstr "Proces potomny został zatrzymany sygnałem %ld"
 
-#: ../glib/gspawn.c:908
+#: ../glib/gspawn.c:919
 #, c-format
 msgid "Child process exited abnormally"
 msgstr "Proces potomny został nieprawidłowo zakończony"
 
-#: ../glib/gspawn.c:1313 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
+#: ../glib/gspawn.c:1324 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
 #, c-format
 msgid "Failed to read from child pipe (%s)"
 msgstr ""
 "Odczytanie danych z potoku łączącego z procesem potomnym (%s) się nie "
 "powiodło"
 
-#: ../glib/gspawn.c:1383
+#: ../glib/gspawn.c:1394
 #, c-format
 msgid "Failed to fork (%s)"
 msgstr "Rozdzielenie procesu (%s) się nie powiodło"
 
-#: ../glib/gspawn.c:1532 ../glib/gspawn-win32.c:368
+#: ../glib/gspawn.c:1543 ../glib/gspawn-win32.c:368
 #, c-format
 msgid "Failed to change to directory “%s” (%s)"
 msgstr "Zmiana katalogu na „%s” (%s) się nie powiodła"
 
-#: ../glib/gspawn.c:1542
+#: ../glib/gspawn.c:1553
 #, c-format
 msgid "Failed to execute child process “%s” (%s)"
 msgstr "Wykonanie procesu potomnego „%s” (%s) się nie powiodło"
 
-#: ../glib/gspawn.c:1552
+#: ../glib/gspawn.c:1563
 #, c-format
 msgid "Failed to redirect output or input of child process (%s)"
 msgstr ""
 "Przekierowanie wejścia lub wyjścia procesu potomnego (%s) się nie powiodło"
 
-#: ../glib/gspawn.c:1561
+#: ../glib/gspawn.c:1572
 #, c-format
 msgid "Failed to fork child process (%s)"
 msgstr "Rozdzielenie procesu potomnego (%s) się nie powiodło"
 
-#: ../glib/gspawn.c:1569
+#: ../glib/gspawn.c:1580
 #, c-format
 msgid "Unknown error executing child process “%s”"
 msgstr "Podczas wykonywania procesu potomnego „%s” wystąpił nieznany błąd"
 
-#: ../glib/gspawn.c:1593
+#: ../glib/gspawn.c:1604
 #, c-format
 msgid "Failed to read enough data from child pid pipe (%s)"
 msgstr ""
@@ -5554,93 +5601,161 @@ msgstr "Liczba „%s” jest poza zakresem [%s, %s]"
 msgid "“%s” is not an unsigned number"
 msgstr "„%s” nie jest liczbą bez znaku"
 
-#: ../glib/gutf8.c:808
+#: ../glib/gutf8.c:811
 msgid "Failed to allocate memory"
 msgstr "Przydzielenie pamięci się nie powiodło"
 
-#: ../glib/gutf8.c:941
+#: ../glib/gutf8.c:944
 msgid "Character out of range for UTF-8"
 msgstr "Znak jest poza zakresem dla UTF-8"
 
-#: ../glib/gutf8.c:1042 ../glib/gutf8.c:1051 ../glib/gutf8.c:1181
-#: ../glib/gutf8.c:1190 ../glib/gutf8.c:1329 ../glib/gutf8.c:1426
+#: ../glib/gutf8.c:1045 ../glib/gutf8.c:1054 ../glib/gutf8.c:1184
+#: ../glib/gutf8.c:1193 ../glib/gutf8.c:1332 ../glib/gutf8.c:1429
 msgid "Invalid sequence in conversion input"
 msgstr "Nieprawidłowa sekwencja na wejściu konwersji"
 
-#: ../glib/gutf8.c:1340 ../glib/gutf8.c:1437
+#: ../glib/gutf8.c:1343 ../glib/gutf8.c:1440
 msgid "Character out of range for UTF-16"
 msgstr "Znak jest poza zakresem dla UTF-16"
 
-#: ../glib/gutils.c:2209 ../glib/gutils.c:2236 ../glib/gutils.c:2342
+#: ../glib/gutils.c:2229
 #, c-format
-msgid "%u byte"
-msgid_plural "%u bytes"
-msgstr[0] "%u bajt"
-msgstr[1] "%u bajty"
-msgstr[2] "%u bajtów"
+msgid "%.1f kB"
+msgstr "%.1f kB"
 
-#: ../glib/gutils.c:2215
+#: ../glib/gutils.c:2230 ../glib/gutils.c:2436
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: ../glib/gutils.c:2231 ../glib/gutils.c:2441
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: ../glib/gutils.c:2232 ../glib/gutils.c:2446
+#, c-format
+msgid "%.1f TB"
+msgstr "%.1f TB"
+
+#: ../glib/gutils.c:2233 ../glib/gutils.c:2451
+#, c-format
+msgid "%.1f PB"
+msgstr "%.1f PB"
+
+#: ../glib/gutils.c:2234 ../glib/gutils.c:2456
+#, c-format
+msgid "%.1f EB"
+msgstr "%.1f EB"
+
+#: ../glib/gutils.c:2237
 #, c-format
 msgid "%.1f KiB"
 msgstr "%.1f KiB"
 
-#: ../glib/gutils.c:2217
+#: ../glib/gutils.c:2238
 #, c-format
 msgid "%.1f MiB"
 msgstr "%.1f MiB"
 
-#: ../glib/gutils.c:2220
+#: ../glib/gutils.c:2239
 #, c-format
 msgid "%.1f GiB"
 msgstr "%.1f GiB"
 
-#: ../glib/gutils.c:2223
+#: ../glib/gutils.c:2240
 #, c-format
 msgid "%.1f TiB"
 msgstr "%.1f TiB"
 
-#: ../glib/gutils.c:2226
+#: ../glib/gutils.c:2241
 #, c-format
 msgid "%.1f PiB"
 msgstr "%.1f PiB"
 
-#: ../glib/gutils.c:2229
+#: ../glib/gutils.c:2242
 #, c-format
 msgid "%.1f EiB"
 msgstr "%.1f EiB"
 
-#: ../glib/gutils.c:2242
+#: ../glib/gutils.c:2245
 #, c-format
-msgid "%.1f kB"
-msgstr "%.1f kB"
+msgid "%.1f kb"
+msgstr "%.1f kb"
 
-#: ../glib/gutils.c:2245 ../glib/gutils.c:2360
+#: ../glib/gutils.c:2246
 #, c-format
-msgid "%.1f MB"
-msgstr "%.1f MB"
+msgid "%.1f Mb"
+msgstr "%.1f Mb"
 
-#: ../glib/gutils.c:2248 ../glib/gutils.c:2365
+#: ../glib/gutils.c:2247
 #, c-format
-msgid "%.1f GB"
-msgstr "%.1f GB"
+msgid "%.1f Gb"
+msgstr "%.1f Gb"
 
-#: ../glib/gutils.c:2250 ../glib/gutils.c:2370
+#: ../glib/gutils.c:2248
 #, c-format
-msgid "%.1f TB"
-msgstr "%.1f TB"
+msgid "%.1f Tb"
+msgstr "%.1f Tb"
 
-#: ../glib/gutils.c:2253 ../glib/gutils.c:2375
+#: ../glib/gutils.c:2249
 #, c-format
-msgid "%.1f PB"
-msgstr "%.1f PB"
+msgid "%.1f Pb"
+msgstr "%.1f Pb"
 
-#: ../glib/gutils.c:2256 ../glib/gutils.c:2380
+#: ../glib/gutils.c:2250
 #, c-format
-msgid "%.1f EB"
-msgstr "%.1f EB"
+msgid "%.1f Eb"
+msgstr "%.1f Eb"
+
+#: ../glib/gutils.c:2253
+#, c-format
+msgid "%.1f Kib"
+msgstr "%.1f Kib"
+
+#: ../glib/gutils.c:2254
+#, c-format
+msgid "%.1f Mib"
+msgstr "%.1f Mib"
+
+#: ../glib/gutils.c:2255
+#, c-format
+msgid "%.1f Gib"
+msgstr "%.1f Gib"
+
+#: ../glib/gutils.c:2256
+#, c-format
+msgid "%.1f Tib"
+msgstr "%.1f Tib"
+
+#: ../glib/gutils.c:2257
+#, c-format
+msgid "%.1f Pib"
+msgstr "%.1f Pib"
+
+#: ../glib/gutils.c:2258
+#, c-format
+msgid "%.1f Eib"
+msgstr "%.1f Eib"
+
+#: ../glib/gutils.c:2292 ../glib/gutils.c:2418
+#, c-format
+msgid "%u byte"
+msgid_plural "%u bytes"
+msgstr[0] "%u bajt"
+msgstr[1] "%u bajty"
+msgstr[2] "%u bajtów"
+
+#: ../glib/gutils.c:2296
+#, c-format
+msgid "%u bit"
+msgid_plural "%u bits"
+msgstr[0] "%u bit"
+msgstr[1] "%u bity"
+msgstr[2] "%u bitów"
 
 #. Translators: the %s in "%s bytes" will always be replaced by a number.
-#: ../glib/gutils.c:2293
+#: ../glib/gutils.c:2363
 #, c-format
 msgid "%s byte"
 msgid_plural "%s bytes"
@@ -5648,12 +5763,21 @@ msgstr[0] "%s bajt"
 msgstr[1] "%s bajty"
 msgstr[2] "%s bajtów"
 
+#. Translators: the %s in "%s bits" will always be replaced by a number.
+#: ../glib/gutils.c:2368
+#, c-format
+msgid "%s bit"
+msgid_plural "%s bits"
+msgstr[0] "%s bit"
+msgstr[1] "%s bity"
+msgstr[2] "%s bitów"
+
 #. Translators: this is from the deprecated function g_format_size_for_display() which uses 'KB' to
 #. * mean 1024 bytes.  I am aware that 'KB' is not correct, but it has been preserved for reasons of
 #. * compatibility.  Users will not see this string unless a program is using this deprecated function.
 #. * Please translate as literally as possible.
 #.
-#: ../glib/gutils.c:2355
+#: ../glib/gutils.c:2431
 #, c-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
index 5695f61..cde6cc6 100644 (file)
@@ -9,38 +9,38 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: glib 2.31.21\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
+"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?"
 "product=glib&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2016-11-20 18:36+0000\n"
-"PO-Revision-Date: 2017-02-21 12:51+0800\n"
-"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
+"POT-Creation-Date: 2018-02-02 09:07+0000\n"
+"PO-Revision-Date: 2018-02-10 15:28+0800\n"
+"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
 "Language-Team: Chinese (traditional)\n"
 "Language: zh_TW\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 1.8.12\n"
+"X-Generator: Poedit 2.0.3\n"
 
-#: ../gio/gapplication.c:493
+#: ../gio/gapplication.c:495
 msgid "GApplication options"
 msgstr "GApplication 選項"
 
-#: ../gio/gapplication.c:493
+#: ../gio/gapplication.c:495
 msgid "Show GApplication options"
 msgstr "顯示 GApplication  選項"
 
-#: ../gio/gapplication.c:538
+#: ../gio/gapplication.c:540
 msgid "Enter GApplication service mode (use from D-Bus service files)"
 msgstr "進入 GApplication 服務模式 (用於來自 D-Bus 服務檔案)"
 
-#: ../gio/gapplication.c:550
+#: ../gio/gapplication.c:552
 msgid "Override the application’s ID"
 msgstr "覆蓋此應用程式 ID"
 
 #: ../gio/gapplication-tool.c:45 ../gio/gapplication-tool.c:46
-#: ../gio/gio-tool.c:209 ../gio/gresource-tool.c:488
-#: ../gio/gsettings-tool.c:520
+#: ../gio/gio-tool.c:227 ../gio/gresource-tool.c:488
+#: ../gio/gsettings-tool.c:551
 msgid "Print help"
 msgstr "顯示求助"
 
@@ -49,11 +49,11 @@ msgstr "顯示求助"
 msgid "[COMMAND]"
 msgstr "[指令]"
 
-#: ../gio/gapplication-tool.c:49 ../gio/gio-tool.c:210
+#: ../gio/gapplication-tool.c:49 ../gio/gio-tool.c:228
 msgid "Print version"
 msgstr "顯示版本"
 
-#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:526
+#: ../gio/gapplication-tool.c:50 ../gio/gsettings-tool.c:557
 msgid "Print version information and exit"
 msgstr "輸出版本資訊並離開"
 
@@ -102,7 +102,7 @@ msgid "APPID"
 msgstr "APPID"
 
 #: ../gio/gapplication-tool.c:70 ../gio/gapplication-tool.c:133
-#: ../gio/gdbus-tool.c:90 ../gio/gio-tool.c:206
+#: ../gio/gdbus-tool.c:90 ../gio/gio-tool.c:224
 msgid "COMMAND"
 msgstr "指令"
 
@@ -141,7 +141,7 @@ msgid "Optional parameter to the action invocation, in GVariant format"
 msgstr "動作呼叫時選擇性的參數,以 GVariant 格式"
 
 #: ../gio/gapplication-tool.c:96 ../gio/gresource-tool.c:526
-#: ../gio/gsettings-tool.c:612
+#: ../gio/gsettings-tool.c:643
 #, c-format
 msgid ""
 "Unknown command %s\n"
@@ -155,7 +155,7 @@ msgid "Usage:\n"
 msgstr "用法:\n"
 
 #: ../gio/gapplication-tool.c:114 ../gio/gresource-tool.c:551
-#: ../gio/gsettings-tool.c:647
+#: ../gio/gsettings-tool.c:678
 msgid "Arguments:\n"
 msgstr "引數:\n"
 
@@ -259,7 +259,7 @@ msgstr ""
 #: ../gio/ginputstream.c:179 ../gio/ginputstream.c:379
 #: ../gio/ginputstream.c:617 ../gio/ginputstream.c:1019
 #: ../gio/goutputstream.c:203 ../gio/goutputstream.c:834
-#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:206
+#: ../gio/gpollableinputstream.c:205 ../gio/gpollableoutputstream.c:209
 #, c-format
 msgid "Too large count value passed to %s"
 msgstr "傳給 %s 的計數值太大"
@@ -283,8 +283,8 @@ msgid "Truncate not supported on base stream"
 msgstr "在基礎串流中不支援截短(truncate)"
 
 #: ../gio/gcancellable.c:317 ../gio/gdbusconnection.c:1849
-#: ../gio/gdbusprivate.c:1377 ../gio/gsimpleasyncresult.c:870
-#: ../gio/gsimpleasyncresult.c:896
+#: ../gio/gdbusprivate.c:1402 ../gio/gsimpleasyncresult.c:871
+#: ../gio/gsimpleasyncresult.c:897
 #, c-format
 msgid "Operation was cancelled"
 msgstr "操作已被取消"
@@ -302,43 +302,43 @@ msgid "Not enough space in destination"
 msgstr "在目的端中沒有足夠的空間"
 
 #: ../gio/gcharsetconverter.c:342 ../gio/gdatainputstream.c:848
-#: ../gio/gdatainputstream.c:1257 ../glib/gconvert.c:438 ../glib/gconvert.c:845
-#: ../glib/giochannel.c:1556 ../glib/giochannel.c:1598
-#: ../glib/giochannel.c:2442 ../glib/gutf8.c:855 ../glib/gutf8.c:1308
+#: ../gio/gdatainputstream.c:1261 ../glib/gconvert.c:452 ../glib/gconvert.c:877
+#: ../glib/giochannel.c:1557 ../glib/giochannel.c:1599
+#: ../glib/giochannel.c:2443 ../glib/gutf8.c:866 ../glib/gutf8.c:1319
 msgid "Invalid byte sequence in conversion input"
 msgstr "轉換輸入資料時遇到不正確的位元組組合"
 
-#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:446 ../glib/gconvert.c:770
-#: ../glib/giochannel.c:1563 ../glib/giochannel.c:2454
+#: ../gio/gcharsetconverter.c:347 ../glib/gconvert.c:460 ../glib/gconvert.c:791
+#: ../glib/giochannel.c:1564 ../glib/giochannel.c:2455
 #, c-format
 msgid "Error during conversion: %s"
 msgstr "轉換時發生錯誤:%s"
 
-#: ../gio/gcharsetconverter.c:444 ../gio/gsocket.c:1078
+#: ../gio/gcharsetconverter.c:445 ../gio/gsocket.c:1104
 msgid "Cancellable initialization not supported"
 msgstr "不支援可取消的初始化"
 
-#: ../gio/gcharsetconverter.c:454 ../glib/gconvert.c:321
-#: ../glib/giochannel.c:1384
+#: ../gio/gcharsetconverter.c:456 ../glib/gconvert.c:327
+#: ../glib/giochannel.c:1385
 #, c-format
 msgid "Conversion from character set “%s” to “%s” is not supported"
 msgstr "不支援將字元集「%s」轉換成「%s」"
 
-#: ../gio/gcharsetconverter.c:458 ../glib/gconvert.c:325
+#: ../gio/gcharsetconverter.c:460 ../glib/gconvert.c:331
 #, c-format
 msgid "Could not open converter from “%s” to “%s”"
 msgstr "無法開啟「%s」至「%s」的轉換"
 
-#: ../gio/gcontenttype.c:335
+#: ../gio/gcontenttype.c:358
 #, c-format
 msgid "%s type"
 msgstr "%s 類型"
 
-#: ../gio/gcontenttype-win32.c:160
+#: ../gio/gcontenttype-win32.c:177
 msgid "Unknown type"
 msgstr "不明的類型"
 
-#: ../gio/gcontenttype-win32.c:162
+#: ../gio/gcontenttype-win32.c:179
 #, c-format
 msgid "%s filetype"
 msgstr "%s 檔案類型"
@@ -363,53 +363,53 @@ msgstr "在這個 OS 無法做到憑證偽裝"
 msgid "Unexpected early end-of-stream"
 msgstr "未預期的串流過早結束"
 
-#: ../gio/gdbusaddress.c:153 ../gio/gdbusaddress.c:241
-#: ../gio/gdbusaddress.c:322
+#: ../gio/gdbusaddress.c:158 ../gio/gdbusaddress.c:246
+#: ../gio/gdbusaddress.c:327
 #, c-format
 msgid "Unsupported key “%s” in address entry “%s”"
 msgstr "位址項目「%2$s」有不支援的設定鍵「%1$s」"
 
-#: ../gio/gdbusaddress.c:180
+#: ../gio/gdbusaddress.c:185
 #, c-format
 msgid ""
 "Address “%s” is invalid (need exactly one of path, tmpdir or abstract keys)"
 msgstr "位址「%s」是無效的 (需要有明確的 path、tmpdir 或 abstract 設定鍵之一)"
 
-#: ../gio/gdbusaddress.c:193
+#: ../gio/gdbusaddress.c:198
 #, c-format
 msgid "Meaningless key/value pair combination in address entry “%s”"
 msgstr "在位址項「%s」有無意義的設定鍵/數值組合配對"
 
-#: ../gio/gdbusaddress.c:256 ../gio/gdbusaddress.c:337
+#: ../gio/gdbusaddress.c:261 ../gio/gdbusaddress.c:342
 #, c-format
 msgid "Error in address “%s” — the port attribute is malformed"
 msgstr "位址「%s」有錯誤 — port 屬性的格式不良"
 
-#: ../gio/gdbusaddress.c:267 ../gio/gdbusaddress.c:348
+#: ../gio/gdbusaddress.c:272 ../gio/gdbusaddress.c:353
 #, c-format
 msgid "Error in address “%s” — the family attribute is malformed"
 msgstr "位址「%s」有錯誤 — family 屬性的格式不良"
 
-#: ../gio/gdbusaddress.c:457
+#: ../gio/gdbusaddress.c:463
 #, c-format
 msgid "Address element “%s” does not contain a colon (:)"
 msgstr "位址元素「%s」,並未包含分號 (:)"
 
-#: ../gio/gdbusaddress.c:478
+#: ../gio/gdbusaddress.c:484
 #, c-format
 msgid ""
 "Key/Value pair %d, “%s”, in address element “%s” does not contain an equal "
 "sign"
 msgstr "設定鍵/數值配對 %d,「%s」,於位址元素「%s」,並未包含等於符號"
 
-#: ../gio/gdbusaddress.c:492
+#: ../gio/gdbusaddress.c:498
 #, c-format
 msgid ""
 "Error unescaping key or value in Key/Value pair %d, “%s”, in address element "
 "“%s”"
 msgstr "在設定鍵/數值配對 %d,「%s」,位址元素「%s」中有錯誤的反轉義設定鍵"
 
-#: ../gio/gdbusaddress.c:570
+#: ../gio/gdbusaddress.c:576
 #, c-format
 msgid ""
 "Error in address “%s” — the unix transport requires exactly one of the keys "
@@ -417,102 +417,102 @@ msgid ""
 msgstr ""
 "位址「%s」有錯誤 — unix 傳輸需要明確的設定一個「path」或「abstract」設定鍵"
 
-#: ../gio/gdbusaddress.c:606
+#: ../gio/gdbusaddress.c:612
 #, c-format
 msgid "Error in address “%s” — the host attribute is missing or malformed"
 msgstr "位址「%s」有錯誤 — host 屬性遺失或格式不良"
 
-#: ../gio/gdbusaddress.c:620
+#: ../gio/gdbusaddress.c:626
 #, c-format
 msgid "Error in address “%s” — the port attribute is missing or malformed"
 msgstr "位址「%s」有錯誤 — port 屬性遺失或格式不良"
 
-#: ../gio/gdbusaddress.c:634
+#: ../gio/gdbusaddress.c:640
 #, c-format
 msgid "Error in address “%s” — the noncefile attribute is missing or malformed"
 msgstr "位址「%s」有錯誤 — noncefile 屬性遺失或格式不良"
 
-#: ../gio/gdbusaddress.c:655
+#: ../gio/gdbusaddress.c:661
 msgid "Error auto-launching: "
 msgstr "自動執行失敗:"
 
-#: ../gio/gdbusaddress.c:663
+#: ../gio/gdbusaddress.c:669
 #, c-format
 msgid "Unknown or unsupported transport “%s” for address “%s”"
 msgstr "位址「%2$s」有不明或不支援的傳輸「%1$s」"
 
-#: ../gio/gdbusaddress.c:699
+#: ../gio/gdbusaddress.c:714
 #, c-format
 msgid "Error opening nonce file “%s”: %s"
 msgstr "開啟臨時檔案「%s」時發生錯誤:%s"
 
-#: ../gio/gdbusaddress.c:717
+#: ../gio/gdbusaddress.c:733
 #, c-format
 msgid "Error reading from nonce file “%s”: %s"
 msgstr "讀取臨時檔案「%s」時發生錯誤:%s"
 
-#: ../gio/gdbusaddress.c:726
+#: ../gio/gdbusaddress.c:742
 #, c-format
 msgid "Error reading from nonce file “%s”, expected 16 bytes, got %d"
 msgstr "讀取臨時檔案「%s」時發生錯誤,預期為 16 位元組,卻得到 %d"
 
-#: ../gio/gdbusaddress.c:744
+#: ../gio/gdbusaddress.c:760
 #, c-format
 msgid "Error writing contents of nonce file “%s” to stream:"
 msgstr "寫入臨時檔案「%s」的內容到串流時發生錯誤:"
 
-#: ../gio/gdbusaddress.c:951
+#: ../gio/gdbusaddress.c:969
 msgid "The given address is empty"
 msgstr "指定的位址是空白的"
 
-#: ../gio/gdbusaddress.c:1064
+#: ../gio/gdbusaddress.c:1082
 #, c-format
 msgid "Cannot spawn a message bus when setuid"
 msgstr "在 setuid 時不能產生訊息匯流排"
 
-#: ../gio/gdbusaddress.c:1071
+#: ../gio/gdbusaddress.c:1089
 msgid "Cannot spawn a message bus without a machine-id: "
 msgstr "沒有 machine-id 不能產生訊息匯流排:"
 
-#: ../gio/gdbusaddress.c:1078
+#: ../gio/gdbusaddress.c:1096
 #, c-format
 msgid "Cannot autolaunch D-Bus without X11 $DISPLAY"
 msgstr "沒有 X11 $DISPLAY 不能自動執行 D-Bus "
 
-#: ../gio/gdbusaddress.c:1120
+#: ../gio/gdbusaddress.c:1138
 #, c-format
 msgid "Error spawning command line “%s”: "
 msgstr "產生命令列「%s」時出現錯誤:"
 
-#: ../gio/gdbusaddress.c:1337
+#: ../gio/gdbusaddress.c:1355
 #, c-format
 msgid "(Type any character to close this window)\n"
 msgstr "(輸入任何字元以關閉這個視窗)\n"
 
-#: ../gio/gdbusaddress.c:1489
+#: ../gio/gdbusaddress.c:1509
 #, c-format
 msgid "Session dbus not running, and autolaunch failed"
 msgstr "作業階段 dbus 尚未執行,且自動執行失敗"
 
-#: ../gio/gdbusaddress.c:1500
+#: ../gio/gdbusaddress.c:1520
 #, c-format
 msgid "Cannot determine session bus address (not implemented for this OS)"
 msgstr "不能判斷作業階段匯流排位址(沒有在這個 OS 實作)"
 
-#: ../gio/gdbusaddress.c:1635
+#: ../gio/gdbusaddress.c:1658
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
 "— unknown value “%s”"
 msgstr "不能從 DBUS_STARTER_BUS_TYPE 環境變數判斷匯流排位址 — 不明的數值「%s」"
 
-#: ../gio/gdbusaddress.c:1644 ../gio/gdbusconnection.c:7142
+#: ../gio/gdbusaddress.c:1667 ../gio/gdbusconnection.c:7158
 msgid ""
 "Cannot determine bus address because the DBUS_STARTER_BUS_TYPE environment "
 "variable is not set"
 msgstr "不能判斷匯流排位址,因為尚未設定 DBUS_STARTER_BUS_TYPE 環境變數"
 
-#: ../gio/gdbusaddress.c:1654
+#: ../gio/gdbusaddress.c:1677
 #, c-format
 msgid "Unknown bus type %d"
 msgstr "不明的匯流排類型 %d"
@@ -531,43 +531,43 @@ msgid ""
 "Exhausted all available authentication mechanisms (tried: %s) (available: %s)"
 msgstr "竭盡所有可用的核對機制 (已嘗試:%s) (可用:%s)"
 
-#: ../gio/gdbusauth.c:1173
+#: ../gio/gdbusauth.c:1171
 msgid "Cancelled via GDBusAuthObserver::authorize-authenticated-peer"
 msgstr "已透過 GDBusAuthObserver::authorize-authenticated-peer 取消"
 
-#: ../gio/gdbusauthmechanismsha1.c:261
+#: ../gio/gdbusauthmechanismsha1.c:262
 #, c-format
 msgid "Error when getting information for directory “%s”: %s"
 msgstr "從目錄「%s」取得資訊時發生錯誤:%s"
 
-#: ../gio/gdbusauthmechanismsha1.c:273
+#: ../gio/gdbusauthmechanismsha1.c:274
 #, c-format
 msgid ""
 "Permissions on directory “%s” are malformed. Expected mode 0700, got 0%o"
 msgstr "目錄「%s」的權限格式下良。預期的模式為 0700,卻得到 0%o"
 
-#: ../gio/gdbusauthmechanismsha1.c:294
+#: ../gio/gdbusauthmechanismsha1.c:296
 #, c-format
 msgid "Error creating directory “%s”: %s"
 msgstr "建立目錄「%s」時發生錯誤:%s"
 
-#: ../gio/gdbusauthmechanismsha1.c:377
+#: ../gio/gdbusauthmechanismsha1.c:379
 #, c-format
 msgid "Error opening keyring “%s” for reading: "
 msgstr "開啟鑰匙圈「%s」讀取時發生錯誤:"
 
-#: ../gio/gdbusauthmechanismsha1.c:401 ../gio/gdbusauthmechanismsha1.c:714
+#: ../gio/gdbusauthmechanismsha1.c:402 ../gio/gdbusauthmechanismsha1.c:720
 #, c-format
 msgid "Line %d of the keyring at “%s” with content “%s” is malformed"
 msgstr "位於「%2$s」內容「%3$s」的鑰匙圈第 %1$d 列格式不良"
 
-#: ../gio/gdbusauthmechanismsha1.c:415 ../gio/gdbusauthmechanismsha1.c:728
+#: ../gio/gdbusauthmechanismsha1.c:416 ../gio/gdbusauthmechanismsha1.c:734
 #, c-format
 msgid ""
 "First token of line %d of the keyring at “%s” with content “%s” is malformed"
 msgstr "位於「%2$s」內容「%3$s」的鑰匙圈第 %1$d 列第一記號格式不良"
 
-#: ../gio/gdbusauthmechanismsha1.c:430 ../gio/gdbusauthmechanismsha1.c:742
+#: ../gio/gdbusauthmechanismsha1.c:430 ../gio/gdbusauthmechanismsha1.c:748
 #, c-format
 msgid ""
 "Second token of line %d of the keyring at “%s” with content “%s” is malformed"
@@ -578,37 +578,37 @@ msgstr "位於「%2$s」內容「%3$s」的鑰匙圈第 %1$d 列第二記號格
 msgid "Didn’t find cookie with id %d in the keyring at “%s”"
 msgstr "在「%2$s」鑰匙圈找不到 id %1$d 的 cookie"
 
-#: ../gio/gdbusauthmechanismsha1.c:532
+#: ../gio/gdbusauthmechanismsha1.c:536
 #, c-format
 msgid "Error deleting stale lock file “%s”: %s"
 msgstr "刪除舊的鎖定檔案「%s」時發生錯誤:%s"
 
-#: ../gio/gdbusauthmechanismsha1.c:564
+#: ../gio/gdbusauthmechanismsha1.c:568
 #, c-format
 msgid "Error creating lock file “%s”: %s"
 msgstr "建立鎖定檔案「%s」時發生錯誤:%s"
 
-#: ../gio/gdbusauthmechanismsha1.c:594
+#: ../gio/gdbusauthmechanismsha1.c:599
 #, c-format
 msgid "Error closing (unlinked) lock file “%s”: %s"
 msgstr "關閉 (取消連結) 鎖定檔案時發生錯誤「%s」:%s"
 
-#: ../gio/gdbusauthmechanismsha1.c:604
+#: ../gio/gdbusauthmechanismsha1.c:610
 #, c-format
 msgid "Error unlinking lock file “%s”: %s"
 msgstr "取消連結鎖定檔案時發生錯誤「%s」:%s"
 
-#: ../gio/gdbusauthmechanismsha1.c:681
+#: ../gio/gdbusauthmechanismsha1.c:687
 #, c-format
 msgid "Error opening keyring “%s” for writing: "
 msgstr "開啟鑰匙圈「%s」寫入時發生錯誤:"
 
-#: ../gio/gdbusauthmechanismsha1.c:878
+#: ../gio/gdbusauthmechanismsha1.c:883
 #, c-format
 msgid "(Additionally, releasing the lock for “%s” also failed: %s) "
 msgstr "(另外,釋放「%s」的鎖定失敗:%s)"
 
-#: ../gio/gdbusconnection.c:612 ../gio/gdbusconnection.c:2377
+#: ../gio/gdbusconnection.c:612 ../gio/gdbusconnection.c:2378
 msgid "The connection is closed"
 msgstr "這個連線已關閉"
 
@@ -616,143 +616,140 @@ msgstr "這個連線已關閉"
 msgid "Timeout was reached"
 msgstr "已達逾時時間"
 
-#: ../gio/gdbusconnection.c:2499
+#: ../gio/gdbusconnection.c:2500
 msgid ""
 "Unsupported flags encountered when constructing a client-side connection"
 msgstr "當建立客戶端連線時遇到不支援的旗標"
 
-#: ../gio/gdbusconnection.c:4109 ../gio/gdbusconnection.c:4456
+#: ../gio/gdbusconnection.c:4124 ../gio/gdbusconnection.c:4471
 #, c-format
 msgid ""
 "No such interface 'org.freedesktop.DBus.Properties' on object at path %s"
 msgstr "在路徑 %s 的物件沒有「org.freedesktop.DBus.Properties」這個介面"
 
-#: ../gio/gdbusconnection.c:4251
+#: ../gio/gdbusconnection.c:4266
 #, c-format
 msgid "No such property '%s'"
 msgstr "沒有這個屬性「%s」"
 
-#: ../gio/gdbusconnection.c:4263
+#: ../gio/gdbusconnection.c:4278
 #, c-format
 msgid "Property '%s' is not readable"
 msgstr "屬性「%s」無法讀取"
 
-#: ../gio/gdbusconnection.c:4274
+#: ../gio/gdbusconnection.c:4289
 #, c-format
 msgid "Property '%s' is not writable"
 msgstr "屬性「%s」無法寫入"
 
-#: ../gio/gdbusconnection.c:4294
+#: ../gio/gdbusconnection.c:4309
 #, c-format
 msgid "Error setting property '%s': Expected type '%s' but got '%s'"
 msgstr "設定屬性「%s」錯誤:預期的類型為「%s」但得到「%s」"
 
-#: ../gio/gdbusconnection.c:4399 ../gio/gdbusconnection.c:6573
+#: ../gio/gdbusconnection.c:4414 ../gio/gdbusconnection.c:4622
+#: ../gio/gdbusconnection.c:6589
 #, c-format
 msgid "No such interface '%s'"
 msgstr "沒有這個介面「%s」"
 
-#: ../gio/gdbusconnection.c:4607
-msgid "No such interface"
-msgstr "沒有這個介面"
-
-#: ../gio/gdbusconnection.c:4825 ../gio/gdbusconnection.c:7082
+#: ../gio/gdbusconnection.c:4840 ../gio/gdbusconnection.c:7098
 #, c-format
 msgid "No such interface '%s' on object at path %s"
 msgstr "在路徑 %2$s 的物件沒有「%1$s」這個介面"
 
-#: ../gio/gdbusconnection.c:4923
+#: ../gio/gdbusconnection.c:4938
 #, c-format
 msgid "No such method '%s'"
 msgstr "沒有這個方法「%s」"
 
-#: ../gio/gdbusconnection.c:4954
+#: ../gio/gdbusconnection.c:4969
 #, c-format
 msgid "Type of message, '%s', does not match expected type '%s'"
 msgstr "訊息的類型,「%s」,不符合預期的類型「%s」"
 
-#: ../gio/gdbusconnection.c:5152
+#: ../gio/gdbusconnection.c:5167
 #, c-format
 msgid "An object is already exported for the interface %s at %s"
 msgstr "有物件已為介面 %s 匯出於 %s"
 
-#: ../gio/gdbusconnection.c:5378
+#: ../gio/gdbusconnection.c:5393
 #, c-format
 msgid "Unable to retrieve property %s.%s"
 msgstr "無法取回屬性 %s.%s"
 
-#: ../gio/gdbusconnection.c:5434
+#: ../gio/gdbusconnection.c:5449
 #, c-format
 msgid "Unable to set property %s.%s"
 msgstr "無法設定屬性%s.%s"
 
-#: ../gio/gdbusconnection.c:5610
+#: ../gio/gdbusconnection.c:5625
 #, c-format
 msgid "Method '%s' returned type '%s', but expected '%s'"
 msgstr "方法「%s」傳回類型「%s」,但預期為「%s」"
 
-#: ../gio/gdbusconnection.c:6684
+#: ../gio/gdbusconnection.c:6700
 #, c-format
 msgid "Method '%s' on interface '%s' with signature '%s' does not exist"
 msgstr "介面「%2$s」簽章「%3$s」的方法「%1$s」不存在"
 
-#: ../gio/gdbusconnection.c:6805
+#: ../gio/gdbusconnection.c:6821
 #, c-format
 msgid "A subtree is already exported for %s"
 msgstr "子樹狀目錄已為 %s 匯出"
 
-#: ../gio/gdbusconnection.c:7133
+#: ../gio/gdbusconnection.c:7149
 #, c-format
 msgid ""
 "Cannot determine bus address from DBUS_STARTER_BUS_TYPE environment variable "
 "- unknown value '%s'"
 msgstr "不能從 DBUS_STARTER_BUS_TYPE 環境變數判斷匯流排位址 - 不明的數值「%s」"
 
-#: ../gio/gdbusmessage.c:1244
+#: ../gio/gdbusmessage.c:1246
 msgid "type is INVALID"
 msgstr "類型為無效"
 
-#: ../gio/gdbusmessage.c:1255
+#: ../gio/gdbusmessage.c:1257
 msgid "METHOD_CALL message: PATH or MEMBER header field is missing"
 msgstr "METHOD_CALL 訊息:缺少 PATH 或 MEMBER 標頭欄位"
 
-#: ../gio/gdbusmessage.c:1266
+#: ../gio/gdbusmessage.c:1268
 msgid "METHOD_RETURN message: REPLY_SERIAL header field is missing"
 msgstr "METHOD_RETURN 訊息:缺少 REPLY_SERIAL 標頭欄位"
 
-#: ../gio/gdbusmessage.c:1278
+#: ../gio/gdbusmessage.c:1280
 msgid "ERROR message: REPLY_SERIAL or ERROR_NAME header field is missing"
 msgstr "ERROR 訊息:缺少 REPLY_SERIAL 或 ERROR_NAME 標頭欄位"
 
-#: ../gio/gdbusmessage.c:1291
+#: ../gio/gdbusmessage.c:1293
 msgid "SIGNAL message: PATH, INTERFACE or MEMBER header field is missing"
 msgstr "SIGNAL 訊息:缺少 PATH、INTERFACE 或 MEMBER 標頭欄位"
 
-#: ../gio/gdbusmessage.c:1299
+#: ../gio/gdbusmessage.c:1301
 msgid ""
 "SIGNAL message: The PATH header field is using the reserved value /org/"
 "freedesktop/DBus/Local"
 msgstr "SIGNAL 訊息:PATH 標頭欄位使用了保留的數值 /org/freedesktop/DBus/Local"
 
-#: ../gio/gdbusmessage.c:1307
+#: ../gio/gdbusmessage.c:1309
 msgid ""
 "SIGNAL message: The INTERFACE header field is using the reserved value org."
 "freedesktop.DBus.Local"
 msgstr ""
 "SIGNAL 訊息:INTERFACE 標頭欄位使用了保留的數值 org.freedesktop.DBus.Local"
 
-#: ../gio/gdbusmessage.c:1355 ../gio/gdbusmessage.c:1415
+#: ../gio/gdbusmessage.c:1357 ../gio/gdbusmessage.c:1417
 #, c-format
 msgid "Wanted to read %lu byte but only got %lu"
 msgid_plural "Wanted to read %lu bytes but only got %lu"
 msgstr[0] "嘗試讀取 %lu 位元組卻只得到 %lu"
 
-#: ../gio/gdbusmessage.c:1369
+#: ../gio/gdbusmessage.c:1371
 #, c-format
 msgid "Expected NUL byte after the string “%s” but found byte %d"
 msgstr "預期在字串「%s」之後為 NUL 位元組,但是發現位元組 %d"
 
-#: ../gio/gdbusmessage.c:1388
+#: ../gio/gdbusmessage.c:1390
 #, c-format
 msgid ""
 "Expected valid UTF-8 string but found invalid bytes at byte offset %d "
@@ -761,17 +758,17 @@ msgstr ""
 "預期為有效的 UTF-8 字串但是在位元組 %d 處發現無效的位元組 (字串的長度為 %d)。"
 "到那一點之前的有效 UTF-8 字串為「%s」"
 
-#: ../gio/gdbusmessage.c:1587
+#: ../gio/gdbusmessage.c:1593
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus object path"
 msgstr "已解析數值「%s」不是有效的 D-Bus 物件路徑"
 
-#: ../gio/gdbusmessage.c:1609
+#: ../gio/gdbusmessage.c:1615
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature"
 msgstr "已解析數值「%s」不是一個有效的 D-Bus 簽章"
 
-#: ../gio/gdbusmessage.c:1656
+#: ../gio/gdbusmessage.c:1662
 #, c-format
 msgid ""
 "Encountered array of length %u byte. Maximum length is 2<<26 bytes (64 MiB)."
@@ -779,7 +776,7 @@ msgid_plural ""
 "Encountered array of length %u bytes. Maximum length is 2<<26 bytes (64 MiB)."
 msgstr[0] "遇到長度為 %u 位元組的陣列。最大長度為 2<<26 位元組 (64 MiB)。"
 
-#: ../gio/gdbusmessage.c:1676
+#: ../gio/gdbusmessage.c:1682
 #, c-format
 msgid ""
 "Encountered array of type “a%c”, expected to have a length a multiple of %u "
@@ -787,18 +784,18 @@ msgid ""
 msgstr ""
 "遇到類型「a%c」的陣列,預期長度應為 %u 位元組的倍數,但發現長度為 %u 位元組"
 
-#: ../gio/gdbusmessage.c:1843
+#: ../gio/gdbusmessage.c:1849
 #, c-format
 msgid "Parsed value “%s” for variant is not a valid D-Bus signature"
 msgstr "已分析數值「%s」不是有效的 D-Bus 簽章"
 
-#: ../gio/gdbusmessage.c:1867
+#: ../gio/gdbusmessage.c:1873
 #, c-format
 msgid ""
 "Error deserializing GVariant with type string “%s” from the D-Bus wire format"
 msgstr "從 D-Bus 線性格式以類型字串「%s」反序列化 GVariant 時發生錯誤"
 
-#: ../gio/gdbusmessage.c:2051
+#: ../gio/gdbusmessage.c:2055
 #, c-format
 msgid ""
 "Invalid endianness value. Expected 0x6c (“l”) or 0x42 (“B”) but found value "
@@ -806,80 +803,79 @@ msgid ""
 msgstr ""
 "無效的字節順序數值。預期為 0x6c (「I」)或 0x42 (「B」)卻得到數值 0x%02x"
 
-#: ../gio/gdbusmessage.c:2064
+#: ../gio/gdbusmessage.c:2068
 #, c-format
 msgid "Invalid major protocol version. Expected 1 but found %d"
 msgstr "無效的主通訊協定版本。預期為 1 但找到 %d"
 
-#: ../gio/gdbusmessage.c:2120
+#: ../gio/gdbusmessage.c:2124
 #, c-format
 msgid "Signature header with signature “%s” found but message body is empty"
 msgstr "發現簽章「%s」的簽章標頭但訊息主體是空的"
 
-#: ../gio/gdbusmessage.c:2134
+#: ../gio/gdbusmessage.c:2138
 #, c-format
 msgid "Parsed value “%s” is not a valid D-Bus signature (for body)"
 msgstr "已解析數值「%s」不是有效的 D-Bus 簽章 (於主體)"
 
-#: ../gio/gdbusmessage.c:2164
+#: ../gio/gdbusmessage.c:2168
 #, c-format
 msgid "No signature header in message but the message body is %u byte"
 msgid_plural "No signature header in message but the message body is %u bytes"
 msgstr[0] "在訊息中沒有簽章標頭但訊息主體有 %u 位元組"
 
-#: ../gio/gdbusmessage.c:2174
+#: ../gio/gdbusmessage.c:2178
 msgid "Cannot deserialize message: "
 msgstr "不能反序列化訊息:"
 
-#: ../gio/gdbusmessage.c:2515
+#: ../gio/gdbusmessage.c:2519
 #, c-format
 msgid ""
 "Error serializing GVariant with type string “%s” to the D-Bus wire format"
 msgstr "從 D-Bus 線性格式以類型字串「%s」序列化 GVariant 時發生錯誤"
 
-#: ../gio/gdbusmessage.c:2652
+#: ../gio/gdbusmessage.c:2656
 #, c-format
 msgid ""
-"Message has %d file descriptors but the header field indicates %d file "
-"descriptors"
-msgstr "訊息有 %d 檔案描述符但標頭欄位表示有 %d 檔案描述符"
+"Number of file descriptors in message (%d) differs from header field (%d)"
+msgstr ""
 
-#: ../gio/gdbusmessage.c:2660
+#: ../gio/gdbusmessage.c:2664
 msgid "Cannot serialize message: "
 msgstr "不能序列化訊息:"
 
-#: ../gio/gdbusmessage.c:2704
+#: ../gio/gdbusmessage.c:2708
 #, c-format
 msgid "Message body has signature “%s” but there is no signature header"
 msgstr "訊息主體有簽章「%s」但是沒有簽章標頭"
 
-#: ../gio/gdbusmessage.c:2714
+#: ../gio/gdbusmessage.c:2718
 #, c-format
 msgid ""
 "Message body has type signature “%s” but signature in the header field is "
 "“%s”"
 msgstr "訊息主體有類型簽章「%s」但是標頭欄位中的簽章為「%s」"
 
-#: ../gio/gdbusmessage.c:2730
+#: ../gio/gdbusmessage.c:2734
 #, c-format
 msgid "Message body is empty but signature in the header field is “(%s)”"
 msgstr "訊息主體是空的但是標頭欄位中的簽章為「%s」"
 
-#: ../gio/gdbusmessage.c:3283
+#: ../gio/gdbusmessage.c:3287
 #, c-format
 msgid "Error return with body of type “%s”"
 msgstr "傳回類型「%s」主體時發生錯誤"
 
-#: ../gio/gdbusmessage.c:3291
+#: ../gio/gdbusmessage.c:3295
 msgid "Error return with empty body"
 msgstr "傳回空白主體錯誤"
 
-#: ../gio/gdbusprivate.c:2038
+#: ../gio/gdbusprivate.c:2066
 #, c-format
 msgid "Unable to get Hardware profile: %s"
 msgstr "無法取得硬體設定檔:%s"
 
-#: ../gio/gdbusprivate.c:2083
+#: ../gio/gdbusprivate.c:2111
 msgid "Unable to load /var/lib/dbus/machine-id or /etc/machine-id: "
 msgstr "無法載入 /var/lib/dbus/machine-id 或 /etc/machine-id:"
 
@@ -893,7 +889,7 @@ msgstr "呼叫 %s StartServiceByName 時發生錯誤:"
 msgid "Unexpected reply %d from StartServiceByName(\"%s\") method"
 msgstr "來自 StartServiceByName(\"%2$s\") 方法的未預期回應 %1$d"
 
-#: ../gio/gdbusproxy.c:2713 ../gio/gdbusproxy.c:2847
+#: ../gio/gdbusproxy.c:2719 ../gio/gdbusproxy.c:2853
 msgid ""
 "Cannot invoke method; proxy is for a well-known name without an owner and "
 "proxy was constructed with the G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START flag"
@@ -909,23 +905,32 @@ msgstr "不支援抽象命名空間"
 msgid "Cannot specify nonce file when creating a server"
 msgstr "當建立伺服器時不能指定臨時檔案"
 
-#: ../gio/gdbusserver.c:873
+#: ../gio/gdbusserver.c:876
 #, c-format
 msgid "Error writing nonce file at “%s”: %s"
 msgstr "在「%s」寫入臨時檔案時發生錯誤:%s"
 
-#: ../gio/gdbusserver.c:1044
+#: ../gio/gdbusserver.c:1047
 #, c-format
 msgid "The string “%s” is not a valid D-Bus GUID"
 msgstr "字串「%s」不是一個有效的 D-Bus GUID"
 
-#: ../gio/gdbusserver.c:1084
+#: ../gio/gdbusserver.c:1087
 #, c-format
 msgid "Cannot listen on unsupported transport “%s”"
 msgstr "不能聽取不支援的傳輸「%s」"
 
 #: ../gio/gdbus-tool.c:95
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "Commands:\n"
+#| "  help         Shows this information\n"
+#| "  introspect   Introspect a remote object\n"
+#| "  monitor      Monitor a remote object\n"
+#| "  call         Invoke a method on a remote object\n"
+#| "  emit         Emit a signal\n"
+#| "\n"
+#| "Use “%s COMMAND --help” to get help on each command.\n"
 msgid ""
 "Commands:\n"
 "  help         Shows this information\n"
@@ -933,6 +938,7 @@ msgid ""
 "  monitor      Monitor a remote object\n"
 "  call         Invoke a method on a remote object\n"
 "  emit         Emit a signal\n"
+"  wait         Wait for a bus name to appear\n"
 "\n"
 "Use “%s COMMAND --help” to get help on each command.\n"
 msgstr ""
@@ -945,253 +951,300 @@ msgstr ""
 "\n"
 "使用「%s COMMAND --help」來取得每個指令的求助資訊。\n"
 
-#: ../gio/gdbus-tool.c:164 ../gio/gdbus-tool.c:226 ../gio/gdbus-tool.c:298
-#: ../gio/gdbus-tool.c:322 ../gio/gdbus-tool.c:724 ../gio/gdbus-tool.c:1067
-#: ../gio/gdbus-tool.c:1509 ../gio/gio-tool-rename.c:84
+#: ../gio/gdbus-tool.c:167 ../gio/gdbus-tool.c:234 ../gio/gdbus-tool.c:306
+#: ../gio/gdbus-tool.c:330 ../gio/gdbus-tool.c:811 ../gio/gdbus-tool.c:1150
+#: ../gio/gdbus-tool.c:1592
 #, c-format
 msgid "Error: %s\n"
 msgstr "錯誤:%s\n"
 
-#: ../gio/gdbus-tool.c:175 ../gio/gdbus-tool.c:239 ../gio/gdbus-tool.c:1525
+#: ../gio/gdbus-tool.c:178 ../gio/gdbus-tool.c:247 ../gio/gdbus-tool.c:1608
 #, c-format
 msgid "Error parsing introspection XML: %s\n"
 msgstr "解析檢討 XML 時出現錯誤:%s\n"
 
-#: ../gio/gdbus-tool.c:208
+#: ../gio/gdbus-tool.c:216
 #, c-format
 msgid "Error: %s is not a valid name\n"
 msgstr "錯誤:%s 不是有效的名稱\n"
 
-#: ../gio/gdbus-tool.c:356
+#: ../gio/gdbus-tool.c:364
 msgid "Connect to the system bus"
 msgstr "連線到系統匯流排"
 
-#: ../gio/gdbus-tool.c:357
+#: ../gio/gdbus-tool.c:365
 msgid "Connect to the session bus"
 msgstr "連線到作業階段匯流排"
 
-#: ../gio/gdbus-tool.c:358
+#: ../gio/gdbus-tool.c:366
 msgid "Connect to given D-Bus address"
 msgstr "連線到指定的 D-Bus 位址"
 
-#: ../gio/gdbus-tool.c:368
+#: ../gio/gdbus-tool.c:376
 msgid "Connection Endpoint Options:"
 msgstr "連線端點選項:"
 
-#: ../gio/gdbus-tool.c:369
+#: ../gio/gdbus-tool.c:377
 msgid "Options specifying the connection endpoint"
 msgstr "指定連線端點的選項"
 
-#: ../gio/gdbus-tool.c:391
+#: ../gio/gdbus-tool.c:399
 #, c-format
 msgid "No connection endpoint specified"
 msgstr "沒有指定連線端點"
 
-#: ../gio/gdbus-tool.c:401
+#: ../gio/gdbus-tool.c:409
 #, c-format
 msgid "Multiple connection endpoints specified"
 msgstr "指定了多重連線端點"
 
-#: ../gio/gdbus-tool.c:471
+#: ../gio/gdbus-tool.c:479
 #, c-format
 msgid ""
 "Warning: According to introspection data, interface “%s” does not exist\n"
 msgstr "警告:根據檢討資料,介面「%s」不存在\n"
 
-#: ../gio/gdbus-tool.c:480
+#: ../gio/gdbus-tool.c:488
 #, c-format
 msgid ""
 "Warning: According to introspection data, method “%s” does not exist on "
 "interface “%s”\n"
 msgstr "警告:根據檢討資料,介面「%2$s」的方法「%1$s」不存在\n"
 
-#: ../gio/gdbus-tool.c:542
+#: ../gio/gdbus-tool.c:550
 msgid "Optional destination for signal (unique name)"
 msgstr "信號的選擇性目的端 (獨特名稱)"
 
-#: ../gio/gdbus-tool.c:543
+#: ../gio/gdbus-tool.c:551
 msgid "Object path to emit signal on"
 msgstr "要發出信號的物件路徑"
 
-#: ../gio/gdbus-tool.c:544
+#: ../gio/gdbus-tool.c:552
 msgid "Signal and interface name"
 msgstr "信號和介面名稱"
 
-#: ../gio/gdbus-tool.c:578
+#: ../gio/gdbus-tool.c:587
 msgid "Emit a signal."
 msgstr "發出信號。"
 
-#: ../gio/gdbus-tool.c:612 ../gio/gdbus-tool.c:857 ../gio/gdbus-tool.c:1615
-#: ../gio/gdbus-tool.c:1850
+#: ../gio/gdbus-tool.c:642 ../gio/gdbus-tool.c:944 ../gio/gdbus-tool.c:1698
+#: ../gio/gdbus-tool.c:1931 ../gio/gdbus-tool.c:2152
 #, c-format
 msgid "Error connecting: %s\n"
 msgstr "連線錯誤:%s\n"
 
-#: ../gio/gdbus-tool.c:624
+#: ../gio/gdbus-tool.c:659 ../gio/gdbus-tool.c:961 ../gio/gdbus-tool.c:1715
+#: ../gio/gdbus-tool.c:1956
 #, c-format
-msgid "Error: object path not specified.\n"
-msgstr "錯誤:沒有指定物件路徑。\n"
+msgid "Error: Destination is not specified\n"
+msgstr "錯誤:尚未指定目的端\n"
 
-#: ../gio/gdbus-tool.c:629 ../gio/gdbus-tool.c:924 ../gio/gdbus-tool.c:1680
-#: ../gio/gdbus-tool.c:1916
+#: ../gio/gdbus-tool.c:670
 #, c-format
-msgid "Error: %s is not a valid object path\n"
-msgstr "é\8c¯èª¤ï¼\9a%s ä¸\8dæ\98¯æ\9c\89æ\95\88ç\9a\84ç\89©ä»¶è·¯å¾\91\n"
+msgid "Error: %s is not a valid unique bus name.\n"
+msgstr "é\8c¯èª¤ï¼\9a%s ä¸\8dæ\98¯æ\9c\89æ\95\88ç\9a\84ç\8d¨ç\89¹å\8c¯æµ\81æ\8e\92å\90\8d稱ã\80\82\n"
 
-#: ../gio/gdbus-tool.c:635
+#: ../gio/gdbus-tool.c:685 ../gio/gdbus-tool.c:987 ../gio/gdbus-tool.c:1741
 #, c-format
-msgid "Error: signal not specified.\n"
-msgstr "錯誤:尚未指定信號。\n"
+msgid "Error: Object path is not specified\n"
+msgstr "錯誤:沒有指定物件路徑\n"
 
-#: ../gio/gdbus-tool.c:642
+#: ../gio/gdbus-tool.c:705 ../gio/gdbus-tool.c:1007 ../gio/gdbus-tool.c:1761
+#: ../gio/gdbus-tool.c:2002
 #, c-format
-msgid "Error: signal must be the fully-qualified name.\n"
-msgstr "錯誤:信號必須為完全合規定的名稱。\n"
+msgid "Error: %s is not a valid object path\n"
+msgstr "錯誤:%s 不是有效的物件路徑\n"
 
-#: ../gio/gdbus-tool.c:650
+#: ../gio/gdbus-tool.c:720
+#, fuzzy, c-format
+#| msgid "Error: Method name is not specified\n"
+msgid "Error: Signal name is not specified\n"
+msgstr "錯誤:沒有指定方法名稱\n"
+
+#: ../gio/gdbus-tool.c:731
+#, fuzzy, c-format
+#| msgid "Error: Method name “%s” is invalid\n"
+msgid "Error: Signal name “%s” is invalid\n"
+msgstr "錯誤:方法名稱「%s」是無效的\n"
+
+#: ../gio/gdbus-tool.c:743
 #, c-format
 msgid "Error: %s is not a valid interface name\n"
 msgstr "錯誤:%s 不是有效的介面名稱\n"
 
-#: ../gio/gdbus-tool.c:656
+#: ../gio/gdbus-tool.c:749
 #, c-format
 msgid "Error: %s is not a valid member name\n"
 msgstr "錯誤:%s 不是有效的成員名稱\n"
 
-#: ../gio/gdbus-tool.c:662
-#, c-format
-msgid "Error: %s is not a valid unique bus name.\n"
-msgstr "錯誤:%s 不是有效的獨特匯流排名稱。\n"
-
 #. Use the original non-"parse-me-harder" error
-#: ../gio/gdbus-tool.c:699 ../gio/gdbus-tool.c:1036
+#: ../gio/gdbus-tool.c:786 ../gio/gdbus-tool.c:1119
 #, c-format
 msgid "Error parsing parameter %d: %s\n"
 msgstr "解析參數 %d 時發生錯誤:%s\n"
 
-#: ../gio/gdbus-tool.c:731
+#: ../gio/gdbus-tool.c:818
 #, c-format
 msgid "Error flushing connection: %s\n"
 msgstr "清除連線時發生錯誤:%s\n"
 
-#: ../gio/gdbus-tool.c:758
+#: ../gio/gdbus-tool.c:845
 msgid "Destination name to invoke method on"
 msgstr "要呼叫方法的目的端名稱"
 
-#: ../gio/gdbus-tool.c:759
+#: ../gio/gdbus-tool.c:846
 msgid "Object path to invoke method on"
 msgstr "要呼叫方法的物件路徑"
 
-#: ../gio/gdbus-tool.c:760
+#: ../gio/gdbus-tool.c:847
 msgid "Method and interface name"
 msgstr "方法和介面名稱"
 
-#: ../gio/gdbus-tool.c:761
+#: ../gio/gdbus-tool.c:848
 msgid "Timeout in seconds"
 msgstr "逾時時間(秒)"
 
-#: ../gio/gdbus-tool.c:802
+#: ../gio/gdbus-tool.c:889
 msgid "Invoke a method on a remote object."
 msgstr "呼叫遠端物件的方法。"
 
-#: ../gio/gdbus-tool.c:877 ../gio/gdbus-tool.c:1634 ../gio/gdbus-tool.c:1869
-#, c-format
-msgid "Error: Destination is not specified\n"
-msgstr "錯誤:尚未指定目的端\n"
-
-#: ../gio/gdbus-tool.c:889 ../gio/gdbus-tool.c:1651 ../gio/gdbus-tool.c:1881
+#: ../gio/gdbus-tool.c:972 ../gio/gdbus-tool.c:1732 ../gio/gdbus-tool.c:1967
 #, c-format
 msgid "Error: %s is not a valid bus name\n"
 msgstr "錯誤:%s 不是有效的匯流排名稱\n"
 
-#: ../gio/gdbus-tool.c:904 ../gio/gdbus-tool.c:1660
-#, c-format
-msgid "Error: Object path is not specified\n"
-msgstr "錯誤:沒有指定物件路徑\n"
-
-#: ../gio/gdbus-tool.c:939
+#: ../gio/gdbus-tool.c:1022
 #, c-format
 msgid "Error: Method name is not specified\n"
 msgstr "錯誤:沒有指定方法名稱\n"
 
-#: ../gio/gdbus-tool.c:950
+#: ../gio/gdbus-tool.c:1033
 #, c-format
 msgid "Error: Method name “%s” is invalid\n"
 msgstr "錯誤:方法名稱「%s」是無效的\n"
 
-#: ../gio/gdbus-tool.c:1028
+#: ../gio/gdbus-tool.c:1111
 #, c-format
 msgid "Error parsing parameter %d of type “%s”: %s\n"
 msgstr "解析類型「%2$s」的參數 %1$d 時發生錯誤:%3$s\n"
 
-#: ../gio/gdbus-tool.c:1472
+#: ../gio/gdbus-tool.c:1555
 msgid "Destination name to introspect"
 msgstr "要檢討的目的端名稱"
 
-#: ../gio/gdbus-tool.c:1473
+#: ../gio/gdbus-tool.c:1556
 msgid "Object path to introspect"
 msgstr "要檢討的物件路徑"
 
-#: ../gio/gdbus-tool.c:1474
+#: ../gio/gdbus-tool.c:1557
 msgid "Print XML"
 msgstr "顯示 XML"
 
-#: ../gio/gdbus-tool.c:1475
+#: ../gio/gdbus-tool.c:1558
 msgid "Introspect children"
 msgstr "Introspect 子項目"
 
-#: ../gio/gdbus-tool.c:1476
+#: ../gio/gdbus-tool.c:1559
 msgid "Only print properties"
 msgstr "只有列印屬性"
 
-#: ../gio/gdbus-tool.c:1567
+#: ../gio/gdbus-tool.c:1650
 msgid "Introspect a remote object."
 msgstr "檢查遠端物件。"
 
-#: ../gio/gdbus-tool.c:1772
+#: ../gio/gdbus-tool.c:1853
 msgid "Destination name to monitor"
 msgstr "要監控的目的端名稱"
 
-#: ../gio/gdbus-tool.c:1773
+#: ../gio/gdbus-tool.c:1854
 msgid "Object path to monitor"
 msgstr "要監控的物件路徑"
 
-#: ../gio/gdbus-tool.c:1802
+#: ../gio/gdbus-tool.c:1883
 msgid "Monitor a remote object."
 msgstr "監控遠端物件。"
 
-#: ../gio/gdesktopappinfo.c:1994 ../gio/gdesktopappinfo.c:4501
+#: ../gio/gdbus-tool.c:1941
+#, c-format
+msgid "Error: can’t monitor a non-message-bus connection\n"
+msgstr ""
+
+#: ../gio/gdbus-tool.c:2065
+msgid "Service to activate before waiting for the other one (well-known name)"
+msgstr ""
+
+#: ../gio/gdbus-tool.c:2068
+msgid ""
+"Timeout to wait for before exiting with an error (seconds); 0 for no timeout "
+"(default)"
+msgstr ""
+
+#: ../gio/gdbus-tool.c:2116
+#, fuzzy
+#| msgid "[OPTION…]"
+msgid "[OPTION…] BUS-NAME"
+msgstr "[選項…]"
+
+#: ../gio/gdbus-tool.c:2118
+msgid "Wait for a bus name to appear."
+msgstr ""
+
+#: ../gio/gdbus-tool.c:2194
+#, fuzzy, c-format
+#| msgid "Error: object path not specified.\n"
+msgid "Error: A service to activate for must be specified.\n"
+msgstr "錯誤:沒有指定物件路徑。\n"
+
+#: ../gio/gdbus-tool.c:2199
+#, fuzzy, c-format
+#| msgid "Error: object path not specified.\n"
+msgid "Error: A service to wait for must be specified.\n"
+msgstr "錯誤:沒有指定物件路徑。\n"
+
+#: ../gio/gdbus-tool.c:2204
+#, fuzzy, c-format
+#| msgid "Too many arguments"
+msgid "Error: Too many arguments.\n"
+msgstr "引數太多"
+
+#: ../gio/gdbus-tool.c:2212 ../gio/gdbus-tool.c:2219
+#, fuzzy, c-format
+#| msgid "Error: %s is not a valid bus name\n"
+msgid "Error: %s is not a valid well-known bus name.\n"
+msgstr "錯誤:%s 不是有效的匯流排名稱\n"
+
+#: ../gio/gdesktopappinfo.c:2001 ../gio/gdesktopappinfo.c:4566
 msgid "Unnamed"
 msgstr "未命名的"
 
-#: ../gio/gdesktopappinfo.c:2404
+#: ../gio/gdesktopappinfo.c:2411
 msgid "Desktop file didn’t specify Exec field"
 msgstr "桌面(Desktop)檔案未指定 Exec 欄位"
 
-#: ../gio/gdesktopappinfo.c:2689
+#: ../gio/gdesktopappinfo.c:2701
 msgid "Unable to find terminal required for application"
 msgstr "無法找到應用程式要求的終端機"
 
-#: ../gio/gdesktopappinfo.c:3097
+#: ../gio/gdesktopappinfo.c:3135
 #, c-format
 msgid "Can’t create user application configuration folder %s: %s"
 msgstr "不能建立使用者應用程式設定資料夾 %s:%s"
 
-#: ../gio/gdesktopappinfo.c:3101
+#: ../gio/gdesktopappinfo.c:3139
 #, c-format
 msgid "Can’t create user MIME configuration folder %s: %s"
 msgstr "不能建立使用者 MIME 設定資料夾 %s:%s"
 
-#: ../gio/gdesktopappinfo.c:3341 ../gio/gdesktopappinfo.c:3365
+#: ../gio/gdesktopappinfo.c:3379 ../gio/gdesktopappinfo.c:3403
 msgid "Application information lacks an identifier"
 msgstr "應用程式資訊缺少識別碼"
 
-#: ../gio/gdesktopappinfo.c:3599
+#: ../gio/gdesktopappinfo.c:3637
 #, c-format
 msgid "Can’t create user desktop file %s"
 msgstr "不能建立使用者桌面檔案 %s"
 
-#: ../gio/gdesktopappinfo.c:3733
+#: ../gio/gdesktopappinfo.c:3771
 #, c-format
 msgid "Custom definition for %s"
 msgstr "自訂 %s 的定義"
@@ -1252,14 +1305,14 @@ msgstr "GEmblemedIcon 編碼中記號 (%d) 的數量格式不正確"
 msgid "Expected a GEmblem for GEmblemedIcon"
 msgstr "預期為 GEmblemedIcon 的 GEmblem"
 
-#: ../gio/gfile.c:969 ../gio/gfile.c:1207 ../gio/gfile.c:1345
-#: ../gio/gfile.c:1583 ../gio/gfile.c:1638 ../gio/gfile.c:1696
-#: ../gio/gfile.c:1780 ../gio/gfile.c:1837 ../gio/gfile.c:1901
-#: ../gio/gfile.c:1956 ../gio/gfile.c:3604 ../gio/gfile.c:3659
-#: ../gio/gfile.c:3895 ../gio/gfile.c:3937 ../gio/gfile.c:4405
-#: ../gio/gfile.c:4816 ../gio/gfile.c:4901 ../gio/gfile.c:4991
-#: ../gio/gfile.c:5088 ../gio/gfile.c:5175 ../gio/gfile.c:5276
-#: ../gio/gfile.c:7817 ../gio/gfile.c:7907 ../gio/gfile.c:7991
+#: ../gio/gfile.c:1071 ../gio/gfile.c:1309 ../gio/gfile.c:1447
+#: ../gio/gfile.c:1685 ../gio/gfile.c:1740 ../gio/gfile.c:1798
+#: ../gio/gfile.c:1882 ../gio/gfile.c:1939 ../gio/gfile.c:2003
+#: ../gio/gfile.c:2058 ../gio/gfile.c:3704 ../gio/gfile.c:3759
+#: ../gio/gfile.c:3995 ../gio/gfile.c:4037 ../gio/gfile.c:4505
+#: ../gio/gfile.c:4916 ../gio/gfile.c:5001 ../gio/gfile.c:5091
+#: ../gio/gfile.c:5188 ../gio/gfile.c:5275 ../gio/gfile.c:5376
+#: ../gio/gfile.c:7954 ../gio/gfile.c:8044 ../gio/gfile.c:8128
 #: ../gio/win32/gwinhttpfile.c:437
 msgid "Operation not supported"
 msgstr "不支援的操作"
@@ -1268,69 +1321,69 @@ msgstr "不支援的操作"
 #. * trying to find the enclosing (user visible)
 #. * mount of a file, but none exists.
 #.
-#: ../gio/gfile.c:1468
+#: ../gio/gfile.c:1570
 msgid "Containing mount does not exist"
 msgstr "包含了不存在的掛載點"
 
-#: ../gio/gfile.c:2515 ../gio/glocalfile.c:2375
+#: ../gio/gfile.c:2617 ../gio/glocalfile.c:2446
 msgid "Can’t copy over directory"
 msgstr "不能複製整個目錄"
 
-#: ../gio/gfile.c:2575
+#: ../gio/gfile.c:2677
 msgid "Can’t copy directory over directory"
 msgstr "不能將目錄複製到目錄上"
 
-#: ../gio/gfile.c:2583
+#: ../gio/gfile.c:2685
 msgid "Target file exists"
 msgstr "目標檔案已存在"
 
-#: ../gio/gfile.c:2602
+#: ../gio/gfile.c:2704
 msgid "Can’t recursively copy directory"
 msgstr "不能遞廻複製目錄"
 
-#: ../gio/gfile.c:2884
+#: ../gio/gfile.c:2979
 msgid "Splice not supported"
 msgstr "不支援拼接"
 
-#: ../gio/gfile.c:2888
+#: ../gio/gfile.c:2983
 #, c-format
 msgid "Error splicing file: %s"
 msgstr "拼接檔案時發生錯誤:%s"
 
-#: ../gio/gfile.c:3019
+#: ../gio/gfile.c:3115
 msgid "Copy (reflink/clone) between mounts is not supported"
 msgstr "不支援在掛載點之間複製 (參照連結/重製)"
 
-#: ../gio/gfile.c:3023
+#: ../gio/gfile.c:3119
 msgid "Copy (reflink/clone) is not supported or invalid"
 msgstr "複製 (參照連結/重製) 不支援或無效"
 
-#: ../gio/gfile.c:3028
+#: ../gio/gfile.c:3124
 msgid "Copy (reflink/clone) is not supported or didn’t work"
 msgstr "複製 (參照連結/重製) 不支援或無法運作"
 
-#: ../gio/gfile.c:3091
+#: ../gio/gfile.c:3187
 msgid "Can’t copy special file"
 msgstr "不能複製特殊的檔案"
 
-#: ../gio/gfile.c:3885
+#: ../gio/gfile.c:3985
 msgid "Invalid symlink value given"
 msgstr "提供了無效的符號連結值"
 
-#: ../gio/gfile.c:4046
+#: ../gio/gfile.c:4146
 msgid "Trash not supported"
 msgstr "不支援回收筒"
 
-#: ../gio/gfile.c:4158
+#: ../gio/gfile.c:4258
 #, c-format
 msgid "File names cannot contain “%c”"
 msgstr "檔案名稱不能包含「%c」"
 
-#: ../gio/gfile.c:6604 ../gio/gvolume.c:363
+#: ../gio/gfile.c:6739 ../gio/gvolume.c:363
 msgid "volume doesn’t implement mount"
 msgstr "儲存區尚未實作掛載功能"
 
-#: ../gio/gfile.c:6713
+#: ../gio/gfile.c:6848
 msgid "No application is registered as handling this file"
 msgstr "沒有應用程式註冊為用以處理這個檔案"
 
@@ -1375,28 +1428,33 @@ msgstr "在輸入串流中不允許截短(truncate)"
 msgid "Truncate not supported on stream"
 msgstr "在串流中不支援截短(truncate)"
 
-#: ../gio/ghttpproxy.c:136
+#: ../gio/ghttpproxy.c:91 ../gio/gresolver.c:410 ../gio/gresolver.c:476
+#: ../glib/gconvert.c:1777
+msgid "Invalid hostname"
+msgstr "主機名稱無效"
+
+#: ../gio/ghttpproxy.c:143
 msgid "Bad HTTP proxy reply"
 msgstr "錯誤的 HTTP 代理伺服器回應"
 
-#: ../gio/ghttpproxy.c:152
+#: ../gio/ghttpproxy.c:159
 msgid "HTTP proxy connection not allowed"
 msgstr "HTTP 代理伺服器連線不允許"
 
-#: ../gio/ghttpproxy.c:157
+#: ../gio/ghttpproxy.c:164
 msgid "HTTP proxy authentication failed"
 msgstr "HTTP 代理伺服器核對失敗"
 
-#: ../gio/ghttpproxy.c:160
+#: ../gio/ghttpproxy.c:167
 msgid "HTTP proxy authentication required"
 msgstr "HTTP 代理伺服器需要核對"
 
-#: ../gio/ghttpproxy.c:164
+#: ../gio/ghttpproxy.c:171
 #, c-format
 msgid "HTTP proxy connection failed: %i"
 msgstr "HTTP 代理伺服器連線失敗:%i"
 
-#: ../gio/ghttpproxy.c:260
+#: ../gio/ghttpproxy.c:269
 msgid "HTTP proxy server closed connection unexpectedly."
 msgstr "HTTP 代理伺服器未預期關閉連線。"
 
@@ -1453,7 +1511,7 @@ msgid "Could not parse “%s” as IP address mask"
 msgstr "無法解析「%s」做為 IP 位址遮罩"
 
 #: ../gio/ginetsocketaddress.c:203 ../gio/ginetsocketaddress.c:220
-#: ../gio/gnativesocketaddress.c:106 ../gio/gunixsocketaddress.c:216
+#: ../gio/gnativesocketaddress.c:109 ../gio/gunixsocketaddress.c:218
 msgid "Not enough space for socket address"
 msgstr "socket 位址沒有足夠的空間"
 
@@ -1476,120 +1534,126 @@ msgstr "輸入串流尚未實作讀取"
 msgid "Stream has outstanding operation"
 msgstr "串流有異常操作"
 
-#: ../gio/gio-tool.c:142
+#: ../gio/gio-tool.c:160
 msgid "Copy with file"
 msgstr "複製檔案"
 
-#: ../gio/gio-tool.c:146
+#: ../gio/gio-tool.c:164
 msgid "Keep with file when moved"
 msgstr "移動時保持檔案"
 
-#: ../gio/gio-tool.c:187
+#: ../gio/gio-tool.c:205
 msgid "“version” takes no arguments"
 msgstr "「version」不需要引數"
 
-#: ../gio/gio-tool.c:189 ../gio/gio-tool.c:205 ../glib/goption.c:857
+#: ../gio/gio-tool.c:207 ../gio/gio-tool.c:223 ../glib/goption.c:857
 msgid "Usage:"
 msgstr "用法:"
 
-#: ../gio/gio-tool.c:192
+#: ../gio/gio-tool.c:210
 msgid "Print version information and exit."
 msgstr "輸出版本資訊並離開。"
 
-#: ../gio/gio-tool.c:206
+#: ../gio/gio-tool.c:224
 msgid "[ARGS...]"
 msgstr "[ARGS...]"
 
-#: ../gio/gio-tool.c:208
+#: ../gio/gio-tool.c:226
 msgid "Commands:"
 msgstr "指令:"
 
-#: ../gio/gio-tool.c:211
+#: ../gio/gio-tool.c:229
 msgid "Concatenate files to standard output"
 msgstr "將檔案連接並顯示至標準輸出"
 
-#: ../gio/gio-tool.c:212
+#: ../gio/gio-tool.c:230
 msgid "Copy one or more files"
 msgstr "複製一或多個檔案"
 
-#: ../gio/gio-tool.c:213
+#: ../gio/gio-tool.c:231
 msgid "Show information about locations"
 msgstr "顯示位置的相關資訊"
 
-#: ../gio/gio-tool.c:214
+#: ../gio/gio-tool.c:232
 msgid "List the contents of locations"
 msgstr "列出位置的內容"
 
-#: ../gio/gio-tool.c:215
+#: ../gio/gio-tool.c:233
 msgid "Get or set the handler for a mimetype"
 msgstr "取得或設定 MIME 類型的處理程式"
 
-#: ../gio/gio-tool.c:216
+#: ../gio/gio-tool.c:234
 msgid "Create directories"
 msgstr "建立目錄"
 
-#: ../gio/gio-tool.c:217
+#: ../gio/gio-tool.c:235
 msgid "Monitor files and directories for changes"
 msgstr "監控檔案與目錄的變更"
 
-#: ../gio/gio-tool.c:218
+#: ../gio/gio-tool.c:236
 msgid "Mount or unmount the locations"
 msgstr "掛載或卸載位置"
 
-#: ../gio/gio-tool.c:219
+#: ../gio/gio-tool.c:237
 msgid "Move one or more files"
 msgstr "移動一個或多個檔案"
 
-#: ../gio/gio-tool.c:220
+#: ../gio/gio-tool.c:238
 msgid "Open files with the default application"
 msgstr "以預設的應用程式開啟檔案"
 
-#: ../gio/gio-tool.c:221
+#: ../gio/gio-tool.c:239
 msgid "Rename a file"
 msgstr "重新命名檔案"
 
-#: ../gio/gio-tool.c:222
+#: ../gio/gio-tool.c:240
 msgid "Delete one or more files"
 msgstr "刪除一個或多個檔案"
 
-#: ../gio/gio-tool.c:223
+#: ../gio/gio-tool.c:241
 msgid "Read from standard input and save"
 msgstr "從標準輸入讀取並儲存"
 
-#: ../gio/gio-tool.c:224
+#: ../gio/gio-tool.c:242
 msgid "Set a file attribute"
 msgstr "設定檔案屬性"
 
-#: ../gio/gio-tool.c:225
+#: ../gio/gio-tool.c:243
 msgid "Move files or directories to the trash"
 msgstr "將檔案或目錄移至回收筒"
 
-#: ../gio/gio-tool.c:226
+#: ../gio/gio-tool.c:244
 msgid "Lists the contents of locations in a tree"
 msgstr "以樹狀圖列出位置的內容"
 
-#: ../gio/gio-tool.c:228
+#: ../gio/gio-tool.c:246
 #, c-format
 msgid "Use %s to get detailed help.\n"
 msgstr "使用 %s 以取得詳細的求助。\n"
 
+#: ../gio/gio-tool-cat.c:87
+#, fuzzy
+#| msgid "Error writing to file: %s"
+msgid "Error writing to stdout"
+msgstr "寫入至檔案時發生錯誤:%s"
+
 #. Translators: commandline placeholder
-#: ../gio/gio-tool-cat.c:124 ../gio/gio-tool-info.c:278
+#: ../gio/gio-tool-cat.c:133 ../gio/gio-tool-info.c:282
 #: ../gio/gio-tool-list.c:165 ../gio/gio-tool-mkdir.c:48
 #: ../gio/gio-tool-monitor.c:37 ../gio/gio-tool-monitor.c:39
 #: ../gio/gio-tool-monitor.c:41 ../gio/gio-tool-monitor.c:43
-#: ../gio/gio-tool-monitor.c:202 ../gio/gio-tool-mount.c:1132
-#: ../gio/gio-tool-open.c:45 ../gio/gio-tool-remove.c:48
+#: ../gio/gio-tool-monitor.c:203 ../gio/gio-tool-mount.c:1141
+#: ../gio/gio-tool-open.c:113 ../gio/gio-tool-remove.c:48
 #: ../gio/gio-tool-rename.c:45 ../gio/gio-tool-set.c:89
 #: ../gio/gio-tool-trash.c:81 ../gio/gio-tool-tree.c:239
 msgid "LOCATION"
 msgstr "LOCATION"
 
-#: ../gio/gio-tool-cat.c:129
+#: ../gio/gio-tool-cat.c:138
 msgid "Concatenate files and print to standard output."
 msgstr "將檔案連接並顯示至標準輸出。"
 
-#: ../gio/gio-tool-cat.c:131
+#: ../gio/gio-tool-cat.c:140
 msgid ""
 "gio cat works just like the traditional cat utility, but using GIO\n"
 "locations instead of local files: for example, you can use something\n"
@@ -1599,9 +1663,11 @@ msgstr ""
 "位置來取代本地端檔案:例如您可以使用類似\n"
 " smb://server/resource/file.txt 做為位置。"
 
-#: ../gio/gio-tool-cat.c:151
-msgid "No files given"
-msgstr "尚未指定檔案"
+#: ../gio/gio-tool-cat.c:162 ../gio/gio-tool-info.c:313
+#: ../gio/gio-tool-mkdir.c:76 ../gio/gio-tool-monitor.c:228
+#: ../gio/gio-tool-open.c:139 ../gio/gio-tool-remove.c:72
+msgid "No locations given"
+msgstr "未提供位置"
 
 #: ../gio/gio-tool-copy.c:42 ../gio/gio-tool-move.c:38
 msgid "No target directory"
@@ -1640,7 +1706,7 @@ msgstr "SOURCE"
 
 #. Translators: commandline placeholder
 #: ../gio/gio-tool-copy.c:98 ../gio/gio-tool-move.c:94
-#: ../gio/gio-tool-save.c:165
+#: ../gio/gio-tool-save.c:160
 msgid "DESTINATION"
 msgstr "DESTINATION"
 
@@ -1658,12 +1724,12 @@ msgstr ""
 "位置來取代本地端檔案:例如您可以使用類似\n"
 " smb://server/resource/file.txt 做為位置。"
 
-#: ../gio/gio-tool-copy.c:143
+#: ../gio/gio-tool-copy.c:147
 #, c-format
 msgid "Destination %s is not a directory"
 msgstr "目的端 %s 不是一個目錄"
 
-#: ../gio/gio-tool-copy.c:187 ../gio/gio-tool-move.c:181
+#: ../gio/gio-tool-copy.c:192 ../gio/gio-tool-move.c:185
 #, c-format
 msgid "%s: overwrite “%s”? "
 msgstr "%s:覆寫「%s」?"
@@ -1730,26 +1796,21 @@ msgstr "隱藏\n"
 msgid "uri: %s\n"
 msgstr "uri: %s\n"
 
-#: ../gio/gio-tool-info.c:221
-#, c-format
-msgid "Error getting writable attributes: %s\n"
-msgstr "取得可寫入屬性時發生錯誤:%s\n"
-
-#: ../gio/gio-tool-info.c:226
+#: ../gio/gio-tool-info.c:228
 #, c-format
 msgid "Settable attributes:\n"
 msgstr "可設定屬性:\n"
 
-#: ../gio/gio-tool-info.c:249
+#: ../gio/gio-tool-info.c:252
 #, c-format
 msgid "Writable attribute namespaces:\n"
 msgstr "可寫入屬性命名空間:\n"
 
-#: ../gio/gio-tool-info.c:283
+#: ../gio/gio-tool-info.c:287
 msgid "Show information about locations."
 msgstr "顯示位置的相關資訊。"
 
-#: ../gio/gio-tool-info.c:285
+#: ../gio/gio-tool-info.c:289
 msgid ""
 "gio info is similar to the traditional ls utility, but using GIO\n"
 "locations instead of local files: for example, you can use something\n"
@@ -1763,10 +1824,6 @@ msgstr ""
 "屬性可以使用它們的 GIO 名稱來指定,如 standard::icon\n"
 "或只使用命名空間,像 unix,或「*」比對所有的屬性"
 
-#: ../gio/gio-tool-info.c:307 ../gio/gio-tool-mkdir.c:74
-msgid "No locations given"
-msgstr "未提供位置"
-
 #: ../gio/gio-tool-list.c:36 ../gio/gio-tool-tree.c:32
 msgid "Show hidden files"
 msgstr "顯示隱藏檔案"
@@ -1818,46 +1875,47 @@ msgstr ""
 "如果有指定處理程式,會將它設定為此 MIME 類型的預設\n"
 "處理程式。"
 
-#: ../gio/gio-tool-mime.c:98
+#: ../gio/gio-tool-mime.c:100
 msgid "Must specify a single mimetype, and maybe a handler"
 msgstr "必須指定一個 MIME 類型,可能是一種處理程式"
 
-#: ../gio/gio-tool-mime.c:113
+#: ../gio/gio-tool-mime.c:116
 #, c-format
 msgid "No default applications for “%s”\n"
 msgstr "「%s」沒有預設的應用程式\n"
 
-#: ../gio/gio-tool-mime.c:119
+#: ../gio/gio-tool-mime.c:122
 #, c-format
 msgid "Default application for “%s”: %s\n"
 msgstr "「%s」的預設應用程式:%s\n"
 
-#: ../gio/gio-tool-mime.c:124
+#: ../gio/gio-tool-mime.c:127
 #, c-format
 msgid "Registered applications:\n"
 msgstr "已註冊的應用程式:\n"
 
-#: ../gio/gio-tool-mime.c:126
+#: ../gio/gio-tool-mime.c:129
 #, c-format
 msgid "No registered applications\n"
 msgstr "沒有註冊的應用程式\n"
 
-#: ../gio/gio-tool-mime.c:137
+#: ../gio/gio-tool-mime.c:140
 #, c-format
 msgid "Recommended applications:\n"
 msgstr "建議的應用程式:\n"
 
-#: ../gio/gio-tool-mime.c:139
+#: ../gio/gio-tool-mime.c:142
 #, c-format
 msgid "No recommended applications\n"
 msgstr "沒有建議的應用程式\n"
 
-#: ../gio/gio-tool-mime.c:159
-#, c-format
-msgid "Failed to load info for handler “%s”\n"
+#: ../gio/gio-tool-mime.c:162
+#, fuzzy, c-format
+#| msgid "Failed to load info for handler “%s”\n"
+msgid "Failed to load info for handler “%s”"
 msgstr "無法載入處理程式「%s」的資訊\n"
 
-#: ../gio/gio-tool-mime.c:165
+#: ../gio/gio-tool-mime.c:168
 #, c-format
 msgid "Failed to set “%s” as the default handler for “%s”: %s\n"
 msgstr "無法將「%s」設定為「%s」的預設處理程式:%s\n"
@@ -1904,7 +1962,7 @@ msgstr "回報移動與重新命名為簡單的刪除/建立事件"
 msgid "Watch for mount events"
 msgstr "監看掛載事件"
 
-#: ../gio/gio-tool-monitor.c:207
+#: ../gio/gio-tool-monitor.c:208
 msgid "Monitor files or directories for changes."
 msgstr "監控檔案或目錄的變更。"
 
@@ -1958,46 +2016,23 @@ msgid "Show extra information"
 msgstr "顯示額外的資訊"
 
 #: ../gio/gio-tool-mount.c:246 ../gio/gio-tool-mount.c:276
-#, c-format
-msgid "Error mounting location: Anonymous access denied\n"
+#, fuzzy
+#| msgid "Error mounting location: Anonymous access denied\n"
+msgid "Anonymous access denied"
 msgstr "掛載位置時發生錯誤:匿名存取已被拒絕\n"
 
-#: ../gio/gio-tool-mount.c:248 ../gio/gio-tool-mount.c:278
-#, c-format
-msgid "Error mounting location: %s\n"
-msgstr "掛載位置時發生錯誤: %s\n"
-
-#: ../gio/gio-tool-mount.c:341
-#, c-format
-msgid "Error unmounting mount: %s\n"
-msgstr "卸載時發生錯誤: %s\n"
-
-#: ../gio/gio-tool-mount.c:366 ../gio/gio-tool-mount.c:419
-#, c-format
-msgid "Error finding enclosing mount: %s\n"
-msgstr "尋找封裝掛載發生錯誤:%s\n"
-
-#: ../gio/gio-tool-mount.c:394
-#, c-format
-msgid "Error ejecting mount: %s\n"
-msgstr "退出掛載時發生錯誤:%s\n"
-
-#: ../gio/gio-tool-mount.c:875
-#, c-format
-msgid "Error mounting %s: %s\n"
-msgstr "掛載 %s 時發生錯誤:%s\n"
-
-#: ../gio/gio-tool-mount.c:891
+#: ../gio/gio-tool-mount.c:897
 #, c-format
 msgid "Mounted %s at %s\n"
 msgstr "%s 已掛載於 %s\n"
 
-#: ../gio/gio-tool-mount.c:941
-#, c-format
-msgid "No volume for device file %s\n"
+#: ../gio/gio-tool-mount.c:950
+#, fuzzy
+#| msgid "No volume for device file %s\n"
+msgid "No volume for device file"
 msgstr "裝置檔案 %s 中沒有儲存區\n"
 
-#: ../gio/gio-tool-mount.c:1136
+#: ../gio/gio-tool-mount.c:1145
 msgid "Mount or unmount the locations."
 msgstr "掛載或卸載位置。"
 
@@ -2019,12 +2054,12 @@ msgstr ""
 "位置來取代本地端檔案:例如您可以使用類似\n"
 " smb://server/resource/file.txt 做為位置。"
 
-#: ../gio/gio-tool-move.c:139
+#: ../gio/gio-tool-move.c:142
 #, c-format
 msgid "Target %s is not a directory"
 msgstr "目標 %s 不是目錄"
 
-#: ../gio/gio-tool-open.c:50
+#: ../gio/gio-tool-open.c:118
 msgid ""
 "Open files with the default application that\n"
 "is registered to handle files of this type."
@@ -2032,10 +2067,6 @@ msgstr ""
 "使用註冊為處理該檔案類型的\n"
 "預設應用程式來開啟檔案。"
 
-#: ../gio/gio-tool-open.c:69
-msgid "No files to open"
-msgstr "沒有檔案可開啟"
-
 #: ../gio/gio-tool-remove.c:31 ../gio/gio-tool-trash.c:31
 msgid "Ignore nonexistent files, never prompt"
 msgstr "忽略不存在的檔案,永不提示"
@@ -2044,10 +2075,6 @@ msgstr "忽略不存在的檔案,永不提示"
 msgid "Delete the given files."
 msgstr "刪除指定的檔案。"
 
-#: ../gio/gio-tool-remove.c:70
-msgid "No files to delete"
-msgstr "沒有要刪除的檔案"
-
 #: ../gio/gio-tool-rename.c:45
 msgid "NAME"
 msgstr "NAME"
@@ -2056,16 +2083,16 @@ msgstr "NAME"
 msgid "Rename a file."
 msgstr "重新命名檔案。"
 
-#: ../gio/gio-tool-rename.c:68
+#: ../gio/gio-tool-rename.c:70
 msgid "Missing argument"
 msgstr "缺少引數"
 
-#: ../gio/gio-tool-rename.c:73 ../gio/gio-tool-save.c:192
-#: ../gio/gio-tool-set.c:134
+#: ../gio/gio-tool-rename.c:76 ../gio/gio-tool-save.c:190
+#: ../gio/gio-tool-set.c:137
 msgid "Too many arguments"
 msgstr "引數太多"
 
-#: ../gio/gio-tool-rename.c:91
+#: ../gio/gio-tool-rename.c:95
 #, c-format
 msgid "Rename successful. New uri: %s\n"
 msgstr "重新命名成功。新的 URI:%s\n"
@@ -2100,17 +2127,23 @@ msgstr "即將複蓋的檔案 etag"
 msgid "ETAG"
 msgstr "ETAG"
 
+#: ../gio/gio-tool-save.c:113
+#, fuzzy
+#| msgid "Error reading from handle: %s"
+msgid "Error reading from standard input"
+msgstr "從處理器讀取時發生錯誤:%s"
+
 #. Translators: The "etag" is a token allowing to verify whether a file has been modified
-#: ../gio/gio-tool-save.c:145
+#: ../gio/gio-tool-save.c:139
 #, c-format
 msgid "Etag not available\n"
 msgstr "Etag 無法使用\n"
 
-#: ../gio/gio-tool-save.c:168
+#: ../gio/gio-tool-save.c:163
 msgid "Read from standard input and save to DEST."
 msgstr "從標準輸入讀取並儲存到 DEST。"
 
-#: ../gio/gio-tool-save.c:186
+#: ../gio/gio-tool-save.c:183
 msgid "No destination given"
 msgstr "沒有指定目的端"
 
@@ -2134,28 +2167,24 @@ msgstr "VALUE"
 msgid "Set a file attribute of LOCATION."
 msgstr "設定 LOCATION 的檔案屬性。"
 
-#: ../gio/gio-tool-set.c:111
+#: ../gio/gio-tool-set.c:113
 msgid "Location not specified"
 msgstr "尚未指定位置"
 
-#: ../gio/gio-tool-set.c:119
+#: ../gio/gio-tool-set.c:120
 msgid "Attribute not specified"
 msgstr "尚未指定屬性"
 
-#: ../gio/gio-tool-set.c:128
+#: ../gio/gio-tool-set.c:130
 msgid "Value not specified"
 msgstr "尚未指定數值"
 
-#: ../gio/gio-tool-set.c:176
-#, c-format
-msgid "Invalid attribute type %s\n"
+#: ../gio/gio-tool-set.c:180
+#, fuzzy, c-format
+#| msgid "Invalid attribute type %s\n"
+msgid "Invalid attribute type “%s”"
 msgstr "無效的屬性類型 %s\n"
 
-#: ../gio/gio-tool-set.c:189
-#, c-format
-msgid "Error setting attribute: %s\n"
-msgstr "設定屬性時發生錯誤:%s\n"
-
 #: ../gio/gio-tool-trash.c:32
 msgid "Empty the trash"
 msgstr "清理回收筒"
@@ -2172,7 +2201,7 @@ msgstr "追蹤符號連結、掛載和捷徑"
 msgid "List contents of directories in a tree-like format."
 msgstr "以樹狀格式列出目錄的內容。"
 
-#: ../gio/glib-compile-resources.c:142 ../gio/glib-compile-schemas.c:1491
+#: ../gio/glib-compile-resources.c:142 ../gio/glib-compile-schemas.c:1501
 #, c-format
 msgid "Element <%s> not allowed inside <%s>"
 msgstr "元素 <%s> 不可出現在 <%s> 內"
@@ -2217,12 +2246,12 @@ msgstr "讀取檔案 %s 時發生錯誤:%s"
 msgid "Error compressing file %s"
 msgstr "壓縮檔案 %s 時發生錯誤"
 
-#: ../gio/glib-compile-resources.c:469 ../gio/glib-compile-schemas.c:1603
+#: ../gio/glib-compile-resources.c:469
 #, c-format
 msgid "text may not appear inside <%s>"
 msgstr "在 <%s> 內不能出現文字"
 
-#: ../gio/glib-compile-resources.c:664 ../gio/glib-compile-schemas.c:2037
+#: ../gio/glib-compile-resources.c:664 ../gio/glib-compile-schemas.c:2067
 msgid "Show program version and exit"
 msgstr "顯示程式的版本並離開"
 
@@ -2236,8 +2265,8 @@ msgid ""
 "directory)"
 msgstr "用來讀取檔案的目錄 (預設為目前的目錄)"
 
-#: ../gio/glib-compile-resources.c:666 ../gio/glib-compile-schemas.c:2038
-#: ../gio/glib-compile-schemas.c:2067
+#: ../gio/glib-compile-resources.c:666 ../gio/glib-compile-schemas.c:2068
+#: ../gio/glib-compile-schemas.c:2096
 msgid "DIRECTORY"
 msgstr "目錄"
 
@@ -2293,53 +2322,226 @@ msgstr ""
 msgid "You should give exactly one file name\n"
 msgstr "您應該明確指定一個檔案名稱\n"
 
-#: ../gio/glib-compile-schemas.c:784
-msgid "empty names are not permitted"
-msgstr "不允許空名名稱"
+#: ../gio/glib-compile-schemas.c:95
+#, c-format
+msgid "nick must be a minimum of 2 characters"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:106
+#, fuzzy, c-format
+#| msgid "Invalid symlink value given"
+msgid "Invalid numeric value"
+msgstr "提供了無效的符號連結值"
+
+#: ../gio/glib-compile-schemas.c:114
+#, fuzzy, c-format
+#| msgid "<%s id='%s'> already specified"
+msgid "<value nick='%s'/> already specified"
+msgstr "<%s id='%s'> 已經指定了"
+
+#: ../gio/glib-compile-schemas.c:122
+#, fuzzy, c-format
+#| msgid "<key name='%s'> already specified"
+msgid "value='%s' already specified"
+msgstr "<key name='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:794
+#: ../gio/glib-compile-schemas.c:136
 #, c-format
-msgid "invalid name '%s': names must begin with a lowercase letter"
-msgstr "無效的名稱「%s」:名稱必須以小寫字母開頭"
+msgid "flags values must have at most 1 bit set"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:161
+#, c-format
+msgid "<%s> must contain at least one <value>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:315
+#, fuzzy, c-format
+#| msgid "No connection endpoint specified"
+msgid "<%s> is not contained in the specified range"
+msgstr "沒有指定連線端點"
+
+#: ../gio/glib-compile-schemas.c:327
+#, c-format
+msgid "<%s> is not a valid member of the specified enumerated type"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:333
+#, c-format
+msgid "<%s> contains string not in the specified flags type"
+msgstr ""
 
-#: ../gio/glib-compile-schemas.c:806
+#: ../gio/glib-compile-schemas.c:339
 #, c-format
+msgid "<%s> contains a string not in <choices>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:373
+#, fuzzy
+#| msgid "<key name='%s'> already specified"
+msgid "<range/> already specified for this key"
+msgstr "<key name='%s'> 已經指定了"
+
+#: ../gio/glib-compile-schemas.c:391
+#, c-format
+msgid "<range> not allowed for keys of type “%s”"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:408
+#, c-format
+msgid "<range> specified minimum is greater than maximum"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:433
+#, c-format
+msgid "unsupported l10n category: %s"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:441
+msgid "l10n requested, but no gettext domain given"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:453
+msgid "translation context given for value without l10n enabled"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:475
+#, fuzzy, c-format
+#| msgid "Failed to create file “%s”: %s"
+msgid "Failed to parse <default> value of type “%s”: "
+msgstr "建立檔案「%s」失敗:%s"
+
+#: ../gio/glib-compile-schemas.c:492
 msgid ""
-"invalid name '%s': invalid character '%c'; only lowercase letters, numbers "
-"and hyphen ('-') are permitted."
+"<choices> cannot be specified for keys tagged as having an enumerated type"
 msgstr ""
-"無效的名稱「%s」:無效的字元「%c」;只允許小寫字母、數字和破折號 ('-')。"
 
-#: ../gio/glib-compile-schemas.c:815
+#: ../gio/glib-compile-schemas.c:501
+#, fuzzy
+#| msgid "<child name='%s'> already specified"
+msgid "<choices> already specified for this key"
+msgstr "<child name='%s'> 已經指定了"
+
+#: ../gio/glib-compile-schemas.c:513
 #, c-format
-msgid "invalid name '%s': two successive hyphens ('--') are not permitted."
-msgstr "無效的名稱「%s」:不允許兩個破折號 ('--')。"
+msgid "<choices> not allowed for keys of type “%s”"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:529
+#, fuzzy, c-format
+#| msgid "<child name='%s'> already specified"
+msgid "<choice value='%s'/> already given"
+msgstr "<child name='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:824
+#: ../gio/glib-compile-schemas.c:544
 #, c-format
-msgid "invalid name '%s': the last character may not be a hyphen ('-')."
-msgstr "無效的名稱「%s」:最後一個字元不能是破折號 ('-')。"
+msgid "<choices> must contain at least one <choice>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:558
+#, fuzzy
+#| msgid "<child name='%s'> already specified"
+msgid "<aliases> already specified for this key"
+msgstr "<child name='%s'> 已經指定了"
+
+#: ../gio/glib-compile-schemas.c:562
+msgid ""
+"<aliases> can only be specified for keys with enumerated or flags types or "
+"after <choices>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:581
+#, c-format
+msgid ""
+"<alias value='%s'/> given when “%s” is already a member of the enumerated "
+"type"
+msgstr ""
 
-#: ../gio/glib-compile-schemas.c:832
+#: ../gio/glib-compile-schemas.c:587
 #, c-format
-msgid "invalid name '%s': maximum length is 1024"
+msgid "<alias value='%s'/> given when <choice value='%s'/> was already given"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:595
+#, fuzzy, c-format
+#| msgid "<%s id='%s'> already specified"
+msgid "<alias value='%s'/> already specified"
+msgstr "<%s id='%s'> 已經指定了"
+
+#: ../gio/glib-compile-schemas.c:605
+#, fuzzy, c-format
+#| msgid "The pathname “%s” is not an absolute path"
+msgid "alias target “%s” is not in enumerated type"
+msgstr "路徑名稱「%s」不是絕對路徑"
+
+#: ../gio/glib-compile-schemas.c:606
+#, c-format
+msgid "alias target “%s” is not in <choices>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:621
+#, c-format
+msgid "<aliases> must contain at least one <alias>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:786
+#, fuzzy
+#| msgid "empty names are not permitted"
+msgid "Empty names are not permitted"
+msgstr "不允許空名名稱"
+
+#: ../gio/glib-compile-schemas.c:796
+#, fuzzy, c-format
+#| msgid "invalid name '%s': names must begin with a lowercase letter"
+msgid "Invalid name “%s”: names must begin with a lowercase letter"
+msgstr "無效的名稱「%s」:名稱必須以小寫字母開頭"
+
+#: ../gio/glib-compile-schemas.c:808
+#, fuzzy, c-format
+#| msgid ""
+#| "invalid name '%s': invalid character '%c'; only lowercase letters, "
+#| "numbers and hyphen ('-') are permitted."
+msgid ""
+"Invalid name “%s”: invalid character “%c”; only lowercase letters, numbers "
+"and hyphen (“-”) are permitted"
+msgstr ""
+"無效的名稱「%s」:無效的字元「%c」;只允許小寫字母、數字和破折號 ('-')。"
+
+#: ../gio/glib-compile-schemas.c:817
+#, fuzzy, c-format
+#| msgid "invalid name '%s': two successive hyphens ('--') are not permitted."
+msgid "Invalid name “%s”: two successive hyphens (“--”) are not permitted"
+msgstr "無效的名稱「%s」:不允許兩個破折號 ('--')。"
+
+#: ../gio/glib-compile-schemas.c:826
+#, fuzzy, c-format
+#| msgid "invalid name '%s': the last character may not be a hyphen ('-')."
+msgid "Invalid name “%s”: the last character may not be a hyphen (“-”)"
+msgstr "無效的名稱「%s」:最後一個字元不能是破折號 ('-')。"
+
+#: ../gio/glib-compile-schemas.c:834
+#, fuzzy, c-format
+#| msgid "invalid name '%s': maximum length is 1024"
+msgid "Invalid name “%s”: maximum length is 1024"
 msgstr "無效的名稱「%s」:最大長度為 1024"
 
-#: ../gio/glib-compile-schemas.c:901
+#: ../gio/glib-compile-schemas.c:904
 #, c-format
 msgid "<child name='%s'> already specified"
 msgstr "<child name='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:927
-msgid "cannot add keys to a 'list-of' schema"
+#: ../gio/glib-compile-schemas.c:930
+#, fuzzy
+#| msgid "cannot add keys to a 'list-of' schema"
+msgid "Cannot add keys to a “list-of” schema"
 msgstr "不能將設定鍵加入 'list-of' schema"
 
-#: ../gio/glib-compile-schemas.c:938
+#: ../gio/glib-compile-schemas.c:941
 #, c-format
 msgid "<key name='%s'> already specified"
 msgstr "<key name='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:956
+#: ../gio/glib-compile-schemas.c:959
 #, c-format
 msgid ""
 "<key name='%s'> shadows <key name='%s'> in <schema id='%s'>; use <override> "
@@ -2348,149 +2550,187 @@ msgstr ""
 "<key name='%s'> 遮蔽 <key name='%s'> 於 <schema id='%s'>;使用 <override> 來"
 "修改數值"
 
-#: ../gio/glib-compile-schemas.c:967
-#, c-format
+#: ../gio/glib-compile-schemas.c:970
+#, fuzzy, c-format
+#| msgid ""
+#| "exactly one of 'type', 'enum' or 'flags' must be specified as an "
+#| "attribute to <key>"
 msgid ""
-"exactly one of 'type', 'enum' or 'flags' must be specified as an attribute "
+"Exactly one of “type”, “enum” or “flags” must be specified as an attribute "
 "to <key>"
 msgstr "必須明確指定「type」、「enum」或「flags」之一做為 <key> 的屬性"
 
-#: ../gio/glib-compile-schemas.c:986
+#: ../gio/glib-compile-schemas.c:989
 #, c-format
 msgid "<%s id='%s'> not (yet) defined."
 msgstr "<%s id='%s'> 尚未定義。"
 
-#: ../gio/glib-compile-schemas.c:1001
-#, c-format
-msgid "invalid GVariant type string '%s'"
+#: ../gio/glib-compile-schemas.c:1004
+#, fuzzy, c-format
+#| msgid "invalid GVariant type string '%s'"
+msgid "Invalid GVariant type string “%s”"
 msgstr "無效的 GVariant 類型字串「%s」"
 
-#: ../gio/glib-compile-schemas.c:1031
-msgid "<override> given but schema isn't extending anything"
+#: ../gio/glib-compile-schemas.c:1034
+#, fuzzy
+#| msgid "<override> given but schema isn't extending anything"
+msgid "<override> given but schema isn’t extending anything"
 msgstr "指定了 <override> 但 schema 並未延伸任何東西"
 
-#: ../gio/glib-compile-schemas.c:1044
-#, c-format
-msgid "no <key name='%s'> to override"
+#: ../gio/glib-compile-schemas.c:1047
+#, fuzzy, c-format
+#| msgid "no <key name='%s'> to override"
+msgid "No <key name='%s'> to override"
 msgstr "沒有 <key name='%s'> 要覆蓋"
 
-#: ../gio/glib-compile-schemas.c:1052
+#: ../gio/glib-compile-schemas.c:1055
 #, c-format
 msgid "<override name='%s'> already specified"
 msgstr "<override name='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:1125
+#: ../gio/glib-compile-schemas.c:1128
 #, c-format
 msgid "<schema id='%s'> already specified"
 msgstr "<schema id='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:1137
-#, c-format
-msgid "<schema id='%s'> extends not yet existing schema '%s'"
+#: ../gio/glib-compile-schemas.c:1140
+#, fuzzy, c-format
+#| msgid "<schema id='%s'> extends not yet existing schema '%s'"
+msgid "<schema id='%s'> extends not yet existing schema “%s”"
 msgstr "<schema id='%s'> 延伸了尚不存在的 schema「%s」"
 
-#: ../gio/glib-compile-schemas.c:1153
-#, c-format
-msgid "<schema id='%s'> is list of not yet existing schema '%s'"
+#: ../gio/glib-compile-schemas.c:1156
+#, fuzzy, c-format
+#| msgid "<schema id='%s'> is list of not yet existing schema '%s'"
+msgid "<schema id='%s'> is list of not yet existing schema “%s”"
 msgstr "<schema id='%s'> 是尚不存在的 schema「%s」的清單"
 
-#: ../gio/glib-compile-schemas.c:1161
-#, c-format
-msgid "Can not be a list of a schema with a path"
+#: ../gio/glib-compile-schemas.c:1164
+#, fuzzy, c-format
+#| msgid "Can not be a list of a schema with a path"
+msgid "Cannot be a list of a schema with a path"
 msgstr "不能成為有路徑 schema 的清單"
 
-#: ../gio/glib-compile-schemas.c:1171
-#, c-format
-msgid "Can not extend a schema with a path"
+#: ../gio/glib-compile-schemas.c:1174
+#, fuzzy, c-format
+#| msgid "Can not extend a schema with a path"
+msgid "Cannot extend a schema with a path"
 msgstr "不能延伸有路徑的 schema"
 
-#: ../gio/glib-compile-schemas.c:1181
+#: ../gio/glib-compile-schemas.c:1184
 #, c-format
 msgid ""
 "<schema id='%s'> is a list, extending <schema id='%s'> which is not a list"
 msgstr "<schema id='%s'> 是清單,卻延伸了不是清單的 <schema id='%s'>"
 
-#: ../gio/glib-compile-schemas.c:1191
-#, c-format
+#: ../gio/glib-compile-schemas.c:1194
+#, fuzzy, c-format
+#| msgid ""
+#| "<schema id='%s' list-of='%s'> extends <schema id='%s' list-of='%s'> but "
+#| "'%s' does not extend '%s'"
 msgid ""
-"<schema id='%s' list-of='%s'> extends <schema id='%s' list-of='%s'> but '%s' "
-"does not extend '%s'"
+"<schema id='%s' list-of='%s'> extends <schema id='%s' list-of='%s'> but “%s” "
+"does not extend “%s”"
 msgstr ""
 "<schema id='%s' list-of='%s'> 延伸了 <schema id='%s' list-of='%s'> 但是 '%s' "
 "並未延伸 '%s'"
 
-#: ../gio/glib-compile-schemas.c:1208
-#, c-format
-msgid "a path, if given, must begin and end with a slash"
+#: ../gio/glib-compile-schemas.c:1211
+#, fuzzy, c-format
+#| msgid "a path, if given, must begin and end with a slash"
+msgid "A path, if given, must begin and end with a slash"
 msgstr "如果指定了路徑,開頭與結尾都要加上斜線"
 
-#: ../gio/glib-compile-schemas.c:1215
-#, c-format
-msgid "the path of a list must end with ':/'"
+#: ../gio/glib-compile-schemas.c:1218
+#, fuzzy, c-format
+#| msgid "the path of a list must end with ':/'"
+msgid "The path of a list must end with “:/”"
 msgstr "清單的路徑不能以‘:/’為結尾"
 
-#: ../gio/glib-compile-schemas.c:1247
+#: ../gio/glib-compile-schemas.c:1227
+#, c-format
+msgid ""
+"Warning: Schema “%s” has path “%s”.  Paths starting with “/apps/”, “/"
+"desktop/” or “/system/” are deprecated."
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:1257
 #, c-format
 msgid "<%s id='%s'> already specified"
 msgstr "<%s id='%s'> 已經指定了"
 
-#: ../gio/glib-compile-schemas.c:1397 ../gio/glib-compile-schemas.c:1413
+#: ../gio/glib-compile-schemas.c:1407 ../gio/glib-compile-schemas.c:1423
 #, c-format
 msgid "Only one <%s> element allowed inside <%s>"
 msgstr "只有一個 <%s> 元素可在其內 <%s>"
 
-#: ../gio/glib-compile-schemas.c:1495
+#: ../gio/glib-compile-schemas.c:1505
 #, c-format
 msgid "Element <%s> not allowed at the top level"
 msgstr "元素 <%s> 不允許在頂端層級"
 
+#: ../gio/glib-compile-schemas.c:1523
+msgid "Element <default> is required in <key>"
+msgstr ""
+
+#: ../gio/glib-compile-schemas.c:1613
+#, fuzzy, c-format
+#| msgid "text may not appear inside <%s>"
+msgid "Text may not appear inside <%s>"
+msgstr "在 <%s> 內不能出現文字"
+
+#: ../gio/glib-compile-schemas.c:1681
+#, c-format
+msgid "Warning: undefined reference to <schema id='%s'/>"
+msgstr ""
+
 #. Translators: Do not translate "--strict".
-#: ../gio/glib-compile-schemas.c:1794 ../gio/glib-compile-schemas.c:1865
-#: ../gio/glib-compile-schemas.c:1941
+#: ../gio/glib-compile-schemas.c:1820 ../gio/glib-compile-schemas.c:1894
+#: ../gio/glib-compile-schemas.c:1970
 #, c-format
 msgid "--strict was specified; exiting.\n"
 msgstr "並且指定了 --strict;正在結束。\n"
 
-#: ../gio/glib-compile-schemas.c:1802
+#: ../gio/glib-compile-schemas.c:1830
 #, c-format
 msgid "This entire file has been ignored.\n"
 msgstr "這整個檔案都被忽略了。\n"
 
-#: ../gio/glib-compile-schemas.c:1861
+#: ../gio/glib-compile-schemas.c:1890
 #, c-format
 msgid "Ignoring this file.\n"
 msgstr "忽略這個檔案。\n"
 
-#: ../gio/glib-compile-schemas.c:1901
+#: ../gio/glib-compile-schemas.c:1930
 #, c-format
 msgid "No such key '%s' in schema '%s' as specified in override file '%s'"
 msgstr "在覆蓋檔案「%3$s」的 schema「%2$s」中沒有指定這個設定鍵「%1$s」"
 
-#: ../gio/glib-compile-schemas.c:1907 ../gio/glib-compile-schemas.c:1965
-#: ../gio/glib-compile-schemas.c:1993
+#: ../gio/glib-compile-schemas.c:1936 ../gio/glib-compile-schemas.c:1994
+#: ../gio/glib-compile-schemas.c:2022
 #, c-format
 msgid "; ignoring override for this key.\n"
 msgstr ";忽略這個設定鍵的覆蓋。\n"
 
-#: ../gio/glib-compile-schemas.c:1911 ../gio/glib-compile-schemas.c:1969
-#: ../gio/glib-compile-schemas.c:1997
+#: ../gio/glib-compile-schemas.c:1940 ../gio/glib-compile-schemas.c:1998
+#: ../gio/glib-compile-schemas.c:2026
 #, c-format
 msgid " and --strict was specified; exiting.\n"
 msgstr "並且指定了 --strict;正在結束。\n"
 
-#: ../gio/glib-compile-schemas.c:1927
+#: ../gio/glib-compile-schemas.c:1956
 #, c-format
 msgid ""
 "error parsing key '%s' in schema '%s' as specified in override file '%s': %s."
 msgstr ""
 "在覆蓋檔案「%3$s」指定的 schema「%2$s」分析設定鍵「%1$s」時發生錯誤:%4$s。"
 
-#: ../gio/glib-compile-schemas.c:1937
+#: ../gio/glib-compile-schemas.c:1966
 #, c-format
 msgid "Ignoring override for this key.\n"
 msgstr "忽略這個設定鍵的覆蓋。\n"
 
-#: ../gio/glib-compile-schemas.c:1955
+#: ../gio/glib-compile-schemas.c:1984
 #, c-format
 msgid ""
 "override for key '%s' in schema '%s' in override file '%s' is outside the "
@@ -2499,7 +2739,7 @@ msgstr ""
 "在覆蓋檔案「%3$s」中覆蓋 schema「%2$s」的設定鍵「%1$s」超出了 schema 指定的範"
 "圍"
 
-#: ../gio/glib-compile-schemas.c:1983
+#: ../gio/glib-compile-schemas.c:2012
 #, c-format
 msgid ""
 "override for key '%s' in schema '%s' in override file '%s' is not in the "
@@ -2507,23 +2747,23 @@ msgid ""
 msgstr ""
 "在覆蓋檔案「%3$s」中覆蓋 schema「%2$s」的設定鍵「%1$s」不在有效的選擇清單中"
 
-#: ../gio/glib-compile-schemas.c:2038
+#: ../gio/glib-compile-schemas.c:2068
 msgid "where to store the gschemas.compiled file"
 msgstr "要將 gschemas.compiled 檔案儲存到哪裡"
 
-#: ../gio/glib-compile-schemas.c:2039
+#: ../gio/glib-compile-schemas.c:2069
 msgid "Abort on any errors in schemas"
 msgstr "在 schema 中有任何錯誤即中止"
 
-#: ../gio/glib-compile-schemas.c:2040
+#: ../gio/glib-compile-schemas.c:2070
 msgid "Do not write the gschema.compiled file"
 msgstr "不要寫入 gschemas.compiled 檔案"
 
-#: ../gio/glib-compile-schemas.c:2041
+#: ../gio/glib-compile-schemas.c:2071
 msgid "Do not enforce key name restrictions"
 msgstr "不要強制設定鍵名稱限制"
 
-#: ../gio/glib-compile-schemas.c:2070
+#: ../gio/glib-compile-schemas.c:2099
 msgid ""
 "Compile all GSettings schema files into a schema cache.\n"
 "Schema files are required to have the extension .gschema.xml,\n"
@@ -2533,22 +2773,22 @@ msgstr ""
 "Schema 檔案的延伸檔名必須為 .gschema.xml,\n"
 "而快取檔案叫做 gschemas.compiled。"
 
-#: ../gio/glib-compile-schemas.c:2092
+#: ../gio/glib-compile-schemas.c:2120
 #, c-format
 msgid "You should give exactly one directory name\n"
 msgstr "您應該明確指定一個目錄名稱\n"
 
-#: ../gio/glib-compile-schemas.c:2131
+#: ../gio/glib-compile-schemas.c:2162
 #, c-format
 msgid "No schema files found: "
 msgstr "找不到 schema 檔案:"
 
-#: ../gio/glib-compile-schemas.c:2134
+#: ../gio/glib-compile-schemas.c:2165
 #, c-format
 msgid "doing nothing.\n"
 msgstr "不做任何事。\n"
 
-#: ../gio/glib-compile-schemas.c:2137
+#: ../gio/glib-compile-schemas.c:2168
 #, c-format
 msgid "removed existing output file.\n"
 msgstr "移除現有的輸出檔案。\n"
@@ -2558,240 +2798,244 @@ msgstr "移除現有的輸出檔案。\n"
 msgid "Invalid filename %s"
 msgstr "無效的檔案名稱 %s"
 
-#: ../gio/glocalfile.c:1037
+#: ../gio/glocalfile.c:1105
 #, c-format
 msgid "Error getting filesystem info for %s: %s"
 msgstr "取得 %s 的檔案系統資訊時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:1176
+#. Translators: This is an error message when trying to find
+#. * the enclosing (user visible) mount of a file, but none
+#. * exists.
+#.
+#: ../gio/glocalfile.c:1244
 #, c-format
 msgid "Containing mount for file %s not found"
 msgstr "包含了找不到的掛載點檔案 %s"
 
-#: ../gio/glocalfile.c:1199
+#: ../gio/glocalfile.c:1267
 msgid "Can’t rename root directory"
 msgstr "不能重新命名根目錄"
 
-#: ../gio/glocalfile.c:1217 ../gio/glocalfile.c:1240
+#: ../gio/glocalfile.c:1285 ../gio/glocalfile.c:1308
 #, c-format
 msgid "Error renaming file %s: %s"
 msgstr "讀取檔案 %s 時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:1224
+#: ../gio/glocalfile.c:1292
 msgid "Can’t rename file, filename already exists"
 msgstr "不能重新命名檔案,該檔案名稱已存在"
 
-#: ../gio/glocalfile.c:1237 ../gio/glocalfile.c:2251 ../gio/glocalfile.c:2279
-#: ../gio/glocalfile.c:2436 ../gio/glocalfileoutputstream.c:549
+#: ../gio/glocalfile.c:1305 ../gio/glocalfile.c:2322 ../gio/glocalfile.c:2350
+#: ../gio/glocalfile.c:2507 ../gio/glocalfileoutputstream.c:551
 msgid "Invalid filename"
 msgstr "無效的檔案名稱"
 
-#: ../gio/glocalfile.c:1404 ../gio/glocalfile.c:1419
+#: ../gio/glocalfile.c:1473 ../gio/glocalfile.c:1488
 #, c-format
 msgid "Error opening file %s: %s"
 msgstr "開啟檔案 %s 時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:1544
+#: ../gio/glocalfile.c:1613
 #, c-format
 msgid "Error removing file %s: %s"
 msgstr "移除檔案 %s 時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:1927
+#: ../gio/glocalfile.c:1997
 #, c-format
 msgid "Error trashing file %s: %s"
 msgstr "移動檔案 %s 至回收筒時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:1950
+#: ../gio/glocalfile.c:2020
 #, c-format
 msgid "Unable to create trash dir %s: %s"
 msgstr "無法建立回收筒目錄 %s:%s"
 
-#: ../gio/glocalfile.c:1970
+#: ../gio/glocalfile.c:2040
 #, c-format
 msgid "Unable to find toplevel directory to trash %s"
 msgstr "無法找到回收筒 %s 的頂端層級目錄"
 
-#: ../gio/glocalfile.c:2049 ../gio/glocalfile.c:2069
+#: ../gio/glocalfile.c:2119 ../gio/glocalfile.c:2139
 #, c-format
 msgid "Unable to find or create trash directory for %s"
 msgstr "無法找到或建立 %s 的回收筒目錄"
 
-#: ../gio/glocalfile.c:2103
+#: ../gio/glocalfile.c:2174
 #, c-format
 msgid "Unable to create trashing info file for %s: %s"
 msgstr "無法建立 %s 回收筒資訊檔案:%s"
 
-#: ../gio/glocalfile.c:2162
+#: ../gio/glocalfile.c:2233
 #, c-format
 msgid "Unable to trash file %s across filesystem boundaries"
 msgstr "無法將檔案 %s 跨檔案系統邊界移至回收筒"
 
-#: ../gio/glocalfile.c:2166 ../gio/glocalfile.c:2222
+#: ../gio/glocalfile.c:2237 ../gio/glocalfile.c:2293
 #, c-format
 msgid "Unable to trash file %s: %s"
 msgstr "無法將檔案 %s 移至回收筒:%s"
 
-#: ../gio/glocalfile.c:2228
+#: ../gio/glocalfile.c:2299
 #, c-format
 msgid "Unable to trash file %s"
 msgstr "無法將檔案 %s 移至回收筒"
 
-#: ../gio/glocalfile.c:2254
+#: ../gio/glocalfile.c:2325
 #, c-format
 msgid "Error creating directory %s: %s"
 msgstr "建立目錄 %s 時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:2283
+#: ../gio/glocalfile.c:2354
 #, c-format
 msgid "Filesystem does not support symbolic links"
 msgstr "檔案系統不支援符號連結"
 
-#: ../gio/glocalfile.c:2286
+#: ../gio/glocalfile.c:2357
 #, c-format
 msgid "Error making symbolic link %s: %s"
 msgstr "建立符號連結 %s 時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:2292 ../glib/gfileutils.c:2064
+#: ../gio/glocalfile.c:2363 ../glib/gfileutils.c:2127
 msgid "Symbolic links not supported"
 msgstr "不支援符號連結"
 
-#: ../gio/glocalfile.c:2347 ../gio/glocalfile.c:2382 ../gio/glocalfile.c:2439
+#: ../gio/glocalfile.c:2418 ../gio/glocalfile.c:2453 ../gio/glocalfile.c:2510
 #, c-format
 msgid "Error moving file %s: %s"
 msgstr "移動檔案 %s 時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:2370
+#: ../gio/glocalfile.c:2441
 msgid "Can’t move directory over directory"
 msgstr "不能將目錄移動至目錄上"
 
-#: ../gio/glocalfile.c:2396 ../gio/glocalfileoutputstream.c:925
-#: ../gio/glocalfileoutputstream.c:939 ../gio/glocalfileoutputstream.c:954
-#: ../gio/glocalfileoutputstream.c:971 ../gio/glocalfileoutputstream.c:985
+#: ../gio/glocalfile.c:2467 ../gio/glocalfileoutputstream.c:935
+#: ../gio/glocalfileoutputstream.c:949 ../gio/glocalfileoutputstream.c:964
+#: ../gio/glocalfileoutputstream.c:981 ../gio/glocalfileoutputstream.c:995
 msgid "Backup file creation failed"
 msgstr "建立備份檔案失敗"
 
-#: ../gio/glocalfile.c:2415
+#: ../gio/glocalfile.c:2486
 #, c-format
 msgid "Error removing target file: %s"
 msgstr "移除目標檔案時發生錯誤:%s"
 
-#: ../gio/glocalfile.c:2429
+#: ../gio/glocalfile.c:2500
 msgid "Move between mounts not supported"
 msgstr "不支援在掛載點之間移動"
 
-#: ../gio/glocalfile.c:2620
+#: ../gio/glocalfile.c:2691
 #, c-format
 msgid "Could not determine the disk usage of %s: %s"
 msgstr "無法決定 %s 的磁碟使用量:%s"
 
-#: ../gio/glocalfileinfo.c:721
+#: ../gio/glocalfileinfo.c:745
 msgid "Attribute value must be non-NULL"
 msgstr "屬性數值必須為非-NULL"
 
-#: ../gio/glocalfileinfo.c:728
+#: ../gio/glocalfileinfo.c:752
 msgid "Invalid attribute type (string expected)"
 msgstr "無效的屬性類型(應為字串值)"
 
-#: ../gio/glocalfileinfo.c:735
+#: ../gio/glocalfileinfo.c:759
 msgid "Invalid extended attribute name"
 msgstr "無效的延伸屬性名稱"
 
-#: ../gio/glocalfileinfo.c:775
+#: ../gio/glocalfileinfo.c:799
 #, c-format
 msgid "Error setting extended attribute “%s”: %s"
 msgstr "設定延伸屬性「%s」時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:1575
+#: ../gio/glocalfileinfo.c:1607
 msgid " (invalid encoding)"
 msgstr "(無效的編碼)"
 
-#: ../gio/glocalfileinfo.c:1766 ../gio/glocalfileoutputstream.c:803
+#: ../gio/glocalfileinfo.c:1776 ../gio/glocalfileoutputstream.c:813
 #, c-format
 msgid "Error when getting information for file “%s”: %s"
 msgstr "取得檔案「%s」資訊時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2017
+#: ../gio/glocalfileinfo.c:2038
 #, c-format
 msgid "Error when getting information for file descriptor: %s"
 msgstr "取得檔案描述狀態資訊時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2062
+#: ../gio/glocalfileinfo.c:2083
 msgid "Invalid attribute type (uint32 expected)"
 msgstr "無效的屬性類型(應為 uint32 值)"
 
-#: ../gio/glocalfileinfo.c:2080
+#: ../gio/glocalfileinfo.c:2101
 msgid "Invalid attribute type (uint64 expected)"
 msgstr "無效的屬性類型(應為 uint64 值)"
 
-#: ../gio/glocalfileinfo.c:2099 ../gio/glocalfileinfo.c:2118
+#: ../gio/glocalfileinfo.c:2120 ../gio/glocalfileinfo.c:2139
 msgid "Invalid attribute type (byte string expected)"
 msgstr "無效的屬性類型(應為 byte string 值)"
 
-#: ../gio/glocalfileinfo.c:2153
+#: ../gio/glocalfileinfo.c:2184
 msgid "Cannot set permissions on symlinks"
 msgstr "不能設定符號連結的權限"
 
-#: ../gio/glocalfileinfo.c:2169
+#: ../gio/glocalfileinfo.c:2200
 #, c-format
 msgid "Error setting permissions: %s"
 msgstr "設定權限時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2220
+#: ../gio/glocalfileinfo.c:2251
 #, c-format
 msgid "Error setting owner: %s"
 msgstr "設定擁有者時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2243
+#: ../gio/glocalfileinfo.c:2274
 msgid "symlink must be non-NULL"
 msgstr "符號連結必須為非-NULL"
 
-#: ../gio/glocalfileinfo.c:2253 ../gio/glocalfileinfo.c:2272
-#: ../gio/glocalfileinfo.c:2283
+#: ../gio/glocalfileinfo.c:2284 ../gio/glocalfileinfo.c:2303
+#: ../gio/glocalfileinfo.c:2314
 #, c-format
 msgid "Error setting symlink: %s"
 msgstr "設定符號連結時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2262
+#: ../gio/glocalfileinfo.c:2293
 msgid "Error setting symlink: file is not a symlink"
 msgstr "設定符號連結時發生錯誤:檔案不是符號連結"
 
-#: ../gio/glocalfileinfo.c:2388
+#: ../gio/glocalfileinfo.c:2419
 #, c-format
 msgid "Error setting modification or access time: %s"
 msgstr "設定修改或存取時刻時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2411
+#: ../gio/glocalfileinfo.c:2442
 msgid "SELinux context must be non-NULL"
 msgstr "SELinux 關聯必須為非-NULL"
 
-#: ../gio/glocalfileinfo.c:2426
+#: ../gio/glocalfileinfo.c:2457
 #, c-format
 msgid "Error setting SELinux context: %s"
 msgstr "設定 SELinux 關聯時發生錯誤:%s"
 
-#: ../gio/glocalfileinfo.c:2433
+#: ../gio/glocalfileinfo.c:2464
 msgid "SELinux is not enabled on this system"
 msgstr "SELinux 在這個系統上並未啟用"
 
-#: ../gio/glocalfileinfo.c:2525
+#: ../gio/glocalfileinfo.c:2556
 #, c-format
 msgid "Setting attribute %s not supported"
 msgstr "不支援設定屬性 %s"
 
-#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:694
+#: ../gio/glocalfileinputstream.c:168 ../gio/glocalfileoutputstream.c:696
 #, c-format
 msgid "Error reading from file: %s"
 msgstr "從檔案讀取時發生錯誤:%s"
 
 #: ../gio/glocalfileinputstream.c:199 ../gio/glocalfileinputstream.c:211
 #: ../gio/glocalfileinputstream.c:225 ../gio/glocalfileinputstream.c:333
-#: ../gio/glocalfileoutputstream.c:456 ../gio/glocalfileoutputstream.c:1003
+#: ../gio/glocalfileoutputstream.c:458 ../gio/glocalfileoutputstream.c:1013
 #, c-format
 msgid "Error seeking in file: %s"
 msgstr "在檔案中搜尋時發生錯誤:%s"
 
-#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:246
-#: ../gio/glocalfileoutputstream.c:340
+#: ../gio/glocalfileinputstream.c:255 ../gio/glocalfileoutputstream.c:248
+#: ../gio/glocalfileoutputstream.c:342
 #, c-format
 msgid "Error closing file: %s"
 msgstr "關閉檔案時發生錯誤:%s"
@@ -2800,51 +3044,51 @@ msgstr "關閉檔案時發生錯誤:%s"
 msgid "Unable to find default local file monitor type"
 msgstr "無法找到預設的本地端檔案監視器類型"
 
-#: ../gio/glocalfileoutputstream.c:194 ../gio/glocalfileoutputstream.c:226
-#: ../gio/glocalfileoutputstream.c:715
+#: ../gio/glocalfileoutputstream.c:196 ../gio/glocalfileoutputstream.c:228
+#: ../gio/glocalfileoutputstream.c:717
 #, c-format
 msgid "Error writing to file: %s"
 msgstr "寫入至檔案時發生錯誤:%s"
 
-#: ../gio/glocalfileoutputstream.c:273
+#: ../gio/glocalfileoutputstream.c:275
 #, c-format
 msgid "Error removing old backup link: %s"
 msgstr "移除舊備份連結時發生錯誤:%s"
 
-#: ../gio/glocalfileoutputstream.c:287 ../gio/glocalfileoutputstream.c:300
+#: ../gio/glocalfileoutputstream.c:289 ../gio/glocalfileoutputstream.c:302
 #, c-format
 msgid "Error creating backup copy: %s"
 msgstr "建立備份複本時發生錯誤:%s"
 
-#: ../gio/glocalfileoutputstream.c:318
+#: ../gio/glocalfileoutputstream.c:320
 #, c-format
 msgid "Error renaming temporary file: %s"
 msgstr "重新命名暫存檔案時發生錯誤:%s"
 
-#: ../gio/glocalfileoutputstream.c:502 ../gio/glocalfileoutputstream.c:1054
+#: ../gio/glocalfileoutputstream.c:504 ../gio/glocalfileoutputstream.c:1064
 #, c-format
 msgid "Error truncating file: %s"
 msgstr "截短檔案時發生錯誤:%s"
 
-#: ../gio/glocalfileoutputstream.c:555 ../gio/glocalfileoutputstream.c:785
-#: ../gio/glocalfileoutputstream.c:1035 ../gio/gsubprocess.c:360
+#: ../gio/glocalfileoutputstream.c:557 ../gio/glocalfileoutputstream.c:795
+#: ../gio/glocalfileoutputstream.c:1045 ../gio/gsubprocess.c:380
 #, c-format
 msgid "Error opening file “%s”: %s"
 msgstr "開啟檔案「%s」時發生錯誤:%s"
 
-#: ../gio/glocalfileoutputstream.c:816
+#: ../gio/glocalfileoutputstream.c:826
 msgid "Target file is a directory"
 msgstr "目標檔案是一個目錄"
 
-#: ../gio/glocalfileoutputstream.c:821
+#: ../gio/glocalfileoutputstream.c:831
 msgid "Target file is not a regular file"
 msgstr "目標檔案不是正規的檔案"
 
-#: ../gio/glocalfileoutputstream.c:833
+#: ../gio/glocalfileoutputstream.c:843
 msgid "The file was externally modified"
 msgstr "該檔案已被外部程式修改過"
 
-#: ../gio/glocalfileoutputstream.c:1019
+#: ../gio/glocalfileoutputstream.c:1029
 #, c-format
 msgid "Error removing old file: %s"
 msgstr "移除舊檔案時發生錯誤:%s"
@@ -2886,49 +3130,49 @@ msgstr "在串流的開頭之後要求的搜索"
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement unmount.
-#: ../gio/gmount.c:393
+#: ../gio/gmount.c:396
 msgid "mount doesn’t implement “unmount”"
 msgstr "掛載點尚未實作「umount」"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement eject.
-#: ../gio/gmount.c:469
+#: ../gio/gmount.c:472
 msgid "mount doesn’t implement “eject”"
 msgstr "掛載點尚未實作「eject」"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of unmount or unmount_with_operation.
-#: ../gio/gmount.c:547
+#: ../gio/gmount.c:550
 msgid "mount doesn’t implement “unmount” or “unmount_with_operation”"
 msgstr "掛載點尚未實作「umount」或「umount_with_operation」"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement any of eject or eject_with_operation.
-#: ../gio/gmount.c:632
+#: ../gio/gmount.c:635
 msgid "mount doesn’t implement “eject” or “eject_with_operation”"
 msgstr "掛載點尚未實作「eject」或「eject_with_operation」"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement remount.
-#: ../gio/gmount.c:720
+#: ../gio/gmount.c:723
 msgid "mount doesn’t implement “remount”"
 msgstr "掛載點尚未實作「remount」"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:802
+#: ../gio/gmount.c:805
 msgid "mount doesn’t implement content type guessing"
 msgstr "掛載點尚未實作內容類型預測"
 
 #. Translators: This is an error
 #. * message for mount objects that
 #. * don't implement content type guessing.
-#: ../gio/gmount.c:889
+#: ../gio/gmount.c:892
 msgid "mount doesn’t implement synchronous content type guessing"
 msgstr "掛載點尚未實作同步內容類型預測"
 
@@ -2959,7 +3203,7 @@ msgstr "無法建立網路監控:"
 msgid "Could not get network status: "
 msgstr "無法取得網路狀態:"
 
-#: ../gio/gnetworkmonitornm.c:326
+#: ../gio/gnetworkmonitornm.c:329
 #, c-format
 msgid "NetworkManager version too old"
 msgstr "NetworkManager 版本太舊"
@@ -2972,31 +3216,37 @@ msgstr "輸出串流尚未實作寫入"
 msgid "Source stream is already closed"
 msgstr "來源串流已經關閉"
 
-#: ../gio/gresolver.c:341 ../gio/gthreadedresolver.c:116
+#: ../gio/gresolver.c:342 ../gio/gthreadedresolver.c:116
 #: ../gio/gthreadedresolver.c:126
 #, c-format
 msgid "Error resolving “%s”: %s"
 msgstr "解析「%s」時發生錯誤:%s"
 
-#: ../gio/gresource.c:595 ../gio/gresource.c:846 ../gio/gresource.c:863
-#: ../gio/gresource.c:987 ../gio/gresource.c:1059 ../gio/gresource.c:1132
-#: ../gio/gresource.c:1202 ../gio/gresourcefile.c:453
-#: ../gio/gresourcefile.c:576 ../gio/gresourcefile.c:713
+#: ../gio/gresolver.c:729 ../gio/gresolver.c:781
+#, fuzzy
+#| msgid "Invalid filename"
+msgid "Invalid domain"
+msgstr "無效的檔案名稱"
+
+#: ../gio/gresource.c:621 ../gio/gresource.c:880 ../gio/gresource.c:919
+#: ../gio/gresource.c:1043 ../gio/gresource.c:1115 ../gio/gresource.c:1188
+#: ../gio/gresource.c:1258 ../gio/gresourcefile.c:476
+#: ../gio/gresourcefile.c:599 ../gio/gresourcefile.c:736
 #, c-format
 msgid "The resource at “%s” does not exist"
 msgstr "「%s」的資源不存在"
 
-#: ../gio/gresource.c:760
+#: ../gio/gresource.c:786
 #, c-format
 msgid "The resource at “%s” failed to decompress"
 msgstr "「%s」的資源無法解壓縮"
 
-#: ../gio/gresourcefile.c:709
+#: ../gio/gresourcefile.c:732
 #, c-format
 msgid "The resource at “%s” is not a directory"
 msgstr "「%s」的資源不是目錄"
 
-#: ../gio/gresourcefile.c:917
+#: ../gio/gresourcefile.c:940
 msgid "Input stream doesn’t implement seek"
 msgstr "輸入串流尚未實作尋找"
 
@@ -3090,7 +3340,7 @@ msgstr ""
 msgid "  SECTION   An (optional) elf section name\n"
 msgstr "  SECTION   一個 (選擇性的) elf 節區名稱\n"
 
-#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:654
+#: ../gio/gresource-tool.c:559 ../gio/gsettings-tool.c:685
 msgid "  COMMAND   The (optional) command to explain\n"
 msgstr "  COMMAND   要解釋的(選擇性)指令\n"
 
@@ -3123,7 +3373,7 @@ msgid "  PATH      A resource path\n"
 msgstr "  PATH      資源路徑\n"
 
 #: ../gio/gsettings-tool.c:51 ../gio/gsettings-tool.c:72
-#: ../gio/gsettings-tool.c:851
+#: ../gio/gsettings-tool.c:890
 #, c-format
 msgid "No such schema “%s”\n"
 msgstr "沒有這個基模「%s」\n"
@@ -3158,38 +3408,38 @@ msgstr "路徑不能以斜線 (/) 結尾\n"
 msgid "Path must not contain two adjacent slashes (//)\n"
 msgstr "路徑不能包含兩個相鄰的斜線 (//)\n"
 
-#: ../gio/gsettings-tool.c:489
+#: ../gio/gsettings-tool.c:520
 #, c-format
 msgid "The provided value is outside of the valid range\n"
 msgstr "提供的數值超出了有效的範圍\n"
 
-#: ../gio/gsettings-tool.c:496
+#: ../gio/gsettings-tool.c:527
 #, c-format
 msgid "The key is not writable\n"
 msgstr "這個設定鍵無法寫入\n"
 
-#: ../gio/gsettings-tool.c:532
+#: ../gio/gsettings-tool.c:563
 msgid "List the installed (non-relocatable) schemas"
 msgstr "列出已安裝的(非-可重新配置)schema"
 
-#: ../gio/gsettings-tool.c:538
+#: ../gio/gsettings-tool.c:569
 msgid "List the installed relocatable schemas"
 msgstr "列出已安裝的可重新配置 schema"
 
-#: ../gio/gsettings-tool.c:544
+#: ../gio/gsettings-tool.c:575
 msgid "List the keys in SCHEMA"
 msgstr "列出 SCHEMA 中的設定鍵"
 
-#: ../gio/gsettings-tool.c:545 ../gio/gsettings-tool.c:551
-#: ../gio/gsettings-tool.c:594
+#: ../gio/gsettings-tool.c:576 ../gio/gsettings-tool.c:582
+#: ../gio/gsettings-tool.c:625
 msgid "SCHEMA[:PATH]"
 msgstr "SCHEMA[:PATH]"
 
-#: ../gio/gsettings-tool.c:550
+#: ../gio/gsettings-tool.c:581
 msgid "List the children of SCHEMA"
 msgstr "列出 SCHEMA 的子項"
 
-#: ../gio/gsettings-tool.c:556
+#: ../gio/gsettings-tool.c:587
 msgid ""
 "List keys and values, recursively\n"
 "If no SCHEMA is given, list all keys\n"
@@ -3197,49 +3447,49 @@ msgstr ""
 "遞迴的列出設定鍵與鍵值\n"
 "如果沒有指定 SCHEMA,列出所有設定鍵\n"
 
-#: ../gio/gsettings-tool.c:558
+#: ../gio/gsettings-tool.c:589
 msgid "[SCHEMA[:PATH]]"
 msgstr "[SCHEMA[:PATH]]"
 
-#: ../gio/gsettings-tool.c:563
+#: ../gio/gsettings-tool.c:594
 msgid "Get the value of KEY"
 msgstr "取得 KEY 的數值"
 
-#: ../gio/gsettings-tool.c:564 ../gio/gsettings-tool.c:570
-#: ../gio/gsettings-tool.c:576 ../gio/gsettings-tool.c:588
-#: ../gio/gsettings-tool.c:600
+#: ../gio/gsettings-tool.c:595 ../gio/gsettings-tool.c:601
+#: ../gio/gsettings-tool.c:607 ../gio/gsettings-tool.c:619
+#: ../gio/gsettings-tool.c:631
 msgid "SCHEMA[:PATH] KEY"
 msgstr "SCHEMA[:PATH] KEY"
 
-#: ../gio/gsettings-tool.c:569
+#: ../gio/gsettings-tool.c:600
 msgid "Query the range of valid values for KEY"
 msgstr "查詢 KEY 有效數值的範圍"
 
-#: ../gio/gsettings-tool.c:575
+#: ../gio/gsettings-tool.c:606
 msgid "Query the description for KEY"
 msgstr "查詢 KEY 有效數值的範圍"
 
-#: ../gio/gsettings-tool.c:581
+#: ../gio/gsettings-tool.c:612
 msgid "Set the value of KEY to VALUE"
 msgstr "將 KEY 的數值設定為 VALUE"
 
-#: ../gio/gsettings-tool.c:582
+#: ../gio/gsettings-tool.c:613
 msgid "SCHEMA[:PATH] KEY VALUE"
 msgstr "SCHEMA[:PATH] KEY VALUE"
 
-#: ../gio/gsettings-tool.c:587
+#: ../gio/gsettings-tool.c:618
 msgid "Reset KEY to its default value"
 msgstr "將 KEY 設定為預設值"
 
-#: ../gio/gsettings-tool.c:593
+#: ../gio/gsettings-tool.c:624
 msgid "Reset all keys in SCHEMA to their defaults"
 msgstr "將 SCHEMA 的所有設定鍵重設為預設值"
 
-#: ../gio/gsettings-tool.c:599
+#: ../gio/gsettings-tool.c:630
 msgid "Check if KEY is writable"
 msgstr "檢查 KEY 是否可寫入"
 
-#: ../gio/gsettings-tool.c:605
+#: ../gio/gsettings-tool.c:636
 msgid ""
 "Monitor KEY for changes.\n"
 "If no KEY is specified, monitor all keys in SCHEMA.\n"
@@ -3249,11 +3499,11 @@ msgstr ""
 "如果沒有指定 KEY,會監控 SCHEMA 的所有設定鍵。\n"
 "使用 ^C 可停止監控。\n"
 
-#: ../gio/gsettings-tool.c:608
+#: ../gio/gsettings-tool.c:639
 msgid "SCHEMA[:PATH] [KEY]"
 msgstr "SCHEMA[:PATH] [KEY]"
 
-#: ../gio/gsettings-tool.c:620
+#: ../gio/gsettings-tool.c:651
 msgid ""
 "Usage:\n"
 "  gsettings --version\n"
@@ -3300,7 +3550,7 @@ msgstr ""
 "使用「gsettings help COMMAND」取得詳細的說明。\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:644
+#: ../gio/gsettings-tool.c:675
 #, c-format
 msgid ""
 "Usage:\n"
@@ -3315,11 +3565,11 @@ msgstr ""
 "%s\n"
 "\n"
 
-#: ../gio/gsettings-tool.c:650
+#: ../gio/gsettings-tool.c:681
 msgid "  SCHEMADIR A directory to search for additional schemas\n"
 msgstr "  SCHEMADIR 搜尋額外 schema 的目錄\n"
 
-#: ../gio/gsettings-tool.c:658
+#: ../gio/gsettings-tool.c:689
 msgid ""
 "  SCHEMA    The name of the schema\n"
 "  PATH      The path, for relocatable schemas\n"
@@ -3327,176 +3577,212 @@ msgstr ""
 "  SCHEMA      這個 schema 的名稱\n"
 "  PATH         路徑,用於可重新配置的 schema\n"
 
-#: ../gio/gsettings-tool.c:663
+#: ../gio/gsettings-tool.c:694
 msgid "  KEY       The (optional) key within the schema\n"
 msgstr "  KEY       schema 中的(選擇性的)設定鍵\n"
 
-#: ../gio/gsettings-tool.c:667
+#: ../gio/gsettings-tool.c:698
 msgid "  KEY       The key within the schema\n"
 msgstr "  KEY       schema 中的設定鍵\n"
 
-#: ../gio/gsettings-tool.c:671
+#: ../gio/gsettings-tool.c:702
 msgid "  VALUE     The value to set\n"
 msgstr "  VALUE     要設定的數值\n"
 
-#: ../gio/gsettings-tool.c:726
+#: ../gio/gsettings-tool.c:757
 #, c-format
 msgid "Could not load schemas from %s: %s\n"
 msgstr "無法載入 %s 的 schema:%s\n"
 
-#: ../gio/gsettings-tool.c:738
+#: ../gio/gsettings-tool.c:769
 #, c-format
 msgid "No schemas installed\n"
 msgstr "尚未安裝基模\n"
 
-#: ../gio/gsettings-tool.c:809
+#: ../gio/gsettings-tool.c:848
 #, c-format
 msgid "Empty schema name given\n"
 msgstr "指定了空的 schema 名稱\n"
 
-#: ../gio/gsettings-tool.c:864
+#: ../gio/gsettings-tool.c:903
 #, c-format
 msgid "No such key “%s”\n"
 msgstr "沒有設定鍵「%s」\n"
 
-#: ../gio/gsocket.c:364
+#: ../gio/gsocket.c:384
 msgid "Invalid socket, not initialized"
 msgstr "無效的 socket,尚未初始化"
 
-#: ../gio/gsocket.c:371
+#: ../gio/gsocket.c:391
 #, c-format
 msgid "Invalid socket, initialization failed due to: %s"
 msgstr "無效的 socket,初始化失敗原因為:%s"
 
-#: ../gio/gsocket.c:379
+#: ../gio/gsocket.c:399
 msgid "Socket is already closed"
 msgstr "Socket 已經關閉"
 
-#: ../gio/gsocket.c:394 ../gio/gsocket.c:2751 ../gio/gsocket.c:3897
-#: ../gio/gsocket.c:3952
+#: ../gio/gsocket.c:414 ../gio/gsocket.c:3010 ../gio/gsocket.c:4220
+#: ../gio/gsocket.c:4278
 msgid "Socket I/O timed out"
 msgstr "Socket I/O 逾時"
 
-#: ../gio/gsocket.c:526
+#: ../gio/gsocket.c:549
 #, c-format
 msgid "creating GSocket from fd: %s"
 msgstr "正在從 fd 建立 GSocket:%s"
 
-#: ../gio/gsocket.c:554 ../gio/gsocket.c:608 ../gio/gsocket.c:615
+#: ../gio/gsocket.c:578 ../gio/gsocket.c:632 ../gio/gsocket.c:639
 #, c-format
 msgid "Unable to create socket: %s"
 msgstr "無法建立 socket:%s"
 
-#: ../gio/gsocket.c:608
+#: ../gio/gsocket.c:632
 msgid "Unknown family was specified"
 msgstr "指定了不明的字族"
 
-#: ../gio/gsocket.c:615
+#: ../gio/gsocket.c:639
 msgid "Unknown protocol was specified"
 msgstr "指定了不明的通訊協定"
 
-#: ../gio/gsocket.c:1104
+#: ../gio/gsocket.c:1130
 #, c-format
 msgid "Cannot use datagram operations on a non-datagram socket."
 msgstr "不能在非資料電報 socket 上使用資料電報操作。"
 
-#: ../gio/gsocket.c:1121
+#: ../gio/gsocket.c:1147
 #, c-format
 msgid "Cannot use datagram operations on a socket with a timeout set."
 msgstr "不能在有逾時設定 socket 上使用資料電報操作。"
 
-#: ../gio/gsocket.c:1925
+#: ../gio/gsocket.c:1954
 #, c-format
 msgid "could not get local address: %s"
 msgstr "無法取得本地端位址:%s"
 
-#: ../gio/gsocket.c:1968
+#: ../gio/gsocket.c:2000
 #, c-format
 msgid "could not get remote address: %s"
 msgstr "無法取得遠端位址:%s"
 
-#: ../gio/gsocket.c:2034
+#: ../gio/gsocket.c:2066
 #, c-format
 msgid "could not listen: %s"
 msgstr "無法聽取:%s"
 
-#: ../gio/gsocket.c:2133
+#: ../gio/gsocket.c:2168
 #, c-format
 msgid "Error binding to address: %s"
 msgstr "綁定至位址時發生錯誤:%s"
 
-#: ../gio/gsocket.c:2248 ../gio/gsocket.c:2285
+#: ../gio/gsocket.c:2226 ../gio/gsocket.c:2263 ../gio/gsocket.c:2373
+#: ../gio/gsocket.c:2391 ../gio/gsocket.c:2461 ../gio/gsocket.c:2519
+#: ../gio/gsocket.c:2537
 #, c-format
 msgid "Error joining multicast group: %s"
 msgstr "加入多點廣播群組時發生錯誤:%s"
 
-#: ../gio/gsocket.c:2249 ../gio/gsocket.c:2286
+#: ../gio/gsocket.c:2227 ../gio/gsocket.c:2264 ../gio/gsocket.c:2374
+#: ../gio/gsocket.c:2392 ../gio/gsocket.c:2462 ../gio/gsocket.c:2520
+#: ../gio/gsocket.c:2538
 #, c-format
 msgid "Error leaving multicast group: %s"
 msgstr "離開多點廣播群組時發生錯誤:%s"
 
-#: ../gio/gsocket.c:2250
+#: ../gio/gsocket.c:2228
 msgid "No support for source-specific multicast"
 msgstr "不支援指定來源的多點廣播"
 
-#: ../gio/gsocket.c:2470
+#: ../gio/gsocket.c:2375
+#, fuzzy
+#| msgid "Unsupported socket address"
+msgid "Unsupported socket family"
+msgstr "不支援的 socket 位址"
+
+#: ../gio/gsocket.c:2393
+msgid "source-specific not an IPv4 address"
+msgstr ""
+
+#: ../gio/gsocket.c:2411 ../gio/gsocket.c:2440 ../gio/gsocket.c:2487
+#, c-format
+msgid "Interface not found: %s"
+msgstr ""
+
+#: ../gio/gsocket.c:2427
+#, c-format
+msgid "Interface name too long"
+msgstr ""
+
+#: ../gio/gsocket.c:2463
+#, fuzzy
+#| msgid "No support for source-specific multicast"
+msgid "No support for IPv4 source-specific multicast"
+msgstr "不支援指定來源的多點廣播"
+
+#: ../gio/gsocket.c:2521
+#, fuzzy
+#| msgid "No support for source-specific multicast"
+msgid "No support for IPv6 source-specific multicast"
+msgstr "不支援指定來源的多點廣播"
+
+#: ../gio/gsocket.c:2730
 #, c-format
 msgid "Error accepting connection: %s"
 msgstr "接受連線時發生錯誤:%s"
 
-#: ../gio/gsocket.c:2593
+#: ../gio/gsocket.c:2854
 msgid "Connection in progress"
 msgstr "連線進行中"
 
-#: ../gio/gsocket.c:2644
+#: ../gio/gsocket.c:2903
 msgid "Unable to get pending error: "
 msgstr "無法取得未處理的錯誤:"
 
-#: ../gio/gsocket.c:2816
+#: ../gio/gsocket.c:3073
 #, c-format
 msgid "Error receiving data: %s"
 msgstr "接收資料時發生錯誤:%s"
 
-#: ../gio/gsocket.c:3013
+#: ../gio/gsocket.c:3268
 #, c-format
 msgid "Error sending data: %s"
 msgstr "傳送資料時發生錯誤:%s"
 
-#: ../gio/gsocket.c:3200
+#: ../gio/gsocket.c:3455
 #, c-format
 msgid "Unable to shutdown socket: %s"
 msgstr "無法關閉 socket:%s"
 
-#: ../gio/gsocket.c:3281
+#: ../gio/gsocket.c:3536
 #, c-format
 msgid "Error closing socket: %s"
 msgstr "關閉 socket 時發生錯誤:%s"
 
-#: ../gio/gsocket.c:3890
+#: ../gio/gsocket.c:4213
 #, c-format
 msgid "Waiting for socket condition: %s"
 msgstr "等候 socket 情況:%s"
 
-#: ../gio/gsocket.c:4361 ../gio/gsocket.c:4441 ../gio/gsocket.c:4619
+#: ../gio/gsocket.c:4687 ../gio/gsocket.c:4767 ../gio/gsocket.c:4945
 #, c-format
 msgid "Error sending message: %s"
 msgstr "傳送訊息時發生錯誤:%s"
 
-#: ../gio/gsocket.c:4385
+#: ../gio/gsocket.c:4711
 msgid "GSocketControlMessage not supported on Windows"
 msgstr "視窗不支援 GSocketControlMessage"
 
-#: ../gio/gsocket.c:4838 ../gio/gsocket.c:4911 ../gio/gsocket.c:5138
+#: ../gio/gsocket.c:5164 ../gio/gsocket.c:5237 ../gio/gsocket.c:5463
 #, c-format
 msgid "Error receiving message: %s"
 msgstr "取回郵件發生錯誤:%s"
 
-#: ../gio/gsocket.c:5410
+#: ../gio/gsocket.c:5735
 #, c-format
 msgid "Unable to read socket credentials: %s"
 msgstr "無法讀取 socket 機密:%s"
 
-#: ../gio/gsocket.c:5419
+#: ../gio/gsocket.c:5744
 msgid "g_socket_get_credentials not implemented for this OS"
 msgstr "g_socket_get_credentials 沒有在這個 OS 上實作"
 
@@ -3635,18 +3921,18 @@ msgstr "找不到有效的位址"
 msgid "Error reverse-resolving “%s”: %s"
 msgstr "反向解析「%s」時發生錯誤:%s"
 
-#: ../gio/gthreadedresolver.c:550 ../gio/gthreadedresolver.c:630
-#: ../gio/gthreadedresolver.c:728 ../gio/gthreadedresolver.c:778
+#: ../gio/gthreadedresolver.c:549 ../gio/gthreadedresolver.c:628
+#: ../gio/gthreadedresolver.c:726 ../gio/gthreadedresolver.c:776
 #, c-format
 msgid "No DNS record of the requested type for “%s”"
 msgstr "「%s」的要求類型沒有 DNS 紀錄"
 
-#: ../gio/gthreadedresolver.c:555 ../gio/gthreadedresolver.c:733
+#: ../gio/gthreadedresolver.c:554 ../gio/gthreadedresolver.c:731
 #, c-format
 msgid "Temporarily unable to resolve “%s”"
 msgstr "暫時無法解析「%s」"
 
-#: ../gio/gthreadedresolver.c:560 ../gio/gthreadedresolver.c:738
+#: ../gio/gthreadedresolver.c:559 ../gio/gthreadedresolver.c:736
 #, c-format
 msgid "Error resolving “%s”"
 msgstr "解析「%s」時發生錯誤"
@@ -3677,24 +3963,30 @@ msgid ""
 "is locked out."
 msgstr "這是在您的存取被鎖定之前最後輸入密碼的機會。"
 
-#: ../gio/gtlspassword.c:113
+#. Translators: This is not the 'This is the last chance' string. It is
+#. * displayed when more than one attempt is allowed.
+#: ../gio/gtlspassword.c:115
+#, fuzzy
+#| msgid ""
+#| "Several password entered have been incorrect, and your access will be "
+#| "locked out after further failures."
 msgid ""
-"Several password entered have been incorrect, and your access will be locked "
-"out after further failures."
+"Several passwords entered have been incorrect, and your access will be "
+"locked out after further failures."
 msgstr ""
 "您已經輸入多入不正確的密碼,如果接下來還是輸入錯誤將會鎖定您的存取權限。"
 
-#: ../gio/gtlspassword.c:115
+#: ../gio/gtlspassword.c:117
 msgid "The password entered is incorrect."
 msgstr "輸入的密碼是不正確的。"
 
-#: ../gio/gunixconnection.c:166 ../gio/gunixconnection.c:561
+#: ../gio/gunixconnection.c:166 ../gio/gunixconnection.c:563
 #, c-format
 msgid "Expecting 1 control message, got %d"
 msgid_plural "Expecting 1 control message, got %d"
 msgstr[0] "預期有 1 個控制訊息,卻收到 %d"
 
-#: ../gio/gunixconnection.c:182 ../gio/gunixconnection.c:573
+#: ../gio/gunixconnection.c:182 ../gio/gunixconnection.c:575
 msgid "Unexpected type of ancillary data"
 msgstr "輔助資料的未預期類型"
 
@@ -3712,52 +4004,52 @@ msgstr "收到無效的 fd"
 msgid "Error sending credentials: "
 msgstr "傳送憑證時發生錯誤:"
 
-#: ../gio/gunixconnection.c:503
+#: ../gio/gunixconnection.c:504
 #, c-format
 msgid "Error checking if SO_PASSCRED is enabled for socket: %s"
 msgstr "檢查 SO_PASSCRED 在 socket 是否啟用時發生錯誤:%s"
 
-#: ../gio/gunixconnection.c:518
+#: ../gio/gunixconnection.c:520
 #, c-format
 msgid "Error enabling SO_PASSCRED: %s"
 msgstr "啟用 SO_PASSCRED 時發生錯誤:%s"
 
-#: ../gio/gunixconnection.c:547
+#: ../gio/gunixconnection.c:549
 msgid ""
 "Expecting to read a single byte for receiving credentials but read zero bytes"
 msgstr "預期接收憑證要讀取單一位元組,但讀取到零位元組"
 
-#: ../gio/gunixconnection.c:587
+#: ../gio/gunixconnection.c:589
 #, c-format
 msgid "Not expecting control message, but got %d"
 msgstr "不是預期的控制訊息,卻收到 %d"
 
-#: ../gio/gunixconnection.c:611
+#: ../gio/gunixconnection.c:614
 #, c-format
 msgid "Error while disabling SO_PASSCRED: %s"
 msgstr "停用 SO_PASSCRED 時發生錯誤:%s"
 
-#: ../gio/gunixinputstream.c:369 ../gio/gunixinputstream.c:390
+#: ../gio/gunixinputstream.c:372 ../gio/gunixinputstream.c:393
 #, c-format
 msgid "Error reading from file descriptor: %s"
 msgstr "讀取檔案描述狀態時發生錯誤:%s"
 
-#: ../gio/gunixinputstream.c:423 ../gio/gunixoutputstream.c:409
+#: ../gio/gunixinputstream.c:426 ../gio/gunixoutputstream.c:411
 #: ../gio/gwin32inputstream.c:217 ../gio/gwin32outputstream.c:204
 #, c-format
 msgid "Error closing file descriptor: %s"
 msgstr "關閉檔案描述狀態時發生錯誤:%s"
 
-#: ../gio/gunixmounts.c:2364 ../gio/gunixmounts.c:2417
+#: ../gio/gunixmounts.c:2556 ../gio/gunixmounts.c:2609
 msgid "Filesystem root"
 msgstr "根檔案系統"
 
-#: ../gio/gunixoutputstream.c:355 ../gio/gunixoutputstream.c:376
+#: ../gio/gunixoutputstream.c:358 ../gio/gunixoutputstream.c:378
 #, c-format
 msgid "Error writing to file descriptor: %s"
 msgstr "寫入檔案描述狀態時發生錯誤:%s"
 
-#: ../gio/gunixsocketaddress.c:239
+#: ../gio/gunixsocketaddress.c:241
 msgid "Abstract UNIX domain socket addresses not supported on this system"
 msgstr "這個系統不支授抽象 UNIX 網域 socket 位址"
 
@@ -3829,25 +4121,25 @@ msgstr "執行 dbus 服務"
 msgid "Wrong args\n"
 msgstr "錯誤引數\n"
 
-#: ../glib/gbookmarkfile.c:755
+#: ../glib/gbookmarkfile.c:754
 #, c-format
 msgid "Unexpected attribute “%s” for element “%s”"
 msgstr "元件「%2$s」中有未預期的屬性「%1$s」"
 
-#: ../glib/gbookmarkfile.c:766 ../glib/gbookmarkfile.c:837
-#: ../glib/gbookmarkfile.c:847 ../glib/gbookmarkfile.c:954
+#: ../glib/gbookmarkfile.c:765 ../glib/gbookmarkfile.c:836
+#: ../glib/gbookmarkfile.c:846 ../glib/gbookmarkfile.c:953
 #, c-format
 msgid "Attribute “%s” of element “%s” not found"
 msgstr "找不到元件「%2$s」中的屬性「%1$s」"
 
-#: ../glib/gbookmarkfile.c:1124 ../glib/gbookmarkfile.c:1189
-#: ../glib/gbookmarkfile.c:1253 ../glib/gbookmarkfile.c:1263
+#: ../glib/gbookmarkfile.c:1123 ../glib/gbookmarkfile.c:1188
+#: ../glib/gbookmarkfile.c:1252 ../glib/gbookmarkfile.c:1262
 #, c-format
 msgid "Unexpected tag “%s”, tag “%s” expected"
 msgstr "未預期的標籤「%s」,應為標籤「%s」"
 
-#: ../glib/gbookmarkfile.c:1149 ../glib/gbookmarkfile.c:1163
-#: ../glib/gbookmarkfile.c:1231
+#: ../glib/gbookmarkfile.c:1148 ../glib/gbookmarkfile.c:1162
+#: ../glib/gbookmarkfile.c:1230
 #, c-format
 msgid "Unexpected tag “%s” inside “%s”"
 msgstr "「%2$s」中有未預期的標籤「%1$s」"
@@ -3866,10 +4158,10 @@ msgstr "URI「%s」的書籤已經存在"
 #: ../glib/gbookmarkfile.c:2412 ../glib/gbookmarkfile.c:2495
 #: ../glib/gbookmarkfile.c:2573 ../glib/gbookmarkfile.c:2652
 #: ../glib/gbookmarkfile.c:2694 ../glib/gbookmarkfile.c:2791
-#: ../glib/gbookmarkfile.c:2911 ../glib/gbookmarkfile.c:3101
-#: ../glib/gbookmarkfile.c:3177 ../glib/gbookmarkfile.c:3345
-#: ../glib/gbookmarkfile.c:3434 ../glib/gbookmarkfile.c:3523
-#: ../glib/gbookmarkfile.c:3639
+#: ../glib/gbookmarkfile.c:2912 ../glib/gbookmarkfile.c:3102
+#: ../glib/gbookmarkfile.c:3178 ../glib/gbookmarkfile.c:3346
+#: ../glib/gbookmarkfile.c:3435 ../glib/gbookmarkfile.c:3524
+#: ../glib/gbookmarkfile.c:3640
 #, c-format
 msgid "No bookmark found for URI “%s”"
 msgstr "找不到 URI「%s」的書籤"
@@ -3889,483 +4181,497 @@ msgstr "URI「%s」書籤中沒有私有旗幟"
 msgid "No groups set in bookmark for URI “%s”"
 msgstr "URI「%s」書籤中沒有設定群組"
 
-#: ../glib/gbookmarkfile.c:3198 ../glib/gbookmarkfile.c:3355
+#: ../glib/gbookmarkfile.c:3199 ../glib/gbookmarkfile.c:3356
 #, c-format
 msgid "No application with name “%s” registered a bookmark for “%s”"
 msgstr "沒有名為「%s」的應用程式註冊書籤「%s」"
 
-#: ../glib/gbookmarkfile.c:3378
+#: ../glib/gbookmarkfile.c:3379
 #, c-format
 msgid "Failed to expand exec line “%s” with URI “%s”"
 msgstr "以 URI「%2$s」展開 exec 列「%1$s」失敗"
 
-#: ../glib/gconvert.c:477 ../glib/gutf8.c:851 ../glib/gutf8.c:1063
-#: ../glib/gutf8.c:1200 ../glib/gutf8.c:1304
+#: ../glib/gconvert.c:471
+#, fuzzy
+#| msgid "Invalid sequence in conversion input"
+msgid "Unrepresentable character in conversion input"
+msgstr "轉換輸入資料時出現無效的字元次序"
+
+#: ../glib/gconvert.c:498 ../glib/gutf8.c:862 ../glib/gutf8.c:1074
+#: ../glib/gutf8.c:1211 ../glib/gutf8.c:1315
 msgid "Partial character sequence at end of input"
 msgstr "輸入資料結束時字元仍未完整"
 
-#: ../glib/gconvert.c:742
+#: ../glib/gconvert.c:763
 #, c-format
 msgid "Cannot convert fallback “%s” to codeset “%s”"
 msgstr "無法將後備字串「%s」的字元集轉換成「%s」"
 
-#: ../glib/gconvert.c:1567
+#: ../glib/gconvert.c:934
+#, fuzzy
+#| msgid "Invalid byte sequence in conversion input"
+msgid "Embedded NUL byte in conversion input"
+msgstr "轉換輸入資料時遇到不正確的位元組組合"
+
+#: ../glib/gconvert.c:955
+#, fuzzy
+#| msgid "Invalid byte sequence in conversion input"
+msgid "Embedded NUL byte in conversion output"
+msgstr "轉換輸入資料時遇到不正確的位元組組合"
+
+#: ../glib/gconvert.c:1640
 #, c-format
 msgid "The URI “%s” is not an absolute URI using the “file” scheme"
 msgstr "URI「%s」不是使用「file」格式的絕對 URI"
 
-#: ../glib/gconvert.c:1577
+#: ../glib/gconvert.c:1650
 #, c-format
 msgid "The local file URI “%s” may not include a “#”"
 msgstr "本機檔案的 URI「%s」不應含有「#」"
 
-#: ../glib/gconvert.c:1594
+#: ../glib/gconvert.c:1667
 #, c-format
 msgid "The URI “%s” is invalid"
 msgstr "URI「%s」無效"
 
-#: ../glib/gconvert.c:1606
+#: ../glib/gconvert.c:1679
 #, c-format
 msgid "The hostname of the URI “%s” is invalid"
 msgstr "URI「%s」中的主機名稱無效"
 
-#: ../glib/gconvert.c:1622
+#: ../glib/gconvert.c:1695
 #, c-format
 msgid "The URI “%s” contains invalidly escaped characters"
 msgstr "URI「%s」含有「不正確跳出」的字元"
 
-#: ../glib/gconvert.c:1717
+#: ../glib/gconvert.c:1767
 #, c-format
 msgid "The pathname “%s” is not an absolute path"
 msgstr "路徑名稱「%s」不是絕對路徑"
 
-#: ../glib/gconvert.c:1727
-msgid "Invalid hostname"
-msgstr "主機名稱無效"
-
-#. Translators: 'before midday' indicator
-#: ../glib/gdatetime.c:201
-msgctxt "GDateTime"
-msgid "AM"
-msgstr "上午"
-
-#. Translators: 'after midday' indicator
-#: ../glib/gdatetime.c:203
-msgctxt "GDateTime"
-msgid "PM"
-msgstr "下午"
-
 #. Translators: this is the preferred format for expressing the date and the time
-#: ../glib/gdatetime.c:206
+#: ../glib/gdatetime.c:202
 msgctxt "GDateTime"
 msgid "%a %b %e %H:%M:%S %Y"
-msgstr "西元%Y年%m月%d日 (%A) %H時%M分%S秒"
+msgstr "%Y年%m月%d日 (%A) %H時%M分%S秒"
 
 #. Translators: this is the preferred format for expressing the date
-#: ../glib/gdatetime.c:209
+#: ../glib/gdatetime.c:205
 msgctxt "GDateTime"
 msgid "%m/%d/%y"
 msgstr "%y/%m/%d"
 
 #. Translators: this is the preferred format for expressing the time
-#: ../glib/gdatetime.c:212
+#: ../glib/gdatetime.c:208
 msgctxt "GDateTime"
 msgid "%H:%M:%S"
 msgstr "%H:%M:%S"
 
 #. Translators: this is the preferred format for expressing 12 hour time
-#: ../glib/gdatetime.c:215
+#: ../glib/gdatetime.c:211
 msgctxt "GDateTime"
 msgid "%I:%M:%S %p"
 msgstr "%p %I時%M分%S秒"
 
-#: ../glib/gdatetime.c:228
+#: ../glib/gdatetime.c:224
 msgctxt "full month name"
 msgid "January"
 msgstr "一月"
 
-#: ../glib/gdatetime.c:230
+#: ../glib/gdatetime.c:226
 msgctxt "full month name"
 msgid "February"
 msgstr "二月"
 
-#: ../glib/gdatetime.c:232
+#: ../glib/gdatetime.c:228
 msgctxt "full month name"
 msgid "March"
 msgstr "三月"
 
-#: ../glib/gdatetime.c:234
+#: ../glib/gdatetime.c:230
 msgctxt "full month name"
 msgid "April"
 msgstr "四月"
 
-#: ../glib/gdatetime.c:236
+#: ../glib/gdatetime.c:232
 msgctxt "full month name"
 msgid "May"
 msgstr "五月"
 
-#: ../glib/gdatetime.c:238
+#: ../glib/gdatetime.c:234
 msgctxt "full month name"
 msgid "June"
 msgstr "六月"
 
-#: ../glib/gdatetime.c:240
+#: ../glib/gdatetime.c:236
 msgctxt "full month name"
 msgid "July"
 msgstr "七月"
 
-#: ../glib/gdatetime.c:242
+#: ../glib/gdatetime.c:238
 msgctxt "full month name"
 msgid "August"
 msgstr "八月"
 
-#: ../glib/gdatetime.c:244
+#: ../glib/gdatetime.c:240
 msgctxt "full month name"
 msgid "September"
 msgstr "九月"
 
-#: ../glib/gdatetime.c:246
+#: ../glib/gdatetime.c:242
 msgctxt "full month name"
 msgid "October"
 msgstr "十月"
 
-#: ../glib/gdatetime.c:248
+#: ../glib/gdatetime.c:244
 msgctxt "full month name"
 msgid "November"
 msgstr "十一月"
 
-#: ../glib/gdatetime.c:250
+#: ../glib/gdatetime.c:246
 msgctxt "full month name"
 msgid "December"
 msgstr "十二月"
 
-#: ../glib/gdatetime.c:265
+#: ../glib/gdatetime.c:261
 msgctxt "abbreviated month name"
 msgid "Jan"
 msgstr "一月"
 
-#: ../glib/gdatetime.c:267
+#: ../glib/gdatetime.c:263
 msgctxt "abbreviated month name"
 msgid "Feb"
 msgstr "二月"
 
-#: ../glib/gdatetime.c:269
+#: ../glib/gdatetime.c:265
 msgctxt "abbreviated month name"
 msgid "Mar"
 msgstr "三月"
 
-#: ../glib/gdatetime.c:271
+#: ../glib/gdatetime.c:267
 msgctxt "abbreviated month name"
 msgid "Apr"
 msgstr "四月"
 
-#: ../glib/gdatetime.c:273
+#: ../glib/gdatetime.c:269
 msgctxt "abbreviated month name"
 msgid "May"
 msgstr "五月"
 
-#: ../glib/gdatetime.c:275
+#: ../glib/gdatetime.c:271
 msgctxt "abbreviated month name"
 msgid "Jun"
 msgstr "六月"
 
-#: ../glib/gdatetime.c:277
+#: ../glib/gdatetime.c:273
 msgctxt "abbreviated month name"
 msgid "Jul"
 msgstr "七月"
 
-#: ../glib/gdatetime.c:279
+#: ../glib/gdatetime.c:275
 msgctxt "abbreviated month name"
 msgid "Aug"
 msgstr "八月"
 
-#: ../glib/gdatetime.c:281
+#: ../glib/gdatetime.c:277
 msgctxt "abbreviated month name"
 msgid "Sep"
 msgstr "九月"
 
-#: ../glib/gdatetime.c:283
+#: ../glib/gdatetime.c:279
 msgctxt "abbreviated month name"
 msgid "Oct"
 msgstr "十月"
 
-#: ../glib/gdatetime.c:285
+#: ../glib/gdatetime.c:281
 msgctxt "abbreviated month name"
 msgid "Nov"
 msgstr "十一月"
 
-#: ../glib/gdatetime.c:287
+#: ../glib/gdatetime.c:283
 msgctxt "abbreviated month name"
 msgid "Dec"
 msgstr "十二月"
 
-#: ../glib/gdatetime.c:302
+#: ../glib/gdatetime.c:298
 msgctxt "full weekday name"
 msgid "Monday"
 msgstr "星期一"
 
-#: ../glib/gdatetime.c:304
+#: ../glib/gdatetime.c:300
 msgctxt "full weekday name"
 msgid "Tuesday"
 msgstr "星期二"
 
-#: ../glib/gdatetime.c:306
+#: ../glib/gdatetime.c:302
 msgctxt "full weekday name"
 msgid "Wednesday"
 msgstr "星期三"
 
-#: ../glib/gdatetime.c:308
+#: ../glib/gdatetime.c:304
 msgctxt "full weekday name"
 msgid "Thursday"
 msgstr "星期四"
 
-#: ../glib/gdatetime.c:310
+#: ../glib/gdatetime.c:306
 msgctxt "full weekday name"
 msgid "Friday"
 msgstr "星期五"
 
-#: ../glib/gdatetime.c:312
+#: ../glib/gdatetime.c:308
 msgctxt "full weekday name"
 msgid "Saturday"
 msgstr "星期六"
 
-#: ../glib/gdatetime.c:314
+#: ../glib/gdatetime.c:310
 msgctxt "full weekday name"
 msgid "Sunday"
 msgstr "星期日"
 
-#: ../glib/gdatetime.c:329
+#: ../glib/gdatetime.c:325
 msgctxt "abbreviated weekday name"
 msgid "Mon"
 msgstr "週一"
 
-#: ../glib/gdatetime.c:331
+#: ../glib/gdatetime.c:327
 msgctxt "abbreviated weekday name"
 msgid "Tue"
 msgstr "週二"
 
-#: ../glib/gdatetime.c:333
+#: ../glib/gdatetime.c:329
 msgctxt "abbreviated weekday name"
 msgid "Wed"
 msgstr "週三"
 
-#: ../glib/gdatetime.c:335
+#: ../glib/gdatetime.c:331
 msgctxt "abbreviated weekday name"
 msgid "Thu"
 msgstr "週四"
 
-#: ../glib/gdatetime.c:337
+#: ../glib/gdatetime.c:333
 msgctxt "abbreviated weekday name"
 msgid "Fri"
 msgstr "週五"
 
-#: ../glib/gdatetime.c:339
+#: ../glib/gdatetime.c:335
 msgctxt "abbreviated weekday name"
 msgid "Sat"
 msgstr "週六"
 
-#: ../glib/gdatetime.c:341
+#: ../glib/gdatetime.c:337
 msgctxt "abbreviated weekday name"
 msgid "Sun"
 msgstr "週日"
 
+#. Translators: 'before midday' indicator
+#: ../glib/gdatetime.c:354
+msgctxt "GDateTime"
+msgid "AM"
+msgstr "上午"
+
+#. Translators: 'after midday' indicator
+#: ../glib/gdatetime.c:357
+msgctxt "GDateTime"
+msgid "PM"
+msgstr "下午"
+
 #: ../glib/gdir.c:155
 #, c-format
 msgid "Error opening directory “%s”: %s"
 msgstr "開啟目錄「%s」時發生錯誤:%s"
 
-#: ../glib/gfileutils.c:701 ../glib/gfileutils.c:793
+#: ../glib/gfileutils.c:716 ../glib/gfileutils.c:808
 #, c-format
 msgid "Could not allocate %lu byte to read file “%s”"
 msgid_plural "Could not allocate %lu bytes to read file “%s”"
 msgstr[0] "無法配置 %lu 位元組來讀取檔案「%s」"
 
-#: ../glib/gfileutils.c:718
+#: ../glib/gfileutils.c:733
 #, c-format
 msgid "Error reading file “%s”: %s"
 msgstr "讀取檔案「%s」時發生錯誤:%s"
 
-#: ../glib/gfileutils.c:754
+#: ../glib/gfileutils.c:769
 #, c-format
 msgid "File “%s” is too large"
 msgstr "檔案「%s」太過巨大"
 
-#: ../glib/gfileutils.c:818
+#: ../glib/gfileutils.c:833
 #, c-format
 msgid "Failed to read from file “%s”: %s"
 msgstr "讀取檔案「%s」失敗:%s"
 
-#: ../glib/gfileutils.c:866 ../glib/gfileutils.c:938
+#: ../glib/gfileutils.c:881 ../glib/gfileutils.c:953
 #, c-format
 msgid "Failed to open file “%s”: %s"
 msgstr "開啟檔案「%s」失敗:%s"
 
-#: ../glib/gfileutils.c:878
+#: ../glib/gfileutils.c:893
 #, c-format
 msgid "Failed to get attributes of file “%s”: fstat() failed: %s"
 msgstr "獲取檔案「%s」的屬性失敗:fstat() 失敗:%s"
 
-#: ../glib/gfileutils.c:908
+#: ../glib/gfileutils.c:923
 #, c-format
 msgid "Failed to open file “%s”: fdopen() failed: %s"
 msgstr "開啟檔案「%s」失敗:fdopen() 失敗:%s"
 
-#: ../glib/gfileutils.c:1007
+#: ../glib/gfileutils.c:1022
 #, c-format
 msgid "Failed to rename file “%s” to “%s”: g_rename() failed: %s"
 msgstr "檔案名稱由「%s」改為「%s」失敗:g_rename() 失敗:%s"
 
-#: ../glib/gfileutils.c:1042 ../glib/gfileutils.c:1541
+#: ../glib/gfileutils.c:1057 ../glib/gfileutils.c:1564
 #, c-format
 msgid "Failed to create file “%s”: %s"
 msgstr "建立檔案「%s」失敗:%s"
 
-#: ../glib/gfileutils.c:1069
+#: ../glib/gfileutils.c:1084
 #, c-format
 msgid "Failed to write file “%s”: write() failed: %s"
 msgstr "無法寫入檔案「%s」:write() 失敗:%s"
 
-#: ../glib/gfileutils.c:1112
+#: ../glib/gfileutils.c:1127
 #, c-format
 msgid "Failed to write file “%s”: fsync() failed: %s"
 msgstr "無法寫入檔案「%s」:fsync() 失敗:%s"
 
-#: ../glib/gfileutils.c:1236
+#: ../glib/gfileutils.c:1251
 #, c-format
 msgid "Existing file “%s” could not be removed: g_unlink() failed: %s"
 msgstr "現存檔案「%s」無法移除:g_unlink() 失敗:%s"
 
-#: ../glib/gfileutils.c:1507
+#: ../glib/gfileutils.c:1530
 #, c-format
 msgid "Template “%s” invalid, should not contain a “%s”"
 msgstr "範本「%s」無效,不應含有「%s」"
 
 # (Abel) this is file template for mktemp/mkstemp
-#: ../glib/gfileutils.c:1520
+#: ../glib/gfileutils.c:1543
 #, c-format
 msgid "Template “%s” doesn’t contain XXXXXX"
 msgstr "範本「%s」沒有包含 XXXXXX"
 
-#: ../glib/gfileutils.c:2045
+#: ../glib/gfileutils.c:2105
 #, c-format
 msgid "Failed to read the symbolic link “%s”: %s"
 msgstr "讀取符號連結「%s」失敗:%s"
 
-#: ../glib/giochannel.c:1388
+#: ../glib/giochannel.c:1389
 #, c-format
 msgid "Could not open converter from “%s” to “%s”: %s"
 msgstr "無法開啟將「%s」轉換至「%s」的轉換器:%s"
 
-#: ../glib/giochannel.c:1733
+#: ../glib/giochannel.c:1734
 msgid "Can’t do a raw read in g_io_channel_read_line_string"
 msgstr "在 g_io_channel_read_line_string 中無法讀取原始資料"
 
-#: ../glib/giochannel.c:1780 ../glib/giochannel.c:2038
-#: ../glib/giochannel.c:2125
+#: ../glib/giochannel.c:1781 ../glib/giochannel.c:2039
+#: ../glib/giochannel.c:2126
 msgid "Leftover unconverted data in read buffer"
 msgstr "用來讀取資料的緩衝區中仍有未轉換的資料"
 
-#: ../glib/giochannel.c:1861 ../glib/giochannel.c:1938
+#: ../glib/giochannel.c:1862 ../glib/giochannel.c:1939
 msgid "Channel terminates in a partial character"
 msgstr "在字元未完整之前,輸入管道已經結束"
 
-#: ../glib/giochannel.c:1924
+#: ../glib/giochannel.c:1925
 msgid "Can’t do a raw read in g_io_channel_read_to_end"
 msgstr "在 g_io_channel_read_to_end 中無法讀取原始資料"
 
-#: ../glib/gkeyfile.c:737
+#: ../glib/gkeyfile.c:788
 msgid "Valid key file could not be found in search dirs"
 msgstr "在資料目錄中找不到有效的設定鍵檔案"
 
-#: ../glib/gkeyfile.c:773
+#: ../glib/gkeyfile.c:825
 msgid "Not a regular file"
 msgstr "不是正規的檔案"
 
-#: ../glib/gkeyfile.c:1204
+#: ../glib/gkeyfile.c:1270
 #, c-format
 msgid ""
 "Key file contains line “%s” which is not a key-value pair, group, or comment"
 msgstr "設定鍵檔案中「%s」行並非設定鍵值配對、群組或註解"
 
-#: ../glib/gkeyfile.c:1261
+#: ../glib/gkeyfile.c:1327
 #, c-format
 msgid "Invalid group name: %s"
 msgstr "無效的群組名稱:%s"
 
-#: ../glib/gkeyfile.c:1283
+#: ../glib/gkeyfile.c:1349
 msgid "Key file does not start with a group"
 msgstr "設定鍵檔案並非以群組開頭"
 
-#: ../glib/gkeyfile.c:1309
+#: ../glib/gkeyfile.c:1375
 #, c-format
 msgid "Invalid key name: %s"
 msgstr "無效的設定鍵名稱:%s"
 
-#: ../glib/gkeyfile.c:1336
+#: ../glib/gkeyfile.c:1402
 #, c-format
 msgid "Key file contains unsupported encoding “%s”"
 msgstr "設定鍵檔案包含不支援的編碼「%s」"
 
-#: ../glib/gkeyfile.c:1579 ../glib/gkeyfile.c:1752 ../glib/gkeyfile.c:3130
-#: ../glib/gkeyfile.c:3193 ../glib/gkeyfile.c:3323 ../glib/gkeyfile.c:3453
-#: ../glib/gkeyfile.c:3597 ../glib/gkeyfile.c:3826 ../glib/gkeyfile.c:3893
+#: ../glib/gkeyfile.c:1645 ../glib/gkeyfile.c:1818 ../glib/gkeyfile.c:3206
+#: ../glib/gkeyfile.c:3269 ../glib/gkeyfile.c:3399 ../glib/gkeyfile.c:3529
+#: ../glib/gkeyfile.c:3673 ../glib/gkeyfile.c:3902 ../glib/gkeyfile.c:3969
 #, c-format
 msgid "Key file does not have group “%s”"
 msgstr "設定鍵檔案沒有群組「%s」"
 
-#: ../glib/gkeyfile.c:1707
+#: ../glib/gkeyfile.c:1773
 #, c-format
 msgid "Key file does not have key “%s” in group “%s”"
 msgstr "設定鍵檔案的群組「%2$s」中沒有設定鍵「%1$s」"
 
-#: ../glib/gkeyfile.c:1869 ../glib/gkeyfile.c:1985
+#: ../glib/gkeyfile.c:1935 ../glib/gkeyfile.c:2051
 #, c-format
 msgid "Key file contains key “%s” with value “%s” which is not UTF-8"
 msgstr "設定鍵檔案包含的設定鍵「%s」(數值為「%s」) 並非 UTF-8"
 
-#: ../glib/gkeyfile.c:1889 ../glib/gkeyfile.c:2005 ../glib/gkeyfile.c:2374
+#: ../glib/gkeyfile.c:1955 ../glib/gkeyfile.c:2071 ../glib/gkeyfile.c:2448
 #, c-format
 msgid ""
 "Key file contains key “%s” which has a value that cannot be interpreted."
 msgstr "設定鍵檔案包含的設定鍵「%s」的數值無法解譯。"
 
-#: ../glib/gkeyfile.c:2591 ../glib/gkeyfile.c:2959
+#: ../glib/gkeyfile.c:2666 ../glib/gkeyfile.c:3035
 #, c-format
 msgid ""
 "Key file contains key “%s” in group “%s” which has a value that cannot be "
 "interpreted."
 msgstr "設定鍵檔案包含的群組「%2$s」中設定鍵「%1$s」數值無法解譯。"
 
-#: ../glib/gkeyfile.c:2669 ../glib/gkeyfile.c:2746
+#: ../glib/gkeyfile.c:2744 ../glib/gkeyfile.c:2821
 #, c-format
 msgid "Key “%s” in group “%s” has value “%s” where %s was expected"
 msgstr "群組「%2$s」中設定鍵「%1$s」包含數值「%3$s」,但預期為「%4$s」"
 
-#: ../glib/gkeyfile.c:4133
+#: ../glib/gkeyfile.c:4209
 msgid "Key file contains escape character at end of line"
 msgstr "設定鍵檔案在行尾包含跳出字元"
 
-#: ../glib/gkeyfile.c:4155
+#: ../glib/gkeyfile.c:4231
 #, c-format
 msgid "Key file contains invalid escape sequence “%s”"
 msgstr "設定鍵檔案含有不正確的「跳出字元」「%s」"
 
-#: ../glib/gkeyfile.c:4297
+#: ../glib/gkeyfile.c:4375
 #, c-format
 msgid "Value “%s” cannot be interpreted as a number."
 msgstr "數值「%s」不能被解譯為數字。"
 
-#: ../glib/gkeyfile.c:4311
+#: ../glib/gkeyfile.c:4389
 #, c-format
 msgid "Integer value “%s” out of range"
 msgstr "整數值「%s」超出範圍"
 
-#: ../glib/gkeyfile.c:4344
+#: ../glib/gkeyfile.c:4422
 #, c-format
 msgid "Value “%s” cannot be interpreted as a float number."
 msgstr "數值「%s」不能被解譯為浮點數。"
 
-#: ../glib/gkeyfile.c:4383
+#: ../glib/gkeyfile.c:4461
 #, c-format
 msgid "Value “%s” cannot be interpreted as a boolean."
 msgstr "數值「%s」不能被解譯為布林值。"
@@ -4385,39 +4691,39 @@ msgstr "對應檔案 %s%s%s%s 失敗:mmap() 失敗:%s"
 msgid "Failed to open file “%s”: open() failed: %s"
 msgstr "開啟檔案「%s」失敗:open() 失敗:%s"
 
-#: ../glib/gmarkup.c:398 ../glib/gmarkup.c:440
+#: ../glib/gmarkup.c:397 ../glib/gmarkup.c:439
 #, c-format
 msgid "Error on line %d char %d: "
 msgstr "第 %d 列第 %d 個字發生錯誤:"
 
-#: ../glib/gmarkup.c:462 ../glib/gmarkup.c:545
+#: ../glib/gmarkup.c:461 ../glib/gmarkup.c:544
 #, c-format
 msgid "Invalid UTF-8 encoded text in name - not valid '%s'"
 msgstr "名稱中無效的 UTF-8 編碼文字 - 不是合法的「%s」"
 
-#: ../glib/gmarkup.c:473
+#: ../glib/gmarkup.c:472
 #, c-format
 msgid "'%s' is not a valid name"
 msgstr "「%s」不是一個有效的名稱"
 
-#: ../glib/gmarkup.c:489
+#: ../glib/gmarkup.c:488
 #, c-format
 msgid "'%s' is not a valid name: '%c'"
 msgstr "「%s」不是一個有效的名稱「%c」"
 
-#: ../glib/gmarkup.c:599
+#: ../glib/gmarkup.c:598
 #, c-format
 msgid "Error on line %d: %s"
 msgstr "第 %d 列發生錯誤:%s"
 
-#: ../glib/gmarkup.c:676
+#: ../glib/gmarkup.c:675
 #, c-format
 msgid ""
 "Failed to parse '%-.*s', which should have been a digit inside a character "
 "reference (&#234; for example) - perhaps the digit is too large"
 msgstr "無法解析‘%-.*s’,字元參引內應該含有數字(例如 &#234;)─ 可能是數字太大"
 
-#: ../glib/gmarkup.c:688
+#: ../glib/gmarkup.c:687
 msgid ""
 "Character reference did not end with a semicolon; most likely you used an "
 "ampersand character without intending to start an entity - escape ampersand "
@@ -4426,22 +4732,22 @@ msgstr ""
 "字元參引的結束部分不是分號;很可能您想使用 & 字元但未將它變為實體 ─ 請將 & 轉"
 "換為 &amp;"
 
-#: ../glib/gmarkup.c:714
+#: ../glib/gmarkup.c:713
 #, c-format
 msgid "Character reference '%-.*s' does not encode a permitted character"
 msgstr "字元參引‘%-.*s’無法表示任何能接受的字元"
 
-#: ../glib/gmarkup.c:752
+#: ../glib/gmarkup.c:751
 msgid ""
 "Empty entity '&;' seen; valid entities are: &amp; &quot; &lt; &gt; &apos;"
 msgstr "出現空白的實體‘&;’;可用的實體為:&amp; &quot; &lt; &gt; &apos;"
 
-#: ../glib/gmarkup.c:760
+#: ../glib/gmarkup.c:759
 #, c-format
 msgid "Entity name '%-.*s' is not known"
 msgstr "實體名稱 '%-.*s' 意義不明"
 
-#: ../glib/gmarkup.c:765
+#: ../glib/gmarkup.c:764
 msgid ""
 "Entity did not end with a semicolon; most likely you used an ampersand "
 "character without intending to start an entity - escape ampersand as &amp;"
@@ -4449,31 +4755,31 @@ msgstr ""
 "實體的結束部分不是分號;很可能您想使用 & 字元但未將它變為實體 ─ 請將 & 轉換"
 "為 &amp;"
 
-#: ../glib/gmarkup.c:1171
+#: ../glib/gmarkup.c:1170
 msgid "Document must begin with an element (e.g. <book>)"
 msgstr "文件開始必須為一元素(例如 <book>)"
 
-#: ../glib/gmarkup.c:1211
+#: ../glib/gmarkup.c:1210
 #, c-format
 msgid ""
 "'%s' is not a valid character following a '<' character; it may not begin an "
 "element name"
 msgstr "‘<’字元後的「%s」不是有效的字元;這樣不可能是元素名稱的開始部份"
 
-#: ../glib/gmarkup.c:1253
+#: ../glib/gmarkup.c:1252
 #, c-format
 msgid ""
 "Odd character '%s', expected a '>' character to end the empty-element tag "
 "'%s'"
 msgstr "字元「%s」只有一半,空元素標籤「%s」的結尾應該以‘>’字元結束"
 
-#: ../glib/gmarkup.c:1334
+#: ../glib/gmarkup.c:1333
 #, c-format
 msgid ""
 "Odd character '%s', expected a '=' after attribute name '%s' of element '%s'"
 msgstr "不尋常的字元「%s」,屬性名稱「%s」(屬於元素「%s」)後應該是‘=’字元"
 
-#: ../glib/gmarkup.c:1375
+#: ../glib/gmarkup.c:1374
 #, c-format
 msgid ""
 "Odd character '%s', expected a '>' or '/' character to end the start tag of "
@@ -4483,7 +4789,7 @@ msgstr ""
 "不尋常的字元「%s」,元素「%s」的開始標籤應該以‘>’或‘/’字元終結,也可以是屬"
 "性;或許您在屬性名稱中使用了無效的字元"
 
-#: ../glib/gmarkup.c:1419
+#: ../glib/gmarkup.c:1418
 #, c-format
 msgid ""
 "Odd character '%s', expected an open quote mark after the equals sign when "
@@ -4492,80 +4798,80 @@ msgstr ""
 "不尋常的字元「%s」,當指定屬性「%s」的值(屬於元素「%s」)時,等號後應該出現"
 "開引號"
 
-#: ../glib/gmarkup.c:1552
+#: ../glib/gmarkup.c:1551
 #, c-format
 msgid ""
 "'%s' is not a valid character following the characters '</'; '%s' may not "
 "begin an element name"
 msgstr "‘</’字元後的「%s」不是有效的字元;「%s」不可能是元素名稱的開始部份"
 
-#: ../glib/gmarkup.c:1588
+#: ../glib/gmarkup.c:1587
 #, c-format
 msgid ""
 "'%s' is not a valid character following the close element name '%s'; the "
 "allowed character is '>'"
 msgstr "字元「%s」是無效的(位置在關閉元素「%s」末端);允許的字元為「>」"
 
-#: ../glib/gmarkup.c:1599
+#: ../glib/gmarkup.c:1598
 #, c-format
 msgid "Element '%s' was closed, no element is currently open"
 msgstr "元素「%s」已關閉,沒有開啟中的元素"
 
-#: ../glib/gmarkup.c:1608
+#: ../glib/gmarkup.c:1607
 #, c-format
 msgid "Element '%s' was closed, but the currently open element is '%s'"
 msgstr "元素「%s」已關閉,但開啟中的元素是「%s」"
 
-#: ../glib/gmarkup.c:1761
+#: ../glib/gmarkup.c:1760
 msgid "Document was empty or contained only whitespace"
 msgstr "文件完全空白或只含有空白字元"
 
-#: ../glib/gmarkup.c:1775
+#: ../glib/gmarkup.c:1774
 msgid "Document ended unexpectedly just after an open angle bracket '<'"
 msgstr "文件在尖角括號‘<’後突然終止"
 
-#: ../glib/gmarkup.c:1783 ../glib/gmarkup.c:1828
+#: ../glib/gmarkup.c:1782 ../glib/gmarkup.c:1827
 #, c-format
 msgid ""
 "Document ended unexpectedly with elements still open - '%s' was the last "
 "element opened"
 msgstr "在仍然有開啟中的元素時,文件突然結束 ─「%s」是最後一個開啟的元素"
 
-#: ../glib/gmarkup.c:1791
+#: ../glib/gmarkup.c:1790
 #, c-format
 msgid ""
 "Document ended unexpectedly, expected to see a close angle bracket ending "
 "the tag <%s/>"
 msgstr "文件突然結束,本來應該出現用來關閉標籤 <%s/> 的尖角括號"
 
-#: ../glib/gmarkup.c:1797
+#: ../glib/gmarkup.c:1796
 msgid "Document ended unexpectedly inside an element name"
 msgstr "在元素的名稱內,文件突然結束"
 
-#: ../glib/gmarkup.c:1803
+#: ../glib/gmarkup.c:1802
 msgid "Document ended unexpectedly inside an attribute name"
 msgstr "在屬性名稱內,文件突然結束"
 
-#: ../glib/gmarkup.c:1808
+#: ../glib/gmarkup.c:1807
 msgid "Document ended unexpectedly inside an element-opening tag."
 msgstr "在元素的開啟標籤內,文件突然結束"
 
-#: ../glib/gmarkup.c:1814
+#: ../glib/gmarkup.c:1813
 msgid ""
 "Document ended unexpectedly after the equals sign following an attribute "
 "name; no attribute value"
 msgstr "在屬性名稱的等號後,文件突然結束;沒有屬性值"
 
-#: ../glib/gmarkup.c:1821
+#: ../glib/gmarkup.c:1820
 msgid "Document ended unexpectedly while inside an attribute value"
 msgstr "在屬性值內,文件突然結束"
 
-#: ../glib/gmarkup.c:1837
+#: ../glib/gmarkup.c:1836
 #, c-format
 msgid "Document ended unexpectedly inside the close tag for element '%s'"
 msgstr "在元素「%s」的關閉標籤內,文件突然結束"
 
-#: ../glib/gmarkup.c:1843
+#: ../glib/gmarkup.c:1842
 msgid "Document ended unexpectedly inside a comment or processing instruction"
 msgstr "在註解或處理指示內,文件突然結束"
 
@@ -4628,326 +4934,326 @@ msgstr "缺少 %s 的參數"
 msgid "Unknown option %s"
 msgstr "不明的選項 %s"
 
-#: ../glib/gregex.c:258
+#: ../glib/gregex.c:257
 msgid "corrupted object"
 msgstr "損毀的物件"
 
-#: ../glib/gregex.c:260
+#: ../glib/gregex.c:259
 msgid "internal error or corrupted object"
 msgstr "內部錯誤或損毀的物件"
 
-#: ../glib/gregex.c:262
+#: ../glib/gregex.c:261
 msgid "out of memory"
 msgstr "記憶體耗盡"
 
-#: ../glib/gregex.c:267
+#: ../glib/gregex.c:266
 msgid "backtracking limit reached"
 msgstr "已達回溯上限"
 
-#: ../glib/gregex.c:279 ../glib/gregex.c:287
+#: ../glib/gregex.c:278 ../glib/gregex.c:286
 msgid "the pattern contains items not supported for partial matching"
 msgstr "此模式包含了不支援部分比對的項目"
 
-#: ../glib/gregex.c:281
+#: ../glib/gregex.c:280
 msgid "internal error"
 msgstr "內部的錯誤"
 
-#: ../glib/gregex.c:289
+#: ../glib/gregex.c:288
 msgid "back references as conditions are not supported for partial matching"
 msgstr "部分比對不支援以反向參照為條件"
 
-#: ../glib/gregex.c:298
+#: ../glib/gregex.c:297
 msgid "recursion limit reached"
 msgstr "已達遞廻上限"
 
-#: ../glib/gregex.c:300
+#: ../glib/gregex.c:299
 msgid "invalid combination of newline flags"
 msgstr "無效的換列旗標組合"
 
-#: ../glib/gregex.c:302
+#: ../glib/gregex.c:301
 msgid "bad offset"
 msgstr "錯誤的偏移"
 
-#: ../glib/gregex.c:304
+#: ../glib/gregex.c:303
 msgid "short utf8"
 msgstr "短式 utf8"
 
-#: ../glib/gregex.c:306
+#: ../glib/gregex.c:305
 msgid "recursion loop"
 msgstr "循環廻圈"
 
-#: ../glib/gregex.c:310
+#: ../glib/gregex.c:309
 msgid "unknown error"
 msgstr "不明的錯誤"
 
-#: ../glib/gregex.c:330
+#: ../glib/gregex.c:329
 msgid "\\ at end of pattern"
 msgstr "\\ 於模式結尾"
 
-#: ../glib/gregex.c:333
+#: ../glib/gregex.c:332
 msgid "\\c at end of pattern"
 msgstr "\\c 於模式結尾"
 
-#: ../glib/gregex.c:336
+#: ../glib/gregex.c:335
 msgid "unrecognized character following \\"
 msgstr "無法辨識的字元接著 \\"
 
-#: ../glib/gregex.c:339
+#: ../glib/gregex.c:338
 msgid "numbers out of order in {} quantifier"
 msgstr "{} 裡的數字次序顛倒了"
 
-#: ../glib/gregex.c:342
+#: ../glib/gregex.c:341
 msgid "number too big in {} quantifier"
 msgstr "{} 裡的數字太大了"
 
-#: ../glib/gregex.c:345
+#: ../glib/gregex.c:344
 msgid "missing terminating ] for character class"
 msgstr "字元類別缺少結束的 ]"
 
-#: ../glib/gregex.c:348
+#: ../glib/gregex.c:347
 msgid "invalid escape sequence in character class"
 msgstr "字元類別中無效的跳脫序列"
 
-#: ../glib/gregex.c:351
+#: ../glib/gregex.c:350
 msgid "range out of order in character class"
 msgstr "字元類別的範圍次序顛倒"
 
-#: ../glib/gregex.c:354
+#: ../glib/gregex.c:353
 msgid "nothing to repeat"
 msgstr "沒有東西可重複"
 
-#: ../glib/gregex.c:358
+#: ../glib/gregex.c:357
 msgid "unexpected repeat"
 msgstr "未預期的重複"
 
-#: ../glib/gregex.c:361
+#: ../glib/gregex.c:360
 msgid "unrecognized character after (? or (?-"
 msgstr "在 (? 或 (?- 後無法辨識的字元"
 
-#: ../glib/gregex.c:364
+#: ../glib/gregex.c:363
 msgid "POSIX named classes are supported only within a class"
 msgstr "POSIX 命名類別只在單一類別中支援"
 
-#: ../glib/gregex.c:367
+#: ../glib/gregex.c:366
 msgid "missing terminating )"
 msgstr "缺少結束的 )"
 
-#: ../glib/gregex.c:370
+#: ../glib/gregex.c:369
 msgid "reference to non-existent subpattern"
 msgstr "參照不存在的子模式"
 
-#: ../glib/gregex.c:373
+#: ../glib/gregex.c:372
 msgid "missing ) after comment"
 msgstr "註解後缺少 )"
 
-#: ../glib/gregex.c:376
+#: ../glib/gregex.c:375
 msgid "regular expression is too large"
 msgstr "正規表示式太大"
 
-#: ../glib/gregex.c:379
+#: ../glib/gregex.c:378
 msgid "failed to get memory"
 msgstr "取得記憶體失敗"
 
-#: ../glib/gregex.c:383
+#: ../glib/gregex.c:382
 msgid ") without opening ("
 msgstr ") 沒有開頭的 ("
 
-#: ../glib/gregex.c:387
+#: ../glib/gregex.c:386
 msgid "code overflow"
 msgstr "程式碼溢流"
 
-#: ../glib/gregex.c:391
+#: ../glib/gregex.c:390
 msgid "unrecognized character after (?<"
 msgstr "在 (?< 後有無法辨識的字元"
 
-#: ../glib/gregex.c:394
+#: ../glib/gregex.c:393
 msgid "lookbehind assertion is not fixed length"
 msgstr "lookbehind 判斷提示(assertion) 不是固定的長度"
 
-#: ../glib/gregex.c:397
+#: ../glib/gregex.c:396
 msgid "malformed number or name after (?("
 msgstr "(?( 之後有格式不正確的數字或名稱"
 
-#: ../glib/gregex.c:400
+#: ../glib/gregex.c:399
 msgid "conditional group contains more than two branches"
 msgstr "條件式群組包含了兩個以上的分支"
 
-#: ../glib/gregex.c:403
+#: ../glib/gregex.c:402
 msgid "assertion expected after (?("
 msgstr "(?( 後應該有判斷提示(assertion)"
 
 #. translators: '(?R' and '(?[+-]digits' are both meant as (groups of)
 #. * sequences here, '(?-54' would be an example for the second group.
 #.
-#: ../glib/gregex.c:410
+#: ../glib/gregex.c:409
 msgid "(?R or (?[+-]digits must be followed by )"
 msgstr "(?R 或 (?[+-]數字必須接著 )"
 
-#: ../glib/gregex.c:413
+#: ../glib/gregex.c:412
 msgid "unknown POSIX class name"
 msgstr "不明的 POSIX 類別名稱"
 
-#: ../glib/gregex.c:416
+#: ../glib/gregex.c:415
 msgid "POSIX collating elements are not supported"
 msgstr "不支援 POSIX 整理元件"
 
-#: ../glib/gregex.c:419
+#: ../glib/gregex.c:418
 msgid "character value in \\x{...} sequence is too large"
 msgstr "\\x{…} 序列中的字元值太大"
 
-#: ../glib/gregex.c:422
+#: ../glib/gregex.c:421
 msgid "invalid condition (?(0)"
 msgstr "無效的條件 (?(0)"
 
-#: ../glib/gregex.c:425
+#: ../glib/gregex.c:424
 msgid "\\C not allowed in lookbehind assertion"
 msgstr "在 lookbehind 判斷提示(assertion) 中不支援\\C"
 
-#: ../glib/gregex.c:432
+#: ../glib/gregex.c:431
 msgid "escapes \\L, \\l, \\N{name}, \\U, and \\u are not supported"
 msgstr "escapes \\L, \\l, \\N{name}, \\U, 和 \\u 不支援"
 
-#: ../glib/gregex.c:435
+#: ../glib/gregex.c:434
 msgid "recursive call could loop indefinitely"
 msgstr "遞廻呼叫可能變成無限廻圈"
 
-#: ../glib/gregex.c:439
+#: ../glib/gregex.c:438
 msgid "unrecognized character after (?P"
 msgstr "在 (?P 後有無法辨識的字元"
 
-#: ../glib/gregex.c:442
+#: ../glib/gregex.c:441
 msgid "missing terminator in subpattern name"
 msgstr "子模式名稱中缺少結束字元"
 
-#: ../glib/gregex.c:445
+#: ../glib/gregex.c:444
 msgid "two named subpatterns have the same name"
 msgstr "兩個命名的子模式具有相同的名稱"
 
-#: ../glib/gregex.c:448
+#: ../glib/gregex.c:447
 msgid "malformed \\P or \\p sequence"
 msgstr "格式不正確的 \\P 或 \\p 序列"
 
-#: ../glib/gregex.c:451
+#: ../glib/gregex.c:450
 msgid "unknown property name after \\P or \\p"
 msgstr "在 \\P 或 \\p 後有不明的屬性名稱"
 
-#: ../glib/gregex.c:454
+#: ../glib/gregex.c:453
 msgid "subpattern name is too long (maximum 32 characters)"
 msgstr "子模式名稱太長(最多 32 字元)"
 
-#: ../glib/gregex.c:457
+#: ../glib/gregex.c:456
 msgid "too many named subpatterns (maximum 10,000)"
 msgstr "太多命名的子模式(最大值 10,000)"
 
-#: ../glib/gregex.c:460
+#: ../glib/gregex.c:459
 msgid "octal value is greater than \\377"
 msgstr "8 進位值大於 \\377"
 
-#: ../glib/gregex.c:464
+#: ../glib/gregex.c:463
 msgid "overran compiling workspace"
 msgstr "編譯工作區超出範圍"
 
-#: ../glib/gregex.c:468
+#: ../glib/gregex.c:467
 msgid "previously-checked referenced subpattern not found"
 msgstr "找不到預先勾選的參照子字串"
 
-#: ../glib/gregex.c:471
+#: ../glib/gregex.c:470
 msgid "DEFINE group contains more than one branch"
 msgstr "DEFINE 群組包含一個以上的分支"
 
-#: ../glib/gregex.c:474
+#: ../glib/gregex.c:473
 msgid "inconsistent NEWLINE options"
 msgstr "不一致的 NEWLINE 選項"
 
-#: ../glib/gregex.c:477
+#: ../glib/gregex.c:476
 msgid ""
 "\\g is not followed by a braced, angle-bracketed, or quoted name or number, "
 "or by a plain number"
 msgstr "\\g 並未隨著具有大括弧、角括弧或引號的名稱或數字或純文字數字"
 
-#: ../glib/gregex.c:481
+#: ../glib/gregex.c:480
 msgid "a numbered reference must not be zero"
 msgstr "編號式參照必須不為零"
 
-#: ../glib/gregex.c:484
+#: ../glib/gregex.c:483
 msgid "an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT)"
 msgstr "引數不允許用於 (*ACCEPT)、(*FAIL) 或 (*COMMIT)"
 
-#: ../glib/gregex.c:487
+#: ../glib/gregex.c:486
 msgid "(*VERB) not recognized"
 msgstr "(*VERB) 無法辨識"
 
-#: ../glib/gregex.c:490
+#: ../glib/gregex.c:489
 msgid "number is too big"
 msgstr "數字太大"
 
-#: ../glib/gregex.c:493
+#: ../glib/gregex.c:492
 msgid "missing subpattern name after (?&"
 msgstr "(?& 後缺少子樣式"
 
-#: ../glib/gregex.c:496
+#: ../glib/gregex.c:495
 msgid "digit expected after (?+"
 msgstr "(?+ 後應該有數字"
 
-#: ../glib/gregex.c:499
+#: ../glib/gregex.c:498
 msgid "] is an invalid data character in JavaScript compatibility mode"
 msgstr "] 在 JavaScript 相容性模式中是無效的資料字元"
 
-#: ../glib/gregex.c:502
+#: ../glib/gregex.c:501
 msgid "different names for subpatterns of the same number are not allowed"
 msgstr "不允許同樣編號的子樣式有不同的名稱"
 
-#: ../glib/gregex.c:505
+#: ../glib/gregex.c:504
 msgid "(*MARK) must have an argument"
 msgstr "(*MARK) 需要一個引數"
 
-#: ../glib/gregex.c:508
+#: ../glib/gregex.c:507
 msgid "\\c must be followed by an ASCII character"
 msgstr "\\c 必須接著 ASCII 字元"
 
-#: ../glib/gregex.c:511
+#: ../glib/gregex.c:510
 msgid "\\k is not followed by a braced, angle-bracketed, or quoted name"
 msgstr "\\k 並未隨著具有大括弧、角括弧或引號的名稱"
 
-#: ../glib/gregex.c:514
+#: ../glib/gregex.c:513
 msgid "\\N is not supported in a class"
 msgstr "\\N 在類別中不支援"
 
-#: ../glib/gregex.c:517
+#: ../glib/gregex.c:516
 msgid "too many forward references"
 msgstr "有太多的向前參照"
 
-#: ../glib/gregex.c:520
+#: ../glib/gregex.c:519
 msgid "name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)"
 msgstr "名稱在 (*MARK)、(*PRUNE)、(*SKIP) 或 (*THEN)"
 
-#: ../glib/gregex.c:523
+#: ../glib/gregex.c:522
 msgid "character value in \\u.... sequence is too large"
 msgstr "\\u.... 序列中的字元值太大"
 
-#: ../glib/gregex.c:746 ../glib/gregex.c:1977
+#: ../glib/gregex.c:745 ../glib/gregex.c:1977
 #, c-format
 msgid "Error while matching regular expression %s: %s"
 msgstr "比對正規表示式 %s 發生錯誤:%s"
 
-#: ../glib/gregex.c:1317
+#: ../glib/gregex.c:1316
 msgid "PCRE library is compiled without UTF8 support"
 msgstr "PCRE 程式庫並未編譯對 UTF8 的支援"
 
-#: ../glib/gregex.c:1321
+#: ../glib/gregex.c:1320
 msgid "PCRE library is compiled without UTF8 properties support"
 msgstr "PCRE 程式庫並未編譯對 UTF8 屬性的支援"
 
-#: ../glib/gregex.c:1329
+#: ../glib/gregex.c:1328
 msgid "PCRE library is compiled with incompatible options"
 msgstr "PCRE 程式庫並未編譯不相容的選項"
 
-#: ../glib/gregex.c:1358
+#: ../glib/gregex.c:1357
 #, c-format
 msgid "Error while optimizing regular expression %s: %s"
 msgstr "最佳化正規表示式 %s 時發生錯誤:%s"
 
-#: ../glib/gregex.c:1438
+#: ../glib/gregex.c:1437
 #, c-format
 msgid "Error while compiling regular expression %s at char %d: %s"
 msgstr "編譯正規表示式 %s 時於第 %d 個字發生錯誤:%s"
@@ -4993,250 +5299,402 @@ msgstr "不明的跳脫序列"
 msgid "Error while parsing replacement text “%s” at char %lu: %s"
 msgstr "當解析於字元 %2$lu 的取代文字「%1$s」時發生錯誤:%3$s"
 
-#: ../glib/gshell.c:96
+#: ../glib/gshell.c:94
 msgid "Quoted text doesn’t begin with a quotation mark"
 msgstr "應該用引號括起來的文字不是以括號為開始"
 
-#: ../glib/gshell.c:186
+#: ../glib/gshell.c:184
 msgid "Unmatched quotation mark in command line or other shell-quoted text"
 msgstr "指令列或其它標為指令的字串內有不對稱的引號"
 
-#: ../glib/gshell.c:582
+#: ../glib/gshell.c:580
 #, c-format
 msgid "Text ended just after a “\\” character. (The text was “%s”)"
 msgstr "文字在「\\」字元後就終止了。(文字為「%s」)"
 
-#: ../glib/gshell.c:589
+#: ../glib/gshell.c:587
 #, c-format
 msgid "Text ended before matching quote was found for %c. (The text was “%s”)"
 msgstr "字串完結前仍沒有對應於 %c 的引號 (字串為「%s」)"
 
-#: ../glib/gshell.c:601
+#: ../glib/gshell.c:599
 msgid "Text was empty (or contained only whitespace)"
 msgstr "文字是空白的(或只含有空白字元)"
 
-#: ../glib/gspawn.c:209
+#: ../glib/gspawn.c:253
 #, c-format
 msgid "Failed to read data from child process (%s)"
 msgstr "無法從副進程讀取資料 (%s)"
 
-#: ../glib/gspawn.c:353
+#: ../glib/gspawn.c:401
 #, c-format
 msgid "Unexpected error in select() reading data from a child process (%s)"
 msgstr "當 select() 從子程序讀取資料時發生未預期的錯誤 (%s)"
 
-#: ../glib/gspawn.c:438
+#: ../glib/gspawn.c:486
 #, c-format
 msgid "Unexpected error in waitpid() (%s)"
 msgstr "waitpid() 發生未預期的錯誤 (%s)"
 
-#: ../glib/gspawn.c:844 ../glib/gspawn-win32.c:1233
+#: ../glib/gspawn.c:897 ../glib/gspawn-win32.c:1231
 #, c-format
 msgid "Child process exited with code %ld"
 msgstr "子程序以代碼 %ld 結束"
 
-#: ../glib/gspawn.c:852
+#: ../glib/gspawn.c:905
 #, c-format
 msgid "Child process killed by signal %ld"
 msgstr "子程序被信號 %ld 中止"
 
-#: ../glib/gspawn.c:859
+#: ../glib/gspawn.c:912
 #, c-format
 msgid "Child process stopped by signal %ld"
 msgstr "子程序被信號 %ld 停止"
 
-#: ../glib/gspawn.c:866
+#: ../glib/gspawn.c:919
 #, c-format
 msgid "Child process exited abnormally"
 msgstr "子程序異常結束"
 
-#: ../glib/gspawn.c:1271 ../glib/gspawn-win32.c:339 ../glib/gspawn-win32.c:347
+#: ../glib/gspawn.c:1324 ../glib/gspawn-win32.c:337 ../glib/gspawn-win32.c:345
 #, c-format
 msgid "Failed to read from child pipe (%s)"
 msgstr "無法從管道讀取資料 (%s)"
 
-#: ../glib/gspawn.c:1341
+#: ../glib/gspawn.c:1394
 #, c-format
 msgid "Failed to fork (%s)"
 msgstr "無法衍生進程 (%s)"
 
-#: ../glib/gspawn.c:1490 ../glib/gspawn-win32.c:370
+#: ../glib/gspawn.c:1543 ../glib/gspawn-win32.c:368
 #, c-format
 msgid "Failed to change to directory “%s” (%s)"
 msgstr "無法進入目錄「%s」(%s)"
 
-#: ../glib/gspawn.c:1500
+#: ../glib/gspawn.c:1553
 #, c-format
 msgid "Failed to execute child process “%s” (%s)"
 msgstr "無法執行副程序「%s」(%s)"
 
-#: ../glib/gspawn.c:1510
+#: ../glib/gspawn.c:1563
 #, c-format
 msgid "Failed to redirect output or input of child process (%s)"
 msgstr "無法將副進程的輸出或輸入重新導向 (%s)"
 
-#: ../glib/gspawn.c:1519
+#: ../glib/gspawn.c:1572
 #, c-format
 msgid "Failed to fork child process (%s)"
 msgstr "無法衍生副進程 (%s)"
 
-#: ../glib/gspawn.c:1527
+#: ../glib/gspawn.c:1580
 #, c-format
 msgid "Unknown error executing child process “%s”"
 msgstr "執行副程序「%s」時發生不明的錯誤"
 
-#: ../glib/gspawn.c:1551
+#: ../glib/gspawn.c:1604
 #, c-format
 msgid "Failed to read enough data from child pid pipe (%s)"
 msgstr "無法從 child pid pipe 讀取足夠的資料 (%s)"
 
-#: ../glib/gspawn-win32.c:283
+#: ../glib/gspawn-win32.c:281
 msgid "Failed to read data from child process"
 msgstr "無法從副進程讀取資料"
 
-#: ../glib/gspawn-win32.c:300
+#: ../glib/gspawn-win32.c:298
 #, c-format
 msgid "Failed to create pipe for communicating with child process (%s)"
 msgstr "無法建立管道來和副進程溝通 (%s)"
 
-#: ../glib/gspawn-win32.c:376 ../glib/gspawn-win32.c:495
+#: ../glib/gspawn-win32.c:374 ../glib/gspawn-win32.c:493
 #, c-format
 msgid "Failed to execute child process (%s)"
 msgstr "無法執行副進程 (%s)"
 
-#: ../glib/gspawn-win32.c:445
+#: ../glib/gspawn-win32.c:443
 #, c-format
 msgid "Invalid program name: %s"
 msgstr "程式名稱無效:%s"
 
-#: ../glib/gspawn-win32.c:455 ../glib/gspawn-win32.c:722
-#: ../glib/gspawn-win32.c:1297
+#: ../glib/gspawn-win32.c:453 ../glib/gspawn-win32.c:720
 #, c-format
 msgid "Invalid string in argument vector at %d: %s"
 msgstr "第 %d 個引數中含無效的字串:%s"
 
-#: ../glib/gspawn-win32.c:466 ../glib/gspawn-win32.c:737
-#: ../glib/gspawn-win32.c:1330
+#: ../glib/gspawn-win32.c:464 ../glib/gspawn-win32.c:735
 #, c-format
 msgid "Invalid string in environment: %s"
 msgstr "環境變數中的字串無效:%s"
 
-#: ../glib/gspawn-win32.c:718 ../glib/gspawn-win32.c:1278
+#: ../glib/gspawn-win32.c:716
 #, c-format
 msgid "Invalid working directory: %s"
 msgstr "無效的工作目錄:%s"
 
-#: ../glib/gspawn-win32.c:783
+#: ../glib/gspawn-win32.c:781
 #, c-format
 msgid "Failed to execute helper program (%s)"
 msgstr "無法執行協助程式 (%s)"
 
-#: ../glib/gspawn-win32.c:997
+#: ../glib/gspawn-win32.c:995
 msgid ""
 "Unexpected error in g_io_channel_win32_poll() reading data from a child "
 "process"
 msgstr "當 g_io_channel_win32_poll() 從副進程讀取資料時發生無法預計的錯誤"
 
-#: ../glib/gutf8.c:797
+#: ../glib/gstrfuncs.c:3247 ../glib/gstrfuncs.c:3348
+msgid "Empty string is not a number"
+msgstr ""
+
+#: ../glib/gstrfuncs.c:3271
+#, fuzzy, c-format
+#| msgid "'%s' is not a valid name"
+msgid "“%s” is not a signed number"
+msgstr "「%s」不是一個有效的名稱"
+
+#: ../glib/gstrfuncs.c:3281 ../glib/gstrfuncs.c:3384
+#, c-format
+msgid "Number “%s” is out of bounds [%s, %s]"
+msgstr ""
+
+#: ../glib/gstrfuncs.c:3374
+#, fuzzy, c-format
+#| msgid "'%s' is not a valid name"
+msgid "“%s” is not an unsigned number"
+msgstr "「%s」不是一個有效的名稱"
+
+#: ../glib/gutf8.c:808
 msgid "Failed to allocate memory"
 msgstr "配置記憶體失敗"
 
-#: ../glib/gutf8.c:930
+#: ../glib/gutf8.c:941
 msgid "Character out of range for UTF-8"
 msgstr "字元不在 UTF-8 範圍之內"
 
-#: ../glib/gutf8.c:1031 ../glib/gutf8.c:1040 ../glib/gutf8.c:1170
-#: ../glib/gutf8.c:1179 ../glib/gutf8.c:1318 ../glib/gutf8.c:1415
+#: ../glib/gutf8.c:1042 ../glib/gutf8.c:1051 ../glib/gutf8.c:1181
+#: ../glib/gutf8.c:1190 ../glib/gutf8.c:1329 ../glib/gutf8.c:1426
 msgid "Invalid sequence in conversion input"
 msgstr "轉換輸入資料時出現無效的字元次序"
 
-#: ../glib/gutf8.c:1329 ../glib/gutf8.c:1426
+#: ../glib/gutf8.c:1340 ../glib/gutf8.c:1437
 msgid "Character out of range for UTF-16"
 msgstr "字元不在 UTF-16 範圍之內"
 
-#: ../glib/gutils.c:2139 ../glib/gutils.c:2166 ../glib/gutils.c:2272
+#: ../glib/gutils.c:2229
 #, c-format
-msgid "%u byte"
-msgid_plural "%u bytes"
-msgstr[0] "%u 位元組"
+msgid "%.1f kB"
+msgstr "%.1f kB"
+
+#: ../glib/gutils.c:2230 ../glib/gutils.c:2436
+#, c-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: ../glib/gutils.c:2231 ../glib/gutils.c:2441
+#, c-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: ../glib/gutils.c:2232 ../glib/gutils.c:2446
+#, c-format
+msgid "%.1f TB"
+msgstr "%.1f TB"
+
+#: ../glib/gutils.c:2233 ../glib/gutils.c:2451
+#, c-format
+msgid "%.1f PB"
+msgstr "%.1f PB"
+
+#: ../glib/gutils.c:2234 ../glib/gutils.c:2456
+#, c-format
+msgid "%.1f EB"
+msgstr "%.1f EB"
 
-#: ../glib/gutils.c:2145
+#: ../glib/gutils.c:2237
 #, c-format
 msgid "%.1f KiB"
 msgstr "%.1f KiB"
 
-#: ../glib/gutils.c:2147
+#: ../glib/gutils.c:2238
 #, c-format
 msgid "%.1f MiB"
 msgstr "%.1f MiB"
 
-#: ../glib/gutils.c:2150
+#: ../glib/gutils.c:2239
 #, c-format
 msgid "%.1f GiB"
 msgstr "%.1f GiB"
 
-#: ../glib/gutils.c:2153
+#: ../glib/gutils.c:2240
 #, c-format
 msgid "%.1f TiB"
 msgstr "%.1f TiB"
 
-#: ../glib/gutils.c:2156
+#: ../glib/gutils.c:2241
 #, c-format
 msgid "%.1f PiB"
 msgstr "%.1f PiB"
 
-#: ../glib/gutils.c:2159
+#: ../glib/gutils.c:2242
 #, c-format
 msgid "%.1f EiB"
 msgstr "%.1f EiB"
 
-#: ../glib/gutils.c:2172
-#, c-format
-msgid "%.1f kB"
+#: ../glib/gutils.c:2245
+#, fuzzy, c-format
+#| msgid "%.1f kB"
+msgid "%.1f kb"
 msgstr "%.1f kB"
 
-#: ../glib/gutils.c:2175 ../glib/gutils.c:2290
-#, c-format
-msgid "%.1f MB"
+#: ../glib/gutils.c:2246
+#, fuzzy, c-format
+#| msgid "%.1f MB"
+msgid "%.1f Mb"
 msgstr "%.1f MB"
 
-#: ../glib/gutils.c:2178 ../glib/gutils.c:2295
-#, c-format
-msgid "%.1f GB"
+#: ../glib/gutils.c:2247
+#, fuzzy, c-format
+#| msgid "%.1f GB"
+msgid "%.1f Gb"
 msgstr "%.1f GB"
 
-#: ../glib/gutils.c:2180 ../glib/gutils.c:2300
-#, c-format
-msgid "%.1f TB"
+#: ../glib/gutils.c:2248
+#, fuzzy, c-format
+#| msgid "%.1f TB"
+msgid "%.1f Tb"
 msgstr "%.1f TB"
 
-#: ../glib/gutils.c:2183 ../glib/gutils.c:2305
-#, c-format
-msgid "%.1f PB"
+#: ../glib/gutils.c:2249
+#, fuzzy, c-format
+#| msgid "%.1f PB"
+msgid "%.1f Pb"
 msgstr "%.1f PB"
 
-#: ../glib/gutils.c:2186 ../glib/gutils.c:2310
-#, c-format
-msgid "%.1f EB"
+#: ../glib/gutils.c:2250
+#, fuzzy, c-format
+#| msgid "%.1f EB"
+msgid "%.1f Eb"
 msgstr "%.1f EB"
 
+#: ../glib/gutils.c:2253
+#, fuzzy, c-format
+#| msgid "%.1f KiB"
+msgid "%.1f Kib"
+msgstr "%.1f KiB"
+
+#: ../glib/gutils.c:2254
+#, fuzzy, c-format
+#| msgid "%.1f MiB"
+msgid "%.1f Mib"
+msgstr "%.1f MiB"
+
+#: ../glib/gutils.c:2255
+#, fuzzy, c-format
+#| msgid "%.1f GiB"
+msgid "%.1f Gib"
+msgstr "%.1f GiB"
+
+#: ../glib/gutils.c:2256
+#, fuzzy, c-format
+#| msgid "%.1f TiB"
+msgid "%.1f Tib"
+msgstr "%.1f TiB"
+
+#: ../glib/gutils.c:2257
+#, fuzzy, c-format
+#| msgid "%.1f PiB"
+msgid "%.1f Pib"
+msgstr "%.1f PiB"
+
+#: ../glib/gutils.c:2258
+#, fuzzy, c-format
+#| msgid "%.1f EiB"
+msgid "%.1f Eib"
+msgstr "%.1f EiB"
+
+#: ../glib/gutils.c:2292 ../glib/gutils.c:2418
+#, c-format
+msgid "%u byte"
+msgid_plural "%u bytes"
+msgstr[0] "%u 位元組"
+
+#: ../glib/gutils.c:2296
+#, fuzzy, c-format
+#| msgid "%u byte"
+#| msgid_plural "%u bytes"
+msgid "%u bit"
+msgid_plural "%u bits"
+msgstr[0] "%u 位元組"
+
 #. Translators: the %s in "%s bytes" will always be replaced by a number.
-#: ../glib/gutils.c:2223
+#: ../glib/gutils.c:2363
 #, c-format
 msgid "%s byte"
 msgid_plural "%s bytes"
 msgstr[0] "%s 位元組"
 
+#. Translators: the %s in "%s bits" will always be replaced by a number.
+#: ../glib/gutils.c:2368
+#, fuzzy, c-format
+#| msgid "%s byte"
+#| msgid_plural "%s bytes"
+msgid "%s bit"
+msgid_plural "%s bits"
+msgstr[0] "%s 位元組"
+
 #. Translators: this is from the deprecated function g_format_size_for_display() which uses 'KB' to
 #. * mean 1024 bytes.  I am aware that 'KB' is not correct, but it has been preserved for reasons of
 #. * compatibility.  Users will not see this string unless a program is using this deprecated function.
 #. * Please translate as literally as possible.
 #.
-#: ../glib/gutils.c:2285
+#: ../glib/gutils.c:2431
 #, c-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
+#~ msgid "No such interface"
+#~ msgstr "沒有這個介面"
+
+#~ msgid ""
+#~ "Message has %d file descriptors but the header field indicates %d file "
+#~ "descriptors"
+#~ msgstr "訊息有 %d 檔案描述符但標頭欄位表示有 %d 檔案描述符"
+
+#~ msgid "Error: signal not specified.\n"
+#~ msgstr "錯誤:尚未指定信號。\n"
+
+#~ msgid "Error: signal must be the fully-qualified name.\n"
+#~ msgstr "錯誤:信號必須為完全合規定的名稱。\n"
+
+#~ msgid "No files given"
+#~ msgstr "尚未指定檔案"
+
+#~ msgid "Error getting writable attributes: %s\n"
+#~ msgstr "取得可寫入屬性時發生錯誤:%s\n"
+
+#~ msgid "Error mounting location: %s\n"
+#~ msgstr "掛載位置時發生錯誤: %s\n"
+
+#~ msgid "Error unmounting mount: %s\n"
+#~ msgstr "卸載時發生錯誤: %s\n"
+
+#~ msgid "Error finding enclosing mount: %s\n"
+#~ msgstr "尋找封裝掛載發生錯誤:%s\n"
+
+#~ msgid "Error ejecting mount: %s\n"
+#~ msgstr "退出掛載時發生錯誤:%s\n"
+
+#~ msgid "Error mounting %s: %s\n"
+#~ msgstr "掛載 %s 時發生錯誤:%s\n"
+
+#~ msgid "No files to open"
+#~ msgstr "沒有檔案可開啟"
+
+#~ msgid "No files to delete"
+#~ msgstr "沒有要刪除的檔案"
+
+#~ msgid "Error setting attribute: %s\n"
+#~ msgstr "設定屬性時發生錯誤:%s\n"
+
 #~ msgid "No locations gives"
 #~ msgstr "未提供位置"