chiark / gitweb /
Commit 2.4.5-5 as unpacked
[inn-innduct.git] / tests / lib / pwrite-t.c
1 /* $Id: pwrite-t.c 5379 2002-03-31 21:45:12Z rra $ */
2 /* pwrite test suite. */
3
4 #include "config.h"
5 #include "clibrary.h"
6 #include <errno.h>
7 #include <fcntl.h>
8 #include <sys/stat.h>
9
10 #include "inn/messages.h"
11 #include "libtest.h"
12
13 ssize_t test_pwrite(int fd, const void *buf, size_t nbyte, off_t offset);
14
15 int
16 main(void)
17 {
18     unsigned char buf[256], result[256];
19     unsigned char c;
20     int i, fd;
21     ssize_t status;
22
23     for (c = 0, i = 0; i < 256; i++, c++)
24         buf[i] = c;
25     fd = open(".testout", O_RDWR | O_CREAT | O_TRUNC, 0644);
26     if (fd < 0)
27         sysdie("Can't create .testout");
28     if (unlink(".testout") < 0)
29         sysdie("Can't unlink .testout");
30     memset(result, 0, sizeof(result));
31
32     puts("6");
33
34     ok(1, test_pwrite(fd, buf + 129, 127, 129) == 127);
35     ok(2, write(fd, buf, 64) == 64);
36     ok(3, test_pwrite(fd, buf + 64, 65, 64) == 65);
37     status = read(fd, result, 64);
38     ok(4, (status == 64) && !memcmp(result, buf + 64, 64));
39         
40     if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
41         sysdie("Can't rewind .testout");
42     status = read(fd, result, 256);
43     ok(5, (status == 256) && !memcmp(result, buf, 256));
44
45     close(20);
46     errno = 0;
47     status = test_pwrite(20, result, 1, 0);
48     ok(6, (status == -1) && (errno == EBADF));
49
50     return 0;
51 }