Public bug reported:

$ cat wcw.c
#define _GNU_SOURCE

#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>

int
main(void)
{
        wint_t c;

        if (!setlocale(LC_CTYPE, "")) {
                perror("setlocale");
                exit(EXIT_FAILURE);
        }

        while ((errno = 0, c = fgetwc(stdin)) != WEOF) {
                printf("U+%04x has width %d\n", (unsigned)c, wcwidth(c));
        }

        if (errno != 0) {
                fprintf(stderr, "errno = %d\n", errno);
                perror("fgetwc");
                exit(EXIT_FAILURE);
        }
        return 0;
}

$ cc -Wall -W wcw.c -o wcw
$ ./wcw < empty
$ ./wcw < /dev/null
errno = 25
fgetwc: Inappropriate ioctl for device
$ cat /dev/null | ./wcw 
errno = 29
fgetwc: Illegal seek

On the other hand, on Solaris 10, I get the following behavior, which
lets me distinguish EOF from errors:

$ ./wcw < empty
$ ./wcw < /de
$ ./wcw < /dev/null
$ cat empty | ./wcw

** Affects: glibc (Ubuntu)
     Importance: Undecided
         Status: New

-- 
fgetwc returns various errors when it shouldn't
https://bugs.launchpad.net/bugs/307987
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to