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