aboutsummaryrefslogblamecommitdiffstats
path: root/io.c
blob: 6ee9e2976a7781cde4474153149d2d6ec7c95a87 (plain) (tree)
























                                                                         
/* See LICENSE file for copyright and license details. */
#include "common.h"


off_t
filesize(int fd, const char *fname)
{
	struct stat st;

	if (fstat(fd, &st))
		eprintf("fstat %s:", fname);

	switch (st.st_mode & S_IFMT) {
	case S_IFREG:
		break;
	case S_IFBLK:
		if (ioctl(fd, BLKGETSIZE64, &st.st_size) < 0)
			eprintf("ioctl %s BLKGETSIZE64:", fname);
		break;
	default:
		eprintf("%s: not a regular file or block device", fname);
	}

	return st.st_size;
}