diff options
-rw-r--r-- | README.cmake | 4 | ||||
-rw-r--r-- | cmake/CMakeLists.txt | 7 | ||||
-rw-r--r-- | dbus/dbus-internals.h | 5 | ||||
-rw-r--r-- | dbus/dbus-macros.h | 23 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.h | 16 | ||||
-rw-r--r-- | dbus/dbus-userdb.h | 4 | ||||
-rw-r--r-- | test/test-utils.h | 8 |
7 files changed, 45 insertions, 22 deletions
diff --git a/README.cmake b/README.cmake index 6d5621fd..2fe33dcd 100644 --- a/README.cmake +++ b/README.cmake @@ -165,6 +165,10 @@ x11 only: // Build with X11 auto launch support DBUS_BUILD_X11:BOOL=ON +MSVC only (Visual Studio >= 2012): +// Enable code analyzing for MSVC compiler: /analyze +DBUS_MSVC_ANALYZE:BOOL=OFF + Note: The above mentioned options could be extracted after configuring from the output of running "<maketool> help-options" diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3becfc90..c1f0f165 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -170,6 +170,7 @@ if(MSVC) ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /FIconfig.h") SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /FIconfig.h") + option (DBUS_MSVC_ANALYZE "Enable code analyzing for MSVC compiler: /analyze" OFF) endif() # @@ -212,6 +213,9 @@ if(MSVC) # 4114 same type qualifier used more than once # 4133 'type' : incompatible types - from 'type1' to 'type2' set(WARNINGS_ERRORS "4002 4003 4013 4028 4031 4047 4114 4133") + if(DBUS_MSVC_ANALYZE AND MSVC_VERSION GREATER 1600) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /analyze") + endif() else() set(WARNINGS "sign-compare") set(WARNINGS_DISABLED "") @@ -588,6 +592,9 @@ message(" Docbook Generator: ${DOCBOOK_GENERATOR_NAME} " message(" gcc coverage profiling: ${DBUS_GCOV_ENABLED} ") +if(MSVC) +message(" MSVC code analyze mode: ${DBUS_MSVC_ANALYZE} ") +endif() message(" Building unit tests: ${DBUS_BUILD_TESTS} ") message(" Building with GLib: ${DBUS_WITH_GLIB} ") message(" Building verbose mode: ${DBUS_ENABLE_VERBOSE_MODE} ") diff --git a/dbus/dbus-internals.h b/dbus/dbus-internals.h index 57a67d08..ae9ab626 100644 --- a/dbus/dbus-internals.h +++ b/dbus/dbus-internals.h @@ -366,7 +366,8 @@ typedef enum _DBUS_N_GLOBAL_LOCKS } DBusGlobalLock; -dbus_bool_t _dbus_lock (DBusGlobalLock lock) _DBUS_GNUC_WARN_UNUSED_RESULT; +_DBUS_WARN_UNUSED_RESULT +dbus_bool_t _dbus_lock (DBusGlobalLock lock); void _dbus_unlock (DBusGlobalLock lock); #define _DBUS_LOCK_NAME(name) _DBUS_LOCK_##name @@ -399,7 +400,7 @@ union DBusGUID char as_bytes[DBUS_UUID_LENGTH_BYTES]; /**< guid as 16 single-byte values */ }; -DBUS_PRIVATE_EXPORT _DBUS_GNUC_WARN_UNUSED_RESULT +DBUS_PRIVATE_EXPORT _DBUS_WARN_UNUSED_RESULT dbus_bool_t _dbus_generate_uuid (DBusGUID *uuid, DBusError *error); DBUS_PRIVATE_EXPORT diff --git a/dbus/dbus-macros.h b/dbus/dbus-macros.h index 2c8956e3..bf3a0b0d 100644 --- a/dbus/dbus-macros.h +++ b/dbus/dbus-macros.h @@ -92,10 +92,24 @@ #define DBUS_ALLOC_SIZE2(x,y) #endif -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -#define _DBUS_GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +/** @def _DBUS_WARN_UNUSED_RESULT + * + * An attribute for functions whose result must be checked by the caller. + * + * This macro is used in function declarations. Unlike gcc-specific + * attributes, to avoid compilation failure with MSVC it must appear + * somewhere before the function name in the declaration. Our preferred + * coding style is to place it before the return type, for example: + * + * DBUS_PRIVATE_EXPORT _DBUS_WARN_UNUSED_RESULT + * dbus_bool_t _dbus_user_database_lock_system (void); + */ +#if defined(_MSC_VER) && (_MSC_VER >= 1700) +#define _DBUS_WARN_UNUSED_RESULT _Must_inspect_result_ +#elif (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +#define _DBUS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #else -#define _DBUS_GNUC_WARN_UNUSED_RESULT +#define _DBUS_WARN_UNUSED_RESULT #endif /** @def _DBUS_GNUC_PRINTF @@ -104,9 +118,6 @@ /** @def _DBUS_GNUC_NORETURN * used to tell gcc about functions that never return, such as _dbus_abort() */ -/** @def _DBUS_GNUC_WARN_UNUSED_RESULT - * used to tell gcc about functions whose result must be used - */ /* Normally docs are in .c files, but there isn't a .c file for this. */ /** diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 171af7b5..8961c33f 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -132,18 +132,18 @@ typedef struct { SOCKET sock; } DBusSocket; # define DBUS_SOCKET_FORMAT "Iu" # define DBUS_SOCKET_INIT { INVALID_SOCKET } -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline SOCKET _dbus_socket_printable (DBusSocket s) { return s.sock; } -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline dbus_bool_t _dbus_socket_is_valid (DBusSocket s) { return s.sock != INVALID_SOCKET; } static inline void _dbus_socket_invalidate (DBusSocket *s) { s->sock = INVALID_SOCKET; } -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline int _dbus_socket_get_int (DBusSocket s) { return (int)s.sock; } @@ -153,24 +153,24 @@ typedef struct { int fd; } DBusSocket; # define DBUS_SOCKET_FORMAT "d" # define DBUS_SOCKET_INIT { -1 } -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline int _dbus_socket_printable (DBusSocket s) { return s.fd; } -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline dbus_bool_t _dbus_socket_is_valid (DBusSocket s) { return s.fd >= 0; } static inline void _dbus_socket_invalidate (DBusSocket *s) { s->fd = -1; } -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline int _dbus_socket_get_int (DBusSocket s) { return s.fd; } #endif /* not DBUS_WIN */ -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT static inline DBusSocket _dbus_socket_get_invalid (void) { @@ -469,7 +469,7 @@ const char* _dbus_get_tmpdir (void); /** * Random numbers */ -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT dbus_bool_t _dbus_generate_random_bytes_buffer (char *buffer, int n_bytes, DBusError *error); diff --git a/dbus/dbus-userdb.h b/dbus/dbus-userdb.h index 53fc90b5..ac1497db 100644 --- a/dbus/dbus-userdb.h +++ b/dbus/dbus-userdb.h @@ -93,8 +93,8 @@ void _dbus_group_info_free_allocated (DBusGroupInfo *info); DBUS_PRIVATE_EXPORT DBusUserDatabase* _dbus_user_database_get_system (void); -DBUS_PRIVATE_EXPORT -dbus_bool_t _dbus_user_database_lock_system (void) _DBUS_GNUC_WARN_UNUSED_RESULT; +DBUS_PRIVATE_EXPORT _DBUS_WARN_UNUSED_RESULT +dbus_bool_t _dbus_user_database_lock_system (void); DBUS_PRIVATE_EXPORT void _dbus_user_database_unlock_system (void); void _dbus_user_database_flush_system (void); diff --git a/test/test-utils.h b/test/test-utils.h index 860ee216..14ea365d 100644 --- a/test/test-utils.h +++ b/test/test-utils.h @@ -10,16 +10,16 @@ #include <dbus/dbus-internals.h> typedef DBusLoop TestMainContext; -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT TestMainContext *test_main_context_get (void); -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT TestMainContext *test_main_context_try_get (void); TestMainContext *test_main_context_ref (TestMainContext *ctx); void test_main_context_unref (TestMainContext *ctx); void test_main_context_iterate (TestMainContext *ctx, dbus_bool_t may_block); -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT dbus_bool_t test_connection_try_setup (TestMainContext *ctx, DBusConnection *connection); void test_connection_setup (TestMainContext *ctx, @@ -27,7 +27,7 @@ void test_connection_setup (TestMainContext *ctx, void test_connection_shutdown (TestMainContext *ctx, DBusConnection *connection); -_DBUS_GNUC_WARN_UNUSED_RESULT +_DBUS_WARN_UNUSED_RESULT dbus_bool_t test_server_try_setup (TestMainContext *ctx, DBusServer *server); void test_server_setup (TestMainContext *ctx, |