Anonymous | Login | 2023-04-02 09:14 UTC |
Main | My View | View Issues | Change Log | Docs |
Viewing Issue Simple Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||
ID | Category | Severity | Type | Date Submitted | Last Update | ||
0000959 | [1003.1(2008)/Issue 7] Base Definitions and Headers | Editorial | Clarification Requested | 2015-06-18 11:10 | 2015-07-30 15:04 | ||
Reporter | joerg | View Status | public | ||||
Assigned To | ajosey | ||||||
Priority | normal | Resolution | Withdrawn | ||||
Status | Closed | ||||||
Name | Jörg Schilling | ||||||
Organization | |||||||
User Reference | |||||||
Section | Headers | ||||||
Page Number | 335-336 | ||||||
Line Number | 11179, 11185, 11218-11223 | ||||||
Interp Status | --- | ||||||
Final Accepted Text | |||||||
Summary | 0000959: struct siginfo member si_pid is marked "CX" but is mandatory for the non-CX waitid() | ||||||
Description |
In order to make waitid() usable, the siginfo_t members si_pid si_code si_status need to be mandatory and siginfo_t as a whole needs to be mandatory as well. |
||||||
Desired Action |
Remove the "CX" marker for siginfo_t on line 11179 and remove the "CX" marker for si_pid on line 11185 and change Sending process ID. to Sending process ID or child pid for waitid(). Remove the "CX" marker for the constants CLD_EXITED .. CLD_CONTINUED at line 11218..11223. In order to make waitid() usable at shell level, it may be needed to require CLD_EXITED .. CLD_CONTINUED to use the range 1..6. |
||||||
Tags | No tags attached. | ||||||
Attached Files | |||||||
|
![]() |
|||||||
|
![]() |
|
(0002715) joerg (reporter) 2015-06-18 11:11 edited on: 2015-06-18 11:11 |
Here is a test program that allows to check whether a implementation conforms to the standard: #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> #include <stdio.h> /* * Non-standard compliant platforms may need * #include <signal.h> or something similar * in addition to the include files above. */ int main() { siginfo_t si; pid_t pid; int ret; if ((pid = fork()) < 0) exit(1); if (pid == 0) { _exit(1234567890); } ret = waitid(P_PID, pid, &si, WEXITED); printf("ret: %d si_pid: %ld si_status: %d si_code: %d\n", ret, (long) si.si_pid, si.si_status, si.si_code); if (pid != si.si_pid) printf("si_pid in struct siginfo should be %ld but is %ld\n", (long) pid, (long) si.si_pid); if (si.si_status != 1234567890) printf("si_status in struct signinfo should be %d (0x%x) but is %d (0x%x)\n", 1234567890, 1234567890, si.si_status, si.si_status); if (CLD_EXITED != 1) printf("CLD_EXITED is %d on this platform\n", CLD_EXITED); return (0); } |
(0002716) geoffclare (manager) 2015-06-18 11:32 |
This bug report seems to be the result of a misunderstanding of what the CX margin code means. Hint: it does not indicate that something is optional! |
(0002717) joerg (reporter) 2015-06-18 11:46 |
So do you believe that this is just an extension to ISO C but mandatory for POSIX? The interesting thing here is that e.g. Mac OS X returns si_pid == 0 for waitid() and does not seem to implement a useable waitid() interface. |
(0002722) eblake (manager) 2015-06-18 18:36 |
See XBD 1.7.1 line 182. Something marked CX is mandatory in POSIX, and merely marked as a convenience to show that it is an extension to C99. |
(0002753) rhansen (manager) 2015-07-10 21:48 edited on: 2015-07-10 21:48 |
> So do you believe that this is just an extension to ISO C but > mandatory for POSIX? Yes. Key quotes from the section Eric mentioned (XBD 1.7.1, definition of CX shading):
Note that 0000690 changed some shading; I don't recall whether there's any overlap with this bug report. |
Mantis 1.1.6[^] Copyright © 2000 - 2008 Mantis Group |