aboutsummaryrefslogtreecommitdiff
path: root/sysutils/nut-devel
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2020-11-14 07:58:15 +0000
committerCy Schubert <cy@FreeBSD.org>2020-11-14 07:58:15 +0000
commitfe02968432cf5e4b2879f3a719b611ca3cea5405 (patch)
tree1448c9b778626f39a44cd6aec6fd32aff4516e51 /sysutils/nut-devel
parent4d511e5a9e9a3acf38624fafc2abc4b2b4abd65e (diff)
downloadports-fe02968432cf5e4b2879f3a719b611ca3cea5405.tar.gz
ports-fe02968432cf5e4b2879f3a719b611ca3cea5405.zip
Properly check USB errors using sys/errno.h.
Notes
Notes: svn path=/head/; revision=555091
Diffstat (limited to 'sysutils/nut-devel')
-rw-r--r--sysutils/nut-devel/Makefile2
-rw-r--r--sysutils/nut-devel/files/patch-drivers_blazer__usb.c79
-rw-r--r--sysutils/nut-devel/files/patch-drivers_libshut.c23
-rw-r--r--sysutils/nut-devel/files/patch-drivers_libusb.c65
-rw-r--r--sysutils/nut-devel/files/patch-drivers_libusb.h27
-rw-r--r--sysutils/nut-devel/files/patch-drivers_main.h10
-rw-r--r--sysutils/nut-devel/files/patch-drivers_nutdrv__qx.c79
-rw-r--r--sysutils/nut-devel/files/patch-drivers_riello__usb.c53
-rw-r--r--sysutils/nut-devel/files/patch-drivers_tripplite__usb.c20
-rw-r--r--sysutils/nut-devel/files/patch-drivers_usbhid-ups.c74
10 files changed, 11 insertions, 421 deletions
diff --git a/sysutils/nut-devel/Makefile b/sysutils/nut-devel/Makefile
index 8321356d9683..c4d724aaf959 100644
--- a/sysutils/nut-devel/Makefile
+++ b/sysutils/nut-devel/Makefile
@@ -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}/
diff --git a/sysutils/nut-devel/files/patch-drivers_blazer__usb.c b/sysutils/nut-devel/files/patch-drivers_blazer__usb.c
deleted file mode 100644
index ccb0be8a0fb3..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_blazer__usb.c
+++ /dev/null
@@ -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;
- }
diff --git a/sysutils/nut-devel/files/patch-drivers_libshut.c b/sysutils/nut-devel/files/patch-drivers_libshut.c
deleted file mode 100644
index b925c8948250..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_libshut.c
+++ /dev/null
@@ -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)
diff --git a/sysutils/nut-devel/files/patch-drivers_libusb.c b/sysutils/nut-devel/files/patch-drivers_libusb.c
deleted file mode 100644
index 743e2440412a..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_libusb.c
+++ /dev/null
@@ -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);
- }
-
diff --git a/sysutils/nut-devel/files/patch-drivers_libusb.h b/sysutils/nut-devel/files/patch-drivers_libusb.h
deleted file mode 100644
index bbf53e102eaa..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_libusb.h
+++ /dev/null
@@ -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;
-
- /*!
diff --git a/sysutils/nut-devel/files/patch-drivers_main.h b/sysutils/nut-devel/files/patch-drivers_main.h
new file mode 100644
index 000000000000..9b8fa0bb71a1
--- /dev/null
+++ b/sysutils/nut-devel/files/patch-drivers_main.h
@@ -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"
diff --git a/sysutils/nut-devel/files/patch-drivers_nutdrv__qx.c b/sysutils/nut-devel/files/patch-drivers_nutdrv__qx.c
deleted file mode 100644
index fc27279f3ec8..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_nutdrv__qx.c
+++ /dev/null
@@ -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;
- }
diff --git a/sysutils/nut-devel/files/patch-drivers_riello__usb.c b/sysutils/nut-devel/files/patch-drivers_riello__usb.c
deleted file mode 100644
index 759aa91ff62a..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_riello__usb.c
+++ /dev/null
@@ -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;
- }
diff --git a/sysutils/nut-devel/files/patch-drivers_tripplite__usb.c b/sysutils/nut-devel/files/patch-drivers_tripplite__usb.c
deleted file mode 100644
index 4c98dfb41c84..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_tripplite__usb.c
+++ /dev/null
@@ -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 {
diff --git a/sysutils/nut-devel/files/patch-drivers_usbhid-ups.c b/sysutils/nut-devel/files/patch-drivers_usbhid-ups.c
deleted file mode 100644
index 620b60c0baf1..000000000000
--- a/sysutils/nut-devel/files/patch-drivers_usbhid-ups.c
+++ /dev/null
@@ -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;