diff options
author | Jan Matyas <matyas@codasip.com> | 2019-10-21 08:44:08 +0200 |
---|---|---|
committer | Tomas Vanek <vanekt@fbl.cz> | 2020-01-02 21:22:33 +0000 |
commit | deff24afa13fe5188c207258d6d1935bc3dd0870 (patch) | |
tree | c35b1f85f9de77c0e897f8a3eefef8bc9d3b8e9f /src/helper/log.c | |
parent | 7f5caa24e3bc8d8563d23463b4c8f1ea746262e0 (diff) | |
download | riscv-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.c | 25 |
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 +} |