process_vm_readv_writev.c revision 436e89c602e787e7a27dd6624b09beed41a0da8a
1#define _GNU_SOURCE 1
2
3#include <config.h>
4#include <stdlib.h>
5#include <stdio.h>
6#include <string.h>
7#include <unistd.h>
8#include <sys/types.h>
9#include <sys/uio.h>
10
11static int status = EXIT_SUCCESS;
12
13#ifdef HAVE_PROCESS_VM_READV
14
15static void test_process_vm_readv()
16{
17   char lbuf[] = "123456";
18   char rbuf[] = "ABCDEF";
19
20   struct iovec lvec[2];
21   struct iovec rvec[2];
22
23   lvec[0].iov_base = lbuf + 1;
24   lvec[0].iov_len = 1;
25   lvec[1].iov_base = lbuf + 3;
26   lvec[1].iov_len = 2;
27
28   rvec[0].iov_base = rbuf + 1;
29   rvec[0].iov_len = 2;
30   rvec[1].iov_base = rbuf + 4;
31   rvec[1].iov_len = 1;
32
33   if (process_vm_readv(getpid(),
34                        lvec, 2,
35                        rvec, 2,
36                        0 ) < 0 ) {
37      perror("process_vm_readv");
38      status = EXIT_FAILURE;
39   }
40
41   if (strcmp(lbuf, "1B3CE6") != 0) {
42      fprintf(stderr, "Expected: \"1B3CE6\"; Got: \"%s\"\n", lbuf);
43      status = EXIT_FAILURE;
44   }
45}
46
47#endif /* defined( HAVE_PROCESS_VM_READV ) */
48
49#ifdef HAVE_PROCESS_VM_WRITEV
50
51static void test_process_vm_writev()
52{
53   char lbuf[] = "123456";
54   char rbuf[] = "ABCDEF";
55
56   struct iovec lvec[2];
57   struct iovec rvec[2];
58
59   lvec[0].iov_base = lbuf + 1;
60   lvec[0].iov_len = 1;
61   lvec[1].iov_base = lbuf + 3;
62   lvec[1].iov_len = 2;
63
64   rvec[0].iov_base = rbuf + 1;
65   rvec[0].iov_len = 2;
66   rvec[1].iov_base = rbuf + 4;
67   rvec[1].iov_len = 1;
68
69   if (process_vm_writev(getpid(),
70                         lvec, 2,
71                         rvec, 2,
72                         0 ) < 0 ) {
73      perror("process_vm_writev");
74      status = EXIT_FAILURE;
75   }
76
77   if (strcmp(rbuf, "A24D5F") != 0) {
78      fprintf(stderr, "Expected: \"A24D5F\"; Got: \"%s\"\n", rbuf);
79      status = EXIT_FAILURE;
80   }
81}
82
83#endif /* defined( HAVE_PROCESS_VM_WRITEV ) */
84
85int main(int argc, char *argv[])
86{
87#ifdef HAVE_PROCESS_VM_READV
88   test_process_vm_readv();
89#endif
90#ifdef HAVE_PROCESS_VM_WRITEV
91   test_process_vm_writev();
92#endif
93   return status;
94}
95