Fix getauxval error at qemu
[platform/upstream/glib.git] / glib / guri.h
1 /* GLIB - Library of useful routines for C programming
2  * Copyright © 2020 Red Hat, Inc.
3  *
4  * SPDX-License-Identifier: LGPL-2.1-or-later
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General
17  * Public License along with this library; if not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20
21 #pragma once
22
23 #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
24 #error "Only <glib.h> can be included directly."
25 #endif
26
27 #include <glib/gtypes.h>
28
29 G_BEGIN_DECLS
30
31 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
32
33 typedef struct _GUri GUri;
34
35 GLIB_AVAILABLE_IN_2_66
36 GUri *       g_uri_ref              (GUri *uri);
37 GLIB_AVAILABLE_IN_2_66
38 void         g_uri_unref            (GUri *uri);
39
40 /**
41  * GUriFlags:
42  * @G_URI_FLAGS_NONE: No flags set.
43  * @G_URI_FLAGS_PARSE_RELAXED: Parse the URI more relaxedly than the
44  *     [RFC 3986](https://tools.ietf.org/html/rfc3986) grammar specifies,
45  *     fixing up or ignoring common mistakes in URIs coming from external
46  *     sources. This is also needed for some obscure URI schemes where `;`
47  *     separates the host from the path. Don’t use this flag unless you need to.
48  * @G_URI_FLAGS_HAS_PASSWORD: The userinfo field may contain a password,
49  *     which will be separated from the username by `:`.
50  * @G_URI_FLAGS_HAS_AUTH_PARAMS: The userinfo may contain additional
51  *     authentication-related parameters, which will be separated from
52  *     the username and/or password by `;`.
53  * @G_URI_FLAGS_NON_DNS: The host component should not be assumed to be a
54  *     DNS hostname or IP address (for example, for `smb` URIs with NetBIOS
55  *     hostnames).
56  * @G_URI_FLAGS_ENCODED: When parsing a URI, this indicates that `%`-encoded
57  *     characters in the userinfo, path, query, and fragment fields
58  *     should not be decoded. (And likewise the host field if
59  *     %G_URI_FLAGS_NON_DNS is also set.) When building a URI, it indicates
60  *     that you have already `%`-encoded the components, and so #GUri
61  *     should not do any encoding itself.
62  * @G_URI_FLAGS_ENCODED_QUERY: Same as %G_URI_FLAGS_ENCODED, for the query
63  *     field only.
64  * @G_URI_FLAGS_ENCODED_PATH: Same as %G_URI_FLAGS_ENCODED, for the path only.
65  * @G_URI_FLAGS_ENCODED_FRAGMENT: Same as %G_URI_FLAGS_ENCODED, for the
66  *     fragment only.
67  * @G_URI_FLAGS_SCHEME_NORMALIZE: A scheme-based normalization will be applied.
68  *     For example, when parsing an HTTP URI changing omitted path to `/` and
69  *     omitted port to `80`; and when building a URI, changing empty path to `/`
70  *     and default port `80`). This only supports a subset of known schemes. (Since: 2.68)
71  *
72  * Flags that describe a URI.
73  *
74  * When parsing a URI, if you need to choose different flags based on
75  * the type of URI, you can use g_uri_peek_scheme() on the URI string
76  * to check the scheme first, and use that to decide what flags to
77  * parse it with.
78  *
79  * Since: 2.66
80  */
81 GLIB_AVAILABLE_TYPE_IN_2_66
82 typedef enum {
83   G_URI_FLAGS_NONE            = 0,
84   G_URI_FLAGS_PARSE_RELAXED   = 1 << 0,
85   G_URI_FLAGS_HAS_PASSWORD    = 1 << 1,
86   G_URI_FLAGS_HAS_AUTH_PARAMS = 1 << 2,
87   G_URI_FLAGS_ENCODED         = 1 << 3,
88   G_URI_FLAGS_NON_DNS         = 1 << 4,
89   G_URI_FLAGS_ENCODED_QUERY   = 1 << 5,
90   G_URI_FLAGS_ENCODED_PATH    = 1 << 6,
91   G_URI_FLAGS_ENCODED_FRAGMENT = 1 << 7,
92   G_URI_FLAGS_SCHEME_NORMALIZE GLIB_AVAILABLE_ENUMERATOR_IN_2_68 = 1 << 8,
93 } GUriFlags;
94
95 GLIB_AVAILABLE_IN_2_66
96 gboolean     g_uri_split            (const gchar  *uri_ref,
97                                      GUriFlags     flags,
98                                      gchar       **scheme,
99                                      gchar       **userinfo,
100                                      gchar       **host,
101                                      gint         *port,
102                                      gchar       **path,
103                                      gchar       **query,
104                                      gchar       **fragment,
105                                      GError      **error);
106 GLIB_AVAILABLE_IN_2_66
107 gboolean     g_uri_split_with_user  (const gchar  *uri_ref,
108                                      GUriFlags     flags,
109                                      gchar       **scheme,
110                                      gchar       **user,
111                                      gchar       **password,
112                                      gchar       **auth_params,
113                                      gchar       **host,
114                                      gint         *port,
115                                      gchar       **path,
116                                      gchar       **query,
117                                      gchar       **fragment,
118                                      GError      **error);
119 GLIB_AVAILABLE_IN_2_66
120 gboolean     g_uri_split_network    (const gchar  *uri_string,
121                                      GUriFlags     flags,
122                                      gchar       **scheme,
123                                      gchar       **host,
124                                      gint         *port,
125                                      GError      **error);
126
127 GLIB_AVAILABLE_IN_2_66
128 gboolean     g_uri_is_valid         (const gchar  *uri_string,
129                                      GUriFlags     flags,
130                                      GError      **error);
131
132 GLIB_AVAILABLE_IN_2_66
133 gchar *      g_uri_join             (GUriFlags     flags,
134                                      const gchar  *scheme,
135                                      const gchar  *userinfo,
136                                      const gchar  *host,
137                                      gint          port,
138                                      const gchar  *path,
139                                      const gchar  *query,
140                                      const gchar  *fragment);
141 GLIB_AVAILABLE_IN_2_66
142 gchar *      g_uri_join_with_user   (GUriFlags     flags,
143                                      const gchar  *scheme,
144                                      const gchar  *user,
145                                      const gchar  *password,
146                                      const gchar  *auth_params,
147                                      const gchar  *host,
148                                      gint          port,
149                                      const gchar  *path,
150                                      const gchar  *query,
151                                      const gchar  *fragment);
152
153 GLIB_AVAILABLE_IN_2_66
154 GUri *       g_uri_parse            (const gchar  *uri_string,
155                                      GUriFlags     flags,
156                                      GError      **error);
157 GLIB_AVAILABLE_IN_2_66
158 GUri *       g_uri_parse_relative   (GUri         *base_uri,
159                                      const gchar  *uri_ref,
160                                      GUriFlags     flags,
161                                      GError      **error);
162
163 GLIB_AVAILABLE_IN_2_66
164 gchar *      g_uri_resolve_relative (const gchar  *base_uri_string,
165                                      const gchar  *uri_ref,
166                                      GUriFlags     flags,
167                                      GError      **error);
168
169 GLIB_AVAILABLE_IN_2_66
170 GUri *       g_uri_build            (GUriFlags     flags,
171                                      const gchar  *scheme,
172                                      const gchar  *userinfo,
173                                      const gchar  *host,
174                                      gint          port,
175                                      const gchar  *path,
176                                      const gchar  *query,
177                                      const gchar  *fragment);
178 GLIB_AVAILABLE_IN_2_66
179 GUri *       g_uri_build_with_user  (GUriFlags     flags,
180                                      const gchar  *scheme,
181                                      const gchar  *user,
182                                      const gchar  *password,
183                                      const gchar  *auth_params,
184                                      const gchar  *host,
185                                      gint          port,
186                                      const gchar  *path,
187                                      const gchar  *query,
188                                      const gchar  *fragment);
189
190 /**
191  * GUriHideFlags:
192  * @G_URI_HIDE_NONE: No flags set.
193  * @G_URI_HIDE_USERINFO: Hide the userinfo.
194  * @G_URI_HIDE_PASSWORD: Hide the password.
195  * @G_URI_HIDE_AUTH_PARAMS: Hide the auth_params.
196  * @G_URI_HIDE_QUERY: Hide the query.
197  * @G_URI_HIDE_FRAGMENT: Hide the fragment.
198  *
199  * Flags describing what parts of the URI to hide in
200  * g_uri_to_string_partial(). Note that %G_URI_HIDE_PASSWORD and
201  * %G_URI_HIDE_AUTH_PARAMS will only work if the #GUri was parsed with
202  * the corresponding flags.
203  *
204  * Since: 2.66
205  */
206 GLIB_AVAILABLE_TYPE_IN_2_66
207 typedef enum {
208   G_URI_HIDE_NONE        = 0,
209   G_URI_HIDE_USERINFO    = 1 << 0,
210   G_URI_HIDE_PASSWORD    = 1 << 1,
211   G_URI_HIDE_AUTH_PARAMS = 1 << 2,
212   G_URI_HIDE_QUERY       = 1 << 3,
213   G_URI_HIDE_FRAGMENT    = 1 << 4,
214 } GUriHideFlags;
215
216 GLIB_AVAILABLE_IN_2_66
217 char *       g_uri_to_string         (GUri          *uri);
218 GLIB_AVAILABLE_IN_2_66
219 char *       g_uri_to_string_partial (GUri          *uri,
220                                       GUriHideFlags  flags);
221
222 GLIB_AVAILABLE_IN_2_66
223 const gchar *g_uri_get_scheme        (GUri          *uri);
224 GLIB_AVAILABLE_IN_2_66
225 const gchar *g_uri_get_userinfo      (GUri          *uri);
226 GLIB_AVAILABLE_IN_2_66
227 const gchar *g_uri_get_user          (GUri          *uri);
228 GLIB_AVAILABLE_IN_2_66
229 const gchar *g_uri_get_password      (GUri          *uri);
230 GLIB_AVAILABLE_IN_2_66
231 const gchar *g_uri_get_auth_params   (GUri          *uri);
232 GLIB_AVAILABLE_IN_2_66
233 const gchar *g_uri_get_host          (GUri          *uri);
234 GLIB_AVAILABLE_IN_2_66
235 gint         g_uri_get_port          (GUri          *uri);
236 GLIB_AVAILABLE_IN_2_66
237 const gchar *g_uri_get_path          (GUri          *uri);
238 GLIB_AVAILABLE_IN_2_66
239 const gchar *g_uri_get_query         (GUri          *uri);
240 GLIB_AVAILABLE_IN_2_66
241 const gchar *g_uri_get_fragment      (GUri          *uri);
242 GLIB_AVAILABLE_IN_2_66
243 GUriFlags    g_uri_get_flags         (GUri          *uri);
244
245 /**
246  * GUriParamsFlags:
247  * @G_URI_PARAMS_NONE: No flags set.
248  * @G_URI_PARAMS_CASE_INSENSITIVE: Parameter names are case insensitive.
249  * @G_URI_PARAMS_WWW_FORM: Replace `+` with space character. Only useful for
250  *     URLs on the web, using the `https` or `http` schemas.
251  * @G_URI_PARAMS_PARSE_RELAXED: See %G_URI_FLAGS_PARSE_RELAXED.
252  *
253  * Flags modifying the way parameters are handled by g_uri_parse_params() and
254  * #GUriParamsIter.
255  *
256  * Since: 2.66
257  */
258 GLIB_AVAILABLE_TYPE_IN_2_66
259 typedef enum {
260   G_URI_PARAMS_NONE             = 0,
261   G_URI_PARAMS_CASE_INSENSITIVE = 1 << 0,
262   G_URI_PARAMS_WWW_FORM         = 1 << 1,
263   G_URI_PARAMS_PARSE_RELAXED    = 1 << 2,
264 } GUriParamsFlags;
265
266 GLIB_AVAILABLE_IN_2_66
267 GHashTable *g_uri_parse_params       (const gchar    *params,
268                                       gssize          length,
269                                       const gchar    *separators,
270                                       GUriParamsFlags flags,
271                                       GError        **error);
272
273 typedef struct _GUriParamsIter GUriParamsIter;
274
275 struct _GUriParamsIter
276 {
277   /*< private >*/
278   gint     dummy0;
279   gpointer dummy1;
280   gpointer dummy2;
281   guint8   dummy3[256];
282 };
283
284 GLIB_AVAILABLE_IN_2_66
285 void        g_uri_params_iter_init   (GUriParamsIter *iter,
286                                       const gchar    *params,
287                                       gssize          length,
288                                       const gchar    *separators,
289                                       GUriParamsFlags flags);
290
291 GLIB_AVAILABLE_IN_2_66
292 gboolean    g_uri_params_iter_next   (GUriParamsIter *iter,
293                                       gchar         **attribute,
294                                       gchar         **value,
295                                       GError        **error);
296
297 /**
298  * G_URI_ERROR:
299  *
300  * Error domain for URI methods. Errors in this domain will be from
301  * the #GUriError enumeration. See #GError for information on error
302  * domains.
303  *
304  * Since: 2.66
305  */
306 #define G_URI_ERROR (g_uri_error_quark ()) GLIB_AVAILABLE_MACRO_IN_2_66
307 GLIB_AVAILABLE_IN_2_66
308 GQuark g_uri_error_quark (void);
309
310 /**
311  * GUriError:
312  * @G_URI_ERROR_FAILED: Generic error if no more specific error is available.
313  *     See the error message for details.
314  * @G_URI_ERROR_BAD_SCHEME: The scheme of a URI could not be parsed.
315  * @G_URI_ERROR_BAD_USER: The user/userinfo of a URI could not be parsed.
316  * @G_URI_ERROR_BAD_PASSWORD: The password of a URI could not be parsed.
317  * @G_URI_ERROR_BAD_AUTH_PARAMS: The authentication parameters of a URI could not be parsed.
318  * @G_URI_ERROR_BAD_HOST: The host of a URI could not be parsed.
319  * @G_URI_ERROR_BAD_PORT: The port of a URI could not be parsed.
320  * @G_URI_ERROR_BAD_PATH: The path of a URI could not be parsed.
321  * @G_URI_ERROR_BAD_QUERY: The query of a URI could not be parsed.
322  * @G_URI_ERROR_BAD_FRAGMENT: The fragment of a URI could not be parsed.
323  *
324  * Error codes returned by #GUri methods.
325  *
326  * Since: 2.66
327  */
328 typedef enum {
329   G_URI_ERROR_FAILED,
330   G_URI_ERROR_BAD_SCHEME,
331   G_URI_ERROR_BAD_USER,
332   G_URI_ERROR_BAD_PASSWORD,
333   G_URI_ERROR_BAD_AUTH_PARAMS,
334   G_URI_ERROR_BAD_HOST,
335   G_URI_ERROR_BAD_PORT,
336   G_URI_ERROR_BAD_PATH,
337   G_URI_ERROR_BAD_QUERY,
338   G_URI_ERROR_BAD_FRAGMENT,
339 } GUriError;
340
341 /**
342  * G_URI_RESERVED_CHARS_GENERIC_DELIMITERS:
343  *
344  * Generic delimiters characters as defined in
345  * [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `:/?#[]@`.
346  *
347  * Since: 2.16
348  **/
349 #define G_URI_RESERVED_CHARS_GENERIC_DELIMITERS ":/?#[]@"
350
351 /**
352  * G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS:
353  *
354  * Subcomponent delimiter characters as defined in
355  * [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=`.
356  *
357  * Since: 2.16
358  **/
359 #define G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
360
361 /**
362  * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT:
363  *
364  * Allowed characters in path elements. Includes `!$&'()*+,;=:@`.
365  *
366  * Since: 2.16
367  **/
368 #define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":@"
369
370 /**
371  * G_URI_RESERVED_CHARS_ALLOWED_IN_PATH:
372  *
373  * Allowed characters in a path. Includes `!$&'()*+,;=:@/`.
374  *
375  * Since: 2.16
376  **/
377 #define G_URI_RESERVED_CHARS_ALLOWED_IN_PATH G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT "/"
378
379 /**
380  * G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO:
381  *
382  * Allowed characters in userinfo as defined in
383  * [RFC 3986](https://tools.ietf.org/html/rfc3986). Includes `!$&'()*+,;=:`.
384  *
385  * Since: 2.16
386  **/
387 #define G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS ":"
388
389 GLIB_AVAILABLE_IN_ALL
390 char *      g_uri_unescape_string  (const char *escaped_string,
391                                     const char *illegal_characters);
392 GLIB_AVAILABLE_IN_ALL
393 char *      g_uri_unescape_segment (const char *escaped_string,
394                                     const char *escaped_string_end,
395                                     const char *illegal_characters);
396
397 GLIB_AVAILABLE_IN_ALL
398 char *      g_uri_parse_scheme     (const char *uri);
399 GLIB_AVAILABLE_IN_2_66
400 const char *g_uri_peek_scheme      (const char *uri);
401
402 GLIB_AVAILABLE_IN_ALL
403 char *      g_uri_escape_string    (const char *unescaped,
404                                     const char *reserved_chars_allowed,
405                                     gboolean    allow_utf8);
406
407 GLIB_AVAILABLE_IN_2_66
408 GBytes *    g_uri_unescape_bytes   (const char *escaped_string,
409                                     gssize      length,
410                                     const char *illegal_characters,
411                                     GError    **error);
412
413 GLIB_AVAILABLE_IN_2_66
414 char *      g_uri_escape_bytes     (const guint8 *unescaped,
415                                     gsize         length,
416                                     const char   *reserved_chars_allowed);
417
418 G_GNUC_END_IGNORE_DEPRECATIONS
419
420 G_END_DECLS