Blame libio/tst_wprintf2.c

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