(root)/
glibc-2.38/
stdio-common/
tst-cookie.c
       1  #include <sys/types.h>
       2  #include <sys/stat.h>
       3  #include <fcntl.h>
       4  #include <errno.h>
       5  
       6  #include <stdio.h>
       7  
       8  #include <support/xstdio.h>
       9  
      10  
      11  #define THE_COOKIE ((void *) 0xdeadbeeful)
      12  
      13  static int errors;
      14  
      15  
      16  static int cookieread_called;
      17  static ssize_t
      18  cookieread (void *cookie, char *buf, size_t count)
      19  {
      20    printf ("`%s' called with cookie %#lx\n", __FUNCTION__,
      21  	  (unsigned long int) cookie);
      22    if (cookie != THE_COOKIE)
      23      ++errors;
      24    cookieread_called = 1;
      25    return 42;
      26  }
      27  
      28  
      29  static int cookiewrite_called;
      30  static ssize_t
      31  cookiewrite (void *cookie, const char *buf, size_t count)
      32  {
      33    printf ("`%s' called with cookie %#lx\n", __FUNCTION__,
      34  	  (unsigned long int) cookie);
      35    if (cookie != THE_COOKIE)
      36      ++errors;
      37    cookiewrite_called = 1;
      38    return 43;
      39  }
      40  
      41  
      42  static int cookieseek_called;
      43  static int
      44  cookieseek (void *cookie, off64_t *offset, int whence)
      45  {
      46    printf ("`%s' called with cookie %#lx\n", __FUNCTION__,
      47  	  (unsigned long int) cookie);
      48    if (cookie != THE_COOKIE)
      49      ++errors;
      50    cookieseek_called = 1;
      51    return 44;
      52  }
      53  
      54  
      55  static int cookieclose_called;
      56  static int
      57  cookieclose (void *cookie)
      58  {
      59    printf ("`%s' called with cookie %#lx\n", __FUNCTION__,
      60  	  (unsigned long int) cookie);
      61    if (cookie != THE_COOKIE)
      62      ++errors;
      63    cookieclose_called = 1;
      64    return 45;
      65  }
      66  
      67  
      68  static int
      69  do_test (void)
      70  {
      71    cookie_io_functions_t fcts;
      72    char buf[1];
      73    FILE *f;
      74  
      75    fcts.read = cookieread;
      76    fcts.seek = cookieseek;
      77    fcts.close = cookieclose;
      78    fcts.write = cookiewrite;
      79  
      80    f = fopencookie (THE_COOKIE, "r+", fcts);
      81  
      82    xfread (buf, 1, 1, f);
      83  
      84    fwrite (buf, 1, 1, f);
      85    fseek (f, 0, SEEK_CUR);
      86    fclose (f);
      87  
      88    if (cookieread_called == 0
      89        || cookiewrite_called == 0
      90        || cookieseek_called == 0
      91        || cookieclose_called == 0)
      92      ++errors;
      93  
      94    return errors != 0;
      95  }
      96  
      97  #define TEST_FUNCTION do_test ()
      98  #include "../test-skeleton.c"