LIB_EXPORT rc_t CC XFSTreeDepotFindNode ( const struct XFSTreeDepot * self, const char * Path, const struct XFSNode ** Node ) { rc_t RCt; const struct XFSTree * Tree; RCt = 0; Tree = NULL; if ( self == NULL || Path == NULL || Node == 0 ) { return XFS_RC ( rcNull ); } * Node = NULL; RCt = XFSTreeDepotGet ( self, & Tree ); if ( RCt == 0 ) { if ( Tree != NULL ) { RCt = XFSTreeFindNode ( Tree, Path, Node ); XFSTreeRelease ( Tree ); } else { RCt = XFS_RC ( rcNotFound ); } } return RCt; } /* XFSTreeDepotFindNode () */
LIB_EXPORT rc_t CC XFSTreeDepotDispose ( const struct XFSTreeDepot * self ) { rc_t RCt; struct XFSTree * Tree; KLock * mutabor; RCt = 0; Tree = NULL; mutabor = NULL; /* printf ( " |<- DepotDispose ( 0x%p )\n", ( void * ) self ); */ if ( self == 0 ) { return 0; } /* That is not thread safe method :lol: */ Tree = ( struct XFSTree * ) self -> Tree; mutabor = self -> mutabor; free ( ( struct XFSTreeDepot * ) self ); XFSTreeRelease ( Tree ); KLockRelease ( mutabor ); return RCt; } /* XFSTreeDepotDispose () */
LIB_EXPORT rc_t CC XFSTreeDepotDispose ( const struct XFSTreeDepot * self ) { rc_t RCt; struct XFSTree * Tree; KLock * mutabor; RCt = 0; Tree = NULL; mutabor = NULL; /* pLogMsg ( klogDebug, " |<- TreeDepotDispose ( $(tree) )", "tree=%p", ( void * ) self ); */ if ( self == 0 ) { return 0; } /* That is not thread safe method :lol: */ Tree = ( struct XFSTree * ) self -> Tree; mutabor = self -> mutabor; free ( ( struct XFSTreeDepot * ) self ); XFSTreeRelease ( Tree ); KLockRelease ( mutabor ); return RCt; } /* XFSTreeDepotDispose () */
LIB_EXPORT rc_t CC XFSTreeDepotResource ( const struct XFSTreeDepot * self, char * Buffer, size_t BufferSize ) { rc_t RCt; const struct XFSTree * Tree; RCt = 0; Tree = NULL; if ( self == NULL || Buffer == NULL || BufferSize == 0 ) { return XFS_RC ( rcNull ); } * Buffer = 0; RCt = XFSTreeDepotGet ( self, & Tree ); if ( RCt == 0 ) { if ( Tree != NULL ) { if ( Tree -> Resource != NULL ) { string_copy_measure ( Buffer, BufferSize, Tree -> Resource ); } XFSTreeRelease ( Tree ); } else { RCt = XFS_RC ( rcNotFound ); } } return RCt; } /* XFSTreeDepotResource () */
LIB_EXPORT rc_t CC XFSTreeDepotSet ( const struct XFSTreeDepot * self, const struct XFSTree * Tree ) { rc_t RCt; RCt = 0; if ( self == NULL || Tree == NULL ) { return XFS_RC ( rcNull ); } RCt = KLockAcquire ( self -> mutabor ); if ( RCt == 0 ) { RCt = XFSTreeAddRef ( Tree ); if ( RCt == 0 ) { if ( self -> Tree != NULL ) { /*)) I do not check return code here, because we // are going to drop that tree anyway. ((*/ XFSTreeRelease ( self -> Tree ); } ( ( struct XFSTreeDepot * ) self ) -> Tree = ( struct XFSTree * ) Tree; } KLockUnlock ( self -> mutabor ); } return RCt; } /* XFSTreeDepotSet () */