This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Patch for printf's "%If"


On Fri, 19 Dec 2003, Joseph S. Myers wrote:

> On Fri, 19 Dec 2003, Behdad Esfahbod wrote:
>
> > Attached is the patch for gcc-3.3.2 (against Rawhide SRPM build
> > actually) to understand %If.  Moreover, I removed %Id and friends
> > from scanf, as glibc does not support them yet.  I will get into
> > implementing that if there is no reason not to do that.
>
> There certainly seems to be scanf code that sets and uses an I18N flag.
> If this doesn't work, all the more need for documentation and glibc
> testcases to show what is supported....

That's good news!  I will investigate.

> The code now in glibc looks like it supports the 'I' flag on FgGeE
> formats, not just %f which your GCC patch would indicate (again, the glibc
> manual should say exactly what is supported).

I was misinformed by Hamed about his patch.  BTW, supporting gG
formats needs some help from locale to translate 'e'.

> Your patch should also have
> failed the testsuite when you tested it, as you didn't update the
> testcases, and GCC patches need to be against mainline to be considered.

About testcases, sorry, it was around 7AM.
And CVS repo for gcc on savannah is still empty.

> The following patch should correspond to what the code now supports, but
> hasn't yet been tested/applied.

Thanks then.


behdad

> 2003-12-19  Joseph S. Myers  <jsm@polyomino.org.uk>
>
> 	* c-format.c (print_char_table): Allow 'I' flag on floating point
> 	decimal formats.
>
> testsuite:
> 2003-12-19  Joseph S. Myers  <jsm@polyomino.org.uk>
>
> 	* gcc.dg/format/ext-1.c: Allow 'I' flag on floating point decimal
> 	formats.
>
> --- GCC/gcc/c-format.c.orig	2003-11-20 15:55:24.000000000 +0000
> +++ GCC/gcc/c-format.c	2003-12-19 12:25:15.000000000 +0000
> @@ -755,23 +755,23 @@ static const format_flag_pair strfmon_fl
>  static const format_char_info print_char_table[] =
>  {
>    /* C89 conversion specifiers.  */
> -  { "di",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "-wp0 +'I", "i"  },
> -  { "oxX", 0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",    "i"  },
> -  { "u",   0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0'I",   "i"  },
> -  { "fgG", 0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'", ""   },
> -  { "eE",  0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",  ""   },
> -  { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T94_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",       ""   },
> -  { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "cR" },
> -  { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",       "c"  },
> -  { "n",   1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, T99_PD,  T99_IM  }, "",         "W"  },
> +  { "di",  0, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  TEX_LL,  T99_SST, T99_PD,  T99_IM  }, "-wp0 +'I",  "i"  },
> +  { "oxX", 0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0#",     "i"  },
> +  { "u",   0, STD_C89, { T89_UI,  T99_UC,  T89_US,  T89_UL,  T9L_ULL, TEX_ULL, T99_ST,  T99_UPD, T99_UIM }, "-wp0'I",    "i"  },
> +  { "fgG", 0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'I", ""   },
> +  { "eE",  0, STD_C89, { T89_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T89_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#I",  ""   },
> +  { "c",   0, STD_C89, { T89_I,   BADLEN,  BADLEN,  T94_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        ""   },
> +  { "s",   1, STD_C89, { T89_C,   BADLEN,  BADLEN,  T94_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "cR" },
> +  { "p",   1, STD_C89, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        "c"  },
> +  { "n",   1, STD_C89, { T89_I,   T99_SC,  T89_S,   T89_L,   T9L_LL,  BADLEN,  T99_SST, T99_PD,  T99_IM  }, "",          "W"  },
>    /* C99 conversion specifiers.  */
> -  { "F",   0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'", ""   },
> -  { "aA",  0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",  ""   },
> +  { "F",   0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#'I", ""   },
> +  { "aA",  0, STD_C99, { T99_D,   BADLEN,  BADLEN,  T99_D,   BADLEN,  T99_LD,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",   ""   },
>    /* X/Open conversion specifiers.  */
> -  { "C",   0, STD_EXT, { TEX_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",       ""   },
> -  { "S",   1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "R"  },
> +  { "C",   0, STD_EXT, { TEX_WI,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-w",        ""   },
> +  { "S",   1, STD_EXT, { TEX_W,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       "R"  },
>    /* GNU conversion specifiers.  */
> -  { "m",   0, STD_EXT, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      ""   },
> +  { "m",   0, STD_EXT, { T89_V,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",       ""   },
>    { NULL,  0, 0, NOLENGTHS, NULL, NULL }
>  };
>
> --- GCC/gcc/testsuite/gcc.dg/format/ext-1.c.orig	2001-12-21 15:02:31.000000000 +0000
> +++ GCC/gcc/testsuite/gcc.dg/format/ext-1.c	2003-12-19 12:26:24.000000000 +0000
> @@ -92,7 +92,7 @@ foo (quad_t q, u_quad_t uq, quad_t *qn,
>    */
>    printf ("%*2$.*1$m", i, i);
>    printf ("%1$*2$.*1$m", i, i); /* { dg-warning "no argument" "printf %1\$m" } */
> -  /* As an extension, glibc includes the "I" flag for decimal integer
> +  /* As an extension, glibc includes the "I" flag for decimal
>       formats, to output using the locale's digits (e.g. in Arabic).
>       In GCC, we require this to be in the standard place for flags, though
>       glibc allows it also after width or precision.
> @@ -102,12 +102,12 @@ foo (quad_t q, u_quad_t uq, quad_t *qn,
>    printf ("%Ix", u); /* { dg-warning "flag" "bad use of I flag" } */
>    printf ("%IX", u); /* { dg-warning "flag" "bad use of I flag" } */
>    printf ("%In", n); /* { dg-warning "flag" "bad use of I flag" } */
> -  printf ("%If", d); /* { dg-warning "flag" "bad use of I flag" } */
> -  printf ("%IF", d); /* { dg-warning "flag" "bad use of I flag" } */
> -  printf ("%Ie", d); /* { dg-warning "flag" "bad use of I flag" } */
> -  printf ("%IE", d); /* { dg-warning "flag" "bad use of I flag" } */
> -  printf ("%Ig", d); /* { dg-warning "flag" "bad use of I flag" } */
> -  printf ("%IG", d); /* { dg-warning "flag" "bad use of I flag" } */
> +  printf ("%If", d);
> +  printf ("%IF", d);
> +  printf ("%Ie", d);
> +  printf ("%IE", d);
> +  printf ("%Ig", d);
> +  printf ("%IG", d);
>    printf ("%Ia", d); /* { dg-warning "flag" "bad use of I flag" } */
>    printf ("%IA", d); /* { dg-warning "flag" "bad use of I flag" } */
>    printf ("%Ic", i); /* { dg-warning "flag" "bad use of I flag" } */
>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]