Home | History | Annotate | Download | only in tests
      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 
     11 static int status = EXIT_SUCCESS;
     12 
     13 #ifdef HAVE_PROCESS_VM_READV
     14 
     15 static 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 
     51 static 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 
     85 int 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