This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Fix ARM problem with freopen


Patch checked in. Thanks.

-- Jeff J.

Mark Mitchell wrote:

Jeff --

I'd like to commit the attached patch to newlib.

The problem was that the current version of remap_handle did not work
correctly when a standard stream (such as "stdin") was reopend with
"freopen".  Because "open" cleverly keeps the descriptors for the
standard streams and all other descriptors separate, we can just check
"STDIN_FILENO" instead.

OK?

--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com

2003-12-29 Mark Mitchell <mark@codesourcery.com>

	* libc/sys/arm/syscalls.c (unistd.h): Include it.
	(remap_handle): Use STDIN_FILENO instead of __sfileno(stdin).
	Similarly for stdout and stderr.

Index: libc/sys/arm/syscalls.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/sys/arm/syscalls.c,v
retrieving revision 1.8
diff -c -5 -p -r1.8 syscalls.c
*** libc/sys/arm/syscalls.c 6 May 2002 20:46:37 -0000 1.8
--- libc/sys/arm/syscalls.c 29 Dec 2003 21:07:24 -0000
***************
*** 10,19 ****
--- 10,20 ----
#include <time.h>
#include <sys/time.h>
#include <sys/times.h>
#include <errno.h>
#include <reent.h>
+ #include <unistd.h>
#include "swi.h"
/* Forward prototypes. */
int _system _PARAMS ((const char *));
int _rename _PARAMS ((const char *, const char *));
*************** remap_handle (int fh)
*** 123,137 ****
CHECK_INIT(stdin);
CHECK_INIT(stdout);
CHECK_INIT(stderr);
std_files_checked = 1;
}
! if (fh == __sfileno (stdin))
return monitor_stdin;
! if (fh == __sfileno (stdout))
return monitor_stdout;
! if (fh == __sfileno (stderr))
return monitor_stderr;
return fh - FILE_HANDLE_OFFSET;
}
--- 124,138 ----
CHECK_INIT(stdin);
CHECK_INIT(stdout);
CHECK_INIT(stderr);
std_files_checked = 1;
}
! if (fh == STDIN_FILENO)
return monitor_stdin;
! if (fh == STDOUT_FILENO)
return monitor_stdout;
! if (fh == STDERR_FILENO)
return monitor_stderr;
return fh - FILE_HANDLE_OFFSET;
}




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]