getsize.c revision 65f0aab98b20b5994a726ab90d355248bcddfffd
1dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org/* 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org * getsize.c --- get the size of a partition. 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org * 4dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * Copyright (C) 1995, 1995 Theodore Ts'o. 55de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org * 65de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org * %Begin-Header% 7dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * This file may be redistributed under the terms of the 8e31286d471eb2e656a1809383fa16b76053dd673machenbach@chromium.org * GNU Lesser General Public License. 9dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * %End-Header% 10dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org */ 11248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org 12dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#define _LARGEFILE_SOURCE 13dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#define _LARGEFILE64_SOURCE 14dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 15dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org/* include this before sys/queues.h! */ 16e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org#include "blkidP.h" 17e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org 18dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <stdio.h> 19dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#if HAVE_UNISTD_H 20dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <unistd.h> 21dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 225de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#if HAVE_ERRNO_H 23dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <errno.h> 24dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 25dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <fcntl.h> 26dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_SYS_IOCTL_H 27dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <sys/ioctl.h> 28dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 29dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_LINUX_FD_H 30dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <linux/fd.h> 31dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 32dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_SYS_DISKLABEL_H 33248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org#include <sys/disklabel.h> 34dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 35dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_SYS_DISK_H 36dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_SYS_QUEUE_H 37dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <sys/queue.h> /* for LIST_HEAD */ 38dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 39dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <sys/disk.h> 40dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 41dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef __linux__ 42dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <sys/utsname.h> 43dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 44dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#if HAVE_SYS_STAT_H 45dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#include <sys/stat.h> 46dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 47dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 48dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 49dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE) 50dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#define BLKGETSIZE _IO(0x12,96) /* return device size */ 51dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 52dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 53dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#if defined(__linux__) && defined(_IOR) && !defined(BLKGETSIZE64) 54dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */ 55dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 56dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 57dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef APPLE_DARWIN 58dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#define BLKGETSIZE DKIOCGETBLOCKCOUNT32 59dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif /* APPLE_DARWIN */ 60dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 61dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.orgstatic int valid_offset(int fd, blkid_loff_t offset) 62dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org{ 63dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org char ch; 64e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org 65e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org if (blkid_llseek(fd, offset, 0) < 0) 66e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org return 0; 67e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org if (read(fd, &ch, 1) < 1) 68e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org return 0; 69e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org return 1; 70e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org} 71e900018c7a2a695fde788911564da37535c7e736mstarzinger@chromium.org 72dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org/* 73dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * Returns the number of bytes in a partition 74dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org */ 75dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.orgblkid_loff_t blkid_get_dev_size(int fd) 76dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org{ 77dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org int valid_blkgetsize64 = 1; 78dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef __linux__ 79dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct utsname ut; 80dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 81dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org unsigned long long size64; 82dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org unsigned long size; 83dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org blkid_loff_t high, low; 84dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef FDGETPRM 85dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct floppy_struct this_floppy; 86dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 87dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_SYS_DISKLABEL_H 88dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org int part = -1; 89dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct disklabel lab; 90dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct partition *pp; 91dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org char ch; 92dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct stat st; 93dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif /* HAVE_SYS_DISKLABEL_H */ 94dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 95dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef DKIOCGETBLOCKCOUNT /* For Apple Darwin */ 96dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (ioctl(fd, DKIOCGETBLOCKCOUNT, &size64) >= 0) { 97dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if ((sizeof(blkid_loff_t) < sizeof(unsigned long long)) 98dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org && (size64 << 9 > 0xFFFFFFFF)) 99dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return 0; /* EFBIG */ 100dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return (blkid_loff_t) size64 << 9; 101dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org } 102dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 103dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 104dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef BLKGETSIZE64 105dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef __linux__ 106dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if ((uname(&ut) == 0) && 107dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org ((ut.release[0] == '2') && (ut.release[1] == '.') && 108dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org (ut.release[2] < '6') && (ut.release[3] == '.'))) 109dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org valid_blkgetsize64 = 0; 110dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 111dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (valid_blkgetsize64 && 112dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org ioctl(fd, BLKGETSIZE64, &size64) >= 0) { 113dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if ((sizeof(blkid_loff_t) < sizeof(unsigned long long)) 114dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org && ((size64) > 0xFFFFFFFF)) 115dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return 0; /* EFBIG */ 116dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return size64; 117dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org } 118dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 119dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 120dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef BLKGETSIZE 121dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (ioctl(fd, BLKGETSIZE, &size) >= 0) 122dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return (blkid_loff_t)size << 9; 123dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 124dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 125dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org/* tested on FreeBSD 6.1-RELEASE i386 */ 126dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef DIOCGMEDIASIZE 127dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (ioctl(fd, DIOCGMEDIASIZE, &size64) >= 0) 128dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return (off_t)size64; 129dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif /* DIOCGMEDIASIZE */ 130dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 131dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef FDGETPRM 132dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (ioctl(fd, FDGETPRM, &this_floppy) >= 0) 133dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return (blkid_loff_t)this_floppy.size << 9; 134dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 135dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_SYS_DISKLABEL_H 136dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org /* 137dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * This code works for FreeBSD 4.11 i386, except for the full device 138dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * (such as /dev/ad0). It doesn't work properly for newer FreeBSD 139dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * though. FreeBSD >= 5.0 should be covered by the DIOCGMEDIASIZE 140dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * above however. 141dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * 142dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * Note that FreeBSD >= 4.0 has disk devices as unbuffered (raw, 143dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * character) devices, so we need to check for S_ISCHR, too. 144dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org */ 145dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if ((fstat(fd, &st) >= 0) && (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode))) 146dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org part = st.st_rdev & 7; 147dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (part >= 0 && (ioctl(fd, DIOCGDINFO, (char *)&lab) >= 0)) { 148dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org pp = &lab.d_partitions[part]; 149dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (pp->p_size) 150dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return pp->p_size << 9; 151dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org } 152dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif /* HAVE_SYS_DISKLABEL_H */ 153dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org { 154dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef HAVE_FSTAT64 155dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct stat64 st; 156dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (fstat64(fd, &st) == 0) 157dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#else 158dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org struct stat st; 159dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (fstat(fd, &st) == 0) 160dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#endif 161248dd43badb99ffce44eae2d767cda3cefaad521machenbach@chromium.org if (S_ISREG(st.st_mode)) 162dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return st.st_size; 163dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org } 164dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 165dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 166dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org /* 167dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * OK, we couldn't figure it out by using a specialized ioctl, 168dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * which is generally the best way. So do binary search to 169dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org * find the size of the partition. 170dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org */ 171dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org low = 0; 172dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org for (high = 1024; valid_offset(fd, high); high *= 2) 173dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org low = high; 174dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org while (low < high - 1) 175dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org { 176dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org const blkid_loff_t mid = (low + high) / 2; 177dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 178dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (valid_offset(fd, mid)) 179dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org low = mid; 180dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org else 181dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org high = mid; 182dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org } 183dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return low + 1; 184dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org} 185dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 186dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org#ifdef TEST_PROGRAM 187dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.orgint main(int argc, char **argv) 188dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org{ 189dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org long long bytes; 190dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org int fd; 191dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 192dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if (argc < 2) { 193dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org fprintf(stderr, "Usage: %s device\n" 194dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org "Determine the size of a device\n", argv[0]); 195dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org return 1; 196dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org } 197dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 198dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org if ((fd = open(argv[1], O_RDONLY)) < 0) 199dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org perror(argv[0]); 200dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org 201dc94e19484d1700cb0ec22365444223e49a3ac1ejkummerow@chromium.org bytes = blkid_get_dev_size(fd); 202c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org printf("Device %s has %Ld 1k blocks.\n", argv[1], 203c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org (unsigned long long) bytes >> 10); 204c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org 205c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org return 0; 206c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org} 207c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org#endif 208c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org