busybox/e2fsprogs/old_e2fsprogs/ext2fs/getsectsize.c
<<
>>
Prefs
   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