The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/tools/tests/xnu_quick_test/xattr_tests.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  *  xattr_tests.c
    3  *  xnu_quick_test
    4  *
    5  *  Created by Jerry Cottingham on 6/2/2005.
    6  *  Copyright 2005 Apple Computer Inc. All rights reserved.
    7  *
    8  */
    9 
   10 #include "tests.h"
   11 #include <sys/xattr.h>
   12 
   13 extern char  g_target_path[ PATH_MAX ];
   14 
   15 #define XATTR_TEST_NAME "com.apple.xattr_test"
   16 
   17 /*  **************************************************************************************************************
   18  *      Test xattr system calls.
   19  *  **************************************************************************************************************
   20  */
   21 int xattr_tests( void * the_argp )
   22 {
   23         int                     my_err;
   24         int                     my_fd = -1;
   25         char *          my_pathp = NULL;
   26         ssize_t         my_result;
   27         char            my_buffer[ 64 ];
   28         char            my_xattr_data[ ] = "xattr_foo";
   29 
   30         my_pathp = (char *) malloc( PATH_MAX );
   31         if ( my_pathp == NULL ) {
   32                 printf( "malloc failed with error %d - \"%s\" \n", errno, strerror( errno) );
   33                 goto test_failed_exit;
   34         }
   35         *my_pathp = 0x00;
   36         strcat( my_pathp, &g_target_path[0] );
   37         strcat( my_pathp, "/" );
   38 
   39         /* create a test file */
   40         my_err = create_random_name( my_pathp, 1 );
   41         if ( my_err != 0 ) {
   42                 goto test_failed_exit;
   43         }
   44         
   45         /* use setxattr to add an attribute to our test file */
   46         my_err = setxattr( my_pathp, XATTR_TEST_NAME, &my_xattr_data[0], sizeof(my_xattr_data), 0, 0 );
   47         if ( my_err == -1 ) {
   48                 printf( "setxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
   49                 goto test_failed_exit;
   50         }
   51         
   52         /* make sure it is there using listxattr and getxattr */
   53         my_result = listxattr( my_pathp, NULL, 0, 0 );
   54         if ( my_err == -1 ) {
   55                 printf( "listxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
   56                 goto test_failed_exit;
   57         }
   58         if ( my_result != (strlen( XATTR_TEST_NAME ) + 1) ) {
   59                 printf( "listxattr did not get the attribute name length \n" );
   60                 goto test_failed_exit;
   61         }
   62 
   63         memset( &my_buffer[0], 0x00, sizeof( my_buffer ) );
   64         my_result = getxattr( my_pathp, XATTR_TEST_NAME, &my_buffer[0], sizeof(my_buffer), 0, 0 );
   65         if ( my_err == -1 ) {
   66                 printf( "getxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
   67                 goto test_failed_exit;
   68         }
   69         if ( my_result != (strlen( &my_xattr_data[0] ) + 1) ||
   70                  strcmp( &my_buffer[0], &my_xattr_data[0] ) != 0 ) {
   71                 printf( "getxattr did not get the correct attribute data \n" );
   72                 goto test_failed_exit;
   73         }
   74 
   75         /* use removexattr to remove an attribute to our test file */
   76         my_err = removexattr( my_pathp, XATTR_TEST_NAME, 0 );
   77         if ( my_err == -1 ) {
   78                 printf( "removexattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
   79                 goto test_failed_exit;
   80         }
   81 
   82         /* make sure it is gone */
   83         my_result = listxattr( my_pathp, NULL, 0, 0 );
   84         if ( my_err == -1 ) {
   85                 printf( "listxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
   86                 goto test_failed_exit;
   87         }
   88         if ( my_result != 0 ) {
   89                 printf( "removexattr did not remove our test attribute \n" );
   90                 goto test_failed_exit;
   91         }
   92 
   93         /* repeat tests using file descriptor versions of the xattr system calls */
   94         my_fd = open( my_pathp, O_RDONLY, 0 );
   95         if ( my_fd == -1 ) {
   96                 printf( "open call failed with error %d - \"%s\" \n", errno, strerror( errno) );
   97                 printf( "\t file we attempted to open -> \"%s\" \n", my_pathp );
   98                 goto test_failed_exit;
   99         }
  100 
  101         /* use fsetxattr to add an attribute to our test file */
  102         my_err = fsetxattr( my_fd, XATTR_TEST_NAME, &my_xattr_data[0], sizeof(my_xattr_data), 0, 0 );
  103         if ( my_err == -1 ) {
  104                 printf( "fsetxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
  105                 goto test_failed_exit;
  106         }
  107         
  108         /* make sure it is there using flistxattr and fgetxattr */
  109         my_result = flistxattr( my_fd, NULL, 0, 0 );
  110         if ( my_err == -1 ) {
  111                 printf( "flistxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
  112                 goto test_failed_exit;
  113         }
  114         if ( my_result != (strlen( XATTR_TEST_NAME ) + 1) ) {
  115                 printf( "flistxattr did not get the attribute name length \n" );
  116                 goto test_failed_exit;
  117         }
  118 
  119         memset( &my_buffer[0], 0x00, sizeof( my_buffer ) );
  120         my_result = fgetxattr( my_fd, XATTR_TEST_NAME, &my_buffer[0], sizeof(my_buffer), 0, 0 );
  121         if ( my_err == -1 ) {
  122                 printf( "fgetxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
  123                 goto test_failed_exit;
  124         }
  125         if ( my_result != (strlen( &my_xattr_data[0] ) + 1) ||
  126                  strcmp( &my_buffer[0], &my_xattr_data[0] ) != 0 ) {
  127                 printf( "fgetxattr did not get the correct attribute data \n" );
  128                 goto test_failed_exit;
  129         }
  130 
  131         /* use fremovexattr to remove an attribute to our test file */
  132         my_err = fremovexattr( my_fd, XATTR_TEST_NAME, 0 );
  133         if ( my_err == -1 ) {
  134                 printf( "fremovexattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
  135                 goto test_failed_exit;
  136         }
  137 
  138         /* make sure it is gone */
  139         my_result = flistxattr( my_fd, NULL, 0, 0 );
  140         if ( my_err == -1 ) {
  141                 printf( "flistxattr failed with error %d - \"%s\" \n", errno, strerror( errno) );
  142                 goto test_failed_exit;
  143         }
  144         if ( my_result != 0 ) {
  145                 printf( "fremovexattr did not remove our test attribute \n" );
  146                 goto test_failed_exit;
  147         }
  148          
  149         my_err = 0;
  150         goto test_passed_exit;
  151 
  152 test_failed_exit:
  153         my_err = -1;
  154         
  155 test_passed_exit:
  156         if ( my_fd != -1 )
  157                 close( my_fd );
  158         if ( my_pathp != NULL ) {
  159                 remove( my_pathp );     
  160                 free( my_pathp );
  161          }
  162         return( my_err );
  163 }
  164 

Cache object: a0823f42a1267e2bcba629cc36eee680


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.