Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Mar 1997 14:58:08 -0500 (EST)
From:      Rick Ace <rick@softport.nyc.ny.us>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/2966: ftruncate() problem in FreeBSD 2.1.7-RELEASE i386
Message-ID:  <199703121958.OAA16037@softport.nyc.ny.us>
Resent-Message-ID: <199703122010.MAA08541@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         2966
>Category:       kern
>Synopsis:       ftruncate() fails unexpectedly
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 12 12:10:01 PST 1997
>Last-Modified:
>Originator:     Rick Ace
>Organization:
Softport Systems Inc.  New York, NY  10016
>Release:        FreeBSD 2.1.7-RELEASE i386
>Environment:

	486/50
	nonprivileged user application

>Description:

	ftruncate() fails with error (EINVAL) when called to truncate
	a file whose descriptor is open for read and write.
	It should succeed.

>How-To-Repeat:

/*
 * demonstrate ftruncate() bug in freebsd
 * (this same code runs without problems on both Solaris 2.5 and HP-UX 10)
 */

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>

static char tmp_path[] = "/tmp/tbug";

static void try_truncate();

int main()
{
	int fd;

	(void) unlink(tmp_path);

	/* create new, empty file open for read/write */
	if ((fd = open(tmp_path, O_RDWR | O_CREAT, 0600)) < 0) {
		perror("open");
		return 1;
	}

	try_truncate(fd);	/* try on empty file */

	printf("write() returns %d\n", write(fd, "xxx", 3));
	try_truncate(fd);	/* try on non-empty file */

	(void) unlink(tmp_path);
	return 0;
}

static void try_truncate(fd)
	int fd;
{
	int e;

	e = ftruncate(fd, 0);
	if (e < 0) {
		fprintf(stderr, "[errno=%d] ", errno);
		perror("ftruncate");
	}
	else {
		fprintf(stderr, "ok\n");
	}
}

>Fix:
	
	None reported.

>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703121958.OAA16037>