Hi Giacinto,

Ugh.  I really hate GCC people sometimes.  While the warning is strictly
correct, it is useless for 99% of the code and forces us to jump through
hoops.  Anyway, I would propose we use the following pattern:

int auth_method_to_qmi(enum ofono_auth_method method, uint8_t *out_auth)
{
         switch (method)
         case CHAP:
                 *out_auth = ...
                 return 0;
         case:
                 ...
         }

         return -ERANGE;
}


I tried but it is worst. Now gcc complains about potentially
uninitialized variable.

Here is the code
static int auth_method_to_qmi(enum ofono_gprs_auth_method method,
uint8_t *out_auth)
{
   switch (method) {
   case OFONO_GPRS_AUTH_METHOD_CHAP:
     *out_auth = QMI_WDS_AUTHENTICATION_CHAP;
     return 0;
   case OFONO_GPRS_AUTH_METHOD_PAP:
     *out_auth = QMI_WDS_AUTHENTICATION_PAP;
     return 0;
   case OFONO_GPRS_AUTH_METHOD_NONE:
     *out_auth = QMI_WDS_AUTHENTICATION_NONE;
     return 0;
   }
   return -1;
}

static void qmi_activate_primary(struct ofono_gprs_context *gc,
[...]
   uint8_t auth;
[...]
   auth_method_to_qmi(ctx->auth_method, &auth);

Well you might want to check for an error return here.  e.g.

if (auth_method_to_qmi() < 0) {
        CALLBACK_WITH_FAILURE();
        return;
}


and here the compiler answer:

drivers/qmimodem/gprs-context.c:288:2: error: ‘auth’ may be used
uninitialized in this function [-Werror=maybe-uninitialized]
   qmi_param_append_uint8(param, QMI_WDS_PARAM_AUTHENTICATION_PREFERENCE,
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       auth);
       ~~~~~

It doesn't look like we have a clean way out of this. I can
pre-initialize the variable, add a default to the switch, return the
value for uint8 out_auth,
but none of these will give you a clean solution.

No, we should not initialize variables unnecessarily. This is even documented: doc/coding-style.txt, item M7


I prefer therefore to keep it as it is, with a comment about why it is done so.


I prefer we set a good example :)

Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to