1/* vi: set sw=4 ts=4: */ 2/* 3 * getsectsize.c --- get the sector size of a device. 4 * 5 * Copyright (C) 1995, 1995 Theodore Ts'o. 6 * Copyright (C) 2003 VMware, Inc. 7 * 8 * %Begin-Header% 9 * This file may be redistributed under the terms of the GNU Public 10 * License. 11 * %End-Header% 12 */ 13 14#include <stdio.h> 15#if HAVE_UNISTD_H 16#include <unistd.h> 17#endif 18#if HAVE_ERRNO_H 19#include <errno.h> 20#endif 21#include <fcntl.h> 22#ifdef HAVE_LINUX_FD_H 23#include <sys/ioctl.h> 24#include <linux/fd.h> 25#endif 26 27#if defined(__linux__) && defined(_IO) && !defined(BLKSSZGET) 28#define BLKSSZGET _IO(0x12,104)/* get block device sector size */ 29#endif 30 31#include "ext2_fs.h" 32#include "ext2fs.h" 33 34/* 35 * Returns the number of blocks in a partition 36 */ 37errcode_t ext2fs_get_device_sectsize(const char *file, int *sectsize) 38{ 39 int fd; 40 41#ifdef CONFIG_LFS 42 fd = open64(file, O_RDONLY); 43#else 44 fd = open(file, O_RDONLY); 45#endif 46 if (fd < 0) 47 return errno; 48 49#ifdef BLKSSZGET 50 if (ioctl(fd, BLKSSZGET, sectsize) >= 0) { 51 close(fd); 52 return 0; 53 } 54#endif 55 *sectsize = 0; 56 close(fd); 57 return 0; 58} 59