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; }
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; }
// 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; }