1 2009-02-02 Matthias Clasen <mclasen@redhat.com>
3 * configure.in: Bump version
5 2009-02-02 Matthias Clasen <mclasen@redhat.com>
7 * === Released 2.19.6 ===
9 2009-02-02 Matthias Clasen <mclasen@redhat.com>
11 * configure.in: Bump version
13 2009-01-31 Matthias Clasen <mclasen@redhat.com>
17 2009-01-31 Matthias Clasen <mclasen@redhat.com>
19 Bug 569105 – g_time_val_to_iso8601() assumes time_t==long
21 * glib/gtimer.c (g_time_val_to_iso8601): Pass a time_t* to gmtime().
22 Pointed out by Matthias Drochner.
24 2009-01-27 Christian Persch <chpe@gnome.org>
27 * docs/reference/glib/glib-sections.txt:
28 * docs/reference/macros_misc.sgml:
29 * docs/reference/glib/tmpl/types.sgml: Add
30 G_GOFFSET_FORMAT and friends. Bug #563141.
32 2009-01-23 Stefan Kost <ensonic@users.sf.net>
34 * docs/reference/glib/Makefile.am:
35 Add SCAN_OPTIONS=--ignore-decorators="GLIB_VAR" to Makefile.am to fix
36 on problem with the doc build.
38 2009-01-21 Tor Lillqvist <tml@novell.com>
40 * glib/gwin32.c (g_win32_locale_filename_from_utf8): Drop the code
41 in the else branch of #if GLIB_CHECK_VERSION (2, 19, 0). Drop
44 2009-01-20 Matthias Clasen <mclasen@redhat.com>
46 Bug 568294 – A wrong reference in the description of
47 g_bookmark_file_add_application()
49 * glib/gbookmarkfile.c (g_bookmark_file_add_application):
50 Fix a typo in the docs. Pointed out by Takeshi Aihana
52 2009-01-19 Matthias Clasen <mclasen@redhat.com>
54 * === Released 2.19.5 ===
56 2009-01-18 Matthias Clasen <mclasen@redhat.com>
58 * glib/gstrfuncs.c (g_strdup_printf): Fix a doc typo.
60 2009-01-18 Matthias Clasen <mclasen@redhat.com>
64 2009-01-18 Matthias Clasen <mclasen@redhat.com>
66 Bug 512779 – --disable-regex breaks compilation
68 * configure.in: Define an ENABLE_REGEX macro
70 * gobject/gboxed.c: Don't refer to g_regex_ref if ENABLE_REGEX
73 2009-01-18 Matthias Clasen <mclasen@redhat.com>
75 * glib/gbsearcharray.h: Quell some compiler warnings.
77 2009-01-18 Matthias Clasen <mclasen@redhat.com>
79 * glib/pcre: Update to PCRE 7.8
81 2009-01-17 Matthias Clasen <mclasen@redhat.com>
83 Bug 567977 – textdomain() macro should not return NULL when
86 * glib/glibintl.h: If !ENABLE_NLS, make textomain() macro
87 return "messages" in case of a NULL argument. Patch by
90 2009-01-17 Matthias Clasen <mclasen@redhat.com>
92 Bug 567838 – G_STRUCT_OFFSETOF fails to compile under icc 9.1
94 * glib/gmacros.h (G_STRUCT_OFFSETOF): Use offsetof instead of
95 __builtin_offsetof, for icc's sake. Proposed by Hrvoje Niksic.
97 2009-01-13 Matthias Clasen <mclasen@redhat.com>
99 Bug 564728 Add function to decode base64 encoded data in place
102 * glib/gbase64.[hc] (g_base64_decode_inplace): New convenience
103 API to decode in place, overwriting the input string. Patch by
106 2009-01-12 Matthias Clasen <mclasen@redhat.com>
108 * glib/gtestutils.c (g_strcmp0): Be more explicit about the NULL
109 handling in the docs.
111 2009-01-12 Tor Lillqvist <tml@novell.com>
113 * glib/goption.c (parse_arg): Guard against a mis-written
114 GOptionArgFunc that has returned FALSE but not set the GError.
116 2009-01-10 Matthias Clasen <mclasen@redhat.com>
118 Bug 566573 – g_match_info_fetch_pos docs
120 * glib/gregex.c: Mention that positions are in bytes.
121 Proposed by Christian Persch.
123 2009-01-10 Matthias Clasen <mclasen@redhat.com>
125 Bug 566569 – gregex docs clarification
127 * glib/gregex.c: Copy the warning about @string to all
128 relevant docs. Proposed by Christian Persch
130 2009-01-09 Tor Lillqvist <tml@iki.fi>
132 Bug 567138 - get_package_directory_from_module() does not free its
135 * glib/gwin32.c (get_package_directory_from_module): Obvious fix.
137 2009-01-05 Matthias Clasen <mclasen@redhat.com>
139 * configure.in: Bump version
141 2009-01-05 Matthias Clasen <mclasen@redhat.com>
143 * === Released 2.19.4 ===
147 2009-01-05 Dan Winship <danw@gnome.org>
149 * glib/tests/.gitignore: update
151 * tests/.gitignore: update, sort
153 * tests/gobject/.gitignore: add
155 2009-01-05 Tor Lillqvist <tml@iki.fi>
157 Bug 566348 - g_file_open_tmp uses the wrong g_mkstemp on win32
159 * glib/gfileutils.c: Move the binary compatibility versions of
160 g_file_test(), g_file_get_contents(), g_mkstemp() and
161 g_file_open_tmp() last in the file. Remove the restriction that
162 the XXXXXX is last in the template in the binary compatibility
163 version of g_mkstemp(). Thanks to Morten Welinder and Jody
166 2009-01-03 Matthias Clasen <mclasen@redhat.com>
170 2009-01-02 Matthias Clasen <mclasen@redhat.com>
172 * glib/gregex.c: Add an example to the g_regex_replace_eval() docs.
174 2009-01-02 Matthias Clasen <mclasen@redhat.com>
176 * glib/gstrfuncs.c: Move docs inline, adding references to g_free()
179 2009-01-02 Matthias Clasen <mclasen@redhat.com>
181 Bug 564210 – SUN Studio 12 has supported visibility attribute
183 * configure.in: Use visibility attribute for new enough sun cc.
186 2008-12-30 Matthias Clasen <mclasen@redhat.com>
188 Bug 565905 – There is no named g_context_group_set_translation_domain()
189 in GOption command line parser
191 * glib/goption.c: Fix a wrong reference in the docs, reported by
194 2008-12-30 Matthias Clasen <mclasen@redhat.com>
204 * glib/gbookmarkfile.c:
205 * glib/gbacktrace.c: Fix some compiler warnings.
207 2008-12-19 Tor Lillqvist <tml@novell.com>
209 * glib/glib.symbols: Add g_thread_get_initialized here,
210 too. Surround g_test_config_vars with ifdef INCLUDE_VARIABLES.
212 2008-12-18 Mike Kestner <mkestner@novell.com>
214 Bug 560676 - function access for g_threads_supported
216 * glib/gthreads.c (g_thread_get_initialized): new accessor for
217 g_threads_supported macro.
218 * glib/gthreads.h: add g_thread_get_initialized
220 2008-12-15 Matthias Clasen <mclasen@redhat.com>
222 * configure.in: Bump version
224 * === Released 2.19.3 ===
226 2008-12-13 Matthias Clasen <mclasen@redhat.com>
230 2008-12-12 Dan Winship <danw@gnome.org>
232 * glib/pltcheck.sh: make this work on x86_64
234 2008-12-12 Behdad Esfahbod <behdad@gnome.org>
236 * glib/guniprop.c: Improve g_unichar_iswide_cjk() docs.
238 2008-12-07 Matthias Clasen <mclasen@redhat.com>
240 Bug 508021 – Add support for the CRIS and CRISv32 architectures
243 * glib/gatomic.c: Add an implementation for the CRIS and CRISv32
244 architectures, by Peter Kjellerstedt
246 2008-12-02 Matthias Clasen <mclasen@redhat.com>
248 * glib/gkeyfile.c: Some more documentation additions.
250 2008-12-01 Matthias Clasen <mclasen@redhat.com>
252 * configure.in: Bump version
254 2008-12-01 Matthias Clasen <mclasen@redhat.com>
256 * === Released 2.19.2 ===
258 2008-12-01 Matthias Clasen <mclasen@redhat.com>
260 * configure.in: Bump version
262 2008-12-01 Matthias Clasen <mclasen@redhat.com>
264 * === Released 2.19.1 ===
268 2008-11-28 Behdad Esfahbod <behdad@gnome.org>
270 Bug 562639 – g_parse_debug_flags() parsing "help"
272 * glib/gutils.c (g_parse_debug_string): Print available keys if
275 2008-11-28 Behdad Esfahbod <behdad@gnome.org>
277 Bug 562638 – GDebugKey key member should be const
279 * glib/gutils.h: Change GDebugKey key member from gchar * to
282 2008-11-28 Matthias Clasen <mclasen@redhat.com>
284 Bug 547264 – Missing "no flags" flag
286 * glib/gregex.c: Mention 0 as value for 'no flags' in some places..
287 Pointed out by Bastien Nocera
289 2008-11-28 Matthias Clasen <mclasen@redhat.com>
291 Bug 562544 – g_key_file_get_string and g_key_file_get_value
292 documentation does not explain the difference
294 * glib/gkeyfile.c (g_key_file_get_string): Explain the difference
295 to g_key_file_get_value(). Pointed out by Mart Raudsepp.
297 2008-11-28 Matthias Clasen <mclasen@redhat.com>
299 * glib/gkeyfile.c: Refer to @locale parameters as locale identifier
302 2008-11-28 Matthias Clasen <mclasen@redhat.com>
304 Bug 557603 – carbon check output misplaced
306 * configure.in: Call AC_PROG_CPP early to avoid it messing up
307 carbon check output. Fix proposed by Christian Persch
309 2008-11-28 Matthias Clasen <mclasen@redhat.com>
311 Bug 559110 – Do not include libintl.h after glibintl.h
313 * glib/glibintl.h: Define bind_textdomain_codeset in the DISABLE_NLS
314 branch. Patch by Peter Kjellerstedt.
316 * glib/gutil.c: Don't include libintl.h directly.
318 2008-11-28 Matthias Clasen <mclasen@redhat.com>
320 Bug 562378 – callback return value not respected for callback option
323 * glib/goption.c (parse_long_option): Return the parse_arg return
324 value even for no-arg callbacks. Patch by Christian Persch
326 * glib/tests/option-context.c: Add a test for a callback which
329 2008-11-23 Christian Persch <chpe@gnome.org>
331 Bug 559413 – g_option_group_set_error_hook docs buglet
333 * glib/goption.c: Doc fix.
335 2008-11-23 Christian Persch <chpe@gnome.org>
337 Bug 560568 – gkeyfile docs buglet
339 * glib/gkeyfile.c: Clarify the docs.
341 2008-11-23 Christian Persch <chpe@gnome.org>
343 Bug 560569 – gkeyfile doesn't use the set list_separator in some cases
345 * glib/gkeyfile.c: (g_key_file_get_locale_string_list),
346 (g_key_file_set_locale_string_list), (g_key_file_set_integer_list),
347 (g_key_file_set_double_list): Use the key file's list separator character,
350 * glib/tests/keyfile.c: (test_lists), (test_reload_idempotency): Test
353 2008-11-21 Christophe Fergeau <teuf@gnome.org>
355 Bug 561212 – GFileReadMoreCallback API doc refers to non-existant function
357 * gio/giotypes.h: fix name of function referred to in
358 GFileReadMoreCallback API documentation
360 2008-11-21 Matthias Clasen <mclasen@redhat.com>
362 * configure.in: Bump gtk-doc dependency to 1.11 for
363 nicer index-generation.
365 2008-11-14 Matthias Clasen <mclasen@redhat.com>
369 2008-11-04 Christian Dywan <christian@imendio.com>
371 Bug 558672 – NULL key lookup using g_hash_table_lookup_extended()
374 Clarify g_hash_table_lookup_extended
376 2008-11-02 Tor Lillqvist <tml@novell.com>
378 * configure.in: Expand also build/win32/vs9/Makefile.
380 2008-10-31 Christian Dywan <christian@imendio.com>
382 Bug 558513 – g_warn_if_fail FIXME in gtestutils
384 * glib/gtestutils.c (g_test_log_send):
385 Turn g_assert into g_warn_if_fail as advised
387 2008-10-31 Grahame Bowland <grahame@angrygoats.net>
389 Bug 558185 – 'parent' variable in g_local_file_get_child_for_display_name()
390 hits g_object_unref(NULL) assertion
393 - remove unused variable. Patch by Matt Johnston <matt@ucc.asn.au>
395 2008-10-29 16:11:14 Tim Janik <timj@gtk.org>
397 * glib/gmacros.h: added G_PASTE() and G_STATIC_ASSERT(), based on
398 patches by Christian Persch and Christian Dywan. Fixes:
399 Bug 558381 - Add support for compile time assertions
401 2008-10-27 Joseph Pingenot <gnomesvn@digitasaru.net>
403 * glib/ghash.c: changed "#GHashTableIterator" to "#GHashTableIter"
404 in the documentation-comments above g_hash_table_foreach_remove()
405 and g_hash_table_foreach_steal() to correctly name and link to
406 GHashTableIter. This affects the GNOME documentation website
407 as well, so further steps are likely necessary beyond this subproject..
409 2008-10-23 Matthias Clasen <mclasen@redhat.com>
411 Bug 557210 – g_compute_checksum_for_* asserts with less than 2 bytes
413 * glib/gchecksum.c (g_compute_checksum_for_data): Accept
414 lengths < 2. Patch by Tommi Komulainen
416 * tests/checksum-test.c: Add a test for this
418 2008-10-23 Matthias Clasen <mclasen@redhat.com>
420 Bug 556921 – gpoll.h breaks hal compilation
422 * glib/gpoll.h: Include gtypes.h. Pointed out by Anis Elleuch
424 2008-10-20 Christian Persch <chpe@gnome.org>
426 Bug 557087 – mem leak in g_content_types_get_registered
428 * gio/gcontenttype.c: Plug a mem leak.
430 2008-10-19 Michael Natterer <mitch@imendio.com>
432 Bug 556186 – gpoll.h breaks gmain.h inclusion
434 * glib/gpoll.h: different fix: disallow direct inclusion
435 unconditionally again but make an exception if included from
436 gmain.h to maintain compatibility.
438 2008-10-16 Matthias Clasen <mclasen@redhat.com>
440 * configure.in: Bump version to 2.19.1
442 * === Released 2.19.0 ===
446 2008-10-14 Christian Persch <chpe@gnome.org>
448 Bug 556186 – gpoll.h breaks gmain.h inclusion
450 * glib/gpoll.h: Only disallow direct inclusion when
451 G_DISABLE_SINGLE_INCLUDES is defined.
453 2008-10-13 Sven Herzberg <sven@imendio.com>
455 Bug 556101 – static mutex yields warnings with g++
456 Reviewed by Tim Janik
458 * configure.in: added an intermediate cast to gpointer
460 2008-10-13 Christian Persch <chpe@gnome.org>
462 Bug 555311 – format not a string literal and no format arguments
465 * glib/gshell.c: Use literal errors where appropriate.
467 2008-10-10 Behdad Esfahbod <behdad@gnome.org>
469 Bug 551355 – [PATCH] Make glib build with libtool 2.2
471 * autogen.sh: Accept libtool 2.2. We are moving towards having
474 2008-10-10 Behdad Esfahbod <behdad@gnome.org>
476 * configure.in: With libtool 2.x, regenerate libtool early.
477 Based on bug 552107, patch by Patryk Zawadzki
479 2008-10-10 Matthias Clasen <mclasen@redhat.com>
481 Bug 554557 – Patch to fix gcc warnings about missing format
486 * glib/grel.c: Fix gcc warnings. Patch by Kjartan Maraas
488 2008-10-10 Matthias Clasen <mclasen@redhat.com>
490 Bug 552861 – glib-2.0.m4 calls system(3) without storing its result
492 * m4macros/glib-2.0.m4: Cosmetic change to make -Werror happy.
493 Patch by Andreas Köhler
495 2008-10-08 Christian Persch <chpe@gnome.org>
497 Bug 555313 – GFileAttribute boxed type get_type function should
498 use usual get_type pattern
500 * gio/gfileattribute.c (g_file_attribute_info_list_get_type): Use
501 g_once_init_enter/leave.
503 2008-10-08 Christian Persch <chpe@gnome.org>
505 Bug 555314 – mem leak in gmarkup
507 * glib/gmarkup.c: (g_markup_parse_context_parse): Plug a mem leak.
509 2008-10-08 Tor Lillqvist <tml@novell.com>
511 Bug 554790 - g_convert() misbehaves with winiconv versions
513 * glib/win_iconv.c (kernel_mbtowc): If converting from ASCII,
514 explicitly check for and reject 8bit chars. MultiByteToWideChar()
515 doesn't, at least not on XP.
517 2008-10-06 Matthias Clasen <mclasen@redhat.com>
519 * glib/gtypes.h: Properly include gmacros.h
521 2008-10-06 Behdad Esfahbod <behdad@gnome.org>
523 Bug 555309 – giochannel breaks on error
524 Patch from Christian Persch
526 * glib/giounix.c (g_io_unix_read), (g_io_unix_write),
527 (g_io_unix_seek), (g_io_unix_close), (g_io_unix_set_flags):
528 Don't shadow err. Oops!
530 2008-10-06 Christophe Fergeau <teuf@gnome.org>
532 Bug 555224 – Improve g_format_size_for_display doc
534 * glib/gfileutils.c: change g_format_size_for_display API doc to
535 explicitly say that the returned string has to be freed. Change
536 spelling of "newly allocated" to "newly-allocated" in g_file_read_link
537 API doc to be more consistent with what is done in that file.
539 2008-10-01 David Zeuthen <davidz@redhat.com>
541 * README.in: Add "Notes about glib 2.20" section detailing the
542 ramifications of the patch from bug #528670.
544 2008-09-30 Behdad Esfahbod <behdad@gnome.org>
546 Bug 554092 – glib doesn't return G_FILE_ERROR_NOENT et al on OS X
548 * glib/giounix.c (g_io_unix_read), (g_io_unix_write),
549 (g_io_unix_seek), (g_io_unix_close), (g_io_unix_set_flags),
550 (g_io_unix_get_flags), (g_io_channel_new_file):
551 Like mclasen says: "well, thats the way errno works...,
552 save it or loose it". Save errno.
554 2008-09-30 Tor Lillqvist <tml@novell.com>
557 * glib/tests/Makefile.am: Bypass gtester related stuff on Windows.
559 2008-09-30 Tor Lillqvist <tml@novell.com>
562 * glib/gnulib/vasnprintf.c: Don't define _GNU_SOURCE on Windows,
563 as _GNU_SOURCE has unintended side effects when compiling against
564 newest mingw headers.
566 2008-09-26 Dan Winship <danw@gnome.org>
568 Bug 553447 – g_assert_no_error()
570 * glib/gtestutils.h (g_assert_no_error, g_assert_error): Macros to
571 assert that a GError is not set, or else is set to a particular
574 * glib/gtestutils.c (g_assertion_message_error): utility for
577 * glib/tests/keyfile.c:
578 * tests/asyncqueue-test.c:
579 * tests/bookmarkfile-test.c:
580 * tests/convert-test.c:
581 * tests/file-test.c: Use g_assert_error/g_assert_no_error
583 2008-09-26 Dan Winship <danw@gnome.org>
585 * glib/gthreadpool.c (wakeup_thread_marker): make this a "const
586 gpointer" rather than a gconstpointer to avoid warnings later
588 * glib/pcre/pcre_ucp_searchfuncs.c:
589 * glib/pcre/pcre_valid_utf8.c: #include "config.h"
591 * glib/tests/printf.c (test_d): fool gcc into not warning about
592 some printf format strings that we know are dubious
594 2008-09-26 Matthias Clasen <mclasen@redhat.com>
596 Bug 553857 – gbacktrace.h requires signal.h
598 * glib/gbacktrace.h: Include signal.h for raise().
599 Pointed out by Sebastien Bacher
601 2008-09-26 Matthias Clasen <mclasen@redhat.com>
603 Bug 553724 – python interpretter path not patched in correctly
605 * glib/Makefile.am: Fix the sed magic to replace python.
607 2008-09-26 Matthias Clasen <mclasen@redhat.com>
609 * glib/gmain.c: Add some more docs.
611 * glib/giochannel.c: Move more docs inline, and improve them
614 2008-09-25 Tor Lillqvist <tml@novell.com>
616 Bug 553820 - gpoll.c: undeclared identifier
619 * glib/gpoll.c: Make the g_poll() function non-static also on
620 Windows. Prefix an underscore to the g_main_poll_debug variable
621 and make it non-static in gmain.c so that it can be used in
622 gpoll.c. Add back missing variable declaration.
624 2008-09-25 Tor Lillqvist <tml@novell.com>
626 * glib/gspawn-win32.c (do_spawn_with_pipes) (do_spawn_directly):
627 Just ignore the child_setup function, never call it. The is no
628 situation in which it could be useful on Windows. Do print a
629 warning, like before.
631 * glib/gspawn.c (g_spawn_async_with_pipes): Corresponding change
634 2008-09-24 Sven Herzberg <sven@imendio.com>
636 Be a little more explcit in the docs. Includes Owen's requested
639 * glib/gmain.c: improved documentation for g_source_attach() and
642 2008-09-23 Michael Natterer <mitch@imendio.com>
644 * glib/glib.h: #include <glib/gpoll.h>
646 * glib/gpoll.h: #error out if gpoll.h is included directly.
648 * glib/gpoll.c: remove trailing whitespace.
650 2008-09-23 Dan Winship <danw@gnome.org>
652 * glib/gpoll.[ch] (g_poll): Move this out of gmain.c and make it part
653 of the public API. (Part of Bug 505361 - gunixinputstream.c assumes
656 2008-09-23 Tor Lillqvist <tml@novell.com>
658 * glib/gmain.c (poll_rest) [Win32]: Fix embarrassing bug: I was
659 passing an incorrect third parameter to memmove(), had forgotten
660 to multiply by the size of the table entry. Just use a for loop
661 instead, clearer. Odd I didn't notice when testing this code.
663 2008-09-19 Hans Petter Jansson <hpj@novell.com>
665 Rewrite most of GHashTable to use open addressing with quadratic
666 probing instead of chaining. This has the potential to reduce memory
667 fragmentation significantly, while being slightly faster due to
668 better locality and no need to call alloc/free functions for nodes.
669 Benchmarks suggest it also uses less memory overall.
671 * glib/ghash.c (prime_mod): Table of suitable primes for
672 initial-probe distribution.
673 (g_hash_table_set_shift): New function.
674 (g_hash_table_find_closest_shift): New function.
675 (g_hash_table_set_shift_from_size): New function.
676 (g_hash_table_lookup_node_for_insertion): New function.
677 (g_hash_table_lookup_node): Rewritten to return node index instead of
678 pointer, use quadratic probe on flat table, and not return insertion
679 data. The latter saves some computation for read-only lookups.
680 (g_hash_table_remove_node): Rewrite to take a pointer directly to the
681 node structure to remove, and clear that. Remove unlinking code.
682 (g_hash_table_remove_all_nodes): Rewrite to not clear nodes
683 individually, but en masse using memset () after potentially calling
685 (iter_remove_or_steal): Use new data structure and algorithm. Vastly
686 simplified - now just a call to g_hash_table_remove_node ().
687 (g_hash_table_resize): New resize code, re-indexing with new prime
688 and cleaning up tombstones.
689 (g_hash_table_maybe_resize): Table may hold 8 buckets minimum, no less
690 than 1/4 load excluding tombstones, and no more than 15/16 load
691 including tombstones. These numbers are the results of a lot of
692 benchmarking with multiple complex applications, and should not be
694 (g_hash_table_iter_next)
695 (g_hash_table_lookup)
696 (g_hash_table_lookup_extended)
697 (g_hash_table_insert_internal)
698 (g_hash_table_remove_internal)
699 (g_hash_table_foreach_remove_or_steal)
700 (g_hash_table_foreach)
702 (g_hash_table_get_keys)
703 (g_hash_table_get_values): Use new data structure and algorithm,
704 fairly trivial changes.
706 2008-09-19 Tor Lillqvist <tml@novell.com>
708 * glib-zip.in: Look for man pages in share/man.
710 * glib/gutils.c (_glib_get_dll_directory)
711 * glib/gspawn-win32.c (do_spawn_with_pipes): Be a bit less
712 restrictive, look for the helper programs in the same folder where
713 the GLib DLL is, not necessarily in a "bin" subfolder of the top
714 GLib installation folder.
716 2008-09-18 Matthias Clasen <mclasen@redhat.com>
718 * configure.in: Bump version to 2.19.0
720 * ChangeLog.pre-2-18: rotate ChangeLog
722 * === branch for 2.18 ===