--- 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; +}