X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/62ee4fedd54fcfbc62676da90384cbc2b48ebed7..a9e4e78f83b2743a86df77d4dc94878f4536a00a:/client/uart.c?ds=inline diff --git a/client/uart.c b/client/uart.c index 041186c7..e3a6a57b 100644 --- a/client/uart.c +++ b/client/uart.c @@ -73,6 +73,7 @@ serial_port uart_open(const char* pcPortName) // Does the system allows us to place a lock on this file descriptor if (fcntl(sp->fd, F_SETLK, &fl) == -1) { // A conflicting lock is held by another process + free(sp); return CLAIMED_SERIAL_PORT; } @@ -266,7 +267,7 @@ bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen) { if (res < 0) { return false; } - + // Read time-out if (res == 0) { if (*pszRxLen == 0) { @@ -277,21 +278,24 @@ bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen) { return true; } } - + // Retrieve the count of the incoming bytes res = ioctl(((serial_port_unix*)sp)->fd, FIONREAD, &byteCount); if (res < 0) return false; - + // There is something available, read the data res = read(((serial_port_unix*)sp)->fd,pbtRx+(*pszRxLen),byteCount); - + // Stop if the OS has some troubles reading the data if (res <= 0) return false; - + *pszRxLen += res; + + if(res==byteCount) + return true; } while (byteCount); - + return true; } @@ -366,9 +370,9 @@ serial_port uart_open(const char* pcPortName) { memset(&sp->dcb, 0, sizeof(DCB)); sp->dcb.DCBlength = sizeof(DCB); if(!BuildCommDCBA("baud=9600 data=8 parity=N stop=1",&sp->dcb)) { - uart_close(sp); - return INVALID_SERIAL_PORT; - } + uart_close(sp); + return INVALID_SERIAL_PORT; + } // Update the active serial port if(!SetCommState(sp->hPort,&sp->dcb)) {