Initial public busybox upstream commit
[busybox4maemo] / e2fsprogs / old_e2fsprogs / ext2fs / getsectsize.c
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  */
37 errcode_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 }