[patch] fix -verbose gij option

Bryce McKinlay mckinlay@redhat.com
Tue Apr 12 21:43:00 GMT 2005


Thomas Fitzsimmons wrote:

>Hi,
>
>This patch fixes problems with parsing gij's -verbose option that I
>introduced with my option revamp patch.
>
>OK for mainline and gcc-4_0-branch?
>
>Tom
>
>2005-04-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
>
>	* prims.cc (parse_verbose_args): Fix verbose argument parsing.
>  
>

OK for HEAD.

Mark: is this ok for the 4.0 branch? This patch fixes a recent 
regression in libgcj.

Bryce


>------------------------------------------------------------------------
>
>Index: ChangeLog
>===================================================================
>RCS file: /cvs/gcc/gcc/libjava/ChangeLog,v
>retrieving revision 1.3463
>diff -u -r1.3463 ChangeLog
>--- ChangeLog	6 Apr 2005 22:29:59 -0000	1.3463
>+++ ChangeLog	7 Apr 2005 22:25:18 -0000
>@@ -1,3 +1,7 @@
>+2005-04-07  Thomas Fitzsimmons  <fitzsim@redhat.com>
>+
>+	* prims.cc (parse_verbose_args): Fix verbose argument parsing.
>+
> 2005-04-06  Andrew Haley  <aph@redhat.com>
> 
> 	* testsuite/libjava.lang/bytearray.java: New file.
>Index: prims.cc
>===================================================================
>RCS file: /cvs/gcc/gcc/libjava/prims.cc,v
>retrieving revision 1.109
>diff -u -r1.109 prims.cc
>--- prims.cc	5 Apr 2005 22:26:22 -0000	1.109
>+++ prims.cc	7 Apr 2005 22:25:19 -0000
>@@ -1049,7 +1049,7 @@
> parse_verbose_args (char* option_string,
>                     bool ignore_unrecognized)
> {
>-  size_t len = sizeof ("-verbose");
>+  size_t len = sizeof ("-verbose") - 1;
> 
>   if (strlen (option_string) < len)
>     return -1;
>@@ -1058,69 +1058,72 @@
>       && option_string[len + 1] != '\0')
>     {
>       char* verbose_args = option_string + len + 1;
>-      size_t last = 0;
> 
>       do
> 	{
> 	  if (! strncmp (verbose_args,
>-			 "gc", (last = sizeof ("gc")) - 1)
>-	      && (verbose_args[last] == '\0'
>-		  || verbose_args[last] == ','))
>-	    {
>-	      // FIXME: we should add functions to boehm-gc that
>-	      // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
>-	      // GC_print_back_height.
>-
>-	    }
>+			 "gc", sizeof ("gc") - 1))
>+            {
>+              if (verbose_args[sizeof ("gc") - 1] == '\0'
>+                  || verbose_args[sizeof ("gc") - 1] == ',')
>+                {
>+                  // FIXME: we should add functions to boehm-gc that
>+                  // toggle GC_print_stats, GC_PRINT_ADDRESS_MAP and
>+                  // GC_print_back_height.
>+                  verbose_args += sizeof ("gc") - 1;
>+                }
>+              else
>+                {
>+                verbose_arg_err:
>+                  fprintf (stderr, "libgcj: unknown verbose option: %s\n",
>+                           option_string);
>+                  return -1;
>+                }
>+            }
> 	  else if (! strncmp (verbose_args,
> 			      "class",
>-			      (last = sizeof ("class")) - 1)
>-		   && (verbose_args[last] == '\0'
>-		       || verbose_args[last] == ','))
>-	    {
>-	      gcj::verbose_class_flag = true;
>-	    }
>+			      sizeof ("class") - 1))
>+            {
>+              if (verbose_args[sizeof ("class") - 1] == '\0'
>+                  || verbose_args[sizeof ("class") - 1] == ',')
>+                {
>+                  gcj::verbose_class_flag = true;
>+                  verbose_args += sizeof ("class") - 1;
>+                }
>+              else
>+                goto verbose_arg_err;
>+            }
> 	  else if (! strncmp (verbose_args, "jni",
>-			      (last = sizeof ("jni")) - 1)
>-		   && (verbose_args[last] == '\0'
>-		       || verbose_args[last] == ','))
>-	    {
>-	      // FIXME: enable JNI messages.
>-	    }
>+			      sizeof ("jni") - 1))
>+            {
>+              if (verbose_args[sizeof ("jni") - 1] == '\0'
>+                  || verbose_args[sizeof ("jni") - 1] == ',')
>+                {
>+                  // FIXME: enable JNI messages.
>+                  verbose_args += sizeof ("jni") - 1;
>+                }
>+              else
>+                goto verbose_arg_err;
>+            }
> 	  else if (ignore_unrecognized
> 		   && verbose_args[0] == 'X')
> 	    {
> 	      // ignore unrecognized non-standard verbose option
>-	      last = 0;
>-	      while (verbose_args[last] != '\0'
>-		     && verbose_args[last++] != ',');
>+	      while (verbose_args[0] != '\0'
>+		     && verbose_args[0] != ',')
>+                verbose_args++;
> 	    }
>+          else if (verbose_args[0] == ',')
>+            {
>+              verbose_args++;
>+            }
>+          else
>+            goto verbose_arg_err;
> 
>-	  if (strlen (verbose_args) >= last)
>-	    {
>-	      if (verbose_args[last] == ',')
>-		{
>-		  if (verbose_args[last + 1] == '\0')
>-		    // trailing comma
>-		    return -1;
>-		  else
>-		    {
>-		      verbose_args = verbose_args + last + 1;
>-		      last = 0;
>-		    }
>-		}
>-	      // here verbose_args[last] is either '\0' or
>-	      // the first character in the next verbose
>-	      // argument.
>-	    }
>-	  else
>-	    // partial option
>-	    return -1;
>-
>-	  // verbose_args[last] will be '\0' here if we're
>-	  // done.
>+          if (verbose_args[0] == ',')
>+            verbose_args++;
> 	}
>-      while (verbose_args[last] != '\0');
>+      while (verbose_args[0] != '\0');
>     }
>   else if (option_string[len] == 'g'
> 	   && option_string[len + 1] == 'c'
>  
>



More information about the Java-patches mailing list