Defect Report #135

Submission Date: 31 Jan 94
Submittor: Project Editor (P.J. Plauger)
Source: Per Bothner
Question
H.J. Lu points out that the SVR4 manual explicitly says that fwrite(ptr, 0, 1, stream) returns 0, not 1. I don't know what the SVID states.
I think it is more mathematically consistent to return 1 in this case. But in that case fread(ptr, 0, 1, stream) should also return 1, but ANSI explicitly states that it should return 0. I don't see any reason why these should be different, so I think it is best to follow existing practice. I think the ANSI specification for fwrite is a mistake; perhaps it should be fixed in the revision.
Response
There are no zero-length objects in C. Therefore, if the size argument to fwrite is zero, it is outside the domain of the function and (by subclause 7.1.7), the result is undefined. The C Standard is not in conflict with the cited behavior of SVR4.
Previous Defect Report < - > Next Defect Report