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]

libc/unix, reentrant syscalls?


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]