hal-backend-service: Fix to safely convert value from int to gpointer 19/321119/3 accepted/tizen/unified/20250318.072946 accepted/tizen/unified/x/20250318.211721
authorSangYoun Kwak <sy.kwak@samsung.com>
Fri, 14 Mar 2025 05:05:49 +0000 (14:05 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Fri, 14 Mar 2025 12:38:08 +0000 (21:38 +0900)
To capture signal during gmainloop is running, signal handler should be
registered using "g_unix_signal_add" function. It gets handler callback
as GSourceFunc type function and its definition is below:
gboolean (* GSourceFunc) (gpointer user_data);

It gets gpointer as a parameter and there is no way to know which signal
is caught in the callback function, the signal number should be provided
through the user_data.

Signal number is a integer type and user_data is gpointer type, so it
should be passed as a integer pointer but it is inconvenient and
unnecessarily complicated. To simplify it, the signal number can be
converted as gpointer, but this will make compiler produce warnings.

To resolve this, there are a pair of macro functions: GINT_TO_POINTER
and GPOINTER_TO_INT. This macros can remove warnings about
int-to-pointer conversion.(Also this macro is designed for this kind of
works)

Change-Id: I5f9f1df879a5325ac8f1166ba81c2a7bfc4079d0
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
hal-backend-service/hal-backend-service.c

index b665f00118ee4b16ea6aa2d1c50d61cf7a60ccc6..10381a3f32e165cea21743101dae57958bd96604 100644 (file)
@@ -798,7 +798,7 @@ static void hal_backend_service_stop(void)
  */
 static gboolean handle_signal_glib(gpointer data)
 {
-       int signal_number = (int)data;
+       int signal_number = GPOINTER_TO_INT(data);
 
        _D("Received signal(%d)", signal_number);
        if (g_main_task != NULL)
@@ -815,9 +815,9 @@ static void handle_signal_std(int signal_number)
 
 static void attach_signal_handlers(void)
 {
-       g_unix_signal_add(SIGINT, handle_signal_glib, (gpointer)SIGINT);
-       g_unix_signal_add(SIGHUP, handle_signal_glib, (gpointer)SIGHUP);
-       g_unix_signal_add(SIGTERM, handle_signal_glib, (gpointer)SIGTERM);
+       g_unix_signal_add(SIGINT, handle_signal_glib, GINT_TO_POINTER(SIGINT));
+       g_unix_signal_add(SIGHUP, handle_signal_glib, GINT_TO_POINTER(SIGHUP));
+       g_unix_signal_add(SIGTERM, handle_signal_glib, GINT_TO_POINTER(SIGTERM));
 
        signal(SIGQUIT, handle_signal_std);
        signal(SIGABRT, handle_signal_std);