Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Allow for the width of the scale factor (if required) when doing calculations on field-width.
Matthew Seaman committed 12 years ago
commit 1605f736df90360ad7f446733f7e3b849dd6f1ed
parent df97fc4
2 files changed +134 -37
modified libpkg/pkg_printf.c
@@ -1257,6 +1257,8 @@ human_number(struct sbuf *sbuf, int64_t number, struct percent_esc *p)
{
	double		 num;
	int		 sign;
+
	int		 width;
+
	int		 scale_width;
	int		 divisor;
	int		 scale;
	int		 precision;
@@ -1293,23 +1295,37 @@ human_number(struct sbuf *sbuf, int64_t number, struct percent_esc *p)
		num /= divisor;
	}

+
	if (scale == 0)
+
		scale_width = 0;
+
	else if (bin_scale)
+
		scale_width = 2;
+
	else
+
		scale_width = 1;
+

+
	if (p->width == 0)
+
		width = 0;
+
	else if (p->width <= scale_width)
+
		width = 1;
+
	else
+
		width = p->width - scale_width;
+

	if (num >= 100)
		precision = 0;
	else if (num >= 10) {
-
		if (p->width == 0 || p->width > 3)
+
		if (width == 0 || width > 3)
			precision = 1;
		else
			precision = 0;
	} else {
-
		if (p->width == 0 || p->width > 3)
+
		if (width == 0 || width > 3)
			precision = 2;
-
		else if (p->width == 3)
+
		else if (width == 3)
			precision = 1;
		else
			precision = 0;
	}

-
	sbuf_printf(sbuf, format, p->width, num * sign, precision);
+
	sbuf_printf(sbuf, format, width, num * sign, precision);

	if (scale > 0)
		sbuf_printf(sbuf, "%s", 
modified tests/pkg_printf/test.c
@@ -193,45 +193,126 @@ ATF_TC_BODY(human_number, tc)
		{ 8549802417586176,    "7.59Pi", 0, PP_ALTERNATE_FORM2, },
		{ 1313249651341236633, "1.14Ei", 0, PP_ALTERNATE_FORM2, },

-
		{ 1234567, "1M",           1, 0, },
-
		{ 1234567, " 1M",          2, 0, },
-
		{ 1234567, "1.2M",         3, 0, },
-
		{ 1234567, "1.23M",        4, 0, },
-
		{ 1234567, " 1.23M",       5, 0, },
-
		{ 1234567, "  1.23M",      6, 0, },
-
		{ 1234567, "   1.23M",     7, 0, },
-
		{ 1234567, "    1.23M",    8, 0, },
-
		{ 1234567, "     1.23M",   9, 0, },

+
		{ 123,     "123",          0, 0, },
+
		{ 123,     "123",          1, 0, },
+
		{ 123,     "123",          2, 0, },
+
		{ 123,     "123",          3, 0, },
+
		{ 123,     " 123",         4, 0, },
+
		{ 123,     "  123",        5, 0, },
+
		{ 123,     "   123",       6, 0, },
+
		{ 123,     "    123",      7, 0, },
+
		{ 123,     "     123",     8, 0, },
+
		{ 123,     "      123",    9, 0, },
+

+
		{ 123,     " 123",         0, PP_SPACE_FOR_PLUS, },
+
		{ 123,     " 123",         1, PP_SPACE_FOR_PLUS, },
+
		{ 123,     " 123",         2, PP_SPACE_FOR_PLUS, },
+
		{ 123,     " 123",         3, PP_SPACE_FOR_PLUS, },
+
		{ 123,     " 123",         4, PP_SPACE_FOR_PLUS, },
+
		{ 123,     "  123",        5, PP_SPACE_FOR_PLUS, },
+
		{ 123,     "   123",       6, PP_SPACE_FOR_PLUS, },
+
		{ 123,     "    123",      7, PP_SPACE_FOR_PLUS, },
+
		{ 123,     "     123",     8, PP_SPACE_FOR_PLUS, },
+
		{ 123,     "      123",    9, PP_SPACE_FOR_PLUS, },
+

+
		{ -123,    "-123",         0, 0, },
+
		{ -123,    "-123",         1, 0, },
+
		{ -123,    "-123",         2, 0, },
+
		{ -123,    "-123",         3, 0, },
+
		{ -123,    "-123",         4, 0, },
+
		{ -123,    " -123",        5, 0, },
+
		{ -123,    "  -123",       6, 0, },
+
		{ -123,    "   -123",      7, 0, },
+
		{ -123,    "    -123",     8, 0, },
+
		{ -123,    "     -123",    9, 0, },
+

+
		{ 123,     "123",          0, PP_ALTERNATE_FORM2, },
+
		{ 123,     "123",          1, PP_ALTERNATE_FORM2, },
+
		{ 123,     "123",          2, PP_ALTERNATE_FORM2, },
+
		{ 123,     "123",          3, PP_ALTERNATE_FORM2, },
+
		{ 123,     " 123",         4, PP_ALTERNATE_FORM2, },
+
		{ 123,     "  123",        5, PP_ALTERNATE_FORM2, },
+
		{ 123,     "   123",       6, PP_ALTERNATE_FORM2, },
+
		{ 123,     "    123",      7, PP_ALTERNATE_FORM2, },
+
		{ 123,     "     123",     8, PP_ALTERNATE_FORM2, },
+
		{ 123,     "      123",    9, PP_ALTERNATE_FORM2, },
+

+
		{ 1234567, "1.23M",        0, 0, },
+
		{ 1234567, "1M",           1, 0, },
+
		{ 1234567, "1M",           2, 0, },
+
		{ 1234567, " 1M",          3, 0, },
+
		{ 1234567, "1.2M",         4, 0, },
+
		{ 1234567, "1.23M",        5, 0, },
+
		{ 1234567, " 1.23M",       6, 0, },
+
		{ 1234567, "  1.23M",      7, 0, },
+
		{ 1234567, "   1.23M",     8, 0, },
+
		{ 1234567, "    1.23M",    9, 0, },
+

+
		{ 12345678, "12.3M",       0, 0, },
		{ 12345678, "12M",         1, 0, },
		{ 12345678, "12M",         2, 0, },
-
		{ 12345678, " 12M",        3, 0, },
-
		{ 12345678, "12.3M",       4, 0, },
-
		{ 12345678, " 12.3M",      5, 0, },
-
		{ 12345678, "  12.3M",     6, 0, },
-
		{ 12345678, "   12.3M",    7, 0, },
-
		{ 12345678, "    12.3M",   8, 0, },
-
		{ 12345678, "     12.3M",  9, 0, },
-

+
		{ 12345678, "12M",         3, 0, },
+
		{ 12345678, " 12M",        4, 0, },
+
		{ 12345678, "12.3M",       5, 0, },
+
		{ 12345678, " 12.3M",      6, 0, },
+
		{ 12345678, "  12.3M",     7, 0, },
+
		{ 12345678, "   12.3M",    8, 0, },
+
		{ 12345678, "    12.3M",   9, 0, },
+

+
		{ 123456789, "123M",       0, 0, },
		{ 123456789, "123M",       1, 0, },
		{ 123456789, "123M",       2, 0, },
		{ 123456789, "123M",       3, 0, },
-
		{ 123456789, " 123M",      4, 0, },
-
		{ 123456789, "  123M",     5, 0, },
-
		{ 123456789, "   123M",    6, 0, },
-
		{ 123456789, "    123M",   7, 0, },
-
		{ 123456789, "     123M",  8, 0, },
-
		{ 123456789, "      123M", 9, 0, },
-

-
		{  1234567, "1.23M",   0, PP_ALTERNATE_FORM1, },
-
		{  1234567, "1.18Mi",  0, PP_ALTERNATE_FORM2, },
-
		{  1234567, "1.23  M", 6, PP_LEFT_ALIGN, },
-
		{  1234567, "+1.23M",  0, PP_EXPLICIT_PLUS, },
-
		{ -1234567, "-1.23M",  0, PP_EXPLICIT_PLUS, },
-
		{  1234567, " 1.23M",  0, PP_SPACE_FOR_PLUS, },
-
		{ -1234567, "-1.23M",  0, PP_SPACE_FOR_PLUS, },
-
		{  1234567, "001.23M", 6, PP_ZERO_PAD, },
-
		{  1234567, "1.23M",   0, PP_THOUSANDS_SEP, },
+
		{ 123456789, "123M",       4, 0, },
+
		{ 123456789, " 123M",      5, 0, },
+
		{ 123456789, "  123M",     6, 0, },
+
		{ 123456789, "   123M",    7, 0, },
+
		{ 123456789, "    123M",   8, 0, },
+
		{ 123456789, "     123M",  9, 0, },
+

+
		{ 1234567, "1.18Mi",       0, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "1Mi",          1, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "1Mi",          2, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "1Mi",          3, PP_ALTERNATE_FORM2, },
+
		{ 1234567, " 1Mi",         4, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "1.2Mi",        5, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "1.18Mi",       6, PP_ALTERNATE_FORM2, },
+
		{ 1234567, " 1.18Mi",      7, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "  1.18Mi",     8, PP_ALTERNATE_FORM2, },
+
		{ 1234567, "   1.18Mi",    9, PP_ALTERNATE_FORM2, },
+

+
		{ 12345678, "11.8Mi",      0, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "12Mi",        1, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "12Mi",        2, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "12Mi",        3, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "12Mi",        4, PP_ALTERNATE_FORM2, },
+
		{ 12345678, " 12Mi",       5, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "11.8Mi",      6, PP_ALTERNATE_FORM2, },
+
		{ 12345678, " 11.8Mi",     7, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "  11.8Mi",    8, PP_ALTERNATE_FORM2, },
+
		{ 12345678, "   11.8Mi",   9, PP_ALTERNATE_FORM2, },
+

+
		{ 123456789, "118Mi",      0, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "118Mi",      1, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "118Mi",      2, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "118Mi",      3, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "118Mi",      4, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "118Mi",      5, PP_ALTERNATE_FORM2, },
+
		{ 123456789, " 118Mi",     6, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "  118Mi",    7, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "   118Mi",   8, PP_ALTERNATE_FORM2, },
+
		{ 123456789, "    118Mi",  9, PP_ALTERNATE_FORM2, },
+

+
		{  1234567, "1.23M",  0, PP_ALTERNATE_FORM1, },
+
		{  1234567, "1.18Mi", 0, PP_ALTERNATE_FORM2, },
+
		{  1234567, "1.23 M", 6, PP_LEFT_ALIGN, },
+
		{  1234567, "+1.23M", 0, PP_EXPLICIT_PLUS, },
+
		{ -1234567, "-1.23M", 0, PP_EXPLICIT_PLUS, },
+
		{  1234567, " 1.23M", 0, PP_SPACE_FOR_PLUS, },
+
		{ -1234567, "-1.23M", 0, PP_SPACE_FOR_PLUS, },
+
		{  1234567, "01.23M", 6, PP_ZERO_PAD, },
+
		{  1234567, "1.23M",  0, PP_THOUSANDS_SEP, },
		{  1023,"1023", 0, PP_ALTERNATE_FORM2|PP_THOUSANDS_SEP, },

		{ -1,                  NULL,     0, 0, },