elocation: Cleanup status code handling

The code is an integer enum so we should really handle it like this. Use dummy
free callbacks for ecore_event_add as we pass not malloced data in.
This commit is contained in:
Stefan Schmidt 2014-11-11 11:46:14 +01:00
parent 699e5a2bed
commit 510773a99d
1 changed files with 8 additions and 14 deletions

View File

@ -34,7 +34,7 @@ static Elocation_Position *position = NULL;
static Elocation_Address *addr_geocode = NULL; static Elocation_Address *addr_geocode = NULL;
static Elocation_Position *pos_geocode = NULL; static Elocation_Position *pos_geocode = NULL;
static Elocation_Velocity *velocity = NULL; static Elocation_Velocity *velocity = NULL;
static int *status = -1; /* 0 is a valid status code */ static int status = -1; /* 0 is a valid status code */
static char nmea_sentence[256]; static char nmea_sentence[256];
int _elocation_log_dom = -1; int _elocation_log_dom = -1;
@ -740,35 +740,29 @@ status_cb(void *data EINA_UNUSED, const Eldbus_Message *reply, Eldbus_Pending *p
return; return;
} }
/* We need this to be malloced to be passed to ecore_event_add. Or provide a dummy free callback. */ if (!eldbus_message_arguments_get(reply,"i", &status))
status = malloc(sizeof(*status));
if (!eldbus_message_arguments_get(reply,"i", status))
{ {
ERR("Error: Unable to unmarshall status"); ERR("Error: Unable to unmarshall status");
return; return;
} }
address_provider->status = position_provider->status = *status; address_provider->status = position_provider->status = status;
/* Send out an event to all interested parties that we have an update */ /* Send out an event to all interested parties that we have an update */
ecore_event_add(ELOCATION_EVENT_STATUS, status, NULL, NULL); ecore_event_add(ELOCATION_EVENT_STATUS, &status, _dummy_free, NULL);
} }
static void static void
status_signal_cb(void *data EINA_UNUSED, const Eldbus_Message *reply) status_signal_cb(void *data EINA_UNUSED, const Eldbus_Message *reply)
{ {
/* We need this to be malloced to be passed to ecore_event_add. Or provide a dummy free callback. */ if (!eldbus_message_arguments_get(reply,"i", &status))
status = malloc(sizeof(*status));
if (!eldbus_message_arguments_get(reply,"i", status))
{ {
ERR("Error: Unable to unmarshall status"); ERR("Error: Unable to unmarshall status");
return; return;
} }
address_provider->status = position_provider->status = *status; address_provider->status = position_provider->status = status;
/* Send out an event to all interested parties that we have an update */ /* Send out an event to all interested parties that we have an update */
ecore_event_add(ELOCATION_EVENT_STATUS, status, NULL, NULL); ecore_event_add(ELOCATION_EVENT_STATUS, &status, _dummy_free, NULL);
} }
static void static void
@ -1133,7 +1127,7 @@ elocation_status_get(int *status_shadow)
{ {
if (status < 0) return EINA_FALSE; if (status < 0) return EINA_FALSE;
status_shadow = status; status_shadow = &status;
return EINA_TRUE; return EINA_TRUE;
} }