mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-05-04 04:56:52 +02:00
Merge branch 'mr/issue-1575' into 'master'
Enable compile time check of g_date_time_format() format See merge request GNOME/glib!412
This commit is contained in:
commit
e7738e46a8
@ -442,6 +442,7 @@ G_GNUC_FALLTHROUGH
|
|||||||
G_GNUC_UNUSED
|
G_GNUC_UNUSED
|
||||||
G_GNUC_PRINTF
|
G_GNUC_PRINTF
|
||||||
G_GNUC_SCANF
|
G_GNUC_SCANF
|
||||||
|
G_GNUC_STRFTIME
|
||||||
G_GNUC_FORMAT
|
G_GNUC_FORMAT
|
||||||
G_GNUC_NULL_TERMINATED
|
G_GNUC_NULL_TERMINATED
|
||||||
G_GNUC_WARN_UNUSED_RESULT
|
G_GNUC_WARN_UNUSED_RESULT
|
||||||
|
17
glib/docs.c
17
glib/docs.c
@ -2359,6 +2359,23 @@
|
|||||||
* for details.
|
* for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* G_GNUC_STRFTIME:
|
||||||
|
* @format_idx: the index of the argument corresponding to
|
||||||
|
* the format string (the arguments are numbered from 1)
|
||||||
|
*
|
||||||
|
* Expands to the GNU C strftime format function attribute if the compiler
|
||||||
|
* is gcc. This is used for declaring functions which take a format argument
|
||||||
|
* which is passed to strftime() or an API implementing its formats. It allows
|
||||||
|
* the compiler check the format passed to the function.
|
||||||
|
*
|
||||||
|
* See the
|
||||||
|
* [GNU C documentation](https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-Wformat-3288)
|
||||||
|
* for details.
|
||||||
|
*
|
||||||
|
* Since: 2.60
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* G_GNUC_FORMAT:
|
* G_GNUC_FORMAT:
|
||||||
* @arg_idx: the index of the argument
|
* @arg_idx: the index of the argument
|
||||||
|
@ -261,7 +261,7 @@ GDateTime * g_date_time_to_utc (GDateTi
|
|||||||
|
|
||||||
GLIB_AVAILABLE_IN_ALL
|
GLIB_AVAILABLE_IN_ALL
|
||||||
gchar * g_date_time_format (GDateTime *datetime,
|
gchar * g_date_time_format (GDateTime *datetime,
|
||||||
const gchar *format) G_GNUC_MALLOC;
|
const gchar *format) G_GNUC_MALLOC G_GNUC_STRFTIME (2);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -165,11 +165,15 @@
|
|||||||
__attribute__((__format__ (gnu_printf, format_idx, arg_idx)))
|
__attribute__((__format__ (gnu_printf, format_idx, arg_idx)))
|
||||||
#define G_GNUC_SCANF( format_idx, arg_idx ) \
|
#define G_GNUC_SCANF( format_idx, arg_idx ) \
|
||||||
__attribute__((__format__ (gnu_scanf, format_idx, arg_idx)))
|
__attribute__((__format__ (gnu_scanf, format_idx, arg_idx)))
|
||||||
|
#define G_GNUC_STRFTIME( format_idx ) \
|
||||||
|
__attribute__((__format__ (gnu_strftime, format_idx, 0)))
|
||||||
#else
|
#else
|
||||||
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
|
#define G_GNUC_PRINTF( format_idx, arg_idx ) \
|
||||||
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
|
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
|
||||||
#define G_GNUC_SCANF( format_idx, arg_idx ) \
|
#define G_GNUC_SCANF( format_idx, arg_idx ) \
|
||||||
__attribute__((__format__ (__scanf__, format_idx, arg_idx)))
|
__attribute__((__format__ (__scanf__, format_idx, arg_idx)))
|
||||||
|
#define G_GNUC_STRFTIME( format_idx ) \
|
||||||
|
__attribute__((__format__ (__strftime__, format_idx, 0)))
|
||||||
#endif
|
#endif
|
||||||
#define G_GNUC_FORMAT( arg_idx ) \
|
#define G_GNUC_FORMAT( arg_idx ) \
|
||||||
__attribute__((__format_arg__ (arg_idx)))
|
__attribute__((__format_arg__ (arg_idx)))
|
||||||
@ -184,6 +188,7 @@
|
|||||||
#else /* !__GNUC__ */
|
#else /* !__GNUC__ */
|
||||||
#define G_GNUC_PRINTF( format_idx, arg_idx )
|
#define G_GNUC_PRINTF( format_idx, arg_idx )
|
||||||
#define G_GNUC_SCANF( format_idx, arg_idx )
|
#define G_GNUC_SCANF( format_idx, arg_idx )
|
||||||
|
#define G_GNUC_STRFTIME( format_idx )
|
||||||
#define G_GNUC_FORMAT( arg_idx )
|
#define G_GNUC_FORMAT( arg_idx )
|
||||||
#define G_GNUC_NORETURN
|
#define G_GNUC_NORETURN
|
||||||
#define G_GNUC_CONST
|
#define G_GNUC_CONST
|
||||||
|
@ -25,6 +25,14 @@
|
|||||||
#include <glib/gstdio.h>
|
#include <glib/gstdio.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
|
/* The tests below exercise invalid formats and y2k-unsafe formats,
|
||||||
|
* so we need to silence the warnings here to pass.
|
||||||
|
*/
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat"
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat-y2k"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ASSERT_DATE(dt,y,m,d) G_STMT_START { \
|
#define ASSERT_DATE(dt,y,m,d) G_STMT_START { \
|
||||||
g_assert_nonnull ((dt)); \
|
g_assert_nonnull ((dt)); \
|
||||||
g_assert_cmpint ((y), ==, g_date_time_get_year ((dt))); \
|
g_assert_cmpint ((y), ==, g_date_time_get_year ((dt))); \
|
||||||
|
@ -18,6 +18,14 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <glib/glib.h>
|
#include <glib/glib.h>
|
||||||
|
|
||||||
|
/* The whole purpose of this test is to pass the command line argument
|
||||||
|
* to g_date_time_format(), so the format argument cannot be compile-
|
||||||
|
* time checked. Disable the inevitable compiler warning.
|
||||||
|
*/
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user