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>
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user