[pacman-dev] [PATCH] Fix compile error with clang-2.8

Dan McGee dpmcgee at gmail.com
Thu Oct 7 08:50:37 EDT 2010

On Wed, Oct 6, 2010 at 8:40 PM, Allan McRae <allan at archlinux.org> wrote:
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
> wint_t appears to be the same as size_t or unsigned long. It probably best if
> someone checks that is the right format specifier on x86_64 too...

man wchar.h:
       The implementation shall support one or more  programming  environments
       in which the width of wint_t is no greater than the width of type long.

man printf(3):
       l      (ell) A following integer conversion corresponds to a
long int or unsigned long int argument, or a following n conversion
              sponds to a pointer to a long int argument, or a
following c conversion corresponds to a wint_t argument, or a
following s  con‐
              version corresponds to a pointer to wchar_t argument.

So we should really be using '%lc', it sounds like clang is busted...

What does printf("%ls", p) give you? This isn't actually right because
we don't want to print the full string, just one character, but it
would be interesting to see if they implemented half of the spec.

>  src/pacman/util.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 5b4b2e8..8dc1571 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -261,7 +261,7 @@ void indentprint(const char *str, int indent)
>                        }
>                        continue;
>                }
> -               printf("%lc", (wint_t)*p);
> +               printf("%u", (wint_t)*p);
>                cidx += wcwidth(*p);
>                p++;
>        }
> --

More information about the pacman-dev mailing list