X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-read-file.c;h=f904e27d5084e441a070f2ba571668e288daf39a;hb=11dbc24bbfd94e0e8d36754fe17bb1fdeb58fe5e;hp=1e90cd4566ef38188b5067b3800f50992d1ef6de;hpb=08c03e591ea25f38405e5e06f1565e01feabb591;p=gnulib.git diff --git a/tests/test-read-file.c b/tests/test-read-file.c index 1e90cd456..f904e27d5 100644 --- a/tests/test-read-file.c +++ b/tests/test-read-file.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 Free Software Foundation + * Copyright (C) 2006-2007 Free Software Foundation * Written by Simon Josefsson * * This program is free software; you can redistribute it and/or modify @@ -17,13 +17,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "read-file.h" #include +#include +#include #define FILE1 "/etc/resolv.conf" #define FILE2 "/dev/null" @@ -31,35 +31,69 @@ int main (void) { - { - size_t len; - char *out = read_file (FILE1, &len); + struct stat statbuf; + int err = 0; - if (!out) - perror ("Could not read file"); + /* We can perform the test only if the file exists and is readable. + Test whether it exists, then assume it is world-readable. */ + if (stat (FILE1, &statbuf) >= 0) + { + size_t len; + char *out = read_file (FILE1, &len); - if (out[len] != '\0') - perror ("BAD: out[len] not zero"); + if (!out) + { + perror ("Could not read file"); + err = 1; + } + else + { + if (out[len] != '\0') + { + perror ("BAD: out[len] not zero"); + err = 1; + } - printf ("Read %d from %s...\n", len, FILE1); + /* Assume FILE1 is a regular file or a symlink to a regular file. */ + if (len != statbuf.st_size) + { + fprintf (stderr, "Read %ld from %s...\n", (unsigned long) len, FILE1); + err = 1; + } + free (out); + } + } - free (out); - } + /* We can perform the test only if the file exists and is readable. + Test whether it exists, then assume it is world-readable. */ + if (stat (FILE2, &statbuf) >= 0) + { + size_t len; + char *out = read_file (FILE2, &len); - { - size_t len; - char *out = read_file (FILE2, &len); + if (!out) + { + perror ("Could not read file"); + err = 1; + } + else + { + if (out[len] != '\0') + { + perror ("BAD: out[len] not zero"); + err = 1; + } - if (!out) - perror ("Could not read file"); + /* /dev/null should always be empty. Ignore statbuf.st_size, since it + is not a regular file. */ + if (len != 0) + { + fprintf (stderr, "Read %ld from %s...\n", (unsigned long) len, FILE2); + err = 1; + } + free (out); + } + } - if (out[len] != '\0') - perror ("BAD: out[len] not zero"); - - printf ("Read %d from %s...\n", len, FILE2); - - free (out); - } - - return 0; + return err; }