|
@@ -1,2187 +1,64 @@
|
|
uClibc thread-safety analysis
|
|
uClibc thread-safety analysis
|
|
-By Steve Thayer <sthayer@coactive.com>
|
|
|
|
-with updates by Erik Andersen <andersee@debian.org>
|
|
|
|
|
|
|
|
-Introduction:
|
|
+Things that are still known to be needed for thread safety:
|
|
|
|
|
|
-The purpose of this document is to identify the things that need to be done
|
|
+ getgrgid_r <not implemented, required by SuSv3>
|
|
-to the uClibc C library in order to make it thread-safe. The goal is to be
|
|
+ getgrnam_r <not implemented, required by SuSv3>
|
|
-able to use a pthreads thread implementation under uClinux, using the uClibc
|
|
|
|
-C library. To help identify the things that require changing, I used David R.
|
|
|
|
-Butenhof's book Programming With POSIX Threads, the source code for the
|
|
|
|
-glibc 2.1.3 C library, and the source code for the C library included in the
|
|
|
|
-Proventhreads distribution.
|
|
|
|
|
|
|
|
-References:
|
|
|
|
|
|
|
|
-Butenhof, David R., Programming With POSIX Threads, Addison Wesley Longman, Inc., Reading, MA, ISBN 0-201-63392-2, 1997.
|
|
|
|
|
|
|
|
|
|
|
|
-The GNU C library is available from the Free Software Foundation
|
|
|
|
-http://www.gnu.org/software/libc/libc.html
|
|
|
|
|
|
|
|
-Proventhreads is part of the Inferno Operating system.
|
|
+Things that might be nice, but are not required:
|
|
-http://www.vitanuova.com/inferno/index.html
|
|
|
|
|
|
|
|
|
|
+ gethostent_r <desired, but not required for SuSv3>
|
|
|
|
+ getnetbyaddr_r <desired, but not required for SuSv3>
|
|
|
|
+ getnetent_r <desired, but not required for SuSv3>
|
|
|
|
+ getnetbyname_r <desired, but not required for SuSv3>
|
|
|
|
+ getprotobynumber_r <desired, but not required for SuSv3>
|
|
|
|
+ getprotoent_r <desired, but not required for SuSv3>
|
|
|
|
+ getprotobyname_r <desired, but not required for SuSv3>
|
|
|
|
+ getnetbyaddr_r <desired, but not required for SuSv3>
|
|
|
|
+ getnetbyname_r <desired, but not required for SuSv3>
|
|
|
|
+ getnetent_r <desired, but not required for SuSv3>
|
|
|
|
+ getprotobynumber_r <desired, but not required for SuSv3>
|
|
|
|
+ getprotoent_r <desired, but not required for SuSv3>
|
|
|
|
+ getprotobyname_r <desired, but not required for SuSv3>
|
|
|
|
|
|
-1. Stdio:
|
|
|
|
|
|
|
|
-1.1 Buffer access mutexes
|
|
|
|
|
|
|
|
- The following functions are required in order to protect shared
|
|
+Functions that use static data and may still need locking:
|
|
- I/O buffers from being accessed by more than one thread at a time.
|
|
|
|
- None of these functions are currently implemented in the uClibc
|
|
|
|
- library, so they must be added.
|
|
|
|
|
|
|
|
- flockfile <implemented>
|
|
|
|
- ftrylockfile <implemented>
|
|
|
|
- funlockfile <implemented>
|
|
|
|
|
|
|
|
-1.2 Functions that must use buffer access mutexes, according to Butenhof
|
|
|
|
-
|
|
|
|
- The following functions are identified by Butenhof as needing to use
|
|
|
|
- buffer access mutexes. This does not represent all functions that
|
|
|
|
- need to use the mutexes.
|
|
|
|
-
|
|
|
|
- getc <mutex required>
|
|
|
|
- getchar <mutex required>
|
|
|
|
- putc <mutex required>
|
|
|
|
- putchar <mutex required>
|
|
|
|
-
|
|
|
|
-1.3 Functions from glibc (libio) that use buffer access mutexes
|
|
|
|
-
|
|
|
|
- The following functions are functions found in glibc that currently
|
|
|
|
- use the buffer access mutexes. Comments in brackets represent
|
|
|
|
- status of uClibc with regard to these functions. Most of these
|
|
|
|
- functions aren't even supported under uClibc, so no work is required.
|
|
|
|
- The rest may require the access mutex. (These must be analyzed on a
|
|
|
|
- case-by-case basis.)
|
|
|
|
-
|
|
|
|
- clearerr <mutex required>
|
|
|
|
- feof <mutex required>
|
|
|
|
- ferror <mutex required>
|
|
|
|
- fputc <mutex required>
|
|
|
|
- fputwc <not supported>
|
|
|
|
- freopen <mutex required>
|
|
|
|
- freopen64 <mutex required>
|
|
|
|
- fseek <mutex required>
|
|
|
|
- fseeko <mutex required>
|
|
|
|
- fseeko64 <mutex required>
|
|
|
|
- ftello <mutex required>
|
|
|
|
- ftello64 <mutex required>
|
|
|
|
- fwide <not supported>
|
|
|
|
- getc <mutex required>
|
|
|
|
- getchar <mutex required>
|
|
|
|
- getwc <not supported>
|
|
|
|
- getwchar <not supported>
|
|
|
|
- iofclose <not supported>
|
|
|
|
- iofflush <not supported>
|
|
|
|
- iofgetpos <not supported>
|
|
|
|
- iofgetpos64 <not supported>
|
|
|
|
- iofgets <not supported>
|
|
|
|
- iofgetws <not supported>
|
|
|
|
- iofputs <not supported>
|
|
|
|
- iofputws <not supported>
|
|
|
|
- iofread <not supported>
|
|
|
|
- iofsetpos <not supported>
|
|
|
|
- iofsetpos64 <not supported>
|
|
|
|
- ioftell <not supported>
|
|
|
|
- iofwrite <not supported>
|
|
|
|
- iogetdelim <not supported>
|
|
|
|
- iogets <not supported>
|
|
|
|
- ioputs <not supported>
|
|
|
|
- ioseekoff <not supported>
|
|
|
|
- ioseekpos <not supported>
|
|
|
|
- iosetbuffer <not supported>
|
|
|
|
- iosetvbuf <not supported>
|
|
|
|
- ioungetc <not supported>
|
|
|
|
- ioungetwc <not supported>
|
|
|
|
- oldiofclose <not supported>
|
|
|
|
- oldiofgetpos <not supported>
|
|
|
|
- oldiofgetpos64 <not supported>
|
|
|
|
- oldiofsetpos <not supported>
|
|
|
|
- oldiofsetpos64 <not supported>
|
|
|
|
- peekc <not supported>
|
|
|
|
- putc <mutex required>
|
|
|
|
- putchar <mutex required>
|
|
|
|
- putwc <not supported>
|
|
|
|
- putwchar <not supported>
|
|
|
|
- rewind <mutex required>
|
|
|
|
-
|
|
|
|
-1.4 Functions from Proventhreads that use buffer access mutexes
|
|
|
|
-
|
|
|
|
- See description above. This applies only to the C library included
|
|
|
|
- in the proventhreads distribution.
|
|
|
|
-
|
|
|
|
- clearerr <mutex required>
|
|
|
|
- fclose <mutex required>
|
|
|
|
- fflush <mutex required>
|
|
|
|
- fgetc <mutex required>
|
|
|
|
- __getc <not supported>
|
|
|
|
- fgetline <not supported>
|
|
|
|
- fgetpos <mutex required>
|
|
|
|
- fgetpos64 <mutex required>
|
|
|
|
- fgets <mutex required>
|
|
|
|
- fpurge <not supported>
|
|
|
|
- fputc <mutex required>
|
|
|
|
- __putc <not supported>
|
|
|
|
- fputs <mutex required>
|
|
|
|
- fread <mutex required>
|
|
|
|
- freopen <mutex required>
|
|
|
|
- fscanf <mutex required>
|
|
|
|
- fseek <mutex required>
|
|
|
|
- ftell <mutex required>
|
|
|
|
- fwalk <not supported>
|
|
|
|
- fwrite <mutex required>
|
|
|
|
- getc <mutex required>
|
|
|
|
- getchar <mutex required>
|
|
|
|
- putc <mutex required>
|
|
|
|
- putchar <mutex required>
|
|
|
|
- puts <mutex required>
|
|
|
|
- putw <mutex _not_ required>
|
|
|
|
- refill <not supported>
|
|
|
|
- rewind <mutex required>
|
|
|
|
- scanf <mutex required>
|
|
|
|
- setvbuf <mutex required>
|
|
|
|
- ungetc <mutex required>
|
|
|
|
- vfprintf <mutex required>
|
|
|
|
- vscanf <mutex required>
|
|
|
|
-
|
|
|
|
-1.5 Unlocked buffer access
|
|
|
|
-
|
|
|
|
- These functions get used in situations where speed is important,
|
|
|
|
- and locking isn't necessary, or for use in a section of code that
|
|
|
|
- is already locked. For example, a for-loop that makes multiple calls
|
|
|
|
- to getc could make an exlicit call to flockfile outside the loop, and
|
|
|
|
- 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.
|
|
|
|
-
|
|
|
|
- getc_unlocked <implemented
|
|
|
|
- getchar_unlocked <implemented
|
|
|
|
- putc_unlocked <implemented
|
|
|
|
- putchar_unlocked <implemented
|
|
|
|
-
|
|
|
|
-1.6 Additional unlocked calls made in glibc
|
|
|
|
-
|
|
|
|
- These are additional functions (not mentioned by Butenhof) that the
|
|
|
|
- glibc library uses for unlocked buffer access. Though not strictly
|
|
|
|
- necessary, these may be nice to have in uClibc.
|
|
|
|
-
|
|
|
|
- fileno_unlocked <implemented
|
|
|
|
- clearerr_unlocked <implemented
|
|
|
|
- feof_unlocked <implemented
|
|
|
|
- ferror_unlocked <implemented
|
|
|
|
- fputc_unlocked <implemented
|
|
|
|
- fgetc_unlocked <implemented
|
|
|
|
- fflush_unlocked <implemented
|
|
|
|
- fread_unlocked <implemented
|
|
|
|
- fwrite_unlocked <implemented
|
|
|
|
- fgets_unlocked <implemented
|
|
|
|
- fputs_unlocked <implemented
|
|
|
|
-
|
|
|
|
-1.7 Additional unlocked calls made in Proventhreads
|
|
|
|
-
|
|
|
|
- Proventhreads only provides the four unlocked function calls above.
|
|
|
|
-
|
|
|
|
- <none>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-2. Thread-safe functions:
|
|
|
|
-
|
|
|
|
- There are some functions in the C library standard that are
|
|
|
|
- simply not thread-safe and cannot be thread-safe using their
|
|
|
|
- current interface. For example, any function that returns a
|
|
|
|
- pointer to static data, or requires static context between
|
|
|
|
- calls. To resolve this problem, new functions were added to
|
|
|
|
- the standard that perform the same basic task, but use a new
|
|
|
|
- interface that does not require static data. These functions
|
|
|
|
- share their name with the old unsafe functions, but have an
|
|
|
|
- "_r" appended to the name. By definition, these functions are
|
|
|
|
- reentrant and thread-safe. It is important to note that these
|
|
|
|
- functions to do not depend on <pthread.h> and can be used even
|
|
|
|
- if threading is not supported.
|
|
|
|
-
|
|
|
|
-2.1 User and terminal identification:
|
|
|
|
-
|
|
|
|
- getlogin_r <implemented>
|
|
|
|
- ctermid <implemented>
|
|
|
|
- ttyname_r <implemented>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-2.2 Directory searching
|
|
|
|
-
|
|
|
|
- readdir_r <implemented>
|
|
|
|
-
|
|
|
|
-2.3 String token
|
|
|
|
-
|
|
|
|
- strtok_r <implemented>
|
|
|
|
-
|
|
|
|
-2.4 Time representation
|
|
|
|
-
|
|
|
|
- asctime_r <implemented>
|
|
|
|
- ctime_r <implemented>
|
|
|
|
- gmtime_r <implemented>
|
|
|
|
- localtime_r <implemented>
|
|
|
|
-
|
|
|
|
-2.5 Random number generation
|
|
|
|
-
|
|
|
|
- rand_r <implemented
|
|
|
|
-
|
|
|
|
-2.6 Group and user database
|
|
|
|
-
|
|
|
|
- getgrgid_r <required> <---
|
|
|
|
- getgrnam_r <required> <---
|
|
|
|
- getpwuid_r <implemented>
|
|
|
|
- getpwnam_r <implemented>
|
|
|
|
-
|
|
|
|
-2.7 Additional thread-safe functions implemented by glibc
|
|
|
|
-
|
|
|
|
- The following is a list of additional functions implemented by glibc
|
|
|
|
- that also provide thread-safe functionality. Most of these functions
|
|
|
|
- are not supported by uClibc, so there is no need to implement the
|
|
|
|
- thread-safe version. Those that do apply, but have not been
|
|
|
|
- implemented yet are highlighted.
|
|
|
|
-
|
|
|
|
- fgetpwent_r <implemented>
|
|
|
|
- getttyname_r <not supported>
|
|
|
|
- getmntent_r <implemented>
|
|
|
|
- ecvt_r <not supported>
|
|
|
|
- fcvt_r <not supported>
|
|
|
|
- qecvt_r <not supported>
|
|
|
|
- qfcvt_r <not supported>
|
|
|
|
- hcreate_r <not supported>
|
|
|
|
- hdestroy_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>
|
|
|
|
- __getspnam_r <not supported>
|
|
|
|
- __sgetspent_r <not supported>
|
|
|
|
- __fgetspent_r <not supported>
|
|
|
|
- __gethostbyaddr_r <not supported>
|
|
|
|
- __gethostbyname2_r <not supported>
|
|
|
|
- __gethostbyname_r <not supported>
|
|
|
|
- __gethostent_r <not supported
|
|
|
|
- __getnetbyaddr_r <not supported>
|
|
|
|
- __getnetent_r <not supported>
|
|
|
|
- __getnetbyname_r <not supported>
|
|
|
|
- __getprotobynumber_r <not supported>
|
|
|
|
- __getprotoent_r <not supported>
|
|
|
|
- __getprotobyname_r <not supported>
|
|
|
|
- __getservbyname_r <not supported>
|
|
|
|
- __getservbyport_r <not supported>
|
|
|
|
- __getrpcent_r <not supported>
|
|
|
|
- __getservent_r <not supported>
|
|
|
|
- __getrpcbyname_r <not supported>
|
|
|
|
- __getrpcbynumber_r <not supported>
|
|
|
|
- __getnetgrent_r <not supported>
|
|
|
|
- __internal_getnetgrent_r <not supported>
|
|
|
|
- __getaliasent_r <not supported>
|
|
|
|
- __getaliasbyname_r <not supported>
|
|
|
|
- __nscd_getpwnam_r <not supported>
|
|
|
|
- __nscd_getpwuid_r <not supported>
|
|
|
|
- __nscd_getgrgid_r <not supported>
|
|
|
|
- __nscd_getgrnam_r <not supported>
|
|
|
|
- __nscd_gethostbyaddr_r <not supported>
|
|
|
|
- __nscd_gethostbyname2_r <not supported>
|
|
|
|
- __nscd_gethostbyname_r <not supported>
|
|
|
|
- __getutent_r <not supported>
|
|
|
|
- __getutid_r <not supported>
|
|
|
|
- __getutline_r <not supported>
|
|
|
|
- __ptsname_r <not supported>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-2.8 Additional thread-safe functions implemented by Proventhreads
|
|
|
|
-
|
|
|
|
- See description above. This applies only to the C library included
|
|
|
|
- in the proventhreads distribution.
|
|
|
|
-
|
|
|
|
- inet_ntoa_r <implemented>
|
|
|
|
- gethostbyaddr_r <implemented>
|
|
|
|
- gethostbyname_r <implemented>
|
|
|
|
- gethostent_r <not supported>
|
|
|
|
- getnetbyaddr_r <desired> <---
|
|
|
|
- getnetbyname_r <desired> <---
|
|
|
|
- getnetent_r <desired> <---
|
|
|
|
- getprotobynumber_r <desired> <---
|
|
|
|
- getprotoent_r <desired> <---
|
|
|
|
- getprotobyname_r <desired> <---
|
|
|
|
- getservbyname_r <implemented>
|
|
|
|
- getservbyport_r <implemented>
|
|
|
|
- getservent_r <implemented>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-3. List of functions in uClibc that use static data structures
|
|
|
|
-
|
|
|
|
- The following is a list of static data structures found in uClibc,
|
|
|
|
- and the functions that use them. In most cases, static data is not
|
|
|
|
- thread-safe, since multiple threads can access the same data at the
|
|
|
|
- same time. This is an attempt to identify all of the static data that
|
|
|
|
- is not considered thread-safe. Some of these problems will get
|
|
|
|
- resolved by the changes outlines above.
|
|
|
|
-
|
|
|
|
- crypt/crypt.c:
|
|
|
|
-
|
|
|
|
- static struct crypt_data __crypt_data;
|
|
|
|
-
|
|
|
|
- crypt <crypt_r implemented>
|
|
|
|
- setkey <setkey_r implemented>
|
|
|
|
- encrypt <encrypt_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- 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:
|
|
|
|
-
|
|
|
|
- static const char __md5__magic[];
|
|
|
|
- static const unsigned char __md5_itoa64[];
|
|
|
|
-
|
|
|
|
- __md5_crypt_r <implemented>
|
|
|
|
-
|
|
|
|
- No problems here...
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/addr.c:
|
|
|
|
-
|
|
|
|
- static char buf[16];
|
|
|
|
-
|
|
|
|
- inet_ntoa <implemented>
|
|
|
|
- inet_ntoa_r <implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/getnetent.c:
|
|
|
|
-
|
|
|
|
- static FILE *netf = NULL;
|
|
|
|
- static char line[BUFSIZ+1];
|
|
|
|
- static struct netent net;
|
|
|
|
- static char *net_aliases[MAXALIASES];
|
|
|
|
-
|
|
|
|
- setnetent <mutex required>
|
|
|
|
- endnetent <mutex required>
|
|
|
|
- getnetent <mutex required>
|
|
|
|
- getnetent_r <not implemented>
|
|
|
|
-
|
|
|
|
- NOTE: setnetent and endnetent are not implemented in glibc.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/getproto.c:
|
|
|
|
-
|
|
|
|
- static FILE *protof = NULL;
|
|
|
|
- static char line[BUFSIZ+1];
|
|
|
|
- static struct protoent proto;
|
|
|
|
- static char *proto_aliases[MAXALIASES];
|
|
|
|
- static int proto_stayopen;
|
|
|
|
-
|
|
|
|
- setprotoent <mutex required>
|
|
|
|
- endprotoent <mutex required>
|
|
|
|
- getprotoent <mutex required>
|
|
|
|
- getprotoent_r <implemented>
|
|
|
|
- getprotobyname <implemented>
|
|
|
|
- getprotobyname_r <not implemented>
|
|
|
|
- getprotobynumber <implemented>
|
|
|
|
- getprotobynumber_r <not implemented>
|
|
|
|
-
|
|
|
|
- NOTE: setprotoent and endprotoent are not implemented in glibc.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/getservice.c:
|
|
|
|
-
|
|
|
|
- static FILE *servf = NULL;
|
|
|
|
- static char line[BUFSIZ+1];
|
|
|
|
- static struct servent serv;
|
|
|
|
- static char *serv_aliases[MAXALIASES];
|
|
|
|
- static int serv_stayopen;
|
|
|
|
-
|
|
|
|
- setservent <mutex required>
|
|
|
|
- endservent <fix mutex required>
|
|
|
|
- getservent <mutex required>
|
|
|
|
- getservent_r <implemented>
|
|
|
|
- getservbyname <mutex required>
|
|
|
|
- getservbyname_r <implemented>
|
|
|
|
- getservbyport <mutex required>
|
|
|
|
- getservbyport_r <implemented>
|
|
|
|
-
|
|
|
|
- NOTE: setservent and endservent are not implemented in glibc.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- static struct hostent h;
|
|
|
|
- static char buf[xxx];
|
|
|
|
-
|
|
|
|
- gethostbyname <implemented>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- static struct hostent h;
|
|
|
|
- static char buf[xxx];
|
|
|
|
-
|
|
|
|
- gethostbyname2 <implemented>
|
|
|
|
-
|
|
|
|
- static struct hostent h;
|
|
|
|
- static char buf[xxx];
|
|
|
|
-
|
|
|
|
- gethostbyaddr <implemented>
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- static int __stay_open;
|
|
|
|
- static FILE * __gethostent_fp;
|
|
|
|
- static struct hostent h;
|
|
|
|
- static char buf[xxx];
|
|
|
|
-
|
|
|
|
- gethostent <mutex required>
|
|
|
|
- sethostent <mutex required>
|
|
|
|
- endhostent <mutex required>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/auth_none.c:
|
|
|
|
-
|
|
|
|
- static struct auth_ops ops
|
|
|
|
- static struct authnone_private
|
|
|
|
-
|
|
|
|
- authnone_create <fix required> <---
|
|
|
|
- authnone_marshal <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This file makes a lot of use of this static variable and
|
|
|
|
- also a global allocated authentication structure. Care should
|
|
|
|
- be taken in fixing this to make it thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/auth_unix.c:
|
|
|
|
-
|
|
|
|
- static struct auth_ops auth_unix_ops
|
|
|
|
-
|
|
|
|
- authunix_create <fix required> <---
|
|
|
|
- marshal_new_auth <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This file makes a lot of use of this static variable and
|
|
|
|
- also a global allocated authentication structure. Care should
|
|
|
|
- be taken in fixing this to make it thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/bindresvport.c:
|
|
|
|
-
|
|
|
|
- static short port;
|
|
|
|
-
|
|
|
|
- bindresvport <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_perror.c:
|
|
|
|
-
|
|
|
|
- static char *buf;
|
|
|
|
- static struct rpc_errtab rpc_errlist[]
|
|
|
|
- static struct auth_errtab auth_errlist[]
|
|
|
|
-
|
|
|
|
- NOTE: These static structures all have #if 0 around them, so they
|
|
|
|
- do not get compiled in. Hopefully, we don't have to worry about
|
|
|
|
- them right now, but prehaps a comment should be added to the code
|
|
|
|
- indicating that it is not thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_raw.c:
|
|
|
|
-
|
|
|
|
- static struct clntraw_private
|
|
|
|
- static struct clnt_ops client_ops
|
|
|
|
-
|
|
|
|
- clntraw_create <fix required> <---
|
|
|
|
- clntraw_call <fix required> <---
|
|
|
|
- clntraw_freeres <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This file makes a lot of use of these static variables and
|
|
|
|
- also a global allocated client structure. Care should
|
|
|
|
- be taken in fixing this to make it thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_simple.c:
|
|
|
|
-
|
|
|
|
- static struct callrpc_private
|
|
|
|
-
|
|
|
|
- callrpc <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_tcp.c:
|
|
|
|
-
|
|
|
|
- static struct clnt_ops tcp_ops
|
|
|
|
-
|
|
|
|
- clnttcp_create
|
|
|
|
-
|
|
|
|
- NOTE: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_udp.c:
|
|
|
|
-
|
|
|
|
- static struct clnt_ops udp_ops
|
|
|
|
-
|
|
|
|
- clntudp_bufcreate
|
|
|
|
-
|
|
|
|
- NOTE: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/getrpcent.c:
|
|
|
|
-
|
|
|
|
- static char RPCDB[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/pmap_clnt.c:
|
|
|
|
-
|
|
|
|
- static struct timeval timeout <fix desired> <---
|
|
|
|
- static struct timeval tottimeout <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: These are okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/pmap_getport.c:
|
|
|
|
-
|
|
|
|
- static struct timeval timeout <fix desired> <---
|
|
|
|
- static struct timeval tottimeout <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: These are okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/pmap_rmt.c:
|
|
|
|
-
|
|
|
|
- static struct timeval timeout <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/rpc_dtablesize.c:
|
|
|
|
-
|
|
|
|
- static int size;
|
|
|
|
-
|
|
|
|
- _rpc_dtablesize <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/rpc_prot.c:
|
|
|
|
-
|
|
|
|
- static struct xdr_discrim reply_dscrm[3] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/svc.c:
|
|
|
|
-
|
|
|
|
- static SVCXPRT **xports;
|
|
|
|
- static SVCXPRT *xports[NOFILE];
|
|
|
|
- static struct svc_callout
|
|
|
|
-
|
|
|
|
- xprt_register <fix required> <---
|
|
|
|
- xprt_unregister <fix required> <---
|
|
|
|
- svc_getreqset <fix required> <---
|
|
|
|
- svc_register <fix required> <---
|
|
|
|
- svc_unregister <fix required> <---
|
|
|
|
- svc_callout <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is intricate code, and care should be taken when making
|
|
|
|
- this thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_auth.c:
|
|
|
|
-
|
|
|
|
- static struct svcauthsw <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- net/rpc/svc_raw.c:
|
|
|
|
-
|
|
|
|
- static struct svcraw_private
|
|
|
|
- static struct xp_ops server_ops
|
|
|
|
-
|
|
|
|
- svcraw_create <fix required> <---
|
|
|
|
- svcraw_recv <fix required> <---
|
|
|
|
- svcraw_reply <fix required> <---
|
|
|
|
- svcraw_getargs <fix required> <---
|
|
|
|
- svcraw_freeargs <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is intricate code, and care should be taken when making
|
|
|
|
- this thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_simple.c:
|
|
|
|
-
|
|
|
|
- static struct proglst
|
|
|
|
- static SVCXPRT *transp;
|
|
|
|
-
|
|
|
|
- registerrpc <fix required> <---
|
|
|
|
- universal <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is intricate code, and care should be taken when making
|
|
|
|
- this thread-safe.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_tcp.c:
|
|
|
|
-
|
|
|
|
- static struct xp_ops svctcp_op
|
|
|
|
- static struct xp_ops svctcp_rendezvous_op
|
|
|
|
-
|
|
|
|
- svctcp_create <fix required> <---
|
|
|
|
- makefd_xprt <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- static struct timeval wait_per_try
|
|
|
|
-
|
|
|
|
- readtcp <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This looks like a bug. This static timeout value is passed
|
|
|
|
- by reference to a select() call. According to the linux man page
|
|
|
|
- for select:
|
|
|
|
-
|
|
|
|
- "On Linux, timeout is modified to reflect the amount of
|
|
|
|
- time not slept; most other implementations do not do this.
|
|
|
|
- This causes problems both when Linux code which reads
|
|
|
|
- timeout is ported to other operating systems, and when
|
|
|
|
- code is ported to Linux that reuses a struct timeval for
|
|
|
|
- multiple selects in a loop without reinitializing it.
|
|
|
|
- Consider timeout to be undefined after select returns."
|
|
|
|
-
|
|
|
|
- Unless the implementation of select is different than that of Linux,
|
|
|
|
- this needs to be fixed!
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_udp.c:
|
|
|
|
-
|
|
|
|
- static struct xp_ops svcudp_op <fix desired> (1)
|
|
|
|
-
|
|
|
|
- svcudp_bufcreate
|
|
|
|
-
|
|
|
|
- 1: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/xdr.c:
|
|
|
|
-
|
|
|
|
- static char xdr_zero[BYTES_PER_XDR_UNIT] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- static u_long crud[BYTES_PER_XDR_UNIT]
|
|
|
|
-
|
|
|
|
- NOTE: This looks like it doesn't matter what's in this array.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/xdr_float.c:
|
|
|
|
-
|
|
|
|
- static struct sgl_limits <fix desired> <---
|
|
|
|
- static struct dbl_limits <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: These are okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/xdr_mem.c:
|
|
|
|
-
|
|
|
|
- static struct xdr_ops xdrmem_ops <fix desired> (1)
|
|
|
|
-
|
|
|
|
- xdrmem_create
|
|
|
|
-
|
|
|
|
- 1: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/xdr_rec.c:
|
|
|
|
-
|
|
|
|
- static struct xdr_ops xdrrec_ops <fix desired> (1)
|
|
|
|
-
|
|
|
|
- xdrrec_create
|
|
|
|
-
|
|
|
|
- 1: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- inet/rpc/xdr_stdio.c:
|
|
|
|
-
|
|
|
|
- static struct xdr_ops xdrstdio_ops <fix desired> (1)
|
|
|
|
-
|
|
|
|
- xdrstdio_create
|
|
|
|
-
|
|
|
|
- 1: This static structure is just a group of function pointers.
|
|
|
|
- It could probably be made const, but this might affect the function
|
|
|
|
- signature. This should be investigated further.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/boot1.c:
|
|
|
|
-
|
|
|
|
- static char *_dl_malloc_addr
|
|
|
|
- static char *_dl_mmap_zero
|
|
|
|
- static char *_dl_not_lazy
|
|
|
|
- static char *_dl_warn
|
|
|
|
- static char *_dl_trace_loaded_objects
|
|
|
|
-
|
|
|
|
- _dl_boot <fix required> <---
|
|
|
|
- _dl_malloc <fix required> <---
|
|
|
|
- _dl_fixup <fix required> <---
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/readelflib1.c:
|
|
|
|
-
|
|
|
|
- static caddr_t _dl_cache_addr
|
|
|
|
- static size_t _dl_cache_size
|
|
|
|
-
|
|
|
|
- _dl_map_cache <fix required> <---
|
|
|
|
- _dl_unmap_cache <fix required> <---
|
|
|
|
- _dl_load_shared_library <fix required> <---
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/string.h:
|
|
|
|
-
|
|
|
|
- static char local[22]
|
|
|
|
-
|
|
|
|
- _dl_simple_ltoa <fix required> <---
|
|
|
|
- _dl_simple_ltoahex <fix required> <---
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/arm/elfinterp.c:
|
|
|
|
-
|
|
|
|
- static char *_dl_reltypes[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/i386/elfinterp.c:
|
|
|
|
-
|
|
|
|
- static char *_dl_reltypes[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/m68k/elfinterp.c:
|
|
|
|
-
|
|
|
|
- static char *_dl_reltypes[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/d-link/sparc/elfinterp.c:
|
|
|
|
-
|
|
|
|
- static char *_dl_reltypes[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/libdl/dlib.c:
|
|
|
|
-
|
|
|
|
- static int dl_init
|
|
|
|
-
|
|
|
|
- _dlopen <fix required> <---
|
|
|
|
-
|
|
|
|
- static int __attribute__ ((unused)) foobar1 <fix required?> (1)
|
|
|
|
-
|
|
|
|
- NOTE: The comment for this says it all: "This is a real hack." ;-)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- static char *type[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- These are all part of the shared library loader, and are not
|
|
|
|
- used by applications directly. Therefore, fixing these is not
|
|
|
|
- a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldconfig.c:
|
|
|
|
-
|
|
|
|
- static header_t magic <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- static liblist_t *lib_head
|
|
|
|
-
|
|
|
|
- cache_dolib <fix required> <---
|
|
|
|
- cache_write <fix required> <---
|
|
|
|
-
|
|
|
|
- This is not actually part of the C library, and is not built by
|
|
|
|
- default, so fixing these is not a high priority item.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/internals/tempname.c:
|
|
|
|
-
|
|
|
|
- static uint64_t value;
|
|
|
|
-
|
|
|
|
- __gen_tempname <no fix required>
|
|
|
|
-
|
|
|
|
- This is supposed to be random trash, so the more threading
|
|
|
|
- collisions the better...
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/locale/locale.c:
|
|
|
|
-
|
|
|
|
- static char C_LOCALE_NAME[]="C"; <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- static struct SAV_LOADED_LOCALE sav_loaded_locale [1]
|
|
|
|
- static struct SAV_LOADED_LOCALE * old_locale
|
|
|
|
-
|
|
|
|
- setlocale <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: Can different threads use different locales? I don't see
|
|
|
|
- why not.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/locale/localeconv.c:
|
|
|
|
-
|
|
|
|
- static struct lconv result;
|
|
|
|
-
|
|
|
|
- localeconv <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This function returns a pointer to a static data structure.
|
|
|
|
-
|
|
|
|
- static char *blank = ""; <fix desired> <---
|
|
|
|
- static char *decimal = "."; <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: These are okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/mntent/mntent.c:
|
|
|
|
-
|
|
|
|
- static char buff[MNTMAXSTR];
|
|
|
|
- static struct mntent mnt;
|
|
|
|
-
|
|
|
|
- getmntent <mutex required>
|
|
|
|
- getmntent_r <implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/regex/regex.c:
|
|
|
|
-
|
|
|
|
- static char re_syntax_table[CHAR_SET_SIZE];
|
|
|
|
- static int done = 0;
|
|
|
|
-
|
|
|
|
- init_syntax_table <fix required> <---
|
|
|
|
-
|
|
|
|
- static int debug;
|
|
|
|
-
|
|
|
|
- <several functions> <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is used to turn on debugging, and is used in several
|
|
|
|
- functions. It will need to be fixed if you want differing debug
|
|
|
|
- levels per thread.
|
|
|
|
-
|
|
|
|
- static char reg_unset_dummy;
|
|
|
|
-
|
|
|
|
- <REG_UNSET...> <fix required> <---
|
|
|
|
-
|
|
|
|
- static fail_stack_type fail_stack;
|
|
|
|
-
|
|
|
|
- regex_compile <fix required> <---
|
|
|
|
- <FREE_VARIABLES> <fix required> <---
|
|
|
|
- <FAIL_STACK_EMPTY> <fix required> <---
|
|
|
|
- <FAIL_STACK_PTR_EMPTY> <fix required> <---
|
|
|
|
- <FAIL_STACK_FULL> <fix required> <---
|
|
|
|
- <INIT_FAIL_STACK> <fix required> <---
|
|
|
|
- <RESET_FAIL_STACK> <fix required> <---
|
|
|
|
- <DOUBLE_FAIL_STACK> <fix required> <---
|
|
|
|
- <PUSH_FAILURE_POINTER> <fix required> <---
|
|
|
|
- <PUSH_FAILURE_INT> <fix required> <---
|
|
|
|
- <PUSH_FAILURE_ELT> <fix required> <---
|
|
|
|
- <POP_FAILURE_POINTER> <fix required> <---
|
|
|
|
- <POP_FAILURE_INT> <fix required> <---
|
|
|
|
- <POP_FAILURE_ELT> <fix required> <---
|
|
|
|
- <REMAINING_AVAIL_SLOTS> <fix required> <---
|
|
|
|
-
|
|
|
|
- static int regs_allocated_size;
|
|
|
|
-
|
|
|
|
- regs_grow_registers <fix required> <---
|
|
|
|
-
|
|
|
|
- static register_info_type *reg_info;
|
|
|
|
- static register_info_type *reg_info_dummy;
|
|
|
|
- static unsigned failure_id;
|
|
|
|
- static struct re_pattern_buffer re_comp_buf;
|
|
|
|
-
|
|
|
|
- <too many to list> <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is just a NASTY file for static variables. A lot of
|
|
|
|
- work needs to be done here to clean this up. But I'm not even
|
|
|
|
- sure if it matters. This code is taken directly from glibc.
|
|
|
|
-
|
|
|
|
- This code is also very large (adds over 30k to the C library
|
|
|
|
- all by itself). This file needs a complete rewrite.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/syslog/syslog.c:
|
|
|
|
-
|
|
|
|
- static pthread_once__t _once_block = pthread_once_init;
|
|
|
|
- static pthread_mutex_t _syslog_mutex;
|
|
|
|
-
|
|
|
|
- NOTE: I think these are okay. ;-)
|
|
|
|
-
|
|
|
|
- static int LogFile = -1;
|
|
|
|
- static int connected;
|
|
|
|
- static int LogStat = 0;
|
|
|
|
- static int LogFacility = LOG_USER;
|
|
|
|
- static int LogMask = 0xff;
|
|
|
|
- static char truncate_msg[12]
|
|
|
|
- static struct sockaddr SyslogAddr;
|
|
|
|
-
|
|
|
|
- NOTE: These are already protected.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/time/asctime.c:
|
|
|
|
-
|
|
|
|
- static char timebuf[26];
|
|
|
|
-
|
|
|
|
- asctime <asctime_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/time/ctime.c:
|
|
|
|
-
|
|
|
|
- static char cbuf[26];
|
|
|
|
-
|
|
|
|
- ctime <ctime_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/time/gmtime.c:
|
|
|
|
-
|
|
|
|
- static struct tm tmb;
|
|
|
|
-
|
|
|
|
- gmtime <gmtime_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/time/localtime.c:
|
|
|
|
-
|
|
|
|
- static struct tm tmb;
|
|
|
|
-
|
|
|
|
- localtime <localtime_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/time/mktime.c:
|
|
|
|
-
|
|
|
|
- static tz_rule tz_rules[2];
|
|
|
|
-
|
|
|
|
- tzset <fix required> <---
|
|
|
|
-
|
|
|
|
- static time_t localtime_offset;
|
|
|
|
-
|
|
|
|
- mktime <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/time/tm_conv.c:
|
|
|
|
-
|
|
|
|
- static int moffset[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- misc/utmp/utent.c:
|
|
|
|
-
|
|
|
|
- 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 <ok>
|
|
|
|
- endutent <ok>
|
|
|
|
- getutent <ok>
|
|
|
|
- getutid <ok>
|
|
|
|
- getutline <ok>
|
|
|
|
- pututline <ok>
|
|
|
|
- utmpname <ok>
|
|
|
|
- __getutent <ok>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- pwd_grp/__getgrent.c:
|
|
|
|
-
|
|
|
|
- static char line_buff[GR_MAX_LINE_LEN];
|
|
|
|
- static char *members[GR_MAX_MEMBERS];
|
|
|
|
- static char *line_buff = NULL;
|
|
|
|
- static char **members = NULL;
|
|
|
|
- static struct group group;
|
|
|
|
-
|
|
|
|
- __getgrent <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- pwd_grp/fgetpwent.c:
|
|
|
|
-
|
|
|
|
- static char line_buff[PWD_BUFFER_SIZE];
|
|
|
|
- static struct passwd pwd;
|
|
|
|
-
|
|
|
|
- fgetpwent <fgetpwent_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- pwd_grp/getpwnam.c:
|
|
|
|
-
|
|
|
|
- static char line_buff[PWD_BUFFER_SIZE];
|
|
|
|
- static struct passwd pwd;
|
|
|
|
-
|
|
|
|
- getpwnam <getpwnam_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- pwd_grp/getpwuid.c:
|
|
|
|
-
|
|
|
|
- static char line_buff[PWD_BUFFER_SIZE];
|
|
|
|
- static struct passwd pwd;
|
|
|
|
-
|
|
|
|
- getpwuid <getpwuid_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- pwd_grp/grent.c:
|
|
|
|
-
|
|
|
|
- static int grp_fd = -1;
|
|
|
|
-
|
|
|
|
- setgrent <fix required> <---
|
|
|
|
- endgrent <fix required> <---
|
|
|
|
- getgrent <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- pwd_grp/pwent.c:
|
|
|
|
-
|
|
|
|
- static int pw_fd = -1;
|
|
|
|
-
|
|
|
|
- setpwent <fix required> <---
|
|
|
|
- endpwent <fix required> <---
|
|
|
|
- getpwent_r <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: Yeah, this looks weird, but getpwent_r isn't completely
|
|
|
|
- thread-safe.
|
|
|
|
-
|
|
|
|
- static char line_buff[PWD_BUFFER_SIZE];
|
|
|
|
- static struct passwd pwd;
|
|
|
|
-
|
|
|
|
- getpwent <getpwent_r implemented> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdio/tmpnam.c:
|
|
|
|
-
|
|
|
|
- static char tmpnam_buffer[L_tmpnam];
|
|
|
|
-
|
|
|
|
- tmpnam <tmpnam_r implemented>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/atexit.c:
|
|
|
|
-
|
|
|
|
- static vfuncp __atexit_table[__UCLIBC_MAX_ATEXIT];
|
|
|
|
- static int __atexit_count = 0;
|
|
|
|
-
|
|
|
|
- atexit_handler <fix required> <---
|
|
|
|
- atexit <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/bsearch.c:
|
|
|
|
-
|
|
|
|
- static int _bsearch;
|
|
|
|
-
|
|
|
|
- bsearch <ok>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/setenv.c:
|
|
|
|
-
|
|
|
|
- static char **last_environ;
|
|
|
|
-
|
|
|
|
- __add_to_environ <ok>
|
|
|
|
- unsetenv <ok>
|
|
|
|
- setenv <ok>
|
|
|
|
- clearenv <ok>
|
|
|
|
- putenv <ok>
|
|
|
|
-
|
|
|
|
- all ok now.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/random.c:
|
|
|
|
-
|
|
|
|
- static long int seed1 = 1;
|
|
|
|
- static long int seed2 = 1;
|
|
|
|
- static long int seed3 = 1;
|
|
|
|
-
|
|
|
|
- random <fix required?> (1)
|
|
|
|
- srandom <fix required?> (1)
|
|
|
|
-
|
|
|
|
- 1: I'm not sure if it matters if these are static, since they
|
|
|
|
- are random number seeds. Who cares if more than one thread changes
|
|
|
|
- their value?
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/malloc/avlmacro.h
|
|
|
|
-
|
|
|
|
- static objname *__Avl_##objname##pr##_new_node;
|
|
|
|
-
|
|
|
|
- Avl_Tree_no_replace <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This will take a bit of study to figure out if it needs fixing.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
|
|
-
|
|
|
|
- //static mutex_t malloc_lock = MUTEX_INITIALIZER; <---
|
|
|
|
-
|
|
|
|
- NOTE: Basically, thread support in malloc is broken and must be
|
|
|
|
- fixed. It looks like the infrastructure is there, but more
|
|
|
|
- investigation is required.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- stdlib/malloc-930716/malloc.c:
|
|
|
|
-
|
|
|
|
- A bunch of stuff
|
|
|
|
-
|
|
|
|
- malloc <ok>
|
|
|
|
- realloc <ok>
|
|
|
|
- free <ok>
|
|
|
|
- etc <ok>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- string/strerror.c:
|
|
|
|
-
|
|
|
|
- static char retbuf[48];
|
|
|
|
- static char retbuf[33];
|
|
|
|
-
|
|
|
|
- strerror <fix required> <---
|
|
|
|
- strerror_r <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- string/strsignal.c:
|
|
|
|
-
|
|
|
|
- static char retbuf[28];
|
|
|
|
-
|
|
|
|
- strsignal <fix required> <---
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- string/strtok.c:
|
|
|
|
-
|
|
|
|
- static char *save = 0;
|
|
|
|
-
|
|
|
|
- strtok <ok>
|
|
|
|
- strtok_r <ok>
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- termios/tcgetsid.c:
|
|
|
|
-
|
|
|
|
- static int tiocgsid_does_not_work;
|
|
|
|
-
|
|
|
|
- tcgestsid <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- termios/ttyname.c:
|
|
|
|
-
|
|
|
|
- static char dev[] = "/dev";
|
|
|
|
-
|
|
|
|
- ttyname <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- static char name[NAME_MAX];
|
|
|
|
-
|
|
|
|
- ttyname <ttyname_r required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- test/testsuite.h:
|
|
|
|
-
|
|
|
|
- static int failures
|
|
|
|
-
|
|
|
|
- error_msg <fix required> <---
|
|
|
|
- done_testing <fix required> <---
|
|
|
|
- init_testsuite <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- unistd/getopt.c:
|
|
|
|
-
|
|
|
|
- static int sp = 1;
|
|
|
|
-
|
|
|
|
- getopt <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- unistd/getpass.c:
|
|
|
|
-
|
|
|
|
- static char buf[PWD_BUFFER_SIZE];
|
|
|
|
-
|
|
|
|
- getpass <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This function returns a pointer to a static data structure.
|
|
|
|
- This seems like it requires an _r version of this function. Glibc
|
|
|
|
- does the same thing. Oops! So much for thread-safe glibc!
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- unistd/gnu_getopt.c:
|
|
|
|
-
|
|
|
|
- static char *nextchar;
|
|
|
|
- static enum ordering;
|
|
|
|
- static int first_nonopt;
|
|
|
|
- static int last_nonopt;
|
|
|
|
-
|
|
|
|
- _getopt_initialize <fix required> <---
|
|
|
|
- _getopt_internal <fix required> <---
|
|
|
|
- exchange <fix required> <---
|
|
|
|
-
|
|
|
|
- static struct option long_options[] <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: This is okay, but should use the const keyword.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- unistd/sysconf.c:
|
|
|
|
-
|
|
|
|
- static long int ret_vals[_UCLIBC_SYSCONF_NUM_VALID_ARGS];
|
|
|
|
-
|
|
|
|
- find_or_add_in_table <fix required?> <---
|
|
|
|
- main <fix required?> <---
|
|
|
|
-
|
|
|
|
- NOTE: I'm not sure if this needs to be multi-threaded or not.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- unistd/sysconf_src.c:
|
|
|
|
-
|
|
|
|
- static long int ret_vals[_UCLIBC_SYSCONF_NUM_VALID_ARGS];
|
|
|
|
-
|
|
|
|
- find_or_add_in_table <fix required?> <---
|
|
|
|
- main <fix required?> <---
|
|
|
|
-
|
|
|
|
- NOTE: I'm not sure if this needs to be multi-threaded or not.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- unistd/sysconf_i386.c:
|
|
|
|
-
|
|
|
|
- static long int ret_vals[_UCLIBC_SYSCONF_NUM_VALID_ARGS];
|
|
|
|
-
|
|
|
|
- find_or_add_in_table <fix required?> <---
|
|
|
|
- main <fix required?> <---
|
|
|
|
-
|
|
|
|
- NOTE: I'm not sure if this needs to be multi-threaded or not.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-4. List of functions that use global variables
|
|
|
|
-
|
|
|
|
- The following is a list of functions that make use of global
|
|
|
|
- variables. Since multiple threads can access the same global
|
|
|
|
- variable at the same time, access should be considered unsafe.
|
|
|
|
- This is an attempt to identify all the areas where global
|
|
|
|
- variables are used. This does not necessarily mean that each
|
|
|
|
- of these is unsafe. It just means that there is a potential
|
|
|
|
- for them to be unsafe. If this code never runs in more than
|
|
|
|
- one thread, then there's no problem. More ivestigation will be
|
|
|
|
- required to determine if changes are really required.
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __environ (misc/internals/__uClibc_main.c)
|
|
|
|
-
|
|
|
|
- __uClibc_main.c:
|
|
|
|
-
|
|
|
|
- __uClibc_main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- 1: This should only get executed once, so it is probably fine.
|
|
|
|
-
|
|
|
|
- stdlib/getenv.c:
|
|
|
|
-
|
|
|
|
- getenv <fix required> <---
|
|
|
|
-
|
|
|
|
- stdlib/putenv.c:
|
|
|
|
-
|
|
|
|
- putenv <fix required> <---
|
|
|
|
-
|
|
|
|
- stdlib/setenv.c:
|
|
|
|
-
|
|
|
|
- setenv <fix required> <---
|
|
|
|
- unsetenv <fix required> <---
|
|
|
|
-
|
|
|
|
- test/args/arg_test.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/execl.c:
|
|
|
|
-
|
|
|
|
- execl <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/execlp.c:
|
|
|
|
-
|
|
|
|
- execlp <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/execv.c:
|
|
|
|
-
|
|
|
|
- execv <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/execvp.c:
|
|
|
|
-
|
|
|
|
- execvep <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __uClibc_cleanup (misc/internals/__uClibc_main.c)
|
|
|
|
-
|
|
|
|
- stdlib/abort.c:
|
|
|
|
-
|
|
|
|
- abort <fix required> <---
|
|
|
|
-
|
|
|
|
- stdlib/atexit.c:
|
|
|
|
-
|
|
|
|
- atexit_handler <fix required> <---
|
|
|
|
- atexit <fix required> <---
|
|
|
|
- exit <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: Not sure if multiple threads can be in this code or not.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- environ (misc/internals/__uClibc_main.c)
|
|
|
|
-
|
|
|
|
- NOTE: This is a weak alias for __environ, but it doesn't ever get
|
|
|
|
- used in the uClibc library.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- timezone (misc/time/tm_conv.c)
|
|
|
|
-
|
|
|
|
- misc/time/tm_conv.c:
|
|
|
|
-
|
|
|
|
- __tm_conv <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- re_max_failures (misc/regex/regex.c)
|
|
|
|
-
|
|
|
|
- misc/regex/regex.c:
|
|
|
|
-
|
|
|
|
- DOUBLE_FAIL_STACK <fix required> <---
|
|
|
|
- regex_compile <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- re_syntax_options (misc/regex/regex.c)
|
|
|
|
-
|
|
|
|
- misc/regex/regex.c:
|
|
|
|
-
|
|
|
|
- re_set_syntax <fix required> <---
|
|
|
|
- re_compile_pattern <fix required> <---
|
|
|
|
- re_comp <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __IO_list (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- stdio/stdio.c:
|
|
|
|
-
|
|
|
|
- fflush <fix required> <---
|
|
|
|
- __fopen <fix required> <---
|
|
|
|
- fclose <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _fixed_buffers (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- stdio/stdio.c:
|
|
|
|
-
|
|
|
|
- _alloc_stdio_buffer <fix required> <---
|
|
|
|
- _free_stdio_buffer_of_file <fix required> <---
|
|
|
|
- __init_stdio <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _free_buffer_index (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- stdio/stdio.c:
|
|
|
|
-
|
|
|
|
- _alloc_stdio_buffer <fix required> <---
|
|
|
|
- _free_stdio_buffer_of_file <fix required> <---
|
|
|
|
- __init_stdio <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _free_file_list (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- stdio/stdio.c:
|
|
|
|
-
|
|
|
|
- __init_stdio <fix required> <---
|
|
|
|
- _alloc_stdio_stream <fix required> <---
|
|
|
|
- _free_stdio_stream <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _stderr (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldconfig.c:
|
|
|
|
-
|
|
|
|
- warn <fix required> <---
|
|
|
|
- error <fix required> <---
|
|
|
|
- usage <fix required> <---
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldd.c:
|
|
|
|
-
|
|
|
|
- warn <fix required> <---
|
|
|
|
- error <fix required> <---
|
|
|
|
- is_bin <fix required> <---
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- misc/locale/locale.c:
|
|
|
|
-
|
|
|
|
- setlocale <fix required> <---
|
|
|
|
-
|
|
|
|
- misc/regex/regex.c:
|
|
|
|
-
|
|
|
|
- printchar <fix required> <---
|
|
|
|
-
|
|
|
|
- stdio/perror.c:
|
|
|
|
-
|
|
|
|
- perror <fix required> <---
|
|
|
|
-
|
|
|
|
- stdlib/malloc/alloc.c:
|
|
|
|
-
|
|
|
|
- calloc_dbg <fix required> <---
|
|
|
|
- malloc_dbg <fix required> <---
|
|
|
|
- free_dbg <fix required> <---
|
|
|
|
-
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
|
|
-
|
|
|
|
- __hunk_alloc <fix required?> (1)
|
|
|
|
- __malloc_init <fix required?> (1)
|
|
|
|
- malloc <fix required?> (1)
|
|
|
|
-
|
|
|
|
- 1: These are commented out with C++ style comments.
|
|
|
|
-
|
|
|
|
- stdlib/malloc-simple/alloc.c:
|
|
|
|
-
|
|
|
|
- calloc_dbg <fix required> <---
|
|
|
|
- malloc_dbg <fix required> <---
|
|
|
|
- free_dbg <fix required> <---
|
|
|
|
-
|
|
|
|
- string/strsignal.c:
|
|
|
|
-
|
|
|
|
- psignal <fix required> <---
|
|
|
|
-
|
|
|
|
- test/args/arg_test.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- test/assert/assert.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/getopt.c:
|
|
|
|
-
|
|
|
|
- Err <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/getpass.c:
|
|
|
|
-
|
|
|
|
- getpass <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/gnu_getopt.c:
|
|
|
|
-
|
|
|
|
- _getopt_internal <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/sysconf.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/sysconf_src.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/sysconf_i386.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _stdin (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- include/stdio.h:
|
|
|
|
-
|
|
|
|
- getchar <fix required> <---
|
|
|
|
-
|
|
|
|
- include/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- getchar <fix required> <---
|
|
|
|
- getchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- stdio/scanf.c:
|
|
|
|
-
|
|
|
|
- scanf <fix required> <---
|
|
|
|
- vscanf <fix required> <---
|
|
|
|
-
|
|
|
|
- stdio/stdio.c
|
|
|
|
-
|
|
|
|
- gets <fix required> <---
|
|
|
|
- getchar <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/i386/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- getchar <fix required> <---
|
|
|
|
- getchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/m68k/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- getchar <fix required> <---
|
|
|
|
- getchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/sh/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- getchar <fix required> <---
|
|
|
|
- getchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/sparc/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- getchar <fix required> <---
|
|
|
|
- getchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/getpass.c:
|
|
|
|
-
|
|
|
|
- getpass <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _stdio_streams (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- stdio/stdio.c:
|
|
|
|
-
|
|
|
|
- __init_stdio <fix required> <---
|
|
|
|
- _free_stdio_stream <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _stdout (stdio/stdio.c)
|
|
|
|
-
|
|
|
|
- include/stdio.h:
|
|
|
|
-
|
|
|
|
- putchar <fix required> <---
|
|
|
|
-
|
|
|
|
- include/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- vprintf <fix required> <---
|
|
|
|
- putchar <fix required> <---
|
|
|
|
- putchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldconfig.c:
|
|
|
|
-
|
|
|
|
- warn <fix required> <---
|
|
|
|
- error <fix required> <---
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldd.c:
|
|
|
|
-
|
|
|
|
- warn <fix required> <---
|
|
|
|
- error <fix required> <---
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- stdio/printf.c:
|
|
|
|
-
|
|
|
|
- printf <fix required> <---
|
|
|
|
- vprintf <fix required> <---
|
|
|
|
-
|
|
|
|
- stdio/stdio.c:
|
|
|
|
-
|
|
|
|
- puts <fix required> <---
|
|
|
|
- _uClibc_fread <fix required> <---
|
|
|
|
- putchar <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/i386/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- vprintf <fix required> <---
|
|
|
|
- putchar <fix required> <---
|
|
|
|
- putchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/m68k/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- vprintf <fix required> <---
|
|
|
|
- putchar <fix required> <---
|
|
|
|
- putchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/sh/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- vprintf <fix required> <---
|
|
|
|
- putchar <fix required> <---
|
|
|
|
- putchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/sparc/bits/stdio.h:
|
|
|
|
-
|
|
|
|
- vprintf <fix required> <---
|
|
|
|
- putchar <fix required> <---
|
|
|
|
- putchar_unlocked <fix required> <---
|
|
|
|
-
|
|
|
|
- test/pwd_grp/test_grp.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- test/pwd_grp/test_pwd.c:
|
|
|
|
-
|
|
|
|
- main <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- dns_caught_signal (inet/resolv.c)
|
|
|
|
-
|
|
|
|
- inet/resolv.c:
|
|
|
|
-
|
|
|
|
- dns_catch_signal <fix required> <---
|
|
|
|
- dns_lookup <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- nameserver (inet/resolv.c)
|
|
|
|
- nameservers (inet/resolv.c)
|
|
|
|
-
|
|
|
|
- inet/resolv.c:
|
|
|
|
-
|
|
|
|
- open_nameservers <fix required> <---
|
|
|
|
- close_nameservers <fix required> <---
|
|
|
|
- resolve_name <fix required> <---
|
|
|
|
- gethostbyname <fix required> <---
|
|
|
|
- res_query <fix required> <---
|
|
|
|
- gethostbyaddr <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- searchdomain (inet/resolv.c)
|
|
|
|
- searchdomains (inet/resolv.c)
|
|
|
|
-
|
|
|
|
- inet/resolv.c:
|
|
|
|
-
|
|
|
|
- dns_lookup <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _net_stayopen (inet/getnetent.c)
|
|
|
|
-
|
|
|
|
- inet/getnetbyad.c:
|
|
|
|
-
|
|
|
|
- getnetbyaddr <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/getnetbynm.c:
|
|
|
|
-
|
|
|
|
- getnetbyname <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/getnetent.c:
|
|
|
|
-
|
|
|
|
- setnetent <fix required> <---
|
|
|
|
- endnetent <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- rpcdata (inet/rpc/getrpcent.c)
|
|
|
|
-
|
|
|
|
- inet/rpc/getrpcent.c:
|
|
|
|
-
|
|
|
|
- _rpcdata <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _null_auth (inet/rpc/rpc_commondata.c) <fix desired> <---
|
|
|
|
-
|
|
|
|
- NOTE: _null_auth is never actually initialized. It never gets written,
|
|
|
|
- only read. So it should be thread safe. But it should be declared
|
|
|
|
- as a const if that is the case. It should also be initialized.
|
|
|
|
-
|
|
|
|
- inet/rpc/auth_none.c:
|
|
|
|
-
|
|
|
|
- authnone_create
|
|
|
|
-
|
|
|
|
- inet/rpc/auth_unix.c:
|
|
|
|
-
|
|
|
|
- authunix_create
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_raw.c:
|
|
|
|
-
|
|
|
|
- clntraw_call
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_tcp.c:
|
|
|
|
-
|
|
|
|
- clnttcp_call
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_udp.c:
|
|
|
|
-
|
|
|
|
- clntudp_call
|
|
|
|
-
|
|
|
|
- inet/rpc/pmap_rmt.c:
|
|
|
|
-
|
|
|
|
- clnt_broadcast
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_auth.c:
|
|
|
|
-
|
|
|
|
- _authenticate
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_tcp.c:
|
|
|
|
-
|
|
|
|
- svctcp_create
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- rpc_createerr (inet/rpc/rpc_commondata.c)
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_generic.c:
|
|
|
|
-
|
|
|
|
- clnt_create <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_perror.c:
|
|
|
|
-
|
|
|
|
- clnt_spcreateerror <fix desired?> <---
|
|
|
|
-
|
|
|
|
- NOTE: This piece of code has an "#if 0" around it.
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_simple.c:
|
|
|
|
-
|
|
|
|
- callrpc <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_tcp.c:
|
|
|
|
-
|
|
|
|
- clnttcp_create <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/rpc/clnt_udp.c:
|
|
|
|
-
|
|
|
|
- clntudp_bufcreate <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/rpc/pmap_getport.c:
|
|
|
|
-
|
|
|
|
- pmap_getport <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- svc_fdset (inet/rpc/rpc_commondata.c)
|
|
|
|
-
|
|
|
|
- inet/rpc/svc.c:
|
|
|
|
-
|
|
|
|
- xprt_register <fix required> <---
|
|
|
|
- xprt_unregister <fix required> <---
|
|
|
|
- svc_getreq <fix required> <---
|
|
|
|
-
|
|
|
|
- inet/rpc/svc_run.c:
|
|
|
|
-
|
|
|
|
- svc_run <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: Be careful to also fix the uses of the "svc_fds" #define.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- pl (inet/rpc/svc_simple.c)
|
|
|
|
-
|
|
|
|
- registerrpc <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: proglst is set up to point at pl, so it needs fixing as well.
|
|
|
|
- (See proglst earlier in this document.)
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- _sigintr (signal/signal.c)
|
|
|
|
-
|
|
|
|
- signal/bsd_sig.c:
|
|
|
|
-
|
|
|
|
- __bsd_signal <fix required> <---
|
|
|
|
-
|
|
|
|
- signal/sigintr.c:
|
|
|
|
-
|
|
|
|
- siginterrupt <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __Avl_Block_tfree_mem_tree (stdlib/malloc/malloc.c)
|
|
|
|
-
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
|
|
-
|
|
|
|
- __free_mem_del_block <fix required> <---
|
|
|
|
- bl_alloc <fix required> <---
|
|
|
|
- __malloc_init <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: This code is very tricky stuff.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __Avl_Block_tptrs_tree (stdlib/malloc/malloc.c)
|
|
|
|
-
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
|
|
-
|
|
|
|
- __bl_free <fix required> <---
|
|
|
|
- __malloc_init <fix required> <---
|
|
|
|
- free <fix required> <---
|
|
|
|
- _realloc_no_move <fix required> <---
|
|
|
|
- realloc <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __bl_last (stdlib/malloc/malloc.c)
|
|
|
|
-
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
|
|
-
|
|
|
|
- COMBINE_BLOCKS <fix required> <---
|
|
|
|
- SPLIT_BLOCK <fix required> <---
|
|
|
|
- bl_mapnew <fix required> <---
|
|
|
|
- bl_alloc <fix required> <---
|
|
|
|
- __malloc_init <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- __free_h (stdlib/malloc/malloc.c)
|
|
|
|
-
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
|
|
-
|
|
|
|
- __hunk_alloc <fix required> <---
|
|
|
|
- __hunk_free <fix required> <---
|
|
|
|
- __malloc_init <fix required> <---
|
|
|
|
-
|
|
|
|
--------------------------------------------------------------------
|
|
--------------------------------------------------------------------
|
|
|
|
|
|
- Global variable:
|
|
+ libc/inet/rpc/rpc_thread.c:
|
|
-
|
|
|
|
- __malloc_initialized (stdlib/malloc/malloc.c)
|
|
|
|
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
+ __rpc_thread_variables is currently disabled, since thread
|
|
|
|
+ local storage seems to not be correctly specified as
|
|
|
|
+ weak functions.
|
|
|
|
|
|
- __malloc_init <fix required> <---
|
|
|
|
- malloc <fix required> <---
|
|
|
|
- free <fix required> <---
|
|
|
|
- _realloc_no_move <fix required> <---
|
|
|
|
-
|
|
|
|
--------------------------------------------------------------------
|
|
--------------------------------------------------------------------
|
|
|
|
|
|
- Global variable:
|
|
+ unistd/getpass.c:
|
|
-
|
|
|
|
- __total_h (stdlib/malloc/malloc.c)
|
|
|
|
|
|
|
|
- stdlib/malloc/malloc.c:
|
|
+ static char buf[PWD_BUFFER_SIZE];
|
|
|
|
|
|
- __hunk_alloc <fix required> <---
|
|
+ getpass <fix required> <---
|
|
- __malloc_init <fix required> <---
|
|
|
|
|
|
|
|
- --------------------------------------------------------------------
|
|
+ NOTE: This function returns a pointer to a static data structure.
|
|
-
|
|
+ This seems like it requires an _r version of this function. Glibc
|
|
- Global variable:
|
|
+ does the same thing. Oops! So much for thread-safe glibc!
|
|
-
|
|
|
|
- errno (sysdeps/linux/common/errno.c)
|
|
|
|
-
|
|
|
|
- sysdeps/linux/common/errno.c:
|
|
|
|
-
|
|
|
|
- __errno_location <fix required> <---
|
|
|
|
-
|
|
|
|
- NOTE: Obviously, errno gets used all over the place. I won't list
|
|
|
|
- them all here.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- ___brk_addr (sysdeps/linux/i386/__init_brk.c)
|
|
|
|
-
|
|
|
|
- sysdeps/linux/i386/__init_brk.c:
|
|
|
|
-
|
|
|
|
- __init_brk <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/i386/brk.c:
|
|
|
|
-
|
|
|
|
- brk <fix required> <---
|
|
|
|
-
|
|
|
|
- sysdeps/linux/i386/sbrk.c:
|
|
|
|
-
|
|
|
|
- sbrk <fix required> <---
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- optarg (unistd/getopt_vars.c)
|
|
|
|
-
|
|
|
|
- extra/locale/gen_ctype_from_glibc.c:
|
|
|
|
-
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldconfig.c:
|
|
|
|
-
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- unistd/getopt.c:
|
|
|
|
-
|
|
|
|
- getopt <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/gnu_getopt.c:
|
|
|
|
-
|
|
|
|
- _getopt_internal <fix required> <---
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- 1: Probably not required unless this program is run on multiple
|
|
|
|
- threads.
|
|
|
|
-
|
|
|
|
- --------------------------------------------------------------------
|
|
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- opterr (unistd/getopt_vars.c)
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldconfig.c:
|
|
|
|
-
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- unistd/getopt.c:
|
|
|
|
-
|
|
|
|
- Err <fix required> <---
|
|
|
|
- getopt <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/gnu_getopt.c:
|
|
|
|
-
|
|
|
|
- _getopt_internal <fix required> <---
|
|
|
|
-
|
|
|
|
- 1: Probably not required unless this program is run on multiple
|
|
|
|
- threads.
|
|
|
|
|
|
|
|
--------------------------------------------------------------------
|
|
--------------------------------------------------------------------
|
|
|
|
|
|
- Global variable:
|
|
+ unistd/sysconf.c:
|
|
-
|
|
|
|
- optind (unistd/getopt_vars.c)
|
|
|
|
-
|
|
|
|
- extra/locale/gen_ctype_from_glibc.c:
|
|
|
|
-
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldconfig.c:
|
|
|
|
-
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- ld.so-1/util/ldd.c:
|
|
|
|
-
|
|
|
|
- main <fix required?> (1)
|
|
|
|
-
|
|
|
|
- unistd/getopt.c:
|
|
|
|
-
|
|
|
|
- Err <fix required> <---
|
|
|
|
- getopt <fix required> <---
|
|
|
|
|
|
|
|
- unistd/gnu_getopt.c:
|
|
+ static long int ret_vals[_UCLIBC_SYSCONF_NUM_VALID_ARGS];
|
|
|
|
|
|
- exchange <fix required> <---
|
|
+ find_or_add_in_table <fix required?> <---
|
|
- _getopt_initialize <fix required> <---
|
|
+ main <fix required?> <---
|
|
- _getopt_internal <fix required> <---
|
|
|
|
- main <fix required?> (1)
|
|
|
|
- main (2nd one) <fix required?> (1)
|
|
|
|
|
|
|
|
- 1: Probably not required unless this program is run on multiple
|
|
+ NOTE: I'm not sure if this needs to be made reentrant...
|
|
- threads.
|
|
|
|
|
|
|
|
--------------------------------------------------------------------
|
|
--------------------------------------------------------------------
|
|
-
|
|
|
|
- Global variable:
|
|
|
|
-
|
|
|
|
- optopt (unistd/getopt_vars.c)
|
|
|
|
-
|
|
|
|
- unistd/getopt.c:
|
|
|
|
-
|
|
|
|
- Err <fix required> <---
|
|
|
|
- getopt <fix required> <---
|
|
|
|
-
|
|
|
|
- unistd/gnu_getopt.c:
|
|
|
|
-
|
|
|
|
- _getopt_internal <fix required> <---
|
|
|
|
-
|
|
|