This is the mail archive of the newlib@sourceware.org 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: libc/unix, reentrant syscalls?


Hi Pedro,

A little late in answering this, but yes, you are correct. The only usage of the non-reentrant _ syscall names should be either in the _r version-code or else in system-specific code that knows there is no reentrant version.

A patch has been checked in.

-- Jeff J.

pedro_alves@portugalmail.pt wrote:
Hi all again,

In the libc/unix dir, all the syscalls are made with the underscored version.
If newlib is compiled with with reentrancy support, these won't exist.
Shouldn't they be switched over to the not-underscored ones?

Look at the following (not complete) patch for example:

Index: getpass.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/unix/getpass.c,v
retrieving revision 1.3
diff -u -r1.3 getpass.c
--- getpass.c 9 Dec 2000 01:20:32 -0000 1.3
+++ getpass.c 27 Oct 2005 23:00:48 -0000
@@ -90,7 +90,9 @@
if (p < buf + _PASSWORD_LEN)
*p++ = ch;
*p = '\0';
- (void) _write (fileno (outfp), "\n", 1);
+/* pedro: what about the reentrant version ? + (void) _write (fileno (outfp), "\n", 1); */
+ (void) write (fileno (outfp), "\n", 1);
if (echo)
{
term.c_lflag |= ECHO;
Index: getut.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/unix/getut.c,v
retrieving revision 1.3
diff -u -r1.3 getut.c
--- getut.c 24 Aug 2000 18:51:09 -0000 1.3
+++ getut.c 27 Oct 2005 23:00:48 -0000
@@ -11,20 +11,25 @@
static struct utmp utmp_data;
+/* pedro: removed underscore in syscalls to enable the use of the reentrant
versions */
+
void
setutent ()
{
if (utmp_fd == -2)
{
- utmp_fd = _open (utmp_file, O_RDONLY);
+// utmp_fd = _open (utmp_file, O_RDONLY);
+ utmp_fd = open (utmp_file, O_RDONLY);
}
- _lseek (utmp_fd, 0, SEEK_SET);
+// _lseek (utmp_fd, 0, SEEK_SET);
+ lseek (utmp_fd, 0, SEEK_SET);
}
void
endutent ()
{
- _close (utmp_fd);
+// _close (utmp_fd);
+ close (utmp_fd);
utmp_fd = -2;
}
@@ -39,7 +44,8 @@
{
if (utmp_fd == -2)
setutent ();
- if (_read (utmp_fd, &utmp_data, sizeof (utmp_data)) < sizeof (utmp_data))
+// if (_read (utmp_fd, &utmp_data, sizeof (utmp_data)) < sizeof (utmp_data))
+ if (read (utmp_fd, &utmp_data, sizeof (utmp_data)) < sizeof (utmp_data))
return 0;
return &utmp_data;
}
@@ -47,7 +53,8 @@
struct utmp *
getutid (struct utmp *id)
{
- while (_read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data))
+// while (_read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data))
+ while (read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data))
{
switch (id->ut_type)
{
@@ -73,7 +80,8 @@
struct utmp *
getutline (struct utmp *line)
{
- while (_read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data))
+// while (_read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data))
+ while (read (utmp_fd, &utmp_data, sizeof (utmp_data)) == sizeof (utmp_data))
{
if ((utmp_data.ut_type == LOGIN_PROCESS ||
utmp_data.ut_type == USER_PROCESS) &&
Index: ttyname.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/unix/ttyname.c,v
retrieving revision 1.3
diff -u -r1.3 ttyname.c
--- ttyname.c 7 Jul 2005 17:29:13 -0000 1.3
+++ ttyname.c 27 Oct 2005 23:00:48 -0000
@@ -62,7 +62,8 @@
return NULL;
/* Must be a character device. */
- if (_fstat (fd, &sb) || !S_ISCHR (sb.st_mode))
+/* pedro: if (_fstat (fd, &sb) || !S_ISCHR (sb.st_mode)) */
+ if (fstat (fd, &sb) || !S_ISCHR (sb.st_mode))
return NULL;
if ((dp = _opendir (_PATH_DEV)) == NULL)




Cheers, Pedro Alves


__________________________________________________________ Email gratuito com 2 000 MB Espaço para guardar 1 milhão de mensagens http://www.portugalmail.pt/2000mb


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