| Index: gdb/common/format.c | 
| diff --git a/gdb/common/format.c b/gdb/common/format.c | 
| index 9c22b6d060c51bbd4204a23d2c1d9ddcc6eb695c..985e0e4be55a76e4619fb50162009303974d4cd8 100644 | 
| --- a/gdb/common/format.c | 
| +++ b/gdb/common/format.c | 
| @@ -1,6 +1,6 @@ | 
| /* Parse a printf-style format string. | 
|  | 
| -   Copyright (C) 1986-2012 Free Software Foundation, Inc. | 
| +   Copyright (C) 1986-2013 Free Software Foundation, Inc. | 
|  | 
| This file is part of GDB. | 
|  | 
| @@ -28,11 +28,12 @@ | 
| #include "format.h" | 
|  | 
| struct format_piece * | 
| -parse_format_string (char **arg) | 
| +parse_format_string (const char **arg) | 
| { | 
| -  char *s, *f, *string; | 
| -  char *prev_start; | 
| -  char *percent_loc; | 
| +  const char *s; | 
| +  char *f, *string; | 
| +  const char *prev_start; | 
| +  const char *percent_loc; | 
| char *sub_start, *current_substring; | 
| struct format_piece *pieces; | 
| int next_frag; | 
| @@ -155,7 +156,7 @@ parse_format_string (char **arg) | 
|  | 
| /* The first part of a format specifier is a set of flag | 
| characters.  */ | 
| -	while (strchr ("0-+ #", *f)) | 
| +	while (*f != '\0' && strchr ("0-+ #", *f)) | 
| { | 
| if (*f == '#') | 
| seen_hash = 1; | 
| @@ -169,7 +170,7 @@ parse_format_string (char **arg) | 
| } | 
|  | 
| /* The next part of a format specifier is a width.  */ | 
| -	while (strchr ("0123456789", *f)) | 
| +	while (*f != '\0' && strchr ("0123456789", *f)) | 
| f++; | 
|  | 
| /* The next part of a format specifier is a precision.  */ | 
| @@ -177,7 +178,7 @@ parse_format_string (char **arg) | 
| { | 
| seen_prec = 1; | 
| f++; | 
| -	    while (strchr ("0123456789", *f)) | 
| +	    while (*f != '\0' && strchr ("0123456789", *f)) | 
| f++; | 
| } | 
|  | 
| @@ -245,10 +246,10 @@ parse_format_string (char **arg) | 
| this_argclass = long_arg; | 
| else | 
| this_argclass = long_long_arg; | 
| - | 
| -	  if (seen_big_l) | 
| -	    bad = 1; | 
| -	  break; | 
| + | 
| +	    if (seen_big_l) | 
| +	      bad = 1; | 
| +	    break; | 
|  | 
| case 'c': | 
| this_argclass = lcount == 0 ? int_arg : wide_char_arg; | 
| @@ -262,7 +263,9 @@ parse_format_string (char **arg) | 
| this_argclass = ptr_arg; | 
| if (lcount || seen_h || seen_big_l) | 
| bad = 1; | 
| -	    if (seen_prec || seen_zero || seen_space || seen_plus) | 
| +	    if (seen_prec) | 
| +	      bad = 1; | 
| +	    if (seen_hash || seen_zero || seen_space || seen_plus) | 
| bad = 1; | 
| break; | 
|  | 
| @@ -286,9 +289,9 @@ parse_format_string (char **arg) | 
| else | 
| this_argclass = double_arg; | 
|  | 
| -	  if (lcount || seen_h) | 
| -	    bad = 1; | 
| -	  break; | 
| +	    if (lcount || seen_h) | 
| +	      bad = 1; | 
| +	    break; | 
|  | 
| case '*': | 
| error (_("`*' not supported for precision or width in printf")); | 
|  |