/**
 * Some tests for p_ftruncate() to ensure that
 * properly handles large (2Gb+) files.
 */

#include "clar_libgit2.h"

static const char *filename = "core_ftruncate.txt";
static int fd = -1;

void test_core_ftruncate__initialize(void)
{
	if (!cl_is_env_set("GITTEST_INVASIVE_FS_SIZE"))
		cl_skip();

	cl_must_pass((fd = p_open(filename, O_CREAT | O_RDWR, 0644)));
}

void test_core_ftruncate__cleanup(void)
{
	if (fd < 0)
		return;

	p_close(fd);
	fd = 0;

	p_unlink(filename);
}

static void _extend(git_off_t i64len)
{
	struct stat st;
	int error;

	cl_assert((error = p_ftruncate(fd, i64len)) == 0);
	cl_assert((error = p_fstat(fd, &st)) == 0);
	cl_assert(st.st_size == i64len);
}

void test_core_ftruncate__2gb(void)
{
	_extend(0x80000001);
}

void test_core_ftruncate__4gb(void)
{
	_extend(0x100000001);
}
