glib2 3.0.9-x64-mingw32 → 3.1.0-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (418) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -2
  3. data/ext/glib2/extconf.rb +0 -3
  4. data/ext/glib2/glib2.def +3 -0
  5. data/ext/glib2/rbglib.c +52 -20
  6. data/ext/glib2/rbglib.h +2 -2
  7. data/ext/glib2/rbglib_iochannel.c +1 -1
  8. data/ext/glib2/rbglib_mainloop.c +34 -11
  9. data/ext/glib2/rbglib_messages.c +21 -14
  10. data/ext/glib2/rbgobj_closure.c +65 -28
  11. data/ext/glib2/rbgobj_signal.c +38 -2
  12. data/ext/glib2/rbgobject.h +16 -0
  13. data/ext/glib2/rbgutil.c +6 -6
  14. data/lib/2.2/glib2.so +0 -0
  15. data/lib/2.3/glib2.so +0 -0
  16. data/lib/glib2.rb +8 -3
  17. data/lib/gnome2/rake/external-package.rb +24 -1
  18. data/lib/gnome2/rake/windows-binary-build-task.rb +339 -338
  19. data/vendor/local/bin/asn1Coding.exe +0 -0
  20. data/vendor/local/bin/asn1Decoding.exe +0 -0
  21. data/vendor/local/bin/asn1Parser.exe +0 -0
  22. data/vendor/local/bin/envsubst.exe +0 -0
  23. data/vendor/local/bin/gdbus.exe +0 -0
  24. data/vendor/local/bin/gettext.exe +0 -0
  25. data/vendor/local/bin/gio-querymodules.exe +0 -0
  26. data/vendor/local/bin/gio.exe +0 -0
  27. data/vendor/local/bin/glib-compile-resources.exe +0 -0
  28. data/vendor/local/bin/glib-compile-schemas.exe +0 -0
  29. data/vendor/local/bin/glib-genmarshal.exe +0 -0
  30. data/vendor/local/bin/glib-gettextize +1 -1
  31. data/vendor/local/bin/glib-mkenums +1 -1
  32. data/vendor/local/bin/gobject-query.exe +0 -0
  33. data/vendor/local/bin/gresource.exe +0 -0
  34. data/vendor/local/bin/gsettings.exe +0 -0
  35. data/vendor/local/bin/gspawn-win64-helper-console.exe +0 -0
  36. data/vendor/local/bin/gspawn-win64-helper.exe +0 -0
  37. data/vendor/local/bin/iconv.exe +0 -0
  38. data/vendor/local/bin/idn.exe +0 -0
  39. data/vendor/local/bin/libasprintf-0.dll +0 -0
  40. data/vendor/local/bin/libcharset-1.dll +0 -0
  41. data/vendor/local/bin/libffi-6.dll +0 -0
  42. data/vendor/local/bin/libgio-2.0-0.dll +0 -0
  43. data/vendor/local/bin/libglib-2.0-0.dll +0 -0
  44. data/vendor/local/bin/libgmodule-2.0-0.dll +0 -0
  45. data/vendor/local/bin/libgmp-10.dll +0 -0
  46. data/vendor/local/bin/libgnutls-30.dll +0 -0
  47. data/vendor/local/bin/libgobject-2.0-0.dll +0 -0
  48. data/vendor/local/bin/libgthread-2.0-0.dll +0 -0
  49. data/vendor/local/bin/libhogweed-4-2.dll +0 -0
  50. data/vendor/local/bin/libiconv-2.dll +0 -0
  51. data/vendor/local/bin/libidn-11.dll +0 -0
  52. data/vendor/local/bin/libintl-8.dll +0 -0
  53. data/vendor/local/bin/libnettle-6-2.dll +0 -0
  54. data/vendor/local/bin/libp11-kit-0.dll +0 -0
  55. data/vendor/local/bin/libpcre-1.dll +0 -0
  56. data/vendor/local/bin/libpcrecpp-0.dll +0 -0
  57. data/vendor/local/bin/libpcreposix-0.dll +0 -0
  58. data/vendor/local/bin/libtasn1-6.dll +0 -0
  59. data/vendor/local/bin/nettle-hash.exe +0 -0
  60. data/vendor/local/bin/nettle-lfib-stream.exe +0 -0
  61. data/vendor/local/bin/nettle-pbkdf2.exe +0 -0
  62. data/vendor/local/bin/ngettext.exe +0 -0
  63. data/vendor/local/bin/p11-kit.exe +0 -0
  64. data/vendor/local/bin/pcregrep.exe +0 -0
  65. data/vendor/local/bin/pcretest.exe +0 -0
  66. data/vendor/local/bin/pkcs1-conv.exe +0 -0
  67. data/vendor/local/bin/sexp-conv.exe +0 -0
  68. data/vendor/local/bin/trust.exe +0 -0
  69. data/vendor/local/include/glib-2.0/gio/gappinfo.h +11 -0
  70. data/vendor/local/include/glib-2.0/gio/gdrive.h +4 -0
  71. data/vendor/local/include/glib-2.0/gio/gfileinfo.h +9 -0
  72. data/vendor/local/include/glib-2.0/gio/gio-autocleanups.h +1 -0
  73. data/vendor/local/include/glib-2.0/gio/gioenums.h +10 -10
  74. data/vendor/local/include/glib-2.0/gio/giotypes.h +1 -1
  75. data/vendor/local/include/glib-2.0/gio/gsettings.h +14 -0
  76. data/vendor/local/include/glib-2.0/gio/gvfs.h +36 -0
  77. data/vendor/local/include/glib-2.0/glib/gchecksum.h +1 -1
  78. data/vendor/local/include/glib-2.0/glib/ghmac.h +5 -0
  79. data/vendor/local/include/glib-2.0/glib/gkeyfile.h +6 -0
  80. data/vendor/local/include/glib-2.0/glib/gmacros.h +1 -1
  81. data/vendor/local/include/glib-2.0/glib/gmain.h +11 -0
  82. data/vendor/local/include/glib-2.0/glib/gmessages.h +211 -2
  83. data/vendor/local/include/glib-2.0/glib/gtypes.h +2 -1
  84. data/vendor/local/include/glib-2.0/glib/gunicode.h +23 -3
  85. data/vendor/local/include/glib-2.0/glib/gutils.h +10 -0
  86. data/vendor/local/include/glib-2.0/glib/gvariant.h +71 -2
  87. data/vendor/local/include/glib-2.0/glib/gvarianttype.h +0 -1
  88. data/vendor/local/include/glib-2.0/glib/gversionmacros.h +23 -0
  89. data/vendor/local/include/glib-2.0/gobject/gparam.h +2 -1
  90. data/vendor/local/include/glib-2.0/gobject/gsignal.h +1 -1
  91. data/vendor/local/include/glib-2.0/gobject/gtypemodule.h +2 -0
  92. data/vendor/local/include/gmp.h +1 -1
  93. data/vendor/local/include/nettle/nettle-stdint.h +1 -1
  94. data/vendor/local/lib/gio/modules/libgiognutls.a +0 -0
  95. data/vendor/local/lib/gio/modules/libgiognutls.dll +0 -0
  96. data/vendor/local/lib/gio/modules/libgiognutls.dll.a +0 -0
  97. data/vendor/local/lib/glib-2.0/include/glibconfig.h +3 -2
  98. data/vendor/local/lib/libasprintf.a +0 -0
  99. data/vendor/local/lib/libasprintf.dll.a +0 -0
  100. data/vendor/local/lib/libcharset.a +0 -0
  101. data/vendor/local/lib/libcharset.dll.a +0 -0
  102. data/vendor/local/lib/libffi.a +0 -0
  103. data/vendor/local/lib/libffi.dll.a +0 -0
  104. data/vendor/local/lib/libgio-2.0.dll.a +0 -0
  105. data/vendor/local/lib/libgio-2.0.la +5 -5
  106. data/vendor/local/lib/libglib-2.0.dll.a +0 -0
  107. data/vendor/local/lib/libglib-2.0.la +5 -5
  108. data/vendor/local/lib/libgmodule-2.0.dll.a +0 -0
  109. data/vendor/local/lib/libgmodule-2.0.la +5 -5
  110. data/vendor/local/lib/libgmp.dll.a +0 -0
  111. data/vendor/local/lib/libgnutls.dll.a +0 -0
  112. data/vendor/local/lib/libgobject-2.0.dll.a +0 -0
  113. data/vendor/local/lib/libgobject-2.0.la +5 -5
  114. data/vendor/local/lib/libgthread-2.0.dll.a +0 -0
  115. data/vendor/local/lib/libgthread-2.0.la +5 -5
  116. data/vendor/local/lib/libhogweed.a +0 -0
  117. data/vendor/local/lib/libhogweed.dll.a +0 -0
  118. data/vendor/local/lib/libiconv.dll.a +0 -0
  119. data/vendor/local/lib/libidn.a +0 -0
  120. data/vendor/local/lib/libidn.dll.a +0 -0
  121. data/vendor/local/lib/libintl.a +0 -0
  122. data/vendor/local/lib/libintl.dll.a +0 -0
  123. data/vendor/local/lib/libnettle.a +0 -0
  124. data/vendor/local/lib/libnettle.dll.a +0 -0
  125. data/vendor/local/lib/libp11-kit.dll.a +0 -0
  126. data/vendor/local/lib/libpcre.a +0 -0
  127. data/vendor/local/lib/libpcre.dll.a +0 -0
  128. data/vendor/local/lib/libpcrecpp.a +0 -0
  129. data/vendor/local/lib/libpcrecpp.dll.a +0 -0
  130. data/vendor/local/lib/libpcreposix.a +0 -0
  131. data/vendor/local/lib/libpcreposix.dll.a +0 -0
  132. data/vendor/local/lib/libtasn1.a +0 -0
  133. data/vendor/local/lib/libtasn1.dll.a +0 -0
  134. data/vendor/local/lib/p11-kit/p11-kit-remote.exe +0 -0
  135. data/vendor/local/lib/pkcs11/p11-kit-trust.dll +0 -0
  136. data/vendor/local/lib/pkcs11/p11-kit-trust.dll.a +0 -0
  137. data/vendor/local/lib/pkgconfig/gio-2.0.pc +2 -2
  138. data/vendor/local/lib/pkgconfig/gio-windows-2.0.pc +1 -1
  139. data/vendor/local/lib/pkgconfig/glib-2.0.pc +2 -2
  140. data/vendor/local/lib/pkgconfig/gmodule-2.0.pc +1 -1
  141. data/vendor/local/lib/pkgconfig/gmodule-export-2.0.pc +1 -1
  142. data/vendor/local/lib/pkgconfig/gmodule-no-export-2.0.pc +1 -1
  143. data/vendor/local/lib/pkgconfig/gnutls.pc +1 -1
  144. data/vendor/local/lib/pkgconfig/gobject-2.0.pc +2 -2
  145. data/vendor/local/lib/pkgconfig/gthread-2.0.pc +1 -1
  146. data/vendor/local/share/bash-completion/completions/gsettings +3 -3
  147. data/vendor/local/share/gdb/auto-load/home/vagrant/ruby-gnome2.win64/glib2/vendor/local/lib/{libglib-2.0.so.0.4800.1-gdb.py → libglib-2.0.so.0.5000.2-gdb.py} +1 -1
  148. data/vendor/local/share/gdb/auto-load/home/vagrant/ruby-gnome2.win64/glib2/vendor/local/lib/{libgobject-2.0.so.0.4800.1-gdb.py → libgobject-2.0.so.0.5000.2-gdb.py} +1 -1
  149. data/vendor/local/share/glib-2.0/codegen/__init__.pyc +0 -0
  150. data/vendor/local/share/glib-2.0/codegen/__init__.pyo +0 -0
  151. data/vendor/local/share/glib-2.0/codegen/codegen.py +32 -22
  152. data/vendor/local/share/glib-2.0/codegen/codegen.pyc +0 -0
  153. data/vendor/local/share/glib-2.0/codegen/codegen.pyo +0 -0
  154. data/vendor/local/share/glib-2.0/codegen/codegen_docbook.pyc +0 -0
  155. data/vendor/local/share/glib-2.0/codegen/codegen_docbook.pyo +0 -0
  156. data/vendor/local/share/glib-2.0/codegen/codegen_main.py +3 -0
  157. data/vendor/local/share/glib-2.0/codegen/codegen_main.pyc +0 -0
  158. data/vendor/local/share/glib-2.0/codegen/codegen_main.pyo +0 -0
  159. data/vendor/local/share/glib-2.0/codegen/config.py +1 -1
  160. data/vendor/local/share/glib-2.0/codegen/config.pyc +0 -0
  161. data/vendor/local/share/glib-2.0/codegen/config.pyo +0 -0
  162. data/vendor/local/share/glib-2.0/codegen/dbustypes.pyc +0 -0
  163. data/vendor/local/share/glib-2.0/codegen/dbustypes.pyo +0 -0
  164. data/vendor/local/share/glib-2.0/codegen/parser.py +8 -4
  165. data/vendor/local/share/glib-2.0/codegen/parser.pyc +0 -0
  166. data/vendor/local/share/glib-2.0/codegen/parser.pyo +0 -0
  167. data/vendor/local/share/glib-2.0/codegen/utils.py +8 -2
  168. data/vendor/local/share/glib-2.0/codegen/utils.pyc +0 -0
  169. data/vendor/local/share/glib-2.0/codegen/utils.pyo +0 -0
  170. data/vendor/local/share/glib-2.0/gdb/{glib.py → glib_gdb.py} +0 -0
  171. data/vendor/local/share/glib-2.0/gdb/{gobject.py → gobject_gdb.py} +3 -3
  172. data/vendor/local/share/gtk-doc/html/gio/GAction.html +1 -1
  173. data/vendor/local/share/gtk-doc/html/gio/GActionGroup.html +1 -1
  174. data/vendor/local/share/gtk-doc/html/gio/GActionMap.html +1 -1
  175. data/vendor/local/share/gtk-doc/html/gio/GAppInfo.html +115 -8
  176. data/vendor/local/share/gtk-doc/html/gio/GApplication.html +4 -4
  177. data/vendor/local/share/gtk-doc/html/gio/GApplicationCommandLine.html +2 -1
  178. data/vendor/local/share/gtk-doc/html/gio/GAsyncInitable.html +1 -1
  179. data/vendor/local/share/gtk-doc/html/gio/GAsyncResult.html +1 -1
  180. data/vendor/local/share/gtk-doc/html/gio/GCancellable.html +1 -1
  181. data/vendor/local/share/gtk-doc/html/gio/GConverter.html +1 -1
  182. data/vendor/local/share/gtk-doc/html/gio/GCredentials.html +5 -5
  183. data/vendor/local/share/gtk-doc/html/gio/GDBusInterface.html +1 -1
  184. data/vendor/local/share/gtk-doc/html/gio/GDBusMessage.html +6 -6
  185. data/vendor/local/share/gtk-doc/html/gio/GDBusObject.html +1 -1
  186. data/vendor/local/share/gtk-doc/html/gio/GDBusObjectManager.html +1 -1
  187. data/vendor/local/share/gtk-doc/html/gio/GDBusObjectManagerClient.html +1 -1
  188. data/vendor/local/share/gtk-doc/html/gio/GDBusObjectManagerServer.html +3 -3
  189. data/vendor/local/share/gtk-doc/html/gio/GDatagramBased.html +8 -7
  190. data/vendor/local/share/gtk-doc/html/gio/GDrive.html +44 -1
  191. data/vendor/local/share/gtk-doc/html/gio/GDtlsClientConnection.html +1 -1
  192. data/vendor/local/share/gtk-doc/html/gio/GDtlsConnection.html +1 -1
  193. data/vendor/local/share/gtk-doc/html/gio/GDtlsServerConnection.html +1 -1
  194. data/vendor/local/share/gtk-doc/html/gio/GFile.html +25 -23
  195. data/vendor/local/share/gtk-doc/html/gio/GFileDescriptorBased.html +1 -1
  196. data/vendor/local/share/gtk-doc/html/gio/GFileEnumerator.html +1 -1
  197. data/vendor/local/share/gtk-doc/html/gio/GFileInfo.html +18 -4
  198. data/vendor/local/share/gtk-doc/html/gio/GFileMonitor.html +5 -5
  199. data/vendor/local/share/gtk-doc/html/gio/GIOModule.html +14 -10
  200. data/vendor/local/share/gtk-doc/html/gio/GIcon.html +1 -1
  201. data/vendor/local/share/gtk-doc/html/gio/GInetSocketAddress.html +1 -1
  202. data/vendor/local/share/gtk-doc/html/gio/GInitable.html +1 -1
  203. data/vendor/local/share/gtk-doc/html/gio/GListModel.html +1 -1
  204. data/vendor/local/share/gtk-doc/html/gio/GLoadableIcon.html +1 -1
  205. data/vendor/local/share/gtk-doc/html/gio/GMenu.html +14 -14
  206. data/vendor/local/share/gtk-doc/html/gio/GMenuModel.html +1 -1
  207. data/vendor/local/share/gtk-doc/html/gio/GMount.html +1 -1
  208. data/vendor/local/share/gtk-doc/html/gio/GMountOperation.html +5 -5
  209. data/vendor/local/share/gtk-doc/html/gio/GNetworkMonitor.html +1 -1
  210. data/vendor/local/share/gtk-doc/html/gio/GPollableInputStream.html +1 -1
  211. data/vendor/local/share/gtk-doc/html/gio/GPollableOutputStream.html +1 -1
  212. data/vendor/local/share/gtk-doc/html/gio/GPropertyAction.html +4 -4
  213. data/vendor/local/share/gtk-doc/html/gio/GProxy.html +1 -1
  214. data/vendor/local/share/gtk-doc/html/gio/GProxyResolver.html +1 -1
  215. data/vendor/local/share/gtk-doc/html/gio/GRemoteActionGroup.html +1 -1
  216. data/vendor/local/share/gtk-doc/html/gio/GResolver.html +2 -0
  217. data/vendor/local/share/gtk-doc/html/gio/GResource.html +32 -2
  218. data/vendor/local/share/gtk-doc/html/gio/GSeekable.html +1 -1
  219. data/vendor/local/share/gtk-doc/html/gio/GSettings.html +234 -11
  220. data/vendor/local/share/gtk-doc/html/gio/GSimpleAsyncResult.html +1 -1
  221. data/vendor/local/share/gtk-doc/html/gio/GSocketConnectable.html +3 -3
  222. data/vendor/local/share/gtk-doc/html/gio/GSocketService.html +10 -2
  223. data/vendor/local/share/gtk-doc/html/gio/GSrvTarget.html +1 -1
  224. data/vendor/local/share/gtk-doc/html/gio/GSubprocessLauncher.html +9 -9
  225. data/vendor/local/share/gtk-doc/html/gio/GTask.html +6 -6
  226. data/vendor/local/share/gtk-doc/html/gio/GThemedIcon.html +1 -1
  227. data/vendor/local/share/gtk-doc/html/gio/GTlsBackend.html +1 -1
  228. data/vendor/local/share/gtk-doc/html/gio/GTlsCertificate.html +10 -9
  229. data/vendor/local/share/gtk-doc/html/gio/GTlsClientConnection.html +1 -1
  230. data/vendor/local/share/gtk-doc/html/gio/GTlsFileDatabase.html +3 -3
  231. data/vendor/local/share/gtk-doc/html/gio/GTlsServerConnection.html +1 -1
  232. data/vendor/local/share/gtk-doc/html/gio/GVfs.html +222 -0
  233. data/vendor/local/share/gtk-doc/html/gio/GVolume.html +1 -1
  234. data/vendor/local/share/gtk-doc/html/gio/annotation-glossary.html +4 -2
  235. data/vendor/local/share/gtk-doc/html/gio/api-index-2-48.html +2 -2
  236. data/vendor/local/share/gtk-doc/html/gio/api-index-2-50.html +79 -0
  237. data/vendor/local/share/gtk-doc/html/gio/api-index-full.html +44 -0
  238. data/vendor/local/share/gtk-doc/html/gio/ch33.html +2 -2
  239. data/vendor/local/share/gtk-doc/html/gio/ch35.html +1 -1
  240. data/vendor/local/share/gtk-doc/html/gio/extending-gio.html +1 -1
  241. data/vendor/local/share/gtk-doc/html/gio/gapplication-tool.html +2 -2
  242. data/vendor/local/share/gtk-doc/html/gio/gdbus-codegen.html +18 -6
  243. data/vendor/local/share/gtk-doc/html/gio/gio-D-Bus-Introspection-Data.html +1 -1
  244. data/vendor/local/share/gtk-doc/html/gio/gio-Desktop-file-based-GAppInfo.html +7 -4
  245. data/vendor/local/share/gtk-doc/html/gio/gio-GFileAttribute.html +1 -1
  246. data/vendor/local/share/gtk-doc/html/gio/gio-GSettingsSchema-GSettingsSchemaSource.html +3 -3
  247. data/vendor/local/share/gtk-doc/html/gio/gio-GWin32RegistryKey.html +2 -2
  248. data/vendor/local/share/gtk-doc/html/gio/gio-Unix-Mounts.html +10 -6
  249. data/vendor/local/share/gtk-doc/html/gio/gio-hierarchy.html +2 -2
  250. data/vendor/local/share/gtk-doc/html/gio/gio.devhelp2 +14 -0
  251. data/vendor/local/share/gtk-doc/html/gio/gio.html +664 -0
  252. data/vendor/local/share/gtk-doc/html/gio/glib-compile-resources.html +19 -0
  253. data/vendor/local/share/gtk-doc/html/gio/glib-compile-schemas.html +6 -0
  254. data/vendor/local/share/gtk-doc/html/gio/gsettings-tool.html +7 -0
  255. data/vendor/local/share/gtk-doc/html/gio/index.html +5 -1
  256. data/vendor/local/share/gtk-doc/html/gio/pt02.html +3 -0
  257. data/vendor/local/share/gtk-doc/html/gio/running-gio-apps.html +10 -9
  258. data/vendor/local/share/gtk-doc/html/gio/testing.html +2 -2
  259. data/vendor/local/share/gtk-doc/html/gio/tools.html +3 -0
  260. data/vendor/local/share/gtk-doc/html/glib/annotation-glossary.html +4 -2
  261. data/vendor/local/share/gtk-doc/html/glib/api-index-2-16.html +2 -2
  262. data/vendor/local/share/gtk-doc/html/glib/api-index-2-40.html +1 -1
  263. data/vendor/local/share/gtk-doc/html/glib/api-index-2-46.html +1 -1
  264. data/vendor/local/share/gtk-doc/html/glib/api-index-2-48.html +2 -2
  265. data/vendor/local/share/gtk-doc/html/glib/api-index-2-50.html +121 -0
  266. data/vendor/local/share/gtk-doc/html/glib/api-index-2-6.html +2 -2
  267. data/vendor/local/share/gtk-doc/html/glib/api-index-full.html +110 -34
  268. data/vendor/local/share/gtk-doc/html/glib/glib-Arrays.html +1 -1
  269. data/vendor/local/share/gtk-doc/html/glib/glib-Bookmark-file-parser.html +10 -9
  270. data/vendor/local/share/gtk-doc/html/glib/glib-Byte-Arrays.html +4 -4
  271. data/vendor/local/share/gtk-doc/html/glib/glib-Character-Set-Conversion.html +10 -8
  272. data/vendor/local/share/gtk-doc/html/glib/glib-Commandline-option-parser.html +8 -8
  273. data/vendor/local/share/gtk-doc/html/glib/glib-Data-Checksums.html +1 -1
  274. data/vendor/local/share/gtk-doc/html/glib/glib-Data-HMACs.html +56 -2
  275. data/vendor/local/share/gtk-doc/html/glib/glib-Dynamic-Loading-of-Modules.html +1 -1
  276. data/vendor/local/share/gtk-doc/html/glib/glib-Error-Reporting.html +2 -2
  277. data/vendor/local/share/gtk-doc/html/glib/glib-File-Utilities.html +71 -50
  278. data/vendor/local/share/gtk-doc/html/glib/glib-GVariant.html +74 -17
  279. data/vendor/local/share/gtk-doc/html/glib/glib-GVariantType.html +4 -4
  280. data/vendor/local/share/gtk-doc/html/glib/glib-I18N.html +1 -1
  281. data/vendor/local/share/gtk-doc/html/glib/glib-IO-Channels.html +2 -2
  282. data/vendor/local/share/gtk-doc/html/glib/glib-Key-value-file-parser.html +57 -0
  283. data/vendor/local/share/gtk-doc/html/glib/glib-Keyed-Data-Lists.html +3 -3
  284. data/vendor/local/share/gtk-doc/html/glib/glib-Memory-Allocation.html +2 -2
  285. data/vendor/local/share/gtk-doc/html/glib/glib-Message-Logging.html +1009 -13
  286. data/vendor/local/share/gtk-doc/html/glib/glib-Miscellaneous-Macros.html +2 -2
  287. data/vendor/local/share/gtk-doc/html/glib/glib-Miscellaneous-Utility-Functions.html +84 -56
  288. data/vendor/local/share/gtk-doc/html/glib/glib-Perl-compatible-regular-expressions.html +3 -0
  289. data/vendor/local/share/gtk-doc/html/glib/glib-Simple-XML-Subset-Parser.html +1 -1
  290. data/vendor/local/share/gtk-doc/html/glib/glib-Spawning-Processes.html +4 -4
  291. data/vendor/local/share/gtk-doc/html/glib/glib-Standard-Macros.html +1 -1
  292. data/vendor/local/share/gtk-doc/html/glib/glib-String-Utility-Functions.html +2 -2
  293. data/vendor/local/share/gtk-doc/html/glib/glib-Testing.html +27 -13
  294. data/vendor/local/share/gtk-doc/html/glib/glib-The-Main-Event-Loop.html +36 -14
  295. data/vendor/local/share/gtk-doc/html/glib/glib-Threads.html +4 -4
  296. data/vendor/local/share/gtk-doc/html/glib/glib-UNIX-specific-utilities-and-integration.html +1 -1
  297. data/vendor/local/share/gtk-doc/html/glib/glib-URI-Functions.html +4 -4
  298. data/vendor/local/share/gtk-doc/html/glib/glib-Unicode-Manipulation.html +68 -5
  299. data/vendor/local/share/gtk-doc/html/glib/glib-Version-Information.html +17 -4
  300. data/vendor/local/share/gtk-doc/html/glib/glib-Warnings-and-Assertions.html +12 -23
  301. data/vendor/local/share/gtk-doc/html/glib/glib-Windows-Compatibility-Functions.html +1 -1
  302. data/vendor/local/share/gtk-doc/html/glib/glib-core.html +2 -3
  303. data/vendor/local/share/gtk-doc/html/glib/glib-regex-syntax.html +1 -1
  304. data/vendor/local/share/gtk-doc/html/glib/glib-running.html +3 -2
  305. data/vendor/local/share/gtk-doc/html/glib/glib-utilities.html +1 -1
  306. data/vendor/local/share/gtk-doc/html/glib/glib.devhelp2 +36 -2
  307. data/vendor/local/share/gtk-doc/html/glib/gvariant-format-strings.html +6 -6
  308. data/vendor/local/share/gtk-doc/html/glib/gvariant-text.html +1 -1
  309. data/vendor/local/share/gtk-doc/html/glib/index.html +4 -4
  310. data/vendor/local/share/gtk-doc/html/gobject/GTypePlugin.html +1 -1
  311. data/vendor/local/share/gtk-doc/html/gobject/chapter-gtype.html +1 -1
  312. data/vendor/local/share/gtk-doc/html/gobject/gobject-Boxed-Types.html +1 -1
  313. data/vendor/local/share/gtk-doc/html/gobject/gobject-Closures.html +1 -1
  314. data/vendor/local/share/gtk-doc/html/gobject/gobject-Generic-values.html +3 -3
  315. data/vendor/local/share/gtk-doc/html/gobject/gobject-Signals.html +2 -2
  316. data/vendor/local/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html +2 -2
  317. data/vendor/local/share/gtk-doc/html/gobject/gobject-properties.html +2 -2
  318. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-construction.html +2 -2
  319. data/vendor/local/share/gtk-doc/html/gobject/howto-gobject-destruction.html +1 -1
  320. data/vendor/local/share/gtk-doc/html/gobject/index.html +1 -1
  321. data/vendor/local/share/gtk-doc/html/gobject/tools-gtkdoc.html +1 -1
  322. data/vendor/local/share/gtk-doc/html/p11-kit/p11-kit-Future.html +4 -4
  323. data/vendor/local/share/gtk-doc/html/p11-kit/p11-kit-Modules.html +12 -12
  324. data/vendor/local/share/gtk-doc/html/p11-kit/p11-kit-PIN-Callbacks.html +15 -15
  325. data/vendor/local/share/gtk-doc/html/p11-kit/p11-kit-URIs.html +2 -2
  326. data/vendor/local/share/gtk-doc/html/p11-kit/p11-kit-Utilities.html +2 -2
  327. data/vendor/local/share/locale/az/LC_MESSAGES/glib20.mo +0 -0
  328. data/vendor/local/share/locale/be@latin/LC_MESSAGES/glib20.mo +0 -0
  329. data/vendor/local/share/locale/bn_IN/LC_MESSAGES/glib-networking.mo +0 -0
  330. data/vendor/local/share/locale/ca/LC_MESSAGES/glib20.mo +0 -0
  331. data/vendor/local/share/locale/ca@valencia/LC_MESSAGES/glib-networking.mo +0 -0
  332. data/vendor/local/share/locale/ca@valencia/LC_MESSAGES/glib20.mo +0 -0
  333. data/vendor/local/share/locale/cs/LC_MESSAGES/glib20.mo +0 -0
  334. data/vendor/local/share/locale/da/LC_MESSAGES/glib20.mo +0 -0
  335. data/vendor/local/share/locale/de/LC_MESSAGES/glib-networking.mo +0 -0
  336. data/vendor/local/share/locale/de/LC_MESSAGES/glib20.mo +0 -0
  337. data/vendor/local/share/locale/dz/LC_MESSAGES/glib20.mo +0 -0
  338. data/vendor/local/share/locale/en@shaw/LC_MESSAGES/glib20.mo +0 -0
  339. data/vendor/local/share/locale/en_CA/LC_MESSAGES/glib-networking.mo +0 -0
  340. data/vendor/local/share/locale/en_CA/LC_MESSAGES/glib20.mo +0 -0
  341. data/vendor/local/share/locale/en_GB/LC_MESSAGES/glib-networking.mo +0 -0
  342. data/vendor/local/share/locale/en_GB/LC_MESSAGES/glib20.mo +0 -0
  343. data/vendor/local/share/locale/eo/LC_MESSAGES/glib-networking.mo +0 -0
  344. data/vendor/local/share/locale/es/LC_MESSAGES/glib-networking.mo +0 -0
  345. data/vendor/local/share/locale/es/LC_MESSAGES/glib20.mo +0 -0
  346. data/vendor/local/share/locale/eu/LC_MESSAGES/glib20.mo +0 -0
  347. data/vendor/local/share/locale/fa/LC_MESSAGES/glib-networking.mo +0 -0
  348. data/vendor/local/share/locale/fa/LC_MESSAGES/glib20.mo +0 -0
  349. data/vendor/local/share/locale/fi/LC_MESSAGES/glib20.mo +0 -0
  350. data/vendor/local/share/locale/fr/LC_MESSAGES/glib-networking.mo +0 -0
  351. data/vendor/local/share/locale/fr/LC_MESSAGES/glib20.mo +0 -0
  352. data/vendor/local/share/locale/gl/LC_MESSAGES/glib20.mo +0 -0
  353. data/vendor/local/share/locale/gu/LC_MESSAGES/glib-networking.mo +0 -0
  354. data/vendor/local/share/locale/gu/LC_MESSAGES/glib20.mo +0 -0
  355. data/vendor/local/share/locale/he/LC_MESSAGES/glib20.mo +0 -0
  356. data/vendor/local/share/locale/hr/LC_MESSAGES/glib20.mo +0 -0
  357. data/vendor/local/share/locale/hu/LC_MESSAGES/glib-networking.mo +0 -0
  358. data/vendor/local/share/locale/hu/LC_MESSAGES/glib20.mo +0 -0
  359. data/vendor/local/share/locale/id/LC_MESSAGES/glib20.mo +0 -0
  360. data/vendor/local/share/locale/it/LC_MESSAGES/glib-networking.mo +0 -0
  361. data/vendor/local/share/locale/it/LC_MESSAGES/glib20.mo +0 -0
  362. data/vendor/local/share/locale/kk/LC_MESSAGES/glib20.mo +0 -0
  363. data/vendor/local/share/locale/km/LC_MESSAGES/glib-networking.mo +0 -0
  364. data/vendor/local/share/locale/kn/LC_MESSAGES/glib-networking.mo +0 -0
  365. data/vendor/local/share/locale/ko/LC_MESSAGES/glib20.mo +0 -0
  366. data/vendor/local/share/locale/lt/LC_MESSAGES/glib-networking.mo +0 -0
  367. data/vendor/local/share/locale/lt/LC_MESSAGES/glib20.mo +0 -0
  368. data/vendor/local/share/locale/lv/LC_MESSAGES/glib20.mo +0 -0
  369. data/vendor/local/share/locale/mai/LC_MESSAGES/glib20.mo +0 -0
  370. data/vendor/local/share/locale/mg/LC_MESSAGES/glib20.mo +0 -0
  371. data/vendor/local/share/locale/ml/LC_MESSAGES/glib20.mo +0 -0
  372. data/vendor/local/share/locale/ms/LC_MESSAGES/glib20.mo +0 -0
  373. data/vendor/local/share/locale/nb/LC_MESSAGES/glib-networking.mo +0 -0
  374. data/vendor/local/share/locale/nb/LC_MESSAGES/glib20.mo +0 -0
  375. data/vendor/local/share/locale/nds/LC_MESSAGES/glib20.mo +0 -0
  376. data/vendor/local/share/locale/oc/LC_MESSAGES/glib-networking.mo +0 -0
  377. data/vendor/local/share/locale/oc/LC_MESSAGES/glib20.mo +0 -0
  378. data/vendor/local/share/locale/pa/LC_MESSAGES/glib-networking.mo +0 -0
  379. data/vendor/local/share/locale/pl/LC_MESSAGES/glib-networking.mo +0 -0
  380. data/vendor/local/share/locale/pl/LC_MESSAGES/glib20.mo +0 -0
  381. data/vendor/local/share/locale/pt/LC_MESSAGES/glib20.mo +0 -0
  382. data/vendor/local/share/locale/pt_BR/LC_MESSAGES/glib20.mo +0 -0
  383. data/vendor/local/share/locale/sk/LC_MESSAGES/glib20.mo +0 -0
  384. data/vendor/local/share/locale/sl/LC_MESSAGES/glib-networking.mo +0 -0
  385. data/vendor/local/share/locale/sl/LC_MESSAGES/glib20.mo +0 -0
  386. data/vendor/local/share/locale/sq/LC_MESSAGES/glib20.mo +0 -0
  387. data/vendor/local/share/locale/sr/LC_MESSAGES/glib20.mo +0 -0
  388. data/vendor/local/share/locale/sr@ije/LC_MESSAGES/glib20.mo +0 -0
  389. data/vendor/local/share/locale/sr@latin/LC_MESSAGES/glib-networking.mo +0 -0
  390. data/vendor/local/share/locale/sr@latin/LC_MESSAGES/glib20.mo +0 -0
  391. data/vendor/local/share/locale/sv/LC_MESSAGES/glib20.mo +0 -0
  392. data/vendor/local/share/locale/th/LC_MESSAGES/glib20.mo +0 -0
  393. data/vendor/local/share/locale/tr/LC_MESSAGES/glib20.mo +0 -0
  394. data/vendor/local/share/locale/tt/LC_MESSAGES/glib20.mo +0 -0
  395. data/vendor/local/share/locale/ug/LC_MESSAGES/glib-networking.mo +0 -0
  396. data/vendor/local/share/locale/ug/LC_MESSAGES/glib20.mo +0 -0
  397. data/vendor/local/share/locale/wa/LC_MESSAGES/glib20.mo +0 -0
  398. data/vendor/local/share/locale/zh_CN/LC_MESSAGES/glib-networking.mo +0 -0
  399. data/vendor/local/share/locale/zh_HK/LC_MESSAGES/glib-networking.mo +0 -0
  400. data/vendor/local/share/locale/zh_HK/LC_MESSAGES/glib20.mo +0 -0
  401. data/vendor/local/share/locale/zh_TW/LC_MESSAGES/glib-networking.mo +0 -0
  402. data/vendor/local/share/locale/zh_TW/LC_MESSAGES/glib20.mo +0 -0
  403. data/vendor/local/share/man/man1/gapplication.1 +1 -1
  404. data/vendor/local/share/man/man1/gdbus-codegen.1 +8 -3
  405. data/vendor/local/share/man/man1/gdbus.1 +1 -1
  406. data/vendor/local/share/man/man1/gio-querymodules.1 +1 -1
  407. data/vendor/local/share/man/man1/gio.1 +583 -0
  408. data/vendor/local/share/man/man1/glib-compile-resources.1 +19 -1
  409. data/vendor/local/share/man/man1/glib-compile-schemas.1 +6 -1
  410. data/vendor/local/share/man/man1/glib-genmarshal.1 +1 -1
  411. data/vendor/local/share/man/man1/glib-gettextize.1 +1 -1
  412. data/vendor/local/share/man/man1/glib-mkenums.1 +1 -1
  413. data/vendor/local/share/man/man1/gobject-query.1 +1 -1
  414. data/vendor/local/share/man/man1/gresource.1 +1 -1
  415. data/vendor/local/share/man/man1/gsettings.1 +9 -1
  416. data/vendor/local/share/man/man1/gtester-report.1 +1 -1
  417. data/vendor/local/share/man/man1/gtester.1 +1 -1
  418. metadata +12 -7
@@ -769,6 +769,12 @@
769
769
  </td>
770
770
  </tr>
771
771
  <tr>
772
+ <td class="define_keyword">#define</td>
773
+ <td class="function_name">
774
+ <a class="link" href="glib-GVariant.html#G-VARIANT-BUILDER-INIT:CAPS" title="G_VARIANT_BUILDER_INIT()">G_VARIANT_BUILDER_INIT</a><span class="c_punctuation">()</span>
775
+ </td>
776
+ </tr>
777
+ <tr>
772
778
  <td class="function_type">
773
779
  <span class="returnvalue">void</span>
774
780
  </td>
@@ -1050,7 +1056,7 @@ can use:</p>
1050
1056
  <tbody>
1051
1057
  <tr>
1052
1058
  <td class="listing_lines" align="right"><pre>1</pre></td>
1053
- <td class="listing_code"><pre class="programlisting">GVariant <span class="gtkdoc opt">*</span>v <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-GVariant.html#g-variant-new">g_variant_new</a></span> <span class="gtkdoc opt">(</span><span class="string">'u'</span><span class="gtkdoc opt">,</span> <span class="number">40</span><span class="gtkdoc opt">);</span></pre></td>
1059
+ <td class="listing_code"><pre class="programlisting">GVariant <span class="gtkdoc opt">*</span>v <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-GVariant.html#g-variant-new">g_variant_new</a></span> <span class="gtkdoc opt">(</span><span class="string">&apos;u&apos;</span><span class="gtkdoc opt">,</span> <span class="number">40</span><span class="gtkdoc opt">);</span></pre></td>
1054
1060
  </tr>
1055
1061
  </tbody>
1056
1062
  </table>
@@ -1081,7 +1087,7 @@ Serialised <a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><
1081
1087
  <p><a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a> is largely compatible with D-Bus. Almost all types of
1082
1088
  <a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a> instances can be sent over D-Bus. See <a class="link" href="glib-GVariantType.html#GVariantType" title="GVariantType"><span class="type">GVariantType</span></a> for
1083
1089
  exceptions. (However, <a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a>'s serialisation format is not the same
1084
- as the serialisation format of a D-Bus message body: use <a href="../GDBusMessage.html#GDBusMessage-struct"><span class="type">GDBusMessage</span></a>,
1090
+ as the serialisation format of a D-Bus message body: use <a href="https://developer.gnome.org/gio/unstable/GDBusMessage.html#GDBusMessage-struct"><span class="type">GDBusMessage</span></a>,
1085
1091
  in the gio library, for those.)</p>
1086
1092
  <p>For space-efficiency, the <a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a> serialisation format does not
1087
1093
  automatically include the variant's length, type or endianness,
@@ -1674,7 +1680,7 @@ the data inside of the soon-to-be-freed <a class="link" href="glib-GVariant.html
1674
1680
  check fails then a <a class="link" href="glib-Message-Logging.html#g-critical" title="g_critical()"><code class="function">g_critical()</code></a> is printed and <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> is returned.</p>
1675
1681
  <p>This function is meant to be used by functions that wish to provide
1676
1682
  varargs accessors to <a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a> values of uncertain values (eg:
1677
- <a class="link" href="glib-GVariant.html#g-variant-lookup" title="g_variant_lookup ()"><code class="function">g_variant_lookup()</code></a> or <a href="../GMenuModel.html#g-menu-model-get-item-attribute"><code class="function">g_menu_model_get_item_attribute()</code></a>).</p>
1683
+ <a class="link" href="glib-GVariant.html#g-variant-lookup" title="g_variant_lookup ()"><code class="function">g_variant_lookup()</code></a> or <a href="https://developer.gnome.org/gio/unstable/GMenuModel.html#g-menu-model-get-item-attribute"><code class="function">g_menu_model_get_item_attribute()</code></a>).</p>
1678
1684
  <div class="refsect3">
1679
1685
  <a name="g-variant-check-format-string.parameters"></a><h4>Parameters</h4>
1680
1686
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -3338,6 +3344,8 @@ non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><cod
3338
3344
  <p>If the array contains a nul terminator character somewhere other than
3339
3345
  the last byte then the returned string is the string, up to the first
3340
3346
  such nul character.</p>
3347
+ <p>g_variant_get_fixed_array() should be used instead if the array contains
3348
+ arbitrary data that could not be nul-terminated or could contain nul bytes.</p>
3341
3349
  <p>It is an error to call this function with a <em class="parameter"><code>value</code></em>
3342
3350
  that is not an
3343
3351
  array of bytes.</p>
@@ -4930,7 +4938,7 @@ you no longer need it.</p>
4930
4938
  <span class="function"><a href="glib-GVariant.html#g-variant-iter-init">g_variant_iter_init</a></span> <span class="gtkdoc opt">(&amp;</span>iter<span class="gtkdoc opt">,</span> container<span class="gtkdoc opt">);</span>
4931
4939
  <span class="keyword">while</span> <span class="gtkdoc opt">((</span>child <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-GVariant.html#g-variant-iter-next-value">g_variant_iter_next_value</a></span> <span class="gtkdoc opt">(&amp;</span>iter<span class="gtkdoc opt">)))</span>
4932
4940
  <span class="gtkdoc opt">{</span>
4933
- <span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;type '%s'</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="glib-GVariant.html#g-variant-get-type-string">g_variant_get_type_string</a></span> <span class="gtkdoc opt">(</span>child<span class="gtkdoc opt">));</span>
4941
+ <span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;type &apos;%s&apos;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> <span class="function"><a href="glib-GVariant.html#g-variant-get-type-string">g_variant_get_type_string</a></span> <span class="gtkdoc opt">(</span>child<span class="gtkdoc opt">));</span>
4934
4942
 
4935
4943
  <span class="keyword">if</span> <span class="gtkdoc opt">(</span><span class="function"><a href="glib-GVariant.html#g-variant-is-container">g_variant_is_container</a></span> <span class="gtkdoc opt">(</span>child<span class="gtkdoc opt">))</span>
4936
4944
  <span class="function">iterate_container_recursive</span> <span class="gtkdoc opt">(</span>child<span class="gtkdoc opt">);</span>
@@ -5005,7 +5013,7 @@ the unpacking process.</p>
5005
5013
  17
5006
5014
  18
5007
5015
  19</pre></td>
5008
- <td class="listing_code"><pre class="programlisting"><span class="gtkdoc slc">// Iterates a dictionary of type 'a{sv}'</span>
5016
+ <td class="listing_code"><pre class="programlisting"><span class="gtkdoc slc">// Iterates a dictionary of type &apos;a{sv}&apos;</span>
5009
5017
  <span class="gtkdoc kwb">void</span>
5010
5018
  <span class="function">iterate_dictionary</span> <span class="gtkdoc opt">(</span>GVariant <span class="gtkdoc opt">*</span>dictionary<span class="gtkdoc opt">)</span>
5011
5019
  <span class="gtkdoc opt">{</span>
@@ -5016,7 +5024,7 @@ the unpacking process.</p>
5016
5024
  <span class="function"><a href="glib-GVariant.html#g-variant-iter-init">g_variant_iter_init</a></span> <span class="gtkdoc opt">(&amp;</span>iter<span class="gtkdoc opt">,</span> dictionary<span class="gtkdoc opt">);</span>
5017
5025
  <span class="keyword">while</span> <span class="gtkdoc opt">(</span><span class="function"><a href="glib-GVariant.html#g-variant-iter-next">g_variant_iter_next</a></span> <span class="gtkdoc opt">(&amp;</span>iter<span class="gtkdoc opt">,</span> <span class="string">&quot;{sv}&quot;</span><span class="gtkdoc opt">, &amp;</span>key<span class="gtkdoc opt">, &amp;</span>value<span class="gtkdoc opt">))</span>
5018
5026
  <span class="gtkdoc opt">{</span>
5019
- <span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Item '%s' has type '%s'</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> key<span class="gtkdoc opt">,</span>
5027
+ <span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Item &apos;%s&apos; has type &apos;%s&apos;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> key<span class="gtkdoc opt">,</span>
5020
5028
  <span class="function"><a href="glib-GVariant.html#g-variant-get-type-string">g_variant_get_type_string</a></span> <span class="gtkdoc opt">(</span>value<span class="gtkdoc opt">));</span>
5021
5029
 
5022
5030
  <span class="gtkdoc slc">// must free data for ourselves</span>
@@ -5121,7 +5129,7 @@ you must free or unreference all the unpacked values as you would with
5121
5129
  16
5122
5130
  17
5123
5131
  18</pre></td>
5124
- <td class="listing_code"><pre class="programlisting"><span class="gtkdoc slc">// Iterates a dictionary of type 'a{sv}'</span>
5132
+ <td class="listing_code"><pre class="programlisting"><span class="gtkdoc slc">// Iterates a dictionary of type &apos;a{sv}&apos;</span>
5125
5133
  <span class="gtkdoc kwb">void</span>
5126
5134
  <span class="function">iterate_dictionary</span> <span class="gtkdoc opt">(</span>GVariant <span class="gtkdoc opt">*</span>dictionary<span class="gtkdoc opt">)</span>
5127
5135
  <span class="gtkdoc opt">{</span>
@@ -5132,10 +5140,10 @@ you must free or unreference all the unpacked values as you would with
5132
5140
  <span class="function"><a href="glib-GVariant.html#g-variant-iter-init">g_variant_iter_init</a></span> <span class="gtkdoc opt">(&amp;</span>iter<span class="gtkdoc opt">,</span> dictionary<span class="gtkdoc opt">);</span>
5133
5141
  <span class="keyword">while</span> <span class="gtkdoc opt">(</span><span class="function"><a href="glib-GVariant.html#g-variant-iter-loop">g_variant_iter_loop</a></span> <span class="gtkdoc opt">(&amp;</span>iter<span class="gtkdoc opt">,</span> <span class="string">&quot;{sv}&quot;</span><span class="gtkdoc opt">, &amp;</span>key<span class="gtkdoc opt">, &amp;</span>value<span class="gtkdoc opt">))</span>
5134
5142
  <span class="gtkdoc opt">{</span>
5135
- <span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Item '%s' has type '%s'</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> key<span class="gtkdoc opt">,</span>
5143
+ <span class="function"><a href="glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Item &apos;%s&apos; has type &apos;%s&apos;</span><span class="gtkdoc esc">\n</span><span class="string">&quot;</span><span class="gtkdoc opt">,</span> key<span class="gtkdoc opt">,</span>
5136
5144
  <span class="function"><a href="glib-GVariant.html#g-variant-get-type-string">g_variant_get_type_string</a></span> <span class="gtkdoc opt">(</span>value<span class="gtkdoc opt">));</span>
5137
5145
 
5138
- <span class="gtkdoc slc">// no need to free 'key' and 'value' here</span>
5146
+ <span class="gtkdoc slc">// no need to free &apos;key&apos; and &apos;value&apos; here</span>
5139
5147
  <span class="gtkdoc slc">// unless breaking out of this loop</span>
5140
5148
  <span class="gtkdoc opt">}</span>
5141
5149
  <span class="gtkdoc opt">}</span></pre></td>
@@ -5195,6 +5203,52 @@ value</p>
5195
5203
  </div>
5196
5204
  <hr>
5197
5205
  <div class="refsect2">
5206
+ <a name="G-VARIANT-BUILDER-INIT:CAPS"></a><h3>G_VARIANT_BUILDER_INIT()</h3>
5207
+ <pre class="programlisting">#define G_VARIANT_BUILDER_INIT(variant_type) { { { 2942751021u, variant_type, { 0, } } } }
5208
+ </pre>
5209
+ <p>A stack-allocated <a class="link" href="glib-GVariant.html#GVariantBuilder" title="struct GVariantBuilder"><span class="type">GVariantBuilder</span></a> must be initialized if it is
5210
+ used together with <a class="link" href="glib-Miscellaneous-Macros.html#g-auto" title="g_auto()"><code class="function">g_auto()</code></a> to avoid warnings or crashes if
5211
+ function returns before <a class="link" href="glib-GVariant.html#g-variant-builder-init" title="g_variant_builder_init ()"><code class="function">g_variant_builder_init()</code></a> is called on the
5212
+ builder. This macro can be used as initializer instead of an
5213
+ explicit zeroing a variable when declaring it and a following
5214
+ <a class="link" href="glib-GVariant.html#g-variant-builder-init" title="g_variant_builder_init ()"><code class="function">g_variant_builder_init()</code></a>, but it cannot be assigned to a variable.</p>
5215
+ <p>The passed <em class="parameter"><code>variant_type</code></em>
5216
+ should be a static GVariantType to avoid
5217
+ lifetime issues, as copying the <em class="parameter"><code>variant_type</code></em>
5218
+ does not happen in
5219
+ the <a class="link" href="glib-GVariant.html#G-VARIANT-BUILDER-INIT:CAPS" title="G_VARIANT_BUILDER_INIT()"><code class="function">G_VARIANT_BUILDER_INIT()</code></a> call, but rather in functions that
5220
+ make sure that <a class="link" href="glib-GVariant.html#GVariantBuilder" title="struct GVariantBuilder"><span class="type">GVariantBuilder</span></a> is valid.</p>
5221
+ <div class="informalexample">
5222
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
5223
+ <tbody>
5224
+ <tr>
5225
+ <td class="listing_lines" align="right"><pre>1</pre></td>
5226
+ <td class="listing_code"><pre class="programlisting"><span class="function"><a href="glib-Miscellaneous-Macros.html#g-auto">g_auto</a></span><span class="gtkdoc opt">(</span>GVariantBuilder<span class="gtkdoc opt">)</span> builder <span class="gtkdoc opt">=</span> <span class="function"><a href="glib-GVariant.html#G-VARIANT-BUILDER-INIT:CAPS">G_VARIANT_BUILDER_INIT</a></span> <span class="gtkdoc opt">(</span>G_VARIANT_TYPE_BYTESTRING<span class="gtkdoc opt">);</span></pre></td>
5227
+ </tr>
5228
+ </tbody>
5229
+ </table>
5230
+ </div>
5231
+
5232
+ <p></p>
5233
+ <div class="refsect3">
5234
+ <a name="G-VARIANT-BUILDER-INIT.parameters"></a><h4>Parameters</h4>
5235
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
5236
+ <colgroup>
5237
+ <col width="150px" class="parameters_name">
5238
+ <col class="parameters_description">
5239
+ <col width="200px" class="parameters_annotations">
5240
+ </colgroup>
5241
+ <tbody><tr>
5242
+ <td class="parameter_name"><p>variant_type</p></td>
5243
+ <td class="parameter_description"><p>a const GVariantType*</p></td>
5244
+ <td class="parameter_annotations"> </td>
5245
+ </tr></tbody>
5246
+ </table></div>
5247
+ </div>
5248
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
5249
+ </div>
5250
+ <hr>
5251
+ <div class="refsect2">
5198
5252
  <a name="g-variant-builder-unref"></a><h3>g_variant_builder_unref ()</h3>
5199
5253
  <pre class="programlisting"><span class="returnvalue">void</span>
5200
5254
  g_variant_builder_unref (<em class="parameter"><code><a class="link" href="glib-GVariant.html#GVariantBuilder" title="struct GVariantBuilder"><span class="type">GVariantBuilder</span></a> *builder</code></em>);</pre>
@@ -5551,9 +5605,9 @@ the GVariant varargs documentation.</p>
5551
5605
  <span class="gtkdoc kwb">int</span> i<span class="gtkdoc opt">;</span>
5552
5606
 
5553
5607
  <span class="function"><a href="glib-GVariant.html#g-variant-builder-init">g_variant_builder_init</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> G_VARIANT_TYPE_ARRAY<span class="gtkdoc opt">);</span>
5554
- <span class="function"><a href="glib-GVariant.html#g-variant-builder-add-parsed">g_variant_builder_add_parsed</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> <span class="string">&quot;{'width', &lt;%i&gt;}&quot;</span><span class="gtkdoc opt">,</span> <span class="number">600</span><span class="gtkdoc opt">);</span>
5555
- <span class="function"><a href="glib-GVariant.html#g-variant-builder-add-parsed">g_variant_builder_add_parsed</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> <span class="string">&quot;{'title', &lt;%s&gt;}&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;foo&quot;</span><span class="gtkdoc opt">);</span>
5556
- <span class="function"><a href="glib-GVariant.html#g-variant-builder-add-parsed">g_variant_builder_add_parsed</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> <span class="string">&quot;{'transparency', &lt;0.5&gt;}&quot;</span><span class="gtkdoc opt">);</span>
5608
+ <span class="function"><a href="glib-GVariant.html#g-variant-builder-add-parsed">g_variant_builder_add_parsed</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> <span class="string">&quot;{&apos;width&apos;, &lt;%i&gt;}&quot;</span><span class="gtkdoc opt">,</span> <span class="number">600</span><span class="gtkdoc opt">);</span>
5609
+ <span class="function"><a href="glib-GVariant.html#g-variant-builder-add-parsed">g_variant_builder_add_parsed</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> <span class="string">&quot;{&apos;title&apos;, &lt;%s&gt;}&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;foo&quot;</span><span class="gtkdoc opt">);</span>
5610
+ <span class="function"><a href="glib-GVariant.html#g-variant-builder-add-parsed">g_variant_builder_add_parsed</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">,</span> <span class="string">&quot;{&apos;transparency&apos;, &lt;0.5&gt;}&quot;</span><span class="gtkdoc opt">);</span>
5557
5611
  <span class="keyword">return</span> <span class="function"><a href="glib-GVariant.html#g-variant-builder-end">g_variant_builder_end</a></span> <span class="gtkdoc opt">(&amp;</span>builder<span class="gtkdoc opt">);</span>
5558
5612
  <span class="gtkdoc opt">}</span></pre></td>
5559
5613
  </tr>
@@ -5602,7 +5656,10 @@ g_variant_builder_end (<em class="parameter"><code><a class="link" href="glib-GV
5602
5656
  in any way after this call
5603
5657
  except for reference counting operations (in the case of a
5604
5658
  heap-allocated <a class="link" href="glib-GVariant.html#GVariantBuilder" title="struct GVariantBuilder"><span class="type">GVariantBuilder</span></a>) or by reinitialising it with
5605
- <a class="link" href="glib-GVariant.html#g-variant-builder-init" title="g_variant_builder_init ()"><code class="function">g_variant_builder_init()</code></a> (in the case of stack-allocated).</p>
5659
+ <a class="link" href="glib-GVariant.html#g-variant-builder-init" title="g_variant_builder_init ()"><code class="function">g_variant_builder_init()</code></a> (in the case of stack-allocated). This
5660
+ means that for the stack-allocated builders there is no need to
5661
+ call <a class="link" href="glib-GVariant.html#g-variant-builder-clear" title="g_variant_builder_clear ()"><code class="function">g_variant_builder_clear()</code></a> after the call to
5662
+ <a class="link" href="glib-GVariant.html#g-variant-builder-end" title="g_variant_builder_end ()"><code class="function">g_variant_builder_end()</code></a>.</p>
5606
5663
  <p>It is an error to call this function in any way that would create an
5607
5664
  inconsistent value to be constructed (ie: insufficient number of
5608
5665
  items added to a container with a specific number of children
@@ -6340,7 +6397,7 @@ the GVariant varargs documentation.</p>
6340
6397
  <tbody>
6341
6398
  <tr>
6342
6399
  <td class="listing_lines" align="right"><pre>1</pre></td>
6343
- <td class="listing_code"><pre class="programlisting"><span class="function"><a href="glib-GVariant.html#g-variant-new-parsed">g_variant_new_parsed</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;[('one', 1), ('two', %i), (%s, 3)]&quot;</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">,</span> <span class="string">&quot;three&quot;</span><span class="gtkdoc opt">);</span></pre></td>
6400
+ <td class="listing_code"><pre class="programlisting"><span class="function"><a href="glib-GVariant.html#g-variant-new-parsed">g_variant_new_parsed</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;[(&apos;one&apos;, 1), (&apos;two&apos;, %i), (%s, 3)]&quot;</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">,</span> <span class="string">&quot;three&quot;</span><span class="gtkdoc opt">);</span></pre></td>
6344
6401
  </tr>
6345
6402
  </tbody>
6346
6403
  </table>
@@ -6355,7 +6412,7 @@ result of</p>
6355
6412
  <tbody>
6356
6413
  <tr>
6357
6414
  <td class="listing_lines" align="right"><pre>1</pre></td>
6358
- <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">[(</span><span class="string">'one'</span><span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">), (</span><span class="string">'two'</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">), (</span><span class="string">'three'</span><span class="gtkdoc opt">,</span> <span class="number">3</span><span class="gtkdoc opt">)]</span></pre></td>
6415
+ <td class="listing_code"><pre class="programlisting"><span class="gtkdoc opt">[(</span><span class="string">&apos;one&apos;</span><span class="gtkdoc opt">,</span> <span class="number">1</span><span class="gtkdoc opt">), (</span><span class="string">&apos;two&apos;</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">), (</span><span class="string">&apos;three&apos;</span><span class="gtkdoc opt">,</span> <span class="number">3</span><span class="gtkdoc opt">)]</span></pre></td>
6359
6416
  </tr>
6360
6417
  </tbody>
6361
6418
  </table>
@@ -6418,7 +6475,7 @@ monospace media where newlines are treated in the usual way.</p>
6418
6475
  2
6419
6476
  3</pre></td>
6420
6477
  <td class="listing_code"><pre class="programlisting">unterminated string constant<span class="gtkdoc opt">:</span>
6421
- <span class="gtkdoc opt">(</span><span class="number">1</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">,</span> <span class="number">3</span><span class="gtkdoc opt">,</span> <span class="string">'abc</span>
6478
+ <span class="gtkdoc opt">(</span><span class="number">1</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">,</span> <span class="number">3</span><span class="gtkdoc opt">,</span> <span class="string">&apos;abc</span>
6422
6479
  <span class="string"> ^^^^</span></pre></td>
6423
6480
  </tr>
6424
6481
  </tbody>
@@ -6435,7 +6492,7 @@ monospace media where newlines are treated in the usual way.</p>
6435
6492
  2
6436
6493
  3</pre></td>
6437
6494
  <td class="listing_code"><pre class="programlisting">unable to find a common type<span class="gtkdoc opt">:</span>
6438
- <span class="gtkdoc opt">[</span><span class="number">1</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">,</span> <span class="number">3</span><span class="gtkdoc opt">,</span> <span class="string">'str'</span><span class="gtkdoc opt">]</span>
6495
+ <span class="gtkdoc opt">[</span><span class="number">1</span><span class="gtkdoc opt">,</span> <span class="number">2</span><span class="gtkdoc opt">,</span> <span class="number">3</span><span class="gtkdoc opt">,</span> <span class="string">&apos;str&apos;</span><span class="gtkdoc opt">]</span>
6439
6496
  <span class="gtkdoc opt">^ ^^^^^</span></pre></td>
6440
6497
  </tr>
6441
6498
  </tbody>
@@ -450,10 +450,10 @@ type".</p>
450
450
  <p>This is similar to how instances of abstract classes may not
451
451
  directly exist in other type systems, but instances of their
452
452
  non-abstract subtypes may. For example, in GTK, no object that has
453
- the type of <span class="type">GtkBin</span> can exist (since <span class="type">GtkBin</span> is an abstract class),
454
- but a <span class="type">GtkWindow</span> can certainly be instantiated, and you would say
455
- that the <span class="type">GtkWindow</span> is a <span class="type">GtkBin</span> (since <span class="type">GtkWindow</span> is a subclass of
456
- <span class="type">GtkBin</span>).</p>
453
+ the type of <a href="http://developer.gnome.org/gtk4/GtkBin.html#GtkBin-struct"><span class="type">GtkBin</span></a> can exist (since <a href="http://developer.gnome.org/gtk4/GtkBin.html#GtkBin-struct"><span class="type">GtkBin</span></a> is an abstract class),
454
+ but a <a href="http://developer.gnome.org/gtk4/GtkWindow.html#GtkWindow-struct"><span class="type">GtkWindow</span></a> can certainly be instantiated, and you would say
455
+ that the <a href="http://developer.gnome.org/gtk4/GtkWindow.html#GtkWindow-struct"><span class="type">GtkWindow</span></a> is a <a href="http://developer.gnome.org/gtk4/GtkBin.html#GtkBin-struct"><span class="type">GtkBin</span></a> (since <a href="http://developer.gnome.org/gtk4/GtkWindow.html#GtkWindow-struct"><span class="type">GtkWindow</span></a> is a subclass of
456
+ <a href="http://developer.gnome.org/gtk4/GtkBin.html#GtkBin-struct"><span class="type">GtkBin</span></a>).</p>
457
457
  <div class="refsect3">
458
458
  <a name="id-1.6.18.6.9"></a><h4>GVariant Type Strings</h4>
459
459
  <p>A GVariant type string can be any of the following:</p>
@@ -333,7 +333,7 @@ at runtime.</p>
333
333
  <span class="gtkdoc kwb">const char</span> <span class="gtkdoc opt">*</span>string<span class="gtkdoc opt">;</span>
334
334
  <span class="gtkdoc opt">...</span>
335
335
  string
336
- <span class="gtkdoc opt">=</span> index <span class="gtkdoc opt">&gt;</span> <span class="number">1</span> ? <span class="function">_</span><span class="gtkdoc opt">(</span><span class="string">&quot;a default message&quot;</span><span class="gtkdoc opt">) :</span> <span class="function">gettext</span> <span class="gtkdoc opt">(</span>messages<span class="gtkdoc opt">[</span>index<span class="gtkdoc opt">]);</span>
336
+ <span class="gtkdoc opt">=</span> index <span class="gtkdoc opt">&amp;</span>gt<span class="gtkdoc opt">;</span> <span class="number">1</span> ? <span class="function">_</span><span class="gtkdoc opt">(</span><span class="string">&quot;a default message&quot;</span><span class="gtkdoc opt">) :</span> <span class="function">gettext</span> <span class="gtkdoc opt">(</span>messages<span class="gtkdoc opt">[</span>index<span class="gtkdoc opt">]);</span>
337
337
 
338
338
  <span class="function">fputs</span> <span class="gtkdoc opt">(</span>string<span class="gtkdoc opt">);</span>
339
339
  <span class="gtkdoc opt">...</span>
@@ -676,8 +676,8 @@ access the channel after it is closed).</p>
676
676
  <tbody>
677
677
  <tr>
678
678
  <td class="parameter_name"><p>filename</p></td>
679
- <td class="parameter_description"><p>A string containing the name of a file</p></td>
680
- <td class="parameter_annotations"> </td>
679
+ <td class="parameter_description"><p> A string containing the name of a file. </p></td>
680
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Override the parsed C type with given type."><span class="acronym">type</span></acronym> filename]</span></td>
681
681
  </tr>
682
682
  <tr>
683
683
  <td class="parameter_name"><p>mode</p></td>
@@ -100,6 +100,14 @@
100
100
  <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
101
101
  </td>
102
102
  <td class="function_name">
103
+ <a class="link" href="glib-Key-value-file-parser.html#g-key-file-load-from-bytes" title="g_key_file_load_from_bytes ()">g_key_file_load_from_bytes</a> <span class="c_punctuation">()</span>
104
+ </td>
105
+ </tr>
106
+ <tr>
107
+ <td class="function_type">
108
+ <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
109
+ </td>
110
+ <td class="function_name">
103
111
  <a class="link" href="glib-Key-value-file-parser.html#g-key-file-load-from-data-dirs" title="g_key_file_load_from_data_dirs ()">g_key_file_load_from_data_dirs</a> <span class="c_punctuation">()</span>
104
112
  </td>
105
113
  </tr>
@@ -888,6 +896,55 @@ in bytes (or (gsize)-1 if data is nul-terminated)</p></td>
888
896
  </div>
889
897
  <hr>
890
898
  <div class="refsect2">
899
+ <a name="g-key-file-load-from-bytes"></a><h3>g_key_file_load_from_bytes ()</h3>
900
+ <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
901
+ g_key_file_load_from_bytes (<em class="parameter"><code><a class="link" href="glib-Key-value-file-parser.html#GKeyFile" title="GKeyFile"><span class="type">GKeyFile</span></a> *key_file</code></em>,
902
+ <em class="parameter"><code><a class="link" href="glib-Byte-Arrays.html#GBytes" title="GBytes"><span class="type">GBytes</span></a> *bytes</code></em>,
903
+ <em class="parameter"><code><a class="link" href="glib-Key-value-file-parser.html#GKeyFileFlags" title="enum GKeyFileFlags"><span class="type">GKeyFileFlags</span></a> flags</code></em>,
904
+ <em class="parameter"><code><a class="link" href="glib-Error-Reporting.html#GError" title="struct GError"><span class="type">GError</span></a> **error</code></em>);</pre>
905
+ <p>Loads a key file from the data in <em class="parameter"><code>bytes</code></em>
906
+ into an empty <a class="link" href="glib-Key-value-file-parser.html#GKeyFile" title="GKeyFile"><span class="type">GKeyFile</span></a> structure.
907
+ If the object cannot be created then <code class="literal">error</code> is set to a <a class="link" href="glib-Key-value-file-parser.html#GKeyFileError" title="enum GKeyFileError"><span class="type">GKeyFileError</span></a>.</p>
908
+ <div class="refsect3">
909
+ <a name="g-key-file-load-from-bytes.parameters"></a><h4>Parameters</h4>
910
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
911
+ <colgroup>
912
+ <col width="150px" class="parameters_name">
913
+ <col class="parameters_description">
914
+ <col width="200px" class="parameters_annotations">
915
+ </colgroup>
916
+ <tbody>
917
+ <tr>
918
+ <td class="parameter_name"><p>key_file</p></td>
919
+ <td class="parameter_description"><p>an empty <a class="link" href="glib-Key-value-file-parser.html#GKeyFile" title="GKeyFile"><span class="type">GKeyFile</span></a> struct</p></td>
920
+ <td class="parameter_annotations"> </td>
921
+ </tr>
922
+ <tr>
923
+ <td class="parameter_name"><p>bytes</p></td>
924
+ <td class="parameter_description"><p>a <a class="link" href="glib-Byte-Arrays.html#GBytes" title="GBytes"><span class="type">GBytes</span></a></p></td>
925
+ <td class="parameter_annotations"> </td>
926
+ </tr>
927
+ <tr>
928
+ <td class="parameter_name"><p>flags</p></td>
929
+ <td class="parameter_description"><p>flags from <a class="link" href="glib-Key-value-file-parser.html#GKeyFileFlags" title="enum GKeyFileFlags"><span class="type">GKeyFileFlags</span></a></p></td>
930
+ <td class="parameter_annotations"> </td>
931
+ </tr>
932
+ <tr>
933
+ <td class="parameter_name"><p>error</p></td>
934
+ <td class="parameter_description"><p>return location for a <a class="link" href="glib-Error-Reporting.html#GError" title="struct GError"><span class="type">GError</span></a>, or <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a></p></td>
935
+ <td class="parameter_annotations"> </td>
936
+ </tr>
937
+ </tbody>
938
+ </table></div>
939
+ </div>
940
+ <div class="refsect3">
941
+ <a name="g-key-file-load-from-bytes.returns"></a><h4>Returns</h4>
942
+ <p> <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if a key file could be loaded, <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> otherwise</p>
943
+ </div>
944
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
945
+ </div>
946
+ <hr>
947
+ <div class="refsect2">
891
948
  <a name="g-key-file-load-from-data-dirs"></a><h3>g_key_file_load_from_data_dirs ()</h3>
892
949
  <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
893
950
  g_key_file_load_from_data_dirs (<em class="parameter"><code><a class="link" href="glib-Key-value-file-parser.html#GKeyFile" title="GKeyFile"><span class="type">GKeyFile</span></a> *key_file</code></em>,
@@ -214,8 +214,8 @@ be accessed either with a string or with a <a class="link" href="glib-Quarks.htm
214
214
  the string.</p>
215
215
  <p>The <a class="link" href="glib-Quarks.html#GQuark" title="GQuark"><span class="type">GQuark</span></a> methods are quicker, since the strings have to be
216
216
  converted to <a href="glib-Quarks.html#GQuark"><span class="type">GQuarks</span></a> anyway.</p>
217
- <p>Data lists are used for associating arbitrary data with <a href="../gobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObjects</span></a>,
218
- using <a href="../gobject-The-Base-Object-Type.html#g-object-set-data"><code class="function">g_object_set_data()</code></a> and related functions.</p>
217
+ <p>Data lists are used for associating arbitrary data with <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObjects</span></a>,
218
+ using <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-set-data"><code class="function">g_object_set_data()</code></a> and related functions.</p>
219
219
  <p>To create a datalist, use <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-init" title="g_datalist_init ()"><code class="function">g_datalist_init()</code></a>.</p>
220
220
  <p>To add data elements to a datalist use <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-set-data" title="g_datalist_id_set_data()"><code class="function">g_datalist_id_set_data()</code></a>,
221
221
  <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-id-set-data-full" title="g_datalist_id_set_data_full ()"><code class="function">g_datalist_id_set_data_full()</code></a>, <a class="link" href="glib-Keyed-Data-Lists.html#g-datalist-set-data" title="g_datalist_set_data()"><code class="function">g_datalist_set_data()</code></a> and
@@ -877,7 +877,7 @@ g_datalist_set_flags (<em class="parameter"><code><a class="link" href="glib-Key
877
877
  to keep a small number of boolean flags in an object with
878
878
  a data list without using any additional space. It is
879
879
  not generally useful except in circumstances where space
880
- is very tight. (It is used in the base <a href="../gobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> type, for
880
+ is very tight. (It is used in the base <a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#GObject-struct"><span class="type">GObject</span></a> type, for
881
881
  example.)</p>
882
882
  <div class="refsect3">
883
883
  <a name="g-datalist-set-flags.parameters"></a><h4>Parameters</h4>
@@ -1084,7 +1084,7 @@ the following example (which only works on GCC and clang):</p>
1084
1084
  <td class="listing_code"><pre class="programlisting">GObject <span class="gtkdoc opt">*</span>
1085
1085
  <span class="function">create_object</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">void</span><span class="gtkdoc opt">)</span>
1086
1086
  <span class="gtkdoc opt">{</span>
1087
- <span class="function"><a href="glib-Miscellaneous-Macros.html#g-autoptr">g_autoptr</a></span><span class="gtkdoc opt">(</span>GObject<span class="gtkdoc opt">)</span> obj <span class="gtkdoc opt">=</span> <span class="function"><a href="../gobject-The-Base-Object-Type.html#g-object-new">g_object_new</a></span> <span class="gtkdoc opt">(</span>G_TYPE_OBJECT<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
1087
+ <span class="function"><a href="glib-Miscellaneous-Macros.html#g-autoptr">g_autoptr</a></span><span class="gtkdoc opt">(</span>GObject<span class="gtkdoc opt">)</span> obj <span class="gtkdoc opt">=</span> <span class="function"><a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new">g_object_new</a></span> <span class="gtkdoc opt">(</span>G_TYPE_OBJECT<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
1088
1088
 
1089
1089
  <span class="keyword">if</span> <span class="gtkdoc opt">(</span>early_error_case<span class="gtkdoc opt">)</span>
1090
1090
  <span class="keyword">return</span> NULL<span class="gtkdoc opt">;</span>
@@ -1119,7 +1119,7 @@ particularly useful for dealing with optional out parameters:</p>
1119
1119
  <td class="listing_code"><pre class="programlisting">gboolean
1120
1120
  <span class="function">get_object</span> <span class="gtkdoc opt">(</span>GObject <span class="gtkdoc opt">**</span>obj_out<span class="gtkdoc opt">)</span>
1121
1121
  <span class="gtkdoc opt">{</span>
1122
- <span class="function"><a href="glib-Miscellaneous-Macros.html#g-autoptr">g_autoptr</a></span><span class="gtkdoc opt">(</span>GObject<span class="gtkdoc opt">)</span> obj <span class="gtkdoc opt">=</span> <span class="function"><a href="../gobject-The-Base-Object-Type.html#g-object-new">g_object_new</a></span> <span class="gtkdoc opt">(</span>G_TYPE_OBJECT<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
1122
+ <span class="function"><a href="glib-Miscellaneous-Macros.html#g-autoptr">g_autoptr</a></span><span class="gtkdoc opt">(</span>GObject<span class="gtkdoc opt">)</span> obj <span class="gtkdoc opt">=</span> <span class="function"><a href="https://developer.gnome.org/gobject/unstable/gobject-The-Base-Object-Type.html#g-object-new">g_object_new</a></span> <span class="gtkdoc opt">(</span>G_TYPE_OBJECT<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span>
1123
1123
 
1124
1124
  <span class="keyword">if</span> <span class="gtkdoc opt">(</span>early_error_case<span class="gtkdoc opt">)</span>
1125
1125
  <span class="keyword">return</span> FALSE<span class="gtkdoc opt">;</span>
@@ -2,11 +2,11 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
- <title>Message Logging: GLib Reference Manual</title>
5
+ <title>Message Output and Debugging Functions: GLib Reference Manual</title>
6
6
  <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7
7
  <link rel="home" href="index.html" title="GLib Reference Manual">
8
8
  <link rel="up" href="glib-core.html" title="GLib Core Application Support">
9
- <link rel="prev" href="glib-Warnings-and-Assertions.html" title="Message Output and Debugging Functions">
9
+ <link rel="prev" href="glib-Warnings-and-Assertions.html" title="Warnings and Assertions">
10
10
  <link rel="next" href="glib-utilities.html" title="GLib Utilities">
11
11
  <meta name="generator" content="GTK-Doc V1.25.1 (XML mode)">
12
12
  <link rel="stylesheet" href="style.css" type="text/css">
@@ -26,9 +26,8 @@
26
26
  <a name="glib-Message-Logging"></a><div class="titlepage"></div>
27
27
  <div class="refnamediv"><table width="100%"><tr>
28
28
  <td valign="top">
29
- <h2><span class="refentrytitle"><a name="glib-Message-Logging.top_of_page"></a>Message Logging</span></h2>
30
- <p>Message Loggingversatile support for logging messages
31
- with different levels of importance</p>
29
+ <h2><span class="refentrytitle"><a name="glib-Message-Logging.top_of_page"></a>Message Output and Debugging Functions</span></h2>
30
+ <p>Message Output and Debugging Functions functions to output messages and help debug applications</p>
32
31
  </td>
33
32
  <td class="gallery_image" valign="top" align="right"></td>
34
33
  </tr></table></div>
@@ -156,6 +155,98 @@
156
155
  <a class="link" href="glib-Message-Logging.html#g-log-set-default-handler" title="g_log_set_default_handler ()">g_log_set_default_handler</a> <span class="c_punctuation">()</span>
157
156
  </td>
158
157
  </tr>
158
+ <tr>
159
+ <td class="function_type">
160
+ <span class="returnvalue">void</span>
161
+ </td>
162
+ <td class="function_name">
163
+ <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()">g_log_structured</a> <span class="c_punctuation">()</span>
164
+ </td>
165
+ </tr>
166
+ <tr>
167
+ <td class="function_type">
168
+ <span class="returnvalue">void</span>
169
+ </td>
170
+ <td class="function_name">
171
+ <a class="link" href="glib-Message-Logging.html#g-log-variant" title="g_log_variant ()">g_log_variant</a> <span class="c_punctuation">()</span>
172
+ </td>
173
+ </tr>
174
+ <tr>
175
+ <td class="function_type">
176
+ <span class="returnvalue">void</span>
177
+ </td>
178
+ <td class="function_name">
179
+ <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()">g_log_structured_array</a> <span class="c_punctuation">()</span>
180
+ </td>
181
+ </tr>
182
+ <tr>
183
+ <td class="define_keyword">#define</td>
184
+ <td class="function_name"><a class="link" href="glib-Message-Logging.html#G-DEBUG-HERE:CAPS" title="G_DEBUG_HERE">G_DEBUG_HERE</a></td>
185
+ </tr>
186
+ <tr>
187
+ <td class="function_type">
188
+ <a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
189
+ </td>
190
+ <td class="function_name">
191
+ <span class="c_punctuation">(</span><a class="link" href="glib-Message-Logging.html#GLogWriterFunc" title="GLogWriterFunc ()">*GLogWriterFunc</a><span class="c_punctuation">)</span> <span class="c_punctuation">()</span>
192
+ </td>
193
+ </tr>
194
+ <tr>
195
+ <td class="function_type">
196
+ <span class="returnvalue">void</span>
197
+ </td>
198
+ <td class="function_name">
199
+ <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()">g_log_set_writer_func</a> <span class="c_punctuation">()</span>
200
+ </td>
201
+ </tr>
202
+ <tr>
203
+ <td class="function_type">
204
+ <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
205
+ </td>
206
+ <td class="function_name">
207
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-supports-color" title="g_log_writer_supports_color ()">g_log_writer_supports_color</a> <span class="c_punctuation">()</span>
208
+ </td>
209
+ </tr>
210
+ <tr>
211
+ <td class="function_type">
212
+ <a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
213
+ </td>
214
+ <td class="function_name">
215
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-is-journald" title="g_log_writer_is_journald ()">g_log_writer_is_journald</a> <span class="c_punctuation">()</span>
216
+ </td>
217
+ </tr>
218
+ <tr>
219
+ <td class="function_type">
220
+ <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="returnvalue">gchar</span></a> *
221
+ </td>
222
+ <td class="function_name">
223
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-format-fields" title="g_log_writer_format_fields ()">g_log_writer_format_fields</a> <span class="c_punctuation">()</span>
224
+ </td>
225
+ </tr>
226
+ <tr>
227
+ <td class="function_type">
228
+ <a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
229
+ </td>
230
+ <td class="function_name">
231
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-journald" title="g_log_writer_journald ()">g_log_writer_journald</a> <span class="c_punctuation">()</span>
232
+ </td>
233
+ </tr>
234
+ <tr>
235
+ <td class="function_type">
236
+ <a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
237
+ </td>
238
+ <td class="function_name">
239
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-standard-streams" title="g_log_writer_standard_streams ()">g_log_writer_standard_streams</a> <span class="c_punctuation">()</span>
240
+ </td>
241
+ </tr>
242
+ <tr>
243
+ <td class="function_type">
244
+ <a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
245
+ </td>
246
+ <td class="function_name">
247
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-default" title="g_log_writer_default ()">g_log_writer_default</a> <span class="c_punctuation">()</span>
248
+ </td>
249
+ </tr>
159
250
  </tbody>
160
251
  </table></div>
161
252
  </div>
@@ -183,6 +274,14 @@
183
274
  <td class="datatype_keyword">enum</td>
184
275
  <td class="function_name"><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags">GLogLevelFlags</a></td>
185
276
  </tr>
277
+ <tr>
278
+ <td class="datatype_keyword">struct</td>
279
+ <td class="function_name"><a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField">GLogField</a></td>
280
+ </tr>
281
+ <tr>
282
+ <td class="datatype_keyword">enum</td>
283
+ <td class="function_name"><a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput">GLogWriterOutput</a></td>
284
+ </tr>
186
285
  </tbody>
187
286
  </table></div>
188
287
  </div>
@@ -193,10 +292,132 @@
193
292
  </div>
194
293
  <div class="refsect1">
195
294
  <a name="glib-Message-Logging.description"></a><h2>Description</h2>
196
- <p>These functions provide support for logging error messages
197
- or messages used for debugging.</p>
198
- <p>There are several built-in levels of messages, defined in
199
- <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>. These can be extended with user-defined levels.</p>
295
+ <p>These functions provide support for outputting messages.</p>
296
+ <p>The g_return family of macros (<a class="link" href="glib-Warnings-and-Assertions.html#g-return-if-fail" title="g_return_if_fail()"><code class="function">g_return_if_fail()</code></a>,
297
+ <a class="link" href="glib-Warnings-and-Assertions.html#g-return-val-if-fail" title="g_return_val_if_fail()"><code class="function">g_return_val_if_fail()</code></a>, <a class="link" href="glib-Warnings-and-Assertions.html#g-return-if-reached" title="g_return_if_reached"><code class="function">g_return_if_reached()</code></a>,
298
+ <a class="link" href="glib-Warnings-and-Assertions.html#g-return-val-if-reached" title="g_return_val_if_reached()"><code class="function">g_return_val_if_reached()</code></a>) should only be used for programming
299
+ errors, a typical use case is checking for invalid parameters at
300
+ the beginning of a public function. They should not be used if
301
+ you just mean "if (error) return", they should only be used if
302
+ you mean "if (bug in program) return". The program behavior is
303
+ generally considered undefined after one of these checks fails.
304
+ They are not intended for normal control flow, only to give a
305
+ perhaps-helpful warning before giving up.</p>
306
+ <p>Structured logging output is supported using <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>. This differs
307
+ from the traditional <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a> API in that log messages are handled as a
308
+ collection of key–value pairs representing individual pieces of information,
309
+ rather than as a single string containing all the information in an arbitrary
310
+ format.</p>
311
+ <p>The convenience macros <a class="link" href="glib-Message-Logging.html#g-info" title="g_info()"><code class="function">g_info()</code></a>, <a class="link" href="glib-Message-Logging.html#g-message" title="g_message()"><code class="function">g_message()</code></a>, <a class="link" href="glib-Message-Logging.html#g-debug" title="g_debug()"><code class="function">g_debug()</code></a>, <a class="link" href="glib-Message-Logging.html#g-warning" title="g_warning()"><code class="function">g_warning()</code></a> and <a class="link" href="glib-Message-Logging.html#g-error" title="g_error()"><code class="function">g_error()</code></a>
312
+ will use the traditional <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a> API unless you define the symbol
313
+ <code class="literal">G_LOG_USE_STRUCTURED</code> before including <code class="literal">glib.h</code>. But note that even messages
314
+ logged through the traditional <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a> API are ultimatively passed to
315
+ <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>, so that all log messages end up in same destination.
316
+ If <code class="literal">G_LOG_USE_STRUCTURED</code> is defined, <a class="link" href="glib-Testing.html#g-test-expect-message" title="g_test_expect_message ()"><code class="function">g_test_expect_message()</code></a> will become
317
+ ineffective for the wrapper macros <a class="link" href="glib-Message-Logging.html#g-warning" title="g_warning()"><code class="function">g_warning()</code></a> and friends (see
318
+ Testing for Messages).</p>
319
+ <p>The support for structured logging was motivated by the following needs (some
320
+ of which were supported previously; others weren’t):</p>
321
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
322
+ <li class="listitem"><p>Support for multiple logging levels.</p></li>
323
+ <li class="listitem"><p>Structured log support with the ability to add <code class="literal">MESSAGE_ID</code>s (see
324
+ <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>).</p></li>
325
+ <li class="listitem"><p>Moving the responsibility for filtering log messages from the program to
326
+ the log viewer — instead of libraries and programs installing log handlers
327
+ (with <a class="link" href="glib-Message-Logging.html#g-log-set-handler" title="g_log_set_handler ()"><code class="function">g_log_set_handler()</code></a>) which filter messages before output, all log
328
+ messages are outputted, and the log viewer program (such as <code class="literal">journalctl</code>)
329
+ must filter them. This is based on the idea that bugs are sometimes hard
330
+ to reproduce, so it is better to log everything possible and then use
331
+ tools to analyse the logs than it is to not be able to reproduce a bug to
332
+ get additional log data. Code which uses logging in performance-critical
333
+ sections should compile out the <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> calls in
334
+ release builds, and compile them in in debugging builds.</p></li>
335
+ <li class="listitem"><p>A single writer function which handles all log messages in a process, from
336
+ all libraries and program code; rather than multiple log handlers with
337
+ poorly defined interactions between them. This allows a program to easily
338
+ change its logging policy by changing the writer function, for example to
339
+ log to an additional location or to change what logging output fallbacks
340
+ are used. The log writer functions provided by GLib are exposed publicly
341
+ so they can be used from programs’ log writers. This allows log writer
342
+ policy and implementation to be kept separate.</p></li>
343
+ <li class="listitem"><p>If a library wants to add standard information to all of its log messages
344
+ (such as library state) or to redact private data (such as passwords or
345
+ network credentials), it should use a wrapper function around its
346
+ <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> calls or implement that in the single log writer
347
+ function.</p></li>
348
+ <li class="listitem"><p>If a program wants to pass context data from a <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> call to
349
+ its log writer function so that, for example, it can use the correct
350
+ server connection to submit logs to, that user data can be passed as a
351
+ zero-length <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> to <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()"><code class="function">g_log_structured_array()</code></a>.</p></li>
352
+ <li class="listitem"><p>Color output needed to be supported on the terminal, to make reading
353
+ through logs easier.</p></li>
354
+ </ul></div>
355
+ <div class="refsect3">
356
+ <a name="id-1.4.12.6.8"></a><h4>Using Structured Logging</h4>
357
+ <p>To use structured logging (rather than the old-style logging), either use
358
+ the <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> and <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()"><code class="function">g_log_structured_array()</code></a> functions; or define
359
+ <code class="literal">G_LOG_USE_STRUCTURED</code> before including any GLib header, and use the
360
+ <a class="link" href="glib-Message-Logging.html#g-message" title="g_message()"><code class="function">g_message()</code></a>, <a class="link" href="glib-Message-Logging.html#g-debug" title="g_debug()"><code class="function">g_debug()</code></a>, <a class="link" href="glib-Message-Logging.html#g-error" title="g_error()"><code class="function">g_error()</code></a> (etc.) macros.</p>
361
+ <p>You do not need to define <code class="literal">G_LOG_USE_STRUCTURED</code> to use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>,
362
+ but it is a good idea to avoid confusion.</p>
363
+ </div>
364
+ <div class="refsect3">
365
+ <a name="id-1.4.12.6.9"></a><h4>Log Domains</h4>
366
+ <p>Log domains may be used to broadly split up the origins of log messages.
367
+ Typically, there are one or a few log domains per application or library.
368
+ <a class="link" href="glib-Message-Logging.html#G-LOG-DOMAIN:CAPS" title="G_LOG_DOMAIN"><code class="literal">G_LOG_DOMAIN</code></a> should be used to define the default log domain for the current
369
+ compilation unit — it is typically defined at the top of a source file, or in
370
+ the preprocessor flags for a group of source files.</p>
371
+ <p>Log domains must be unique, and it is recommended that they are the
372
+ application or library name, optionally followed by a hyphen and a sub-domain
373
+ name. For example, <code class="literal">bloatpad</code> or <code class="literal">bloatpad-io</code>.</p>
374
+ </div>
375
+ <div class="refsect3">
376
+ <a name="id-1.4.12.6.10"></a><h4>Debug Message Output</h4>
377
+ <p>The default log functions (<a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> for the old-style API and
378
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-default" title="g_log_writer_default ()"><code class="function">g_log_writer_default()</code></a> for the structured API) both drop debug and
379
+ informational messages by default, unless the log domains of those messages
380
+ are listed in the <code class="literal">G_MESSAGES_DEBUG</code> environment variable (or it is set to
381
+ <code class="literal">all</code>).</p>
382
+ <p>It is recommended that custom log writer functions re-use the
383
+ <code class="literal">G_MESSAGES_DEBUG</code> environment variable, rather than inventing a custom one,
384
+ so that developers can re-use the same debugging techniques and tools across
385
+ projects.</p>
386
+ </div>
387
+ <div class="refsect3">
388
+ <a name="id-1.4.12.6.11"></a><h4>Testing for Messages</h4>
389
+ <p>With the old <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a> API, <a class="link" href="glib-Testing.html#g-test-expect-message" title="g_test_expect_message ()"><code class="function">g_test_expect_message()</code></a> and
390
+ <a class="link" href="glib-Testing.html#g-test-assert-expected-messages" title="g_test_assert_expected_messages"><code class="function">g_test_assert_expected_messages()</code></a> could be used in simple cases to check
391
+ whether some code under test had emitted a given log message. These
392
+ functions have been deprecated with the structured logging API, for several
393
+ reasons:</p>
394
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
395
+ <li class="listitem"><p>They relied on an internal queue which was too inflexible for many use
396
+ cases, where messages might be emitted in several orders, some
397
+ messages might not be emitted deterministically, or messages might be
398
+ emitted by unrelated log domains.</p></li>
399
+ <li class="listitem"><p>They do not support structured log fields.</p></li>
400
+ <li class="listitem"><p>Examining the log output of code is a bad approach to testing it, and
401
+ while it might be necessary for legacy code which uses <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>, it should
402
+ be avoided for new code using <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>.</p></li>
403
+ </ul></div>
404
+ <p>They will continue to work as before if <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a> is in use (and
405
+ <code class="literal">G_LOG_USE_STRUCTURED</code> is not defined). They will do nothing if used with the
406
+ structured logging API.</p>
407
+ <p>Examining the log output of code is discouraged: libraries should not emit to
408
+ <code class="literal">stderr</code> during defined behaviour, and hence this should not be tested. If
409
+ the log emissions of a library during undefined behaviour need to be tested,
410
+ they should be limited to asserting that the library aborts and prints a
411
+ suitable error message before aborting. This should be done with
412
+ <a class="link" href="glib-Testing.html#g-test-trap-assert-stderr" title="g_test_trap_assert_stderr()"><code class="function">g_test_trap_assert_stderr()</code></a>.</p>
413
+ <p>If it is really necessary to test the structured log messages emitted by a
414
+ particular piece of code – and the code cannot be restructured to be more
415
+ suitable to more conventional unit testing – you should write a custom log
416
+ writer function (see <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>) which appends all log messages
417
+ to a queue. When you want to check the log messages, examine and clear the
418
+ queue, ignoring irrelevant log messages (for example, from log domains other
419
+ than the one under test).</p>
420
+ </div>
200
421
  </div>
201
422
  <div class="refsect1">
202
423
  <a name="glib-Message-Logging.functions_details"></a><h2>Functions</h2>
@@ -214,6 +435,8 @@ new-line character to <em class="parameter"><code>message</code></em>
214
435
  custom log handler functions behave similarly, so that logging calls in user
215
436
  code do not need modifying to add a new-line character to the message if the
216
437
  log handler is changed.</p>
438
+ <p>This is not used if structured logging is enabled; see
439
+ Using Structured Logging.</p>
217
440
  <div class="refsect3">
218
441
  <a name="GLogFunc.parameters"></a><h4>Parameters</h4>
219
442
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -262,6 +485,8 @@ function is called to terminate the program.</p>
262
485
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
263
486
  character will automatically be appended to @..., and need not be entered
264
487
  manually.</p>
488
+ <p>If structured logging is enabled this will
489
+ output via the structured log writer function (see <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>).</p>
265
490
  <div class="refsect3">
266
491
  <a name="g-log.parameters"></a><h4>Parameters</h4>
267
492
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -311,6 +536,8 @@ function is called to terminate the program.</p>
311
536
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
312
537
  character will automatically be appended to @..., and need not be entered
313
538
  manually.</p>
539
+ <p>If structured logging is enabled this will
540
+ output via the structured log writer function (see <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>).</p>
314
541
  <div class="refsect3">
315
542
  <a name="g-logv.parameters"></a><h4>Parameters</h4>
316
543
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -353,6 +580,9 @@ application domain. </p></td>
353
580
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
354
581
  character will automatically be appended to @..., and need not be entered
355
582
  manually.</p>
583
+ <p>If structured logging is enabled, this will use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>;
584
+ otherwise it will use <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>. See
585
+ Using Structured Logging.</p>
356
586
  <div class="refsect3">
357
587
  <a name="g-message.parameters"></a><h4>Parameters</h4>
358
588
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -384,6 +614,9 @@ environment variable (see
384
614
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function,
385
615
  a newline character will automatically be appended to @..., and
386
616
  need not be entered manually.</p>
617
+ <p>If structured logging is enabled, this will use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>;
618
+ otherwise it will use <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>. See
619
+ Using Structured Logging.</p>
387
620
  <div class="refsect3">
388
621
  <a name="g-warning.parameters"></a><h4>Parameters</h4>
389
622
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -417,6 +650,9 @@ setting the <code class="literal">G_DEBUG</code> environment variable (see
417
650
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
418
651
  character will automatically be appended to @..., and need not be entered
419
652
  manually.</p>
653
+ <p>If structured logging is enabled, this will use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>;
654
+ otherwise it will use <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>. See
655
+ Using Structured Logging.</p>
420
656
  <div class="refsect3">
421
657
  <a name="g-critical.parameters"></a><h4>Parameters</h4>
422
658
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -450,6 +686,9 @@ an assertion failure.</p>
450
686
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
451
687
  character will automatically be appended to @..., and need not be entered
452
688
  manually.</p>
689
+ <p>If structured logging is enabled, this will use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>;
690
+ otherwise it will use <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>. See
691
+ Using Structured Logging.</p>
453
692
  <div class="refsect3">
454
693
  <a name="g-error.parameters"></a><h4>Parameters</h4>
455
694
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -475,8 +714,12 @@ into the format string (as with <code class="function">printf()</code>)</p></td>
475
714
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
476
715
  character will automatically be appended to @..., and need not be entered
477
716
  manually.</p>
478
- <p>Such messages are suppressed by the <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> unless
479
- the G_MESSAGES_DEBUG environment variable is set appropriately.</p>
717
+ <p>Such messages are suppressed by the <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> and
718
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-default" title="g_log_writer_default ()"><code class="function">g_log_writer_default()</code></a> unless the <code class="literal">G_MESSAGES_DEBUG</code> environment variable is
719
+ set appropriately.</p>
720
+ <p>If structured logging is enabled, this will use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>;
721
+ otherwise it will use <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>. See
722
+ Using Structured Logging.</p>
480
723
  <div class="refsect3">
481
724
  <a name="g-info.parameters"></a><h4>Parameters</h4>
482
725
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -503,8 +746,12 @@ into the format string (as with <code class="function">printf()</code>)</p></td>
503
746
  <p>If <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> is used as the log handler function, a new-line
504
747
  character will automatically be appended to @..., and need not be entered
505
748
  manually.</p>
506
- <p>Such messages are suppressed by the <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> unless
507
- the G_MESSAGES_DEBUG environment variable is set appropriately.</p>
749
+ <p>Such messages are suppressed by the <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> and
750
+ <a class="link" href="glib-Message-Logging.html#g-log-writer-default" title="g_log_writer_default ()"><code class="function">g_log_writer_default()</code></a> unless the <code class="literal">G_MESSAGES_DEBUG</code> environment variable is
751
+ set appropriately.</p>
752
+ <p>If structured logging is enabled, this will use <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>;
753
+ otherwise it will use <a class="link" href="glib-Message-Logging.html#g-log" title="g_log ()"><code class="function">g_log()</code></a>. See
754
+ Using Structured Logging.</p>
508
755
  <div class="refsect3">
509
756
  <a name="g-debug.parameters"></a><h4>Parameters</h4>
510
757
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -539,6 +786,8 @@ bit flags.</p>
539
786
  <p>Note that since the <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-ERROR:CAPS"><span class="type">G_LOG_LEVEL_ERROR</span></a> log level is always fatal, if
540
787
  you want to set a handler for this log level you must combine it with
541
788
  <a class="link" href="glib-Message-Logging.html#G-LOG-FLAG-FATAL:CAPS"><span class="type">G_LOG_FLAG_FATAL</span></a>.</p>
789
+ <p>This has no effect if structured logging is enabled; see
790
+ Using Structured Logging.</p>
542
791
  <p>Here is an example for adding a log handler for all warning messages
543
792
  in the default domain:</p>
544
793
  <div class="informalexample">
@@ -637,6 +886,8 @@ g_log_set_handler_full (<em class="parameter"><code>const <a class="link" href="
637
886
  <em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> destroy</code></em>);</pre>
638
887
  <p>Like <code class="function">g_log_sets_handler()</code>, but takes a destroy notify for the <em class="parameter"><code>user_data</code></em>
639
888
  .</p>
889
+ <p>This has no effect if structured logging is enabled; see
890
+ Using Structured Logging.</p>
640
891
  <p><span class="annotation">[<acronym title="Rename the original symbol's name to SYMBOL."><span class="acronym">rename-to</span></acronym> g_log_set_handler]</span></p>
641
892
  <div class="refsect3">
642
893
  <a name="g-log-set-handler-full.parameters"></a><h4>Parameters</h4>
@@ -693,6 +944,8 @@ the log levels with the <a class="link" href="glib-Message-Logging.html#G-LOG-FL
693
944
  g_log_remove_handler (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *log_domain</code></em>,
694
945
  <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#guint" title="guint ()"><span class="type">guint</span></a> handler_id</code></em>);</pre>
695
946
  <p>Removes the log handler.</p>
947
+ <p>This has no effect if structured logging is enabled; see
948
+ Using Structured Logging.</p>
696
949
  <div class="refsect3">
697
950
  <a name="g-log-remove-handler.parameters"></a><h4>Parameters</h4>
698
951
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -729,6 +982,12 @@ You can only set the levels defined by GLib to be fatal.
729
982
  <p>You can also make some message levels fatal at runtime by setting
730
983
  the <code class="literal">G_DEBUG</code> environment variable (see
731
984
  <a class="ulink" href="glib-running.html" target="_top">Running GLib Applications</a>).</p>
985
+ <p>Libraries should not call this function, as it affects all messages logged
986
+ by a process, including those from other libraries.</p>
987
+ <p>Structured log messages (using <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> and
988
+ <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()"><code class="function">g_log_structured_array()</code></a>) are fatal only if the default log writer is used;
989
+ otherwise it is up to the writer function to determine which log messages
990
+ are fatal. See Using Structured Logging.</p>
732
991
  <div class="refsect3">
733
992
  <a name="g-log-set-always-fatal.parameters"></a><h4>Parameters</h4>
734
993
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -758,6 +1017,11 @@ g_log_set_fatal_mask (<em class="parameter"><code>const <a class="link" href="gl
758
1017
  <em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> fatal_mask</code></em>);</pre>
759
1018
  <p>Sets the log levels which are fatal in the given domain.
760
1019
  <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-ERROR:CAPS"><code class="literal">G_LOG_LEVEL_ERROR</code></a> is always fatal.</p>
1020
+ <p>This has no effect on structured log messages (using <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> or
1021
+ <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()"><code class="function">g_log_structured_array()</code></a>). To change the fatal behaviour for specific log
1022
+ messages, programs must install a custom log writer function using
1023
+ <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>. See
1024
+ Using Structured Logging.</p>
761
1025
  <div class="refsect3">
762
1026
  <a name="g-log-set-fatal-mask.parameters"></a><h4>Parameters</h4>
763
1027
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -814,6 +1078,8 @@ these messages are not printed.</p></li>
814
1078
  <p>stderr is used for levels <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-ERROR:CAPS"><code class="literal">G_LOG_LEVEL_ERROR</code></a>, <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-CRITICAL:CAPS"><code class="literal">G_LOG_LEVEL_CRITICAL</code></a>,
815
1079
  <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-WARNING:CAPS"><code class="literal">G_LOG_LEVEL_WARNING</code></a> and <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-MESSAGE:CAPS"><code class="literal">G_LOG_LEVEL_MESSAGE</code></a>. stdout is used for
816
1080
  the rest.</p>
1081
+ <p>This has no effect if structured logging is enabled; see
1082
+ Using Structured Logging.</p>
817
1083
  <div class="refsect3">
818
1084
  <a name="g-log-default-handler.parameters"></a><h4>Parameters</h4>
819
1085
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -858,6 +1124,8 @@ g_log_set_default_handler (<em class="parameter"><code><a class="link" href="gli
858
1124
  log handler has been set for the particular log domain
859
1125
  and log level combination. By default, GLib uses
860
1126
  <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a> as default log handler.</p>
1127
+ <p>This has no effect if structured logging is enabled; see
1128
+ Using Structured Logging.</p>
861
1129
  <div class="refsect3">
862
1130
  <a name="g-log-set-default-handler.parameters"></a><h4>Parameters</h4>
863
1131
  <div class="informaltable"><table class="informaltable" width="100%" border="0">
@@ -886,6 +1154,650 @@ and log level combination. By default, GLib uses
886
1154
  </div>
887
1155
  <p class="since">Since: <a class="link" href="api-index-2-6.html#api-index-2.6">2.6</a></p>
888
1156
  </div>
1157
+ <hr>
1158
+ <div class="refsect2">
1159
+ <a name="g-log-structured"></a><h3>g_log_structured ()</h3>
1160
+ <pre class="programlisting"><span class="returnvalue">void</span>
1161
+ g_log_structured (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *log_domain</code></em>,
1162
+ <em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1163
+ <em class="parameter"><code>...</code></em>);</pre>
1164
+ <p>Log a message with structured data. The message will be passed through to
1165
+ the log writer set by the application using <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>. If the
1166
+ message is fatal (i.e. its log level is <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-ERROR:CAPS"><code class="literal">G_LOG_LEVEL_ERROR</code></a>), the program will
1167
+ be aborted at the end of this function.</p>
1168
+ <p>The structured data is provided as key–value pairs, where keys are UTF-8
1169
+ strings, and values are arbitrary pointers — typically pointing to UTF-8
1170
+ strings, but that is not a requirement. To pass binary (non-nul-terminated)
1171
+ structured data, use <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()"><code class="function">g_log_structured_array()</code></a>. The keys for structured data
1172
+ should follow the <a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html" target="_top">systemd journal
1173
+ fields</a>
1174
+ specification. It is suggested that custom keys are namespaced according to
1175
+ the code which sets them. For example, custom keys from GLib all have a
1176
+ <code class="literal">GLIB_</code> prefix.</p>
1177
+ <p>The <em class="parameter"><code>log_domain</code></em>
1178
+ will be converted into a <code class="literal">GLIB_DOMAIN</code> field. <em class="parameter"><code>log_level</code></em>
1179
+ will
1180
+ be converted into a
1181
+ <a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#PRIORITY=" target="_top"><code class="literal">PRIORITY</code></a>
1182
+ field. The format string will have its placeholders substituted for the provided
1183
+ values and be converted into a
1184
+ <a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#MESSAGE=" target="_top"><code class="literal">MESSAGE</code></a>
1185
+ field.</p>
1186
+ <p>Other fields you may commonly want to pass into this function:</p>
1187
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1188
+ <li class="listitem"><p><a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#MESSAGE_ID=" target="_top"><code class="literal">MESSAGE_ID</code></a></p></li>
1189
+ <li class="listitem"><p><a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#CODE_FILE=" target="_top"><code class="literal">CODE_FILE</code></a></p></li>
1190
+ <li class="listitem"><p><a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#CODE_LINE=" target="_top"><code class="literal">CODE_LINE</code></a></p></li>
1191
+ <li class="listitem"><p><a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#CODE_FUNC=" target="_top"><code class="literal">CODE_FUNC</code></a></p></li>
1192
+ <li class="listitem"><p><a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#ERRNO=" target="_top"><code class="literal">ERRNO</code></a></p></li>
1193
+ </ul></div>
1194
+ <p>Note that <code class="literal">CODE_FILE</code>, <code class="literal">CODE_LINE</code> and <code class="literal">CODE_FUNC</code> are automatically set by
1195
+ the logging macros, <a class="link" href="glib-Message-Logging.html#G-DEBUG-HERE:CAPS" title="G_DEBUG_HERE"><code class="function">G_DEBUG_HERE()</code></a>, <a class="link" href="glib-Message-Logging.html#g-message" title="g_message()"><code class="function">g_message()</code></a>, <a class="link" href="glib-Message-Logging.html#g-warning" title="g_warning()"><code class="function">g_warning()</code></a>, <a class="link" href="glib-Message-Logging.html#g-critical" title="g_critical()"><code class="function">g_critical()</code></a>,
1196
+ <a class="link" href="glib-Message-Logging.html#g-error" title="g_error()"><code class="function">g_error()</code></a>, etc, if the symbols <code class="literal">G_LOG_USE_STRUCTURED</code> is defined before including
1197
+ glib.h.</p>
1198
+ <p>For example:</p>
1199
+ <div class="informalexample">
1200
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1201
+ <tbody>
1202
+ <tr>
1203
+ <td class="listing_lines" align="right"><pre>1
1204
+ 2
1205
+ 3
1206
+ 4
1207
+ 5</pre></td>
1208
+ <td class="listing_code"><pre class="programlisting"><span class="function"><a href="glib-Message-Logging.html#g-log-structured">g_log_structured</a></span> <span class="gtkdoc opt">(</span>G_LOG_DOMAIN<span class="gtkdoc opt">,</span> G_LOG_LEVEL_DEBUG<span class="gtkdoc opt">,</span>
1209
+ <span class="string">&quot;MESSAGE_ID&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;06d4df59e6c24647bfe69d2c27ef0b4e&quot;</span><span class="gtkdoc opt">,</span>
1210
+ <span class="string">&quot;MY_APPLICATION_CUSTOM_FIELD&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;some debug string&quot;</span><span class="gtkdoc opt">,</span>
1211
+ <span class="string">&quot;MESSAGE&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;This is a debug message about pointer %p and integer %u.&quot;</span><span class="gtkdoc opt">,</span>
1212
+ some_pointer<span class="gtkdoc opt">,</span> some_integer<span class="gtkdoc opt">);</span></pre></td>
1213
+ </tr>
1214
+ </tbody>
1215
+ </table>
1216
+ </div>
1217
+
1218
+ <p></p>
1219
+ <p>Note that each <code class="literal">MESSAGE_ID</code> must be <a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html#MESSAGE_ID=" target="_top">uniquely and randomly
1220
+ generated</a>.
1221
+ If adding a <code class="literal">MESSAGE_ID</code>, consider shipping a <a class="ulink" href="https://www.freedesktop.org/wiki/Software/systemd/catalog/" target="_top">message
1222
+ catalog</a> with
1223
+ your software.</p>
1224
+ <p>To pass a user data pointer to the log writer function which is specific to
1225
+ this logging call, you must use <a class="link" href="glib-Message-Logging.html#g-log-structured-array" title="g_log_structured_array ()"><code class="function">g_log_structured_array()</code></a> and pass the pointer
1226
+ as a field with <a class="link" href="glib-Message-Logging.html#GLogField.length"><span class="type">GLogField.length</span></a> set to zero, otherwise it will be
1227
+ interpreted as a string.</p>
1228
+ <p>For example:</p>
1229
+ <div class="informalexample">
1230
+ <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1231
+ <tbody>
1232
+ <tr>
1233
+ <td class="listing_lines" align="right"><pre>1
1234
+ 2
1235
+ 3
1236
+ 4
1237
+ 5
1238
+ 6
1239
+ 7</pre></td>
1240
+ <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">const</span> GLogField fields<span class="gtkdoc opt">[] = {</span>
1241
+ <span class="gtkdoc opt">{</span> <span class="string">&quot;MESSAGE&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;This is a debug message.&quot;</span><span class="gtkdoc opt">, -</span><span class="number">1</span> <span class="gtkdoc opt">},</span>
1242
+ <span class="gtkdoc opt">{</span> <span class="string">&quot;MESSAGE_ID&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;fcfb2e1e65c3494386b74878f1abf893&quot;</span><span class="gtkdoc opt">, -</span><span class="number">1</span> <span class="gtkdoc opt">},</span>
1243
+ <span class="gtkdoc opt">{</span> <span class="string">&quot;MY_APPLICATION_CUSTOM_FIELD&quot;</span><span class="gtkdoc opt">,</span> <span class="string">&quot;some debug string&quot;</span><span class="gtkdoc opt">, -</span><span class="number">1</span> <span class="gtkdoc opt">},</span>
1244
+ <span class="gtkdoc opt">{</span> <span class="string">&quot;MY_APPLICATION_STATE&quot;</span><span class="gtkdoc opt">,</span> state_object<span class="gtkdoc opt">,</span> <span class="number">0</span> <span class="gtkdoc opt">},</span>
1245
+ <span class="gtkdoc opt">};</span>
1246
+ <span class="function"><a href="glib-Message-Logging.html#g-log-structured-array">g_log_structured_array</a></span> <span class="gtkdoc opt">(</span>G_LOG_LEVEL_DEBUG<span class="gtkdoc opt">,</span> fields<span class="gtkdoc opt">,</span> <span class="function"><a href="glib-Standard-Macros.html#G-N-ELEMENTS:CAPS">G_N_ELEMENTS</a></span> <span class="gtkdoc opt">(</span>fields<span class="gtkdoc opt">));</span></pre></td>
1247
+ </tr>
1248
+ </tbody>
1249
+ </table>
1250
+ </div>
1251
+
1252
+ <p></p>
1253
+ <p>Note also that, even if no other structured fields are specified, there
1254
+ must always be a "MESSAGE" key before the format string. The "MESSAGE"-format
1255
+ pair has to be the last of the key-value pairs, and "MESSAGE" is the only
1256
+ field for which <code class="function">printf()</code>-style formatting is supported.</p>
1257
+ <p>The default writer function for <code class="literal">stdout</code> and <code class="literal">stderr</code> will automatically
1258
+ append a new-line character after the message, so you should not add one
1259
+ manually to the format string.</p>
1260
+ <div class="refsect3">
1261
+ <a name="g-log-structured.parameters"></a><h4>Parameters</h4>
1262
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1263
+ <colgroup>
1264
+ <col width="150px" class="parameters_name">
1265
+ <col class="parameters_description">
1266
+ <col width="200px" class="parameters_annotations">
1267
+ </colgroup>
1268
+ <tbody>
1269
+ <tr>
1270
+ <td class="parameter_name"><p>log_domain</p></td>
1271
+ <td class="parameter_description"><p>log domain, usually <a class="link" href="glib-Message-Logging.html#G-LOG-DOMAIN:CAPS" title="G_LOG_DOMAIN"><code class="literal">G_LOG_DOMAIN</code></a></p></td>
1272
+ <td class="parameter_annotations"> </td>
1273
+ </tr>
1274
+ <tr>
1275
+ <td class="parameter_name"><p>log_level</p></td>
1276
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1277
+ level</p></td>
1278
+ <td class="parameter_annotations"> </td>
1279
+ </tr>
1280
+ <tr>
1281
+ <td class="parameter_name"><p>...</p></td>
1282
+ <td class="parameter_description"><p>key-value pairs of structured data to add to the log entry, followed
1283
+ by the key "MESSAGE", followed by a <code class="function">printf()</code>-style message format,
1284
+ followed by parameters to insert in the format string</p></td>
1285
+ <td class="parameter_annotations"> </td>
1286
+ </tr>
1287
+ </tbody>
1288
+ </table></div>
1289
+ </div>
1290
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1291
+ </div>
1292
+ <hr>
1293
+ <div class="refsect2">
1294
+ <a name="g-log-variant"></a><h3>g_log_variant ()</h3>
1295
+ <pre class="programlisting"><span class="returnvalue">void</span>
1296
+ g_log_variant (<em class="parameter"><code>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *log_domain</code></em>,
1297
+ <em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1298
+ <em class="parameter"><code><a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a> *fields</code></em>);</pre>
1299
+ <p>Log a message with structured data, accepting the data within a <a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a>. This
1300
+ version is especially useful for use in other languages, via introspection.</p>
1301
+ <p>The only mandatory item in the <em class="parameter"><code>fields</code></em>
1302
+ dictionary is the "MESSAGE" which must
1303
+ contain the text shown to the user.</p>
1304
+ <p>The values in the <em class="parameter"><code>fields</code></em>
1305
+ dictionary are likely to be of type String
1306
+ (<a class="link" href="glib-GVariantType.html#G-VARIANT-TYPE-STRING:CAPS" title="G_VARIANT_TYPE_STRING"><span class="type">G_VARIANT_TYPE_STRING</span></a>). Array of bytes (<a class="link" href="glib-GVariantType.html#G-VARIANT-TYPE-BYTESTRING:CAPS" title="G_VARIANT_TYPE_BYTESTRING"><span class="type">G_VARIANT_TYPE_BYTESTRING</span></a>) is also
1307
+ supported. In this case the message is handled as binary and will be forwarded
1308
+ to the log writer as such. The size of the array should not be higher than
1309
+ <a class="link" href="glib-Basic-Types.html#G-MAXSSIZE:CAPS" title="G_MAXSSIZE"><code class="literal">G_MAXSSIZE</code></a>. Otherwise it will be truncated to this size. For other types
1310
+ <a class="link" href="glib-GVariant.html#g-variant-print" title="g_variant_print ()"><code class="function">g_variant_print()</code></a> will be used to convert the value into a string.</p>
1311
+ <p>For more details on its usage and about the parameters, see <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>.</p>
1312
+ <div class="refsect3">
1313
+ <a name="g-log-variant.parameters"></a><h4>Parameters</h4>
1314
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1315
+ <colgroup>
1316
+ <col width="150px" class="parameters_name">
1317
+ <col class="parameters_description">
1318
+ <col width="200px" class="parameters_annotations">
1319
+ </colgroup>
1320
+ <tbody>
1321
+ <tr>
1322
+ <td class="parameter_name"><p>log_domain</p></td>
1323
+ <td class="parameter_description"><p> log domain, usually <a class="link" href="glib-Message-Logging.html#G-LOG-DOMAIN:CAPS" title="G_LOG_DOMAIN"><code class="literal">G_LOG_DOMAIN</code></a>. </p></td>
1324
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="NULL is OK, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span></td>
1325
+ </tr>
1326
+ <tr>
1327
+ <td class="parameter_name"><p>log_level</p></td>
1328
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1329
+ level</p></td>
1330
+ <td class="parameter_annotations"> </td>
1331
+ </tr>
1332
+ <tr>
1333
+ <td class="parameter_name"><p>fields</p></td>
1334
+ <td class="parameter_description"><p>a dictionary (<a class="link" href="glib-GVariant.html#GVariant" title="GVariant"><span class="type">GVariant</span></a> of the type <a class="link" href="glib-GVariantType.html#G-VARIANT-TYPE-VARDICT:CAPS" title="G_VARIANT_TYPE_VARDICT"><code class="literal">G_VARIANT_TYPE_VARDICT</code></a>)
1335
+ containing the key-value pairs of message data.</p></td>
1336
+ <td class="parameter_annotations"> </td>
1337
+ </tr>
1338
+ </tbody>
1339
+ </table></div>
1340
+ </div>
1341
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1342
+ </div>
1343
+ <hr>
1344
+ <div class="refsect2">
1345
+ <a name="g-log-structured-array"></a><h3>g_log_structured_array ()</h3>
1346
+ <pre class="programlisting"><span class="returnvalue">void</span>
1347
+ g_log_structured_array (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1348
+ <em class="parameter"><code>const <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> *fields</code></em>,
1349
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> n_fields</code></em>);</pre>
1350
+ <p>Log a message with structured data. The message will be passed through to the
1351
+ log writer set by the application using <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>. If the
1352
+ message is fatal (i.e. its log level is <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-ERROR:CAPS"><code class="literal">G_LOG_LEVEL_ERROR</code></a>), the program will
1353
+ be aborted at the end of this function.</p>
1354
+ <p>See <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> for more documentation.</p>
1355
+ <p>This assumes that <em class="parameter"><code>log_level</code></em>
1356
+ is already present in <em class="parameter"><code>fields</code></em>
1357
+ (typically as the
1358
+ <code class="literal">PRIORITY</code> field).</p>
1359
+ <div class="refsect3">
1360
+ <a name="g-log-structured-array.parameters"></a><h4>Parameters</h4>
1361
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1362
+ <colgroup>
1363
+ <col width="150px" class="parameters_name">
1364
+ <col class="parameters_description">
1365
+ <col width="200px" class="parameters_annotations">
1366
+ </colgroup>
1367
+ <tbody>
1368
+ <tr>
1369
+ <td class="parameter_name"><p>log_level</p></td>
1370
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1371
+ level</p></td>
1372
+ <td class="parameter_annotations"> </td>
1373
+ </tr>
1374
+ <tr>
1375
+ <td class="parameter_name"><p>fields</p></td>
1376
+ <td class="parameter_description"><p> key–value pairs of structured data to add
1377
+ to the log message. </p></td>
1378
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_fields]</span></td>
1379
+ </tr>
1380
+ <tr>
1381
+ <td class="parameter_name"><p>n_fields</p></td>
1382
+ <td class="parameter_description"><p>number of elements in the <em class="parameter"><code>fields</code></em>
1383
+ array</p></td>
1384
+ <td class="parameter_annotations"> </td>
1385
+ </tr>
1386
+ </tbody>
1387
+ </table></div>
1388
+ </div>
1389
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1390
+ </div>
1391
+ <hr>
1392
+ <div class="refsect2">
1393
+ <a name="G-DEBUG-HERE:CAPS"></a><h3>G_DEBUG_HERE</h3>
1394
+ <pre class="programlisting">#define G_DEBUG_HERE()</pre>
1395
+ <p>A convenience form of <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>, recommended to be added to
1396
+ functions when debugging. It prints the current monotonic time and the code
1397
+ location using <a class="link" href="glib-Miscellaneous-Macros.html#G-STRLOC:CAPS" title="G_STRLOC"><code class="literal">G_STRLOC</code></a>.</p>
1398
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1399
+ </div>
1400
+ <hr>
1401
+ <div class="refsect2">
1402
+ <a name="GLogWriterFunc"></a><h3>GLogWriterFunc ()</h3>
1403
+ <pre class="programlisting"><a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
1404
+ <span class="c_punctuation">(</span>*GLogWriterFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1405
+ <em class="parameter"><code>const <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> *fields</code></em>,
1406
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> n_fields</code></em>,
1407
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
1408
+ <p>Writer function for log entries. A log entry is a collection of one or more
1409
+ <a href="glib-Message-Logging.html#GLogField"><span class="type">GLogFields</span></a>, using the standard <a class="ulink" href="https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html" target="_top">field names from journal
1410
+ specification</a>.
1411
+ See <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> for more information.</p>
1412
+ <p>Writer functions must ignore fields which they do not recognise, unless they
1413
+ can write arbitrary binary output, as field values may be arbitrary binary.</p>
1414
+ <p><em class="parameter"><code>log_level</code></em>
1415
+ is guaranteed to be included in <em class="parameter"><code>fields</code></em>
1416
+ as the <code class="literal">PRIORITY</code> field,
1417
+ but is provided separately for convenience of deciding whether or where to
1418
+ output the log entry.</p>
1419
+ <div class="refsect3">
1420
+ <a name="GLogWriterFunc.parameters"></a><h4>Parameters</h4>
1421
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1422
+ <colgroup>
1423
+ <col width="150px" class="parameters_name">
1424
+ <col class="parameters_description">
1425
+ <col width="200px" class="parameters_annotations">
1426
+ </colgroup>
1427
+ <tbody>
1428
+ <tr>
1429
+ <td class="parameter_name"><p>log_level</p></td>
1430
+ <td class="parameter_description"><p>log level of the message</p></td>
1431
+ <td class="parameter_annotations"> </td>
1432
+ </tr>
1433
+ <tr>
1434
+ <td class="parameter_name"><p>fields</p></td>
1435
+ <td class="parameter_description"><p> fields forming the message. </p></td>
1436
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_fields]</span></td>
1437
+ </tr>
1438
+ <tr>
1439
+ <td class="parameter_name"><p>n_fields</p></td>
1440
+ <td class="parameter_description"><p>number of <em class="parameter"><code>fields</code></em>
1441
+ </p></td>
1442
+ <td class="parameter_annotations"> </td>
1443
+ </tr>
1444
+ <tr>
1445
+ <td class="parameter_name"><p>user_data</p></td>
1446
+ <td class="parameter_description"><p>user data passed to <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a></p></td>
1447
+ <td class="parameter_annotations"> </td>
1448
+ </tr>
1449
+ </tbody>
1450
+ </table></div>
1451
+ </div>
1452
+ <div class="refsect3">
1453
+ <a name="GLogWriterFunc.returns"></a><h4>Returns</h4>
1454
+ <p> <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-HANDLED:CAPS"><code class="literal">G_LOG_WRITER_HANDLED</code></a> if the log entry was handled successfully;
1455
+ <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-UNHANDLED:CAPS"><code class="literal">G_LOG_WRITER_UNHANDLED</code></a> otherwise</p>
1456
+ </div>
1457
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1458
+ </div>
1459
+ <hr>
1460
+ <div class="refsect2">
1461
+ <a name="g-log-set-writer-func"></a><h3>g_log_set_writer_func ()</h3>
1462
+ <pre class="programlisting"><span class="returnvalue">void</span>
1463
+ g_log_set_writer_func (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogWriterFunc" title="GLogWriterFunc ()"><span class="type">GLogWriterFunc</span></a> func</code></em>,
1464
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
1465
+ <em class="parameter"><code><a class="link" href="glib-Datasets.html#GDestroyNotify" title="GDestroyNotify ()"><span class="type">GDestroyNotify</span></a> user_data_free</code></em>);</pre>
1466
+ <p>Set a writer function which will be called to format and write out each log
1467
+ message. Each program should set a writer function, or the default writer
1468
+ (<a class="link" href="glib-Message-Logging.html#g-log-writer-default" title="g_log_writer_default ()"><code class="function">g_log_writer_default()</code></a>) will be used.</p>
1469
+ <p>Libraries **must not** call this function — only programs are allowed to
1470
+ install a writer function, as there must be a single, central point where
1471
+ log messages are formatted and outputted.</p>
1472
+ <p>There can only be one writer function. It is an error to set more than one.</p>
1473
+ <div class="refsect3">
1474
+ <a name="g-log-set-writer-func.parameters"></a><h4>Parameters</h4>
1475
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1476
+ <colgroup>
1477
+ <col width="150px" class="parameters_name">
1478
+ <col class="parameters_description">
1479
+ <col width="200px" class="parameters_annotations">
1480
+ </colgroup>
1481
+ <tbody>
1482
+ <tr>
1483
+ <td class="parameter_name"><p>func</p></td>
1484
+ <td class="parameter_description"><p>log writer function, which must not be <a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a></p></td>
1485
+ <td class="parameter_annotations"> </td>
1486
+ </tr>
1487
+ <tr>
1488
+ <td class="parameter_name"><p>user_data</p></td>
1489
+ <td class="parameter_description"><p> user data to pass to <em class="parameter"><code>func</code></em>
1490
+ . </p></td>
1491
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'user_data', for callbacks; many bindings can pass NULL here."><span class="acronym">closure</span></acronym> func]</span></td>
1492
+ </tr>
1493
+ <tr>
1494
+ <td class="parameter_name"><p>user_data_free</p></td>
1495
+ <td class="parameter_description"><p> function to free <em class="parameter"><code>user_data</code></em>
1496
+ once it’s
1497
+ finished with, if non-<a class="link" href="glib-Standard-Macros.html#NULL:CAPS" title="NULL"><code class="literal">NULL</code></a>. </p></td>
1498
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="This parameter is a 'destroy_data', for callbacks."><span class="acronym">destroy</span></acronym> func]</span></td>
1499
+ </tr>
1500
+ </tbody>
1501
+ </table></div>
1502
+ </div>
1503
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1504
+ </div>
1505
+ <hr>
1506
+ <div class="refsect2">
1507
+ <a name="g-log-writer-supports-color"></a><h3>g_log_writer_supports_color ()</h3>
1508
+ <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
1509
+ g_log_writer_supports_color (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint ()"><span class="type">gint</span></a> output_fd</code></em>);</pre>
1510
+ <p>Check whether the given <em class="parameter"><code>output_fd</code></em>
1511
+ file descriptor supports ANSI color
1512
+ escape sequences. If so, they can safely be used when formatting log
1513
+ messages.</p>
1514
+ <div class="refsect3">
1515
+ <a name="g-log-writer-supports-color.parameters"></a><h4>Parameters</h4>
1516
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1517
+ <colgroup>
1518
+ <col width="150px" class="parameters_name">
1519
+ <col class="parameters_description">
1520
+ <col width="200px" class="parameters_annotations">
1521
+ </colgroup>
1522
+ <tbody><tr>
1523
+ <td class="parameter_name"><p>output_fd</p></td>
1524
+ <td class="parameter_description"><p>output file descriptor to check</p></td>
1525
+ <td class="parameter_annotations"> </td>
1526
+ </tr></tbody>
1527
+ </table></div>
1528
+ </div>
1529
+ <div class="refsect3">
1530
+ <a name="g-log-writer-supports-color.returns"></a><h4>Returns</h4>
1531
+ <p> <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if ANSI color escapes are supported, <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> otherwise</p>
1532
+ </div>
1533
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1534
+ </div>
1535
+ <hr>
1536
+ <div class="refsect2">
1537
+ <a name="g-log-writer-is-journald"></a><h3>g_log_writer_is_journald ()</h3>
1538
+ <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="returnvalue">gboolean</span></a>
1539
+ g_log_writer_is_journald (<em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gint" title="gint ()"><span class="type">gint</span></a> output_fd</code></em>);</pre>
1540
+ <p>Check whether the given <em class="parameter"><code>output_fd</code></em>
1541
+ file descriptor is a connection to the
1542
+ systemd journal, or something else (like a log file or <code class="literal">stdout</code> or
1543
+ <code class="literal">stderr</code>).</p>
1544
+ <div class="refsect3">
1545
+ <a name="g-log-writer-is-journald.parameters"></a><h4>Parameters</h4>
1546
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1547
+ <colgroup>
1548
+ <col width="150px" class="parameters_name">
1549
+ <col class="parameters_description">
1550
+ <col width="200px" class="parameters_annotations">
1551
+ </colgroup>
1552
+ <tbody><tr>
1553
+ <td class="parameter_name"><p>output_fd</p></td>
1554
+ <td class="parameter_description"><p>output file descriptor to check</p></td>
1555
+ <td class="parameter_annotations"> </td>
1556
+ </tr></tbody>
1557
+ </table></div>
1558
+ </div>
1559
+ <div class="refsect3">
1560
+ <a name="g-log-writer-is-journald.returns"></a><h4>Returns</h4>
1561
+ <p> <a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> if <em class="parameter"><code>output_fd</code></em>
1562
+ points to the journal, <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> otherwise</p>
1563
+ </div>
1564
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1565
+ </div>
1566
+ <hr>
1567
+ <div class="refsect2">
1568
+ <a name="g-log-writer-format-fields"></a><h3>g_log_writer_format_fields ()</h3>
1569
+ <pre class="programlisting"><a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="returnvalue">gchar</span></a> *
1570
+ g_log_writer_format_fields (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1571
+ <em class="parameter"><code>const <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> *fields</code></em>,
1572
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> n_fields</code></em>,
1573
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gboolean" title="gboolean"><span class="type">gboolean</span></a> use_color</code></em>);</pre>
1574
+ <p>Format a structured log message as a string suitable for outputting to the
1575
+ terminal (or elsewhere). This will include the values of all fields it knows
1576
+ how to interpret, which includes <code class="literal">MESSAGE</code> and <code class="literal">GLIB_DOMAIN</code> (see the
1577
+ documentation for <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a>). It does not include values from
1578
+ unknown fields.</p>
1579
+ <p>The returned string does **not** have a trailing new-line character. It is
1580
+ encoded in the character set of the current locale, which is not necessarily
1581
+ UTF-8.</p>
1582
+ <div class="refsect3">
1583
+ <a name="g-log-writer-format-fields.parameters"></a><h4>Parameters</h4>
1584
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1585
+ <colgroup>
1586
+ <col width="150px" class="parameters_name">
1587
+ <col class="parameters_description">
1588
+ <col width="200px" class="parameters_annotations">
1589
+ </colgroup>
1590
+ <tbody>
1591
+ <tr>
1592
+ <td class="parameter_name"><p>log_level</p></td>
1593
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1594
+ level</p></td>
1595
+ <td class="parameter_annotations"> </td>
1596
+ </tr>
1597
+ <tr>
1598
+ <td class="parameter_name"><p>fields</p></td>
1599
+ <td class="parameter_description"><p> key–value pairs of structured data forming
1600
+ the log message. </p></td>
1601
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_fields]</span></td>
1602
+ </tr>
1603
+ <tr>
1604
+ <td class="parameter_name"><p>n_fields</p></td>
1605
+ <td class="parameter_description"><p>number of elements in the <em class="parameter"><code>fields</code></em>
1606
+ array</p></td>
1607
+ <td class="parameter_annotations"> </td>
1608
+ </tr>
1609
+ <tr>
1610
+ <td class="parameter_name"><p>use_color</p></td>
1611
+ <td class="parameter_description"><p><a class="link" href="glib-Standard-Macros.html#TRUE:CAPS" title="TRUE"><code class="literal">TRUE</code></a> to use ANSI color escape sequences when formatting the
1612
+ message, <a class="link" href="glib-Standard-Macros.html#FALSE:CAPS" title="FALSE"><code class="literal">FALSE</code></a> to not</p></td>
1613
+ <td class="parameter_annotations"> </td>
1614
+ </tr>
1615
+ </tbody>
1616
+ </table></div>
1617
+ </div>
1618
+ <div class="refsect3">
1619
+ <a name="g-log-writer-format-fields.returns"></a><h4>Returns</h4>
1620
+ <p> string containing the formatted log message, in
1621
+ the character set of the current locale. </p>
1622
+ <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
1623
+ </div>
1624
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1625
+ </div>
1626
+ <hr>
1627
+ <div class="refsect2">
1628
+ <a name="g-log-writer-journald"></a><h3>g_log_writer_journald ()</h3>
1629
+ <pre class="programlisting"><a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
1630
+ g_log_writer_journald (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1631
+ <em class="parameter"><code>const <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> *fields</code></em>,
1632
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> n_fields</code></em>,
1633
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
1634
+ <p>Format a structured log message and send it to the systemd journal as a set
1635
+ of key–value pairs. All fields are sent to the journal, but if a field has
1636
+ length zero (indicating program-specific data) then only its key will be
1637
+ sent.</p>
1638
+ <p>This is suitable for use as a <a class="link" href="glib-Message-Logging.html#GLogWriterFunc" title="GLogWriterFunc ()"><span class="type">GLogWriterFunc</span></a>.</p>
1639
+ <p>If GLib has been compiled without systemd support, this function is still
1640
+ defined, but will always return <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-UNHANDLED:CAPS"><code class="literal">G_LOG_WRITER_UNHANDLED</code></a>.</p>
1641
+ <div class="refsect3">
1642
+ <a name="g-log-writer-journald.parameters"></a><h4>Parameters</h4>
1643
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1644
+ <colgroup>
1645
+ <col width="150px" class="parameters_name">
1646
+ <col class="parameters_description">
1647
+ <col width="200px" class="parameters_annotations">
1648
+ </colgroup>
1649
+ <tbody>
1650
+ <tr>
1651
+ <td class="parameter_name"><p>log_level</p></td>
1652
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1653
+ level</p></td>
1654
+ <td class="parameter_annotations"> </td>
1655
+ </tr>
1656
+ <tr>
1657
+ <td class="parameter_name"><p>fields</p></td>
1658
+ <td class="parameter_description"><p> key–value pairs of structured data forming
1659
+ the log message. </p></td>
1660
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_fields]</span></td>
1661
+ </tr>
1662
+ <tr>
1663
+ <td class="parameter_name"><p>n_fields</p></td>
1664
+ <td class="parameter_description"><p>number of elements in the <em class="parameter"><code>fields</code></em>
1665
+ array</p></td>
1666
+ <td class="parameter_annotations"> </td>
1667
+ </tr>
1668
+ <tr>
1669
+ <td class="parameter_name"><p>user_data</p></td>
1670
+ <td class="parameter_description"><p>user data passed to <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a></p></td>
1671
+ <td class="parameter_annotations"> </td>
1672
+ </tr>
1673
+ </tbody>
1674
+ </table></div>
1675
+ </div>
1676
+ <div class="refsect3">
1677
+ <a name="g-log-writer-journald.returns"></a><h4>Returns</h4>
1678
+ <p> <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-HANDLED:CAPS"><code class="literal">G_LOG_WRITER_HANDLED</code></a> on success, <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-UNHANDLED:CAPS"><code class="literal">G_LOG_WRITER_UNHANDLED</code></a> otherwise</p>
1679
+ </div>
1680
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1681
+ </div>
1682
+ <hr>
1683
+ <div class="refsect2">
1684
+ <a name="g-log-writer-standard-streams"></a><h3>g_log_writer_standard_streams ()</h3>
1685
+ <pre class="programlisting"><a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
1686
+ g_log_writer_standard_streams (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1687
+ <em class="parameter"><code>const <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> *fields</code></em>,
1688
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> n_fields</code></em>,
1689
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
1690
+ <p>Format a structured log message and print it to either <code class="literal">stdout</code> or <code class="literal">stderr</code>,
1691
+ depending on its log level. <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-INFO:CAPS"><code class="literal">G_LOG_LEVEL_INFO</code></a> and <a class="link" href="glib-Message-Logging.html#G-LOG-LEVEL-DEBUG:CAPS"><code class="literal">G_LOG_LEVEL_DEBUG</code></a> messages
1692
+ are sent to <code class="literal">stdout</code>; all other log levels are sent to <code class="literal">stderr</code>. Only fields
1693
+ which are understood by this function are included in the formatted string
1694
+ which is printed.</p>
1695
+ <p>If the output stream supports ANSI color escape sequences, they will be used
1696
+ in the output.</p>
1697
+ <p>A trailing new-line character is added to the log message when it is printed.</p>
1698
+ <p>This is suitable for use as a <a class="link" href="glib-Message-Logging.html#GLogWriterFunc" title="GLogWriterFunc ()"><span class="type">GLogWriterFunc</span></a>.</p>
1699
+ <div class="refsect3">
1700
+ <a name="g-log-writer-standard-streams.parameters"></a><h4>Parameters</h4>
1701
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1702
+ <colgroup>
1703
+ <col width="150px" class="parameters_name">
1704
+ <col class="parameters_description">
1705
+ <col width="200px" class="parameters_annotations">
1706
+ </colgroup>
1707
+ <tbody>
1708
+ <tr>
1709
+ <td class="parameter_name"><p>log_level</p></td>
1710
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1711
+ level</p></td>
1712
+ <td class="parameter_annotations"> </td>
1713
+ </tr>
1714
+ <tr>
1715
+ <td class="parameter_name"><p>fields</p></td>
1716
+ <td class="parameter_description"><p> key–value pairs of structured data forming
1717
+ the log message. </p></td>
1718
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_fields]</span></td>
1719
+ </tr>
1720
+ <tr>
1721
+ <td class="parameter_name"><p>n_fields</p></td>
1722
+ <td class="parameter_description"><p>number of elements in the <em class="parameter"><code>fields</code></em>
1723
+ array</p></td>
1724
+ <td class="parameter_annotations"> </td>
1725
+ </tr>
1726
+ <tr>
1727
+ <td class="parameter_name"><p>user_data</p></td>
1728
+ <td class="parameter_description"><p>user data passed to <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a></p></td>
1729
+ <td class="parameter_annotations"> </td>
1730
+ </tr>
1731
+ </tbody>
1732
+ </table></div>
1733
+ </div>
1734
+ <div class="refsect3">
1735
+ <a name="g-log-writer-standard-streams.returns"></a><h4>Returns</h4>
1736
+ <p> <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-HANDLED:CAPS"><code class="literal">G_LOG_WRITER_HANDLED</code></a> on success, <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-UNHANDLED:CAPS"><code class="literal">G_LOG_WRITER_UNHANDLED</code></a> otherwise</p>
1737
+ </div>
1738
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1739
+ </div>
1740
+ <hr>
1741
+ <div class="refsect2">
1742
+ <a name="g-log-writer-default"></a><h3>g_log_writer_default ()</h3>
1743
+ <pre class="programlisting"><a class="link" href="glib-Message-Logging.html#GLogWriterOutput" title="enum GLogWriterOutput"><span class="returnvalue">GLogWriterOutput</span></a>
1744
+ g_log_writer_default (<em class="parameter"><code><a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a> log_level</code></em>,
1745
+ <em class="parameter"><code>const <a class="link" href="glib-Message-Logging.html#GLogField" title="struct GLogField"><span class="type">GLogField</span></a> *fields</code></em>,
1746
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gsize" title="gsize"><span class="type">gsize</span></a> n_fields</code></em>,
1747
+ <em class="parameter"><code><a class="link" href="glib-Basic-Types.html#gpointer" title="gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre>
1748
+ <p>Format a structured log message and output it to the default log destination
1749
+ for the platform. On Linux, this is typically the systemd journal, falling
1750
+ back to <code class="literal">stdout</code> or <code class="literal">stderr</code> if running from the terminal or if output is
1751
+ being redirected to a file.</p>
1752
+ <p>Support for other platform-specific logging mechanisms may be added in
1753
+ future. Distributors of GLib may modify this function to impose their own
1754
+ (documented) platform-specific log writing policies.</p>
1755
+ <p>This is suitable for use as a <a class="link" href="glib-Message-Logging.html#GLogWriterFunc" title="GLogWriterFunc ()"><span class="type">GLogWriterFunc</span></a>, and is the default writer used
1756
+ if no other is set using <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a>.</p>
1757
+ <p>As with <a class="link" href="glib-Message-Logging.html#g-log-default-handler" title="g_log_default_handler ()"><code class="function">g_log_default_handler()</code></a>, this function drops debug and informational
1758
+ messages unless their log domain (or <code class="literal">all</code>) is listed in the space-separated
1759
+ <code class="literal">G_MESSAGES_DEBUG</code> environment variable.</p>
1760
+ <div class="refsect3">
1761
+ <a name="g-log-writer-default.parameters"></a><h4>Parameters</h4>
1762
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1763
+ <colgroup>
1764
+ <col width="150px" class="parameters_name">
1765
+ <col class="parameters_description">
1766
+ <col width="200px" class="parameters_annotations">
1767
+ </colgroup>
1768
+ <tbody>
1769
+ <tr>
1770
+ <td class="parameter_name"><p>log_level</p></td>
1771
+ <td class="parameter_description"><p>log level, either from <a class="link" href="glib-Message-Logging.html#GLogLevelFlags" title="enum GLogLevelFlags"><span class="type">GLogLevelFlags</span></a>, or a user-defined
1772
+ level</p></td>
1773
+ <td class="parameter_annotations"> </td>
1774
+ </tr>
1775
+ <tr>
1776
+ <td class="parameter_name"><p>fields</p></td>
1777
+ <td class="parameter_description"><p> key–value pairs of structured data forming
1778
+ the log message. </p></td>
1779
+ <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=n_fields]</span></td>
1780
+ </tr>
1781
+ <tr>
1782
+ <td class="parameter_name"><p>n_fields</p></td>
1783
+ <td class="parameter_description"><p>number of elements in the <em class="parameter"><code>fields</code></em>
1784
+ array</p></td>
1785
+ <td class="parameter_annotations"> </td>
1786
+ </tr>
1787
+ <tr>
1788
+ <td class="parameter_name"><p>user_data</p></td>
1789
+ <td class="parameter_description"><p>user data passed to <a class="link" href="glib-Message-Logging.html#g-log-set-writer-func" title="g_log_set_writer_func ()"><code class="function">g_log_set_writer_func()</code></a></p></td>
1790
+ <td class="parameter_annotations"> </td>
1791
+ </tr>
1792
+ </tbody>
1793
+ </table></div>
1794
+ </div>
1795
+ <div class="refsect3">
1796
+ <a name="g-log-writer-default.returns"></a><h4>Returns</h4>
1797
+ <p> <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-HANDLED:CAPS"><code class="literal">G_LOG_WRITER_HANDLED</code></a> on success, <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-UNHANDLED:CAPS"><code class="literal">G_LOG_WRITER_UNHANDLED</code></a> otherwise</p>
1798
+ </div>
1799
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1800
+ </div>
889
1801
  </div>
890
1802
  <div class="refsect1">
891
1803
  <a name="glib-Message-Logging.other_details"></a><h2>Types and Values</h2>
@@ -919,6 +1831,8 @@ it in any public header files.</p>
919
1831
  <pre class="programlisting">#define G_LOG_FATAL_MASK (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)
920
1832
  </pre>
921
1833
  <p>GLib log levels that are considered fatal by default.</p>
1834
+ <p>This is not used if structured logging is enabled; see
1835
+ Using Structured Logging.</p>
922
1836
  </div>
923
1837
  <hr>
924
1838
  <div class="refsect2">
@@ -1014,6 +1928,88 @@ levels using <a class="link" href="glib-Message-Logging.html#g-log-set-handler"
1014
1928
  </table></div>
1015
1929
  </div>
1016
1930
  </div>
1931
+ <hr>
1932
+ <div class="refsect2">
1933
+ <a name="GLogField"></a><h3>struct GLogField</h3>
1934
+ <pre class="programlisting">struct GLogField {
1935
+ const gchar *key;
1936
+ gconstpointer value;
1937
+ gssize length;
1938
+ };
1939
+ </pre>
1940
+ <p>Structure representing a single field in a structured log entry. See
1941
+ <a class="link" href="glib-Message-Logging.html#g-log-structured" title="g_log_structured ()"><code class="function">g_log_structured()</code></a> for details.</p>
1942
+ <p>Log fields may contain arbitrary values, including binary with embedded nul
1943
+ bytes. If the field contains a string, the string must be UTF-8 encoded and
1944
+ have a trailing nul byte. Otherwise, <em class="parameter"><code>length</code></em>
1945
+ must be set to a non-negative
1946
+ value.</p>
1947
+ <div class="refsect3">
1948
+ <a name="GLogField.members"></a><h4>Members</h4>
1949
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1950
+ <colgroup>
1951
+ <col width="300px" class="struct_members_name">
1952
+ <col class="struct_members_description">
1953
+ <col width="200px" class="struct_members_annotations">
1954
+ </colgroup>
1955
+ <tbody>
1956
+ <tr>
1957
+ <td class="struct_member_name"><p>const <a class="link" href="glib-Basic-Types.html#gchar" title="gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="GLogField.key"></a>key</code></em>;</p></td>
1958
+ <td class="struct_member_description"><p>field name (UTF-8 string)</p></td>
1959
+ <td class="struct_member_annotations"> </td>
1960
+ </tr>
1961
+ <tr>
1962
+ <td class="struct_member_name"><p><a class="link" href="glib-Basic-Types.html#gconstpointer" title="gconstpointer"><span class="type">gconstpointer</span></a> <em class="structfield"><code><a name="GLogField.value"></a>value</code></em>;</p></td>
1963
+ <td class="struct_member_description"><p>field value (arbitrary bytes)</p></td>
1964
+ <td class="struct_member_annotations"> </td>
1965
+ </tr>
1966
+ <tr>
1967
+ <td class="struct_member_name"><p><a class="link" href="glib-Basic-Types.html#gssize" title="gssize"><span class="type">gssize</span></a> <em class="structfield"><code><a name="GLogField.length"></a>length</code></em>;</p></td>
1968
+ <td class="struct_member_description"><p>length of <em class="parameter"><code>value</code></em>
1969
+ , in bytes, or -1 if it is nul-terminated</p></td>
1970
+ <td class="struct_member_annotations"> </td>
1971
+ </tr>
1972
+ </tbody>
1973
+ </table></div>
1974
+ </div>
1975
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
1976
+ </div>
1977
+ <hr>
1978
+ <div class="refsect2">
1979
+ <a name="GLogWriterOutput"></a><h3>enum GLogWriterOutput</h3>
1980
+ <p>Return values from <a href="glib-Message-Logging.html#GLogWriterFunc"><span class="type">GLogWriterFuncs</span></a> to indicate whether the given log entry
1981
+ was successfully handled by the writer, or whether there was an error in
1982
+ handling it (and hence a fallback writer should be used).</p>
1983
+ <p>If a <a class="link" href="glib-Message-Logging.html#GLogWriterFunc" title="GLogWriterFunc ()"><span class="type">GLogWriterFunc</span></a> ignores a log entry, it should return
1984
+ <a class="link" href="glib-Message-Logging.html#G-LOG-WRITER-HANDLED:CAPS"><code class="literal">G_LOG_WRITER_HANDLED</code></a>.</p>
1985
+ <div class="refsect3">
1986
+ <a name="GLogWriterOutput.members"></a><h4>Members</h4>
1987
+ <div class="informaltable"><table class="informaltable" width="100%" border="0">
1988
+ <colgroup>
1989
+ <col width="300px" class="enum_members_name">
1990
+ <col class="enum_members_description">
1991
+ <col width="200px" class="enum_members_annotations">
1992
+ </colgroup>
1993
+ <tbody>
1994
+ <tr>
1995
+ <td class="enum_member_name"><p><a name="G-LOG-WRITER-HANDLED:CAPS"></a>G_LOG_WRITER_HANDLED</p></td>
1996
+ <td class="enum_member_description">
1997
+ <p>Log writer has handled the log entry.</p>
1998
+ </td>
1999
+ <td class="enum_member_annotations"> </td>
2000
+ </tr>
2001
+ <tr>
2002
+ <td class="enum_member_name"><p><a name="G-LOG-WRITER-UNHANDLED:CAPS"></a>G_LOG_WRITER_UNHANDLED</p></td>
2003
+ <td class="enum_member_description">
2004
+ <p>Log writer could not handle the log entry.</p>
2005
+ </td>
2006
+ <td class="enum_member_annotations"> </td>
2007
+ </tr>
2008
+ </tbody>
2009
+ </table></div>
2010
+ </div>
2011
+ <p class="since">Since: <a class="link" href="api-index-2-50.html#api-index-2.50">2.50</a></p>
2012
+ </div>
1017
2013
  </div>
1018
2014
  </div>
1019
2015
  <div class="footer">