char** pakfire_split_string(const char* s, char delim);
char* pakfire_string_join(char** list, const char* delim);
-int pakfire_format_size(char* dst, size_t length, double value);
+#define pakfire_format_size(dst, value) \
+ __pakfire_format_size(dst, sizeof(dst) - 1, value)
+int __pakfire_format_size(char* dst, size_t length, double value);
int pakfire_format_speed(char* dst, size_t length, double value);
char* pakfire_format_date(time_t t);
static void pakfire_package_dump_add_line_size(char** str, const char* key, size_t size) {
char buffer[128];
- pakfire_format_size(buffer, sizeof(buffer) - 1, size);
+
+ // Format size in human-readable format
+ int r = pakfire_format_size(buffer, size);
+ if (r < 0)
+ return;
pakfire_package_dump_add_line(str, key, buffer);
}
struct pakfire_progressbar_widget* widget, unsigned int width, void* data) {
char buffer[16];
- int r = pakfire_format_size(buffer, sizeof(buffer) - 1, p->value);
+ int r = pakfire_format_size(buffer, p->value);
if (r < 0)
return NULL;
struct pakfire_repo* repo = pakfire_package_get_repo(pkg);
// Format size
- pakfire_format_size(size, sizeof(size) - 1, pakfire_package_get_size(pkg));
+ int r = pakfire_format_size(size, pakfire_package_get_size(pkg));
+ if (r < 0)
+ return;
pakfire_transaction_add_line(lines, width,
pakfire_package_get_name(pkg),
static void pakfire_transaction_add_usage_line(char*** lines, size_t width,
const char* headline, ssize_t size) {
char buffer[128];
- pakfire_format_size(buffer, sizeof(buffer) - 1, size);
+
+ int r = pakfire_format_size(buffer, size);
+ if (r < 0)
+ return;
pakfire_transaction_append_line(lines, "%-21s: %s\n", headline, buffer);
}
return string;
}
-int pakfire_format_size(char* dst, size_t length, double value) {
+int __pakfire_format_size(char* dst, size_t length, double value) {
const char* units[] = {
"%.0f ",
"%.0fk",
return EXIT_FAILURE;
}
+static int test_format_size(const struct test* t) {
+ char buffer[128];
+ char small_buffer[2];
+ int r;
+
+ ASSERT(pakfire_format_size(buffer, 0) == 2);
+ ASSERT_STRING_EQUALS(buffer, "0 ");
+
+ ASSERT(pakfire_format_size(buffer, 1024) == 2);
+ ASSERT_STRING_EQUALS(buffer, "1k");
+
+ ASSERT(pakfire_format_size(buffer, 1024 * 1024) == 4);
+ ASSERT_STRING_EQUALS(buffer, "1.0M");
+
+ ASSERT(pakfire_format_size(small_buffer, 0) == 2);
+ ASSERT_STRING_EQUALS(small_buffer, "");
+
+ return EXIT_SUCCESS;
+
+FAIL:
+ return EXIT_FAILURE;
+}
+
int main(int argc, char** argv) {
testsuite_add_test(test_basename);
testsuite_add_test(test_dirname);
testsuite_add_test(test_string_replace);
testsuite_add_test(test_string_split);
testsuite_add_test(test_string_join);
+ testsuite_add_test(test_format_size);
return testsuite_run();
}