diff src/oct-stream.cc @ 4303:e15a96673976

[project @ 2003-01-23 03:03:08 by jwe]
author jwe
date Thu, 23 Jan 2003 03:03:08 +0000
parents 977f977fb2c3
children 98e65d1728a1
line wrap: on
line diff
--- a/src/oct-stream.cc
+++ b/src/oct-stream.cc
@@ -2298,44 +2298,67 @@
 
 		  if (val_cache)
 		    {
-		      switch (elt->type)
+		      if ((xisnan (val) || xisinf (val)
+			   && (elt->type == 'd'
+			       || elt->type == 'i'
+			       || elt->type == 'c'
+			       || elt->type == 'o'
+			       || elt->type == 'x'
+			       || elt->type == 'X'
+			       || elt->type == 'u')))
+			{
+			  std::string tfmt = fmt;
+
+			  tfmt.replace (tfmt.rfind (elt->type), 1, 1, 's');
+
+			  const char *tval = xisinf (val)
+			    ? (val < 0 ? "-Inf" : "Inf") : "NaN";
+
+			  retval += do_printf_conv (os, tfmt.c_str (),
+						    nsa, sa_1, sa_2, tval);
+			}
+		      else
 			{
-			case 'd': case 'i': case 'c':
-			  {
-			    if (elt->modifier == 'l')
-			      retval += do_printf_conv
-				(os, fmt, nsa, sa_1, sa_2,
-				 static_cast<long int> (val));
-			    else
-			      retval += do_printf_conv
-				(os, fmt, nsa, sa_1, sa_2,
-				 static_cast<int> (val));
-			  }
-			  break;
-
-			case 'o': case 'x': case 'X': case 'u':
-			  {
-			    if (elt->modifier == 'l')
-			      retval += do_printf_conv
-				(os, fmt, nsa, sa_1, sa_2,
-				 static_cast<unsigned long int> (val));
-			    else
-			      retval += do_printf_conv
-				(os, fmt, nsa, sa_1, sa_2,
-				 static_cast<unsigned int> (val));
-			  }
-			  break;
-
-			case 'f': case 'e': case 'E':
-			case 'g': case 'G':
-			  retval
-			    += do_printf_conv (os, fmt, nsa, sa_1, sa_2, val);
-			  break;
-
-			default:
-			  error ("fprintf: invalid format specifier");
-			  return -1;
-			  break;
+			  switch (elt->type)
+			    {
+			    case 'd': case 'i': case 'c':
+			      {
+				if (elt->modifier == 'l')
+				  retval += do_printf_conv
+				    (os, fmt, nsa, sa_1, sa_2,
+				     static_cast<long int> (val));
+				else
+				  retval += do_printf_conv
+				    (os, fmt, nsa, sa_1, sa_2,
+				     static_cast<int> (val));
+			      }
+			      break;
+
+			    case 'o': case 'x': case 'X': case 'u':
+			      {
+				if (elt->modifier == 'l')
+				  retval += do_printf_conv
+				    (os, fmt, nsa, sa_1, sa_2,
+				     static_cast<unsigned long int> (val));
+				else
+				  retval += do_printf_conv
+				    (os, fmt, nsa, sa_1, sa_2,
+				     static_cast<unsigned int> (val));
+			      }
+			      break;
+
+			    case 'f': case 'e': case 'E':
+			    case 'g': case 'G':
+			      retval
+				+= do_printf_conv (os, fmt, nsa, sa_1, sa_2,
+						   val);
+			      break;
+
+			    default:
+			      error ("fprintf: invalid format specifier");
+			      return -1;
+			      break;
+			    }
 			}
 		    }
 		  else