<?xml version="1.0" encoding="utf-8"?>
<!--RSS generated by Flaimo.com RSS Builder [2026-10-16 14:58:47]-->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"><channel><docs>https://austingroupbugs.net/</docs><link>https://austingroupbugs.net/</link><description><![CDATA[Austin Group Issue Tracker - Issues]]></description><title>Austin Group Issue Tracker - Issues</title><image><title>Austin Group Issue Tracker - Issues</title><url>https://austingroupbugs.net/images/AG_HEADER.png</url><link>https://austingroupbugs.net/</link><description><![CDATA[Austin Group Issue Tracker - Issues]]></description></image><language>en</language><category>All Projects</category><ttl>10</ttl><dc:language>en</dc:language><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><item><title>0001999: Session timeouts too short</title><author></author><link>https://austingroupbugs.net/view.php?id=1999</link><description><![CDATA[I just spent an hour or two filling in an issue report (a long one)&lt;br /&gt;
only for when I submitted it to be told there was an invalid security&lt;br /&gt;
token, either I had submitted twice (no) or the session had timed&lt;br /&gt;
out (possible, given it had taken a LONG time to get all the details&lt;br /&gt;
page numbers, line numbers, ... inserted properly. And to decide&lt;br /&gt;
what exactly I needed to report.&lt;br /&gt;
&lt;br /&gt;
It told me to press the back button on my browser. I did. All the&lt;br /&gt;
text I had entered was gone (in previous interfaces that didn't happen,&lt;br /&gt;
I could create a new report, and cut and paste everything from the old&lt;br /&gt;
to the new, which would take much less time, and no timeout would&lt;br /&gt;
occur - it has been ages since my last interaction with this, I had forgotten&lt;br /&gt;
this issue.]]></description><category>Aardvark 2025</category><pubDate>Thu, 15 Oct 2026 21:14:22 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1999</guid><comments>https://austingroupbugs.net/view.php?id=1999#bugnotes</comments></item><item><title>0002000: XSH 3/strfmon misses info and needs attention</title><author></author><link>https://austingroupbugs.net/view.php?id=2000</link><description><![CDATA[&lt;p&gt;&lt;br /&gt;
In the sequel, I shall refer solely to &lt;i&gt;strfmon&lt;/i&gt;(), but everything applies equally to &lt;i&gt;strfmon_l&lt;/i&gt;().&lt;br /&gt;
The mechanism by which the locale data is made available is not material to anything in this defect report.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
The following defects are ordered in decreasing order of importance, as I see them, except with some related issues grouped adjacent to one another.&lt;br /&gt;
All defects (except probably the last) should be corrected however.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;br /&gt;
When issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt; was fixed (the changes made as the result of that I generally agree with) one part of the original issue report seems to have been forgotten.&lt;br /&gt;
It (&lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt;) said:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
However, without a distinction between positive and negative values, and without a visible decimal separator, this behaviour is useless, or even dangerous &lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The issue with positive/negative was (mostly) handled, the issue when there is no visible decimal separator was not, and needs to be.&lt;br /&gt;
See issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt; for an example illustrating the problem.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
Following on from the previous, it is also unclear, even with the text as amended by issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt;,  what should be done when a locale defines non-empty strings to be used as the signs, but specifies the same string for both cases.&lt;br /&gt;
This is effectively the same problem as issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt; dealt with, being unable to determine whether a value is positive, or negative, just in a different way.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
Relevant to this, and what makes it different from the empty string case, is that the result might differ when the position of the sign string is different for positive and negative values.&lt;br /&gt;
That is, it is not necessarily simply invalid to use the same non-empty string for both the positive and negative signs.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
It is not always clear in the specification when &lt;i&gt;character&lt;/i&gt; means &lt;b&gt;character&lt;/b&gt; and when it means &lt;b&gt;byte&lt;/b&gt; or perhaps &quot;character from a restricted character set&quot;, or something different entirely.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
That the specification generally means &lt;b&gt;character&lt;/b&gt; is clear from line 69523:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The format is a character string, beginning and ending in its initial state, if any, ...&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
which would make no sense if &lt;i&gt;character&lt;/i&gt; was being used as a synonym for the &lt;b&gt;C&lt;/b&gt; programming language &lt;b&gt;char&lt;/b&gt; data type, or simply a byte, or even a character from the Portable Character Set from the standard (XBD 6.1).&lt;br /&gt;
Those kinds of characters have no state, hence no initial state to require.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
This issue crops up in many places, the most obvious is in (line 69540):&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
An '=' followed by a single character &lt;i&gt;f&lt;/i&gt; which is used as the numeric fill character.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
The text (lines 69541-69542) attempts to add some meaning to this:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
In order to work with precision or width counts, the fill character shall be a single byte character; if not, the behavior is undefined.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
But that makes no sense at all.&lt;br /&gt;
To work with the precision and width counts, the fill character needs to occupy one column position in the output.&lt;br /&gt;
That distinction has nothing at all to do with how many bytes are in the representation of the character.&lt;br /&gt;
A single byte character, in some locales, might be zero-width or occupy multiple columns in the output, even in a constant width font.&lt;br /&gt;
Obvious examples are the &lt;tab&gt; character, and ASCII control characters.&lt;br /&gt;
A &lt;newline&gt; or &lt;carriage-return&gt; would have different, but related, issues.&lt;br /&gt;
It is also unclear why the behaviour should be &lt;b&gt;undefined&lt;/b&gt; should the application not give a suitable character as the fill character value.&lt;br /&gt;
That is a truly machiovellian punishment.&lt;br /&gt;
Would it not be better to simply make it clear than in such cases the intended alignment might not be able to be achieved?&lt;br /&gt;
That is, the implementation should just use whatever character is specified as &lt;i&gt;f&lt;/i&gt; when needed as the fill character, and if that character is not suitable for the purpose, the output will look odd, instead of nice.&lt;br /&gt;
No calling &lt;i&gt;abort&lt;/i&gt;(), or removing all of the user's files, which &quot;undefined behaviour&quot; would permit.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
A similar problem can be found at line 69577:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
A decimal digit string &lt;i&gt;w&lt;/i&gt; specifying a minimum field width in bytes&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
which also makes little sense, if one assumes as the specification seems to imply, at a minimum, that the objective is to be able to align output from multiple calls to &lt;i&gt;strfmon&lt;/i&gt;().&lt;br /&gt;
What matters is the appearance of the final output, not how many bytes of encoded characters are needed to achieve that result.&lt;br /&gt;
The number of bytes is, or should, only be relevant when determining whether the result fits within the &lt;i&gt;maxsize&lt;/i&gt; number of bytes available in the output buffer.&lt;br /&gt;
Everything else should be using &lt;b&gt;character&lt;/b&gt;s, possibly constrained in some cases to be printing or graphic characters, and perhaps sometimes constrained by the widths of the characters concerned.&lt;br /&gt;
This needs to be clear in the specification, with no mention of &lt;b&gt;bytes&lt;/b&gt; in any of the relevant places.&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The same problem arises with everything else inserted into the resulting output string, including the &lt;i&gt;mon_decimal_point&lt;/i&gt; and the &lt;mon_thousands_sep&gt; strings.&lt;br /&gt;
Lines 69592-69594 do explain the idea:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
To ensure alignment, any characters appearing before or after the number in the formatted output such as currency or sign symbols are padded as necessary with &lt;space&gt; characters to make their positive and negative formats an equal length.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
though that text does give rise to the immediately following defect.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
It should also be made clear what other constraints, if any, must be met for the output to be able to be nicely aligned.&lt;br /&gt;
The use of a monospace (constant width) font to display the result is an obvious one, without that achieving alignment requires much more complex mechanisms that simply counting characters, which is all that is available here.&lt;br /&gt;
But is it expected that all the values intended to be able to be aligned have neen formatted using the same locale, or is it intended that output from different locales be able to be intermixed, and remain aligned?&lt;br /&gt;
The answer to that question constrains what constraints should be placed upon what is permitted in locales for the &lt;b&gt;mon_decimal_point&lt;/b&gt; (I have a fake locale, for testing purposes, which uses $'\u3002' as that character, and the font I use for my terminal sessions renders that character in 2 columns).&lt;br /&gt;
Is &lt;i&gt;strfmon&lt;/i&gt;() expected to work with such a value?&lt;br /&gt;
It does, even to aligning (approximately) as intended, as the alighnment is primarily for the value to the left of the radix, which is unaffected by this.&lt;br /&gt;
But something similar might be used as the &lt;b&gt;mon_thousands_sep&lt;/b&gt;.&lt;br /&gt;
Further, different locales might have different &lt;b&gt;mon_grouping&lt;/b&gt; settings.&lt;br /&gt;
My fake locale uses &quot;2;3;2;3;2&quot; which is going to result in a different number of separators being inserted in some values than the more common &quot;3&quot;.&lt;br /&gt;
As one call to &lt;i&gt;strfmon&lt;/i&gt; has no way to communicate decisions to another, nor to predict what locale might be in use when the next call is made, it might seem necessary to constrain the alignment goal to apply only as long as the same locale is used for all relevant &lt;i&gt;strfmon&lt;/i&gt; calls.&lt;br /&gt;
But that might also be too strict, perhaps as long as the locales used all use the same &lt;b&gt;mon_grouping&lt;/b&gt;, and use as their &lt;b&gt;mon_decimal_point&lt;/b&gt; and &lt;b&gt;mon_thousands_sep&lt;/b&gt; strings which occupy the same number of columns as the equivalent setting in all other locales used in a sequence intended to align correctlty, that would be enough?&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
Did no-one ever consider any of these questions?&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The text at lines 69592-69594:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
To ensure alignment, any characters appearing before or after the number in the&lt;br /&gt;
formatted output such as currency or sign symbols are padded as necessary with&lt;br /&gt;
&lt;space&gt; characters to make their positive and negative formats an equal length.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
concentrate entirely upon making the positive and negative output forms of equal length, but the text at lines 69582-69584:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
This option can be used to keep the formatted output from multiple calls to the strfmon( ) function aligned in the same columns.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
makes it clear that the aim that is implied by lines 69592-69594 is not sufficient to meet the expectations of the &lt;i&gt;strfmon&lt;/i&gt; specification, and that more precision is required to meet the overall objective.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
That is, if for positive numbers, the sign follows the value, and for negative nnumbers the sign precedes the value, then, to keep the numeric parts of a positive and a negative value aligned, both of them must allocate space in the resulting&lt;br /&gt;
string for the possible negative sign before the value, and the possible positive sign following the value (when positive signs are being included), so that either of them might be used to occupy the sign value.&lt;br /&gt;
What's more, that is what implementations I have seen actually do.&lt;br /&gt;
Simply having the positive and negative formats being of equal length is not suffficient.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
It is also not stated anywhere, but clearly is intended (I hope), that the expected alignment is only achieved if the same format string is used for all the applicable calls to &lt;i&gt;strfmon&lt;/i&gt;().&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
A corollary to the previous two points, is that it should be made explicit that aligned values can only be expected to remain aligned when displayed or printed, if they are rendered in a constant width font, or at least one in which all characters are represented in a non-negative integer multiple of a fixed column width.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The description of &quot;grouping characters&quot; (a term for which incidentally I can find no definition in the standard, though it is obvious that in this context it means the &lt;b&gt;mon_thousands_sep&lt;/b&gt; characters inserted to perform the grouping function of monetary output values, which is a defined operation) and how they apply to the &lt;b&gt;Left Precision&lt;/b&gt; given in lines 69589-69590 is one of the least useful specifications I think I have ever seen.&lt;br /&gt;
It states (lines 69589-69590):&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
If grouping has not been suppressed with the '^' flag, and it is defined for the current locale, grouping separators are inserted before the fill characters (if any) are added.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
The pre-conditions are simple enough, but I would interpret the action as meaning that each &quot;grouping separator&quot; (another undefined term) inserted replaces one (or perhaps more) of the fill characters, which then fill in any remaining unused positions as specified in the previous paragraph (lines 69581-69588).&lt;br /&gt;
The subsequent sentence (line 69591), which ends the paragraph, about the inapplicability of grouping to fill characters, even if they are digits, is clear enough as it stands.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
But as illustrated by the examples (see lines 69640-69642 (or 69643-69645 or 69646-69648) in comparison with lines 69649-69651 which, apart from the use of a non-space fill character in the alternatives of the former, which is immaterial, show the same example, except the former has grouping enabled, and the latter with it suppressed), and from observing what is done by actual implementations, that is not what is intended at all.&lt;br /&gt;
Rather, the value given by the &lt;b&gt;Left Precision&lt;/b&gt; &quot;&lt;i&gt;n&lt;/i&gt;&quot; value, is to be increased by the maximum number of &quot;grouping separators&quot; which would be needed if a value to be formatted generates &lt;i&gt;n&lt;/i&gt; (as specified) digits before the radix character (decimal-point) if any.&lt;br /&gt;
Then the value is formatted, and the number of &quot;grouping separators&quot; required for the actual value are inserted, and finally the increased value of &lt;i&gt;n&lt;/i&gt; is used to fill any remaining unused positions with fill characters.&lt;br /&gt;
That is, the use of grouping can increase the number of fill characters to be used for a particular &lt;i&gt;value&lt;/i&gt;, and the actual left precision width from what is in the conversion specification, but never decrease it, compared to when grouping is not used.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
How, an implementer, or an application writer, is intended to determine the intended behaviour from the written specification bamboozles me.&lt;br /&gt;
It needs rewriting.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
Note also, that though the &lt;i&gt;linux&lt;/i&gt; manual page for this function attempts to make this clear, it is not a lot better:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Next, there may be a left precision of the form &quot;#&quot; followed by a decimal digit string.&lt;br /&gt;
If the number of digits left of the radix character is smaller than this, the representation is padded on the left with the numeric fill character.&lt;br /&gt;
Grouping characters are not counted in this field width.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
That would make it seem as if the number of grouping characters inserted, or which might be inserted, has no effect on the padding inserted by the left precision, which is not correct either.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The &lt;b&gt;ERRORS&lt;/b&gt; section at lines 69628-69630 states the functions shall fail if:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;[EINVAL]&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The '+' flag was included in a conversion specification and the locale's positive_sign and negative_sign values would both be returned by localeconv( ) as empty strings.&lt;br /&gt;
&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
The &lt;b&gt;APPLICATION USAGE&lt;/b&gt; section, at lines 69672-69676:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The '+' flag should be used with care, because if the locale's positive_sign and negative_sign values are both empty strings, there is no way to distinguish negative from positive values with signs and therefore strfmon( ) fails. If the application has a preference for signs but parentheses are acceptable, it should try strfmon( ) with the '+' flag first, and if it fails with [EINVAL] then repeat the call without the '+' flag.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
and the &lt;b&gt;RATIONALE&lt;/b&gt; at lines 69678-69680:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The [EINVAL] error condition applies only when the '+' flag is used because this flag indicates that the application requires the use of signs, and if there are no signs in the locale data then this requirement cannot be satisfied.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
together expand upon this intended unique use.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
While implementations are generally permitted to add error numbers, and to add meanings to errors the standard specifies, as specified by XSH 2.3 at lines 17831-17833:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Implementations may support additional errors not included in this list, may generate errors included in this list under circumstances other than those described here, or may contain extensions or limitations that prevent some errors from occurring.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
that same section goes on to place a restriction upon this implementation freedom, at lines 17839-17841 (and following for more restrictions not relevant here):&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
Implementations may generate error numbers listed here under circumstances other than those described, if and only if all those error conditions can always be treated identically to the error conditions as described in this volume of POSIX.1-2024.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
Taken together all of this implies, to me anyway, that the implementation may not generate &lt;b&gt;EINVAL&lt;/b&gt; for any error other than the one listed, as an application would then be unable to ascertain that the problem was the '+' in the format string, and offer a different format for the locale in question in that case.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
The problem all this causes for the implementation, is just how it should deal with applications which fail to meet their &lt;b&gt;shall&lt;/b&gt; obligations, for example the one at line 69529:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The application shall ensure that a conversion specification consists of the following sequence:&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
I appreciate that when an application fails to comply with its obligations, implementation behaviour is unspecified, or perhaps even undefined, and is certainly beyond the scope of the standard.&lt;br /&gt;
This however does not help the implementer, who must do something in such cases.&lt;br /&gt;
Further as it seems above, the implementer is prohibited from using the obvious &lt;b&gt;EINVAL&lt;/b&gt; error code in such a situation.&lt;br /&gt;
Further, it does not help the application writer either, if some implementations simply ignore such issues and continue formatting as best they can, others return -1 and a seemingly random error code, and yet others simply call XSH 3 section 3/abort (pages 577-558).&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
At the very least, the specification should offer some guidance in this situation, and probably rewrite the application usage and rationale, so as to no longer constrain &lt;b&gt;EINVAL&lt;/b&gt; such that it cannot be used by the implementation for other issues.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The standard offers no guidance on what should be done, should some of the data expected to be provided by the locale, is not defined there.&lt;br /&gt;
The &lt;b&gt;POSIX&lt;/b&gt; locale is one which does not supply any.&lt;br /&gt;
Particularly after the resolution of issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt;, some of this has&lt;br /&gt;
been dealt with, but not all.&lt;br /&gt;
This includes the lack of a (non-empty) &lt;b&gt;mon_decimal_point&lt;/b&gt;.&lt;br /&gt;
There is also no discussion on what should be done if any of the specified strings are non-empty, but do not contain anything which produces a visible representation in the output.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
There should be.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
Returning to &lt;b&gt;APPLICATION USAGE&lt;/b&gt; section, at lines 69672-69676:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The '+' flag should be used with care, because if the locale's positive_sign and negative_sign values are both empty strings, there is no way to distinguish negative from positive values with signs and therefore strfmon( ) fails. If the application has a preference for signs but parentheses are acceptable, it should try strfmon( ) with the '+' flag first, and if it fails with [EINVAL] then repeat the call without the '+' flag.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
That suggests that simply omitting the '+' flag, will cause &lt;i&gt;stfrmon&lt;/i&gt;() to use parentheses as the indicator for negative values.&lt;br /&gt;
That is not what the post-issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt; standard causes to happen.&lt;br /&gt;
Instead, as stated on lines 69567-69571 when considering the case that&lt;br /&gt;
neither of the '+' nor '(' flags are included in the format:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
If the style cannot be determined from these locale values because a value that needs to be used would be returned by localeconv() as {CHAR_MAX}, the style used shall be that specified for the '+' flag; if this would cause strfmon( ) to fail because the locale's positive_sign and negative_sign values would both be returned by localeconv( ) as empty strings, strfmon( ) shall behave as if the negative_sign value was the string &quot;-&quot;.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
In other words, unless the format specifies the '(' flag (in which case this section is never reached, and its &lt;b&gt;positive_sign&lt;/b&gt; and &lt;b&gt;negative_sign&lt;/b&gt; and sign placement values are all ignored), if the '+' flag is not given, and the locale's default is not to use parentheses to indicate negative values, then the resulting output would use the empty &lt;b&gt;positive_sign&lt;/b&gt; if the &lt;i&gt;value&lt;/i&gt; is non-negative, and use &quot;-&quot; instead of an empty &lt;b&gt;negative_sign&lt;/b&gt; if the &lt;i&gt;value&lt;/i&gt; is negative.&lt;br /&gt;
&lt;p&gt;&lt;/p&gt;&lt;br /&gt;
This &lt;b&gt;APPLICATION USAGE&lt;/b&gt; text needs to be rewritten to take that into account.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
At times the standard is too specific in what it specifies.&lt;br /&gt;
For example, at lines 69557-69558:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
If a sign's placement cannot be determined from these locale values because a value that needs to be used would be returned by &lt;i&gt;localeconv&lt;/i&gt;() as 0 or {CHAR_MAX}, ...&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Why is it important what the issue is with the value?&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
The range of values for the sign position are 0 to 4, with 0 not being useful for the situation being discussed in those lines, or {CHAR_MAX} to mean no value is supplied.&lt;br /&gt;
But what if the locale data specifies a value of 7?&lt;br /&gt;
That has no (currently) defined meaning, and hence is not useful for determining the placement of the sign, but it is not &quot;returned by &lt;i&gt;localeconv&lt;/i&gt;() as 0 or {CHAR_MAX}&quot;, so what is the implementation to do?&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
This kind of over specification should be removed, it is not important why the sign placement cannot be determined from the locale values, just that it cannot.&lt;br /&gt;
Note that this is not just a fanciful, perhaps even imagined, impossible case.&lt;br /&gt;
A later version of the standard may add extra possible values to any of the fields for which a set of numeric designated choices are provided, and an older implenentation (an instance of &lt;i&gt;stfrmon&lt;/i&gt; compiled into an existing applicaion for example) may encounter a previously invalid value, and needs to know how to handle that case.&lt;br /&gt;
This is not an instance where &quot;behaviour is unspecified&quot; (or even &quot;undefined&quot;) is an acceptable outcome.&lt;br /&gt;
The standard must be permitted to evolve without invalidating existing applications.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The &lt;b&gt;EXAMPLES&lt;/b&gt; section, page 2132 (lines 69632-69670) assumes the existence of &quot;a locale for the US&quot; and, to make sense of the example output, what that locale must contain.&lt;br /&gt;
I can find no justification in the standard to assume that such a locale exists anywhere.&lt;br /&gt;
I certainly believe that most readers would understand &lt;b&gt;USD&lt;/b&gt; as the international currency symbol for the United States of America, and &lt;b&gt;$&lt;/b&gt; as its national currency symbol, and probably that its &lt;b&gt;frac_digits&lt;/b&gt; and &lt;b&gt;int_frac_digits&lt;/b&gt; would usually both be two.&lt;br /&gt;
I am not sure however that using a &quot;&lt;b&gt;-&lt;/b&gt;&quot; to indicate negative values, and nothing for positive ones, rather than enclosing negative values in parentheses, or use of &lt;b&gt;CR&lt;/b&gt; for positive and &lt;b&gt;DB&lt;/b&gt; for negative, is how such a locale would be defined.&lt;br /&gt;
Nor would I necessarily expect the sign, if used, to precede the currency symbol, rather than follow it.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
If some fictional locale is to be used for examples, regardless of whether that locale might be an actual locale on some system used by one or more of the actual writers of the text, then at least as much of it as is needed to understand the examples should be presented in the specification.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
Further, there should certainly be examples given where the &lt;b&gt;POSIX&lt;/b&gt; (aka &lt;b&gt;C&lt;/b&gt;) locale, the only one the standard actually specifies, is used.&lt;br /&gt;
Had there been, some of the problems this specification had before issue &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1199&quot;&gt;0001199&lt;/a&gt; rectified them, and some of the problems it still has, might have been recognised and corrected much sooner than this.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The &lt;b&gt;DESCRIPTION&lt;/b&gt; at lines 69524-69526 contains:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;b&gt;...&lt;/b&gt;, and conversion specifications, each of which shall result in the fetching of zero or more arguments which are converted and formatted.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&quot;Zero or more&quot; ?&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
The zero case is obviously for the &lt;b&gt;%%&lt;/b&gt; format conversion specification (which I personally would not treat as a conversion specification at all, but as an escaping mechanism, but that isn't the point here).&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
But &quot;or more&quot; ??&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
One is certainly more than zero, and one (exactly) is what every other format conversion requires.&lt;br /&gt;
Why not just say &quot;zero or one&quot;, and not leave the reader wondering when more than one might be required?&lt;br /&gt;
Of course, if there is some hidden intent to allow indirect specification of the field width, the left precision, or the right precision, or some or all of those, in the way that the printf family of functions permit, which would perhaps be a useful addition, though not supported by any implementation of which I am aware, then the &quot;or more&quot; would be justified.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
In the same paragraph as the previous defect (lines 69524-69526) the text elided at the beginning of the text quoted previously is:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
The format is a character string, beginning and ending in its initial state, if any, that contains two types of objects: &lt;i&gt;plain characters&lt;/i&gt;, which are simply copied to the output stream, &lt;b&gt;...&lt;/b&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
but there is no definition anywhere of what is a &lt;i&gt;plain character&lt;/i&gt;.&lt;br /&gt;
The intent is obvious, but standards should not rely upon readers being able to deduce from what appears to be obvious, they should be explicit.&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;li&gt;&lt;br /&gt;
&lt;p&gt;&lt;br /&gt;
The locale specification (XBD 7) and the specification of &lt;i&gt;strfmon&lt;/i&gt; seem to lack the ability to format currency amounts in the (old style to be sure) formats previously used in the UK, and other countries including AU and NZ.&lt;br /&gt;
That is, the Lsd format, as in £10/- or £9-19-11 and similar constructions.&lt;br /&gt;
There may be other formats in use, or previously in use, which are similarly neglected.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
There is also no way to specify that other characters, rather than '(' and ')' be used to surround values, further it should be possible to have different characters surrounding positive and negative values - the &lt;b&gt;positive_sign&lt;/b&gt; and &lt;b&gt;negative_sign&lt;/b&gt; settings cannot be used for this, as only one of them is ever used for any particular value, and whichever that is is only ever used once.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
These issues should be fixed, but this is not the place to do it.&lt;br /&gt;
Thus I will not offer potential solutions - the issue is here just so it is clear that the problems are known, and cannot at some future time be dismissed with &quot;We didn't ever consider those possibilities.&quot;&lt;br /&gt;
&lt;/p&gt;&lt;br /&gt;
&lt;/li&gt;&lt;/ol&gt;]]></description><category>System Interfaces</category><pubDate>Mon, 12 Oct 2026 16:17:05 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=2000</guid><comments>https://austingroupbugs.net/view.php?id=2000#bugnotes</comments></item><item><title>0001984: Ambiguous requirements for command -v on printing absolute pathnames</title><author></author><link>https://austingroupbugs.net/view.php?id=1984</link><description><![CDATA[The requirements for command -v read:&lt;br /&gt;
&lt;br /&gt;
- Executable utilities, regular built-in utilities, command_names including a &lt;slash&gt; character, and any implementation-provided functions that are found using the PATH variable (as described in 2.9.1.4 Command Search and Execution), shall be written as absolute pathnames.&lt;br /&gt;
&lt;br /&gt;
This is ambiguous as to whether &quot;that are found using the PATH variable&quot; applies to &quot;Executable utilities, regular built-in utilities, command_names including a &lt;slash&gt; character, and any implementation-provided functions&quot;, or only to &quot;any implementation-provided functions&quot;.&lt;br /&gt;
&lt;br /&gt;
Given that &quot;command_names including a &lt;slash&gt; character&quot; are never looked up using the PATH variable (as pointed out by Herbert Xu on the dash mailing list), the intent must be that &quot;that are found using the PATH variable&quot; applies only to &quot;any implementation-provided functions&quot;, but at least one shell (bash) does not currently write command_names including a &lt;slash&gt; character as absolute pathnames, even in POSIX mode, and in my opinion, the current text of the standard does not say it should.]]></description><category>Shell and Utilities</category><pubDate>Wed, 07 Oct 2026 10:58:16 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1984</guid><comments>https://austingroupbugs.net/view.php?id=1984#bugnotes</comments></item><item><title>0001633: Add memrchr</title><author></author><link>https://austingroupbugs.net/view.php?id=1633</link><description><![CDATA[memrchr is a simple and useful function that is similar to memchr, except it finds the last occurrence of a byte. It is provided by the following implementations already:&lt;br /&gt;
&lt;br /&gt;
* glibc (&lt;a href=&quot;https://www.man7.org/linux/man-pages/man3/memrchr.3.html&quot; rel=&quot;noopener&quot;&gt;https://www.man7.org/linux/man-pages/man3/memrchr.3.html&lt;/a&gt;)&lt;br /&gt;
* musl&lt;br /&gt;
* openbsd (&lt;a href=&quot;https://man.openbsd.org/memrchr.3&quot; rel=&quot;noopener&quot;&gt;https://man.openbsd.org/memrchr.3&lt;/a&gt;)&lt;br /&gt;
* freebsd (&lt;a href=&quot;https://man.freebsd.org/cgi/man.cgi?query=memrchr&amp;manpath=FreeBSD+13.1-RELEASE+and+Ports&quot; rel=&quot;noopener&quot;&gt;https://man.freebsd.org/cgi/man.cgi?query=memrchr&amp;manpath=FreeBSD+13.1-RELEASE+and+Ports&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
(And probably many others).]]></description><category>Base Definitions and Headers</category><pubDate>Mon, 05 Oct 2026 14:42:55 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1633</guid><comments>https://austingroupbugs.net/view.php?id=1633#bugnotes</comments></item><item><title>0001622: Standardize getpeereid function</title><author></author><link>https://austingroupbugs.net/view.php?id=1622</link><description><![CDATA[This function provides a mechanism to get credentials of a peer that&lt;br /&gt;
created/initialized unix socket. Such mechanism is useful for AF_UNIX servers&lt;br /&gt;
and clients that need a reliable way to know each other's credentials to&lt;br /&gt;
implement e.g. accounting or authorization. See also: &lt;a href=&quot;https://cr.yp.to/docs/secureipc.html&quot; rel=&quot;noopener&quot;&gt;https://cr.yp.to/docs/secureipc.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It is quite portable and already implemented at least in QNX, AIX, FreeBSD,&lt;br /&gt;
NetBSD, OpenBSD, Cygwin. Linux and Illumos/Solaris provide similar interfaces,&lt;br /&gt;
though they don't look suitable for inclusion. Linux SO_PEERCRED is incompatible&lt;br /&gt;
with OpenBSD due to a different structure name, whereas Illumos/Solaris&lt;br /&gt;
getpeerucred() is just terrible; it allocates memory and requires a dedicated&lt;br /&gt;
function to free it.&lt;br /&gt;
&lt;br /&gt;
I also evaluated LOCAL_PEERCRED from FreeBSD and LOCAL_PEEREID from NetBSD that&lt;br /&gt;
are used there to power getpeereid(). LOCAL_PEERCRED uses structure which has&lt;br /&gt;
platform-specific type in it, so I immidiately rejected it. As of LOCAL_PEEREID,&lt;br /&gt;
it looks fine, but I afraid if we going to standardize it, it'll cause friction&lt;br /&gt;
in systems that already provide similar(and potentially incompatible)interface in&lt;br /&gt;
getsockopt(). Therefore let's just add getpeereid.]]></description><category>System Interfaces</category><pubDate>Mon, 05 Oct 2026 14:40:56 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1622</guid><comments>https://austingroupbugs.net/view.php?id=1622#bugnotes</comments></item><item><title>0001548: Addition of a POSIX.utf-8 locale (likely as 7.3 "POSIX.utf-8 locale")</title><author></author><link>https://austingroupbugs.net/view.php?id=1548</link><description><![CDATA[Today's modern POSIX systems use Unicode aware locales, almost all realized via the UTF-8 8-bit character set.&lt;br /&gt;
Even though the standard(s) do not offer proper interfaces to deal with this, external libraries (GNU libunicode, ICU) fill this gap in practice.&lt;br /&gt;
(These libraries can also be used with UTF-16 and UTF-32 character sets, the latter i think prefers the 16-bit encoding that is in use in a widely distributed commercial non-POSIX operating system.)&lt;br /&gt;
&lt;br /&gt;
As it stands users are using language/territory specific UTF-8 locales in real-life, like en_US.utf8 or de_DE.utf8.&lt;br /&gt;
Right now there is no UTF-8 aka Unicode-spectrum POSIX locale available.&lt;br /&gt;
&lt;br /&gt;
Some operating systems (OpenBSD) and some libraries (musl LibC) however, and already, &quot;always work with UTF-8 8-bit&quot; Unicode, giving it the name &quot;C.UTF-8&quot; (musl; and as can be seen, the usual naming scheme mess continues).]]></description><category>Base Definitions and Headers</category><pubDate>Fri, 02 Oct 2026 10:18:41 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1548</guid><comments>https://austingroupbugs.net/view.php?id=1548#bugnotes</comments></item><item><title>0001930: Add flock(1) utility to manage locks from shell scripts</title><author></author><link>https://austingroupbugs.net/view.php?id=1930</link><description><![CDATA[I myself make extensive use of this utility in my system management etc shell scripts.&lt;br /&gt;
&lt;br /&gt;
It must be said it is not widely available -- as flock(1).&lt;br /&gt;
Linux has it, NetBSD has it; semantics are somewhat shared&lt;br /&gt;
FreeBSD and DragonFly have lockf(1), which is quite similar, but use lockf(3) (i think).&lt;br /&gt;
Busybox (Linux toolbox) has it, with some minimized interface, currently without -w (wait for lock).&lt;br /&gt;
&lt;br /&gt;
If POSIX could standardize this it would be great, and if it would include F_OFD_SETL locks when doing so, that would be even better!]]></description><category>Shell and Utilities</category><pubDate>Thu, 01 Oct 2026 19:56:10 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1930</guid><comments>https://austingroupbugs.net/view.php?id=1930#bugnotes</comments></item><item><title>0001832: Add preadv() and pwritev()</title><author></author><link>https://austingroupbugs.net/view.php?id=1832</link><description><![CDATA[Many implementations offer preadv() and pwritev() interfaces, which are like&lt;br /&gt;
the existing readv() and writev() APIs, except that they use specified &lt;br /&gt;
positions instead of the current file offsets, just like the existing&lt;br /&gt;
pread() and pwrite() versions of read() and write().&lt;br /&gt;
&lt;br /&gt;
FreeBSD: &lt;br /&gt;
 - &lt;a href=&quot;https://man.freebsd.org/cgi/man.cgi?query=preadv&quot; rel=&quot;noopener&quot;&gt;https://man.freebsd.org/cgi/man.cgi?query=preadv&lt;/a&gt;&lt;br /&gt;
 - &lt;a href=&quot;https://man.freebsd.org/cgi/man.cgi?query=pwritev&quot; rel=&quot;noopener&quot;&gt;https://man.freebsd.org/cgi/man.cgi?query=pwritev&lt;/a&gt;&lt;br /&gt;
illumos: &lt;br /&gt;
 - &lt;a href=&quot;https://illumos.org/man/2/preadv&quot; rel=&quot;noopener&quot;&gt;https://illumos.org/man/2/preadv&lt;/a&gt;&lt;br /&gt;
 - &lt;a href=&quot;https://illumos.org/man/2/pwritev&quot; rel=&quot;noopener&quot;&gt;https://illumos.org/man/2/pwritev&lt;/a&gt;&lt;br /&gt;
Linux (GNU libc):  &lt;br /&gt;
 - &lt;a href=&quot;https://man7.org/linux/man-pages/man2/preadv.2.html&quot; rel=&quot;noopener&quot;&gt;https://man7.org/linux/man-pages/man2/preadv.2.html&lt;/a&gt;&lt;br /&gt;
NetBSD:&lt;br /&gt;
 - &lt;a href=&quot;https://man.netbsd.org/preadv.2&quot; rel=&quot;noopener&quot;&gt;https://man.netbsd.org/preadv.2&lt;/a&gt;&lt;br /&gt;
 - &lt;a href=&quot;https://man.netbsd.org/pwritev.2&quot; rel=&quot;noopener&quot;&gt;https://man.netbsd.org/pwritev.2&lt;/a&gt;&lt;br /&gt;
OpenBSD:&lt;br /&gt;
 - &lt;a href=&quot;https://man.openbsd.org/preadv.2&quot; rel=&quot;noopener&quot;&gt;https://man.openbsd.org/preadv.2&lt;/a&gt;&lt;br /&gt;
 - &lt;a href=&quot;https://man.openbsd.org/pwritev.2&quot; rel=&quot;noopener&quot;&gt;https://man.openbsd.org/pwritev.2&lt;/a&gt;&lt;br /&gt;
Solaris: &lt;br /&gt;
 - (man pages not online yet, just added in 11.4.69 in May 2024)&lt;br /&gt;
&lt;br /&gt;
Known consumers include PostgreSQL and libuv, as discussed in the thread at&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/MengTangmu/status/1729704220368990235&quot; rel=&quot;noopener&quot;&gt;https://twitter.com/MengTangmu/status/1729704220368990235&lt;/a&gt; .]]></description><category>System Interfaces</category><pubDate>Thu, 01 Oct 2026 19:54:16 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1832</guid><comments>https://austingroupbugs.net/view.php?id=1832#bugnotes</comments></item><item><title>0001824: cp: directories and symlinks</title><author></author><link>https://austingroupbugs.net/view.php?id=1824</link><description><![CDATA[I would like to request a clarification on the matter of cp's handling&lt;br /&gt;
of symbolic links in the destination.&lt;br /&gt;
&lt;br /&gt;
To begin with, I find the wording of the final paragraph of the&lt;br /&gt;
rationale (90876-90880) confusing.  It mentions “file types not&lt;br /&gt;
specified by the System Interfaces” and implies that symbolic links&lt;br /&gt;
fall into that category, but I can no indication anywhere else that&lt;br /&gt;
this is the case.  On the contrary, the definition of “file” in §3.139&lt;br /&gt;
on page 51 explicitly includes “symbolic link” in its enumeration of&lt;br /&gt;
file types (1592-1593), before stating that “[o]ther types of files&lt;br /&gt;
may be supported by the implementation” (1593-1594).&lt;br /&gt;
&lt;br /&gt;
If we jump back to the description section, the behavior of cp if a&lt;br /&gt;
source file is a directory and the corresponding destination file&lt;br /&gt;
exists and is a symbolic link is not entirely clear to me.  If you&lt;br /&gt;
believe the final paragraph of the rationale, it is covered by item 2c&lt;br /&gt;
(90638-90639) which says it's implementation-defined.  If you don't,&lt;br /&gt;
it depends on a couple of additional factors.  First, do you consider&lt;br /&gt;
the type of the link or the type of its target?  (I will come back to&lt;br /&gt;
this later.)  If you consider the type of the link, or if you consider&lt;br /&gt;
the type of its target and its target is not a directory, we turn to&lt;br /&gt;
item 2d (90640-90642) which says to emit an error, not descend, and go&lt;br /&gt;
on with the next source file.  If you consider the type of its target&lt;br /&gt;
and its target is a directory, we turn to item 2f (90649-90650) which&lt;br /&gt;
says to copy the contents of the source into the destination.&lt;br /&gt;
&lt;br /&gt;
I cannot find any discussion anywhere in the specification for cp of&lt;br /&gt;
what to do if the target of a symbolic link does not exist, unless the&lt;br /&gt;
second paragraph of item 4c (90697-90698) is intended to cover this&lt;br /&gt;
case (but 4c discusses the case where the source is a symbolic link,&lt;br /&gt;
so it doesn't tell us what to do if the destination exists, is a&lt;br /&gt;
symbolic link, and references a non-existent file).&lt;br /&gt;
&lt;br /&gt;
Now for the matter of whether, if the destination file is a symbolic&lt;br /&gt;
link, we should consider instead the type of its target.  The&lt;br /&gt;
descriptions of the -L and -P options repeatedly use the phrase&lt;br /&gt;
“symbolic links encountered during traversal of a file hierarchy”&lt;br /&gt;
(cf. 90625, 90627, 90712, 90715).  Given that the surrounding text&lt;br /&gt;
mostly refers to the source, it is not clear to me whether this phrase&lt;br /&gt;
only applies to the source, or to both the source and the destination.&lt;br /&gt;
Turning to historical precedent, BSD cp has traditionally followed&lt;br /&gt;
symbolic links in the destination hierarchy while GNU cp appears not&lt;br /&gt;
to.  FreeBSD recently changed its implementation to take the -R, -L,&lt;br /&gt;
and -P options into consideration when checking the destination as&lt;br /&gt;
well, while the GNU cp documentation appears to state quite clearly&lt;br /&gt;
(and, in my opinion, correctly) that these options only apply to the&lt;br /&gt;
source.  I believe that this change was a mistake, and I intend to&lt;br /&gt;
revert it.  However, I cannot make up my mind as to whether the&lt;br /&gt;
historical behavior of BSD cp (always follow symbolic links in the&lt;br /&gt;
destination) is correct.  I can easily conceive of situations where&lt;br /&gt;
you would want cp to do that, but it has been pointed out to me that&lt;br /&gt;
doing so, at least by default, can be considered a security risk.&lt;br /&gt;
&lt;br /&gt;
Note that in the case where the source file is a file and the&lt;br /&gt;
destination exists (item 3a lines 90657-90671), the file type of the&lt;br /&gt;
destination is not taken into account at all.  I am not as concerned&lt;br /&gt;
with this case as I am with the directory case, but it should probably&lt;br /&gt;
be addressed as well.&lt;br /&gt;
&lt;br /&gt;
To summarize:&lt;br /&gt;
&lt;br /&gt;
- The rationale implies that symbolic links are an extension, which I&lt;br /&gt;
  believe to be incorrect.&lt;br /&gt;
&lt;br /&gt;
- It is unclear whether symbolic links in the destination should be&lt;br /&gt;
  followed, and whether the -L and -P options apply, when inspecting&lt;br /&gt;
  destination paths.&lt;br /&gt;
&lt;br /&gt;
- There is historical precedent for answering these questions with&lt;br /&gt;
  “yes” and “no”, respectively.  Recent history suggests the wording&lt;br /&gt;
  is vague enough that implementers are confused on the second point.&lt;br /&gt;
&lt;br /&gt;
- The description section does not adequately discuss how cp should&lt;br /&gt;
  behave if the source is a directory and the destination exists and&lt;br /&gt;
  is a symbolic link.&lt;br /&gt;
&lt;br /&gt;
- The description section does not consider the type of the&lt;br /&gt;
  destination at all in the case where the source is a file and the&lt;br /&gt;
  destination exists.]]></description><category>Shell and Utilities</category><pubDate>Thu, 01 Oct 2026 19:53:37 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1824</guid><comments>https://austingroupbugs.net/view.php?id=1824#bugnotes</comments></item><item><title>0001794: Please add tzalloc/tzfree and localtime_rz, mktime_z interfaces</title><author></author><link>https://austingroupbugs.net/view.php?id=1794</link><description><![CDATA[[I copy a mail from austin-group-l@]&lt;br /&gt;
&lt;br /&gt;
As stated in [1] the localtime() and mktime() series of functions&lt;br /&gt;
have the inherent problem of not being thread-safe regarding&lt;br /&gt;
possible changes to the time zone: in a pure POSIX environment&lt;br /&gt;
changes to TZ always affect global data.&lt;br /&gt;
&lt;br /&gt;
If my memory serves correctly, about a decade ago the NetBSD&lt;br /&gt;
project contacted the IANA TZ maintainer in order to upstream&lt;br /&gt;
a new, truly thread-safe interface that addresses this issue.&lt;br /&gt;
Since some time in 2014 (see [1]) the IANA TZ database, which&lt;br /&gt;
includes the Public Domain aka open source code as is used by many&lt;br /&gt;
projects to implement the time related programming interface,&lt;br /&gt;
includes a new series of functions:&lt;br /&gt;
&lt;br /&gt;
       timezone_t tzalloc(char const *TZ);&lt;br /&gt;
       void tzfree(timezone_t tz);&lt;br /&gt;
&lt;br /&gt;
       struct tm *localtime_rz(timezone_t restrict zone,&lt;br /&gt;
           time_t const *restrict clock,&lt;br /&gt;
           struct tm *restrict result);&lt;br /&gt;
           struct tm *restrict tm);&lt;br /&gt;
       time_t mktime_z(timezone_t restrict zone,&lt;br /&gt;
           struct tm *restrict tm);&lt;br /&gt;
&lt;br /&gt;
  [1] &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1788&quot; rel=&quot;noopener&quot;&gt;https://austingroupbugs.net/view.php?id=1788&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If POSIX would offer this interface, the open source (public&lt;br /&gt;
domain) code and manual of which are available via the IANA TZ,&lt;br /&gt;
truly &quot;thread-safe&quot; time programming becomes possible in POSIX.&lt;br /&gt;
&lt;br /&gt;
This is especially important if no CLOCK_TAI is available.&lt;br /&gt;
For an example, here is what the widely used NTP server chrony&lt;br /&gt;
performs in order to achieve its task:&lt;br /&gt;
&lt;br /&gt;
  tm = gmtime(&amp;when);&lt;br /&gt;
  if (!tm)&lt;br /&gt;
    return tz_leap;&lt;br /&gt;
&lt;br /&gt;
  stm = *tm;&lt;br /&gt;
&lt;br /&gt;
  /* Temporarily switch to the timezone containing leap seconds */&lt;br /&gt;
  tz_env = getenv(&quot;TZ&quot;);&lt;br /&gt;
  if (tz_env) {&lt;br /&gt;
    if (strlen(tz_env) &gt;= sizeof (tz_orig))&lt;br /&gt;
      return tz_leap;&lt;br /&gt;
    strcpy(tz_orig, tz_env);&lt;br /&gt;
  }&lt;br /&gt;
  setenv(&quot;TZ&quot;, leap_tzname, 1);&lt;br /&gt;
  tzset();&lt;br /&gt;
&lt;br /&gt;
  /* Get the TAI-UTC offset, which started at the epoch at 10 seconds */&lt;br /&gt;
  t = mktime(&amp;stm);&lt;br /&gt;
  if (t != -1)&lt;br /&gt;
    tz_tai_offset = t - when + 10;&lt;br /&gt;
&lt;br /&gt;
  /* Set the time to 23:59:60 and see how it overflows in mktime() */&lt;br /&gt;
  stm.tm_sec = 60;&lt;br /&gt;
  stm.tm_min = 59;&lt;br /&gt;
  stm.tm_hour = 23;&lt;br /&gt;
&lt;br /&gt;
  t = mktime(&amp;stm);&lt;br /&gt;
&lt;br /&gt;
  if (tz_env)&lt;br /&gt;
    setenv(&quot;TZ&quot;, tz_orig, 1);&lt;br /&gt;
  else&lt;br /&gt;
    unsetenv(&quot;TZ&quot;);&lt;br /&gt;
  tzset();&lt;br /&gt;
&lt;br /&gt;
  if (t == -1)&lt;br /&gt;
    return tz_leap;&lt;br /&gt;
&lt;br /&gt;
  if (stm.tm_sec == 60)&lt;br /&gt;
    tz_leap = LEAP_InsertSecond;&lt;br /&gt;
  else if (stm.tm_sec == 1)&lt;br /&gt;
    tz_leap = LEAP_DeleteSecond;&lt;br /&gt;
&lt;br /&gt;
  *tai_offset = tz_tai_offset;&lt;br /&gt;
&lt;br /&gt;
This is especially important if no CLOCK_TAI is available.&lt;br /&gt;
For an example, here is what the widely used NTP server chrony&lt;br /&gt;
performs in order to achieve its task:&lt;br /&gt;
&lt;br /&gt;
  tm = gmtime(&amp;when);&lt;br /&gt;
  if (!tm)&lt;br /&gt;
    return tz_leap;&lt;br /&gt;
&lt;br /&gt;
  stm = *tm;&lt;br /&gt;
&lt;br /&gt;
  /* Temporarily switch to the timezone containing leap seconds */&lt;br /&gt;
  tz_env = getenv(&quot;TZ&quot;);&lt;br /&gt;
  if (tz_env) {&lt;br /&gt;
    if (strlen(tz_env) &gt;= sizeof (tz_orig))&lt;br /&gt;
      return tz_leap;&lt;br /&gt;
    strcpy(tz_orig, tz_env);&lt;br /&gt;
  }&lt;br /&gt;
  setenv(&quot;TZ&quot;, leap_tzname, 1);&lt;br /&gt;
  tzset();&lt;br /&gt;
&lt;br /&gt;
  /* Get the TAI-UTC offset, which started at the epoch at 10 seconds */&lt;br /&gt;
  t = mktime(&amp;stm);&lt;br /&gt;
  if (t != -1)&lt;br /&gt;
    tz_tai_offset = t - when + 10;&lt;br /&gt;
&lt;br /&gt;
  /* Set the time to 23:59:60 and see how it overflows in mktime() */&lt;br /&gt;
  stm.tm_sec = 60;&lt;br /&gt;
  stm.tm_min = 59;&lt;br /&gt;
  stm.tm_hour = 23;&lt;br /&gt;
&lt;br /&gt;
  t = mktime(&amp;stm);&lt;br /&gt;
&lt;br /&gt;
  if (tz_env)&lt;br /&gt;
    setenv(&quot;TZ&quot;, tz_orig, 1);&lt;br /&gt;
  else&lt;br /&gt;
    unsetenv(&quot;TZ&quot;);&lt;br /&gt;
  tzset();&lt;br /&gt;
&lt;br /&gt;
  if (t == -1)&lt;br /&gt;
    return tz_leap;&lt;br /&gt;
&lt;br /&gt;
  if (stm.tm_sec == 60)&lt;br /&gt;
    tz_leap = LEAP_InsertSecond;&lt;br /&gt;
  else if (stm.tm_sec == 1)&lt;br /&gt;
    tz_leap = LEAP_DeleteSecond;&lt;br /&gt;
&lt;br /&gt;
  *tai_offset = tz_tai_offset;&lt;br /&gt;
&lt;br /&gt;
I want to point out that setting an environment variable can be&lt;br /&gt;
a costly operation, but moreover changing the timezone as such&lt;br /&gt;
may involve several file system operations, being a potentially&lt;br /&gt;
very expensive operation.  (By the way the draft 4 uses &quot;file&lt;br /&gt;
system&quot; as well as &quot;filesystem&quot;.)&lt;br /&gt;
&lt;br /&gt;
With the new interface two timezone objects can be preallocated,&lt;br /&gt;
and the operations are totally detached from global data and&lt;br /&gt;
multithread-safe.]]></description><category>System Interfaces</category><pubDate>Thu, 01 Oct 2026 19:52:45 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1794</guid><comments>https://austingroupbugs.net/view.php?id=1794#bugnotes</comments></item><item><title>0001774: Support ' &lt;apostrophe&gt; as a format specifier flag character in utilities</title><author></author><link>https://austingroupbugs.net/view.php?id=1774</link><description><![CDATA[[Page numbers against draft 3 for Issue 8; this will need to be updated once Issue 8 is finalized]&lt;br /&gt;
&lt;br /&gt;
During the 31 Aug 2023 teleconference, it was noted that many, but not all, shells have already implemented support for printf &quot;%'i&quot; 1000 outputting thousands separators (for example, producing &quot;1,000&quot; in the en_US.UTF-8 locale), matching what is already specified for the &lt;i&gt;printf&lt;/i&gt;( ) function under &lt;CX&gt; shading.  However, we also discussed that standardizing this would be a feature addition, and therefore too late for Issue 8, and thus not fit for inclusion in &lt;a href=&quot;https://austingroupbugs.net/view.php?id=1771&quot;&gt;0001771&lt;/a&gt;]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 01 Oct 2026 19:48:49 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1774</guid><comments>https://austingroupbugs.net/view.php?id=1774#bugnotes</comments></item><item><title>0001635: iconv: please be more explicit in input-not-convertible case</title><author></author><link>https://austingroupbugs.net/view.php?id=1635</link><description><![CDATA[issue 1007 resolves this to&lt;br /&gt;
&lt;br /&gt;
    If iconv() encounters a character in the input buffer that is valid, but for which an identical character does not exist in the output codeset:&lt;br /&gt;
&lt;br /&gt;
        If either the //IGNORE or the //NON_IDENTICAL_DISCARD indicator suffix was specified when the conversion descriptor cd was opened, the character shall be discarded but shall still be counted in the return value of the iconv() call.&lt;br /&gt;
&lt;br /&gt;
        If the //TRANSLIT indicator suffix was specified when the conversion descriptor cd was opened, an implementation-defined transliteration shall be performed, if possible, to convert the character into one or more characters of the output codeset that best resemble the input character. The character shall be counted as one character in the return value of the iconv() call, regardless of the number of output characters.&lt;br /&gt;
&lt;br /&gt;
        If no indicator suffix was specified when the conversion descriptor cd was opened, or the //TRANSLIT indicator suffix was specified but no transliteration of the character is possible, iconv() shall perform an implementation-defined conversion on the character and it shall be counted in the return value of the iconv() call.&lt;br /&gt;
&lt;br /&gt;
However, as Martin Sebor stated in the issue description,&lt;br /&gt;
&lt;br /&gt;
 	The specification for the iconv() function assumes that every input sequence that is valid in the source codeset is convertible to some sequence in the destination codeset. In particular, the specification doesn't allow the function to fail when a valid sequence in the source codeset cannot be represented in the destination codeset. As an example where this assumption doesn't hold, consider a conversion from UTF-8 to ISO-8859 where a large number of source characters don't have equivalents in the destination codeset.&lt;br /&gt;
&lt;br /&gt;
 	A survey of a subset of existing implementations shows that they fail with EILSEQ in such cases, despite the specification defining the error condition as &quot;Input conversion stopped due to an input byte that does not belong to the input codeset.&quot; &lt;br /&gt;
&lt;br /&gt;
And this is true, GNU C library and GNU libiconv seem to fail output conversion immediately with the same EILSEQ error that denotes invalid input data.&lt;br /&gt;
(A much more drastic error, .. is it!?!)]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 01 Oct 2026 19:47:24 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1635</guid><comments>https://austingroupbugs.net/view.php?id=1635#bugnotes</comments></item><item><title>0001818: Add strcasestr() &amp; strcasestr_l()</title><author></author><link>https://austingroupbugs.net/view.php?id=1818</link><description><![CDATA[strcasestr(), a case insensitive version of strstr(), is a popular extension&lt;br /&gt;
implemented on many platforms already.  Many of them also offer the strcasestr_l() variant to specify the locale to be used for determining&lt;br /&gt;
matching characters.&lt;br /&gt;
&lt;br /&gt;
FreeBSD: &lt;a href=&quot;https://man.freebsd.org/cgi/man.cgi?query=strcasestr&amp;sektion=3&quot; rel=&quot;noopener&quot;&gt;https://man.freebsd.org/cgi/man.cgi?query=strcasestr&amp;sektion=3&lt;/a&gt;&lt;br /&gt;
illumos: &lt;a href=&quot;https://illumos.org/man/3C/strcasestr&quot; rel=&quot;noopener&quot;&gt;https://illumos.org/man/3C/strcasestr&lt;/a&gt;&lt;br /&gt;
Linux (GNU libc): &lt;a href=&quot;https://man7.org/linux/man-pages/man3/strcasestr.3.html&quot; rel=&quot;noopener&quot;&gt;https://man7.org/linux/man-pages/man3/strcasestr.3.html&lt;/a&gt;&lt;br /&gt;
MacOS: &lt;a href=&quot;https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/strcasestr.3.html&quot; rel=&quot;noopener&quot;&gt;https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/strcasestr.3.html&lt;/a&gt;&lt;br /&gt;
NetBSD: &lt;a href=&quot;https://man.netbsd.org/strcasestr.3&quot; rel=&quot;noopener&quot;&gt;https://man.netbsd.org/strcasestr.3&lt;/a&gt;&lt;br /&gt;
OpenBSD: &lt;a href=&quot;https://man.openbsd.org/strcasestr.3&quot; rel=&quot;noopener&quot;&gt;https://man.openbsd.org/strcasestr.3&lt;/a&gt;&lt;br /&gt;
Solaris: &lt;a href=&quot;https://docs.oracle.com/cd/E88353_01/html/E37843/strcasestr-3c.html&quot; rel=&quot;noopener&quot;&gt;https://docs.oracle.com/cd/E88353_01/html/E37843/strcasestr-3c.html&lt;/a&gt;]]></description><category>System Interfaces</category><pubDate>Thu, 01 Oct 2026 19:44:30 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1818</guid><comments>https://austingroupbugs.net/view.php?id=1818#bugnotes</comments></item><item><title>0001831: how do you get the timestamp resolution of a symlink?</title><author></author><link>https://austingroupbugs.net/view.php?id=1831</link><description><![CDATA[The description of pathconf() doesn't contain any specific wording about how it should handle a path which names a symlink.  Contrast rename()'s description which says&lt;br /&gt;
    If either the old or new argument names a symbolic link, rename() shall&lt;br /&gt;
    operate on the symbolic link itself, and shall not resolve the last&lt;br /&gt;
    component of the argument.&lt;br /&gt;
&lt;br /&gt;
and unlink()'s description which says&lt;br /&gt;
    If path names a symbolic link, unlink() shall remove the symbolic link&lt;br /&gt;
    named by path and shall not affect any file or directory named by the&lt;br /&gt;
    contents of the symbolic link.&lt;br /&gt;
&lt;br /&gt;
It thus appears that pathconf() is expected to completely follow symlinks and report the values appropriate for the final result of the pathname resolution.&lt;br /&gt;
&lt;br /&gt;
However, it would be useful to be able to get the timestamp resolution (_PC_TIMESTAMP_RESOLUTION) for a symlink, even if it's dangling or points to a path on a filesystem with a different timestamp resolution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(This was encountered when trying to fix a pax implementation's handling of timestamp comparison for -u when the target filesystem had courser resolution that the source filesystem by using pathconf(_PC_TIMESTAMP_RESOLUTION) on the target path to handle the loss of high-precision time info...but the symlink pointed to a location with high-precision timestamps so it couldn't know to round the times when doing the comparison...)]]></description><category>System Interfaces</category><pubDate>Thu, 01 Oct 2026 19:43:38 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1831</guid><comments>https://austingroupbugs.net/view.php?id=1831#bugnotes</comments></item><item><title>0000864: Insufficient specification of storage requirements for synchronization objects</title><author></author><link>https://austingroupbugs.net/view.php?id=864</link><description><![CDATA[This report actually covers multiple questions, mostly related to process-shared synchronization objects, but they all stem from a lack of specification of the storage requirements for synchronization objects, which is the core issue I'm reporting.&lt;br /&gt;
&lt;br /&gt;
The rationale for pthread_mutexattr_init and pthread_mutexattr_destroy provide the only documentation I can find regarding the intended supported usage cases for process-shared mutexes and their storage in shared memory, but this text is not normative.&lt;br /&gt;
&lt;br /&gt;
Here are some specific questions I have:&lt;br /&gt;
&lt;br /&gt;
1. Is it permitted to perform operations on a non-process-shared synchronization objects if they are stored in shared memory by the process that created them, but only used by this process? If so, if this shared memory is mapped more than once at different addresses, is it permitted to access the non-process-shared object mapped at an address different from the address where it was originally initialized?&lt;br /&gt;
&lt;br /&gt;
2. If storage for a synchronization object is deallocated without first destroying the object, is the behavior undefined? The answer to this question has implications for shared memory objects which have already been unlinked and for which there are no file descriptors, which cease to exist when the last process with a mapping unmaps them -- in this case the deallocation of storage is not explicit.&lt;br /&gt;
&lt;br /&gt;
3. Under what conditions can the storage for a synchronization object in MAP_SHARED storage be unmapped without destroying it? As an example of a difficult case, if two threads in a process both access a mutex via a common shared memory mapping, is thread A permitted to unmap the memory after successfully locking and unlocking the mutex if (1) thread B was the previous owner of the mutex, (2) thread B will not attempt to access the mutex again, but (3) due to scheduling, thread B has not actually finished returning from the pthread_mutex_unlock function (this is related to issue 811, but for unmapping rather than destruction).&lt;br /&gt;
&lt;br /&gt;
4. Is it permitted for a thread to lock a mutex in shared memory, unmap it, then later map it again (possibly at a different address) to unlock it?]]></description><category>System Interfaces</category><pubDate>Thu, 01 Oct 2026 19:42:57 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=864</guid><comments>https://austingroupbugs.net/view.php?id=864#bugnotes</comments></item><item><title>0001291: Add method to obtain pthread attributes</title><author></author><link>https://austingroupbugs.net/view.php?id=1291</link><description><![CDATA[This is a commonly added pthread capability but there is little agreement on the API name.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://musl.openwall.narkive.com/dD88I7eH/pthread-getattr-np&quot; rel=&quot;noopener&quot;&gt;https://musl.openwall.narkive.com/dD88I7eH/pthread-getattr-np&lt;/a&gt; provides this list of API names for this capability in the context of discussing how to get the current stack information:&lt;br /&gt;
&lt;br /&gt;
glibc: pthread_getattr_np&lt;br /&gt;
freebsd: pthread_attr_get_np&lt;br /&gt;
netbsd: pthread_attr_get_np and pthread_getattr_np&lt;br /&gt;
&lt;br /&gt;
RTEMS follows glibc/linux with pthread_getattr_np.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If this capability is provided, then the current stack information can also be obtained.&lt;br /&gt;
&lt;br /&gt;
The naming pattern pthread_[sg]attr_* is used to modify the pthread_attr_t structure used in a pthread_create() call. The Linux name of pthread_attr_get() seems like a choice which is an easy name and wouldn't be confused.]]></description><category>Base Definitions and Headers</category><pubDate>Thu, 01 Oct 2026 19:39:32 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1291</guid><comments>https://austingroupbugs.net/view.php?id=1291#bugnotes</comments></item><item><title>0000031: Want to know what mail header information is put in bug mails</title><author></author><link>https://austingroupbugs.net/view.php?id=31</link><description><![CDATA[is there a difference in the email headers between types of mail notifications?&lt;br /&gt;
bugzilla does this. enables mail sorting.]]></description><category>Aardvark Mk III</category><pubDate>Thu, 01 Oct 2026 19:27:18 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=31</guid><comments>https://austingroupbugs.net/view.php?id=31#bugnotes</comments></item><item><title>0000132: Obsolete tags listed as "existing tags"</title><author></author><link>https://austingroupbugs.net/view.php?id=132</link><description><![CDATA[There are some tags that were used during development of Aardvark Mk&lt;br /&gt;
III that are no longer needed, and have been removed from all bugs&lt;br /&gt;
that were tagged with them.  They are:&lt;br /&gt;
&lt;br /&gt;
in aardvark, Real bug, real bug in aardvark, real bug not in aardvark&lt;br /&gt;
&lt;br /&gt;
These tags are still included in the drop-down list of &quot;existing tags&quot;&lt;br /&gt;
that is presented when adding a tag to a bug, or when choosing tags in&lt;br /&gt;
the View Issues filter.  Since they are not intended for future use,&lt;br /&gt;
it would be good if they could be removed from the list of existing tags.]]></description><category>Aardvark Mk III</category><pubDate>Thu, 01 Oct 2026 19:26:33 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=132</guid><comments>https://austingroupbugs.net/view.php?id=132#bugnotes</comments></item><item><title>0000039: tag filter ignores first tag</title><author></author><link>https://austingroupbugs.net/view.php?id=39</link><description><![CDATA[I think there is an off-by-one error in the way the &quot;View Issues&quot; filter processes the selected tags.  It ignores the first tag in the list.&lt;br /&gt;
&lt;br /&gt;
For example, with the default filters there are currently 15 issues listed.  Selecting &quot;real bug in aardvark&quot; from the tag list and clicking &quot;Apply Filter&quot; produces the same list.  However, selecting the same tag again (so that the filter is now looking for &quot;real bug in aardvark, real bug in aardvark&quot;) and re-applying produces the correct list of the 5 issues with that tag.]]></description><category></category><pubDate>Thu, 01 Oct 2026 19:20:49 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=39</guid><comments>https://austingroupbugs.net/view.php?id=39#bugnotes</comments></item><item><title>0001982: probably-unintended wording difference with ISO C in mbrtowc(3) and mbrtowcs(3)</title><author></author><link>https://austingroupbugs.net/view.php?id=1982</link><description><![CDATA[I'm forwarding a report I received by email from someone else.&lt;br /&gt;
&lt;br /&gt;
On 2026-05-21T23:08:20+0800, Kang-Che Sung wrote:&lt;br /&gt;
&gt; There's a discrepancy in the wording of the mbrtowc(3) function (and&lt;br /&gt;
&gt; similarly, mbsrtowcs(3) function) between in POSIX and ISO C. It could be&lt;br /&gt;
&gt; reported as an issue to POSIX (the Austin Group), and I am not sure if you&lt;br /&gt;
&gt; can do that.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; In ISO C (I checked in both C99 and C23, in particular the N3220 draft),&lt;br /&gt;
&gt; there's a statement that if mbrtowc() returns a (size_t)(-1) as an encoding&lt;br /&gt;
&gt; error occurs, &quot;the conversion state is unspecified&quot;.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; POSIX (see &lt;&lt;br /&gt;
&gt; &lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/9799919799/functions/mbrtowc.html&gt;&quot; rel=&quot;noopener&quot;&gt;https://pubs.opengroup.org/onlinepubs/9799919799/functions/mbrtowc.html&gt;&lt;/a&gt;),&lt;br /&gt;
&gt; for the same part it says &quot;the conversion state is undefined&quot;.&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; This wording difference matters when the &quot;unspecified behavior&quot; and&lt;br /&gt;
&gt; &quot;undefined behavior&quot; are technically different. An example is how the&lt;br /&gt;
&gt; mbstate_t object can be reused after an invalid sequence is encountered.&lt;br /&gt;
&gt; When the state is said to be &quot;undefined&quot; it's implied to be not usable&lt;br /&gt;
&gt; again (unless it is reset, e.g., by an `mbrtowc(NULL, &quot;&quot;, 1, ps)` call).&lt;br /&gt;
&gt; When it's &quot;unspecified&quot; then implementations can allow the state to be&lt;br /&gt;
&gt; reused for certain encodings (possible for UTF-8, for example).&lt;br /&gt;
&gt;&lt;br /&gt;
&gt; This is something I discovered accidentally when researching the multibyte&lt;br /&gt;
&gt; functions in the C standard library and how they work with an encoding like&lt;br /&gt;
&gt; UTF-8.&lt;br /&gt;
&lt;br /&gt;
Reported-by: Kang-Che Sung &lt;&lt;a href=&quot;mailto:explorer09@gmail.com&quot;&gt;explorer09@gmail.com&lt;/a&gt;&gt;]]></description><category>System Interfaces</category><pubDate>Wed, 30 Sep 2026 08:59:32 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1982</guid><comments>https://austingroupbugs.net/view.php?id=1982#bugnotes</comments></item><item><title>0001987: The option value type for TCP_NODELAY is not specified.</title><author></author><link>https://austingroupbugs.net/view.php?id=1987</link><description><![CDATA[The option value type for TCP_NODELAY is not specified. This seem to be the case since at least Issue 6.&lt;br /&gt;
&lt;br /&gt;
Many other options have types of rank `int`, and their Windows counterparts often have DWORD or similar, as such I believe the type for this option value is most likely also `int`, rather than `_Bool` which may have issue with ABI compatibility.]]></description><category>Base Definitions and Headers</category><pubDate>Wed, 30 Sep 2026 08:47:22 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1987</guid><comments>https://austingroupbugs.net/view.php?id=1987#bugnotes</comments></item><item><title>0001997: cp,mv,pax should not need to diagnose timestamp downresing</title><author></author><link>https://austingroupbugs.net/view.php?id=1997</link><description><![CDATA[When the command ‘mv /a/SOURCE DEST’ crosses file system boundaries, the resulting file DEST can have a timestamp with less low-order information as described by futimens (POSIX.1-2024 page 1075 lines 36821–36822). For example, the source file’s timestamp might be 1786900895.478636836 but the destinations might be on a FAT32 filesystem so its timestamp might be only 1786900895.47, as FAT32 has only 10 ms resolution.&lt;br /&gt;
&lt;br /&gt;
This topic recently came up in a bug report for GNU mv &lt;&lt;a href=&quot;https://bugs.gnu.org/13601#40&gt;&quot; rel=&quot;noopener&quot;&gt;https://bugs.gnu.org/13601#40&gt;.&lt;/a&gt; One commenter there said that this loss of information triggers the clause for mv (page 3199 lines 108114–108115) saying “If the duplication of the file characteristics fails for any reason, mv shall write a diagnostic message to standard error” which means a diagnostic is required.&lt;br /&gt;
&lt;br /&gt;
GNU mv, and I expect all other mv implementations, does not do that. Instead, it uses futimens or utimensat to set DEST’s timestamps, and if that succeeds it does not issue a diagnostic. Checking whether DEST’s timestamp lost low-order info would require another system call, and I don’t know of any mv implementation that does so.&lt;br /&gt;
&lt;br /&gt;
A clarification is needed here for the phrase “duplication of the file characteristic fails for any reason”. Does the phrase mean that (a) a system call like futimens failed, or does it mean that (b) the destination’s characteristics disagree, even slightly, from the source’s? Although implementations have chosen (a) POSIX could be read as requiring (b).&lt;br /&gt;
&lt;br /&gt;
If an implementation wanted to implement (b), for efficiency it would be helpful if utimensat acquired an additional flag to cause the system call to fail if the timestamp is downresed. However, that would be a separate topic from this bug report, and I know of no platform that has such a flag so at this point it would be pure invention on the POSIX committee’s part.&lt;br /&gt;
&lt;br /&gt;
In the DESIRED ACTION I have attempted to word things so that an implementation can do either (a) or (b). (b) is allowed because an implementation can always issue a diagnostic whenever it likes, so long as it does not change the exit status.]]></description><category>Shell and Utilities</category><pubDate>Wed, 30 Sep 2026 08:43:59 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1997</guid><comments>https://austingroupbugs.net/view.php?id=1997#bugnotes</comments></item><item><title>0000921: please add support for the tt (typewriter text) tag</title><author></author><link>https://austingroupbugs.net/view.php?id=921</link><description><![CDATA[If a comment contains lessthan-tt-greaterthan then Mantis escapes the angle brackets rather than formatting the text in a monospace font.]]></description><category>Aardvark Mk III</category><pubDate>Mon, 28 Sep 2026 17:24:37 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=921</guid><comments>https://austingroupbugs.net/view.php?id=921#bugnotes</comments></item><item><title>0001893: Many links are followed by extra spaces</title><author></author><link>https://austingroupbugs.net/view.php?id=1893</link><description><![CDATA[Many links in the HTML edition are followed by undesirable spaces that are not present in the PDF edition.  I believe most if not all of the affected links are cross-references, but I don't know whether all cross-references are affected.  These extra spaces should be removed, if possible.&lt;br /&gt;
&lt;br /&gt;
(This problem is also widespread in the 2008 edition of Issue 7 but is significantly rarer in the 2013, 2016, and 2018 editions.)]]></description><category>Base Definitions and Headers</category><pubDate>Mon, 28 Sep 2026 15:32:43 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=1893</guid><comments>https://austingroupbugs.net/view.php?id=1893#bugnotes</comments></item><item><title>0000694: missing PDF bookmark for mbsnrtowcs()</title><author></author><link>https://austingroupbugs.net/view.php?id=694</link><description><![CDATA[The PDF for Issue7+TC1 contains hierarchical bookmarks (PDF metadata) to help the reader easily jump between sections.  These bookmarks are missing an entry for mbsnrtowcs() (to jump to page 1289) under XSH Chapter 3.&lt;br /&gt;
&lt;br /&gt;
(The HTML version is OK -- the link to mbsnrtowcs() is not missing.)]]></description><category>System Interfaces</category><pubDate>Mon, 28 Sep 2026 15:29:11 +0000</pubDate><guid>https://austingroupbugs.net/view.php?id=694</guid><comments>https://austingroupbugs.net/view.php?id=694#bugnotes</comments></item></channel></rss>
