瀏覽代碼

update as far as i've double checked things thus far
-Erik

Eric Andersen 23 年之前
父節點
當前提交
5b14ccee85
共有 1 個文件被更改,包括 226 次插入314 次删除
  1. 226 314
      docs/threads.txt

+ 226 - 314
docs/threads.txt

@@ -33,9 +33,9 @@ http://www.vitanuova.com/inferno/index.html
         None of these functions are currently implemented in the uClibc
         None of these functions are currently implemented in the uClibc
         library, so they must be added.
         library, so they must be added.
 
 
-        flockfile               <required>                              <---
+        flockfile               <implemented>
-        ftrylockfile            <required>                              <---
+        ftrylockfile            <implemented>
-        funlockfile             <required>                              <---
+        funlockfile             <implemented>
 
 
 1.2 Functions that must use buffer access mutexes, according to Butenhof
 1.2 Functions that must use buffer access mutexes, according to Butenhof
 
 
@@ -43,10 +43,10 @@ http://www.vitanuova.com/inferno/index.html
         buffer access mutexes.  This does not represent all functions that
         buffer access mutexes.  This does not represent all functions that
         need to use the mutexes.
         need to use the mutexes.
 
 
-        getc                    <mutex required>                        <---
+        getc                    <mutex required>
-        getchar                 <mutex required>                        <---
+        getchar                 <mutex required>
-        putc                    <mutex required>                        <---
+        putc                    <mutex required>
-        putchar                 <mutex required>                        <---
+        putchar                 <mutex required>
 
 
 1.3 Functions from glibc (libio) that use buffer access mutexes
 1.3 Functions from glibc (libio) that use buffer access mutexes
 
 
@@ -57,21 +57,21 @@ http://www.vitanuova.com/inferno/index.html
         The rest may require the access mutex. (These must be analyzed on a
         The rest may require the access mutex. (These must be analyzed on a
         case-by-case basis.)
         case-by-case basis.)
 
 
-        clearerr                <mutex required>                        <---
+        clearerr                <mutex required>
-        feof                    <mutex required>                        <---
+        feof                    <mutex required>
-        ferror                  <mutex required>                        <---
+        ferror                  <mutex required>
-        fputc                   <mutex required>                        <---
+        fputc                   <mutex required>
         fputwc                  <not supported>
         fputwc                  <not supported>
-        freopen                 <mutex required>                        <---
+        freopen                 <mutex required>
-        freopen64               <not supported>
+        freopen64               <mutex required>
-        fseek                   <mutex required>                        <---
+        fseek                   <mutex required>
-        fseeko                  <not supported>
+        fseeko                  <mutex required>
-        fseeko64                <not supported>
+        fseeko64                <mutex required>
-        ftello                  <not supported>
+        ftello                  <mutex required>
-        ftello64                <not supported>
+        ftello64                <mutex required>
         fwide                   <not supported>
         fwide                   <not supported>
-        getc                    <macro for fgetc>
+        getc                    <mutex required>
-        getchar                 <macro for fgetc>
+        getchar                 <mutex required>
         getwc                   <not supported>
         getwc                   <not supported>
         getwchar                <not supported>
         getwchar                <not supported>
         iofclose                <not supported>
         iofclose                <not supported>
@@ -102,49 +102,50 @@ http://www.vitanuova.com/inferno/index.html
         oldiofsetpos            <not supported>
         oldiofsetpos            <not supported>
         oldiofsetpos64          <not supported>
         oldiofsetpos64          <not supported>
         peekc                   <not supported>
         peekc                   <not supported>
-        putc                    <macro for fputc>
+        putc                    <mutex required>
-        putchar                 <macro for fputc>
+        putchar                 <mutex required>
         putwc                   <not supported>
         putwc                   <not supported>
         putwchar                <not supported>
         putwchar                <not supported>
-        rewind                  <mutex required>                        <---
+        rewind                  <mutex required>
 
 
 1.4 Functions from Proventhreads that use buffer access mutexes
 1.4 Functions from Proventhreads that use buffer access mutexes
 
 
         See description above.  This applies only to the C library included
         See description above.  This applies only to the C library included
         in the proventhreads distribution.
         in the proventhreads distribution.
 
 
-        clearerr                <mutex required>                        <---
+        clearerr                <mutex required>
-        fclose                  <mutex required>                        <---
+        fclose                  <mutex required>
-        fflush                  <mutex required>                        <---
+        fflush                  <mutex required>
-        fgetc                   <mutex required>                        <---
+        fgetc                   <mutex required>
         __getc                  <not supported>
         __getc                  <not supported>
         fgetline                <not supported>
         fgetline                <not supported>
-        fgetpos                 <mutex required>                        <---
+        fgetpos                 <mutex required>
-        fgets                   <mutex required>                        <---
+        fgetpos64               <mutex required>
+        fgets                   <mutex required>
         fpurge                  <not supported>
         fpurge                  <not supported>
-        fputc                   <mutex required>                        <---
+        fputc                   <mutex required>
         __putc                  <not supported>
         __putc                  <not supported>
-        fputs                   <mutex required>                        <---
+        fputs                   <mutex required>
-        fread                   <mutex required>                        <---
+        fread                   <mutex required>
-        freopen                 <mutex required>                        <---
+        freopen                 <mutex required>
-        fscanf                  <mutex required>                        <---
+        fscanf                  <mutex required>
-        fseek                   <mutex required>                        <---
+        fseek                   <mutex required>
-        ftell                   <mutex required>                        <---
+        ftell                   <mutex required>
         fwalk                   <not supported>
         fwalk                   <not supported>
-        fwrite                  <mutex required>                        <---
+        fwrite                  <mutex required>
-        getc                    <macro for fgetc>
+        getc                    <mutex required>
-        getchar                 <mutex required>                        <---
+        getchar                 <mutex required>
-        putc                    <macro for fputc>
+        putc                    <mutex required>
-        putchar                 <mutex required>                        <---
+        putchar                 <mutex required>
-        puts                    <mutex required>                        <---
+        puts                    <mutex required>
-        putw                    <not supported>
+        putw                    <mutex _not_ required>
         refill                  <not supported>
         refill                  <not supported>
-        rewind                  <mutex required>                        <---
+        rewind                  <mutex required>
-        scanf                   <mutex required>                        <---
+        scanf                   <mutex required>
-        setvbuf                 <mutex required>                        <---
+        setvbuf                 <mutex required>
-        ungetc                  <mutex required>                        <---
+        ungetc                  <mutex required>
-        vfprintf                <mutex required>                        <---
+        vfprintf                <mutex required>
-        vscanf                  <mutex required>                        <---
+        vscanf                  <mutex required>
 
 
 1.5 Unlocked buffer access
 1.5 Unlocked buffer access
 
 
@@ -155,10 +156,10 @@ http://www.vitanuova.com/inferno/index.html
         then use getc_unlocked within the loop for speed.  That way, the lock
         then use getc_unlocked within the loop for speed.  That way, the lock
         only needs to be grabbed and released once, rather than for each call.
         only needs to be grabbed and released once, rather than for each call.
 
 
-        getc_unlocked           <required>                              <---
+        getc_unlocked           <implemented
-        getchar_unlocked        <required>                              <---
+        getchar_unlocked        <implemented
-        putc_unlocked           <required>                              <---
+        putc_unlocked           <implemented
-        putchar_unlocked        <required>                              <---
+        putchar_unlocked        <implemented
 
 
 1.6 Additional unlocked calls made in glibc
 1.6 Additional unlocked calls made in glibc
 
 
@@ -166,17 +167,17 @@ http://www.vitanuova.com/inferno/index.html
         glibc library uses for unlocked buffer access.  Though not strictly
         glibc library uses for unlocked buffer access.  Though not strictly
         necessary, these may be nice to have in uClibc.
         necessary, these may be nice to have in uClibc.
 
 
-        fileno_unlocked         <desired>                               <---
+        fileno_unlocked         <implemented
-        clearerr_unlocked       <desired>                               <---
+        clearerr_unlocked       <implemented
-        feof_unlocked           <desired>                               <---
+        feof_unlocked           <implemented
-        ferror_unlocked         <desired>                               <---
+        ferror_unlocked         <implemented
-        fputc_unlocked          <desired>                               <---
+        fputc_unlocked          <implemented
-        fgetc_unlocked          <desired>                               <---
+        fgetc_unlocked          <implemented
-        fflush_unlocked         <desired>                               <---
+        fflush_unlocked         <implemented
-        fread_unlocked          <desired>                               <---
+        fread_unlocked          <implemented
-        fwrite_unlocked         <desired>                               <---
+        fwrite_unlocked         <implemented
-        fgets_unlocked          <desired>                               <---
+        fgets_unlocked          <implemented
-        fputs_unlocked          <desired>                               <---
+        fputs_unlocked          <implemented
 
 
 1.7 Additional unlocked calls made in Proventhreads
 1.7 Additional unlocked calls made in Proventhreads
 
 
@@ -203,16 +204,13 @@ http://www.vitanuova.com/inferno/index.html
 2.1 User and terminal identification:
 2.1 User and terminal identification:
 
 
         getlogin_r              <implemented>
         getlogin_r              <implemented>
-        ctermid                 <implemented>                           (1)
+        ctermid                 <implemented>
-        ttyname_r               <required>                              <---
+        ttyname_r               <implemented>
 
 
-        1. ctermid is a special case.  The signature has not changed, but a
-        requirement has been added that its parameter point to a structure
-        of exactly L_ctermid bytes.  
 
 
 2.2 Directory searching
 2.2 Directory searching
 
 
-        readdir_r               <required>                              <---
+        readdir_r               <implemented>
 
 
 2.3 String token
 2.3 String token
 
 
@@ -227,7 +225,7 @@ http://www.vitanuova.com/inferno/index.html
 
 
 2.5 Random number generation
 2.5 Random number generation
 
 
-        rand_r                  <required>                              <---
+        rand_r                  <implemented
 
 
 2.6 Group and user database
 2.6 Group and user database
 
 
@@ -244,12 +242,9 @@ http://www.vitanuova.com/inferno/index.html
         thread-safe version.  Those that do apply, but have not been
         thread-safe version.  Those that do apply, but have not been
         implemented yet are highlighted.
         implemented yet are highlighted.
 
 
-        __fgetpwent_r                   <not supported>
         fgetpwent_r                     <implemented>
         fgetpwent_r                     <implemented>
-        __ttyname_r                     <not supported>
         getttyname_r                    <not supported>
         getttyname_r                    <not supported>
-        __getmntent_r                   <not supported>
+        getmntent_r                     <implemented>
-        getmntent_r                     <desired>                       <---
         ecvt_r                          <not supported>
         ecvt_r                          <not supported>
         fcvt_r                          <not supported>
         fcvt_r                          <not supported>
         qecvt_r                         <not supported>
         qecvt_r                         <not supported>
@@ -257,83 +252,86 @@ http://www.vitanuova.com/inferno/index.html
         hcreate_r                       <not supported>
         hcreate_r                       <not supported>
         hdestroy_r                      <not supported>
         hdestroy_r                      <not supported>
         hsearch_r                       <not supported>
         hsearch_r                       <not supported>
+        getspent_r                      <implemented>
+        getspnam_r                      <implemented>
+        sgetspent_r                     <implemented>
+        fgetspent_r                     <implemented>
+        gethostbyaddr_r                 <implemented>
+        gethostbyname2_r                <implemented>
+        gethostbyname_r                 <implemented>
+        gethostent_r                    <desired>                       <---
+        getnetbyaddr_r                  <desired>                       <---
+        getnetent_r                     <desired>                       <---
+        getnetbyname_r                  <desired>                       <---
+        getprotobynumber_r              <desired>                       <---
+        getprotoent_r                   <desired>                       <---
+        getprotobyname_r                <desired>                       <---
+        getservbyname_r                 <implemented>
+        getservbyport_r                 <implemented>
+        getservent_r                    <implemented>
+        getrpcent_r                     <desired>                       <---
+        getrpcbyname_r                  <desired>                       <---
+        getrpcbynumber_r                <implemented>
+        ether_aton_r                    <not supported>
+        ether_ntoa_r                    <not supported>
+        getnetgrent_r                   <not supported>
+        getaliasent_r                   <not supported>
+        getaliasbyname_r                <not supported>
+        nscd_getpw_r                    <not supported>
+        nscd_getgr_r                    <not supported>
+        nscd_gethst_r                   <not supported>
+        getutent_r                      <desired>                       <---
+        getutent_r_unknown              <not supported>
+        getutid_r_unknown               <not supported>
+        getutline_r_unknown             <not supported>
+        getutid_r                       <desired>                       <---
+        getutline_r                     <required>                      <---
+        getutent_r_file                 <not supported>
+        getutid_r_file                  <not supported>
+        getutline_r_file                <not supported>
+        internal_getut_r                <not supported>
+        getutent_r_daemon               <not supported>
+        getutid_r_daemon                <not supported>
+        getutline_r_daemon              <not supported>
+        ptsname_r                       <not supported>
+        __fgetpwent_r                   <not supported>
+        __ttyname_r                     <not supported>
+        __getmntent_r                   <not supported>
         __getspent_r                    <not supported>
         __getspent_r                    <not supported>
-        getspent_r                      <not supported>
         __getspnam_r                    <not supported>
         __getspnam_r                    <not supported>
-        getspnam_r                      <not supported>
         __sgetspent_r                   <not supported>
         __sgetspent_r                   <not supported>
-        sgetspent_r                     <not supported>
         __fgetspent_r                   <not supported>
         __fgetspent_r                   <not supported>
-        fgetspent_r                     <not supported>
         __gethostbyaddr_r               <not supported>
         __gethostbyaddr_r               <not supported>
-        gethostbyaddr_r                 <desired>                       <---
         __gethostbyname2_r              <not supported>
         __gethostbyname2_r              <not supported>
-        gethostbyname2_r                <not supported>
         __gethostbyname_r               <not supported>
         __gethostbyname_r               <not supported>
-        gethostbyname_r                 <desired>                       <---
         __gethostent_r                  <not supported
         __gethostent_r                  <not supported
-        gethostent_r                    <not supported>
         __getnetbyaddr_r                <not supported>
         __getnetbyaddr_r                <not supported>
-        getnetbyaddr_r                  <desired>                       <---
         __getnetent_r                   <not supported>
         __getnetent_r                   <not supported>
-        getnetent_r                     <desired>                       <---
         __getnetbyname_r                <not supported>
         __getnetbyname_r                <not supported>
-        getnetbyname_r                  <desired>                       <---
         __getprotobynumber_r            <not supported>
         __getprotobynumber_r            <not supported>
-        getprotobynumber_r              <desired>                       <---
         __getprotoent_r                 <not supported>
         __getprotoent_r                 <not supported>
-        getprotoent_r                   <desired>                       <---
         __getprotobyname_r              <not supported>
         __getprotobyname_r              <not supported>
-        getprotobyname_r                <desired>                       <---
         __getservbyname_r               <not supported>
         __getservbyname_r               <not supported>
-        getservbyname_r                 <desired>                       <---
         __getservbyport_r               <not supported>
         __getservbyport_r               <not supported>
-        getservbyport_r                 <desired>                       <---
-        __getservent_r                  <not supported>
-        getservent_r                    <desired>                       <---
         __getrpcent_r                   <not supported>
         __getrpcent_r                   <not supported>
-        getrpcent_r                     <desired>                       <---
+        __getservent_r                  <not supported>
         __getrpcbyname_r                <not supported>
         __getrpcbyname_r                <not supported>
-        getrpcbyname_r                  <desired>                       <---
         __getrpcbynumber_r              <not supported>
         __getrpcbynumber_r              <not supported>
-        getrpcbynumber_r                <desired>                       <---
-        ether_aton_r                    <not supported>
-        ether_ntoa_r                    <not supported>
         __getnetgrent_r                 <not supported>
         __getnetgrent_r                 <not supported>
         __internal_getnetgrent_r        <not supported>
         __internal_getnetgrent_r        <not supported>
-        getnetgrent_r                   <not supported>
         __getaliasent_r                 <not supported>
         __getaliasent_r                 <not supported>
-        getaliasent_r                   <not supported>
         __getaliasbyname_r              <not supported>
         __getaliasbyname_r              <not supported>
-        getaliasbyname_r                <not supported>
         __nscd_getpwnam_r               <not supported>
         __nscd_getpwnam_r               <not supported>
         __nscd_getpwuid_r               <not supported>
         __nscd_getpwuid_r               <not supported>
-        nscd_getpw_r                    <not supported>
         __nscd_getgrgid_r               <not supported>
         __nscd_getgrgid_r               <not supported>
         __nscd_getgrnam_r               <not supported>
         __nscd_getgrnam_r               <not supported>
-        nscd_getgr_r                    <not supported>
         __nscd_gethostbyaddr_r          <not supported>
         __nscd_gethostbyaddr_r          <not supported>
         __nscd_gethostbyname2_r         <not supported>
         __nscd_gethostbyname2_r         <not supported>
         __nscd_gethostbyname_r          <not supported>
         __nscd_gethostbyname_r          <not supported>
-        nscd_gethst_r                   <not supported>
+        __getutent_r                    <not supported>
-        __getutent_r                    <desired>                       <---
-        getutent_r                      <desired>                       <---
-        getutent_r_unknown              <not supported>
-        getutid_r_unknown               <not supported>
-        getutline_r_unknown             <not supported>
         __getutid_r                     <not supported>
         __getutid_r                     <not supported>
-        getutid_r                       <desired>                       <---
         __getutline_r                   <not supported>
         __getutline_r                   <not supported>
-        getutline_r                     <required>                      <---
-        getutent_r_file                 <not supported>
-        getutid_r_file                  <not supported>
-        getutline_r_file                <not supported>
-        internal_getut_r                <not supported>
-        getutent_r_daemon               <not supported>
-        getutid_r_daemon                <not supported>
-        getutline_r_daemon              <not supported>
         __ptsname_r                     <not supported>
         __ptsname_r                     <not supported>
-        ptsname_r                       <not supported>
 
 
 
 
 2.8 Additional thread-safe functions implemented by Proventhreads
 2.8 Additional thread-safe functions implemented by Proventhreads
@@ -341,9 +339,9 @@ http://www.vitanuova.com/inferno/index.html
         See description above.  This applies only to the C library included
         See description above.  This applies only to the C library included
         in the proventhreads distribution.
         in the proventhreads distribution.
 
 
-        inet_ntoa_r             <desired>                               <---
+        inet_ntoa_r             <implemented>
-        gethostbyaddr_r         <desired>                               <---
+        gethostbyaddr_r         <implemented>
-        gethostbyname_r         <desired>                               <---
+        gethostbyname_r         <implemented>
         gethostent_r            <not supported>
         gethostent_r            <not supported>
         getnetbyaddr_r          <desired>                               <---
         getnetbyaddr_r          <desired>                               <---
         getnetbyname_r          <desired>                               <---
         getnetbyname_r          <desired>                               <---
@@ -351,9 +349,9 @@ http://www.vitanuova.com/inferno/index.html
         getprotobynumber_r      <desired>                               <---
         getprotobynumber_r      <desired>                               <---
         getprotoent_r           <desired>                               <---
         getprotoent_r           <desired>                               <---
         getprotobyname_r        <desired>                               <---
         getprotobyname_r        <desired>                               <---
-        getservbyname_r         <desired>                               <---
+        getservbyname_r         <implemented>
-        getservbyport_r         <desired>                               <---
+        getservbyport_r         <implemented>
-        getservent_r            <desired>                               <---
+        getservent_r            <implemented>
 
 
 
 
 3. List of functions in uClibc that use static data structures
 3. List of functions in uClibc that use static data structures
@@ -375,11 +373,38 @@ http://www.vitanuova.com/inferno/index.html
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
+        crypt/des.c:
+
+	static u_char   inv_key_perm[64];
+	static u_char   inv_comp_perm[56];
+	static u_char   u_sbox[8][64];
+	static u_char   u_key_perm[56];
+	static u_char   un_pbox[32];
+	static u_int32_t en_keysl[16], en_keysr[16];
+	static u_int32_t de_keysl[16], de_keysr[16];
+	static u_int32_t ip_maskl[8][256], ip_maskr[8][256];
+	static u_int32_t fp_maskl[8][256], fp_maskr[8][256];
+	static u_int32_t key_perm_maskl[8][128], key_perm_maskr[8][128];
+	static u_int32_t comp_maskl[8][128], comp_maskr[8][128];
+	static u_int32_t saltbits;
+
+        __des_crypt_r		<implemented badly!>                    <---
+
+	This needs to be fixed to actually be reentrant.   Right now it
+	just fakes it, which is pretty lame....  All the above should be
+	moved into a 'struct des_context' or some such... 
+
+        --------------------------------------------------------------------
+
         crypt/md5.c:
         crypt/md5.c:
 
 
-        static unsigned char PADDING[64]        <fix desired>           <---
+	static const char __md5__magic[];
+	static const unsigned char __md5_itoa64[];
 
 
-        NOTE: This is okay, but should use the const keyword.
+        __md5_crypt_r		<implemented>
+
+	No problems here...
+        
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -387,7 +412,8 @@ http://www.vitanuova.com/inferno/index.html
 
 
         static char buf[16];
         static char buf[16];
 
 
-        inet_ntoa               <inet_ntoa_r not implemented>           <---
+        inet_ntoa               <implemented>
+        inet_ntoa_r             <implemented>
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -398,12 +424,12 @@ http://www.vitanuova.com/inferno/index.html
         static struct netent net;
         static struct netent net;
         static char *net_aliases[MAXALIASES];
         static char *net_aliases[MAXALIASES];
 
 
-        setnetent               <fix required>                          <---
+        setnetent               <mutex required>
-        endnetent               <fix required>                          <---
+        endnetent               <mutex required>
-        getnetent               <getnetent_r required>                  <---
+        getnetent               <mutex required>
+        getnetent_r             <not implemented>
 
 
         NOTE: setnetent and endnetent are not implemented in glibc.
         NOTE: setnetent and endnetent are not implemented in glibc.
-        Proventhreads uses pthread mutexes to protect this static data.
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -415,14 +441,16 @@ http://www.vitanuova.com/inferno/index.html
         static char *proto_aliases[MAXALIASES];
         static char *proto_aliases[MAXALIASES];
         static int proto_stayopen;
         static int proto_stayopen;
 
 
-        setprotoent             <fix required>                          <---
+        setprotoent             <mutex required>
-        endprotoent             <fix required>                          <---
+        endprotoent             <mutex required>
-        getprotoent             <getprotoent_r required>                <---
+        getprotoent             <mutex required>
-        getprotobyname          <getprotobyname_r required>             <---
+        getprotoent_r           <implemented>
-        getprotobynumber        <getprotobynumber required>             <---
+        getprotobyname          <implemented>
+        getprotobyname_r        <not implemented>
+        getprotobynumber        <implemented>
+        getprotobynumber_r      <not implemented>
 
 
         NOTE: setprotoent and endprotoent are not implemented in glibc.
         NOTE: setprotoent and endprotoent are not implemented in glibc.
-        Proventhreads uses pthread mutexes to protect this static data.
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -434,48 +462,44 @@ http://www.vitanuova.com/inferno/index.html
         static char *serv_aliases[MAXALIASES];
         static char *serv_aliases[MAXALIASES];
         static int serv_stayopen;
         static int serv_stayopen;
 
 
-        setservent              <fix required>                          <---
+        setservent              <mutex required>
-        endservent              <fix required>                          <---
+        endservent              <fix mutex required>
-        getservent              <getservent_r required>                 <---
+        getservent              <mutex required>
-        getservbyname           <getservbyname_r required>              <---
+        getservent_r            <implemented>
-        getservbyport           <getservbyport_r required>              <---
+        getservbyname           <mutex required>
+        getservbyname_r         <implemented>
+        getservbyport           <mutex required>
+        getservbyport_r         <implemented>
 
 
         NOTE: setservent and endservent are not implemented in glibc.
         NOTE: setservent and endservent are not implemented in glibc.
-        Proventhreads uses pthread mutexes to protect this static data.
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
-        net/resolv.c:   
+	static struct hostent h;
+	static char buf[xxx];
 
 
-        static int id = 1;
+        gethostbyname           <implemented>
-        static int ns = 0;
 
 
-        dns_lookup              <fix required>                          <---
 
 
-        NOTE: dns_lookup is not implemented by glibc or Proventhreads.
+	static struct hostent h;
+	static char buf[xxx];
 
 
-        static struct hostent h;
+        gethostbyname2          <implemented>
-        static char namebuf[256];
-        static struct in_addr in;
-        static struct in_addr *addr_list[2];
 
 
-        gethostbyname           <gethostbyname_r required>              <---
+	static struct hostent h;
+	static char buf[xxx];
 
 
-        static struct hostent h;
+        gethostbyaddr           <implemented>
-        static char namebuf[256];
-        static struct in_addr in;
-        static struct in_addr *addr_list[2];
 
 
-        gethostbyaddr           <gethostbyaddr_r required>              <---
 
 
-        static struct hostent   h;
+	static int __stay_open;
-        static struct in_addr   in;
+	static FILE * __gethostent_fp;
-        static struct in_addr   *addr_list[2];
+	static struct hostent h;
-        static char                             line[80];
+	static char buf[xxx];
 
 
-        read_etc_hosts          <fix required>                          <---
+        gethostent              <mutex required>
-
+        sethostent              <mutex required>
-        NOTE: dns_lookup is not implemented by glibc or Proventhreads.
+        endhostent              <mutex required>
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -912,7 +936,10 @@ http://www.vitanuova.com/inferno/index.html
 
 
         static uint64_t value;
         static uint64_t value;
 
 
-        __gen_tempname          <fix required>                          <---
+        __gen_tempname          <no fix required>
+
+	This is supposed to be random trash, so the more threading
+	collisions the better...
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -952,7 +979,8 @@ http://www.vitanuova.com/inferno/index.html
         static char buff[MNTMAXSTR];
         static char buff[MNTMAXSTR];
         static struct mntent mnt;
         static struct mntent mnt;
 
 
-        getmntent               <getmntent_r required>                  <---
+        getmntent               <mutex required>
+        getmntent_r             <implemented>
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -1086,19 +1114,20 @@ http://www.vitanuova.com/inferno/index.html
 
 
         misc/utmp/utent.c:
         misc/utmp/utent.c:
 
 
-        static int ut_fd = -1;
+	static int static_fd = -1;
+	static struct utmp static_utmp;
+	static const char default_file_name[] = _PATH_UTMP;
+	static const char *static_ut_name = (const char *) default_file_name;
 
 
-        setutent                <fix required>                          <---
-        endutent                <fix required>                          <---
-        getutent                <fix required>                          <---
-        getutid                 <fix required>                          <---
-        getutline               <fix required>                          <---
-        pututline               <fix required>                          <---
-        utmpname                <fix required>                          <---
-        
-        static struct utmp utmp;
 
 
-        __getutent              <fix required>                          <---
+        setutent                <ok>
+        endutent                <ok>
+        getutent                <ok>
+        getutid                 <ok>
+        getutline               <ok>
+        pututline               <ok>
+        utmpname                <ok>
+        __getutent              <ok>
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -1191,16 +1220,21 @@ http://www.vitanuova.com/inferno/index.html
 
 
         static int _bsearch;
         static int _bsearch;
 
 
-        bsearch                 <fix required>                          <---
+        bsearch                 <ok>
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
-        stdlib/putenv.c:
+        stdlib/setenv.c:
 
 
-        static char **mall_env = 0;
+	static char **last_environ;
-        static int extras = 0;
 
 
-        putenv                  <fix required>                          <---
+        __add_to_environ        <ok>
+        unsetenv                <ok>
+        setenv                  <ok>
+        clearenv                <ok>
+        putenv                  <ok>
+
+	all ok now.
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -1219,17 +1253,6 @@ http://www.vitanuova.com/inferno/index.html
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
-        stdlib/setenv.c:
-
-        static pthread_once__t _once_block = pthread_once_init;         (1)
-        static pthread_mutex_t _setenv_mutex;                           (1)
-        static char **last_environ = NULL;                              (1)
-
-        1: Obviously, nothing to do here. (Unless I change the way we
-        deal with threads).
-
-        --------------------------------------------------------------------
-
         stdlib/malloc/avlmacro.h
         stdlib/malloc/avlmacro.h
 
 
         static objname *__Avl_##objname##pr##_new_node;
         static objname *__Avl_##objname##pr##_new_node;
@@ -1252,30 +1275,12 @@ http://www.vitanuova.com/inferno/index.html
 
 
         stdlib/malloc-930716/malloc.c:
         stdlib/malloc-930716/malloc.c:
 
 
-        static int heapsize;
+        A bunch of stuff
-        static int initialized;
-        static size_t pagesize;
         
         
-        inititalize             <fix required>                          <---
+        malloc                  <ok>
-        morecore                <fix required>                          <---
+        realloc                 <ok>
-        malloc                  <fix required>                          <---
+        free                    <ok>
-
+        etc                     <ok>
-        --------------------------------------------------------------------
-
-        stdlib/malloc-930716/valloc.c:
-
-        static size_t pagesize;
-
-        valloc                  <fix required>                          <---
-
-        --------------------------------------------------------------------
-
-        string/config.c:
-
-        static char *args[16];
-        static char cfgbuf[128];
-
-        cfgread                 <fix required>                          <---
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -1285,7 +1290,7 @@ http://www.vitanuova.com/inferno/index.html
         static char retbuf[33];
         static char retbuf[33];
 
 
         strerror                <fix required>                          <---
         strerror                <fix required>                          <---
-        main                    <fix required>                          <---
+        strerror_r              <fix required>                          <---
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -1302,87 +1307,8 @@ http://www.vitanuova.com/inferno/index.html
 
 
         static char *save = 0;
         static char *save = 0;
 
 
-        strtok                  <strtok_r implemented>                  <---
+        strtok                  <ok>
-
+        strtok_r                <ok>
-        --------------------------------------------------------------------
-
-        sysdeps/linux/common/kernel_version.c:
-
-        static int __linux_kernel_version = -1;
-
-        __get_linux_kernel_version      <fix required>                  (1)
-
-        1: This static value never actually gets updated!  This a bug.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/i386/bits/huge_val.h:
-
-        static __huge_val_t __huge_val          <fix desired>           <---
-        static __huge_valf_t __huge_valf        <fix desired>           <---
-        static __huge_vall_t __huge_vall        <fix desired>           <---
-
-        NOTE: These are okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/i386/bits/nan.h:
-
-        static union { ... } __nan_union        <fix desired>           <---
-
-        NOTE: This is okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/m68k/bits/huge_val.h:
-
-        static union { ... } __huge_val         <fix desired>           <---
-        static union { ... } __huge_valf        <fix desired>           <---
-        static union { ... } __huge_vall        <fix desired>           <---
-
-        NOTE: These are okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/m68k/bits/nan.h:
-
-        static union { ... } __nan_union        <fix desired>           <---
-
-        NOTE: This is okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/sh/bits/huge_val.h:
-
-        static __huge_val_t __huge_val          <fix desired>           <---
-        static __huge_valf_t __huge_valf        <fix desired>           <---
-
-        NOTE: These are okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/sh/bits/nan.h:
-
-        static union { ... } __nan_union        <fix desired>           <---
-
-        NOTE: This is okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/sparc/bits/huge_val.h:
-
-        static __huge_val_t __huge_val          <fix desired>           <---
-        static __huge_valf_t __huge_valf        <fix desired>           <---
-
-        NOTE: These are okay, but should use the const keyword.
-
-        --------------------------------------------------------------------
-
-        sysdeps/linux/sparc/bits/nan.h:
-
-        static union { ... } __nan_union        <fix desired>           <---
-
-        NOTE: This is okay, but should use the const keyword.
 
 
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
@@ -1418,20 +1344,6 @@ http://www.vitanuova.com/inferno/index.html
         
         
         --------------------------------------------------------------------
         --------------------------------------------------------------------
 
 
-        unistd/getcwd.c:
-
-        static char *path_buf;
-        static int path_size;
-        static dev_t root_dev;
-        static ino_t root_ino;
-        static struct stat st;
-
-        getswd                  <fix required>                          <---
-        recurser                <fix required>                          <---
-        search_dir              <fix required>                          <---
-        
-        --------------------------------------------------------------------
-
         unistd/getopt.c:
         unistd/getopt.c:
 
 
         static int sp = 1;
         static int sp = 1;