changeset 8927:d75f4ee0538d

qz.cc (Fqz): avoid maybe clobbred by vfork warning from GCC
author John W. Eaton <jwe@octave.org>
date Sat, 07 Mar 2009 13:45:39 -0500
parents e1d732d68b20
children 80f044c83de3
files src/ChangeLog src/DLD-FUNCTIONS/qz.cc
diffstat 2 files changed, 19 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Mar 07 13:29:12 2009 -0500
+++ b/src/ChangeLog	Sat Mar 07 13:45:39 2009 -0500
@@ -1,5 +1,8 @@
 2009-03-07  John W. Eaton  <jwe@octave.org>
 
+	* DLD-FUNCTIONS/qz.cc (Fqz): Avoid "maybe clobbered by vfork"
+	warning from GCC.
+
 	* version.h (OCTAVE_VERSION): Now 3.1.54.
 	(OCTAVE_API_VERSION): Now api-v36.
 	(OCTAVE_RELEASE_DATE): Now 2009-03-07.
--- a/src/DLD-FUNCTIONS/qz.cc	Sat Mar 07 13:29:12 2009 -0500
+++ b/src/DLD-FUNCTIONS/qz.cc	Sat Mar 07 13:45:39 2009 -0500
@@ -306,11 +306,11 @@
 #endif
 
   // Determine ordering option
-  std::string ord_job;
+  volatile char ord_job = 0;
   static double safmin;
 
   if (nargin == 2)
-    ord_job = "N";
+    ord_job = 'N';
   else if (!args(2).is_string ())
     {
       error ("qz: argument 3 must be a string");
@@ -318,13 +318,15 @@
     }
   else
     {
-      ord_job = args(2).string_value ();
+      std::string tmp = args(2).string_value ();
+
+      if (! tmp.empty ())
+	ord_job = tmp[0];
 
-      if (ord_job[0] != 'N'
-	  && ord_job[0] != 'S'
-	  && ord_job[0] != 'B'
-	  && ord_job[0] != '+'
-	  && ord_job[0] != '-')
+      if (! (ord_job == 'N' || ord_job == 'n'
+	     || ord_job == 'S' || ord_job == 's'
+	     || ord_job == 'B' || ord_job == 'b'
+	     || ord_job == '+' || ord_job == '-'))
 	{
 	  error ("qz: invalid order option");
 	  return retval;
@@ -603,7 +605,7 @@
     }
 
   // order the QZ decomposition?
-  if (ord_job[0] != 'N')
+  if (! (ord_job == 'N' || ord_job == 'n'))
     {
       if (complex_case)
 	{
@@ -614,20 +616,23 @@
       else
 	{
 #ifdef DEBUG_SORT
-	  std::cout << "qz: ordering eigenvalues: ord_job = " << ord_job[0] << std::endl;
+	  std::cout << "qz: ordering eigenvalues: ord_job = "
+		    << ord_job << std::endl;
 #endif
 
 	  // declared static to avoid vfork/long jump compiler complaints
 	  static sort_function sort_test;
 	  sort_test = 0;
 
-	  switch (ord_job[0])
+	  switch (ord_job)
 	    {
 	    case 'S':
+	    case 's':
 	      sort_test = &fin;
 	      break;
 
 	    case 'B':
+	    case 'b':
 	      sort_test = &fout;
 	      break;