aboutsummaryrefslogtreecommitdiff
path: root/src/helper/log.c
diff options
context:
space:
mode:
authorJan Matyas <matyas@codasip.com>2019-10-21 08:44:08 +0200
committerTomas Vanek <vanekt@fbl.cz>2020-01-02 21:22:33 +0000
commitdeff24afa13fe5188c207258d6d1935bc3dd0870 (patch)
treec35b1f85f9de77c0e897f8a3eefef8bc9d3b8e9f /src/helper/log.c
parent7f5caa24e3bc8d8563d23463b4c8f1ea746262e0 (diff)
downloadriscv-openocd-deff24afa13fe5188c207258d6d1935bc3dd0870.zip
riscv-openocd-deff24afa13fe5188c207258d6d1935bc3dd0870.tar.gz
riscv-openocd-deff24afa13fe5188c207258d6d1935bc3dd0870.tar.bz2
jtag_vpi: multiple improvements
- Fix: Proper handling of read_socket() and write_socket() in case of "partial" read/write. - Added low-level JTAG IO debug capability (_DEBUG_JTAG_IO_) - Zero-fill packet buffers, avoid sending pieces of uninitialized memory over the network (memset struct vpi_cmd) - Use close_socket() instead of close() - needed for Win32 - Fixed usage messages of jtag_vpi_command_handlers Change-Id: I8bd19bc5c9512fe8e798600212e8a95213f50f5b Signed-off-by: Jan Matyas <matyas@codasip.com> Reviewed-on: http://openocd.zylin.com/5177 Tested-by: jenkins Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Diffstat (limited to 'src/helper/log.c')
-rw-r--r--src/helper/log.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/helper/log.c b/src/helper/log.c
index d65430c..8f48b92 100644
--- a/src/helper/log.c
+++ b/src/helper/log.c
@@ -454,3 +454,28 @@ void busy_sleep(uint64_t ms)
*/
}
}
+
+/* Maximum size of socket error message retreived from operation system */
+#define MAX_SOCKET_ERR_MSG_LENGTH 256
+
+/* Provide log message for the last socket error.
+ Uses errno on *nix and WSAGetLastError() on Windows */
+void log_socket_error(const char *socket_desc)
+{
+ int error_code;
+#ifdef _WIN32
+ error_code = WSAGetLastError();
+ char error_message[MAX_SOCKET_ERR_MSG_LENGTH];
+ error_message[0] = '\0';
+ DWORD retval = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, error_code, 0,
+ error_message, MAX_SOCKET_ERR_MSG_LENGTH, NULL);
+ error_message[MAX_SOCKET_ERR_MSG_LENGTH - 1] = '\0';
+ const bool have_message = (retval != 0) && (error_message[0] != '\0');
+ LOG_ERROR("Error on socket '%s': WSAGetLastError==%d%s%s.", socket_desc, error_code,
+ (have_message ? ", message: " : ""),
+ (have_message ? error_message : ""));
+#else
+ error_code = errno;
+ LOG_ERROR("Error on socket '%s': errno==%d, message: %s.", socket_desc, error_code, strerror(error_code));
+#endif
+}