Add support for landlock_create_ruleset (444), landlock_add_rule (445) and landlock_r...
[valgrind.git] / memcheck / tests / solaris / sendfilev.c
blob83d003ce4fc9f4bc60aaf3826e7854bc6cf1e2b6
1 /* Tests sendfilev with bogus inputs. */
3 #include <errno.h>
4 #include <fcntl.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <strings.h>
8 #include <unistd.h>
9 #include <sys/sendfile.h>
11 #define CHUNK (8 * 1024)
12 #define TEST_FILE "sendfile.test"
14 int main(int argc, const char *argv[])
16 int test_fd = open(TEST_FILE, O_WRONLY | O_CREAT, 0666);
17 if (test_fd < 0) {
18 int error = errno;
19 fprintf(stderr, "open failed: %s (%d).\n", strerror(error), error);
20 return 1;
23 char chunk1[CHUNK];
24 bzero(&chunk1, sizeof(chunk1));
25 ssize_t nbytes = write(test_fd, &chunk1, sizeof(chunk1));
26 if (nbytes != CHUNK) {
27 int error = errno;
28 fprintf(stderr, "write failed (nbytes=%zd): %s (%d).\n",
29 nbytes, strerror(error), error);
30 return 1;
33 close(test_fd);
34 printf("Test file created.\n");
36 test_fd = open(TEST_FILE, O_RDWR, 0666);
37 if (test_fd < 0) {
38 int error = errno;
39 fprintf(stderr, "open failed: %s (%d).\n", strerror(error), error);
40 return 1;
43 sendfilevec_t vec[2];
44 vec[0].sfv_fd = SFV_FD_SELF;
45 vec[0].sfv_off = -1;
46 vec[0].sfv_len = 1;
47 vec[0].sfv_flag = 0;
48 vec[1].sfv_fd = test_fd;
49 vec[1].sfv_off = 0;
50 vec[1].sfv_len = CHUNK;
51 vec[1].sfv_flag = 0;
52 size_t xferred;
54 nbytes = sendfilev(test_fd, vec, 2, &xferred);
55 if (nbytes < 0) {
56 if (errno == EFAULT) {
57 printf("Received EFAULT as expected.\n");
58 } else {
59 fprintf(stderr, "Expected EFAULT, got %d.\n", errno);
61 } else {
62 fprintf(stderr, "Error: sendfilev returned a positive value.\n");
65 nbytes = sendfilev(test_fd, vec, -1, &xferred);
66 if (nbytes < 0) {
67 if (errno == EINVAL) {
68 printf("Received EINVAL as expected.\n");
69 } else {
70 fprintf(stderr, "Expected EINVAL, got %d.\n", errno);
72 } else {
73 fprintf(stderr, "Error: sendfilev returned a positive value.\n");
76 vec[0].sfv_off = (off_t) "HEADER";
77 vec[0].sfv_len = 6;
78 nbytes = sendfilev(test_fd, vec, 1, &xferred);
79 if (nbytes < 0) {
80 int error = errno;
81 fprintf(stderr, "sendfilev failed: %s (%d).\n", strerror(error), error);
82 } else {
83 printf("sendfilev for the first buffer succeeded.\n");
86 unlink(TEST_FILE);
87 return 0;