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