call-forwarding: Refactoring of is_cfu_enabled()
authorOleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
Mon, 6 Feb 2012 12:33:55 +0000 (14:33 +0200)
committerDenis Kenzior <denkenz@gmail.com>
Wed, 22 Feb 2012 10:24:18 +0000 (04:24 -0600)
This also removes the need for uninitialized_var() macro.

src/call-forwarding.c

index 731a38a..8b8d5a8 100644 (file)
 #include "common.h"
 #include "simutil.h"
 
-#define uninitialized_var(x) x = x
-
 #define CALL_FORWARDING_FLAG_CACHED    0x1
 #define CALL_FORWARDING_FLAG_CPHS_CFF  0x2
 
 /* According to 27.007 Spec */
 #define DEFAULT_NO_REPLY_TIMEOUT 20
 
+#define is_cfu_enabled(_cf)                            \
+({                                                     \
+       cf_find_unconditional(_cf) ? TRUE : FALSE;      \
+})
+
 enum call_forwarding_type {
        CALL_FORWARDING_TYPE_UNCONDITIONAL =    0,
        CALL_FORWARDING_TYPE_BUSY =             1,
@@ -221,8 +224,8 @@ static void sim_cphs_cff_update_cb(int ok, void *data)
                ofono_info("Failed to update EFcphs-cff");
 }
 
-static gboolean is_cfu_enabled(struct ofono_call_forwarding *cf,
-                               struct ofono_call_forwarding_condition **out)
+static struct ofono_call_forwarding_condition *cf_find_unconditional(
+                                       struct ofono_call_forwarding *cf)
 {
        GSList *l = cf->cf_conditions[CALL_FORWARDING_TYPE_UNCONDITIONAL];
        struct ofono_call_forwarding_condition *cond;
@@ -237,21 +240,16 @@ static gboolean is_cfu_enabled(struct ofono_call_forwarding *cf,
                if (cond->cls > BEARER_CLASS_VOICE)
                        continue;
 
-               if (out)
-                       *out = cond;
-
-               return TRUE;
+               return cond;
        }
 
-       return FALSE;
+       return NULL;
 }
 
 static void sim_set_cf_indicator(struct ofono_call_forwarding *cf)
 {
-       gboolean cfu_voice;
-       struct ofono_call_forwarding_condition *uninitialized_var(cond);
-
-       cfu_voice = is_cfu_enabled(cf, &cond);
+       struct ofono_call_forwarding_condition *cfu_voice =
+                                               cf_find_unconditional(cf);
 
        if (cf->cfis_record_id) {
                unsigned char data[16];
@@ -263,15 +261,15 @@ static void sim_set_cf_indicator(struct ofono_call_forwarding *cf)
                data[0] = 0x01;
 
                if (cfu_voice) {
-                       number_len = strlen(cond->phone_number.number);
+                       number_len = strlen(cfu_voice->phone_number.number);
 
                        /* CFU indicator Status - Voice */
                        data[1] = 0x01;
                        number_len = (number_len + 1) / 2;
                        data[2] = number_len + 1;
-                       data[3] = cond->phone_number.type;
+                       data[3] = cfu_voice->phone_number.type;
 
-                       sim_encode_bcd_number(cond->phone_number.number,
+                       sim_encode_bcd_number(cfu_voice->phone_number.number,
                                                data + 4);
                } else {
                        data[1] = 0x00;
@@ -317,7 +315,7 @@ static void set_new_cond_list(struct ofono_call_forwarding *cf,
 
        if ((cf->flags & CALL_FORWARDING_FLAG_CPHS_CFF) ||
                        cf->cfis_record_id > 0)
-               old_cfu = is_cfu_enabled(cf, NULL);
+               old_cfu = is_cfu_enabled(cf);
        else
                old_cfu = FALSE;
 
@@ -432,7 +430,7 @@ static void set_new_cond_list(struct ofono_call_forwarding *cf,
 
        if ((cf->flags & CALL_FORWARDING_FLAG_CPHS_CFF) ||
                        cf->cfis_record_id > 0)
-               new_cfu = is_cfu_enabled(cf, NULL);
+               new_cfu = is_cfu_enabled(cf);
        else
                new_cfu = FALSE;
 
@@ -523,7 +521,7 @@ static DBusMessage *cf_get_properties_reply(DBusMessage *msg,
 
        if ((cf->flags & CALL_FORWARDING_FLAG_CPHS_CFF) ||
                        cf->cfis_record_id > 0)
-               status = is_cfu_enabled(cf, NULL);
+               status = is_cfu_enabled(cf);
        else
                status = FALSE;