Ejemplo n.º 1
0
int main( int argc, char** argv ) {

   struct fskit_core* core = NULL;
   int rc;
   char name_buf[10];
   struct fskit_file_handle* fh = NULL;
   void* output;

   rc = fskit_test_begin( &core, NULL );
   if( rc != 0 ) {
      exit(1);
   }

   for( int i = 0; i < 256; i++ ) {

      sprintf(name_buf, "/%d", i );

      fh = fskit_create( core, name_buf, 0, i, 0644, &rc );

      if( fh == NULL ) {
         fskit_error("fskit_create('%s') rc = %d\n", name_buf, rc );
         exit(1);
      }

      fskit_close( core, fh );
   }

   for( int i = 0; i < 256; i++ ) {

      sprintf(name_buf, "/%d", i );

      struct stat sb;
      memset( &sb, 0xFF, sizeof(struct stat) );

      rc = fskit_stat( core, name_buf, 0, i, &sb );

      if( rc != 0 ) {
         fskit_error("fskit_stat('%s') rc = %d\n", name_buf, rc );
         exit(1);
      }

      fskit_debug("%s: stat(st_dev=%lX st_ino=%lX st_mode=%o st_nlink=%lu st_uid=%d st_gid=%d st_rdev=%lX st_size=%jd st_blksize=%ld st_blocks=%ld)\n",
               name_buf, sb.st_dev, sb.st_ino, sb.st_mode, sb.st_nlink, sb.st_uid, sb.st_gid, sb.st_rdev, sb.st_size, sb.st_blksize, sb.st_blocks );
   }

   fskit_print_tree( stdout, fskit_core_get_root( core ) );

   fskit_test_end( core, &output );

   return 0;
}
Ejemplo n.º 2
0
int main( int argc, char** argv ) {

   struct fskit_core core;
   int rc;
   char name_buf[10];
   struct fskit_file_handle* fh = NULL;
   void* output;

   const struct timeval times[2] = {
      {12345, 67890},
      {23456, 78901}
   };

   rc = fskit_test_begin( &core, NULL );
   if( rc != 0 ) {
      exit(1);
   }

   for( int i = 0; i < 256; i++ ) {

      sprintf(name_buf, "/%d", i );

      fh = fskit_create( &core, name_buf, 0, i, 0644, &rc );

      if( fh == NULL ) {
         fskit_error("fskit_create('%s') rc = %d\n", name_buf, rc );
         exit(1);
      }

      fskit_close( &core, fh );
   }

   for( int i = 0; i < 256; i++ ) {

      sprintf(name_buf, "/%d", i );

      rc = fskit_utimes( &core, name_buf, 0, i, times );

      if( rc != 0 ) {
         fskit_error("fskit_utimes('%s') rc = %d\n", name_buf, rc );
         exit(1);
      }
   }

   fskit_print_tree( stdout, &core.root );

   fskit_test_end( &core, &output );

   return 0;
}
Ejemplo n.º 3
0
int fskit_fuse_create(const char *path, mode_t mode, struct fuse_file_info *fi) {

   struct fskit_fuse_state* state = fskit_fuse_get_state();
   if( (state->callbacks & FSKIT_FUSE_CREATE) == 0 ) {
      return -ENOSYS;
   }

   fskit_debug("create(%s, %o, %p)\n", path, mode, fi );

   uid_t uid = fskit_fuse_get_uid( state );
   gid_t gid = fskit_fuse_get_gid( state );
   struct fskit_fuse_file_info* ffi = NULL;
   int rc = 0;

   struct fskit_file_handle* fh = fskit_create( state->core, path, uid, gid, mode, &rc );

   if( rc != 0 ) {

      fskit_debug("create(%s, %o, %p) rc = %d\n", path, mode, fi, rc );

      return rc;
   }

   ffi = fskit_fuse_make_file_handle( fh );
   if( ffi == NULL ) {

      fskit_close( state->core, fh );

      fskit_debug("create(%s, %o, %p) rc = %d\n", path, mode, fi, -ENOMEM );

      return -ENOMEM;
   }

   fi->fh = (uintptr_t)ffi;

   // NOTE: fskit_read() and fskit_write() return a negative error code on error,
   // so set direct_io to allow this error code to be propagated.
   fi->direct_io = 1;

   fskit_debug("create(%s, %o, %p) rc = %d\n", path, mode, fi, rc );

   return rc;
}
Ejemplo n.º 4
0
int main( int argc, char** argv ) {

   struct fskit_core core;
   int rc;
   void* output;
   struct fskit_path_iterator* itr = NULL;
   struct fskit_file_handle* fh = NULL;

   rc = fskit_test_begin( &core, NULL );
   if( rc != 0 ) {
      exit(1);
   }

   rc = fskit_test_mkdir_LR_recursive( &core, "/root", 7 );
   if( rc != 0 ) {
      fskit_error("fskit_test_mkdir_LR_recursive('/root') rc = %d\n", rc );
      exit(1);
   }
   
   fh = fskit_create( &core, "/root/L/R/L/R/L/R/.foo", 0, 0, 0777, &rc );
   if( fh == NULL ) {
      fskit_error("fskit_create('/root/L/R/L/R/L/R/.foo') rc = %d\n", rc );
      exit(1);
   }
   
   fskit_close( &core, fh );
   
   fh = fskit_create( &core, "/bar.f", 0, 0, 0777, &rc );
   if( fh == NULL ) {
      fskit_error("fskit_create('/bar.f') rc = %d\n", rc );
      exit(1);
   }
   
   fskit_close( &core, fh );
   
   rc = fskit_mkdir( &core, "/bar.d", 0755, 0, 0 );
   if( rc < 0 ) {
      fskit_error("fskit_mkdir('/bar.d') rc = %d\n", rc );
      exit(1);  
   }
   
   /////////////////////////////////////////////////////////////////////////////////////
   printf("\n\nIterate succeeds...\n\n");
   
   for( itr = fskit_path_begin( &core, "/root/L/R/L/R/L/R/.foo", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }
   
   printf("Iterator error: %d\n", fskit_path_iterator_error( itr ) );
   
   fskit_path_iterator_release( itr );
   
   
   printf("\n\n");
   
   
   for( itr = fskit_path_begin( &core, "/bar.f", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }
   
   printf("Iterator error: %d\n", fskit_path_iterator_error( itr ) );
   
   fskit_path_iterator_release( itr );
   
   
   printf("\n\n");
   
   
   for( itr = fskit_path_begin( &core, "/bar.d", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }
   
   printf("Iterator error: %d\n", fskit_path_iterator_error( itr ) );
   
   fskit_path_iterator_release( itr );
   
   
   /////////////////////////////////////////////////////////////////////////////////////
   printf("\n\nIterate succeeds on path with duplicate . and /...\n\n");
   
   for( itr = fskit_path_begin( &core, "././root/L/R//L//././/R/L//.///R", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }

   printf("Iterator error: %d\n", fskit_path_iterator_error( itr ) );

   fskit_path_iterator_release( itr );
      
   printf("\n\n");
   
   for( itr = fskit_path_begin( &core, "/././root///././/.//.", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }

   printf("Iterator error: %d\n", fskit_path_iterator_error( itr ) );

   fskit_path_iterator_release( itr );
      
   /////////////////////////////////////////////////////////////////////////////////////
   printf("\n\nIterate fails (path too long)...\n\n");
   
   for( itr = fskit_path_begin( &core, "/root/L/R/L/R/L/R/L/R/L/R/L/R/L/R/L/R", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }
   
   printf("Iterator error: %d\n", fskit_path_iterator_error( itr ) );
   
   fskit_path_iterator_release( itr );
   
   /////////////////////////////////////////////////////////////////////////////////////
   printf("\n\nIterate fails (path does not exist)...\n\n");
   
   for( itr = fskit_path_begin( &core, "/root/L/R/L/foo/L/R", true ); !fskit_path_end( itr ); fskit_path_next( itr ) ) {
      
      struct fskit_entry* cur = fskit_path_iterator_entry( itr );
      char* cur_path = fskit_path_iterator_path( itr );
      
      printf("Entry %016" PRIX64 " (%p): %c %s\n", fskit_entry_get_file_id( cur ), cur, fskit_entry_get_type( cur ) == FSKIT_ENTRY_TYPE_FILE ? 'F' : 'D', cur_path );
      
      free( cur_path );
   }
   
   printf("Iterator error: %d\n\n\n", fskit_path_iterator_error( itr ) );
   
   fskit_path_iterator_release( itr );
   
   fskit_test_end( &core, &output );

   return 0;
}
Ejemplo n.º 5
0
int main( int argc, char** argv ) {

   struct fskit_core core;
   int rc;
   char name_buf[10];
   char name_buf2[10];

   struct fskit_file_handle* fh = NULL;
   void* output;

   rc = fskit_test_begin( &core, NULL );
   if( rc != 0 ) {
      exit(1);
   }

   // setup
   for( int i = 0; i < 10; i++ ) {

      // create /a$i

      memset(name_buf, 0, 10 );
      sprintf(name_buf, "/a%d", i );

      fh = fskit_create( &core, name_buf, 0, i, 0644, &rc );

      if( fh == NULL ) {
         fskit_error("fskit_create('%s') rc = %d\n", name_buf, rc );
         exit(1);
      }

      fskit_close( &core, fh );

      // mkdir /d$i

      memset(name_buf, 0, 10 );
      sprintf(name_buf, "/d%d", i );

      rc = fskit_mkdir( &core, name_buf, 0755, 0, 0 );
      if( rc != 0 ) {
         fskit_error("fskit_mkdir('%s') rc = %d\n", name_buf, rc );
         exit(1);
      }
   }

   printf("Initial tree:\n");
   fskit_print_tree( stdout, &core.root );

   // rename in the same directory
   // rename /a$i to /b$i
   for( int i = 0; i < 10; i++ ) {

      memset(name_buf, 0, 10 );
      memset(name_buf2, 0, 10 );

      sprintf(name_buf, "/a%d", i );
      sprintf(name_buf2, "/b%d", i );

      rc = fskit_rename( &core, name_buf, name_buf2, 0, 0 );
      if( rc != 0 ) {
         fskit_error("fskit_rename('%s', '%s') rc = %d\n", name_buf, name_buf2, rc );
         exit(1);
      }
   }

   printf("Rename /a$i to /b$i");
   fskit_print_tree( stdout, &core.root );

   // rename into a deeper directory
   // rename /b$i to /d$i/a$i
   for( int i = 0; i < 10; i++ ) {

      memset(name_buf, 0, 10 );
      memset(name_buf2, 0, 10 );

      sprintf(name_buf, "/b%d", i );
      sprintf(name_buf2, "/d%d/a%d", i, i );

      rc = fskit_rename( &core, name_buf, name_buf2, 0, 0 );
      if( rc != 0 ) {
         fskit_error("fskit_rename('%s', '%s') rc = %d\n", name_buf, name_buf2, rc );
         exit(1);
      }
   }


   printf("Rename /b$i to /d$i/a$i");
   fskit_print_tree( stdout, &core.root );

   // rename into a shallower directory
   // rename /d$i/a$i to /a$i
   for( int i = 0; i < 10; i++ ) {

      memset(name_buf, 0, 10 );
      memset(name_buf2, 0, 10 );

      sprintf(name_buf, "/d%d/a%d", i, i );
      sprintf(name_buf2, "/a%d", i );

      rc = fskit_rename( &core, name_buf, name_buf2, 0, 0 );
      if( rc != 0 ) {
         fskit_error("fskit_rename('%s', '%s') rc = %d\n", name_buf, name_buf2, rc );
         exit(1);
      }
   }

   printf("Rename /d/a$i to /a$i");
   fskit_print_tree( stdout, &core.root );

   fskit_test_end( &core, &output );

   return 0;
}