119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * partinfo.c 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Originally written by Alain Knaff, <alknaff@innet.lu>. 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Cleaned up by Theodore Ts'o, <tytso@mit.edu>. 73984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt * 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/types.h> 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <fcntl.h> 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_SYS_IOCTL_H 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/ioctl.h> 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h> 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <linux/hdreg.h> 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <unistd.h> 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h> 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <errno.h> 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "nls-enable.h" 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE) 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKGETSIZE _IO(0x12,96) /* return device size */ 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint main(int argc, char **argv) 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project struct hd_geometry loc; 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int fd, i; 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project unsigned long size; 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef ENABLE_NLS 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project setlocale(LC_MESSAGES, ""); 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project setlocale(LC_CTYPE, ""); 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project bindtextdomain(NLS_CAT_NAME, LOCALEDIR); 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project textdomain(NLS_CAT_NAME); 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (argc == 1) { 393984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt fprintf(stderr, _("Usage: %s device...\n\nPrints out the " 403984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt "partition information for each given device.\n" 413984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt "For example: %s /dev/hda\n\n"), argv[0], argv[0]); 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(1); 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 443984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project for (i=1; i < argc; i++) { 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fd = open(argv[i], O_RDONLY); 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (fd < 0) { 493984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt fprintf(stderr, _("Cannot open %s: %s"), 503984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt argv[i], strerror(errno)); 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 533984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ioctl(fd, HDIO_GETGEO, &loc) < 0) { 553984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt fprintf(stderr, _("Cannot get geometry of %s: %s"), 563984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt argv[i], strerror(errno)); 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project close(fd); 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 603984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 613984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (ioctl(fd, BLKGETSIZE, &size) < 0) { 633984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt fprintf(stderr, _("Cannot get size of %s: %s"), 643984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt argv[i], strerror(errno)); 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project close(fd); 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project continue; 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 683984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 693984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt printf(_("%s: h=%3d s=%3d c=%4d start=%8d size=%8lu end=%8d\n"), 703984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt argv[i], 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project loc.heads, (int)loc.sectors, loc.cylinders, 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (int)loc.start, size, (int) loc.start + size -1); 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project close(fd); 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(0); 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 77