Properly check USB errors using sys/errno.h.

This commit is contained in:
Cy Schubert 2020-11-14 07:58:15 +00:00
parent 4d511e5a9e
commit fe02968432
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=555091
20 changed files with 22 additions and 842 deletions

View file

@ -3,7 +3,7 @@
PORTNAME= nut
PORTVERSION= ${NUT_COMMIT_DATE}
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= sysutils
PKGNAMESUFFIX= -devel
# MASTER_SITES= http://www.networkupstools.org/source/${PORTVERSION:R}/

View file

@ -1,79 +0,0 @@
--- drivers/blazer_usb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/blazer_usb.c
@@ -118,9 +118,9 @@ static int phoenix_command(const char *cmd, char *buf,
*/
switch (ret)
{
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
usb_clear_halt(udev, 0x81);
- case -ETIMEDOUT: /* Connection timed out */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
break;
}
@@ -188,7 +188,7 @@ static int ippon_command(const char *cmd, char *buf, s
0x09, 0x2, 0, &tmp[i], 8, 1000);
if (ret <= 0) {
- upsdebugx(3, "send: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
+ upsdebugx(3, "send: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
return ret;
}
}
@@ -203,7 +203,7 @@ static int ippon_command(const char *cmd, char *buf, s
* will happen after successfully writing a command to the UPS)
*/
if (ret <= 0) {
- upsdebugx(3, "read: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
+ upsdebugx(3, "read: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
return ret;
}
@@ -423,38 +423,28 @@ int blazer_command(const char *cmd, char *buf, size_t
switch (ret)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
-
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
if (usb_clear_halt(udev, 0x81) == 0) {
upsdebugx(1, "Stall condition cleared");
break;
}
-#ifdef ETIME
- case -ETIME: /* Timer expired */
-#endif
if (usb_reset(udev) == 0) {
upsdebugx(1, "Device reset handled");
}
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
usb->close(udev);
udev = NULL;
break;
- case -ETIMEDOUT: /* Connection timed out */
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
default:
break;
}

View file

@ -1,23 +0,0 @@
--- drivers/libshut.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/libshut.c
@@ -37,6 +37,7 @@
#include "nut_stdint.h" /* for uint8_t, uint16_t, uint32_t */
#include "serial.h"
+#include "libusb.h"
#include "libshut.h"
#include "common.h" /* for xmalloc, upsdebugx prototypes */
@@ -809,10 +810,10 @@ int shut_get_string_simple(int upsfd, int index,
return ret;
if (tbuf[1] != USB_DT_STRING)
- return -EIO;
+ return LIBUSB_ERROR_IO;
if (tbuf[0] > ret)
- return -EFBIG;
+ return LIBUSB_ERROR_OVERFLOW;
/* skip the UTF8 zero'ed high bytes */
for (di = 0, si = 2; si < tbuf[0]; si += 2)

View file

@ -1,65 +0,0 @@
--- drivers/libusb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/libusb.c
@@ -428,26 +428,21 @@ static int libusb_strerror(const int ret, const char *
switch(ret)
{
- case -EBUSY: /* Device or resource busy */
- case -EPERM: /* Operation not permitted */
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
- case -EPIPE: /* Broken pipe */
- case -ENOSYS: /* Function not implemented */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
+ case LIBUSB_ERROR_NOT_SUPPORTED: /* Function not implemented */
upslogx(LOG_DEBUG, "%s: %s", desc, usb_strerror());
return ret;
- case -ETIMEDOUT: /* Connection timed out */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
upsdebugx(2, "%s: Connection timed out", desc);
return 0;
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
upsdebugx(2, "%s: %s", desc, usb_strerror());
return 0;
@@ -478,7 +473,7 @@ static int libusb_get_report(usb_dev_handle *udev, int
0, raw_buf, ReportSize, USB_TIMEOUT);
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
- if (ret == -EPIPE) {
+ if (ret == LIBUSB_ERROR_PIPE) {
return 0;
}
@@ -500,7 +495,7 @@ static int libusb_set_report(usb_dev_handle *udev, int
0, raw_buf, ReportSize, USB_TIMEOUT);
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
- if (ret == -EPIPE) {
+ if (ret == LIBUSB_ERROR_PIPE) {
return 0;
}
@@ -532,7 +527,7 @@ static int libusb_get_interrupt(usb_dev_handle *udev,
ret = usb_interrupt_read(udev, 0x81, (char *)buf, bufsize, timeout);
/* Clear stall condition */
- if (ret == -EPIPE) {
+ if (ret == LIBUSB_ERROR_PIPE) {
ret = usb_clear_halt(udev, 0x81);
}

View file

@ -1,27 +0,0 @@
--- drivers/libusb.h.orig 2015-12-29 12:08:34 UTC
+++ drivers/libusb.h
@@ -36,6 +36,24 @@
#include <usb.h> /* libusb header file */
+/* libusb 1.0 errors used by FreeBSD */
+enum libusb_error {
+ LIBUSB_SUCCESS = 0,
+ LIBUSB_ERROR_IO = -1,
+ LIBUSB_ERROR_INVALID_PARAM = -2,
+ LIBUSB_ERROR_ACCESS = -3,
+ LIBUSB_ERROR_NO_DEVICE = -4,
+ LIBUSB_ERROR_NOT_FOUND = -5,
+ LIBUSB_ERROR_BUSY = -6,
+ LIBUSB_ERROR_TIMEOUT = -7,
+ LIBUSB_ERROR_OVERFLOW = -8,
+ LIBUSB_ERROR_PIPE = -9,
+ LIBUSB_ERROR_INTERRUPTED = -10,
+ LIBUSB_ERROR_NO_MEM = -11,
+ LIBUSB_ERROR_NOT_SUPPORTED = -12,
+ LIBUSB_ERROR_OTHER = -99,
+};
+
extern upsdrv_info_t comm_upsdrv_info;
/*!

View file

@ -0,0 +1,10 @@
--- drivers/main.h.orig 2020-11-13 23:48:39.471828000 -0800
+++ drivers/main.h 2020-11-13 23:49:42.830476000 -0800
@@ -1,6 +1,7 @@
#ifndef MAIN_H
#define MAIN_H
+#include <sys/errno.h>
#include "common.h"
#include "upsconf.h"
#include "dstate.h"

View file

@ -1,79 +0,0 @@
--- drivers/nutdrv_qx.c.orig 2016-03-08 12:01:11 UTC
+++ drivers/nutdrv_qx.c
@@ -561,9 +561,9 @@ static int phoenix_command(const char *cmd, char *buf,
* In order to read correct replies we need to flush the output buffers of the converter until we get no more data (ie, it times out). */
switch (ret)
{
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
usb_clear_halt(udev, 0x81);
- case -ETIMEDOUT: /* Connection timed out */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
break;
}
@@ -635,7 +635,7 @@ static int ippon_command(const char *cmd, char *buf, s
ret = usb_control_msg(udev, USB_ENDPOINT_OUT + USB_TYPE_CLASS + USB_RECIP_INTERFACE, 0x09, 0x2, 0, &tmp[i], 8, 1000);
if (ret <= 0) {
- upsdebugx(3, "send: %s (%d)", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out", ret);
+ upsdebugx(3, "send: %s (%d)", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out", ret);
return ret;
}
@@ -648,7 +648,7 @@ static int ippon_command(const char *cmd, char *buf, s
/* Any errors here mean that we are unable to read a reply (which will happen after successfully writing a command to the UPS) */
if (ret <= 0) {
- upsdebugx(3, "read: %s (%d)", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out", ret);
+ upsdebugx(3, "read: %s (%d)", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out", ret);
return ret;
}
@@ -2124,38 +2124,28 @@ static int qx_command(const char *cmd, char *buf, size
switch (ret)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
-
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
if (usb_clear_halt(udev, 0x81) == 0) {
upsdebugx(1, "Stall condition cleared");
break;
}
- #ifdef ETIME
- case -ETIME: /* Timer expired */
- #endif /* ETIME */
if (usb_reset(udev) == 0) {
upsdebugx(1, "Device reset handled");
}
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
usb->close(udev);
udev = NULL;
break;
- case -ETIMEDOUT: /* Connection timed out */
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
default:
break;
}

View file

@ -1,53 +0,0 @@
--- drivers/riello_usb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/riello_usb.c
@@ -346,42 +346,28 @@ int riello_command(uint8_t *cmd, uint8_t *buf, uint16_
switch (ret)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
-
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
if (usb_clear_halt(udev, 0x81) == 0) {
upsdebugx(1, "Stall condition cleared");
break;
}
-#ifdef ETIME
- case -ETIME: /* Timer expired */
-#endif
if (usb_reset(udev) == 0) {
upsdebugx(1, "Device reset handled");
}
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
usb->close(udev);
udev = NULL;
break;
- case -ETIMEDOUT: /* Connection timed out */
- upsdebugx (3, "riello_command err: Resource temporarily unavailable");
-
-
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
- break;
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
default:
break;
}

View file

@ -1,20 +0,0 @@
--- drivers/tripplite_usb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/tripplite_usb.c
@@ -499,7 +499,7 @@ void usb_comm_fail(int res, const char *msg)
static int try = 0;
switch(res) {
- case -EBUSY:
+ case LIBUSB_ERROR_BUSY:
upslogx(LOG_WARNING, "%s: Device claimed by another process", msg);
fatalx(EXIT_FAILURE, "Terminating: EBUSY");
break;
@@ -907,7 +907,7 @@ void upsdrv_initinfo(void)
if(tl_model != TRIPP_LITE_SMARTPRO ) {
ret = send_cmd(w_msg, sizeof(w_msg), w_value, sizeof(w_value)-1);
if(ret <= 0) {
- if(ret == -EPIPE) {
+ if(ret == LIBUSB_ERROR_PIPE) {
fatalx(EXIT_FAILURE, "Could not reset watchdog. Please check and"
"see if usbhid-ups(8) works with this UPS.");
} else {

View file

@ -1,74 +0,0 @@
--- drivers/usbhid-ups.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/usbhid-ups.c
@@ -30,6 +30,7 @@
#define DRIVER_VERSION "0.41"
#include "main.h"
+#include "libusb.h"
#include "libhid.h"
#include "usbhid-ups.h"
#include "hidparser.h"
@@ -790,22 +790,14 @@ void upsdrv_updateinfo(void)
/* Get HID notifications on Interrupt pipe first */
if (use_interrupt_pipe == TRUE) {
evtCount = HIDGetEvents(udev, event, MAX_EVENT_NUM);
- switch (evtCount)
- {
- case -EBUSY: /* Device or resource busy */
- upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ if (evtCount < 0) {
+ if (evtCount == LIBUSB_ERROR_BUSY) {
+ upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
+ }
/* Uh oh, got to reconnect! */
hd = NULL;
- return;
- default:
+ } else {
upsdebugx(1, "Got %i HID objects...", (evtCount >= 0) ? evtCount : 0);
- break;
}
} else {
evtCount = 0;
@@ -1280,14 +1272,12 @@ static bool_t hid_ups_walk(walkmode_t mode)
switch (retcode)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
hd = NULL;
return FALSE;
@@ -1298,12 +1288,9 @@ static bool_t hid_ups_walk(walkmode_t mode)
case 0:
continue;
- case -ETIMEDOUT: /* Connection timed out */
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
default:
/* Don't know what happened, try again later... */
continue;

View file

@ -3,7 +3,7 @@
PORTNAME= nut
PORTVERSION= 2.7.4
PORTREVISION= 17
PORTREVISION= 18
CATEGORIES= sysutils
MASTER_SITES= http://www.networkupstools.org/source/${PORTVERSION:R}/
DISTFILES= ${DISTNAME}${EXTRACT_SUFX}

View file

@ -1,79 +0,0 @@
--- drivers/blazer_usb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/blazer_usb.c
@@ -118,9 +118,9 @@ static int phoenix_command(const char *cmd, char *buf,
*/
switch (ret)
{
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
usb_clear_halt(udev, 0x81);
- case -ETIMEDOUT: /* Connection timed out */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
break;
}
@@ -188,7 +188,7 @@ static int ippon_command(const char *cmd, char *buf, s
0x09, 0x2, 0, &tmp[i], 8, 1000);
if (ret <= 0) {
- upsdebugx(3, "send: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
+ upsdebugx(3, "send: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
return ret;
}
}
@@ -203,7 +203,7 @@ static int ippon_command(const char *cmd, char *buf, s
* will happen after successfully writing a command to the UPS)
*/
if (ret <= 0) {
- upsdebugx(3, "read: %s", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out");
+ upsdebugx(3, "read: %s", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out");
return ret;
}
@@ -423,38 +423,28 @@ int blazer_command(const char *cmd, char *buf, size_t
switch (ret)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
-
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
if (usb_clear_halt(udev, 0x81) == 0) {
upsdebugx(1, "Stall condition cleared");
break;
}
-#ifdef ETIME
- case -ETIME: /* Timer expired */
-#endif
if (usb_reset(udev) == 0) {
upsdebugx(1, "Device reset handled");
}
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
usb->close(udev);
udev = NULL;
break;
- case -ETIMEDOUT: /* Connection timed out */
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
default:
break;
}

View file

@ -1,23 +0,0 @@
--- drivers/libshut.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/libshut.c
@@ -37,6 +37,7 @@
#include "nut_stdint.h" /* for uint8_t, uint16_t, uint32_t */
#include "serial.h"
+#include "libusb.h"
#include "libshut.h"
#include "common.h" /* for xmalloc, upsdebugx prototypes */
@@ -809,10 +810,10 @@ int shut_get_string_simple(int upsfd, int index,
return ret;
if (tbuf[1] != USB_DT_STRING)
- return -EIO;
+ return LIBUSB_ERROR_IO;
if (tbuf[0] > ret)
- return -EFBIG;
+ return LIBUSB_ERROR_OVERFLOW;
/* skip the UTF8 zero'ed high bytes */
for (di = 0, si = 2; si < tbuf[0]; si += 2)

View file

@ -1,65 +0,0 @@
--- drivers/libusb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/libusb.c
@@ -428,26 +428,21 @@ static int libusb_strerror(const int ret, const char *
switch(ret)
{
- case -EBUSY: /* Device or resource busy */
- case -EPERM: /* Operation not permitted */
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
- case -EPIPE: /* Broken pipe */
- case -ENOSYS: /* Function not implemented */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
+ case LIBUSB_ERROR_NOT_SUPPORTED: /* Function not implemented */
upslogx(LOG_DEBUG, "%s: %s", desc, usb_strerror());
return ret;
- case -ETIMEDOUT: /* Connection timed out */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
upsdebugx(2, "%s: Connection timed out", desc);
return 0;
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
upsdebugx(2, "%s: %s", desc, usb_strerror());
return 0;
@@ -478,7 +473,7 @@ static int libusb_get_report(usb_dev_handle *udev, int
0, raw_buf, ReportSize, USB_TIMEOUT);
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
- if (ret == -EPIPE) {
+ if (ret == LIBUSB_ERROR_PIPE) {
return 0;
}
@@ -500,7 +495,7 @@ static int libusb_set_report(usb_dev_handle *udev, int
0, raw_buf, ReportSize, USB_TIMEOUT);
/* Ignore "protocol stall" (for unsupported request) on control endpoint */
- if (ret == -EPIPE) {
+ if (ret == LIBUSB_ERROR_PIPE) {
return 0;
}
@@ -532,7 +527,7 @@ static int libusb_get_interrupt(usb_dev_handle *udev,
ret = usb_interrupt_read(udev, 0x81, (char *)buf, bufsize, timeout);
/* Clear stall condition */
- if (ret == -EPIPE) {
+ if (ret == LIBUSB_ERROR_PIPE) {
ret = usb_clear_halt(udev, 0x81);
}

View file

@ -1,27 +0,0 @@
--- drivers/libusb.h.orig 2015-12-29 12:08:34 UTC
+++ drivers/libusb.h
@@ -36,6 +36,24 @@
#include <usb.h> /* libusb header file */
+/* libusb 1.0 errors used by FreeBSD */
+enum libusb_error {
+ LIBUSB_SUCCESS = 0,
+ LIBUSB_ERROR_IO = -1,
+ LIBUSB_ERROR_INVALID_PARAM = -2,
+ LIBUSB_ERROR_ACCESS = -3,
+ LIBUSB_ERROR_NO_DEVICE = -4,
+ LIBUSB_ERROR_NOT_FOUND = -5,
+ LIBUSB_ERROR_BUSY = -6,
+ LIBUSB_ERROR_TIMEOUT = -7,
+ LIBUSB_ERROR_OVERFLOW = -8,
+ LIBUSB_ERROR_PIPE = -9,
+ LIBUSB_ERROR_INTERRUPTED = -10,
+ LIBUSB_ERROR_NO_MEM = -11,
+ LIBUSB_ERROR_NOT_SUPPORTED = -12,
+ LIBUSB_ERROR_OTHER = -99,
+};
+
extern upsdrv_info_t comm_upsdrv_info;
/*!

View file

@ -0,0 +1,10 @@
--- drivers/main.h.orig 2015-12-29 04:08:34.000000000 -0800
+++ drivers/main.h 2020-11-13 23:40:47.007315000 -0800
@@ -1,6 +1,7 @@
#ifndef MAIN_H
#define MAIN_H
+#include <sys/param.h>
#include "common.h"
#include "upsconf.h"
#include "dstate.h"

View file

@ -1,79 +0,0 @@
--- drivers/nutdrv_qx.c.orig 2016-03-08 12:01:11 UTC
+++ drivers/nutdrv_qx.c
@@ -561,9 +561,9 @@ static int phoenix_command(const char *cmd, char *buf,
* In order to read correct replies we need to flush the output buffers of the converter until we get no more data (ie, it times out). */
switch (ret)
{
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
usb_clear_halt(udev, 0x81);
- case -ETIMEDOUT: /* Connection timed out */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
break;
}
@@ -635,7 +635,7 @@ static int ippon_command(const char *cmd, char *buf, s
ret = usb_control_msg(udev, USB_ENDPOINT_OUT + USB_TYPE_CLASS + USB_RECIP_INTERFACE, 0x09, 0x2, 0, &tmp[i], 8, 1000);
if (ret <= 0) {
- upsdebugx(3, "send: %s (%d)", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out", ret);
+ upsdebugx(3, "send: %s (%d)", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out", ret);
return ret;
}
@@ -648,7 +648,7 @@ static int ippon_command(const char *cmd, char *buf, s
/* Any errors here mean that we are unable to read a reply (which will happen after successfully writing a command to the UPS) */
if (ret <= 0) {
- upsdebugx(3, "read: %s (%d)", (ret != -ETIMEDOUT) ? usb_strerror() : "Connection timed out", ret);
+ upsdebugx(3, "read: %s (%d)", (ret != LIBUSB_ERROR_TIMEOUT) ? usb_strerror() : "Connection timed out", ret);
return ret;
}
@@ -2124,38 +2124,28 @@ static int qx_command(const char *cmd, char *buf, size
switch (ret)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
-
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
if (usb_clear_halt(udev, 0x81) == 0) {
upsdebugx(1, "Stall condition cleared");
break;
}
- #ifdef ETIME
- case -ETIME: /* Timer expired */
- #endif /* ETIME */
if (usb_reset(udev) == 0) {
upsdebugx(1, "Device reset handled");
}
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
usb->close(udev);
udev = NULL;
break;
- case -ETIMEDOUT: /* Connection timed out */
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
default:
break;
}

View file

@ -1,53 +0,0 @@
--- drivers/riello_usb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/riello_usb.c
@@ -346,42 +346,28 @@ int riello_command(uint8_t *cmd, uint8_t *buf, uint16_
switch (ret)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- fatal_with_errno(EXIT_FAILURE, "Permissions problem");
-
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
if (usb_clear_halt(udev, 0x81) == 0) {
upsdebugx(1, "Stall condition cleared");
break;
}
-#ifdef ETIME
- case -ETIME: /* Timer expired */
-#endif
if (usb_reset(udev) == 0) {
upsdebugx(1, "Device reset handled");
}
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
usb->close(udev);
udev = NULL;
break;
- case -ETIMEDOUT: /* Connection timed out */
- upsdebugx (3, "riello_command err: Resource temporarily unavailable");
-
-
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
- break;
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
default:
break;
}

View file

@ -1,20 +0,0 @@
--- drivers/tripplite_usb.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/tripplite_usb.c
@@ -499,7 +499,7 @@ void usb_comm_fail(int res, const char *msg)
static int try = 0;
switch(res) {
- case -EBUSY:
+ case LIBUSB_ERROR_BUSY:
upslogx(LOG_WARNING, "%s: Device claimed by another process", msg);
fatalx(EXIT_FAILURE, "Terminating: EBUSY");
break;
@@ -907,7 +907,7 @@ void upsdrv_initinfo(void)
if(tl_model != TRIPP_LITE_SMARTPRO ) {
ret = send_cmd(w_msg, sizeof(w_msg), w_value, sizeof(w_value)-1);
if(ret <= 0) {
- if(ret == -EPIPE) {
+ if(ret == LIBUSB_ERROR_PIPE) {
fatalx(EXIT_FAILURE, "Could not reset watchdog. Please check and"
"see if usbhid-ups(8) works with this UPS.");
} else {

View file

@ -1,74 +0,0 @@
--- drivers/usbhid-ups.c.orig 2015-12-29 12:08:34 UTC
+++ drivers/usbhid-ups.c
@@ -30,6 +30,7 @@
#define DRIVER_VERSION "0.41"
#include "main.h"
+#include "libusb.h"
#include "libhid.h"
#include "usbhid-ups.h"
#include "hidparser.h"
@@ -790,22 +790,14 @@ void upsdrv_updateinfo(void)
/* Get HID notifications on Interrupt pipe first */
if (use_interrupt_pipe == TRUE) {
evtCount = HIDGetEvents(udev, event, MAX_EVENT_NUM);
- switch (evtCount)
- {
- case -EBUSY: /* Device or resource busy */
- upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ if (evtCount < 0) {
+ if (evtCount == LIBUSB_ERROR_BUSY) {
+ upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
+ }
/* Uh oh, got to reconnect! */
hd = NULL;
- return;
- default:
+ } else {
upsdebugx(1, "Got %i HID objects...", (evtCount >= 0) ? evtCount : 0);
- break;
}
} else {
evtCount = 0;
@@ -1280,14 +1272,12 @@ static bool_t hid_ups_walk(walkmode_t mode)
switch (retcode)
{
- case -EBUSY: /* Device or resource busy */
+ case LIBUSB_ERROR_BUSY: /* Device or resource busy */
upslog_with_errno(LOG_CRIT, "Got disconnected by another driver");
- case -EPERM: /* Operation not permitted */
- case -ENODEV: /* No such device */
- case -EACCES: /* Permission denied */
- case -EIO: /* I/O error */
- case -ENXIO: /* No such device or address */
- case -ENOENT: /* No such file or directory */
+ case LIBUSB_ERROR_NO_DEVICE: /* No such device */
+ case LIBUSB_ERROR_ACCESS: /* Permission denied */
+ case LIBUSB_ERROR_IO: /* I/O error */
+ case LIBUSB_ERROR_NOT_FOUND: /* No such file or directory */
/* Uh oh, got to reconnect! */
hd = NULL;
return FALSE;
@@ -1298,12 +1288,9 @@ static bool_t hid_ups_walk(walkmode_t mode)
case 0:
continue;
- case -ETIMEDOUT: /* Connection timed out */
- case -EOVERFLOW: /* Value too large for defined data type */
-#ifdef EPROTO
- case -EPROTO: /* Protocol error */
-#endif
- case -EPIPE: /* Broken pipe */
+ case LIBUSB_ERROR_TIMEOUT: /* Connection timed out */
+ case LIBUSB_ERROR_OVERFLOW: /* Value too large for defined data type */
+ case LIBUSB_ERROR_PIPE: /* Broken pipe */
default:
/* Don't know what happened, try again later... */
continue;