mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2026-09-10 07:46:51 -04:00
Update from Gnulib by running admin/merge-gnulib
This commit is contained in:
parent
d56b7e6a7e
commit
962b0d07cd
|
|
@ -3,7 +3,7 @@
|
||||||
% Load plain if necessary, i.e., if running under initex.
|
% Load plain if necessary, i.e., if running under initex.
|
||||||
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
|
||||||
%
|
%
|
||||||
\def\texinfoversion{2026-07-04.10}
|
\def\texinfoversion{2026-08-13.21}
|
||||||
%
|
%
|
||||||
% Copyright 1985, 1986, 1988, 1990-2026 Free Software Foundation, Inc.
|
% Copyright 1985, 1986, 1988, 1990-2026 Free Software Foundation, Inc.
|
||||||
%
|
%
|
||||||
|
|
@ -153,6 +153,9 @@
|
||||||
\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
|
\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
|
||||||
\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
|
\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
|
||||||
|
|
||||||
|
% scratch count register
|
||||||
|
\newcount\countA
|
||||||
|
|
||||||
% Give the space character the catcode for a space.
|
% Give the space character the catcode for a space.
|
||||||
\def\spaceisspace{\catcode`\ =10\relax}
|
\def\spaceisspace{\catcode`\ =10\relax}
|
||||||
|
|
||||||
|
|
@ -765,7 +768,7 @@
|
||||||
|
|
||||||
% @include FILE -- \input text of FILE.
|
% @include FILE -- \input text of FILE.
|
||||||
%
|
%
|
||||||
\def\include{\tracingmacros=1\parseargusing\filenamecatcodes\includezzz}
|
\def\include{\parseargusing\filenamecatcodes\includezzz}
|
||||||
\def\includezzz#1{%
|
\def\includezzz#1{%
|
||||||
\pushthisfilestack
|
\pushthisfilestack
|
||||||
\def\thisfile{#1}%
|
\def\thisfile{#1}%
|
||||||
|
|
@ -997,7 +1000,6 @@
|
||||||
\newtoks\toksD
|
\newtoks\toksD
|
||||||
\newbox\boxA
|
\newbox\boxA
|
||||||
\newbox\boxB
|
\newbox\boxB
|
||||||
\newcount\countA
|
|
||||||
\newif\ifpdf
|
\newif\ifpdf
|
||||||
\newif\ifpdfmakepagedest
|
\newif\ifpdfmakepagedest
|
||||||
|
|
||||||
|
|
@ -9162,7 +9164,9 @@
|
||||||
% type (Ynumbered, Yappendix, Ynothing). #2 is the section title.
|
% type (Ynumbered, Yappendix, Ynothing). #2 is the section title.
|
||||||
%
|
%
|
||||||
\def\donoderef#1#2{%
|
\def\donoderef#1#2{%
|
||||||
\ifx\lastnode\empty\else
|
\ifx\lastnode\empty
|
||||||
|
\setrefshadow{#1}{#2}%
|
||||||
|
\else
|
||||||
\setref{\lastnode}{#1}{#2}%
|
\setref{\lastnode}{#1}{#2}%
|
||||||
\global\let\lastnode=\empty
|
\global\let\lastnode=\empty
|
||||||
\setnodeseenonce
|
\setnodeseenonce
|
||||||
|
|
@ -9207,6 +9211,9 @@
|
||||||
%
|
%
|
||||||
\def\setref#1#2#3{%
|
\def\setref#1#2#3{%
|
||||||
\pdfmkdest{#1}%
|
\pdfmkdest{#1}%
|
||||||
|
\dosetref{#1}{#2}{#3}{xrdef}%
|
||||||
|
}
|
||||||
|
\def\dosetref#1#2#3#4{%
|
||||||
\iflinks
|
\iflinks
|
||||||
{%
|
{%
|
||||||
\requireauxfile
|
\requireauxfile
|
||||||
|
|
@ -9214,17 +9221,28 @@
|
||||||
% match definition in \xrdef, \refx, \xrefX.
|
% match definition in \xrdef, \refx, \xrefX.
|
||||||
\def\value##1{##1}%
|
\def\value##1{##1}%
|
||||||
\edef\writexrdef##1##2{%
|
\edef\writexrdef##1##2{%
|
||||||
\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
|
\write\auxfile{@#4{#1-% #1 of \setref, expanded by the \edef
|
||||||
##1}{##2}}% these are parameters of \writexrdef
|
##1}{##2}}% these are parameters of \writexrdef
|
||||||
}%
|
}%
|
||||||
\toks0 = {#3}%
|
\toks0 = {#3}%
|
||||||
\immediate \writexrdef{title}{\the\toks0 }%
|
\immediate \writexrdef{title}{\the\toks0 }%
|
||||||
\immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
|
\immediate \writexrdef{snt}{\csname #2\endcsname}%
|
||||||
\safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
|
\safewhatsit{\writexrdef{pg}{\folio}}%
|
||||||
}%
|
}%
|
||||||
\fi
|
\fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% Similar to \setref, but used for targets created by sectioning commands.
|
||||||
|
% Write information about this target using @xrshad instead of @xrdef.
|
||||||
|
\def\setrefshadow#1#2{%
|
||||||
|
% For PDF, output the target with \pdfdest. Note pdfTeX issues a warning
|
||||||
|
% if we output two targets with the same name.
|
||||||
|
\pdfmkdest{\pdfshadowprefix#2}%
|
||||||
|
\dosetref{#2}{#1}{#2}{xrshad}%
|
||||||
|
}
|
||||||
|
|
||||||
|
\def\pdfshadowprefix{XXSHADOW-}
|
||||||
|
|
||||||
% @xrefautosectiontitle on|off says whether @section(ing) names are used
|
% @xrefautosectiontitle on|off says whether @section(ing) names are used
|
||||||
% automatically in xrefs, if the third arg is not explicitly specified.
|
% automatically in xrefs, if the third arg is not explicitly specified.
|
||||||
% This was provided as a "secret" @set xref-automatic-section-title
|
% This was provided as a "secret" @set xref-automatic-section-title
|
||||||
|
|
@ -9270,7 +9288,17 @@
|
||||||
\def\infofilename{\ignorespaces #4}%
|
\def\infofilename{\ignorespaces #4}%
|
||||||
\setbox\infofilenamebox = \hbox{\infofilename\unskip}%
|
\setbox\infofilenamebox = \hbox{\infofilename\unskip}%
|
||||||
%
|
%
|
||||||
\startxreflink{#1}{#4}%
|
\ifdim \wd\printedmanualbox = 0pt
|
||||||
|
\checkshadowactive{#1}\countA
|
||||||
|
\expandafter\ifnum\countA = 1
|
||||||
|
\startxreflink{\pdfshadowprefix#1}{}%
|
||||||
|
\else
|
||||||
|
\startxreflink{#1}{}%
|
||||||
|
\fi
|
||||||
|
\else
|
||||||
|
\startxreflink{#1}{#4}%
|
||||||
|
\fi
|
||||||
|
%
|
||||||
\getrefx{#1-title}\Xthisreftitle
|
\getrefx{#1-title}\Xthisreftitle
|
||||||
%
|
%
|
||||||
% Float references are printed completely differently: "Figure 1.2"
|
% Float references are printed completely differently: "Figure 1.2"
|
||||||
|
|
@ -9536,31 +9564,62 @@
|
||||||
\fi
|
\fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\def\xrdefctxt{%
|
||||||
|
% Context for expanding the node or anchor name to remove control sequences.
|
||||||
|
% \turnoffactive stops 8-bit characters being changed to commands
|
||||||
|
% like @'e.
|
||||||
|
\indexnofonts
|
||||||
|
\turnoffactive
|
||||||
|
\def\value##1{##1}%
|
||||||
|
}
|
||||||
|
|
||||||
% Set #2 to xref string #1
|
% Set #2 to xref string #1
|
||||||
\def\getrefx#1#2{%
|
\def\getrefx#1#2{%
|
||||||
\requireauxfile
|
\requireauxfile
|
||||||
{%
|
{%
|
||||||
\indexnofonts
|
\xrdefctxt
|
||||||
\turnoffactive
|
|
||||||
\def\value##1{##1}%
|
|
||||||
\expandafter\global\expandafter\let\expandafter#2\csname XR#1\endcsname
|
\expandafter\global\expandafter\let\expandafter#2\csname XR#1\endcsname
|
||||||
|
\ifx#2\relax
|
||||||
|
% try a shadow definition
|
||||||
|
\expandafter\global\expandafter\let\expandafter#2\csname SXR#1\endcsname
|
||||||
|
\ifx#2\empty
|
||||||
|
\let#2\relax
|
||||||
|
\fi
|
||||||
|
\fi
|
||||||
}%
|
}%
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% Check if shadow definitions are active for target name #1, setting the
|
||||||
|
% count register sequence in #2 to 1 if so.
|
||||||
|
\def\checkshadowactive#1#2{%
|
||||||
|
\requireauxfile
|
||||||
|
{%
|
||||||
|
\xrdefctxt
|
||||||
|
\expandafter\global\expandafter\let\expandafter\tmp\csname SXR#1-title\endcsname
|
||||||
|
}%
|
||||||
|
\ifx\tmp\relax
|
||||||
|
#2=0 % no definitions made
|
||||||
|
\else
|
||||||
|
\ifx\tmp\empty
|
||||||
|
#2=0 % shadow definitions were disabled
|
||||||
|
\else
|
||||||
|
\expandafter\let\expandafter\tmp\csname XR#1-title\endcsname
|
||||||
|
\ifx\tmp\relax
|
||||||
|
#2=1 % yes, shadow definitions are active
|
||||||
|
\else
|
||||||
|
#2=0 % no, a real definition was made.
|
||||||
|
\fi
|
||||||
|
\fi
|
||||||
|
\fi
|
||||||
|
}%
|
||||||
|
|
||||||
% This is the macro invoked by entries in the aux file. Define a control
|
% This is the macro invoked by entries in the aux file. Define a control
|
||||||
% sequence for a cross-reference target (we prepend XR to the control sequence
|
% sequence for a cross-reference target (we prepend XR to the control sequence
|
||||||
% name to avoid collisions). The value is the page number. If this is a float
|
% name to avoid collisions). The value is the page number. If this is a float
|
||||||
% type, we have more work to do.
|
% type, we have more work to do.
|
||||||
%
|
%
|
||||||
\def\xrdef#1#2{%
|
\def\xrdef#1#2{%
|
||||||
{% Expand the node or anchor name to remove control sequences.
|
{\xrdefctxt \xdef\safexrefname{#1}}%
|
||||||
% \turnoffactive stops 8-bit characters being changed to commands
|
|
||||||
% like @'e. \refx does the same to retrieve the value in the definition.
|
|
||||||
\indexnofonts
|
|
||||||
\turnoffactive
|
|
||||||
\def\value##1{##1}%
|
|
||||||
\xdef\safexrefname{#1}%
|
|
||||||
}%
|
|
||||||
%
|
%
|
||||||
\bgroup
|
\bgroup
|
||||||
\expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
|
\expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
|
||||||
|
|
@ -9592,6 +9651,24 @@
|
||||||
\ignorespaces % ignore ends of line in aux file
|
\ignorespaces % ignore ends of line in aux file
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% Like \xrdef, but used for "shadow" definitions.
|
||||||
|
\def\xrshad#1#2{%
|
||||||
|
{\xrdefctxt \xdef\safexrefname{#1}}%
|
||||||
|
\bgroup
|
||||||
|
\expandafter\ifx\csname XR\safexrefname\endcsname\relax
|
||||||
|
\expandafter\ifx\csname SXR\safexrefname\endcsname\relax
|
||||||
|
% safe to make shadow definition.
|
||||||
|
\expandafter\gdef\csname SXR\safexrefname\endcsname{#2}%
|
||||||
|
\else
|
||||||
|
% earlier shadow definition. disable.
|
||||||
|
\expandafter\gdef\csname SXR\safexrefname\endcsname{}%
|
||||||
|
\fi
|
||||||
|
\else
|
||||||
|
% blocked by node or anchor definition
|
||||||
|
\fi
|
||||||
|
\egroup
|
||||||
|
}
|
||||||
|
|
||||||
% If working on a large document in chapters, it is convenient to
|
% If working on a large document in chapters, it is convenient to
|
||||||
% be able to disable indexing, cross-referencing, and contents, for test runs.
|
% be able to disable indexing, cross-referencing, and contents, for test runs.
|
||||||
% This is done with @novalidate at the beginning of the file.
|
% This is done with @novalidate at the beginning of the file.
|
||||||
|
|
@ -9988,6 +10065,14 @@
|
||||||
% We can't be used inside a paragraph.
|
% We can't be used inside a paragraph.
|
||||||
\par
|
\par
|
||||||
%
|
%
|
||||||
|
% Allow a page break with a ragged page bottom. This could help to reduce
|
||||||
|
% interparagraph spacing if a large float doesn't fit on the current page.
|
||||||
|
%
|
||||||
|
\penalty 0
|
||||||
|
\vskip 0pt plus 5\baselineskip
|
||||||
|
\penalty 1000
|
||||||
|
\vskip 0pt plus -5\baselineskip
|
||||||
|
%
|
||||||
\vtop\bgroup
|
\vtop\bgroup
|
||||||
\def\floattype{#1}%
|
\def\floattype{#1}%
|
||||||
\def\floatlabel{#2}%
|
\def\floatlabel{#2}%
|
||||||
|
|
|
||||||
|
|
@ -159,11 +159,11 @@ acl_default_nontrivial (acl_t acl)
|
||||||
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
int
|
int
|
||||||
acl_nontrivial (int count, aclent_t *entries)
|
acl_nontrivial (int count, aclent_t const *entries)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
aclent_t *ace = &entries[i];
|
aclent_t const *ace = &entries[i];
|
||||||
|
|
||||||
/* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat().
|
/* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat().
|
||||||
If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat().
|
If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat().
|
||||||
|
|
@ -188,7 +188,7 @@ acl_nontrivial (int count, aclent_t *entries)
|
||||||
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
int
|
int
|
||||||
acl_ace_nontrivial (int count, ace_t *entries)
|
acl_ace_nontrivial (int count, ace_t const *entries)
|
||||||
{
|
{
|
||||||
/* The flags in the ace_t structure changed in a binary incompatible way
|
/* The flags in the ace_t structure changed in a binary incompatible way
|
||||||
when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15.
|
when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15.
|
||||||
|
|
@ -209,7 +209,7 @@ acl_ace_nontrivial (int count, ace_t *entries)
|
||||||
/* Running on Solaris 10. */
|
/* Running on Solaris 10. */
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
ace_t *ace = &entries[i];
|
ace_t const *ace = &entries[i];
|
||||||
|
|
||||||
/* Note:
|
/* Note:
|
||||||
If ace->a_flags = ACE_OWNER, ace->a_who is the st_uid from stat().
|
If ace->a_flags = ACE_OWNER, ace->a_who is the st_uid from stat().
|
||||||
|
|
@ -236,7 +236,7 @@ acl_ace_nontrivial (int count, ace_t *entries)
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
ace_t *ace = &entries[i];
|
ace_t const *ace = &entries[i];
|
||||||
|
|
||||||
unsigned int index1;
|
unsigned int index1;
|
||||||
if (ace->a_type == NEW_ACE_ACCESS_ALLOWED_ACE_TYPE)
|
if (ace->a_type == NEW_ACE_ACCESS_ALLOWED_ACE_TYPE)
|
||||||
|
|
@ -368,14 +368,14 @@ acl_ace_nontrivial (int count, ace_t *entries)
|
||||||
/* Return 1 if the given ACL is non-trivial.
|
/* Return 1 if the given ACL is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
int
|
int
|
||||||
acl_nontrivial (int count, struct acl_entry *entries)
|
acl_nontrivial (int count, struct acl_entry const *entries)
|
||||||
{
|
{
|
||||||
if (count > 3)
|
if (count > 3)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
struct acl_entry *ace = &entries[i];
|
struct acl_entry const *ace = &entries[i];
|
||||||
|
|
||||||
if (ace->uid != ACL_NSUSER && ace->gid != ACL_NSGROUP)
|
if (ace->uid != ACL_NSUSER && ace->gid != ACL_NSGROUP)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -388,11 +388,11 @@ acl_nontrivial (int count, struct acl_entry *entries)
|
||||||
/* Return 1 if the given ACL is non-trivial.
|
/* Return 1 if the given ACL is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
int
|
int
|
||||||
aclv_nontrivial (int count, struct acl *entries)
|
aclv_nontrivial (int count, struct acl const *entries)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
struct acl *ace = &entries[i];
|
struct acl const *ace = &entries[i];
|
||||||
|
|
||||||
/* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat().
|
/* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat().
|
||||||
If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat().
|
If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat().
|
||||||
|
|
@ -471,11 +471,11 @@ acl_nfs4_nontrivial (nfs4_acl_int_t *a)
|
||||||
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
int
|
int
|
||||||
acl_nontrivial (int count, struct acl *entries)
|
acl_nontrivial (int count, struct acl const *entries)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
struct acl *ace = &entries[i];
|
struct acl const *ace = &entries[i];
|
||||||
|
|
||||||
/* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat().
|
/* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat().
|
||||||
If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat().
|
If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat().
|
||||||
|
|
|
||||||
|
|
@ -156,14 +156,14 @@ extern int acl_default_nontrivial (acl_t);
|
||||||
|
|
||||||
/* Return 1 if the given ACL is non-trivial.
|
/* Return 1 if the given ACL is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
extern int acl_nontrivial (int count, aclent_t *entries) _GL_ATTRIBUTE_PURE;
|
extern int acl_nontrivial (int count, aclent_t const *entries) _GL_ATTRIBUTE_PURE;
|
||||||
|
|
||||||
# ifdef ACE_GETACL /* Solaris 10 */
|
# ifdef ACE_GETACL /* Solaris 10 */
|
||||||
|
|
||||||
/* Test an ACL retrieved with ACE_GETACL.
|
/* Test an ACL retrieved with ACE_GETACL.
|
||||||
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
Return 1 if the given ACL, consisting of COUNT entries, is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
extern int acl_ace_nontrivial (int count, ace_t *entries) _GL_ATTRIBUTE_PURE;
|
extern int acl_ace_nontrivial (int count, ace_t const *entries) _GL_ATTRIBUTE_PURE;
|
||||||
|
|
||||||
/* Definitions for when the built executable is executed on Solaris 10
|
/* Definitions for when the built executable is executed on Solaris 10
|
||||||
(newer version) or Solaris 11. */
|
(newer version) or Solaris 11. */
|
||||||
|
|
@ -202,13 +202,13 @@ extern int acl_ace_nontrivial (int count, ace_t *entries) _GL_ATTRIBUTE_PURE;
|
||||||
|
|
||||||
/* Return 1 if the given ACL is non-trivial.
|
/* Return 1 if the given ACL is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
extern int acl_nontrivial (int count, struct acl_entry *entries);
|
extern int acl_nontrivial (int count, struct acl_entry const *entries);
|
||||||
|
|
||||||
# if HAVE_ACLV_H /* HP-UX >= 11.11 */
|
# if HAVE_ACLV_H /* HP-UX >= 11.11 */
|
||||||
|
|
||||||
/* Return 1 if the given ACL is non-trivial.
|
/* Return 1 if the given ACL is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
extern int aclv_nontrivial (int count, struct acl *entries);
|
extern int aclv_nontrivial (int count, struct acl const *entries);
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
@ -226,7 +226,7 @@ extern int acl_nontrivial (struct acl *a);
|
||||||
|
|
||||||
/* Return 1 if the given ACL is non-trivial.
|
/* Return 1 if the given ACL is non-trivial.
|
||||||
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */
|
||||||
extern int acl_nontrivial (int count, struct acl *entries);
|
extern int acl_nontrivial (int count, struct acl const *entries);
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <eloop-threshold.h>
|
#include <min-eloop-threshold.h>
|
||||||
#include <filename.h>
|
#include <filename.h>
|
||||||
#include <idx.h>
|
#include <idx.h>
|
||||||
#include <intprops.h>
|
#include <intprops.h>
|
||||||
|
|
@ -42,6 +42,7 @@
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
# include <shlib-compat.h>
|
# include <shlib-compat.h>
|
||||||
|
# include <stdbool.h>
|
||||||
# define GCC_LINT 1
|
# define GCC_LINT 1
|
||||||
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
|
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
|
||||||
#else
|
#else
|
||||||
|
|
@ -72,7 +73,6 @@
|
||||||
# endif
|
# endif
|
||||||
# define __mempcpy mempcpy
|
# define __mempcpy mempcpy
|
||||||
# define __pathconf pathconf
|
# define __pathconf pathconf
|
||||||
# define __rawmemchr rawmemchr
|
|
||||||
# define __readlink readlink
|
# define __readlink readlink
|
||||||
# if IN_RELOCWRAPPER
|
# if IN_RELOCWRAPPER
|
||||||
/* When building the relocatable program wrapper, use the system's memmove
|
/* When building the relocatable program wrapper, use the system's memmove
|
||||||
|
|
@ -233,7 +233,7 @@ realpath_stk (const char *name, char *resolved, struct realpath_bufs *bufs)
|
||||||
return NULL;
|
return NULL;
|
||||||
rname = bufs->rname.data;
|
rname = bufs->rname.data;
|
||||||
}
|
}
|
||||||
dest = __rawmemchr (rname, '\0');
|
dest = strchr (rname, '\0');
|
||||||
start = name;
|
start = name;
|
||||||
prefix_len = FILE_SYSTEM_PREFIX_LEN (rname);
|
prefix_len = FILE_SYSTEM_PREFIX_LEN (rname);
|
||||||
}
|
}
|
||||||
|
|
@ -317,7 +317,7 @@ realpath_stk (const char *name, char *resolved, struct realpath_bufs *bufs)
|
||||||
}
|
}
|
||||||
if (0 <= n)
|
if (0 <= n)
|
||||||
{
|
{
|
||||||
if (++num_links > __eloop_threshold ())
|
if (++num_links > MIN_ELOOP_THRESHOLD)
|
||||||
{
|
{
|
||||||
__set_errno (ELOOP);
|
__set_errno (ELOOP);
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
||||||
|
|
@ -99,11 +99,13 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Suppress gcc's "...may be used before initialized" warnings,
|
/* Suppress gcc's "...may be used before initialized" warnings,
|
||||||
generated by GCC versions up to at least GCC 15.1.
|
generated by GCC versions before GCC 17 (GCC bug 80922).
|
||||||
Likewise for gcc -fanalyzer's "use of uninitialized value" warnings. */
|
Likewise for gcc -fanalyzer's "use of uninitialized value" warnings. */
|
||||||
#if _GL_GNUC_PREREQ (4, 7)
|
#if _GL_GNUC_PREREQ (4, 7)
|
||||||
# pragma GCC diagnostic push
|
# pragma GCC diagnostic push
|
||||||
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
# if __GNUC__ < 17
|
||||||
|
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||||
|
# endif
|
||||||
# if _GL_GNUC_PREREQ (13, 0)
|
# if _GL_GNUC_PREREQ (13, 0)
|
||||||
# pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value"
|
# pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value"
|
||||||
# endif
|
# endif
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,7 @@ _GL_WARN_ON_USE (scandir, "scandir is unportable - "
|
||||||
/* Compare two 'struct dirent' entries alphabetically. */
|
/* Compare two 'struct dirent' entries alphabetically. */
|
||||||
# if !@HAVE_ALPHASORT@
|
# if !@HAVE_ALPHASORT@
|
||||||
_GL_FUNCDECL_SYS (alphasort, int,
|
_GL_FUNCDECL_SYS (alphasort, int,
|
||||||
(const struct dirent **, const struct dirent **),
|
(const struct dirent * /*const*/ *, const struct dirent * /*const*/ *),
|
||||||
_GL_ATTRIBUTE_PURE
|
_GL_ATTRIBUTE_PURE
|
||||||
_GL_ARG_NONNULL ((1, 2)));
|
_GL_ARG_NONNULL ((1, 2)));
|
||||||
# endif
|
# endif
|
||||||
|
|
|
||||||
|
|
@ -1,88 +0,0 @@
|
||||||
/* Threshold at which to diagnose ELOOP. Generic version.
|
|
||||||
Copyright (C) 2012-2026 Free Software Foundation, Inc.
|
|
||||||
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 Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 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
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with the GNU C Library; if not, see
|
|
||||||
<https://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#ifndef _ELOOP_THRESHOLD_H
|
|
||||||
#define _ELOOP_THRESHOLD_H 1
|
|
||||||
|
|
||||||
/* This file uses _GL_ATTRIBUTE_CONST. */
|
|
||||||
#if !_LIBC && !_GL_CONFIG_H_INCLUDED
|
|
||||||
#error "Please include config.h first."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
#ifdef _LIBC
|
|
||||||
# include <sys/param.h>
|
|
||||||
# define _GL_ATTRIBUTE_CONST __attribute__ ((const))
|
|
||||||
#else
|
|
||||||
# include <unistd.h>
|
|
||||||
# include "minmax.h"
|
|
||||||
# define __sysconf sysconf
|
|
||||||
# if (!defined SYMLOOP_MAX \
|
|
||||||
&& ! (defined _SC_SYMLOOP_MAX && defined _POSIX_SYMLOOP_MAX))
|
|
||||||
# define SYMLOOP_MAX 8
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic
|
|
||||||
links that can be reliably traversed in the resolution of a
|
|
||||||
pathname in the absence of a loop." This makes it a minimum that
|
|
||||||
we should certainly accept. But it leaves open the possibility
|
|
||||||
that more might sometimes work--just not "reliably".
|
|
||||||
|
|
||||||
For example, Linux implements a complex policy whereby there is a
|
|
||||||
small limit on the number of direct symlink traversals (a symlink
|
|
||||||
to a symlink to a symlink), but larger limit on the total number of
|
|
||||||
symlink traversals overall. Hence the SYMLOOP_MAX number should be
|
|
||||||
the small one, but the limit library functions enforce on users
|
|
||||||
should be the larger one.
|
|
||||||
|
|
||||||
So, we use the larger of the reported SYMLOOP_MAX (if any) and our
|
|
||||||
own constant MIN_ELOOP_THRESHOLD, below. This constant should be
|
|
||||||
large enough that it never rules out a file name and directory tree
|
|
||||||
that the underlying system (i.e. calls to 'open' et al) would
|
|
||||||
resolve successfully. It should be small enough that actual loops
|
|
||||||
are detected without a huge number of iterations. */
|
|
||||||
|
|
||||||
#ifndef MIN_ELOOP_THRESHOLD
|
|
||||||
# define MIN_ELOOP_THRESHOLD 40
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Return the maximum number of symlink traversals to permit
|
|
||||||
before diagnosing ELOOP. */
|
|
||||||
static inline unsigned int _GL_ATTRIBUTE_CONST
|
|
||||||
__eloop_threshold (void)
|
|
||||||
{
|
|
||||||
#ifdef SYMLOOP_MAX
|
|
||||||
const int symloop_max = SYMLOOP_MAX;
|
|
||||||
#else
|
|
||||||
/* The function is marked 'const' even though we use memory and
|
|
||||||
call a function, because sysconf is required to return the
|
|
||||||
same value in every call and so it must always be safe to
|
|
||||||
call __eloop_threshold exactly once and reuse the value. */
|
|
||||||
static long int sysconf_symloop_max;
|
|
||||||
if (sysconf_symloop_max == 0)
|
|
||||||
sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX);
|
|
||||||
const unsigned int symloop_max = (sysconf_symloop_max <= 0
|
|
||||||
? _POSIX_SYMLOOP_MAX
|
|
||||||
: sysconf_symloop_max);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return MAX (symloop_max, MIN_ELOOP_THRESHOLD);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* eloop-threshold.h */
|
|
||||||
|
|
@ -36,7 +36,7 @@ extern "C" {
|
||||||
|
|
||||||
|
|
||||||
#if !HAVE_DECL___FPENDING
|
#if !HAVE_DECL___FPENDING
|
||||||
size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE;
|
size_t __fpending (FILE /*const*/ *) _GL_ATTRIBUTE_PURE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
#include "getopt_int.h"
|
#include "getopt_int.h"
|
||||||
|
|
||||||
/* Convert char *__getopt_argv_const * to char ** without provoking
|
/* Convert char *__getopt_argv_const * to char ** without provoking
|
||||||
gcc -Wuseless-cast when __getopt_argv_gconst is empty. */
|
gcc -Wuseless-cast when __getopt_argv_const is empty. */
|
||||||
#ifdef __getopt_argv_const_is_empty
|
#ifdef __getopt_argv_const_is_empty
|
||||||
# define ARGV_CAST(argv) (argv)
|
# define ARGV_CAST(argv) (argv)
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
289
lib/gettext.h
289
lib/gettext.h
|
|
@ -42,9 +42,7 @@
|
||||||
/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
|
/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
|
||||||
chokes if dcgettext is defined as a macro. So include it now, to make
|
chokes if dcgettext is defined as a macro. So include it now, to make
|
||||||
later inclusions of <locale.h> a NOP. We don't include <libintl.h>
|
later inclusions of <locale.h> a NOP. We don't include <libintl.h>
|
||||||
as well because people using "gettext.h" will not include <libintl.h>,
|
as well because people using "gettext.h" will not include <libintl.h>. */
|
||||||
and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
|
|
||||||
is OK. */
|
|
||||||
# if defined(__sun)
|
# if defined(__sun)
|
||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
# endif
|
# endif
|
||||||
|
|
@ -59,52 +57,68 @@
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
/* Like the C cast ((type) (expr)), but do only conversions that an
|
||||||
|
ordinary assignment would do. This can diagnose invalid arguments
|
||||||
|
better than a cast would. */
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# define _LIBGETTEXT_FUNCAST(type, expr) static_cast <type> (expr)
|
||||||
|
# else
|
||||||
|
# define _LIBGETTEXT_FUNCAST(type, expr) (type) {(expr)}
|
||||||
|
# endif
|
||||||
|
|
||||||
/* Disabled NLS. */
|
/* Disabled NLS. */
|
||||||
/* When gcc is used with option -Wformat=2, we need to silence
|
/* When gcc or clang is used with option -Wformat=2, we need to silence
|
||||||
"warning: format not a string literal, argument types not checked [-Wformat-nonliteral]"
|
gcc: "warning: format not a string literal, argument types not checked [-Wformat-nonliteral]"
|
||||||
|
clang: "warning: format string is not a string literal [-Wformat-nonliteral]",
|
||||||
|
"warning: format string is not a string literal (potentially insecure) [-Wformat-security]"
|
||||||
warnings that would occur at every invocation of a *gettext function
|
warnings that would occur at every invocation of a *gettext function
|
||||||
in a *printf format string position.
|
in a *printf format string position.
|
||||||
Do this with inline functions when possible, namely for gettext, dgettext,
|
Do this with inline functions when possible. */
|
||||||
dcgettext, which are known to gcc as "external built-ins".
|
|
||||||
It is not ideal to ignore the possible side effects done in the
|
|
||||||
Domainname and Category arguments, but it's better than to have a
|
|
||||||
warning at every invocation in a format string position. */
|
|
||||||
/* When clang is used with option -Wformat=2, we need to silence
|
|
||||||
"warning: format string is not a string literal [-Wformat-nonliteral]"
|
|
||||||
warnings that would occur at every invocation of a *gettext function
|
|
||||||
in a *printf format string position.
|
|
||||||
It is not ideal to ignore the possible side effects done in the
|
|
||||||
Domainname and Category arguments, but it's better than to have a
|
|
||||||
warning at every invocation in a format string position. */
|
|
||||||
/* These warnings would not occur with enabled NLS. */
|
/* These warnings would not occur with enabled NLS. */
|
||||||
/* A test case:
|
/* A test case:
|
||||||
================================ foo.c ================================
|
================================ foo.c ================================
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
extern const char *some_computed_string (void);
|
||||||
|
|
||||||
void foo (int n)
|
void foo (int n)
|
||||||
{
|
{
|
||||||
|
textdomain ("pkg");
|
||||||
|
bindtextdomain ("pkg", "/usr/share/locale");
|
||||||
|
bind_textdomain_codeset ("pkg", "UTF-8");
|
||||||
|
|
||||||
printf (gettext ("foo %d"), n);
|
printf (gettext ("foo %d"), n);
|
||||||
printf (dgettext ("toto", "foo %d"), n);
|
printf (dgettext ("toto", "foo %d"), n);
|
||||||
printf (dcgettext ("toto", "foo %d", LC_MESSAGES), n);
|
printf (dcgettext ("toto", "foo %d", LC_MESSAGES), n);
|
||||||
printf (ngettext ("foo %d", "bar %d", n), n);
|
printf (ngettext ("foo %d", "bar %d", n), n);
|
||||||
printf (dngettext ("toto", "foo %d", "bar %d", n), n);
|
printf (dngettext ("toto", "foo %d", "bar %d", n), n);
|
||||||
printf (dcngettext ("toto", "foo %d", "bar %d", n, LC_MESSAGES), n);
|
printf (dcngettext ("toto", "foo %d", "bar %d", n, LC_MESSAGES), n);
|
||||||
|
|
||||||
|
printf ("%s", gettext ("between 7% & 19%."));
|
||||||
|
printf ("%s", dgettext ("toto", "between 7% & 19%."));
|
||||||
|
printf ("%s", dcgettext ("toto", "between 7% & 19%.", LC_MESSAGES));
|
||||||
|
|
||||||
|
printf (gettext (some_computed_string ()));
|
||||||
|
printf (dgettext ("toto", some_computed_string ()));
|
||||||
|
printf (dcgettext ("toto", some_computed_string (), LC_MESSAGES));
|
||||||
}
|
}
|
||||||
=======================================================================
|
=======================================================================
|
||||||
$CC -Wformat=2 -S foo.c
|
$CC -Wall -Wformat=2 -S foo.c
|
||||||
|
$CC -Wall -Wformat=2 -S -x c++ foo.c
|
||||||
*/
|
*/
|
||||||
# if defined __GNUC__ && !defined __clang__ && !defined __cplusplus
|
# if (defined __GNUC__ || defined __clang__) && !defined __cplusplus
|
||||||
|
# if __GNUC__ + (__GNUC_MINOR__ >= 2) > 4 || defined __clang__
|
||||||
|
# define _LIBGETTEXT_INLINE __always_inline__, __gnu_inline__
|
||||||
|
# else
|
||||||
|
# define _LIBGETTEXT_INLINE __always_inline__
|
||||||
|
# endif
|
||||||
/* The return type 'const char *' serves the purpose of producing warnings
|
/* The return type 'const char *' serves the purpose of producing warnings
|
||||||
for invalid uses of the value returned from these functions. */
|
for invalid uses of the value returned from these functions. */
|
||||||
# if __GNUC__ >= 9
|
# if defined __GNUC__ && __GNUC__ >= 9 && !defined __clang__
|
||||||
# pragma GCC diagnostic push
|
# pragma GCC diagnostic push
|
||||||
# pragma GCC diagnostic ignored "-Wbuiltin-declaration-mismatch"
|
# pragma GCC diagnostic ignored "-Wbuiltin-declaration-mismatch"
|
||||||
# endif
|
# endif
|
||||||
# if __GNUC__ + (__GNUC_MINOR__ >= 2) > 4
|
__attribute__ ((_LIBGETTEXT_INLINE, __format_arg__ (1)))
|
||||||
__attribute__ ((__always_inline__, __gnu_inline__))
|
|
||||||
# else
|
|
||||||
__attribute__ ((__always_inline__))
|
|
||||||
# endif
|
|
||||||
extern inline
|
extern inline
|
||||||
# if !defined(__sun)
|
# if !defined(__sun)
|
||||||
const
|
const
|
||||||
|
|
@ -112,13 +126,13 @@ const
|
||||||
char *
|
char *
|
||||||
gettext (const char *msgid)
|
gettext (const char *msgid)
|
||||||
{
|
{
|
||||||
return msgid;
|
return
|
||||||
}
|
# ifdef __sun
|
||||||
# if __GNUC__ + (__GNUC_MINOR__ >= 2) > 4
|
(char *)
|
||||||
__attribute__ ((__always_inline__, __gnu_inline__))
|
|
||||||
# else
|
|
||||||
__attribute__ ((__always_inline__))
|
|
||||||
# endif
|
# endif
|
||||||
|
msgid;
|
||||||
|
}
|
||||||
|
__attribute__ ((_LIBGETTEXT_INLINE, __format_arg__ (2)))
|
||||||
extern inline
|
extern inline
|
||||||
# if !defined(__sun)
|
# if !defined(__sun)
|
||||||
const
|
const
|
||||||
|
|
@ -127,13 +141,13 @@ char *
|
||||||
dgettext (const char *domain, const char *msgid)
|
dgettext (const char *domain, const char *msgid)
|
||||||
{
|
{
|
||||||
(void) domain;
|
(void) domain;
|
||||||
return msgid;
|
return
|
||||||
}
|
# ifdef __sun
|
||||||
# if __GNUC__ + (__GNUC_MINOR__ >= 2) > 4
|
(char *)
|
||||||
__attribute__ ((__always_inline__, __gnu_inline__))
|
|
||||||
# else
|
|
||||||
__attribute__ ((__always_inline__))
|
|
||||||
# endif
|
# endif
|
||||||
|
msgid;
|
||||||
|
}
|
||||||
|
__attribute__ ((_LIBGETTEXT_INLINE, __format_arg__ (2)))
|
||||||
extern inline
|
extern inline
|
||||||
# if !defined(__sun)
|
# if !defined(__sun)
|
||||||
const
|
const
|
||||||
|
|
@ -143,85 +157,178 @@ dcgettext (const char *domain, const char *msgid, int category)
|
||||||
{
|
{
|
||||||
(void) domain;
|
(void) domain;
|
||||||
(void) category;
|
(void) category;
|
||||||
return msgid;
|
return
|
||||||
|
# ifdef __sun
|
||||||
|
(char *)
|
||||||
|
# endif
|
||||||
|
msgid;
|
||||||
}
|
}
|
||||||
# if __GNUC__ >= 9
|
__attribute__ ((_LIBGETTEXT_INLINE, __format_arg__ (1), __format_arg__ (2)))
|
||||||
|
extern inline
|
||||||
|
# if !defined(__sun)
|
||||||
|
const
|
||||||
|
# endif
|
||||||
|
char *
|
||||||
|
ngettext (const char *msgid1, const char *msgid2, unsigned long n)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
# ifdef __sun
|
||||||
|
(char *)
|
||||||
|
# endif
|
||||||
|
(n == 1 ? msgid1 : msgid2);
|
||||||
|
}
|
||||||
|
__attribute__ ((_LIBGETTEXT_INLINE, __format_arg__ (2), __format_arg__ (3)))
|
||||||
|
extern inline
|
||||||
|
# if !defined(__sun)
|
||||||
|
const
|
||||||
|
# endif
|
||||||
|
char *
|
||||||
|
dngettext (const char *domain, const char *msgid1, const char *msgid2, unsigned long n)
|
||||||
|
{
|
||||||
|
(void) domain;
|
||||||
|
return
|
||||||
|
# ifdef __sun
|
||||||
|
(char *)
|
||||||
|
# endif
|
||||||
|
(n == 1 ? msgid1 : msgid2);
|
||||||
|
}
|
||||||
|
__attribute__ ((_LIBGETTEXT_INLINE, __format_arg__ (2), __format_arg__ (3)))
|
||||||
|
extern inline
|
||||||
|
# if !defined(__sun)
|
||||||
|
const
|
||||||
|
# endif
|
||||||
|
char *
|
||||||
|
dcngettext (const char *domain, const char *msgid1, const char *msgid2, unsigned long n, int category)
|
||||||
|
{
|
||||||
|
(void) domain;
|
||||||
|
(void) category;
|
||||||
|
return
|
||||||
|
# ifdef __sun
|
||||||
|
(char *)
|
||||||
|
# endif
|
||||||
|
(n == 1 ? msgid1 : msgid2);
|
||||||
|
}
|
||||||
|
__attribute__ ((_LIBGETTEXT_INLINE))
|
||||||
|
extern inline
|
||||||
|
# if !defined(__sun)
|
||||||
|
const
|
||||||
|
# endif
|
||||||
|
char *
|
||||||
|
textdomain (const char *domainname)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
# ifdef __sun
|
||||||
|
(char *)
|
||||||
|
# endif
|
||||||
|
domainname;
|
||||||
|
}
|
||||||
|
# if defined __GNUC__ && __GNUC__ >= 9 && !defined __clang__
|
||||||
# pragma GCC diagnostic pop
|
# pragma GCC diagnostic pop
|
||||||
# endif
|
# endif
|
||||||
# elif defined __clang__
|
|
||||||
|
# elif (defined __GNUC__ || defined __clang__) && defined __cplusplus
|
||||||
|
|
||||||
|
__attribute__ ((__format_arg__ (1)))
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_gettext (const char *msgid)
|
||||||
|
{
|
||||||
|
return msgid;
|
||||||
|
}
|
||||||
# undef gettext
|
# undef gettext
|
||||||
# define gettext(Msgid) ((const char *) (Msgid))
|
# define gettext _libgettext_gettext
|
||||||
|
__attribute__ ((__format_arg__ (2)))
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_dgettext (const char *domain, const char *msgid)
|
||||||
|
{
|
||||||
|
(void) domain;
|
||||||
|
return msgid;
|
||||||
|
}
|
||||||
# undef dgettext
|
# undef dgettext
|
||||||
# define dgettext(Domainname, Msgid) gettext (Msgid)
|
# define dgettext _libgettext_dgettext
|
||||||
|
__attribute__ ((__format_arg__ (2)))
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_dcgettext (const char *domain, const char *msgid, int category)
|
||||||
|
{
|
||||||
|
(void) domain;
|
||||||
|
(void) category;
|
||||||
|
return msgid;
|
||||||
|
}
|
||||||
# undef dcgettext
|
# undef dcgettext
|
||||||
# define dcgettext(Domainname, Msgid, Category) dgettext (Domainname, Msgid)
|
# define dcgettext _libgettext_dcgettext
|
||||||
|
__attribute__ ((__format_arg__ (1), __format_arg__ (2)))
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_ngettext (const char *msgid1, const char *msgid2, unsigned long n)
|
||||||
|
{
|
||||||
|
return (n == 1 ? msgid1 : msgid2);
|
||||||
|
}
|
||||||
|
# undef ngettext
|
||||||
|
# define ngettext _libgettext_ngettext
|
||||||
|
__attribute__ ((__format_arg__ (2), __format_arg__ (3)))
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_dngettext (const char *domain, const char *msgid1, const char *msgid2, unsigned long n)
|
||||||
|
{
|
||||||
|
(void) domain;
|
||||||
|
return (n == 1 ? msgid1 : msgid2);
|
||||||
|
}
|
||||||
|
# undef dngettext
|
||||||
|
# define dngettext _libgettext_dngettext
|
||||||
|
__attribute__ ((__format_arg__ (2), __format_arg__ (3)))
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_dcngettext (const char *domain, const char *msgid1, const char *msgid2, unsigned long n, int category)
|
||||||
|
{
|
||||||
|
(void) domain;
|
||||||
|
(void) category;
|
||||||
|
return (n == 1 ? msgid1 : msgid2);
|
||||||
|
}
|
||||||
|
# undef dcngettext
|
||||||
|
# define dcngettext _libgettext_dcngettext
|
||||||
|
static inline const char *
|
||||||
|
_libgettext_textdomain (const char *domainname)
|
||||||
|
{
|
||||||
|
return domainname;
|
||||||
|
}
|
||||||
|
# undef textdomain
|
||||||
|
# define textdomain _libgettext_textdomain
|
||||||
|
|
||||||
# else
|
# else
|
||||||
/* The conversions to 'const char *' via compound literals serve the purpose
|
|
||||||
of producing warnings for invalid uses of the value returned from these
|
|
||||||
functions and for invalid-typed Msgid arguments. */
|
|
||||||
# undef gettext
|
# undef gettext
|
||||||
# define gettext(Msgid) ((const char *) {(Msgid)})
|
# define gettext(Msgid) _LIBGETTEXT_FUNCAST (const char *, Msgid)
|
||||||
/* The conversions via compound literals serve the purpose of producing warnings
|
|
||||||
for invalid-typed arguments. */
|
|
||||||
# undef dgettext
|
# undef dgettext
|
||||||
# define dgettext(Domainname, Msgid) \
|
# define dgettext(Domainname, Msgid) \
|
||||||
((void) (const char *) {(Domainname)}, gettext (Msgid))
|
((void) _LIBGETTEXT_FUNCAST (const char *, Domainname), gettext (Msgid))
|
||||||
# undef dcgettext
|
# undef dcgettext
|
||||||
# define dcgettext(Domainname, Msgid, Category) \
|
# define dcgettext(Domainname, Msgid, Category) \
|
||||||
((void) (int) {(Category)}, dgettext (Domainname, Msgid))
|
((void) _LIBGETTEXT_FUNCAST (int, Category), \
|
||||||
# endif
|
dgettext (Domainname, Msgid))
|
||||||
|
|
||||||
# if (defined __GNUC__ && defined __cplusplus) || defined __clang__
|
|
||||||
# undef ngettext
|
|
||||||
# define ngettext(Msgid1, Msgid2, N) \
|
|
||||||
((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
|
|
||||||
# undef dngettext
|
|
||||||
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
|
||||||
ngettext (Msgid1, Msgid2, N)
|
|
||||||
# undef dcngettext
|
|
||||||
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
|
||||||
dngettext (Domainname, Msgid1, Msgid2, N)
|
|
||||||
# elif defined __GNUC__ && !defined __cplusplus
|
|
||||||
/* Silence -Wuseless-cast warnings. */
|
|
||||||
# if __GNUC__ >= 14
|
|
||||||
# pragma GCC diagnostic ignored "-Wuseless-cast"
|
|
||||||
# endif
|
|
||||||
# undef ngettext
|
|
||||||
# define ngettext(Msgid1, Msgid2, N) \
|
|
||||||
((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
|
|
||||||
# undef dngettext
|
|
||||||
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
|
||||||
((void) (const char *) (Domainname), ngettext (Msgid1, Msgid2, N))
|
|
||||||
# undef dcngettext
|
|
||||||
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
|
||||||
((void) (int) (Category), dngettext (Domainname, Msgid1, Msgid2, N))
|
|
||||||
# else
|
|
||||||
/* The conversions to 'const char *' via compound literals serve the purpose
|
|
||||||
of producing warnings for invalid uses of the value returned from these
|
|
||||||
functions and for invalid-typed Msgid1 and Msgid2 arguments. */
|
|
||||||
# undef ngettext
|
# undef ngettext
|
||||||
# define ngettext(Msgid1, Msgid2, N) \
|
# define ngettext(Msgid1, Msgid2, N) \
|
||||||
((N) == 1 \
|
((N) == 1 \
|
||||||
? ((void) (Msgid2), (const char *) {(Msgid1)}) \
|
? ((void) _LIBGETTEXT_FUNCAST (const char *, Msgid2), \
|
||||||
: ((void) (Msgid1), (const char *) {(Msgid2)}))
|
_LIBGETTEXT_FUNCAST (const char *, Msgid1)) \
|
||||||
/* The conversions via compound literals serve the purpose of producing warnings
|
: ((void) _LIBGETTEXT_FUNCAST (const char *, Msgid1), \
|
||||||
for invalid-typed arguments. */
|
_LIBGETTEXT_FUNCAST (const char *, Msgid2)))
|
||||||
# undef dngettext
|
# undef dngettext
|
||||||
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
||||||
((void) (const char *) {(Domainname)}, ngettext (Msgid1, Msgid2, N))
|
((void) _LIBGETTEXT_FUNCAST (const char *, Domainname), \
|
||||||
|
ngettext (Msgid1, Msgid2, N))
|
||||||
# undef dcngettext
|
# undef dcngettext
|
||||||
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
||||||
((void) (int) {(Category)}, dngettext (Domainname, Msgid1, Msgid2, N))
|
((void) _LIBGETTEXT_FUNCAST (int, Category), \
|
||||||
|
dngettext (Domainname, Msgid1, Msgid2, N))
|
||||||
|
# undef textdomain
|
||||||
|
# define textdomain(Domainname) _LIBGETTEXT_FUNCAST (const char *, Domainname)
|
||||||
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# undef textdomain
|
|
||||||
# define textdomain(Domainname) ((const char *) {(Domainname)})
|
|
||||||
# undef bindtextdomain
|
# undef bindtextdomain
|
||||||
# define bindtextdomain(Domainname, Dirname) \
|
# define bindtextdomain(Domainname, Dirname) \
|
||||||
((void) (const char *) {(Domainname)}, (const char *) {(Dirname)})
|
((void) _LIBGETTEXT_FUNCAST (const char *, Domainname), \
|
||||||
|
_LIBGETTEXT_FUNCAST (const char *, Dirname))
|
||||||
# undef bind_textdomain_codeset
|
# undef bind_textdomain_codeset
|
||||||
# define bind_textdomain_codeset(Domainname, Codeset) \
|
# define bind_textdomain_codeset(Domainname, Codeset) \
|
||||||
((void) (const char *) {(Domainname)}, (const char *) {(Codeset)})
|
((void) _LIBGETTEXT_FUNCAST (const char *, Domainname), \
|
||||||
|
_LIBGETTEXT_FUNCAST (const char *, Codeset))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2004,7 +2004,7 @@ ifeq (,$(OMIT_GNULIB_MODULE_eloop-threshold))
|
||||||
ifneq (,$(gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION))
|
ifneq (,$(gl_GNULIB_ENABLED_925677f0343de64b89a9f0c790b4104c_CONDITION))
|
||||||
|
|
||||||
endif
|
endif
|
||||||
EXTRA_DIST += eloop-threshold.h
|
EXTRA_DIST += min-eloop-threshold.h
|
||||||
|
|
||||||
endif
|
endif
|
||||||
## end gnulib module eloop-threshold
|
## end gnulib module eloop-threshold
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ __memrchr (void const *s, int c_in, size_t n)
|
||||||
performance. On 64-bit hardware, unsigned long is generally 64
|
performance. On 64-bit hardware, unsigned long is generally 64
|
||||||
bits already. Change this typedef to experiment with
|
bits already. Change this typedef to experiment with
|
||||||
performance. */
|
performance. */
|
||||||
typedef unsigned long int longword;
|
typedef unsigned long int longword _GL_ATTRIBUTE_MAY_ALIAS;
|
||||||
|
|
||||||
unsigned reg_char c = (unsigned char) c_in;
|
unsigned reg_char c = (unsigned char) c_in;
|
||||||
|
|
||||||
|
|
|
||||||
42
lib/min-eloop-threshold.h
Normal file
42
lib/min-eloop-threshold.h
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* Minimum threshold at which to diagnose ELOOP. Generic version.
|
||||||
|
Copyright (C) 2012-2026 Free Software Foundation, Inc.
|
||||||
|
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 Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 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
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, see
|
||||||
|
<https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _MIN_ELOOP_THRESHOLD_H
|
||||||
|
#define _MIN_ELOOP_THRESHOLD_H 1
|
||||||
|
|
||||||
|
/* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic
|
||||||
|
links that can be reliably traversed in the resolution of a
|
||||||
|
pathname in the absence of a loop." This makes it a minimum that
|
||||||
|
we should certainly accept. But it leaves open the possibility
|
||||||
|
that more might sometimes work--just not "reliably".
|
||||||
|
|
||||||
|
For example, Linux implements a complex policy whereby there is a
|
||||||
|
small limit on the number of direct symlink traversals (a symlink
|
||||||
|
to a symlink to a symlink), but larger limit on the total number of
|
||||||
|
symlink traversals overall. Hence the SYMLOOP_MAX number should be
|
||||||
|
the small one, but the limit library functions enforce on users
|
||||||
|
should be the larger one.
|
||||||
|
|
||||||
|
This constant should be large enough that it never rules out a file
|
||||||
|
name and directory tree that the underlying system (i.e. calls to 'open'
|
||||||
|
et al) would resolve successfully. It should be small enough that
|
||||||
|
actual loops are detected without a huge number of iterations. */
|
||||||
|
|
||||||
|
#define MIN_ELOOP_THRESHOLD 40
|
||||||
|
|
||||||
|
#endif
|
||||||
12
lib/nproc.c
12
lib/nproc.c
|
|
@ -437,12 +437,14 @@ get_cgroup2_cpu_quota (void)
|
||||||
is not enabled for that part of the hierarchy. */
|
is not enabled for that part of the hierarchy. */
|
||||||
|
|
||||||
char cpu_max_file[PATH_MAX];
|
char cpu_max_file[PATH_MAX];
|
||||||
snprintf (cpu_max_file, sizeof (cpu_max_file),
|
int n = snprintf (cpu_max_file, sizeof (cpu_max_file),
|
||||||
"%s%s/cpu.max", mount, cgroup);
|
"%s%s/cpu.max", mount, cgroup);
|
||||||
|
|
||||||
if ((fp = fopen (cpu_max_file, "r"))
|
if (n < 0 || sizeof cpu_max_file <= n)
|
||||||
&& getline ("a_str, "a_size, fp) != -1
|
fp = NULL;
|
||||||
&& strncmp (quota_str, "max", 3) != 0)
|
else if ((fp = fopen (cpu_max_file, "r"))
|
||||||
|
&& getline ("a_str, "a_size, fp) != -1
|
||||||
|
&& strncmp (quota_str, "max", 3) != 0)
|
||||||
{
|
{
|
||||||
long quota, period;
|
long quota, period;
|
||||||
if (sscanf (quota_str, "%ld %ld", "a, &period) == 2 && period)
|
if (sscanf (quota_str, "%ld %ld", "a, &period) == 2 && period)
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,10 @@
|
||||||
# include <limits.h>
|
# include <limits.h>
|
||||||
# include <stdint.h>
|
# include <stdint.h>
|
||||||
|
|
||||||
|
# ifndef __has_feature
|
||||||
|
# define __has_feature(a) 0
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
/* Find the first occurrence of C in S. */
|
/* Find the first occurrence of C in S. */
|
||||||
void *
|
void *
|
||||||
|
|
@ -41,13 +45,21 @@ rawmemchr (const void *s, int c_in)
|
||||||
- __builtin_cheri_offset_get (s)));
|
- __builtin_cheri_offset_get (s)));
|
||||||
# else
|
# else
|
||||||
|
|
||||||
|
unsigned char c = c_in;
|
||||||
|
|
||||||
|
/* Examine the memory an aligned longword at a time, when possible.
|
||||||
|
Doing so can go past the end of a lesser-aligned object,
|
||||||
|
which is harmless on most platforms but violates the rules of C,
|
||||||
|
so suppress this optimization on platforms where it is known to be
|
||||||
|
dangerous, namely, those using address sanitization. */
|
||||||
|
|
||||||
|
# if ! (defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer))
|
||||||
|
|
||||||
/* You can change this typedef to experiment with performance. */
|
/* You can change this typedef to experiment with performance. */
|
||||||
typedef uintptr_t longword;
|
typedef uintptr_t longword _GL_ATTRIBUTE_MAY_ALIAS;
|
||||||
/* Verify that the longword type lacks padding bits. */
|
/* Verify that the longword type lacks padding bits. */
|
||||||
static_assert (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (uintptr_t));
|
static_assert (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (uintptr_t));
|
||||||
|
|
||||||
unsigned char c = c_in;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
const unsigned char *char_ptr;
|
const unsigned char *char_ptr;
|
||||||
|
|
||||||
|
|
@ -123,12 +135,6 @@ rawmemchr (const void *s, int c_in)
|
||||||
longword_ptr++;
|
longword_ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = longword_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
const unsigned char *char_ptr = s;
|
|
||||||
|
|
||||||
/* At this point, we know that one of the sizeof (longword) bytes
|
/* At this point, we know that one of the sizeof (longword) bytes
|
||||||
starting at char_ptr is == c. If we knew endianness, we
|
starting at char_ptr is == c. If we knew endianness, we
|
||||||
could determine the first such byte without any further memory
|
could determine the first such byte without any further memory
|
||||||
|
|
@ -136,6 +142,12 @@ rawmemchr (const void *s, int c_in)
|
||||||
iteration. However, the following simple and portable code does
|
iteration. However, the following simple and portable code does
|
||||||
not attempt this potential optimization. */
|
not attempt this potential optimization. */
|
||||||
|
|
||||||
|
s = longword_ptr;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
{
|
||||||
|
const unsigned char *char_ptr = s;
|
||||||
while (*char_ptr != c)
|
while (*char_ptr != c)
|
||||||
char_ptr++;
|
char_ptr++;
|
||||||
return (void *) char_ptr;
|
return (void *) char_ptr;
|
||||||
|
|
|
||||||
|
|
@ -246,7 +246,7 @@ struct utmpx32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Definition of WTMP_FILE.
|
/* Definition of WTMP_FILE.
|
||||||
On glibc systems, UTMP_FILE is "/var/log/wtmp". */
|
On glibc systems, WTMP_FILE is "/var/log/wtmp". */
|
||||||
#if !defined WTMP_FILE && defined _PATH_WTMP
|
#if !defined WTMP_FILE && defined _PATH_WTMP
|
||||||
# define WTMP_FILE _PATH_WTMP
|
# define WTMP_FILE _PATH_WTMP
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -258,6 +258,12 @@ struct utmpx32
|
||||||
# define WTMP_FILE "/etc/wtmp"
|
# define WTMP_FILE "/etc/wtmp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Definition of WTMPDB_FILE.
|
||||||
|
On Debian and Devuan systems, WTMPDB_FILE is "/var/log/wtmp.db". */
|
||||||
|
#ifndef WTMPDB_FILE
|
||||||
|
# define WTMPDB_FILE "/var/log/wtmp.db"
|
||||||
|
#endif
|
||||||
|
|
||||||
/* In early versions of Android, <utmp.h> did not define BOOT_TIME or
|
/* In early versions of Android, <utmp.h> did not define BOOT_TIME or
|
||||||
LOGIN_PROCESS, only USER_PROCESS. We need to use the value that is defined
|
LOGIN_PROCESS, only USER_PROCESS. We need to use the value that is defined
|
||||||
in newer versions of Android. */
|
in newer versions of Android. */
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,6 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdckdint.h>
|
#include <stdckdint.h>
|
||||||
|
|
||||||
#ifdef __CHERI_PURE_CAPABILITY__
|
|
||||||
# include <cheri.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _GL_INLINE_RPL_REALLOC
|
#ifndef _GL_INLINE_RPL_REALLOC
|
||||||
|
|
||||||
/* Change the size of an allocated block of memory P to N bytes,
|
/* Change the size of an allocated block of memory P to N bytes,
|
||||||
|
|
@ -99,11 +95,6 @@ rpl_realloc (void *p, size_t n)
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# ifdef __CHERI_PURE_CAPABILITY__
|
|
||||||
if (result != NULL)
|
|
||||||
result = cheri_bounds_set (result, n);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -465,8 +465,8 @@ build_wcs_upper_buffer (re_string_t *pstr)
|
||||||
pstr->offsets[byte_idx] = src_idx;
|
pstr->offsets[byte_idx] = src_idx;
|
||||||
++src_idx;
|
++src_idx;
|
||||||
|
|
||||||
/* And also cast it to wide char. */
|
/* And also convert it to wide char. */
|
||||||
pstr->wcs[byte_idx++] = (wchar_t) ch;
|
pstr->wcs[byte_idx++] = ch;
|
||||||
if (__glibc_unlikely (mbclen == (size_t) -1))
|
if (__glibc_unlikely (mbclen == (size_t) -1))
|
||||||
pstr->cur_state = prev_st;
|
pstr->cur_state = prev_st;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1641,11 +1641,18 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
|
||||||
subwidth = -1;
|
subwidth = -1;
|
||||||
subformat_width:
|
subformat_width:
|
||||||
{
|
{
|
||||||
|
/* Restrict flag propagation to %F and %Y so that we get glibc
|
||||||
|
consistent behavior for %D with glibc specific '_' and '-' flags.
|
||||||
|
Note the year is at the start of %F so OK to propagate there. */
|
||||||
|
enum pad_style subpad =
|
||||||
|
(format_char == L_('F') || format_char == L_('Y')
|
||||||
|
? pad : yr_spec);
|
||||||
|
|
||||||
retval_t len =
|
retval_t len =
|
||||||
__strftime_internal (NULL, STRFTIME_ARG ((size_t) -1)
|
__strftime_internal (NULL, STRFTIME_ARG ((size_t) -1)
|
||||||
subfmt, tp,
|
subfmt, tp,
|
||||||
CAL_ARGS (cal, caldate)
|
CAL_ARGS (cal, caldate)
|
||||||
to_uppcase, pad, subwidth,
|
to_uppcase, subpad, subwidth,
|
||||||
tzset_called
|
tzset_called
|
||||||
extra_args LOCALE_ARG);
|
extra_args LOCALE_ARG);
|
||||||
if (FAILURE < 0 && len < 0)
|
if (FAILURE < 0 && len < 0)
|
||||||
|
|
@ -1654,7 +1661,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
|
||||||
STRFTIME_ARG (maxsize - i)
|
STRFTIME_ARG (maxsize - i)
|
||||||
subfmt, tp,
|
subfmt, tp,
|
||||||
CAL_ARGS (cal, caldate)
|
CAL_ARGS (cal, caldate)
|
||||||
to_uppcase, pad, subwidth,
|
to_uppcase, subpad, subwidth,
|
||||||
tzset_called
|
tzset_called
|
||||||
extra_args LOCALE_ARG));
|
extra_args LOCALE_ARG));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -312,7 +312,8 @@ _GL_EXTERN_C void *memset_explicit (void *__s, int __c, size_t __n)
|
||||||
#if @GNULIB_EXPLICIT_BZERO@
|
#if @GNULIB_EXPLICIT_BZERO@
|
||||||
# if ! @HAVE_EXPLICIT_BZERO@
|
# if ! @HAVE_EXPLICIT_BZERO@
|
||||||
_GL_FUNCDECL_SYS (explicit_bzero, void,
|
_GL_FUNCDECL_SYS (explicit_bzero, void,
|
||||||
(void *__dest, size_t __n), _GL_ARG_NONNULL ((1)));
|
(void *__dest, size_t __n),
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2));
|
||||||
# endif
|
# endif
|
||||||
_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
|
_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
|
||||||
_GL_CXXALIASWARN (explicit_bzero);
|
_GL_CXXALIASWARN (explicit_bzero);
|
||||||
|
|
@ -482,7 +483,8 @@ _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
|
||||||
_GL_FUNCDECL_RPL (mempcpy, void *,
|
_GL_FUNCDECL_RPL (mempcpy, void *,
|
||||||
(void *restrict __dest, void const *restrict __src,
|
(void *restrict __dest, void const *restrict __src,
|
||||||
size_t __n),
|
size_t __n),
|
||||||
_GL_ARG_NONNULL ((1, 2)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3));
|
||||||
_GL_CXXALIAS_RPL (mempcpy, void *,
|
_GL_CXXALIAS_RPL (mempcpy, void *,
|
||||||
(void *restrict __dest, void const *restrict __src,
|
(void *restrict __dest, void const *restrict __src,
|
||||||
size_t __n));
|
size_t __n));
|
||||||
|
|
@ -491,7 +493,8 @@ _GL_CXXALIAS_RPL (mempcpy, void *,
|
||||||
_GL_FUNCDECL_SYS (mempcpy, void *,
|
_GL_FUNCDECL_SYS (mempcpy, void *,
|
||||||
(void *restrict __dest, void const *restrict __src,
|
(void *restrict __dest, void const *restrict __src,
|
||||||
size_t __n),
|
size_t __n),
|
||||||
_GL_ARG_NONNULL ((1, 2)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3));
|
||||||
# endif
|
# endif
|
||||||
_GL_CXXALIAS_SYS (mempcpy, void *,
|
_GL_CXXALIAS_SYS (mempcpy, void *,
|
||||||
(void *restrict __dest, void const *restrict __src,
|
(void *restrict __dest, void const *restrict __src,
|
||||||
|
|
@ -645,7 +648,8 @@ _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
|
||||||
_GL_FUNCDECL_RPL (stpncpy, char *,
|
_GL_FUNCDECL_RPL (stpncpy, char *,
|
||||||
(char *restrict __dst, char const *restrict __src,
|
(char *restrict __dst, char const *restrict __src,
|
||||||
size_t __n),
|
size_t __n),
|
||||||
_GL_ARG_NONNULL ((1, 2)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3));
|
||||||
_GL_CXXALIAS_RPL (stpncpy, char *,
|
_GL_CXXALIAS_RPL (stpncpy, char *,
|
||||||
(char *restrict __dst, char const *restrict __src,
|
(char *restrict __dst, char const *restrict __src,
|
||||||
size_t __n));
|
size_t __n));
|
||||||
|
|
@ -654,7 +658,8 @@ _GL_CXXALIAS_RPL (stpncpy, char *,
|
||||||
_GL_FUNCDECL_SYS (stpncpy, char *,
|
_GL_FUNCDECL_SYS (stpncpy, char *,
|
||||||
(char *restrict __dst, char const *restrict __src,
|
(char *restrict __dst, char const *restrict __src,
|
||||||
size_t __n),
|
size_t __n),
|
||||||
_GL_ARG_NONNULL ((1, 2)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3));
|
||||||
# endif
|
# endif
|
||||||
_GL_CXXALIAS_SYS (stpncpy, char *,
|
_GL_CXXALIAS_SYS (stpncpy, char *,
|
||||||
(char *restrict __dst, char const *restrict __src,
|
(char *restrict __dst, char const *restrict __src,
|
||||||
|
|
@ -861,7 +866,8 @@ _GL_WARN_ON_USE (strncat, "strncat is unportable - "
|
||||||
_GL_FUNCDECL_RPL (strncpy, char *,
|
_GL_FUNCDECL_RPL (strncpy, char *,
|
||||||
(char *restrict __dst, char const *restrict __src,
|
(char *restrict __dst, char const *restrict __src,
|
||||||
size_t __n),
|
size_t __n),
|
||||||
_GL_ARG_NONNULL ((1, 2)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3));
|
||||||
_GL_CXXALIAS_RPL (strncpy, char *,
|
_GL_CXXALIAS_RPL (strncpy, char *,
|
||||||
(char *restrict __dst, char const *restrict __src,
|
(char *restrict __dst, char const *restrict __src,
|
||||||
size_t __n));
|
size_t __n));
|
||||||
|
|
@ -946,13 +952,13 @@ _GL_WARN_ON_USE (strndup, "strndup is unportable - "
|
||||||
# endif
|
# endif
|
||||||
_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen),
|
_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen),
|
||||||
_GL_ATTRIBUTE_PURE
|
_GL_ATTRIBUTE_PURE
|
||||||
_GL_ARG_NONNULL ((1)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2));
|
||||||
_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen));
|
_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen));
|
||||||
# else
|
# else
|
||||||
# if ! @HAVE_DECL_STRNLEN@
|
# if ! @HAVE_DECL_STRNLEN@
|
||||||
_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen),
|
_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen),
|
||||||
_GL_ATTRIBUTE_PURE
|
_GL_ATTRIBUTE_PURE
|
||||||
_GL_ARG_NONNULL ((1)));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2));
|
||||||
# endif
|
# endif
|
||||||
_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen));
|
_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen));
|
||||||
# endif
|
# endif
|
||||||
|
|
@ -1352,7 +1358,7 @@ _GL_CXXALIASWARN (mbslen);
|
||||||
at STRING and ending at STRING + LEN. */
|
at STRING and ending at STRING + LEN. */
|
||||||
_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
|
_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
|
||||||
_GL_ATTRIBUTE_PURE
|
_GL_ATTRIBUTE_PURE
|
||||||
_GL_ARG_NONNULL ((1));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_MBSCHR@
|
#if @GNULIB_MBSCHR@
|
||||||
|
|
@ -1460,7 +1466,8 @@ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
|
||||||
But beware that N is not a byte count but a character count! */
|
But beware that N is not a byte count but a character count! */
|
||||||
_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
|
_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
|
||||||
_GL_ATTRIBUTE_PURE
|
_GL_ATTRIBUTE_PURE
|
||||||
_GL_ARG_NONNULL ((1, 2));
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (1, 3)
|
||||||
|
_GL_ATTRIBUTE_NONNULL_IF_NONZERO (2, 3);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if @GNULIB_MBSPCASECMP@
|
#if @GNULIB_MBSPCASECMP@
|
||||||
|
|
|
||||||
|
|
@ -45,9 +45,11 @@
|
||||||
# define _@GUARD_PREFIX@_TIME_H
|
# define _@GUARD_PREFIX@_TIME_H
|
||||||
|
|
||||||
/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r,
|
/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r,
|
||||||
localtime_r only if <unistd.h> or <pthread.h> has been included before. */
|
localtime_r only if <unistd.h> or <pthread.h> has been included before
|
||||||
|
or if _POSIX_THREAD_SAFE_FUNCTIONS is defined. */
|
||||||
# if defined __MINGW32__
|
# if defined __MINGW32__
|
||||||
# include <unistd.h>
|
# undef _POSIX_THREAD_SAFE_FUNCTIONS
|
||||||
|
# define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# @INCLUDE_NEXT@ @NEXT_TIME_H@
|
# @INCLUDE_NEXT@ @NEXT_TIME_H@
|
||||||
|
|
|
||||||
18
lib/verify.h
18
lib/verify.h
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC)
|
/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC)
|
||||||
works as per C11. This is supported by GCC 4.6.0+ and by clang 4+.
|
works as per C11. This is supported by GCC 4.6.0+ and by clang 4+.
|
||||||
|
Check for __clang_major__ >= 5 instead of >= 4 because clang on Mac OS 10.7.5
|
||||||
|
sets __clang_major__ to 4 even though it was derived from clang 3.2.
|
||||||
|
|
||||||
Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as
|
Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as
|
||||||
per C23. This is supported by GCC 9.1+.
|
per C23. This is supported by GCC 9.1+.
|
||||||
|
|
@ -44,10 +46,22 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* <sys/cdefs.h> in glibc may define _Static_assert with two arguments if the
|
||||||
|
compiler is in C89 or C99 mode. This matters especially with Clang:
|
||||||
|
(1) glibc < 2.34, before the commit c8ba52ab3350 ("misc: Sync cdefs.h
|
||||||
|
with gnulib"), doesn't check for __clang_major__ >= 4.
|
||||||
|
(2) The above condition for _GL_HAVE__STATIC_ASSERT checks for
|
||||||
|
__clang_major__ >= 5, so it's not in sync with glibc. */
|
||||||
|
#if defined __GLIBC__ \
|
||||||
|
&& !defined __cplusplus && __STDC_VERSION__ < 201112
|
||||||
|
# undef _Static_assert
|
||||||
|
#endif
|
||||||
|
|
||||||
/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
|
/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
|
||||||
system headers, defines a conflicting _Static_assert that is no
|
system headers, defines a conflicting _Static_assert that is no
|
||||||
better than ours; override it. */
|
better than ours; override it unless Gnulib's replacement <assert.h>
|
||||||
#ifndef _GL_HAVE__STATIC_ASSERT
|
(included from config.h) already overrode it. */
|
||||||
|
#if ! (defined _GL_HAVE__STATIC_ASSERT || defined _GL_STATIC_ASSERT)
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
# undef _Static_assert
|
# undef _Static_assert
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
13
m4/getopt.m4
13
m4/getopt.m4
|
|
@ -1,5 +1,5 @@
|
||||||
# getopt.m4
|
# getopt.m4
|
||||||
# serial 52
|
# serial 53
|
||||||
dnl Copyright (C) 2002-2006, 2008-2026 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002-2006, 2008-2026 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -72,7 +72,8 @@ AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
|
||||||
AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
|
AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl Test whether the function getopt_long is available.
|
dnl Test whether the functions getopt_long and getopt_long_only are both
|
||||||
|
dnl available.
|
||||||
if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
|
if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
|
||||||
AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
|
AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
|
||||||
fi
|
fi
|
||||||
|
|
@ -238,7 +239,8 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
nocrash_init();
|
nocrash_init();
|
||||||
|
|
||||||
/* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
|
/* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
|
||||||
and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, Solaris 10. */
|
and fails on Mac OS X 10.5, NetBSD 10.0, AIX 5.2, HP-UX 11,
|
||||||
|
Solaris 10. */
|
||||||
{
|
{
|
||||||
static char conftest[] = "conftest";
|
static char conftest[] = "conftest";
|
||||||
static char plus[] = "-+";
|
static char plus[] = "-+";
|
||||||
|
|
@ -267,7 +269,8 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
else if (optind != 2)
|
else if (optind != 2)
|
||||||
result |= 8;
|
result |= 8;
|
||||||
}
|
}
|
||||||
/* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
|
/* This code succeeds on glibc 2.8
|
||||||
|
and fails on NetBSD 10.0, Cygwin 1.7.0. */
|
||||||
{
|
{
|
||||||
static char program[] = "program";
|
static char program[] = "program";
|
||||||
static char foo[] = "foo";
|
static char foo[] = "foo";
|
||||||
|
|
@ -279,7 +282,7 @@ dnl is ambiguous with environment values that contain newlines.
|
||||||
else if (getopt (3, argv, "-p") != 'p')
|
else if (getopt (3, argv, "-p") != 'p')
|
||||||
result |= 16;
|
result |= 16;
|
||||||
}
|
}
|
||||||
/* This code fails on glibc 2.11. */
|
/* This code fails on glibc 2.11, NetBSD 10.0. */
|
||||||
{
|
{
|
||||||
static char program[] = "program";
|
static char program[] = "program";
|
||||||
static char b[] = "-b";
|
static char b[] = "-b";
|
||||||
|
|
|
||||||
|
|
@ -296,11 +296,9 @@ AC_DEFUN([gl_COMMON_BODY], [
|
||||||
we cannot omit the storage-class specifier. Therefore, the following rule
|
we cannot omit the storage-class specifier. Therefore, the following rule
|
||||||
applies:
|
applies:
|
||||||
* The macros
|
* The macros
|
||||||
_GL_ATTRIBUTE_CONST
|
|
||||||
_GL_ATTRIBUTE_DEPRECATED
|
_GL_ATTRIBUTE_DEPRECATED
|
||||||
_GL_ATTRIBUTE_MAYBE_UNUSED
|
_GL_ATTRIBUTE_MAYBE_UNUSED
|
||||||
_GL_ATTRIBUTE_NODISCARD
|
_GL_ATTRIBUTE_NODISCARD
|
||||||
_GL_ATTRIBUTE_PURE
|
|
||||||
_GL_ATTRIBUTE_REPRODUCIBLE
|
_GL_ATTRIBUTE_REPRODUCIBLE
|
||||||
_GL_ATTRIBUTE_UNSEQUENCED
|
_GL_ATTRIBUTE_UNSEQUENCED
|
||||||
which may expand to bracket syntax [[...]], must come first, before the
|
which may expand to bracket syntax [[...]], must come first, before the
|
||||||
|
|
|
||||||
|
|
@ -1344,7 +1344,6 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/dtotimespec.c
|
lib/dtotimespec.c
|
||||||
lib/dup2.c
|
lib/dup2.c
|
||||||
lib/dynarray.h
|
lib/dynarray.h
|
||||||
lib/eloop-threshold.h
|
|
||||||
lib/endian.c
|
lib/endian.c
|
||||||
lib/endian.in.h
|
lib/endian.in.h
|
||||||
lib/errno.in.h
|
lib/errno.in.h
|
||||||
|
|
@ -1430,6 +1429,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||||
lib/mempcpy.c
|
lib/mempcpy.c
|
||||||
lib/memrchr.c
|
lib/memrchr.c
|
||||||
lib/memset_explicit.c
|
lib/memset_explicit.c
|
||||||
|
lib/min-eloop-threshold.h
|
||||||
lib/mini-gmp-gnulib.c
|
lib/mini-gmp-gnulib.c
|
||||||
lib/mini-gmp.c
|
lib/mini-gmp.c
|
||||||
lib/mini-gmp.h
|
lib/mini-gmp.h
|
||||||
|
|
|
||||||
31
m4/malloc.m4
31
m4/malloc.m4
|
|
@ -1,5 +1,5 @@
|
||||||
# malloc.m4
|
# malloc.m4
|
||||||
# serial 46
|
# serial 47
|
||||||
dnl Copyright (C) 2007, 2009-2026 Free Software Foundation, Inc.
|
dnl Copyright (C) 2007, 2009-2026 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -104,6 +104,7 @@ AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF],
|
||||||
# Set gl_cv_func_malloc_gnu.
|
# Set gl_cv_func_malloc_gnu.
|
||||||
AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF],
|
AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF],
|
||||||
[
|
[
|
||||||
|
gl_MUSL_LIBC
|
||||||
AC_CACHE_CHECK([whether malloc is ptrdiff_t safe],
|
AC_CACHE_CHECK([whether malloc is ptrdiff_t safe],
|
||||||
[gl_cv_malloc_ptrdiff],
|
[gl_cv_malloc_ptrdiff],
|
||||||
[AC_COMPILE_IFELSE(
|
[AC_COMPILE_IFELSE(
|
||||||
|
|
@ -118,10 +119,30 @@ AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF],
|
||||||
is no problem. */
|
is no problem. */
|
||||||
#define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX)
|
#define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX)
|
||||||
|
|
||||||
/* glibc 2.30 and later malloc refuses to exceed ptrdiff_t
|
/* Whether address sanitization is in use.
|
||||||
bounds even on 32-bit platforms. We don't know which
|
clang 4 through 21 signal this only with __has_feature. */
|
||||||
non-glibc systems are safe. */
|
#if !defined __SANITIZE_ADDRESS__ && defined __has_feature
|
||||||
#define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__))
|
# if __has_feature (address_sanitizer)
|
||||||
|
# define __SANITIZE_ADDRESS__ 1
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __OpenBSD__ || __NetBSD__
|
||||||
|
#include <sys/param.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Many platforms are safe: malloc stays in ptrdiff_t bounds.
|
||||||
|
However, with address sanitization, gcc (up to at least
|
||||||
|
gcc 16.1) and clang (up to at least clang 22) interpose
|
||||||
|
a malloc that can go over a 32-bit ptrdiff_t limit. See:
|
||||||
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126436
|
||||||
|
https://github.com/llvm/llvm-project/issues/212288
|
||||||
|
If we don't know a platform is safe, assume it's unsafe. */
|
||||||
|
#define KNOWN_SAFE \
|
||||||
|
(((2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) || MUSL_LIBC \
|
||||||
|
|| 11 <= __FreeBSD__ || 800000000 <= __NetBSD_Version__ \
|
||||||
|
|| 201411 <= OpenBSD || defined _WIN32) \
|
||||||
|
&& !__SANITIZE_ADDRESS__)
|
||||||
|
|
||||||
#if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE
|
#if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# readutmp.m4
|
# readutmp.m4
|
||||||
# serial 32
|
# serial 33
|
||||||
dnl Copyright (C) 2002-2026 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002-2026 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
|
|
@ -9,11 +9,13 @@ dnl This file is offered as-is, without any warranty.
|
||||||
AC_DEFUN([gl_READUTMP],
|
AC_DEFUN([gl_READUTMP],
|
||||||
[
|
[
|
||||||
AC_REQUIRE([gl_SYSTEMD_CHOICE])
|
AC_REQUIRE([gl_SYSTEMD_CHOICE])
|
||||||
|
AC_REQUIRE([gl_WTMPDB_CHOICE])
|
||||||
|
|
||||||
dnl Set READUTMP_LIB to '-lsystemd' or '', depending on whether use of
|
dnl Set READUTMP_LIB to '-lsystemd' or '-lwtmpdb' or '', depending on whether
|
||||||
dnl systemd APIs is possible and desired (only the systemd login API, here).
|
dnl use of systemd APIs is possible and desired (only the systemd login API,
|
||||||
|
dnl here) and whether use of wtmpdb APIs is possible and desired.
|
||||||
dnl AC_LIB_LINKFLAGS_BODY would be overkill here, since few people install
|
dnl AC_LIB_LINKFLAGS_BODY would be overkill here, since few people install
|
||||||
dnl libsystemd in non-system directories.
|
dnl libsystemd or libwtmpdb in non-system directories.
|
||||||
READUTMP_LIB=
|
READUTMP_LIB=
|
||||||
if test "$SYSTEMD_CHOICE" = yes; then
|
if test "$SYSTEMD_CHOICE" = yes; then
|
||||||
AC_CHECK_HEADER([systemd/sd-login.h])
|
AC_CHECK_HEADER([systemd/sd-login.h])
|
||||||
|
|
@ -42,6 +44,14 @@ AC_DEFUN([gl_READUTMP],
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
if test "$WTMPDB_CHOICE" = yes; then
|
||||||
|
AC_CHECK_HEADER([wtmpdb.h])
|
||||||
|
if test $ac_cv_header_wtmpdb_h = yes; then
|
||||||
|
AC_DEFINE([READUTMP_USE_WTMPDB], [1],
|
||||||
|
[Define if the readutmp module should use the wtmpdb API.])
|
||||||
|
READUTMP_LIB=$READUTMP_LIB${READUTMP_LIB:+ }'-lwtmpdb'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
AC_SUBST([READUTMP_LIB])
|
AC_SUBST([READUTMP_LIB])
|
||||||
|
|
||||||
gl_PREREQ_READUTMP_H
|
gl_PREREQ_READUTMP_H
|
||||||
|
|
|
||||||
|
|
@ -453,7 +453,7 @@ ptrdiff_t
|
||||||
image_bitmap_pixmap (struct frame *f, ptrdiff_t id)
|
image_bitmap_pixmap (struct frame *f, ptrdiff_t id)
|
||||||
{
|
{
|
||||||
/* HAVE_NTGUI needs the explicit cast here. */
|
/* HAVE_NTGUI needs the explicit cast here. */
|
||||||
return (ptrdiff_t) FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap;
|
return FRAME_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -5566,7 +5566,7 @@ canvas_free_unused (void)
|
||||||
static void
|
static void
|
||||||
canvas_apply_data (struct canvas *c, struct image_keyword *fmt)
|
canvas_apply_data (struct canvas *c, struct image_keyword *fmt)
|
||||||
{
|
{
|
||||||
ptrdiff_t expected_size = (ptrdiff_t) c->width * c->height;
|
ptrdiff_t expected_size = (ptrdiff_t) {c->width} * c->height;
|
||||||
|
|
||||||
Lisp_Object data = fmt[CANVAS_DATA].value;
|
Lisp_Object data = fmt[CANVAS_DATA].value;
|
||||||
Lisp_Object file = fmt[CANVAS_FILE].value;
|
Lisp_Object file = fmt[CANVAS_FILE].value;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue