Пример #1
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;

   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_unlink( &core, name_buf, 0, i );

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

   fskit_print_tree( stdout, &core.root );

   fskit_test_end( &core, &output );

   return 0;
}
Пример #2
0
int fskit_fuse_unlink(const char *path) {

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

   fskit_debug("unlink(%s)\n", path );

   uid_t uid = fskit_fuse_get_uid( state );
   gid_t gid = fskit_fuse_get_gid( state );

   int rc = fskit_unlink( state->core, path, uid, gid );

   fskit_debug("unlink(%s) rc = %d\n", path, rc );

   return rc;
}
Пример #3
0
// detach a file 
// return 0 on success
// return -errno on error 
static int UG_impl_detach( struct SG_gateway* gateway, struct SG_request_data* reqdat, void* cls ) {
   
   int rc = 0;
   struct UG_state* ug = (struct UG_state*)SG_gateway_cls( gateway );
   struct fskit_core* fs = UG_state_fs( ug );
   
   struct ms_client* ms = (struct ms_client*)SG_gateway_ms( gateway );
   uint64_t volume_id = ms_client_get_volume_id( ms );
   
   struct stat sb;
   char const* method = NULL;
   
   // file or directory?
   rc = fskit_stat( fs, reqdat->fs_path, 0, 0, &sb );
   if( rc != 0 ) {
      
      return rc;
   }
   
   if( S_ISREG( sb.st_mode ) ) {
   
      // unlink locally.  The MS will be informed as part of the user route.
      method = "fskit_unlink";
      rc = fskit_unlink( fs, reqdat->fs_path, reqdat->user_id, volume_id );
   }
   else {
      
      // rmdir locally.  The MS will be informed as part of the user route 
      method = "fskit_rmdir";
      rc = fskit_rmdir( fs, reqdat->fs_path, reqdat->user_id, volume_id );
   }
   
   if( rc != 0 ) {
      
      SG_error("%s( '%s' ) rc = %d\n", method, reqdat->fs_path, rc);
   }
   
   return 0;
}