1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker * getsize.c --- get the size of a partition.
3*6a54128fSAndroid Build Coastguard Worker *
4*6a54128fSAndroid Build Coastguard Worker * Copyright (C) 1995, 1995 Theodore Ts'o.
5*6a54128fSAndroid Build Coastguard Worker * Copyright (C) 2003 VMware, Inc.
6*6a54128fSAndroid Build Coastguard Worker *
7*6a54128fSAndroid Build Coastguard Worker * Windows version of ext2fs_get_device_size by Chris Li, VMware.
8*6a54128fSAndroid Build Coastguard Worker *
9*6a54128fSAndroid Build Coastguard Worker * %Begin-Header%
10*6a54128fSAndroid Build Coastguard Worker * This file may be redistributed under the terms of the GNU Library
11*6a54128fSAndroid Build Coastguard Worker * General Public License, version 2.
12*6a54128fSAndroid Build Coastguard Worker * %End-Header%
13*6a54128fSAndroid Build Coastguard Worker */
14*6a54128fSAndroid Build Coastguard Worker
15*6a54128fSAndroid Build Coastguard Worker #ifndef _LARGEFILE_SOURCE
16*6a54128fSAndroid Build Coastguard Worker #define _LARGEFILE_SOURCE
17*6a54128fSAndroid Build Coastguard Worker #endif
18*6a54128fSAndroid Build Coastguard Worker #ifndef _LARGEFILE64_SOURCE
19*6a54128fSAndroid Build Coastguard Worker #define _LARGEFILE64_SOURCE
20*6a54128fSAndroid Build Coastguard Worker #endif
21*6a54128fSAndroid Build Coastguard Worker
22*6a54128fSAndroid Build Coastguard Worker #include "config.h"
23*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
24*6a54128fSAndroid Build Coastguard Worker #if HAVE_UNISTD_H
25*6a54128fSAndroid Build Coastguard Worker #include <unistd.h>
26*6a54128fSAndroid Build Coastguard Worker #endif
27*6a54128fSAndroid Build Coastguard Worker #if HAVE_ERRNO_H
28*6a54128fSAndroid Build Coastguard Worker #include <errno.h>
29*6a54128fSAndroid Build Coastguard Worker #endif
30*6a54128fSAndroid Build Coastguard Worker #include <fcntl.h>
31*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_SYS_IOCTL_H
32*6a54128fSAndroid Build Coastguard Worker #include <sys/ioctl.h>
33*6a54128fSAndroid Build Coastguard Worker #endif
34*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_LINUX_FD_H
35*6a54128fSAndroid Build Coastguard Worker #include <linux/fd.h>
36*6a54128fSAndroid Build Coastguard Worker #endif
37*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_SYS_DISKLABEL_H
38*6a54128fSAndroid Build Coastguard Worker #include <sys/disklabel.h>
39*6a54128fSAndroid Build Coastguard Worker #endif
40*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_SYS_DISK_H
41*6a54128fSAndroid Build Coastguard Worker #include <sys/disk.h>
42*6a54128fSAndroid Build Coastguard Worker #endif
43*6a54128fSAndroid Build Coastguard Worker #ifdef __linux__
44*6a54128fSAndroid Build Coastguard Worker #include <sys/utsname.h>
45*6a54128fSAndroid Build Coastguard Worker #endif
46*6a54128fSAndroid Build Coastguard Worker #if HAVE_SYS_STAT_H
47*6a54128fSAndroid Build Coastguard Worker #include <sys/stat.h>
48*6a54128fSAndroid Build Coastguard Worker #endif
49*6a54128fSAndroid Build Coastguard Worker #include <ctype.h>
50*6a54128fSAndroid Build Coastguard Worker
51*6a54128fSAndroid Build Coastguard Worker #if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
52*6a54128fSAndroid Build Coastguard Worker #define BLKGETSIZE _IO(0x12,96) /* return device size */
53*6a54128fSAndroid Build Coastguard Worker #endif
54*6a54128fSAndroid Build Coastguard Worker
55*6a54128fSAndroid Build Coastguard Worker #if defined(__linux__) && defined(_IOR) && !defined(BLKGETSIZE64)
56*6a54128fSAndroid Build Coastguard Worker #define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
57*6a54128fSAndroid Build Coastguard Worker #endif
58*6a54128fSAndroid Build Coastguard Worker
59*6a54128fSAndroid Build Coastguard Worker #ifdef APPLE_DARWIN
60*6a54128fSAndroid Build Coastguard Worker #define BLKGETSIZE DKIOCGETBLOCKCOUNT32
61*6a54128fSAndroid Build Coastguard Worker #endif /* APPLE_DARWIN */
62*6a54128fSAndroid Build Coastguard Worker
63*6a54128fSAndroid Build Coastguard Worker #include "ext2_fs.h"
64*6a54128fSAndroid Build Coastguard Worker #include "ext2fs.h"
65*6a54128fSAndroid Build Coastguard Worker
66*6a54128fSAndroid Build Coastguard Worker #if defined(__CYGWIN__) || defined (WIN32)
67*6a54128fSAndroid Build Coastguard Worker #include "windows.h"
68*6a54128fSAndroid Build Coastguard Worker #include "winioctl.h"
69*6a54128fSAndroid Build Coastguard Worker
70*6a54128fSAndroid Build Coastguard Worker #if (_WIN32_WINNT >= 0x0500)
71*6a54128fSAndroid Build Coastguard Worker #define HAVE_GET_FILE_SIZE_EX 1
72*6a54128fSAndroid Build Coastguard Worker #endif
73*6a54128fSAndroid Build Coastguard Worker
ext2fs_get_device_size2(const char * file,int blocksize,blk64_t * retblocks)74*6a54128fSAndroid Build Coastguard Worker errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
75*6a54128fSAndroid Build Coastguard Worker blk64_t *retblocks)
76*6a54128fSAndroid Build Coastguard Worker {
77*6a54128fSAndroid Build Coastguard Worker int fd;
78*6a54128fSAndroid Build Coastguard Worker HANDLE h;
79*6a54128fSAndroid Build Coastguard Worker PARTITION_INFORMATION pi;
80*6a54128fSAndroid Build Coastguard Worker DISK_GEOMETRY gi;
81*6a54128fSAndroid Build Coastguard Worker DWORD retbytes;
82*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_GET_FILE_SIZE_EX
83*6a54128fSAndroid Build Coastguard Worker LARGE_INTEGER filesize;
84*6a54128fSAndroid Build Coastguard Worker #else
85*6a54128fSAndroid Build Coastguard Worker DWORD filesize;
86*6a54128fSAndroid Build Coastguard Worker #endif /* HAVE_GET_FILE_SIZE_EX */
87*6a54128fSAndroid Build Coastguard Worker
88*6a54128fSAndroid Build Coastguard Worker fd = ext2fs_open_file(file, O_RDONLY, 0);
89*6a54128fSAndroid Build Coastguard Worker if (fd < 0)
90*6a54128fSAndroid Build Coastguard Worker return errno;
91*6a54128fSAndroid Build Coastguard Worker h = (HANDLE)_get_osfhandle(fd);
92*6a54128fSAndroid Build Coastguard Worker if (DeviceIoControl(h, IOCTL_DISK_GET_PARTITION_INFO,
93*6a54128fSAndroid Build Coastguard Worker &pi, sizeof(PARTITION_INFORMATION),
94*6a54128fSAndroid Build Coastguard Worker &pi, sizeof(PARTITION_INFORMATION),
95*6a54128fSAndroid Build Coastguard Worker &retbytes, NULL)) {
96*6a54128fSAndroid Build Coastguard Worker
97*6a54128fSAndroid Build Coastguard Worker *retblocks = pi.PartitionLength.QuadPart / blocksize;
98*6a54128fSAndroid Build Coastguard Worker
99*6a54128fSAndroid Build Coastguard Worker } else if (DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_GEOMETRY,
100*6a54128fSAndroid Build Coastguard Worker &gi, sizeof(DISK_GEOMETRY),
101*6a54128fSAndroid Build Coastguard Worker &gi, sizeof(DISK_GEOMETRY),
102*6a54128fSAndroid Build Coastguard Worker &retbytes, NULL)) {
103*6a54128fSAndroid Build Coastguard Worker
104*6a54128fSAndroid Build Coastguard Worker *retblocks = gi.BytesPerSector *
105*6a54128fSAndroid Build Coastguard Worker gi.SectorsPerTrack *
106*6a54128fSAndroid Build Coastguard Worker gi.TracksPerCylinder *
107*6a54128fSAndroid Build Coastguard Worker gi.Cylinders.QuadPart / blocksize;
108*6a54128fSAndroid Build Coastguard Worker
109*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_GET_FILE_SIZE_EX
110*6a54128fSAndroid Build Coastguard Worker } else if (GetFileSizeEx(h, &filesize)) {
111*6a54128fSAndroid Build Coastguard Worker *retblocks = filesize.QuadPart / blocksize;
112*6a54128fSAndroid Build Coastguard Worker }
113*6a54128fSAndroid Build Coastguard Worker #else
114*6a54128fSAndroid Build Coastguard Worker } else {
115*6a54128fSAndroid Build Coastguard Worker filesize = GetFileSize(h, NULL);
116*6a54128fSAndroid Build Coastguard Worker if (INVALID_FILE_SIZE != filesize) {
117*6a54128fSAndroid Build Coastguard Worker *retblocks = filesize / blocksize;
118*6a54128fSAndroid Build Coastguard Worker }
119*6a54128fSAndroid Build Coastguard Worker }
120*6a54128fSAndroid Build Coastguard Worker #endif /* HAVE_GET_FILE_SIZE_EX */
121*6a54128fSAndroid Build Coastguard Worker
122*6a54128fSAndroid Build Coastguard Worker close(fd);
123*6a54128fSAndroid Build Coastguard Worker return 0;
124*6a54128fSAndroid Build Coastguard Worker }
125*6a54128fSAndroid Build Coastguard Worker
126*6a54128fSAndroid Build Coastguard Worker #else
127*6a54128fSAndroid Build Coastguard Worker
valid_offset(int fd,ext2_loff_t offset)128*6a54128fSAndroid Build Coastguard Worker static int valid_offset (int fd, ext2_loff_t offset)
129*6a54128fSAndroid Build Coastguard Worker {
130*6a54128fSAndroid Build Coastguard Worker char ch;
131*6a54128fSAndroid Build Coastguard Worker
132*6a54128fSAndroid Build Coastguard Worker if (ext2fs_llseek (fd, offset, 0) < 0)
133*6a54128fSAndroid Build Coastguard Worker return 0;
134*6a54128fSAndroid Build Coastguard Worker if (read (fd, &ch, 1) < 1)
135*6a54128fSAndroid Build Coastguard Worker return 0;
136*6a54128fSAndroid Build Coastguard Worker return 1;
137*6a54128fSAndroid Build Coastguard Worker }
138*6a54128fSAndroid Build Coastguard Worker
139*6a54128fSAndroid Build Coastguard Worker /*
140*6a54128fSAndroid Build Coastguard Worker * Returns the number of blocks in a partition
141*6a54128fSAndroid Build Coastguard Worker */
ext2fs_get_device_size2(const char * file,int blocksize,blk64_t * retblocks)142*6a54128fSAndroid Build Coastguard Worker errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
143*6a54128fSAndroid Build Coastguard Worker blk64_t *retblocks)
144*6a54128fSAndroid Build Coastguard Worker {
145*6a54128fSAndroid Build Coastguard Worker int fd, rc = 0;
146*6a54128fSAndroid Build Coastguard Worker unsigned long long size64;
147*6a54128fSAndroid Build Coastguard Worker ext2_loff_t high, low;
148*6a54128fSAndroid Build Coastguard Worker
149*6a54128fSAndroid Build Coastguard Worker fd = ext2fs_open_file(file, O_RDONLY, 0);
150*6a54128fSAndroid Build Coastguard Worker if (fd < 0)
151*6a54128fSAndroid Build Coastguard Worker return errno;
152*6a54128fSAndroid Build Coastguard Worker
153*6a54128fSAndroid Build Coastguard Worker #if defined DKIOCGETBLOCKCOUNT && defined DKIOCGETBLOCKSIZE /* For Apple Darwin */
154*6a54128fSAndroid Build Coastguard Worker unsigned int size;
155*6a54128fSAndroid Build Coastguard Worker
156*6a54128fSAndroid Build Coastguard Worker if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0 &&
157*6a54128fSAndroid Build Coastguard Worker ioctl(fd, DKIOCGETBLOCKSIZE, &size) >= 0) {
158*6a54128fSAndroid Build Coastguard Worker *retblocks = size64 * size / blocksize;
159*6a54128fSAndroid Build Coastguard Worker goto out;
160*6a54128fSAndroid Build Coastguard Worker }
161*6a54128fSAndroid Build Coastguard Worker #endif
162*6a54128fSAndroid Build Coastguard Worker
163*6a54128fSAndroid Build Coastguard Worker #ifdef BLKGETSIZE64
164*6a54128fSAndroid Build Coastguard Worker {
165*6a54128fSAndroid Build Coastguard Worker int valid_blkgetsize64 = 1;
166*6a54128fSAndroid Build Coastguard Worker #ifdef __linux__
167*6a54128fSAndroid Build Coastguard Worker struct utsname ut;
168*6a54128fSAndroid Build Coastguard Worker
169*6a54128fSAndroid Build Coastguard Worker if ((uname(&ut) == 0) &&
170*6a54128fSAndroid Build Coastguard Worker ((ut.release[0] == '2') && (ut.release[1] == '.') &&
171*6a54128fSAndroid Build Coastguard Worker (ut.release[2] < '6') && (ut.release[3] == '.')))
172*6a54128fSAndroid Build Coastguard Worker valid_blkgetsize64 = 0;
173*6a54128fSAndroid Build Coastguard Worker #endif
174*6a54128fSAndroid Build Coastguard Worker if (valid_blkgetsize64 &&
175*6a54128fSAndroid Build Coastguard Worker ioctl(fd, BLKGETSIZE64, &size64) >= 0) {
176*6a54128fSAndroid Build Coastguard Worker *retblocks = size64 / blocksize;
177*6a54128fSAndroid Build Coastguard Worker goto out;
178*6a54128fSAndroid Build Coastguard Worker }
179*6a54128fSAndroid Build Coastguard Worker }
180*6a54128fSAndroid Build Coastguard Worker #endif /* BLKGETSIZE64 */
181*6a54128fSAndroid Build Coastguard Worker
182*6a54128fSAndroid Build Coastguard Worker #ifdef BLKGETSIZE
183*6a54128fSAndroid Build Coastguard Worker {
184*6a54128fSAndroid Build Coastguard Worker unsigned long size;
185*6a54128fSAndroid Build Coastguard Worker
186*6a54128fSAndroid Build Coastguard Worker if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
187*6a54128fSAndroid Build Coastguard Worker *retblocks = size / (blocksize / 512);
188*6a54128fSAndroid Build Coastguard Worker goto out;
189*6a54128fSAndroid Build Coastguard Worker }
190*6a54128fSAndroid Build Coastguard Worker }
191*6a54128fSAndroid Build Coastguard Worker #endif
192*6a54128fSAndroid Build Coastguard Worker
193*6a54128fSAndroid Build Coastguard Worker #ifdef FDGETPRM
194*6a54128fSAndroid Build Coastguard Worker {
195*6a54128fSAndroid Build Coastguard Worker struct floppy_struct this_floppy;
196*6a54128fSAndroid Build Coastguard Worker
197*6a54128fSAndroid Build Coastguard Worker if (ioctl(fd, FDGETPRM, &this_floppy) >= 0) {
198*6a54128fSAndroid Build Coastguard Worker *retblocks = this_floppy.size / (blocksize / 512);
199*6a54128fSAndroid Build Coastguard Worker goto out;
200*6a54128fSAndroid Build Coastguard Worker }
201*6a54128fSAndroid Build Coastguard Worker }
202*6a54128fSAndroid Build Coastguard Worker #endif
203*6a54128fSAndroid Build Coastguard Worker
204*6a54128fSAndroid Build Coastguard Worker #ifdef HAVE_SYS_DISKLABEL_H
205*6a54128fSAndroid Build Coastguard Worker {
206*6a54128fSAndroid Build Coastguard Worker int part;
207*6a54128fSAndroid Build Coastguard Worker struct disklabel lab;
208*6a54128fSAndroid Build Coastguard Worker struct partition *pp;
209*6a54128fSAndroid Build Coastguard Worker char ch;
210*6a54128fSAndroid Build Coastguard Worker
211*6a54128fSAndroid Build Coastguard Worker #if defined(DIOCGMEDIASIZE)
212*6a54128fSAndroid Build Coastguard Worker {
213*6a54128fSAndroid Build Coastguard Worker off_t ms;
214*6a54128fSAndroid Build Coastguard Worker u_int bs;
215*6a54128fSAndroid Build Coastguard Worker if (ioctl(fd, DIOCGMEDIASIZE, &ms) >= 0) {
216*6a54128fSAndroid Build Coastguard Worker *retblocks = ms / blocksize;
217*6a54128fSAndroid Build Coastguard Worker goto out;
218*6a54128fSAndroid Build Coastguard Worker }
219*6a54128fSAndroid Build Coastguard Worker }
220*6a54128fSAndroid Build Coastguard Worker #elif defined(DIOCGDINFO)
221*6a54128fSAndroid Build Coastguard Worker /* old disklabel interface */
222*6a54128fSAndroid Build Coastguard Worker part = strlen(file) - 1;
223*6a54128fSAndroid Build Coastguard Worker if (part >= 0) {
224*6a54128fSAndroid Build Coastguard Worker ch = file[part];
225*6a54128fSAndroid Build Coastguard Worker if (isdigit(ch))
226*6a54128fSAndroid Build Coastguard Worker part = 0;
227*6a54128fSAndroid Build Coastguard Worker else if (ch >= 'a' && ch <= 'h')
228*6a54128fSAndroid Build Coastguard Worker part = ch - 'a';
229*6a54128fSAndroid Build Coastguard Worker else
230*6a54128fSAndroid Build Coastguard Worker part = -1;
231*6a54128fSAndroid Build Coastguard Worker }
232*6a54128fSAndroid Build Coastguard Worker if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) {
233*6a54128fSAndroid Build Coastguard Worker pp = &lab.d_partitions[part];
234*6a54128fSAndroid Build Coastguard Worker if (pp->p_size) {
235*6a54128fSAndroid Build Coastguard Worker *retblocks = pp->p_size / (blocksize / 512);
236*6a54128fSAndroid Build Coastguard Worker goto out;
237*6a54128fSAndroid Build Coastguard Worker }
238*6a54128fSAndroid Build Coastguard Worker }
239*6a54128fSAndroid Build Coastguard Worker #endif /* defined(DIOCG*) */
240*6a54128fSAndroid Build Coastguard Worker }
241*6a54128fSAndroid Build Coastguard Worker #endif /* HAVE_SYS_DISKLABEL_H */
242*6a54128fSAndroid Build Coastguard Worker
243*6a54128fSAndroid Build Coastguard Worker {
244*6a54128fSAndroid Build Coastguard Worker ext2fs_struct_stat st;
245*6a54128fSAndroid Build Coastguard Worker
246*6a54128fSAndroid Build Coastguard Worker if (ext2fs_fstat(fd, &st) == 0)
247*6a54128fSAndroid Build Coastguard Worker if (S_ISREG(st.st_mode)) {
248*6a54128fSAndroid Build Coastguard Worker *retblocks = st.st_size / blocksize;
249*6a54128fSAndroid Build Coastguard Worker goto out;
250*6a54128fSAndroid Build Coastguard Worker }
251*6a54128fSAndroid Build Coastguard Worker }
252*6a54128fSAndroid Build Coastguard Worker
253*6a54128fSAndroid Build Coastguard Worker /*
254*6a54128fSAndroid Build Coastguard Worker * OK, we couldn't figure it out by using a specialized ioctl,
255*6a54128fSAndroid Build Coastguard Worker * which is generally the best way. So do binary search to
256*6a54128fSAndroid Build Coastguard Worker * find the size of the partition.
257*6a54128fSAndroid Build Coastguard Worker */
258*6a54128fSAndroid Build Coastguard Worker low = 0;
259*6a54128fSAndroid Build Coastguard Worker for (high = 1024; valid_offset(fd, high); high *= 2)
260*6a54128fSAndroid Build Coastguard Worker low = high;
261*6a54128fSAndroid Build Coastguard Worker while (low < high - 1) {
262*6a54128fSAndroid Build Coastguard Worker const ext2_loff_t mid = (low + high) / 2;
263*6a54128fSAndroid Build Coastguard Worker
264*6a54128fSAndroid Build Coastguard Worker if (valid_offset (fd, mid))
265*6a54128fSAndroid Build Coastguard Worker low = mid;
266*6a54128fSAndroid Build Coastguard Worker else
267*6a54128fSAndroid Build Coastguard Worker high = mid;
268*6a54128fSAndroid Build Coastguard Worker }
269*6a54128fSAndroid Build Coastguard Worker valid_offset(fd, 0);
270*6a54128fSAndroid Build Coastguard Worker size64 = low + 1;
271*6a54128fSAndroid Build Coastguard Worker *retblocks = size64 / blocksize;
272*6a54128fSAndroid Build Coastguard Worker out:
273*6a54128fSAndroid Build Coastguard Worker close(fd);
274*6a54128fSAndroid Build Coastguard Worker return rc;
275*6a54128fSAndroid Build Coastguard Worker }
276*6a54128fSAndroid Build Coastguard Worker
277*6a54128fSAndroid Build Coastguard Worker #endif /* WIN32 */
278*6a54128fSAndroid Build Coastguard Worker
ext2fs_get_device_size(const char * file,int blocksize,blk_t * retblocks)279*6a54128fSAndroid Build Coastguard Worker errcode_t ext2fs_get_device_size(const char *file, int blocksize,
280*6a54128fSAndroid Build Coastguard Worker blk_t *retblocks)
281*6a54128fSAndroid Build Coastguard Worker {
282*6a54128fSAndroid Build Coastguard Worker errcode_t retval;
283*6a54128fSAndroid Build Coastguard Worker blk64_t blocks;
284*6a54128fSAndroid Build Coastguard Worker
285*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_get_device_size2(file, blocksize, &blocks);
286*6a54128fSAndroid Build Coastguard Worker if (retval)
287*6a54128fSAndroid Build Coastguard Worker return retval;
288*6a54128fSAndroid Build Coastguard Worker if (blocks >= (1ULL << 32))
289*6a54128fSAndroid Build Coastguard Worker return EFBIG;
290*6a54128fSAndroid Build Coastguard Worker *retblocks = (blk_t) blocks;
291*6a54128fSAndroid Build Coastguard Worker return 0;
292*6a54128fSAndroid Build Coastguard Worker }
293*6a54128fSAndroid Build Coastguard Worker
294*6a54128fSAndroid Build Coastguard Worker #ifdef DEBUG
main(int argc,char ** argv)295*6a54128fSAndroid Build Coastguard Worker int main(int argc, char **argv)
296*6a54128fSAndroid Build Coastguard Worker {
297*6a54128fSAndroid Build Coastguard Worker blk64_t blocks;
298*6a54128fSAndroid Build Coastguard Worker int retval;
299*6a54128fSAndroid Build Coastguard Worker
300*6a54128fSAndroid Build Coastguard Worker if (argc < 2) {
301*6a54128fSAndroid Build Coastguard Worker fprintf(stderr, "Usage: %s device\n", argv[0]);
302*6a54128fSAndroid Build Coastguard Worker exit(1);
303*6a54128fSAndroid Build Coastguard Worker }
304*6a54128fSAndroid Build Coastguard Worker
305*6a54128fSAndroid Build Coastguard Worker retval = ext2fs_get_device_size2(argv[1], 1024, &blocks);
306*6a54128fSAndroid Build Coastguard Worker if (retval) {
307*6a54128fSAndroid Build Coastguard Worker com_err(argv[0], retval,
308*6a54128fSAndroid Build Coastguard Worker "while calling ext2fs_get_device_size");
309*6a54128fSAndroid Build Coastguard Worker exit(1);
310*6a54128fSAndroid Build Coastguard Worker }
311*6a54128fSAndroid Build Coastguard Worker printf("Device %s has %llu 1k blocks.\n", argv[1],
312*6a54128fSAndroid Build Coastguard Worker (unsigned long long) locks);
313*6a54128fSAndroid Build Coastguard Worker exit(0);
314*6a54128fSAndroid Build Coastguard Worker }
315*6a54128fSAndroid Build Coastguard Worker #endif
316