mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 10:50:07 +00:00
Update.
* posix/fnmatch.c (internal_fnmatch): Make it compilable outside glibc by defining internal_function if it isn't already.
This commit is contained in:
parent
a0bf6ac732
commit
7814856974
@ -1,5 +1,8 @@
|
|||||||
1999-09-12 Ulrich Drepper <drepper@cygnus.com>
|
1999-09-12 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* posix/fnmatch.c (internal_fnmatch): Make it compilable outside
|
||||||
|
glibc by defining internal_function if it isn't already.
|
||||||
|
|
||||||
* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r): If res_search
|
* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r): If res_search
|
||||||
fails don't rely on errno value.
|
fails don't rely on errno value.
|
||||||
(getanswer_r): Set *ERRNOP in error cases.
|
(getanswer_r): Set *ERRNOP in error cases.
|
||||||
|
@ -73,13 +73,12 @@ platforms.<P>
|
|||||||
|
|
||||||
<H4><A NAME="A.4">A.4: What is the status of LinuxThreads?</A></H4>
|
<H4><A NAME="A.4">A.4: What is the status of LinuxThreads?</A></H4>
|
||||||
|
|
||||||
In short, it's not completely finished (hence the version numbers in
|
|
||||||
0.<I>x</I>), but what is done is pretty mature.
|
|
||||||
LinuxThreads implements almost all of Posix 1003.1c, as well as a few
|
LinuxThreads implements almost all of Posix 1003.1c, as well as a few
|
||||||
extensions. The only part of LinuxThreads that does not conform yet
|
extensions. The only part of LinuxThreads that does not conform yet
|
||||||
to Posix is signal handling (see section <A HREF="#J">J</A>). Apart
|
to Posix is signal handling (see section <A HREF="#J">J</A>). Apart
|
||||||
from the signal stuff, all the Posix 1003.1c base functionality is
|
from the signal stuff, all the Posix 1003.1c base functionality,
|
||||||
provided and conforms to the standard (to the best of my knowledge).
|
as well as a number of optional extensions, are provided and conform
|
||||||
|
to the standard (to the best of my knowledge).
|
||||||
The signal stuff is hard to get right, at least without special kernel
|
The signal stuff is hard to get right, at least without special kernel
|
||||||
support, and while I'm definitely looking at ways to implement the
|
support, and while I'm definitely looking at ways to implement the
|
||||||
Posix behavior for signals, this might take a long time before it's
|
Posix behavior for signals, this might take a long time before it's
|
||||||
@ -90,11 +89,10 @@ completed.<P>
|
|||||||
The basic functionality (thread creation and termination, mutexes,
|
The basic functionality (thread creation and termination, mutexes,
|
||||||
conditions, semaphores) is very stable. Several industrial-strength
|
conditions, semaphores) is very stable. Several industrial-strength
|
||||||
programs, such as the AOL multithreaded Web server, use LinuxThreads
|
programs, such as the AOL multithreaded Web server, use LinuxThreads
|
||||||
and seem quite happy about it. There are some rough edges in
|
and seem quite happy about it. There used to be some rough edges in
|
||||||
the LinuxThreads / C library interface, at least with libc 5, but most
|
the LinuxThreads / C library interface with libc 5, but glibc 2
|
||||||
of these rough edges are fixed in glibc 2, which should soon become
|
fixes all of those problems and is now the standard C library on major
|
||||||
the standard C library for Linux distributions (see section <A
|
Linux distributions (see section <A HREF="#C">C</A>). <P>
|
||||||
HREF="#C">C</A>). <P>
|
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
<P>
|
<P>
|
||||||
@ -139,12 +137,22 @@ HREF="news:comp.os.linux.development.kernel">comp.os.linux.development.kernel</A
|
|||||||
The latter is especially appropriate for questions relative to the
|
The latter is especially appropriate for questions relative to the
|
||||||
interface between the kernel and LinuxThreads.<P>
|
interface between the kernel and LinuxThreads.<P>
|
||||||
|
|
||||||
Very specific LinuxThreads questions, and in particular everything
|
<H4><A NAME="B.4">B.4: How should I report a possible bug in
|
||||||
that looks like a potential bug in LinuxThreads, should be mailed
|
LinuxThreads?</A></H4>
|
||||||
directly to me (<code>Xavier.Leroy@inria.fr</code>). Before mailing
|
|
||||||
me, make sure that your question is not answered in this FAQ.<P>
|
|
||||||
|
|
||||||
<H4><A NAME="B.4">B.4: I'd like to read the POSIX 1003.1c standard. Is
|
If you're using glibc 2, the best way by far is to use the
|
||||||
|
<code>glibcbug</code> script to mail a bug report to the glibc
|
||||||
|
maintainers. <P>
|
||||||
|
|
||||||
|
If you're using an older libc, or don't have the <code>glibcbug</code>
|
||||||
|
script on your machine, then e-mail me directly
|
||||||
|
(<code>Xavier.Leroy@inria.fr</code>). <P>
|
||||||
|
|
||||||
|
In both cases, before sending the bug report, make sure that it is not
|
||||||
|
addressed already in this FAQ. Also, try to send a short program that
|
||||||
|
reproduces the weird behavior you observed. <P>
|
||||||
|
|
||||||
|
<H4><A NAME="B.5">B.5: I'd like to read the POSIX 1003.1c standard. Is
|
||||||
it available online?</A></H4>
|
it available online?</A></H4>
|
||||||
|
|
||||||
Unfortunately, no. POSIX standards are copyrighted by IEEE, and
|
Unfortunately, no. POSIX standards are copyrighted by IEEE, and
|
||||||
@ -183,8 +191,8 @@ integrated with glibc 2. The glibc 2 distribution contains the
|
|||||||
sources of a specially adapted version of LinuxThreads.<P>
|
sources of a specially adapted version of LinuxThreads.<P>
|
||||||
|
|
||||||
glibc 2 comes preinstalled as the default C library on several Linux
|
glibc 2 comes preinstalled as the default C library on several Linux
|
||||||
distributions, such as RedHat 5.0 and 5.1, and recent beta versions of
|
distributions, such as RedHat 5 and up, and Debian 2.
|
||||||
Debian. Those distributions include the version of LinuxThreads matching
|
Those distributions include the version of LinuxThreads matching
|
||||||
glibc 2.<P>
|
glibc 2.<P>
|
||||||
|
|
||||||
<H4><A NAME="C.2">C.2: My system has libc 5 preinstalled, not glibc
|
<H4><A NAME="C.2">C.2: My system has libc 5 preinstalled, not glibc
|
||||||
@ -199,14 +207,6 @@ libc 5.2.18 on the one hand, and libc 5.4.12 or later on the other hand.
|
|||||||
Avoid 5.3.12 and 5.4.7: these have problems with the per-thread errno
|
Avoid 5.3.12 and 5.4.7: these have problems with the per-thread errno
|
||||||
variable. <P>
|
variable. <P>
|
||||||
|
|
||||||
Unfortunately, many popular Linux distributions (e.g. RedHat 4.2) come
|
|
||||||
with libc 5.3.12 preinstalled -- the one that does not work with
|
|
||||||
LinuxThreads. Fortunately, you can often find pre-packaged binaries
|
|
||||||
of more recent versions of libc for these distributions. In the case
|
|
||||||
of RedHat 4, there is a RPM package for libc-5.4 in the "contrib"
|
|
||||||
area of RedHat FTP sites.
|
|
||||||
<P>
|
|
||||||
|
|
||||||
<H4><A NAME="C.3">C.3: So, should I switch to glibc 2, or stay with a
|
<H4><A NAME="C.3">C.3: So, should I switch to glibc 2, or stay with a
|
||||||
recent libc 5?</A></H4>
|
recent libc 5?</A></H4>
|
||||||
|
|
||||||
@ -219,7 +219,7 @@ Switching an already installed
|
|||||||
system from libc 5 to glibc 2 is not completely straightforward.
|
system from libc 5 to glibc 2 is not completely straightforward.
|
||||||
See the <A HREF="http://sunsite.unc.edu/LDP/HOWTO/Glibc2-HOWTO.html">Glibc2
|
See the <A HREF="http://sunsite.unc.edu/LDP/HOWTO/Glibc2-HOWTO.html">Glibc2
|
||||||
HOWTO</A> for more information. Much easier is (re-)installing a
|
HOWTO</A> for more information. Much easier is (re-)installing a
|
||||||
Linux distribution based on glibc 2, such as RedHat 5.1.<P>
|
Linux distribution based on glibc 2, such as RedHat 6.<P>
|
||||||
|
|
||||||
<H4><A NAME="C.4">C.4: Where can I find glibc 2 and the version of
|
<H4><A NAME="C.4">C.4: Where can I find glibc 2 and the version of
|
||||||
LinuxThreads that goes with it?</A></H4>
|
LinuxThreads that goes with it?</A></H4>
|
||||||
@ -237,6 +237,31 @@ For libc 5, see <A HREF="ftp://sunsite.unc.edu/pub/Linux/devel/GCC/"><code>ftp:/
|
|||||||
For the libc 5 version of LinuxThreads, see
|
For the libc 5 version of LinuxThreads, see
|
||||||
<A HREF="ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy/linuxthreads/">ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy/linuxthreads/</A>.<P>
|
<A HREF="ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy/linuxthreads/">ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy/linuxthreads/</A>.<P>
|
||||||
|
|
||||||
|
<H4><A NAME="C.6">C.6: How can I recompile the glibc 2 version of the
|
||||||
|
LinuxThreads sources?</A></H4>
|
||||||
|
|
||||||
|
You must transfer the whole glibc sources, then drop the LinuxThreads
|
||||||
|
sources in the <code>linuxthreads/</code> subdirectory, then recompile
|
||||||
|
glibc as a whole. There are now too many inter-dependencies between
|
||||||
|
LinuxThreads and glibc 2 to allow separate re-compilation of LinuxThreads.
|
||||||
|
<P>
|
||||||
|
|
||||||
|
<H4><A NAME="C.7">C.7: What is the correspondence between LinuxThreads
|
||||||
|
version numbers, libc version numbers, and RedHat version
|
||||||
|
numbers?</A></H4>
|
||||||
|
|
||||||
|
Here is a summary. (Information on Linux distributions other than
|
||||||
|
RedHat are welcome.)<P>
|
||||||
|
|
||||||
|
<TABLE>
|
||||||
|
<TR><TD>LinuxThreads </TD> <TD>C library</TD> <TD>RedHat</TD></TR>
|
||||||
|
<TR><TD>0.7, 0.71 (for libc 5)</TD> <TD>libc 5.x</TD> <TD>RH 4.2</TD></TR>
|
||||||
|
<TR><TD>0.7, 0.71 (for glibc 2)</TD> <TD>glibc 2.0.x</TD> <TD>RH 5.x</TD></TR>
|
||||||
|
<TR><TD>0.8</TD> <TD>glibc 2.1.1</TD> <TD>RH 6.0</TD></TR>
|
||||||
|
<TR><TD>0.8</TD> <TD>glibc 2.1.2</TD> <TD>not yet released</TD></TR>
|
||||||
|
</TABLE>
|
||||||
|
<P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
<P>
|
<P>
|
||||||
|
|
||||||
@ -271,11 +296,11 @@ descriptor opened on a pipe. When I link it with LinuxThreads,
|
|||||||
You're using one of the buggy versions of libc (5.3.12, 5.4.7., etc).
|
You're using one of the buggy versions of libc (5.3.12, 5.4.7., etc).
|
||||||
See question <A HREF="#C.1">C.1</A> above.<P>
|
See question <A HREF="#C.1">C.1</A> above.<P>
|
||||||
|
|
||||||
<H4><A NAME="D.4">D.4: My program crashes the first time it calls
|
<H4><A NAME="D.4">D.4: My program creates a lot of threads, and after
|
||||||
<CODE>pthread_create()</CODE> !</A></H4>
|
a while <CODE>pthread_create()</CODE> no longer returns!</A></H4>
|
||||||
|
|
||||||
You wouldn't be using glibc 2.0, by any chance? That's a known bug
|
This is known bug in the version of LinuxThreads that comes with glibc
|
||||||
with glibc 2.0. Please upgrade to 2.0.1 or later.<P>
|
2.1.1. An upgrade to 2.1.2 is recommended. <P>
|
||||||
|
|
||||||
<H4><A NAME="D.5">D.5: When I'm running a program that creates N
|
<H4><A NAME="D.5">D.5: When I'm running a program that creates N
|
||||||
threads, <code>top</code> or <code>ps</code>
|
threads, <code>top</code> or <code>ps</code>
|
||||||
@ -359,6 +384,55 @@ stack-allocate some data structure, and
|
|||||||
<code>pthread_cleanup_pop</code> to close that block. It's ugly, but
|
<code>pthread_cleanup_pop</code> to close that block. It's ugly, but
|
||||||
it's the standard way of implementing cleanup handlers.<P>
|
it's the standard way of implementing cleanup handlers.<P>
|
||||||
|
|
||||||
|
<H4><A NAME="D.9">D.9: I tried to use real-time threads and my program
|
||||||
|
loops like crazy and freezes the whole machine!</A></H4>
|
||||||
|
|
||||||
|
Versions of LinuxThreads prior to 0.8 are susceptible to ``livelocks''
|
||||||
|
(one thread loops, consuming 100% of the CPU time) in conjunction with
|
||||||
|
real-time scheduling. Since real-time threads and processes have
|
||||||
|
higher priority than normal Linux processes, all other processes on
|
||||||
|
the machine, including the shell, the X server, etc, cannot run and
|
||||||
|
the machine appears frozen.<P>
|
||||||
|
|
||||||
|
The problem is fixed in LinuxThreads 0.8.<P>
|
||||||
|
|
||||||
|
<H4><A NAME="D.10">D.10: My application needs to create thousands of
|
||||||
|
threads, or maybe even more. Can I do this with
|
||||||
|
LinuxThreads?</A></H4>
|
||||||
|
|
||||||
|
No. You're going to run into several hard limits:
|
||||||
|
<UL>
|
||||||
|
<LI>Each thread, from the kernel's standpoint, is one process. Stock
|
||||||
|
Linux kernels are limited to at most 512 processes for the super-user,
|
||||||
|
and half this number for regular users. This can be changed by
|
||||||
|
changing <code>NR_TASKS</code> in <code>include/linux/tasks.h</code>
|
||||||
|
and recompiling the kernel. On the x86 processors at least,
|
||||||
|
architectural constraints seem to limit <code>NR_TASKS</code> to 4090
|
||||||
|
at most.
|
||||||
|
<LI>LinuxThreads contains a table of all active threads. This table
|
||||||
|
has room for 1024 threads at most. To increase this limit, you must
|
||||||
|
change <code>PTHREAD_THREADS_MAX</code> in the LinuxThreads sources
|
||||||
|
and recompile.
|
||||||
|
<LI>By default, each thread reserves 2M of virtual memory space for
|
||||||
|
its stack. This space is just reserved; actual memory is allocated
|
||||||
|
for the stack on demand. But still, on a 32-bit processor, the total
|
||||||
|
virtual memory space available for the stacks is on the order of 1G,
|
||||||
|
meaning that more than 500 threads will have a hard time fitting in.
|
||||||
|
You can overcome this limitation by moving to a 64-bit platform, or by
|
||||||
|
allocating smaller stacks yourself using the <code>setstackaddr</code>
|
||||||
|
attribute.
|
||||||
|
<LI>Finally, the Linux kernel contains many algorithms that run in
|
||||||
|
time proportional to the number of process table entries. Increasing
|
||||||
|
this number drastically will slow down the kernel operations
|
||||||
|
noticeably.
|
||||||
|
</UL>
|
||||||
|
(Other POSIX threads libraries have similar limitations, by the way.)
|
||||||
|
For all those reasons, you'd better restructure your application so
|
||||||
|
that it doesn't need more than, say, 100 threads. For instance,
|
||||||
|
in the case of a multithreaded server, instead of creating a new
|
||||||
|
thread for each connection, maintain a fixed-size pool of worker
|
||||||
|
threads that pick incoming connection requests from a queue.<P>
|
||||||
|
|
||||||
<HR>
|
<HR>
|
||||||
<P>
|
<P>
|
||||||
|
|
||||||
@ -519,7 +593,7 @@ be passed a C function as third argument.<P>
|
|||||||
<H4><A NAME="F.3">F.3: I'm trying to use LinuxThreads in conjunction
|
<H4><A NAME="F.3">F.3: I'm trying to use LinuxThreads in conjunction
|
||||||
with libg++, and I'm having all sorts of trouble.</A></H4>
|
with libg++, and I'm having all sorts of trouble.</A></H4>
|
||||||
|
|
||||||
From what I understand, thread support in libg++ is completely broken,
|
>From what I understand, thread support in libg++ is completely broken,
|
||||||
especially with respect to locking of iostreams. H.J.Lu wrote:
|
especially with respect to locking of iostreams. H.J.Lu wrote:
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
If you want to use thread, I can only suggest egcs and glibc. You
|
If you want to use thread, I can only suggest egcs and glibc. You
|
||||||
@ -540,7 +614,14 @@ version of gdb 4.17 developed by Eric Paire and colleages at The Open
|
|||||||
Group, Grenoble. The patches against gdb 4.17 are available at
|
Group, Grenoble. The patches against gdb 4.17 are available at
|
||||||
<A HREF="http://www.gr.opengroup.org/java/jdk/linux/debug.htm"><code>http://www.gr.opengroup.org/java/jdk/linux/debug.htm</code></A>.
|
<A HREF="http://www.gr.opengroup.org/java/jdk/linux/debug.htm"><code>http://www.gr.opengroup.org/java/jdk/linux/debug.htm</code></A>.
|
||||||
Precompiled binaries of the patched gdb are available in RedHat's RPM
|
Precompiled binaries of the patched gdb are available in RedHat's RPM
|
||||||
format at <A HREF="http://odin.appliedtheory.com/"><code>http://odin.appliedtheory.com/</code></A>.
|
format at <A
|
||||||
|
HREF="http://odin.appliedtheory.com/"><code>http://odin.appliedtheory.com/</code></A>.<P>
|
||||||
|
|
||||||
|
Some Linux distributions provide an already-patched version of gdb;
|
||||||
|
others don't. For instance, the gdb in RedHat 5.2 is thread-aware,
|
||||||
|
but apparently not the one in RedHat 6.0. Just ask (politely) the
|
||||||
|
makers of your Linux distributions to please make sure that they apply
|
||||||
|
the correct patches to gdb.<P>
|
||||||
|
|
||||||
<H4><A NAME="G.2">G.2: Does it work with post-mortem debugging?</A></H4>
|
<H4><A NAME="G.2">G.2: Does it work with post-mortem debugging?</A></H4>
|
||||||
|
|
||||||
@ -668,11 +749,11 @@ signals available and the kernel reserves all of them but two:
|
|||||||
<code>SIGUSR1</code> and <code>SIGUSR2</code>. So, LinuxThreads has
|
<code>SIGUSR1</code> and <code>SIGUSR2</code>. So, LinuxThreads has
|
||||||
no choice but use those two signals.<P>
|
no choice but use those two signals.<P>
|
||||||
|
|
||||||
On recent kernels (late 2.1 kernels and the forthcoming 2.2 kernels),
|
On recent kernels (2.2 and up), more than 32 signals are provided in
|
||||||
more than 32 signals are provided in the form of realtime signals.
|
the form of realtime signals. When run on one of those kernels,
|
||||||
When run on one of those kernels, LinuxThreads uses two reserved
|
LinuxThreads uses two reserved realtime signals for its internal
|
||||||
realtime signals for its internal operation, thus leaving
|
operation, thus leaving <code>SIGUSR1</code> and <code>SIGUSR2</code>
|
||||||
<code>SIGUSR1</code> and <code>SIGUSR2</code> free for user code.<P>
|
free for user code. (This works only with glibc, not with libc 5.) <P>
|
||||||
|
|
||||||
<H4><A NAME="H.5">H.5: Is the stack of one thread visible from the
|
<H4><A NAME="H.5">H.5: Is the stack of one thread visible from the
|
||||||
other threads? Can I pass a pointer into my stack to other threads?
|
other threads? Can I pass a pointer into my stack to other threads?
|
||||||
@ -717,7 +798,7 @@ Windows client? </A></H4>
|
|||||||
The best solution is to use X libraries that have been compiled with
|
The best solution is to use X libraries that have been compiled with
|
||||||
multithreading options set. Linux distributions that come with glibc
|
multithreading options set. Linux distributions that come with glibc
|
||||||
2 as the main C library generally provide thread-safe X libraries.
|
2 as the main C library generally provide thread-safe X libraries.
|
||||||
At least, that seems to be the case for RedHat 5.<P>
|
At least, that seems to be the case for RedHat 5 and later.<P>
|
||||||
|
|
||||||
You can try to recompile yourself the X libraries with multithreading
|
You can try to recompile yourself the X libraries with multithreading
|
||||||
options set. They contain optional support for multithreading; it's
|
options set. They contain optional support for multithreading; it's
|
||||||
@ -741,7 +822,7 @@ only. <P>
|
|||||||
thread-safe X libraries that you could distribute?</A></H4>
|
thread-safe X libraries that you could distribute?</A></H4>
|
||||||
|
|
||||||
No, I don't. Sorry. But consider installing a Linux distribution
|
No, I don't. Sorry. But consider installing a Linux distribution
|
||||||
that comes with thread-safe X libraries, such as RedHat 5.<P>
|
that comes with thread-safe X libraries, such as RedHat 6.<P>
|
||||||
|
|
||||||
<H4><A NAME="I.3">I.3: Can I use library FOO in a multithreaded
|
<H4><A NAME="I.3">I.3: Can I use library FOO in a multithreaded
|
||||||
program?</A></H4>
|
program?</A></H4>
|
||||||
|
@ -64,27 +64,27 @@
|
|||||||
# define ISASCII(c) isascii(c)
|
# define ISASCII(c) isascii(c)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#ifdef isblank
|
# ifdef isblank
|
||||||
# define ISBLANK(c) (ISASCII (c) && isblank (c))
|
# define ISBLANK(c) (ISASCII (c) && isblank (c))
|
||||||
#else
|
# else
|
||||||
# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
|
# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
|
||||||
#endif
|
# endif
|
||||||
#ifdef isgraph
|
# ifdef isgraph
|
||||||
# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
|
# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
|
||||||
#else
|
# else
|
||||||
# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
|
# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#define ISPRINT(c) (ISASCII (c) && isprint (c))
|
# define ISPRINT(c) (ISASCII (c) && isprint (c))
|
||||||
#define ISDIGIT(c) (ISASCII (c) && isdigit (c))
|
# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
|
||||||
#define ISALNUM(c) (ISASCII (c) && isalnum (c))
|
# define ISALNUM(c) (ISASCII (c) && isalnum (c))
|
||||||
#define ISALPHA(c) (ISASCII (c) && isalpha (c))
|
# define ISALPHA(c) (ISASCII (c) && isalpha (c))
|
||||||
#define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
|
# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
|
||||||
#define ISLOWER(c) (ISASCII (c) && islower (c))
|
# define ISLOWER(c) (ISASCII (c) && islower (c))
|
||||||
#define ISPUNCT(c) (ISASCII (c) && ispunct (c))
|
# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
|
||||||
#define ISSPACE(c) (ISASCII (c) && isspace (c))
|
# define ISSPACE(c) (ISASCII (c) && isspace (c))
|
||||||
#define ISUPPER(c) (ISASCII (c) && isupper (c))
|
# define ISUPPER(c) (ISASCII (c) && isupper (c))
|
||||||
#define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
|
# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
|
||||||
|
|
||||||
# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
|
# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
|
||||||
|
|
||||||
@ -142,15 +142,19 @@ __strchrnul (s, c)
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
# ifndef internal_function
|
||||||
|
/* Inside GNU libc we mark some function in a special way. In other
|
||||||
|
environments simply ignore the marking. */
|
||||||
|
# define internal_function
|
||||||
|
# endif
|
||||||
|
|
||||||
/* Match STRING against the filename pattern PATTERN, returning zero if
|
/* Match STRING against the filename pattern PATTERN, returning zero if
|
||||||
it matches, nonzero if not. */
|
it matches, nonzero if not. */
|
||||||
static int internal_fnmatch __P ((const char *pattern, const char *string,
|
static int internal_fnmatch __P ((const char *pattern, const char *string,
|
||||||
int no_leading_period, int flags))
|
int no_leading_period, int flags))
|
||||||
internal_function;
|
internal_function;
|
||||||
static int
|
static int
|
||||||
#ifdef _LIBC
|
|
||||||
internal_function
|
internal_function
|
||||||
#endif
|
|
||||||
internal_fnmatch (pattern, string, no_leading_period, flags)
|
internal_fnmatch (pattern, string, no_leading_period, flags)
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
const char *string;
|
const char *string;
|
||||||
|
Loading…
Reference in New Issue
Block a user