mirror of
https://sourceware.org/git/glibc.git
synced 2025-06-22 14:41:01 +03:00
[BZ #968]
* string/strxfrm_l.c (STRXFRM): Fix exit conditions of two loops.
This commit is contained in:
@ -1,5 +1,8 @@
|
|||||||
2005-10-15 Ulrich Drepper <drepper@redhat.com>
|
2005-10-15 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
[BZ #968]
|
||||||
|
* string/strxfrm_l.c (STRXFRM): Fix exit conditions of two loops.
|
||||||
|
|
||||||
* sysdeps/unix/fdopendir.c (fdopendir): Make sure descriptor
|
* sysdeps/unix/fdopendir.c (fdopendir): Make sure descriptor
|
||||||
allows reading.
|
allows reading.
|
||||||
|
|
||||||
|
@ -196,11 +196,17 @@ files in a directory, perhaps as part of a menu.
|
|||||||
|
|
||||||
@cindex directory stream
|
@cindex directory stream
|
||||||
The @code{opendir} function opens a @dfn{directory stream} whose
|
The @code{opendir} function opens a @dfn{directory stream} whose
|
||||||
elements are directory entries. You use the @code{readdir} function on
|
elements are directory entries. Alternatively @code{fdopendir} can be
|
||||||
the directory stream to retrieve these entries, represented as
|
used which can have advantages if the program needs to have more
|
||||||
@w{@code{struct dirent}} objects. The name of the file for each entry is
|
control over the way the directory is opened for reading. This
|
||||||
stored in the @code{d_name} member of this structure. There are obvious
|
allows, for instance, to pass the @code{O_NOATIME} flag to
|
||||||
parallels here to the stream facilities for ordinary files, described in
|
@code{open}.
|
||||||
|
|
||||||
|
You use the @code{readdir} function on the directory stream to
|
||||||
|
retrieve these entries, represented as @w{@code{struct dirent}}
|
||||||
|
objects. The name of the file for each entry is stored in the
|
||||||
|
@code{d_name} member of this structure. There are obvious parallels
|
||||||
|
here to the stream facilities for ordinary files, described in
|
||||||
@ref{I/O on Streams}.
|
@ref{I/O on Streams}.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
@ -349,6 +355,9 @@ The process has too many files open.
|
|||||||
The entire system, or perhaps the file system which contains the
|
The entire system, or perhaps the file system which contains the
|
||||||
directory, cannot support any additional open files at the moment.
|
directory, cannot support any additional open files at the moment.
|
||||||
(This problem cannot happen on the GNU system.)
|
(This problem cannot happen on the GNU system.)
|
||||||
|
|
||||||
|
@item ENOMEM
|
||||||
|
Not enough memory available.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
The @code{DIR} type is typically implemented using a file descriptor,
|
The @code{DIR} type is typically implemented using a file descriptor,
|
||||||
@ -357,6 +366,48 @@ and the @code{opendir} function in terms of the @code{open} function.
|
|||||||
file descriptors are closed on @code{exec} (@pxref{Executing a File}).
|
file descriptors are closed on @code{exec} (@pxref{Executing a File}).
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
The directory which is opened for reading by @code{opendir} is
|
||||||
|
identified by the name. In some situations this is not sufficient.
|
||||||
|
Or the way @code{opendir} implicitly creates a file descriptor for the
|
||||||
|
directory is not the way a program might want it. In these cases an
|
||||||
|
alternative interface can be used.
|
||||||
|
|
||||||
|
@comment dirent.h
|
||||||
|
@comment GNU
|
||||||
|
@deftypefun {DIR *} fdopendir (int @var{fd})
|
||||||
|
The @code{fdopendir} function works just like @code{opendir} but
|
||||||
|
instead of taking a file name and opening a file descriptor for the
|
||||||
|
directory the caller is required to provide a file descriptor. This
|
||||||
|
file descriptor is then used in subsequent uses of the returned
|
||||||
|
directory stream object.
|
||||||
|
|
||||||
|
The caller must make sure the file descriptor is associated with a
|
||||||
|
directory and it allows reading.
|
||||||
|
|
||||||
|
If the @code{fdopendir} call returns successfully the file descriptor
|
||||||
|
is now under the control of the system. It can be used in the same
|
||||||
|
way the descriptor implicitly created by @code{opendir} can be used
|
||||||
|
but the program must not close the descriptor.
|
||||||
|
|
||||||
|
In case the function is unsuccessful it returns a null pointer and the
|
||||||
|
file descriptor remains to be usable by the program. The following
|
||||||
|
@code{errno} error conditions are defined for this function:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item EBADF
|
||||||
|
The file descriptor is not valid.
|
||||||
|
|
||||||
|
@item ENOTDIR
|
||||||
|
The file descriptor is not associated with a directory.
|
||||||
|
|
||||||
|
@item EINVAL
|
||||||
|
The descriptor does not allow reading the directory content.
|
||||||
|
|
||||||
|
@item ENOMEM
|
||||||
|
Not enough memory available.
|
||||||
|
@end table
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
In some situations it can be desirable to get hold of the file
|
In some situations it can be desirable to get hold of the file
|
||||||
descriptor which is created by the @code{opendir} call. For instance,
|
descriptor which is created by the @code{opendir} call. For instance,
|
||||||
to switch the current working directory to the directory just read the
|
to switch the current working directory to the directory just read the
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1995,96,97,2002, 2004 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,96,97,2002, 2004, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
|
Written by Ulrich Drepper <drepper@gnu.org>, 1995.
|
||||||
|
|
||||||
@ -210,8 +210,9 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
|
|||||||
/* Handle the pushed elements now. */
|
/* Handle the pushed elements now. */
|
||||||
size_t backw;
|
size_t backw;
|
||||||
|
|
||||||
for (backw = idxcnt - 1; backw >= backw_stop; --backw)
|
for (backw = idxcnt; backw > backw_stop; )
|
||||||
{
|
{
|
||||||
|
--backw;
|
||||||
len = weights[idxarr[backw]++];
|
len = weights[idxarr[backw]++];
|
||||||
|
|
||||||
if (needed + len < n)
|
if (needed + len < n)
|
||||||
@ -293,8 +294,9 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
|
|||||||
/* Handle the pushed elements now. */
|
/* Handle the pushed elements now. */
|
||||||
size_t backw;
|
size_t backw;
|
||||||
|
|
||||||
for (backw = idxcnt - 1; backw >= backw_stop; --backw)
|
for (backw = idxcnt; backw > backw_stop; )
|
||||||
{
|
{
|
||||||
|
--backw;
|
||||||
len = weights[idxarr[backw]++];
|
len = weights[idxarr[backw]++];
|
||||||
if (len != 0)
|
if (len != 0)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user