@ -39,25 +39,30 @@ int display_options (void)
}
/*
* print sizes as " xxx k B " , " xxx.y k B " , " xxx MB " , " xxx.y MB " ,
* xxx GB , or xxx . y GB as needed ; allow for optional trailing string
* print sizes as " xxx Ki B " , " xxx.y Ki B " , " xxx Mi B " , " xxx.y Mi B " ,
* xxx Gi B , xxx . y Gi B , etc as needed ; allow for optional trailing string
* ( like " \n " )
*/
void print_size ( phys_size_t size , const char * s )
void print_size ( unsigned long long size , const char * s )
{
unsigned long m = 0 , n ;
unsigned long long d = 1 < < 30 ; /* 1 GB */
char c = ' G ' ;
if ( size < d ) { /* try MB */
c = ' M ' ;
d = 1 < < 20 ;
if ( size < d ) { /* print in kB */
c = ' k ' ;
d = 1 < < 10 ;
static const char names [ ] = { ' E ' , ' P ' , ' T ' , ' G ' , ' M ' , ' K ' } ;
unsigned long long d = 1ULL < < ( 10 * ARRAY_SIZE ( names ) ) ;
char c = 0 ;
unsigned int i ;
for ( i = 0 ; i < ARRAY_SIZE ( names ) ; i + + , d > > = 10 ) {
if ( size > = d ) {
c = names [ i ] ;
break ;
}
}
if ( ! c ) {
printf ( " %llu Bytes%s " , size , s ) ;
return ;
}
n = size / d ;
/* If there's a remainder, deal with it */
@ -70,11 +75,11 @@ void print_size (phys_size_t size, const char *s)
}
}
printf ( " %2ld " , n ) ;
printf ( " %lu " , n ) ;
if ( m ) {
printf ( " .%ld " , m ) ;
}
printf ( " %cB%s " , c , s ) ;
printf ( " %ci B%s " , c , s ) ;
}
/*