1#ifndef _ERROR_H_ 2#define _ERROR_H_ 3 4typedef enum { 5 USB_ERROR_TYPE_NONE = 0, 6 USB_ERROR_TYPE_STRING, 7 USB_ERROR_TYPE_ERRNO, 8} usb_error_type_t; 9 10extern char usb_error_str[1024]; 11extern int usb_error_errno; 12extern usb_error_type_t usb_error_type; 13 14#define USB_ERROR(x) \ 15 do { \ 16 usb_error_type = USB_ERROR_TYPE_ERRNO; \ 17 usb_error_errno = x; \ 18 return x; \ 19 } while (0) 20 21#define USB_ERROR_STR(x, format, args...) \ 22 do { \ 23 usb_error_type = USB_ERROR_TYPE_STRING; \ 24 snprintf(usb_error_str, sizeof(usb_error_str) - 1, format, ## args); \ 25 if (usb_debug >= 2) \ 26 fprintf(stderr, "USB error: %s\n", usb_error_str); \ 27 return x; \ 28 } while (0) 29 30#endif /* _ERROR_H_ */ 31 32