diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-05-24 22:22:20 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2008-05-24 22:22:20 +0000 |
commit | 8ba7d5cebbd4acf40dc8d22982baa50c2e1fd194 (patch) | |
tree | ce09df60a6357e43ff65911fc7e817bcae26486f /stdio-common/scanf14.c | |
parent | e96fe50f0dd8d76fabfe139b46f059e3b2373b83 (diff) |
Updated to fedora-glibc-20080524T2218cvs/fedora-glibc-2_8_90-5
Diffstat (limited to 'stdio-common/scanf14.c')
-rw-r--r-- | stdio-common/scanf14.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/stdio-common/scanf14.c b/stdio-common/scanf14.c index 387ceba4bb..6ca5c7c567 100644 --- a/stdio-common/scanf14.c +++ b/stdio-common/scanf14.c @@ -59,5 +59,58 @@ main (void) else if (d != 5.25 || memcmp (c, " x", 2) != 0) FAIL (); + const char *tmpdir = getenv ("TMPDIR"); + if (tmpdir == NULL || tmpdir[0] == '\0') + tmpdir = "/tmp"; + + char fname[strlen (tmpdir) + sizeof "/tst-scanf14.XXXXXX"]; + sprintf (fname, "%s/tst-scanf14.XXXXXX", tmpdir); + if (fname == NULL) + FAIL (); + + /* Create a temporary file. */ + int fd = mkstemp (fname); + if (fd == -1) + FAIL (); + + FILE *fp = fdopen (fd, "w+"); + if (fp == NULL) + FAIL (); + else + { + if (fputs (" 1.25s x", fp) == EOF) + FAIL (); + if (fseek (fp, 0, SEEK_SET) != 0) + FAIL (); + if (fscanf (fp, "%as%2c", &sp, c) != 2) + FAIL (); + else + { + if (strcmp (sp, "1.25s") != 0 || memcmp (c, " x", 2) != 0) + FAIL (); + memset (sp, 'x', sizeof "1.25s"); + free (sp); + } + + if (freopen (fname, "r", stdin) == NULL) + FAIL (); + else + { + if (scanf ("%as%2c", &sp, c) != 2) + FAIL (); + else + { + if (strcmp (sp, "1.25s") != 0 || memcmp (c, " x", 2) != 0) + FAIL (); + memset (sp, 'x', sizeof "1.25s"); + free (sp); + } + } + + fclose (fp); + } + + remove (fname); + return result; } |