mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-30 20:33:08 +02:00
Merge branch 'gstring-free-warning' into 'main'
Make g_string_free (_, FALSE) warn on unused result See merge request GNOME/glib!3226
This commit is contained in:
commit
155e44652e
@ -709,8 +709,8 @@ key_state_serialise (KeyState *state)
|
|||||||
gsize size;
|
gsize size;
|
||||||
gsize i;
|
gsize i;
|
||||||
|
|
||||||
data = state->strinfo->str;
|
|
||||||
size = state->strinfo->len;
|
size = state->strinfo->len;
|
||||||
|
data = g_string_free_and_steal (g_steal_pointer (&state->strinfo));
|
||||||
|
|
||||||
words = data;
|
words = data;
|
||||||
for (i = 0; i < size / sizeof (guint32); i++)
|
for (i = 0; i < size / sizeof (guint32); i++)
|
||||||
@ -720,9 +720,6 @@ key_state_serialise (KeyState *state)
|
|||||||
data, size, TRUE,
|
data, size, TRUE,
|
||||||
g_free, data);
|
g_free, data);
|
||||||
|
|
||||||
g_string_free (state->strinfo, FALSE);
|
|
||||||
state->strinfo = NULL;
|
|
||||||
|
|
||||||
g_variant_builder_add (&builder, "(y@au)",
|
g_variant_builder_add (&builder, "(y@au)",
|
||||||
state->is_flags ? 'f' :
|
state->is_flags ? 'f' :
|
||||||
state->is_enum ? 'e' : 'c',
|
state->is_enum ? 'e' : 'c',
|
||||||
|
@ -263,14 +263,12 @@ test_pollable_unix_file (void)
|
|||||||
static void
|
static void
|
||||||
test_pollable_unix_nulldev (void)
|
test_pollable_unix_nulldev (void)
|
||||||
{
|
{
|
||||||
int fd;
|
|
||||||
|
|
||||||
g_test_summary ("Test that /dev/null is not considered pollable, but only if "
|
g_test_summary ("Test that /dev/null is not considered pollable, but only if "
|
||||||
"on a system where we are able to tell it apart from devices "
|
"on a system where we are able to tell it apart from devices "
|
||||||
"that actually implement poll");
|
"that actually implement poll");
|
||||||
|
|
||||||
#if defined (HAVE_EPOLL_CREATE) || defined (HAVE_KQUEUE)
|
#if defined (HAVE_EPOLL_CREATE) || defined (HAVE_KQUEUE)
|
||||||
fd = g_open ("/dev/null", O_RDWR, 0);
|
int fd = g_open ("/dev/null", O_RDWR, 0);
|
||||||
g_assert_cmpint (fd, !=, -1);
|
g_assert_cmpint (fd, !=, -1);
|
||||||
|
|
||||||
g_assert_not_pollable (fd);
|
g_assert_not_pollable (fd);
|
||||||
|
@ -3546,10 +3546,7 @@ g_key_file_get_key_comment (GKeyFile *key_file,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (string != NULL)
|
if (string != NULL)
|
||||||
{
|
comment = g_string_free_and_steal (g_steal_pointer (&string));
|
||||||
comment = string->str;
|
|
||||||
g_string_free (string, FALSE);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
comment = NULL;
|
comment = NULL;
|
||||||
|
|
||||||
|
@ -206,8 +206,8 @@ g_string_new_len (const gchar *init,
|
|||||||
* (i.e. %NULL if @free_segment is %TRUE)
|
* (i.e. %NULL if @free_segment is %TRUE)
|
||||||
*/
|
*/
|
||||||
gchar *
|
gchar *
|
||||||
g_string_free (GString *string,
|
(g_string_free) (GString *string,
|
||||||
gboolean free_segment)
|
gboolean free_segment)
|
||||||
{
|
{
|
||||||
gchar *segment;
|
gchar *segment;
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ g_string_free (GString *string,
|
|||||||
gchar *
|
gchar *
|
||||||
g_string_free_and_steal (GString *string)
|
g_string_free_and_steal (GString *string)
|
||||||
{
|
{
|
||||||
return g_string_free (string, FALSE);
|
return (g_string_free) (string, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,10 +57,23 @@ GString* g_string_new_len (const gchar *init,
|
|||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
GString* g_string_sized_new (gsize dfl_size);
|
GString* g_string_sized_new (gsize dfl_size);
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
gchar* g_string_free (GString *string,
|
gchar* (g_string_free) (GString *string,
|
||||||
gboolean free_segment);
|
gboolean free_segment);
|
||||||
GLIB_AVAILABLE_IN_2_76
|
GLIB_AVAILABLE_IN_2_76
|
||||||
gchar* g_string_free_and_steal (GString *string) G_GNUC_WARN_UNUSED_RESULT;
|
gchar* g_string_free_and_steal (GString *string) G_GNUC_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
|
#if G_GNUC_CHECK_VERSION (2, 0) && (GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_76)
|
||||||
|
|
||||||
|
#define g_string_free(str, free_segment) \
|
||||||
|
(__builtin_constant_p (free_segment) ? \
|
||||||
|
((free_segment) ? \
|
||||||
|
(g_string_free) ((str), (free_segment)) : \
|
||||||
|
g_string_free_and_steal (str)) \
|
||||||
|
: \
|
||||||
|
(g_string_free) ((str), (free_segment)))
|
||||||
|
|
||||||
|
#endif /* G_GNUC_CHECK_VERSION (2, 0) && (GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_76) */
|
||||||
|
|
||||||
GLIB_AVAILABLE_IN_2_34
|
GLIB_AVAILABLE_IN_2_34
|
||||||
GBytes* g_string_free_to_bytes (GString *string);
|
GBytes* g_string_free_to_bytes (GString *string);
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
/* gwakeup.c is special -- GIO and some test cases include it. As such,
|
/* gwakeup.c is special -- GIO and some test cases include it. As such,
|
||||||
* it cannot include other glib headers without triggering the single
|
* it cannot include other glib headers without triggering the single
|
||||||
|
@ -472,6 +472,35 @@ test_string_append (void)
|
|||||||
g_string_free (string, TRUE);
|
g_string_free (string, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_string_free (void)
|
||||||
|
{
|
||||||
|
GString *str;
|
||||||
|
gchar *data;
|
||||||
|
|
||||||
|
g_test_message ("Test that g_string_free() macro compiles and doesn’t "
|
||||||
|
"cause any compiler warnings in C++ mode");
|
||||||
|
|
||||||
|
/* Test that g_string_free (_, TRUE) does not cause a warning if
|
||||||
|
* its return value is unused. */
|
||||||
|
str = g_string_new ("test");
|
||||||
|
g_string_free (str, TRUE);
|
||||||
|
|
||||||
|
/* Test that g_string_free (_, FALSE) does not emit a warning if
|
||||||
|
* its return value is used. */
|
||||||
|
str = g_string_new ("test");
|
||||||
|
data = g_string_free (str, FALSE);
|
||||||
|
g_free (data);
|
||||||
|
|
||||||
|
/* Test that g_string_free () with an expression that is always FALSE
|
||||||
|
* at runtime, but the compiler can't know it, does not cause any
|
||||||
|
* warnings if its return value is unused. */
|
||||||
|
str = g_string_new ("test");
|
||||||
|
data = str->str;
|
||||||
|
g_string_free (str, g_test_get_path ()[0] == 0);
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -502,6 +531,7 @@ main (int argc, char *argv[])
|
|||||||
g_test_add_func ("/C++/str-has-suffix", test_str_has_suffix);
|
g_test_add_func ("/C++/str-has-suffix", test_str_has_suffix);
|
||||||
g_test_add_func ("/C++/str-has-suffix/macro", test_str_has_suffix_macro);
|
g_test_add_func ("/C++/str-has-suffix/macro", test_str_has_suffix_macro);
|
||||||
g_test_add_func ("/C++/string-append", test_string_append);
|
g_test_add_func ("/C++/string-append", test_string_append);
|
||||||
|
g_test_add_func ("/C++/string-free", test_string_free);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
@ -83,9 +83,7 @@ subparser_end (GMarkupParseContext *ctx,
|
|||||||
char *result;
|
char *result;
|
||||||
|
|
||||||
string = g_markup_parse_context_pop (ctx);
|
string = g_markup_parse_context_pop (ctx);
|
||||||
result = string->str;
|
result = g_string_free_and_steal (g_steal_pointer (&string));
|
||||||
|
|
||||||
g_string_free (string, FALSE);
|
|
||||||
strings_allocated--;
|
strings_allocated--;
|
||||||
|
|
||||||
if (result == NULL || result[0] == '\0')
|
if (result == NULL || result[0] == '\0')
|
||||||
@ -156,9 +154,7 @@ replay_parser_end (GMarkupParseContext *ctx,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = string->str;
|
result = g_string_free_and_steal (g_steal_pointer (&string));
|
||||||
|
|
||||||
g_string_free (string, FALSE);
|
|
||||||
strings_allocated--;
|
strings_allocated--;
|
||||||
|
|
||||||
if (result == NULL || result[0] == '\0')
|
if (result == NULL || result[0] == '\0')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user