Sophie

Sophie

distrib > Mandriva > 2009.1 > x86_64 > by-pkgid > cdea2f9fc6ee547d30a2e7e1eacefefb > files > 3

lxtask-0.1-3mdv2009.1.src.rpm

--- trunk/lxtask/src/utils.c	2008/04/25 19:03:43	584
+++ trunk/lxtask/src/utils.c	2008/12/16 14:58:17	1081
@@ -31,14 +31,14 @@
     GtkWidget* dlg;
     char* msg;
     va_list ap;
-    va_start(ap, msg);
+    va_start(ap, format);
     msg = g_strdup_vprintf( format, ap );
     va_end(ap);
 
     dlg = gtk_message_dialog_new_with_markup( NULL, GTK_DIALOG_MODAL,
-                                                                            GTK_MESSAGE_ERROR,
-                                                                            GTK_BUTTONS_OK,
-                                                                            msg );
+                                              GTK_MESSAGE_ERROR,
+                                              GTK_BUTTONS_OK,
+                                              "%s", msg );
     g_free( msg );
     gtk_window_set_title( (GtkWindow*)dlg, _("Error") );
     gtk_dialog_run( (GtkDialog*)dlg );
@@ -50,9 +50,9 @@
     GtkWidget* dlg;
     int ret;
     dlg = gtk_message_dialog_new_with_markup( NULL, GTK_DIALOG_MODAL,
-                                                                            GTK_MESSAGE_QUESTION,
-                                                                            GTK_BUTTONS_YES_NO,
-                                                                            question );
+                                              GTK_MESSAGE_QUESTION,
+                                              GTK_BUTTONS_YES_NO,
+                                              "%s", question );
     gtk_window_set_title( (GtkWindow*)dlg, _("Confirm") );
     ret = gtk_dialog_run( (GtkDialog*)dlg );
     gtk_widget_destroy( dlg );
@@ -60,3 +60,67 @@
     return ret == GTK_RESPONSE_YES;
 }
 
+char* size_to_string( char* buf, guint64 size )
+{
+    char * unit;
+    /* guint point; */
+    gfloat val;
+
+    /*
+       FIXME: Is floating point calculation slower than integer division?
+              Some profiling is needed here.
+    */
+    if ( size > ( ( guint64 ) 1 ) << 30 )
+    {
+        if ( size > ( ( guint64 ) 1 ) << 40 )
+        {
+            /*
+            size /= ( ( ( guint64 ) 1 << 40 ) / 10 );
+            point = ( guint ) ( size % 10 );
+            size /= 10;
+            */
+            val = ((gfloat)size) / ( ( guint64 ) 1 << 40 );
+            unit = "TB";
+        }
+        else
+        {
+            /*
+            size /= ( ( 1 << 30 ) / 10 );
+            point = ( guint ) ( size % 10 );
+            size /= 10;
+            */
+            val = ((gfloat)size) / ( ( guint64 ) 1 << 30 );
+            unit = "GB";
+        }
+    }
+    else if ( size > ( 1 << 20 ) )
+    {
+        /*
+        size /= ( ( 1 << 20 ) / 10 );
+        point = ( guint ) ( size % 10 );
+        size /= 10;
+        */
+        val = ((gfloat)size) / ( ( guint64 ) 1 << 20 );
+        unit = "MB";
+    }
+    else if ( size > ( 1 << 10 ) )
+    {
+        /*
+        size /= ( ( 1 << 10 ) / 10 );
+        point = size % 10;
+        size /= 10;
+        */
+        val = ((gfloat)size) / ( ( guint64 ) 1 << 10 );
+        unit = "KB";
+    }
+    else
+    {
+        unit = size > 1 ? "Bytes" : "Byte";
+        sprintf( buf, "%u %s", ( guint ) size, unit );
+        return buf;
+    }
+    /* sprintf( buf, "%llu.%u %s", size, point, unit ); */
+    sprintf( buf, "%.1f %s", val, unit );
+
+    return buf;
+}