standards/186028: incorrect return values for posix_fallocate()
Gennady Proskurin
gpr at mail.ru
Thu Jan 23 09:00:01 UTC 2014
>Number: 186028
>Category: standards
>Synopsis: incorrect return values for posix_fallocate()
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-standards
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jan 23 09:00:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator: Gennady Proskurin
>Release: FreeBSD 11.0-CURRENT
>Organization:
>Environment:
FreeBSD gpr.nnz-home.ru 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r260472+743aa78(svn_head): Fri Jan 10 05:28:05 MSK 2014 gpr at gpr.nnz-home.ru:/usr/obj/usr/src/freebsd-head/sys/GPR amd64
>Description:
In case of error, posix_fallocate() should return error code itself, but in FreeBSD it returns -1 and sets errno.
Quote from standard:
http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_fallocate.html
RETURN VALUE
Upon successful completion, posix_fallocate() shall return zero; otherwise, an error number shall be returned to indicate the error.
Quote from freebsd man:
RETURN VALUES
If successful, posix_fallocate() returns zero. It returns -1 on failure,
and sets errno to indicate the error.
>How-To-Repeat:
test program attached
>Fix:
Patch attached with submission follows:
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
int main()
{
int ret;
int err;
errno = 0;
ret = posix_fallocate(-1 /* emulate EBADF error */, 0, 1);
err = errno;
printf("return value : %i strerror: %s\n", ret, strerror(ret));
printf("errno : %i strerror: %s\n", err, strerror(err));
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-standards
mailing list