Home | History | Annotate | Download | only in tests
      1 #include <stdio.h>
      2 #include <sys/types.h>
      3 #include <sys/uio.h>
      4 #include <fcntl.h>
      5 #include <errno.h>
      6 #include <unistd.h>
      7 #include <string.h>
      8 
      9 #define K_1             8192
     10 #define NBUFS           2
     11 #define CHUNK           K_1             /* single chunk */
     12 #define MAX_IOVEC       2
     13 #define DATA_FILE       "writev_data_file"
     14 
     15 static char    buf1[K_1];
     16 static char    buf2[K_1];
     17 static char    *buf_list[NBUFS], f_name[]="writev_data_file";
     18 static int	fd;
     19 
     20 struct  iovec   wr_iovec[MAX_IOVEC] = {
     21         {(caddr_t)-1,   CHUNK},
     22         {(caddr_t)NULL, 0}
     23 };
     24 
     25 int main(void)
     26 {
     27 	int nbytes;
     28 
     29 	/* Fill the buf_list[0] and buf_list[1] with 0 zeros */
     30         buf_list[0] = buf1;
     31         buf_list[1] = buf2;
     32         memset(buf_list[0], 0, K_1);
     33         memset(buf_list[1], 0, K_1);
     34 
     35         if ((fd = open(f_name, O_WRONLY | O_CREAT, 0666)) < 0) {
     36              fprintf(stderr, "open(2) failed: fname = %s, errno = %d\n",
     37 			 f_name, errno);
     38 		return 1;
     39         } else if ((nbytes = write(fd, buf_list[1], K_1)) != K_1) {
     40 		fprintf(stderr, "write(2) failed: nbytes = %d, errno = %d\n",
     41 			 nbytes, errno);
     42                 return 1;
     43         }
     44         if (close(fd) < 0) {
     45         	fprintf(stderr, "close failed: errno = %d\n", errno);
     46                 return 1;
     47 	}
     48         fprintf(stderr, "Test file created.\n");
     49         if ((fd = open(f_name, O_RDWR, 0666)) < 0) {
     50                	fprintf(stderr, "open failed: fname = %s, errno = %d\n",
     51                         f_name, errno);
     52                 return 1;
     53 	}
     54 
     55         lseek(fd, 0, 0);
     56         if (writev(fd, wr_iovec, 2) < 0) {
     57 		if (errno == EFAULT)
     58                 	fprintf(stderr, "Received EFAULT as expected\n");
     59                 else
     60                 	fprintf(stderr, "Expected EFAULT, got %d\n", errno);
     61                 lseek(fd, K_1, 0);
     62                 if ((nbytes = read(fd, buf_list[0], CHUNK)) != 0)
     63                 	fprintf(stderr, "Expected nbytes = 0, got %d\n", nbytes);
     64         }
     65 	else
     66         	fprintf(stderr, "Error writev returned a positive value\n");
     67 	// Now check invalid vector count
     68         if (writev(fd, wr_iovec, -1) < 0) {
     69  		if (errno == EINVAL)
     70                 	fprintf(stderr, "Received EINVAL as expected\n");
     71                 else
     72                 	fprintf(stderr, "expected errno = EINVAL, got %d\n", errno);
     73  	}
     74 	else
     75         	fprintf(stderr, "Error writev returned a positive value\n");
     76         if (readv(fd, wr_iovec, -1) < 0) {
     77  		if (errno == EINVAL)
     78                 	fprintf(stderr, "Received EINVAL as expected\n");
     79                 else
     80                 	fprintf(stderr, "expected errno = EINVAL, got %d\n", errno);
     81  	}
     82 	else
     83         	fprintf(stderr, "Error readv returned a positive value\n");
     84 
     85         unlink(f_name);
     86 
     87 	return 0;
     88 }
     89 
     90