Fix bug in semihosting write function

The return value from the SYS_WRITE semihosting operation is 0 if
the call is successful or the number of bytes not written, if there
is an error. The implementation of the write function in the
semihosting driver treats the return value as the number of bytes
written, which is wrong. This patch fixes it.

Change-Id: Id39dac3d17b5eac557408b8995abe90924c85b85
diff --git a/drivers/io/io_semihosting.c b/drivers/io/io_semihosting.c
index 3c92c6d..8e62be1 100644
--- a/drivers/io/io_semihosting.c
+++ b/drivers/io/io_semihosting.c
@@ -183,7 +183,6 @@
 static int sh_file_write(io_entity_t *entity, const uintptr_t buffer,
 		size_t length, size_t *length_written)
 {
-	int result = IO_FAIL;
 	long sh_result = -1;
 	long file_handle;
 	size_t bytes = length;
@@ -196,13 +195,9 @@
 
 	sh_result = semihosting_file_write(file_handle, &bytes, buffer);
 
-	if (sh_result >= 0) {
-		*length_written = sh_result;
-		result = IO_SUCCESS;
-	} else
-		result = IO_FAIL;
+	*length_written = length - bytes;
 
-	return result;
+	return (sh_result == 0) ? IO_SUCCESS : IO_FAIL;
 }