From 465a06dfdc6c5d4af377dac7b9d71845cb0dc034 Mon Sep 17 00:00:00 2001
From: Spencer Oliver <ntfreak@users.sourceforge.net>
Date: Wed, 27 Jan 2010 21:20:18 +0000
Subject: ARM semihosting: fix writing to stdout

SYS_FLEN would be called before a write on a descriptor to check its size.
Currently lseek would fail with -1 when given the stdout/stderr descriptor.
Changing to use fstat seems to be the standard way of handling this.

Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
---
 src/target/arm_semihosting.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

(limited to 'src/target')

diff --git a/src/target/arm_semihosting.c b/src/target/arm_semihosting.c
index f4244c84..1d0acd63 100644
--- a/src/target/arm_semihosting.c
+++ b/src/target/arm_semihosting.c
@@ -230,18 +230,14 @@ static int do_semihosting(struct target *target)
 			return retval;
 		else {
 			int fd = target_buffer_get_u32(target, params+0);
-			off_t cur = lseek(fd, 0, SEEK_CUR);
-			if (cur == (off_t)-1) {
+			struct stat buf;
+			result = fstat(fd, &buf);
+			if (result == -1) {
 				armv4_5->semihosting_errno = errno;
 				result = -1;
 				break;
 			}
-			result = lseek(fd, 0, SEEK_END);
-			armv4_5->semihosting_errno = errno;
-			if (lseek(fd, cur, SEEK_SET) == (off_t)-1) {
-				armv4_5->semihosting_errno = errno;
-				result = -1;
-			}
+			result = buf.st_size;
 		}
 		break;
 
-- 
cgit v1.2.3