Hello, In the umidi(4) driver the function alloc_all_endpoints_fixed_ep() returns USBD_NOMEM if mallocarray() fails, but the return value is always USBD_INVAL when 'goto error' happens. OK?
- Michael Index: umidi.c =================================================================== RCS file: /cvs/src/sys/dev/usb/umidi.c,v retrieving revision 1.47 diff -u -p -u -r1.47 umidi.c --- umidi.c 6 Sep 2018 09:48:23 -0000 1.47 +++ umidi.c 6 Sep 2018 14:28:21 -0000 @@ -428,7 +428,6 @@ free_all_endpoints(struct umidi_softc *s static usbd_status alloc_all_endpoints_fixed_ep(struct umidi_softc *sc) { - usbd_status err; struct umq_fixed_ep_desc *fp; struct umidi_endpoint *ep; usb_endpoint_descriptor_t *epd; @@ -458,14 +457,12 @@ alloc_all_endpoints_fixed_ep(struct umid if (!epd) { DPRINTF(("%s: cannot get endpoint descriptor(out:%d)\n", sc->sc_dev.dv_xname, fp->out_ep[i].ep)); - err = USBD_INVAL; goto error; } if (UE_GET_XFERTYPE(epd->bmAttributes)!=UE_BULK || UE_GET_DIR(epd->bEndpointAddress)!=UE_DIR_OUT) { printf("%s: illegal endpoint(out:%d)\n", sc->sc_dev.dv_xname, fp->out_ep[i].ep); - err = USBD_INVAL; goto error; } ep->sc = sc; @@ -485,14 +482,12 @@ alloc_all_endpoints_fixed_ep(struct umid if (!epd) { DPRINTF(("%s: cannot get endpoint descriptor(in:%d)\n", sc->sc_dev.dv_xname, fp->in_ep[i].ep)); - err = USBD_INVAL; goto error; } if (UE_GET_XFERTYPE(epd->bmAttributes)!=UE_BULK || UE_GET_DIR(epd->bEndpointAddress)!=UE_DIR_IN) { printf("%s: illegal endpoint(in:%d)\n", sc->sc_dev.dv_xname, fp->in_ep[i].ep); - err = USBD_INVAL; goto error; } ep->sc = sc; @@ -509,7 +504,7 @@ alloc_all_endpoints_fixed_ep(struct umid error: free(sc->sc_endpoints, M_USBDEV, 0); sc->sc_endpoints = NULL; - return err; + return USBD_INVAL; } static usbd_status