Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=c04889bcbb77613b2bb991eb7637dc4fe5fd72e2

commit c04889bcbb77613b2bb991eb7637dc4fe5fd72e2
Author: James Buren <[email protected]>
Date:   Wed Aug 15 14:02:23 2012 -0500

add function for converting raw size to human readable string

diff --git a/fwsetup.h b/fwsetup.h
index 5aa5030..dace6d6 100644
--- a/fwsetup.h
+++ b/fwsetup.h
@@ -128,6 +128,7 @@ extern void *malloc0(size_t n);
extern pid_t execute(const char *cmd);
extern void eprintf(const char *fmt,...) __attribute__((format(printf,1,2)));
extern void snprintf_append(char *s,size_t size,const char *fmt,...) 
__attribute__((format(printf,3,4)));
+extern char *size_to_string(unsigned long long n);
extern unsigned long long string_to_size(const char *s);
extern void *list_append(void *list,size_t n);
extern void *list_find_start(void *list);
diff --git a/utility.c b/utility.c
index bfc6902..626c06a 100644
--- a/utility.c
+++ b/utility.c
@@ -198,6 +198,58 @@ extern void snprintf_append(char *s,size_t size,const char 
*fmt,...)
va_end(args);
}

+extern char *size_to_string(unsigned long long n)
+{
+  ASSERT_ARGS(n == 0,0);
+
+  unsigned long long divisor = 0;
+  const char *suffix = 0;
+  long double ld = 0;
+  char buf[LINE_MAX] = {0};
+
+  if(n >= EXBIBYTE)
+  {
+    divisor = EXBIBYTE;
+    suffix = "EiB";
+  }
+  else if(n >= PEBIBYTE)
+  {
+    divisor = PEBIBYTE;
+    suffix = "PiB";
+  }
+  else if(n >= TEBIBYTE)
+  {
+    divisor = TEBIBYTE;
+    suffix = "TiB";
+  }
+  else if(n >= GIBIBYTE)
+  {
+    divisor = GIBIBYTE;
+    suffix = "GiB";
+  }
+  else if(n >= MEBIBYTE)
+  {
+    divisor = MEBIBYTE;
+    suffix = "MiB";
+  }
+  else if(n >= KIBIBYTE)
+  {
+    divisor = KIBIBYTE;
+    suffix = "KiB";
+  }
+  else
+  {
+    divisor = 1;
+    suffix = "BiB";
+  }
+
+  ld = (long double) n / divisor;
+
+  snprintf(buf,sizeof(buf),"%.2LF%s",ld,suffix);
+
+  return strdup(buf);
+}
+
extern unsigned long long string_to_size(const char *s)
{
ASSERT_ARGS(s == 0,0);
@@ -207,7 +259,7 @@ extern unsigned long long string_to_size(const char *s)

errno = 0;

-  n = strtoull(s,&suffix);
+  n = strtoull(s,&suffix,10);

if(errno != 0)
{
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to