Esempio n. 1
0
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 () */
Esempio n. 2
0
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 () */
Esempio n. 3
0
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 () */
Esempio n. 4
0
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 () */
Esempio n. 5
0
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 () */