target/renesas_rz_g2: Introduce tcl config file for RZ/G2 devices
[fw/openocd] / src / helper / replacements.c
index 2020003f0e3a7d3de31ee513c91cd95a8d7c9f13..f4ecb8dfcc5a719c48495e5ff1ad8ee8cfe30570 100644 (file)
@@ -19,9 +19,7 @@
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 /* DANGER!!!! These must be defined *BEFORE* replacements.h and the malloc() macro!!!! */
 
@@ -64,6 +62,7 @@ void *fill_malloc(size_t size)
 
 #ifdef _WIN32
 #include <io.h>
+#include <winsock2.h>
 #endif
 
 /* replacements for gettimeofday */
@@ -89,12 +88,9 @@ int gettimeofday(struct timeval *tv, struct timezone *tz)
                GetSystemTimeAsFileTime(&ft);
                li.LowPart  = ft.dwLowDateTime;
                li.HighPart = ft.dwHighDateTime;
-               t  = li.QuadPart;                                       /* In 100-nanosecond
-                                                                        *intervals */
-               t -= EPOCHFILETIME;                                     /* Offset to the Epoch time
-                                                                        **/
-               t /= 10;                                                        /* In microseconds
-                                                                                **/
+               t  = li.QuadPart;                                       /* In 100-nanosecond intervals */
+               t -= EPOCHFILETIME;                                     /* Offset to the Epoch time */
+               t /= 10;                                                        /* In microseconds */
                tv->tv_sec  = (long)(t / 1000000);
                tv->tv_usec = (long)(t % 1000000);
        }
@@ -126,7 +122,7 @@ size_t strnlen(const char *s, size_t maxlen)
 char *strndup(const char *s, size_t n)
 {
        size_t len = strnlen(s, n);
-       char *new = (char *) malloc(len + 1);
+       char *new = malloc(len + 1);
 
        if (new == NULL)
                return NULL;
@@ -209,10 +205,11 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time
                        aexcept = sock_except;
 
                        tvslice.tv_sec = 0;
-                       tvslice.tv_usec = 100000;
+                       tvslice.tv_usec = 1000;
 
                        retcode = select(sock_max_fd + 1, &aread, &awrite, &aexcept, &tvslice);
                }
+
                if (n_handles > 0) {
                        /* check handles */
                        DWORD wret;
@@ -220,7 +217,7 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time
                        wret = MsgWaitForMultipleObjects(n_handles,
                                        handles,
                                        FALSE,
-                                       retcode > 0 ? 0 : 100,
+                                       retcode > 0 ? 0 : 1,
                                        QS_ALLEVENTS);
 
                        if (wret == WAIT_TIMEOUT) {
@@ -244,16 +241,13 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time
 
                                                        if (PeekNamedPipe((HANDLE)handle, NULL, 0,
                                                                    NULL, &dwBytes, NULL)) {
-                                                               /* check to see if gdb pipe has data
-                                                                *available */
+                                                               /* check to see if gdb pipe has data available */
                                                                if (dwBytes) {
-                                                                       FD_SET(handle_slot_to_fd[i],
-                                                                               &aread);
+                                                                       FD_SET(handle_slot_to_fd[i], &aread);
                                                                        retcode++;
                                                                }
                                                        } else {
-                                                               FD_SET(handle_slot_to_fd[i],
-                                                                       &aread);
+                                                               FD_SET(handle_slot_to_fd[i], &aread);
                                                                retcode++;
                                                        }
                                                }
@@ -281,3 +275,45 @@ int win_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct time
        return retcode;
 }
 #endif
+
+#if defined HAVE_LIBUSB1 && !defined HAVE_LIBUSB_ERROR_NAME
+#include <libusb.h>
+/* Verbatim from git://git.libusb.org/libusb.git tag 1.0.9
+ * The libusb_error enum is compatible down to v0.9.1
+ */
+const char *libusb_error_name(int error_code)
+{
+       enum libusb_error error = error_code;
+       switch (error) {
+       case LIBUSB_SUCCESS:
+               return "LIBUSB_SUCCESS";
+       case LIBUSB_ERROR_IO:
+               return "LIBUSB_ERROR_IO";
+       case LIBUSB_ERROR_INVALID_PARAM:
+               return "LIBUSB_ERROR_INVALID_PARAM";
+       case LIBUSB_ERROR_ACCESS:
+               return "LIBUSB_ERROR_ACCESS";
+       case LIBUSB_ERROR_NO_DEVICE:
+               return "LIBUSB_ERROR_NO_DEVICE";
+       case LIBUSB_ERROR_NOT_FOUND:
+               return "LIBUSB_ERROR_NOT_FOUND";
+       case LIBUSB_ERROR_BUSY:
+               return "LIBUSB_ERROR_BUSY";
+       case LIBUSB_ERROR_TIMEOUT:
+               return "LIBUSB_ERROR_TIMEOUT";
+       case LIBUSB_ERROR_OVERFLOW:
+               return "LIBUSB_ERROR_OVERFLOW";
+       case LIBUSB_ERROR_PIPE:
+               return "LIBUSB_ERROR_PIPE";
+       case LIBUSB_ERROR_INTERRUPTED:
+               return "LIBUSB_ERROR_INTERRUPTED";
+       case LIBUSB_ERROR_NO_MEM:
+               return "LIBUSB_ERROR_NO_MEM";
+       case LIBUSB_ERROR_NOT_SUPPORTED:
+               return "LIBUSB_ERROR_NOT_SUPPORTED";
+       case LIBUSB_ERROR_OTHER:
+               return "LIBUSB_ERROR_OTHER";
+       }
+       return "**UNKNOWN**";
+}
+#endif