Multiple unrelated changes

- replace the hand written serial input flush routine with the termios one.
- serialport_discard_read isn't necessary anymore - it just wrapped
  sp_flush_incoming with no extra value.
- serialport_read and serialport_write would misbehave if read or write
  didn't process everything in one go.
- sp_flush_incoming should be #define'd out for FAKE_COMMUNICATION like
  serialport_discard_read was

Corresponding to flashrom svn r831.

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Sean Nelson <audiohacked@gmail.com>
diff --git a/serial.c b/serial.c
index be88166..754dff9 100644
--- a/serial.c
+++ b/serial.c
@@ -129,16 +129,7 @@
 
 void sp_flush_incoming(void)
 {
-	int i;
-	for (i=0;i<100;i++) { /* In case the device doesnt do EAGAIN, just read 0 */
-		unsigned char flush[16];
-		ssize_t rv;
-		rv = read(sp_fd, flush, sizeof(flush));
-		if ((rv == -1) && (errno == EAGAIN))
-			break;
-		if (rv == -1)
-			sp_die("flush read");
-	}
+	tcflush(sp_fd, TCIFLUSH);
 	return;
 }
 
@@ -152,12 +143,14 @@
 {
 	int tmp = 0;
 
-	while (tmp != writecnt) {
-		tmp = write(sp_fd, buf + tmp, writecnt - tmp);
+	while (writecnt > 0) {
+		tmp = write(sp_fd, buf, writecnt);
 		if (tmp == -1)
 			return 1;
 		if (!tmp)
 			printf_debug("Empty write\n");
+		writecnt -= tmp; 
+		buf += tmp;
 	}
 
 	return 0;
@@ -167,28 +160,15 @@
 {
 	int tmp = 0;
 
-	while (tmp != readcnt) {
-		tmp = read(sp_fd, buf + tmp, readcnt - tmp);
+	while (readcnt > 0) {
+		tmp = read(sp_fd, buf, readcnt);
 		if (tmp == -1)
 			return 1;
 		if (!tmp)
 			printf_debug("Empty read\n");
+		readcnt -= tmp;
+		buf += tmp;
 	}
 
 	return 0;
 }
-
-int serialport_discard_read(void)
-{
-	int flags;
-
-	printf_debug("%s\n", __func__);
-	flags = fcntl(sp_fd, F_GETFL);
-	flags |= O_NONBLOCK;
-	fcntl(sp_fd, F_SETFL, flags);
-	sp_flush_incoming();
-	flags &= ~O_NONBLOCK;
-	fcntl(sp_fd, F_SETFL, flags);
-
-	return 0;
-}