123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /* Test case by Yoshito Kawada <KAWADA@jp.ibm.com>. */
- #include <errno.h>
- #include <error.h>
- #include <fcntl.h>
- #include <locale.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <wchar.h>
- int
- main (int argc, char *argv[])
- {
- int a = 3;
- int fd;
- char name[] = "/tmp/wprintf.out.XXXXXX";
- FILE *fp;
- char buf[100];
- size_t len;
- int res = 0;
- fd = mkstemp (name);
- if (fd == -1)
- error (EXIT_FAILURE, errno, "cannot open temporary file");
- unlink (name);
- setlocale (LC_ALL, "en_US.UTF-8");
- fp = fdopen (dup (fd), "w");
- if (fp == NULL)
- error (EXIT_FAILURE, errno, "fdopen(,\"w\")");
- fwprintf (fp, L"test start");
- fwprintf (fp, L" int %d\n", a);
- /* String with precision. */
- fwprintf (fp, L"1[%6.3s]\n", argv[1]);
- fclose (fp);
- fp = fdopen (dup (fd), "a");
- if (fp == NULL)
- error (EXIT_FAILURE, errno, "fdopen(,\"a\")");
- setvbuf (fp, NULL, _IONBF, 0);
- /* fwprintf to unbuffered stream. */
- fwprintf (fp, L"hello.\n");
- fclose (fp);
- /* Now read it back in. This time using multibyte functions. */
- lseek (fd, SEEK_SET, 0);
- fp = fdopen (fd, "r");
- if (fp == NULL)
- error (EXIT_FAILURE, errno, "fdopen(,\"r\")");
- if (fgets (buf, sizeof buf, fp) != buf)
- error (EXIT_FAILURE, errno, "first fgets");
- len = strlen (buf);
- if (buf[len - 1] == '\n')
- --len;
- else
- {
- puts ("newline missing after first line");
- res = 1;
- }
- printf ("1st line: \"%.*s\" -> %s\n", (int) len, buf,
- strncmp (buf, "test start int 3", len) == 0 ? "OK" : "FAIL");
- res |= strncmp (buf, "test start int 3", len) != 0;
- if (fgets (buf, sizeof buf, fp) != buf)
- error (EXIT_FAILURE, errno, "second fgets");
- len = strlen (buf);
- if (buf[len - 1] == '\n')
- --len;
- else
- {
- puts ("newline missing after second line");
- res = 1;
- }
- printf ("2nd line: \"%.*s\" -> %s\n", (int) len, buf,
- strncmp (buf, "1[ Som]", len) == 0 ? "OK" : "FAIL");
- res |= strncmp (buf, "1[ Som]", len) != 0;
- if (fgets (buf, sizeof buf, fp) != buf)
- error (EXIT_FAILURE, errno, "third fgets");
- len = strlen (buf);
- if (buf[len - 1] == '\n')
- --len;
- else
- {
- puts ("newline missing after third line");
- res = 1;
- }
- printf ("3rd line: \"%.*s\" -> %s\n", (int) len, buf,
- strncmp (buf, "hello.", len) == 0 ? "OK" : "FAIL");
- res |= strncmp (buf, "hello.", len) != 0;
- return res;
- }
|