libc: minimal: Add support for %F conversion specifiers

For some reason %F wasn't supported initially.  Its simple enough to
handle the case difference in infinity and NaN handling to add support
for %F.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
diff --git a/lib/libc/minimal/source/stdout/prf.c b/lib/libc/minimal/source/stdout/prf.c
index 1bb8802..47bc0b8 100644
--- a/lib/libc/minimal/source/stdout/prf.c
+++ b/lib/libc/minimal/source/stdout/prf.c
@@ -229,18 +229,34 @@
 			*buf++ = '-';
 		}
 		if (!fract) {
-			*buf++ = 'i';
-			*buf++ = 'n';
-			*buf++ = 'f';
+			if (isupper(c)) {
+				*buf++ = 'I';
+				*buf++ = 'N';
+				*buf++ = 'F';
+			} else {
+				*buf++ = 'i';
+				*buf++ = 'n';
+				*buf++ = 'f';
+			}
 		} else {
-			*buf++ = 'n';
-			*buf++ = 'a';
-			*buf++ = 'n';
+			if (isupper(c)) {
+				*buf++ = 'N';
+				*buf++ = 'A';
+				*buf++ = 'N';
+			} else {
+				*buf++ = 'n';
+				*buf++ = 'a';
+				*buf++ = 'n';
+			}
 		}
 		*buf = 0;
 		return buf - start;
 	}
 
+	if (c == 'F') {
+		c = 'f';
+	}
+
 	if ((exp | fract) != 0) {
 		exp -= (1023 - 1);	/* +1 since .1 vs 1. */
 		fract |= HIGHBIT64;
@@ -545,6 +561,7 @@
 			case 'e':
 			case 'E':
 			case 'f':
+			case 'F':
 			case 'g':
 			case 'G':
 				/* standard platforms which supports double */
diff --git a/tests/lib/sprintf/src/main.c b/tests/lib/sprintf/src/main.c
index b7e38b0..fc6e544 100644
--- a/tests/lib/sprintf/src/main.c
+++ b/tests/lib/sprintf/src/main.c
@@ -77,24 +77,40 @@
 	zassert_true((strcmp(buffer, "inf") == 0),
 		     "sprintf(inf) - incorrect output '%s'\n", buffer);
 
+	sprintf(buffer, "%F", var.d);
+	zassert_true((strcmp(buffer, "INF") == 0),
+		     "sprintf(INF) - incorrect output '%s'\n", buffer);
+
 	var.u1 = 0x00000000;
 	var.u2 = 0xfff00000;    /* Bit pattern for -INF (double) */
 	sprintf(buffer, "%f", var.d);
 	zassert_true((strcmp(buffer, "-inf") == 0),
 		     "sprintf(-INF) - incorrect output '%s'\n", buffer);
 
+	sprintf(buffer, "%F", var.d);
+	zassert_true((strcmp(buffer, "-INF") == 0),
+		     "sprintf(-INF) - incorrect output '%s'\n", buffer);
+
 	var.u1 = 0x00000000;
 	var.u2 = 0x7ff80000;    /* Bit pattern for NaN (double) */
 	sprintf(buffer, "%f", var.d);
 	zassert_true((strcmp(buffer, "nan") == 0),
 		     "sprintf(nan) - incorrect output '%s'\n", buffer);
 
+	sprintf(buffer, "%F", var.d);
+	zassert_true((strcmp(buffer, "NAN") == 0),
+		     "sprintf(NAN) - incorrect output '%s'\n", buffer);
+
 	var.u1 = 0x00000000;
 	var.u2 = 0xfff80000;    /* Bit pattern for -NaN (double) */
 	sprintf(buffer, "%f", var.d);
 	zassert_true((strcmp(buffer, "-nan") == 0),
 		     "sprintf(-nan) - incorrect output '%s'\n", buffer);
 
+	sprintf(buffer, "%F", var.d);
+	zassert_true((strcmp(buffer, "-NAN") == 0),
+		     "sprintf(-NAN) - incorrect output '%s'\n", buffer);
+
 	var.d = 1.0;
 	sprintf(buffer, "%f", var.d);
 	zassert_true((strcmp(buffer, "1.000000") == 0),