From patchwork Wed Jun 11 21:37:27 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 1455 Received: (qmail 31848 invoked by alias); 11 Jun 2014 21:37:38 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 31777 invoked by uid 89); 11 Jun 2014 21:37:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: e24smtp03.br.ibm.com Message-ID: <5398CC17.2070803@linux.vnet.ibm.com> Date: Wed, 11 Jun 2014 18:37:27 -0300 From: Adhemerval Zanella User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: "GNU C. Library" Subject: [RFC] [PATCH 1/2] libio: Refactor tst-fmemopen to use test-skeleton.c References: <5398CA41.9030803@linux.vnet.ibm.com> In-Reply-To: <5398CA41.9030803@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 14061121-9564-0000-0000-0000010CBB95 This is not really tied with the fmemopen rewrite, but rather a cleanup. PS: I haven't added a CL since, neither update the ABI files all arches since it is RFC message. I intend to finish the patch will once we determine that this new implementation is the way we want for 2.20. ---- diff --git a/stdio-common/tst-fmemopen.c b/stdio-common/tst-fmemopen.c index 206bfd7..756d6fe 100644 --- a/stdio-common/tst-fmemopen.c +++ b/stdio-common/tst-fmemopen.c @@ -8,10 +8,24 @@ #include #include -int -main (int argc, char **argv) +static char *test_file; + +static void +do_prepare (int argc, char *argv[]) +{ + /* Construct the test file name based on ARGV[0], which will be + an absolute file name in the build directory. Don't touch the + source directory, which might be read-only. */ + if (asprintf (&test_file, "%s.test", argv[0]) < 0) + { + puts ("asprintf failed\n"); + exit (EXIT_FAILURE); + } +} + +static int +do_test (void) { - char *test_file; const char blah[] = "BLAH"; FILE *fp; char *mmap_data; @@ -19,17 +33,14 @@ main (int argc, char **argv) struct stat fs; const char *cp; - /* Construct the test file name based on ARGV[0], which will be - an absolute file name in the build directory. Don't touch the - source directory, which might be read-only. */ - if (argc != 1 || asprintf (&test_file, "%s.test", argv[0]) < 0) - exit (99); - /* setup the physical file, and use it */ if ((fp = fopen (test_file, "w+")) == NULL) - exit (1); + return 1; if (fwrite (blah, 1, strlen (blah), fp) != strlen (blah)) - exit (2); + { + fclose (fp); + return 1; + } rewind (fp); printf ("file: "); @@ -41,7 +52,8 @@ main (int argc, char **argv) { printf ("\ncharacter %td: '%c' instead of '%c'\n", cp - blah, ch, *cp); - exit (1); + fclose (fp); + return 1; } ++cp; } @@ -49,33 +61,44 @@ main (int argc, char **argv) if (ferror (fp)) { puts ("fp: error"); - exit (1); + fclose (fp); + return 1; } if (feof (fp)) printf ("fp: EOF\n"); else { puts ("not EOF"); - exit (1); + fclose (fp); + return 1; } fclose (fp); /* Now, mmap the file into a buffer, and do that too */ if ((fd = open (test_file, O_RDONLY)) == -1) - exit (3); + { + printf ("open (%s, O_RDONLY) failed\n", test_file); + return 3; + } if (fstat (fd, &fs) == -1) - exit (4); + { + printf ("stat (%i)\n", fd); + return 4; + } if ((mmap_data = (char *) mmap (NULL, fs.st_size, PROT_READ, MAP_SHARED, fd, 0)) == MAP_FAILED) { - if (errno == ENOSYS) - exit (0); - exit (5); + printf ("mmap (NULL, %zu, PROT_READ, MAP_SHARED, %i, 0) failed\n", + fs.st_size, fd); + return 5; } if ((fp = fmemopen (mmap_data, fs.st_size, "r")) == NULL) - exit (1); + { + printf ("fmemopen (%p, %zu) failed\n", mmap_data, fs.st_size); + return 1; + } printf ("mem: "); cp = blah; @@ -86,7 +109,8 @@ main (int argc, char **argv) { printf ("%td character: '%c' instead of '%c'\n", cp - blah, ch, *cp); - exit (1); + fclose (fp); + return 1; } ++cp; } @@ -96,14 +120,16 @@ main (int argc, char **argv) if (ferror (fp)) { puts ("fp: error"); - exit (1); + fclose (fp); + return 1; } if (feof (fp)) printf ("fp: EOF\n"); else { puts ("not EOF"); - exit (1); + fclose (fp); + return 1; } fclose (fp); @@ -115,3 +141,7 @@ main (int argc, char **argv) return 0; } + +#define PREPARE(argc, argv) do_prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c"