X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-pread.c;h=026134874a24aca9d9b4efea99c64f74434ac9ee;hb=5e5009f839875220d5dec7abdf5cf53d919f4d42;hp=cf4179f32f73070e79efb9750603f4f6184edec6;hpb=ebbfe98516776233fa7f40f2e44c8f23b54969de;p=gnulib.git diff --git a/tests/test-pread.c b/tests/test-pread.c index cf4179f32..026134874 100644 --- a/tests/test-pread.c +++ b/tests/test-pread.c @@ -1,5 +1,5 @@ /* Test the pread function. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,22 +20,14 @@ #include -#include -#include +#include "signature.h" +SIGNATURE_CHECK (pread, ssize_t, (int, void *, size_t, off_t)); + #include #include +#include -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ - fflush (stderr); \ - abort (); \ - } \ - } \ - while (0) +#include "macros.h" #define N (sizeof buf - 1) @@ -64,15 +56,30 @@ main (void) ASSERT (init_pos == pos); for (i = 0; i < N; i++) - { - char byte_buf; - ASSERT (pread (fd, &byte_buf, 1, i) == 1); - ASSERT (byte_buf == buf[i]); - ASSERT (lseek (fd, 0, SEEK_CUR) == init_pos); - } + { + char byte_buf; + ASSERT (pread (fd, &byte_buf, 1, i) == 1); + ASSERT (byte_buf == buf[i]); + ASSERT (lseek (fd, 0, SEEK_CUR) == init_pos); + } } + { + /* Invalid offset must evoke failure with EINVAL. */ + char byte; + ASSERT (pread (fd, &byte, 1, (off_t) -1) == -1); + ASSERT (errno == EINVAL); + } + ASSERT (close (fd) == 0); + { + char byte; + /* Trying to operate on a pipe must evoke failure with ESPIPE. + This assumes that stdin is a pipe, and hence not seekable. */ + ASSERT (pread (STDIN_FILENO, &byte, 1, 1) == -1); + ASSERT (errno == ESPIPE); + } + return 0; }