On Thu, 12 Aug 2021 at 21:40, Nathan Chancellor <nathan@xxxxxxxxxx> wrote: > > After commit 987219ad34a6 ("staging: r8188eu: remove lines from Makefile > that silence build warnings"), clang warns: > > drivers/staging/r8188eu/os_dep/usb_intf.c:726:6: warning: variable > 'status' is used uninitialized whenever 'if' condition is true > [-Wsometimes-uninitialized] > if (!if1) { > ^~~~ > drivers/staging/r8188eu/os_dep/usb_intf.c:741:6: note: uninitialized use > occurs here > if (status != _SUCCESS) > ^~~~~~ > drivers/staging/r8188eu/os_dep/usb_intf.c:726:2: note: remove the 'if' > if its condition is always false > if (!if1) { > ^~~~~~~~~~~ > drivers/staging/r8188eu/os_dep/usb_intf.c:714:12: note: initialize the > variable 'status' to silence this warning > int status; > ^ > = 0 > 1 warning generated. > > status is not initialized if the call to usb_dvobj_init() or > rtw_usb_if1_init() fails. > > Looking at the error function as a whole, the error handling is odd > compared to the rest of the kernel, which prefers to set error codes on > goto paths, rather than a global "status" variable which determines the > error code at the end of the function and function calls in the case of > error. > > Rearrange the error handling of this function to bring it more inline > with how the kernel does it in most cases, which helps readability. > > The call to rtw_usb_if1_deinit() is eliminated because it is not > possible to ever hit it; if rtw_usb_if1_init() fails, the goto call > jumps over the call to rtw_usb_if1_deinit() and in the success case, > status is set to _SUCCESS. > > Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx> > --- > drivers/staging/r8188eu/os_dep/usb_intf.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/drivers/staging/r8188eu/os_dep/usb_intf.c b/drivers/staging/r8188eu/os_dep/usb_intf.c > index a462cb6f3005..667f41125a87 100644 > --- a/drivers/staging/r8188eu/os_dep/usb_intf.c > +++ b/drivers/staging/r8188eu/os_dep/usb_intf.c > @@ -704,20 +704,23 @@ static void rtw_usb_if1_deinit(struct adapter *if1) > static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid) > { > struct adapter *if1 = NULL; > - int status; > struct dvobj_priv *dvobj; > + int ret; > > /* step 0. */ > process_spec_devid(pdid); > > /* Initialize dvobj_priv */ > dvobj = usb_dvobj_init(pusb_intf); > - if (!dvobj) > - goto exit; > + if (!dvobj) { > + ret = -ENODEV; > + goto err; > + } > > if1 = rtw_usb_if1_init(dvobj, pusb_intf); > if (!if1) { > DBG_88E("rtw_init_primarystruct adapter Failed!\n"); > + ret = -ENODEV; > goto free_dvobj; > } > > @@ -726,15 +729,12 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device > rtw_signal_process(ui_pid[1], SIGUSR2); > } > > - status = _SUCCESS; > + return 0; > > - if (status != _SUCCESS && if1) > - rtw_usb_if1_deinit(if1); > free_dvobj: > - if (status != _SUCCESS) > - usb_dvobj_deinit(pusb_intf); > -exit: > - return status == _SUCCESS ? 0 : -ENODEV; > + usb_dvobj_deinit(pusb_intf); > +err: > + return ret; > } > > /* > -- > 2.33.0.rc2 > Looks good as far as I can see, nicely done. Thanks. Acked-by: Phillip Potter <phil@xxxxxxxxxxxxxxxx> Regards, Phil