Minutes of the 27th July 2023 Teleconference    Austin-1332 Page 1 of 1
Submitted by Andrew Josey, The Open Group.         28th July 2023

Attendees:
    Andrew Josey, The Open Group 
    Don Cragun,  IEEE PASC OR
    Mark Ziegast, SHware Systems Dev.
    Geoff Clare, The Open Group
    Eric Ackermann, HPI, University of Potsdam
    Eric Blake, Red Hat, The Open Group OR

Apologies
    Nick Stoughton, Logitech/USENIX, ISO/IEC JTC 1/SC 22 OR 
    Tom Thompson, IEEE

* General news

The meeting on July 31 will be a webex.
The meeting logistics for August 3rd are undecided as to whether it
is a zoom or webex meeting. We will check with Nick on Monday.

Andrew noted that draft planning is still to be done. 
It is expected that the cutoff for the next draft will be determined
by the closing date for open interpretations.

* Current Business

Note for issue resolution all items are tagged for Issue 8 unless
noted otherwise or disposition is reject or duplicate.


Bug 1766: catgets: quotation in "Change History" lacks closing quotes Accepted
https://austingroupbugs.net/view.php?id=1766

This item is tagged for TC3-2008.

Bug 1769: CX shading needed for fputwc() EILSEQ error indicator requirement Accepted
https://austingroupbugs.net/view.php?id=1769


Bug 1614: XSH 3/mktime does not specify EINVAL and should  Accepted as Marked
https://austingroupbugs.net/view.php?id=1614

An interpretation is required.

Interpretation response:
The standard clearly states that when an unsuccessful call to
mktime() returns (time_t)-1 it sets errno to [EOVERFLOW], and
conforming implementations must conform to this.

Rationale:

The RETURN VALUE section on the mktime() page states:
    If the time since the Epoch cannot be represented, the function
    shall return the value (time_t)-1 [CX]and set errno to indicate
    the error[/CX].

This requires that errno is set to indicate "the error", and the
beginning of the sentence states the nature of the error condition
to which "the error" refers: the time since the Epoch (i.e. the
integer value to be returned) cannot be represented. The ERRORS
section requires that the error number [EOVERFLOW] is used for this
condition.

Thus the standard requires that errno is set to [EOVERFLOW] when
an unsuccessful call to mktime() returns (time_t)-1 and an
implementation that sets it to [EINVAL] does not conform.

The mktime() function does not have any way to indicate to the
caller that an error other than [EOVERFLOW] occurred.

Notes to the Editor (not part of this interpretation):
On page 425 line 14451 section <time.h>, after applying bug 1253 change:
    The value of tm_isdst shall be positive if Daylight Saving Time
    is in effect, 0 if Daylight Saving Time is not in effect, and
    negative if the information is not available.
to:
    When tm_isdst is set by an interface defined in this standard,
    its value shall be positive if Daylight Saving Time (DST) is
    in effect and 0 if DST is not in effect. [CX]It shall not be
    set to a negative value by any interface defined in this standard.
    When tm_isdst is passed to the mktime() function, it specifies
    how mktime() is to handle DST when calculating the time since
    the Epoch value; see [xref to mktime()].[/CX]

On page 1331 line 44310 section mktime(), delete:
    A positive or 0 value for tm_isdst shall cause mktime() to
    presume initially that Daylight Savings Time, respectively, is
    or is not in effect for the specified time. A negative value
    for tm_isdst shall cause mktime() to attempt to determine whether
    Daylight Savings Time is in effect for the specified time.

On page 1331 line 44317 section mktime(), change:
    corrected for timezone and any seasonal time adjustments
to:
    corrected for the offset of the timezone's standard time from
    Coordinated Universal Time and further corrected (if applicable--see
    below) for Daylight Saving Time

After page 1331 line 44321 section mktime(), add these new paragraphs:
    [CX]If the timezone is one that includes Daylight Saving Time
    (DST) adjustments, the value of tm_isdst in the tm structure
    controls whether or not mktime() adjusts the calculated seconds
    since the Epoch value by the DST offset (after it has made the
    timezone adjustment), as follows:

	If tm_isdst is zero, mktime() shall not further adjust the
	seconds since the Epoch by the DST offset.

	If tm_isdst is positive, mktime() shall further adjust the
	seconds since the Epoch by the DST offset.

	If tm_isdst is negative, mktime() shall attempt to determine
	whether DST is in effect for the specified time; if it
	determines that DST is in effect it shall produce the same
	result as an equivalent call with a positive tm_isdst value,
	otherwise it shall produce the same result as an equivalent
	call with a tm_isdst value of zero. If the broken-down time
	specifies a time that is either skipped over or repeated
	when a transition to or from DST occurs, it is unspecified
	whether mktime() produces the same result as an equivalent
	call with a positive tm_isdst value or as an equivalent
	call with a tm_isdst value of zero.

    If the TZ environment variable specifies a geographical timezone
    for which the implementation's timezone database includes
    historical or future changes to the offset from Coordinated
    Universal Time of the timezone's standard time, and the broken-down
    time corresponds to a time that was (or will be) skipped over
    or repeated due to the occurrence of such a change, mktime()
    shall calculate the time since the Epoch value using either the
    offset in effect before the change or the offset in effect after
    the change.[/CX]

On page 1331 line 44323 section mktime(), after applying bug 1613 change:
    with the specified time since the Epoch as its argument
to:
    with the calculated time since the Epoch as its argument

On page 1331 line 44327 section mktime(), change:
    The mktime() function shall return the specified time since the
    Epoch encoded as a value of type time_t. If the time since the
    Epoch cannot be represented, the function shall return the value
    (time_t)-1 [CX]and set errno to indicate the error[/CX].
to:
    The mktime() function shall return the calculated time since
    the Epoch encoded as a value of type time_t. If the time since
    the Epoch cannot be represented as a time_t [CX]or the value
    to be returned in the tm_year member of the structure pointed
    to by timeptr cannot be represented as an int[/CX], the function
    shall return the value (time_t)-1 [CX]and set errno to [EOVERFLOW],
    and shall not change the value of the tm_wday component of the
    structure.[/CX]

    [CX]Since (time_t)-1 is a valid return value for a successful
    call to mktime(), an application wishing to check for error
    situations should set tm_wday to a value less than 0 or greater
    than 6 before calling mktime(). On return, if tm_wday has not
    changed an error has occurred.[/CX]

On page 1332 line 44348 section mktime(), change:
    if (mktime(&time_str) == -1)
to:
    time_str.tm_wday = -1;
    if (mktime(&time_str) == (time_t)-1 && time_str.tm_wday == -1)

On page 1332 line 44359 section mktime(), change RATIONALE from "None" to:
    In order to allow applications to distinguish between a successful
    return of (time_t)-1 and an [EOVERFLOW] error, mktime() is
    required not to change tm_wday on error. This mechanism is used
    rather than the convention used for other functions whereby the
    application sets errno to zero before the call and the call
    does not change errno on error because the ISO C standard does
    not require mktime() to set errno on error. The next revision
    of the ISO C standard is expected to require that mktime() does
    not change tm_wday when returning (time_t)-1 to indicate an
    error, and that this return convention is used both for the
    case where the value to be returned by the function cannot be
    represented as a time_t and the case where the value to be
    returned in the tm_year member of the tm structure cannot be
    represented as an int.

    The DESCRIPTION section says that mktime() converts the specified
    broken-down time into a time since the Epoch value. The use of
    the indefinite article here is necessary because, when tm_isdst
    is negative and the timezone has Daylight Saving Time transitions,
    there is not a one-to-one correspondence between broken-down
    times and time since the Epoch values.

    The description of how the value of tm_isdst affects the behavior
    of mktime() is shaded CX because the requirements in the ISO C
    standard are unclear. The next revision of the ISO C standard
    is expected to state the requirements using wording equivalent
    to the wording in this standard.

Bug 1647: printf("%lc", (wint_t)0) can't output NUL byte Accepted as Marked
https://austingroupbugs.net/view.php?id=1647

Now the C committee has responded to our feedback, we can approve
the proposed interpretation. (closed after meeting)


Bug 1768: catgets: incomplete paragraph in "Change History" Accepted as Marked
https://austingroupbugs.net/view.php?id=1768

This item is tagged for TC3-2008

The text of Austin Group Interpretation 1003.1-2001 #148 can be found here:

https://collaboration.opengroup.org/austin/interps/documents/14539/AI-148.txt [^]

It doesn't contain any changes to catgets().

We considered whether there might be a typo in the 148 number, but we
have been unable to find any other interpretation (besides #044
that is already listed) affecting catgets(), and as far as it can
be seen, all of the changes to catgets() between Issue 6 and Issue 7
are described in the other Change History entries.

The other possibility is that this entry should have been on a
different page, but all of the functions affected by #148 have a
Change History entry for it.

All we can do at this point is treat this line as spurious and delete it.


Bug 1770: Typo re iswblank_l Accepted
https://austingroupbugs.net/view.php?id=1770 

This item is tagged for TC3-2008

Bug 1767: sed: clarify behavior of c (change) command Accepted
https://austingroupbugs.net/view.php?id=1767

Bug 1747: mailx: document alias expansion prevention Accepted
https://austingroupbugs.net/view.php?id=1747

Bug 1746: fuser output format clarification
https://austingroupbugs.net/view.php?id=1746

This item is tagged for TC3-2008

An interpretation is required.

Interpretation response:
The standard states that the process ID is written using the format
"%d", and conforming implementations must conform to this. However,
concerns have been raised about this which are being referred to
the sponsor.

Rationale:
Format "%d" allows, but does not require a space or tab before the
process ID. The standard should require separation between process
IDs in order for the output to be usable.

Notes to the Editor (not part of this interpretation):

Make the changes in bugnote:6341

Bug 1745: tsort input and output format clarifications Accepted as Marked
https://austingroupbugs.net/view.php?id=1745

This item is tagged for TC3-2008.
An interpretation is required.

Interpretation response:
The standard is unclear on this issue, and no conformance distinction
can be made between alternative implementations based on this. This
is being referred to the sponsor.

Rationale:
None.

Notes to the Editor (not part of this interpretation):
Make the changes in the Desired Action.

We will continue next time on:

Bug 1732: cp and mv EXIT STATUS does not account for -i
https://austingroupbugs.net/view.php?id=1732

Next Steps
----------
The next call is on:

   Mon 2023-07-31 (Webex meeting - general bugs/ballot resolution)
   Thu 2023-08-03 (TBD Zoom or Webex meeting - general bugs/ballot resolution)

The calls are for 90 minutes

Calls are anchored on US time. (8am Pacific)

Please check the calendar invites for dial in details.

Apologies in advance:
    Tom Thompson 2023-07-31
    Andrew Josey 2023-08-07, 2023-08-10


Bugs are at:
https://austingroupbugs.net

An etherpad is usually up for the meeting, with a URL using the date format as below:

https://posix.rhansen.org/p/20xx-mm-dd

(For write access this uses The Open Group single sign on,
for those individuals with gitlab.opengroup.org accounts.
Please contact Andrew if you need to be setup)