1997-05-25 03:00  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dynamic-link.h (_dl_verbose): New variable, declare.
	* elf/rtld.c (_dl_verbose): New variable, define.
	(dl_main): Define _dl-verbose based on DL_WARN environment variable.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Print warning about
	changed size in copy relocation only if symbol in shared object
	is larger or _dl_verbose is nonzero.
	* sysdeps/m68k/dl-machine.h (elf_machine_rel): Likewise.
	* sysdeps/powerpc/dl-machine.h (elf_machine_rel): Likewise.
	* sysdeps/sparc/dl-machine.h (elf_machine_rel): Likewise.

	* nis/nss_nis/nis-ethers.c: Don't use relative include paths, use
	<...>.
	* nis/nss_nis/nis-grp.c: Likewise.
	* nis/nss_nis/nis-hosts.c: Likewise.
	* nis/nss_nis/nis-network.c: Likewise.
	* nis/nss_nis/nis-proto.c: Likewise.
	* nis/nss_nis/nis-pwd.c: Likewise.
	* nis/nss_nis/nis-rpc.c: Likewise.
	* nis/nss_nis/nis-spwd.c: Likewise.
	* sysdeps/unix/sysv/sysd-stdio.c: Likewise.
	* wcsmbs/wcscoll.c: Likewise.
	* wcsmbs/wcstod.c: Likewise.
	* wcsmbs/wcstof.c: Likewise.
	* wcsmbs/wcstol.c: Likewise.
	* wcsmbs/wcstold.c: Likewise.
	* wcsmbs/wcsxfrm.c: Likewise.
	Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.

	* time/strftime.c: Implement # flag which changes case of output for
	%a, %b, %B, %p, and %Z format.
	When printing numbers, the given field width is always respected.
	This means that padding happens only up to the given width.
	Proposed by Stephen Gildea <gildea@intouchsys.com>.

1997-05-25 00:44  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/fpu/__math.h (logb): Fix thinko, reverse output
	values.
	Reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>.

1997-05-24 21:03  Philip Blundell  <pjb27@cam.ac.uk>

	* db/btree/bt_open.c (__bt_open): Only try to use st_blksize (from
	struct stat) if it exists for this port.

1997-05-24 20:34  Philip Blundell  <pjb27@cam.ac.uk>

	* sysdeps/standalone/arm/errnos.h: Add EPERM.

1997-05-23 16:28  Philip Blundell  <phil@kings-cross.london.uk.eu.org>

	* linewrap.h: New file, needed to compile argp without libio.

1997-05-24 11:59  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* manual/stdio.texi (Formatted Messages): Corrected some typos.

1997-05-24 11:58  Philip Blundell  <pjb27@cam.ac.uk>

	* sysdeps/stub/start.c: Fix typo.
This commit is contained in:
Ulrich Drepper 1997-05-25 01:12:55 +00:00
parent a133e7a4d2
commit cf29ffbef9
29 changed files with 192 additions and 80 deletions

View file

@ -1,3 +1,66 @@
1997-05-25 03:00 Ulrich Drepper <drepper@cygnus.com>
* elf/dynamic-link.h (_dl_verbose): New variable, declare.
* elf/rtld.c (_dl_verbose): New variable, define.
(dl_main): Define _dl-verbose based on DL_WARN environment variable.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Print warning about
changed size in copy relocation only if symbol in shared object
is larger or _dl_verbose is nonzero.
* sysdeps/m68k/dl-machine.h (elf_machine_rel): Likewise.
* sysdeps/powerpc/dl-machine.h (elf_machine_rel): Likewise.
* sysdeps/sparc/dl-machine.h (elf_machine_rel): Likewise.
* nis/nss_nis/nis-ethers.c: Don't use relative include paths, use
<...>.
* nis/nss_nis/nis-grp.c: Likewise.
* nis/nss_nis/nis-hosts.c: Likewise.
* nis/nss_nis/nis-network.c: Likewise.
* nis/nss_nis/nis-proto.c: Likewise.
* nis/nss_nis/nis-pwd.c: Likewise.
* nis/nss_nis/nis-rpc.c: Likewise.
* nis/nss_nis/nis-spwd.c: Likewise.
* sysdeps/unix/sysv/sysd-stdio.c: Likewise.
* wcsmbs/wcscoll.c: Likewise.
* wcsmbs/wcstod.c: Likewise.
* wcsmbs/wcstof.c: Likewise.
* wcsmbs/wcstol.c: Likewise.
* wcsmbs/wcstold.c: Likewise.
* wcsmbs/wcsxfrm.c: Likewise.
Reported by Zack Weinberg <zack@rabi.phys.columbia.edu>.
* time/strftime.c: Implement # flag which changes case of output for
%a, %b, %B, %p, and %Z format.
When printing numbers, the given field width is always respected.
This means that padding happens only up to the given width.
Proposed by Stephen Gildea <gildea@intouchsys.com>.
1997-05-25 00:44 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/fpu/__math.h (logb): Fix thinko, reverse output
values.
Reported by Andreas Jaeger <aj@arthur.rhein-neckar.de>.
1997-05-24 21:03 Philip Blundell <pjb27@cam.ac.uk>
* db/btree/bt_open.c (__bt_open): Only try to use st_blksize (from
struct stat) if it exists for this port.
1997-05-24 20:34 Philip Blundell <pjb27@cam.ac.uk>
* sysdeps/standalone/arm/errnos.h: Add EPERM.
1997-05-23 16:28 Philip Blundell <phil@kings-cross.london.uk.eu.org>
* linewrap.h: New file, needed to compile argp without libio.
1997-05-24 11:59 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* manual/stdio.texi (Formatted Messages): Corrected some typos.
1997-05-24 11:58 Philip Blundell <pjb27@cam.ac.uk>
* sysdeps/stub/start.c: Fix typo.
1997-05-21 17:53 Miles Bader <miles@gnu.ai.mit.edu>
* argp-help.c (hol_add_cluster): Initialize CL->depth.

View file

@ -259,7 +259,9 @@ __bt_open(fname, flags, mode, openinfo, dflags)
* Don't overflow the page offset type.
*/
if (b.psize == 0) {
#ifdef _STATBUF_ST_BLKSIZE
b.psize = sb.st_blksize;
#endif
if (b.psize < MINPSIZE)
b.psize = MINPSIZE;
if (b.psize > MAX_PAGE_OFFSET + 1)

View file

@ -22,6 +22,11 @@
#include <assert.h>
/* Global read-only variable defined in rtld.c which is nonzero if we
shall give more warning messages. */
extern int _dl_verbose __attribute__ ((unused));
/* Read the dynamic section at DYN and fill in INFO with indices DT_*. */
static inline void __attribute__ ((unused))

View file

@ -56,6 +56,7 @@ static void print_missing_version (int errcode, const char *objname,
int _dl_argc;
char **_dl_argv;
const char *_dl_rpath;
int _dl_verbose;
/* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This
@ -206,12 +207,13 @@ dl_main (const ElfW(Phdr) *phdr,
int has_interp = 0;
mode = getenv ("LD_TRACE_LOADED_OBJECTS") != NULL ? trace : normal;
_dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1;
/* LAZY is determined by the parameters --datadeps and --function-deps
if we trace the binary. */
/* LAZY is determined by the environment variable LD_WARN and
LD_BIND_NOW if we trace the binary. */
if (mode == trace)
lazy = (*(getenv ("LD_WARN") ?: "") == '\0' ? -1
: (*(getenv ("LD_BIND_NOW") ?: "") == '\0' ? 1 : 0));
lazy = (_dl_verbose
? (*(getenv ("LD_BIND_NOW") ?: "") == '\0' ? 1 : 0) : -1);
else
lazy = !__libc_enable_secure && *(getenv ("LD_BIND_NOW") ?: "") == '\0';

1
linewrap.h Normal file
View file

@ -0,0 +1 @@
#include "stdio/linewrap.h"

View file

@ -3825,7 +3825,7 @@ wait until the rest of the manual is more done and polished.
On systems which are based on System V messages of programs (especially
the system tools) are printed in a strict form using the @code{fmtmsg}
function. The uniformity sometimes helps the user to interpret messages
and the strictness tests of the @code{fmtmsg} function ensures that the
and the strictness tests of the @code{fmtmsg} function ensure that the
programmer follows some minimal requirements.
@menu
@ -3839,7 +3839,7 @@ programmer follows some minimal requirements.
@subsection Printing Formatted Messages
Messages can be printed to standard error and/or to the console. To
select the destination the programmer can use the following to values,
select the destination the programmer can use the following two values,
bitwise OR combined if wanted, for the @var{classification} parameter of
@code{fmtmsg}:
@ -3850,7 +3850,7 @@ Display the message in standard error.
Display the message on the system console.
@end vtable
The errorneous piece of the system can be signal by exactly one of the
The errorneous piece of the system can be signalled by exactly one of the
following values which also is bitwise ORed with the
@var{classification} parameter to @code{fmtmsg}:
@ -3900,7 +3900,7 @@ reference to the online documentation where more information can be
found. It should contain the @var{label} value and a unique
identification number.
Each of the parameters can be of a special value which means this value
Each of the parameters can be a special value which means this value
is to be omitted. The symbolic names for these values are:
@vtable @code
@ -3919,7 +3919,7 @@ Ignore @var{action} parameter.
Ignore @var{tag} parameter.
@end vtable
There is another way certain fields can be omitted from the output the
There is another way certain fields can be omitted from the output to
standard error. This is described below in the description of
environment variables influencing the behaviour.
@ -3961,10 +3961,10 @@ ignored.
This function is specified in the X/Open Portability Guide. It is also
available on all system derived from System V.
The function return the value @code{MM_OK} if no error occurred. If
The function returns the value @code{MM_OK} if no error occurred. If
only the printing to standard error failed, it returns @code{MM_NOMSG}.
If printing to the console fails, it returns @code{MM_NOCON}. If
nothing is printed @code{MM_NOTOK} is returned. Among situation where
nothing is printed @code{MM_NOTOK} is returned. Among situations where
all outputs fail this last value is also returned if a parameter value
is incorrect.
@end deftypefun
@ -3974,7 +3974,7 @@ There are two environment variables which influence the behaviour of
output actually happening on standard error (@emph{not} the console
output). Each of the five fields can explicitely be enabled. To do
this the user has to put the @code{MSGVERB} variable with a format like
following in the environment before calling the @code{fmtmsg} function
the following in the environment before calling the @code{fmtmsg} function
the first time:
@smallexample
@ -3990,7 +3990,7 @@ The second environment variable which influences the behaviour of
@code{fmtmsg} is @code{SEV_LEVEL}. This variable and the change in the
behaviour of @code{fmtmsg} is not specified in the X/Open Portability
Guide. It is available in System V systems, though. It can be used to
introduce no severity levels. By default, only the five severity levels
introduce new severity levels. By default, only the five severity levels
described above are available. Any other numeric value would make
@code{fmtmsg} print nothing.
@ -4026,7 +4026,7 @@ There is another possibility to introduce severity classes beside using
the environment variable @code{SEV_LEVEL}. This simplifies the task of
introducing new classes in a running program. One could use the
@code{setenv} or @code{putenv} function to set the environment variable,
but this toilsome.
but this is toilsome.
@deftypefun int addseverity (int @var{severity}, const char *@var{string})
This function allows to introduce new severity classes which can be
@ -4039,13 +4039,17 @@ value.
If @var{string} is @code{NULL} the severity class with the numeric value
according to @var{severity} is removed.
It is not possible to overwrite or remove one of the default severity
classes. All calls to @code{addseverity} with @var{severity} set to one
of the values for the default classes will fail.
The return value is @code{MM_OK} if the task was successfully performed.
If the return value is @code{MM_NOTOK} something went wrong. This could
mean that no more memory is available or a class is not available when
it has to be removed.
This function is not specified in the X/Open Portability Guide although
the @code{fmtsmg} is. It is available on System V systems.
the @code{fmtsmg} function is. It is available on System V systems.
@end deftypefun
@ -4120,7 +4124,7 @@ TO FIX: action
@noindent
I.e., the output produced by the @var{text} and the @var{tag} parameters
to @code{fmtmsg} vanished. Please also note the now there is no colon
to @code{fmtmsg} vanished. Please also note that now there is no colon
after the @code{NOTE} and @code{NOTE2} strings in the output. This is
not necessary since there is no more output on this line since the text
is missing.

View file

@ -41,7 +41,7 @@ struct ether
#define ENTNAME etherent
#define STRUCTURE ether
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
struct response
{

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@ -32,7 +32,7 @@
#define ENTNAME grent
#define STRUCTURE group
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
/* Protect global state against multiple changers */
__libc_lock_define_initialized (static, lock)

View file

@ -31,8 +31,8 @@
#include "nss-nis.h"
/* Get implementation for some internal functions. */
#include "../../resolv/mapv4v6addr.h"
#include "../../resolv/mapv4v6hostent.h"
#include <resolv/mapv4v6addr.h>
#include <resolv/mapv4v6hostent.h>
#define ENTNAME hostent
#define DATABASE "hosts"
@ -47,7 +47,7 @@ struct hostent_data
#define TRAILING_LIST_MEMBER h_aliases
#define TRAILING_LIST_SEPARATOR_P isspace
#include "../../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
LINE_PARSER
("#",
{

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@ -33,7 +33,7 @@
/* Get the declaration of the parser function. */
#define ENTNAME netent
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
__libc_lock_define_initialized (static, lock)

View file

@ -31,7 +31,7 @@
/* Get the declaration of the parser function. */
#define ENTNAME protoent
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
__libc_lock_define_initialized (static, lock)
@ -45,7 +45,7 @@ static struct response *start = NULL;
static struct response *next = NULL;
static int
saveit (int instatus, char *inkey, int inkeylen, char *inval,
saveit (int instatus, char *inkey, int inkeylen, char *inval,
int invallen, char *indata)
{
if (instatus != YP_TRUE)
@ -68,7 +68,7 @@ saveit (int instatus, char *inkey, int inkeylen, char *inval,
strncpy (next->val, inval, invallen);
next->val[invallen] = '\0';
}
return 0;
}
@ -78,9 +78,9 @@ internal_nis_setprotoent (void)
char *domainname;
struct ypall_callback ypcb;
enum nss_status status;
yp_get_default_domain (&domainname);
while (start != NULL)
{
if (start->val != NULL)
@ -90,12 +90,12 @@ internal_nis_setprotoent (void)
free (next);
}
start = NULL;
ypcb.foreach = saveit;
ypcb.data = NULL;
status = yperr2nss (yp_all (domainname, "protocols.bynumber", &ypcb));
next = start;
return status;
}
@ -128,9 +128,9 @@ _nss_nis_endprotoent (void)
}
start = NULL;
next = NULL;
__libc_lock_unlock (lock);
return NSS_STATUS_SUCCESS;
}
@ -148,12 +148,12 @@ internal_nis_getprotoent_r (struct protoent *proto,
do
{
char *p;
if (next == NULL)
return NSS_STATUS_NOTFOUND;
p = strcpy (buffer, next->val);
next = next->next;
while (isspace (*p))
++p;
@ -162,7 +162,7 @@ internal_nis_getprotoent_r (struct protoent *proto,
return NSS_STATUS_TRYAGAIN;
}
while (!parse_res);
return NSS_STATUS_SUCCESS;
}

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@ -32,7 +32,7 @@
#define ENTNAME pwent
#define STRUCTURE passwd
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
/* Protect global state against multiple changers */
__libc_lock_define_initialized (static, lock)

View file

@ -31,7 +31,7 @@
/* Get the declaration of the parser function. */
#define ENTNAME rpcent
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
__libc_lock_define_initialized (static, lock)
@ -51,7 +51,7 @@ typedef struct intern_t intern_t;
static intern_t intern = {NULL, NULL};
static int
saveit (int instatus, char *inkey, int inkeylen, char *inval,
saveit (int instatus, char *inkey, int inkeylen, char *inval,
int invallen, char *indata)
{
intern_t *intern = (intern_t *)indata;
@ -76,7 +76,7 @@ saveit (int instatus, char *inkey, int inkeylen, char *inval,
strncpy (intern->next->val, inval, invallen);
intern->next->val[invallen] = '\0';
}
return 0;
}
@ -86,10 +86,10 @@ internal_nis_setrpcent (intern_t *intern)
char *domainname;
struct ypall_callback ypcb;
enum nss_status status;
if (yp_get_default_domain (&domainname))
return NSS_STATUS_UNAVAIL;
while (intern->start != NULL)
{
if (intern->start->val != NULL)
@ -134,7 +134,7 @@ internal_nis_endrpcent (intern_t *intern)
free (intern->next);
}
intern->start = NULL;
return NSS_STATUS_SUCCESS;
}
@ -159,10 +159,10 @@ internal_nis_getrpcent_r (struct rpcent *rpc, char *buffer, size_t buflen,
struct parser_data *pdata = (void *) buffer;
int parse_res;
char *p;
if (data->start == NULL)
internal_nis_setrpcent (data);
/* Get the next entry until we found a correct one. */
do
{
@ -172,13 +172,13 @@ internal_nis_getrpcent_r (struct rpcent *rpc, char *buffer, size_t buflen,
data->next = data->next->next;
while (isspace (*p))
++p;
parse_res = _nss_files_parse_rpcent (p, rpc, pdata, buflen);
if (!parse_res && errno == ERANGE)
return NSS_STATUS_TRYAGAIN;
}
while (!parse_res);
return NSS_STATUS_SUCCESS;
}

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
@ -32,7 +32,7 @@
#define ENTNAME spent
#define STRUCTURE spwd
#define EXTERN_PARSER
#include "../nss/nss_files/files-parse.c"
#include <nss/nss_files/files-parse.c>
/* Protect global state against multiple changers */
__libc_lock_define_initialized (static, lock)

View file

@ -263,7 +263,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
switch (ELF32_R_TYPE (reloc->r_info))
{
case R_386_COPY:
if (sym->st_size != refsym->st_size)
if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size))
{
const char *strtab;

View file

@ -433,7 +433,7 @@ logb (double __x)
register double __value, __junk;
__asm __volatile__
("fxtract\n\t"
: "=t" (__value), "=u" (__junk) : "0" (__x));
: "=t" (__junk), "=u" (__value) : "0" (__x));
return __value;
}

View file

@ -227,7 +227,8 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
switch (ELF32_R_TYPE (reloc->r_info))
{
case R_68K_COPY:
if (sym->st_size != refsym->st_size)
if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size))
{
const char *strtab;

View file

@ -591,7 +591,8 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
}
else if (rinfo == R_PPC_COPY)
{
if (sym->st_size != refsym->st_size)
if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size))
{
const char *strtab;
@ -666,5 +667,3 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
#define ELF_MACHINE_NO_REL 1
#endif

View file

@ -130,7 +130,8 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
switch (ELF32_R_TYPE (reloc->r_info))
{
case R_SPARC_COPY:
if (sym->st_size != refsym->st_size)
if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size))
{
const char *strtab;

View file

@ -1,20 +1,20 @@
/* Copyright (C) 1991, 1994, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file defines the `errno' constants for standalone ARM machines.
These constants are essentially arbitrary. */
@ -46,6 +46,7 @@ Cambridge, MA 02139, USA. */
#define ENOENT 18
#define EPROTOTYPE 19
#define ESRCH 20
#define EPERM 21
#endif
#define __set_errno(val) errno = (val)

View file

@ -13,4 +13,4 @@ weak_alias (__data_start, data_start)
#endif
volatile int __errno;
string_alias (__errno, errno)
strong_alias (__errno, errno)

View file

@ -1,2 +1,2 @@
#define EINTR_REPEAT
#include <../sysdeps/generic/sysd-stdio.c>
#include <sysdeps/generic/sysd-stdio.c>

View file

@ -282,6 +282,7 @@ memcpy_uppcase (dest, src, len)
return dest;
}
#if ! HAVE_TM_GMTOFF
/* Yield the difference between *A and *B,
measured in seconds, ignoring leap seconds. */
@ -464,6 +465,7 @@ strftime (s, maxsize, format, tp)
int width = -1;
int to_lowcase = 0;
int to_uppcase = 0;
int change_case = 0;
#if DO_MULTIBYTE
@ -555,6 +557,9 @@ strftime (s, maxsize, format, tp)
case '^':
to_uppcase = 1;
continue;
case '#':
change_case = 1;
continue;
default:
break;
@ -592,9 +597,11 @@ strftime (s, maxsize, format, tp)
switch (*f)
{
#define DO_NUMBER(d, v) \
digits = d; number_value = v; goto do_number
digits = width == -1 ? d : width; \
number_value = v; goto do_number
#define DO_NUMBER_SPACEPAD(d, v) \
digits = d; number_value = v; goto do_number_spacepad
digits = width == -1 ? d : width; \
number_value = v; goto do_number_spacepad
case '%':
if (modifier != 0)
@ -605,12 +612,22 @@ strftime (s, maxsize, format, tp)
case 'a':
if (modifier != 0)
goto bad_format;
if (change_case)
{
to_uppcase = 1;
to_lowcase = 0;
}
cpy (aw_len, a_wkday);
break;
case 'A':
if (modifier != 0)
goto bad_format;
if (change_case)
{
to_uppcase = 1;
to_lowcase = 0;
}
cpy (wkday_len, f_wkday);
break;
@ -624,6 +641,11 @@ strftime (s, maxsize, format, tp)
case 'B':
if (modifier != 0)
goto bad_format;
if (change_case)
{
to_uppcase = 1;
to_lowcase = 0;
}
cpy (month_len, f_month);
break;
@ -824,6 +846,11 @@ strftime (s, maxsize, format, tp)
/* FALLTHROUGH */
case 'p':
if (change_case)
{
to_uppcase = 0;
to_lowcase = 1;
}
cpy (ap_len, ampm);
break;
@ -996,6 +1023,11 @@ strftime (s, maxsize, format, tp)
DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100);
case 'Z':
if (change_case)
{
to_uppcase = 0;
to_lowcase = 1;
}
cpy (zonelen, zone);
break;

View file

@ -28,4 +28,4 @@
#endif
#define STRCMP wcscmp
#include "../string/strcoll.c"
#include <string/strcoll.c>

View file

@ -22,4 +22,4 @@
#define USE_WIDE_CHAR 1
#include "../stdlib/strtod.c"
#include <stdlib/strtod.c>

View file

@ -40,4 +40,4 @@
(flt) = u.f; \
} while (0)
#include "../stdlib/strtod.c"
#include <stdlib/strtod.c>

View file

@ -20,4 +20,4 @@
#define USE_WIDE_CHAR 1
#include "../stdlib/strtol.c"
#include <stdlib/strtol.c>

View file

@ -41,4 +41,4 @@
(flt) = u.d; \
} while (0)
#include "../stdlib/strtod.c"
#include <stdlib/strtod.c>

View file

@ -31,4 +31,4 @@
#define STRLEN wcslen
#define STPNCPY __wcpncpy
#include "../string/strxfrm.c"
#include <string/strxfrm.c>