Exemplo n.º 1
0
static
rc_t CC
_KartCollectionNodeConstructorEx (
                        const struct XFSModel * Model,
                        const struct XFSModelNode * Template,
                        const char * Alias,
                        XFSNType Type,
                        const struct XFSNode ** Node
)
{
    rc_t RCt;
    struct XFSNode * TheNode;
    const char * NodeName;
    const char * Path;

    RCt = 0;
    TheNode = NULL;
    NodeName = NULL;
    Path = NULL;

    if ( Model == NULL || Template == NULL || Node == NULL ) {
        return XFS_RC ( rcNull );
    }

    * Node = NULL;

    NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias;

    Path = XFSModelNodeProperty ( Template, XFS_MODEL_SOURCE );
    if ( Path != NULL ) {
        RCt = XFSKartCollectionNodeMake (
                                    NodeName,
                                    Path,
                                    XFSModelNodeSecurity ( Template ),
                                    & TheNode
                                    );
    }
    else {
        RCt = _KartCollectionNodeMakeFromModel (
                                            NodeName,
                                            Model,
                                            Template,
                                            & TheNode
                                            );
    }

    if ( RCt == 0 ) {
        * Node = TheNode;
    }
    else {
        * Node = NULL;

        if ( TheNode != NULL ) {
            XFSNodeDispose ( TheNode );
        }
    }

    return RCt;
}   /* _KartCollectionNodeConstructorEx () */
Exemplo n.º 2
0
static
rc_t CC
_KartNodeConstructorEx (
            const struct XFSModel * Model,
            const struct XFSModelNode * Template,
            const char * Alias,
            XFSNType Type,
            const struct XFSNode ** Node
)
{
    rc_t RCt;
    struct XFSNode * TheNode;
    const char * NodeName;
    uint32_t ProjectId;
    const char * Var;

    RCt = 0;
    TheNode = NULL;
    NodeName = NULL;
    ProjectId = 0;
    Var = NULL;

    XFS_CSAN ( Node )
    XFS_CAN ( Model )
    XFS_CAN ( Template )
    XFS_CAN ( Node )

    NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias;

    Var = XFSModelNodeProperty ( Template, XFS_MODEL_PROJECTID );
    if ( Var == NULL ) {
        return XFS_RC ( rcInvalid );
    }
    ProjectId = atol ( Var );

    RCt = XFSGapKartNodeMake (
                    & TheNode,
                    NodeName,
                    ProjectId,
                    XFSModelNodeSecurity ( Template )
                    );
    if ( RCt == 0 ) {
        * Node = TheNode;
    }
    else {
        * Node = NULL;

        if ( TheNode != NULL ) {
            XFSNodeDispose ( TheNode );
        }
    }

    return RCt;
}   /* _KartNodeConstructorEx () */
Exemplo n.º 3
0
/*)))
 |||
 +++    EncNode has a Teleport, and it is HERE
 |||
(((*/
static
rc_t CC
_EncryptedFileNodeConstructor (
            const struct XFSModel * Model,
            const struct XFSModelNode * Template,
            const char * Alias,
            const struct XFSNode ** Node
)
{
    rc_t RCt;
    struct XFSNode * TheNode;
    const char * NodeName;

    RCt = 0;
    TheNode = NULL;
    NodeName = NULL;

    if ( Node != NULL ) {
        * Node = NULL;
    }

    if ( Model == NULL || Template == NULL || Node == NULL ) {
        return XFS_RC ( rcNull );
    }

    NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias;

    RCt = XFSEncryptedFileNodeMake (
                NodeName,
                XFSModelNodeProperty ( Template, XFS_MODEL_SOURCE ),
                XFSModelNodeProperty ( Template, XFS_MODEL_PASSWD ),
                XFSModelNodeProperty ( Template, XFS_MODEL_ENCTYPE ),
                & TheNode
                );
    if ( RCt == 0 ) {
        * Node = ( struct XFSNode * ) TheNode;
    }

    if ( RCt != 0 ) {
        * Node = NULL;

        if ( TheNode != NULL ) {
            XFSEncNodeDispose ( ( const struct XFSEncNode * ) TheNode );
        }
    }

    return RCt;
}   /* _EncryptedFileNodeConstructor () */
Exemplo n.º 4
0
static
rc_t CC
_VerifyTreeModelNode (
                const struct XFSModel * Model,
                const struct XFSModelNode * Node,
                uint32_t Flags
)
{
    rc_t RCt;
    const char * Prop, * Name;
    bool DoCheck;

    RCt = 0;
    Prop = NULL;
    Name = NULL;

    if ( Model == NULL || Node == NULL ) {
        return XFS_RC ( rcNull );
    }

    DoCheck = Flags != 0
            && ( Flags & XFS_CHECK_INTEGRITY ) == XFS_CHECK_INTEGRITY;

    if ( DoCheck ) {
            /* First we should check that name exists and not NULL */
        Name = XFSModelNodeName ( Node );
        if ( Name == NULL ) {
/*
printf ( "Node name missed\n" );
*/
            return XFS_RC ( rcInvalid );
        }

            /* checking noode with AS name */
        Prop = XFSModelNodeAs ( Node );
        if ( Prop != NULL ) {
            if ( XFSModelLookupNode ( Model, Prop ) == NULL ) {
/*
printf ( "Node [%s] can not stat node with 'AS' name [%s]\n", Name, Prop );
*/
                return XFS_RC ( rcInvalid );
            }
        }

            /* there should not be node with name as property 'label' */
        Prop = XFSModelNodeLabel ( Node );
        if ( Prop != NULL ) {
            /* TODO .... incorrect check, You should check all labels
                for all modell nodes
             */ 
            if ( XFSModelLookupNode ( Model, Prop ) != NULL ) {
/*
printf ( "Node [%s] with 'LABEL' [%s] already exists\n", Name, Prop );
*/
                return XFS_RC ( rcInvalid );
            }
        }
    }

    return RCt;
}   /* _VerifyTreeModelNoode () */
Exemplo n.º 5
0
LIB_EXPORT
rc_t CC
XFSTreeMake ( const struct XFSModel * Model, struct XFSTree ** Tree )
{
    rc_t RCt;
    struct XFSTree * tTree;

    RCt = 0;

    if ( Model == NULL || Tree == NULL ) { 
        return XFS_RC ( rcNull );
    }

    * Tree = NULL;

        /* Creating a tree */
    tTree = calloc ( 1, sizeof ( struct XFSTree ) );
/*
printf ( " |<- ThreeMake ( 0x%p )\n", ( void * ) tTree );
*/
    if ( tTree == NULL ) {
        return XFS_RC ( rcExhausted );
    }

    if ( XFS_StrDup (
                    XFSModelResource ( Model ),
                    & ( tTree -> Resource )
                    ) != 0
    ) {
        XFSTreeDispose ( tTree );
        return XFS_RC ( rcExhausted );
    }

    if ( XFSModelVersion ( Model ) != NULL ) {
        if ( XFS_StrDup (
                        XFSModelVersion ( Model ),
                        & ( tTree -> Version ) ) != 0
        ) {
            XFSTreeDispose ( tTree );
            return XFS_RC ( rcExhausted );
        }
    }
    else {
        tTree -> Version = NULL;
    }

    RCt = XFSNodeMake (
                    Model,
                    XFSModelNodeName ( XFSModelRootNode ( Model ) ),
                    NULL,
                    ( const struct XFSNode ** ) & ( tTree -> Root )
                    );
    if ( RCt == 0 ) {
        KRefcountInit (
                        & ( tTree -> refcount ),
                        1,
                        _sXFSTree_classname,
                        "XFSTreeMake",
                        "Tree"
                        );
    }

    if ( RCt == 0 ) {
        * Tree = tTree;
    }
    else {
        XFSTreeDispose ( tTree );

        tTree = NULL;
    }

/*
printf ( " ->| ThreeMake ( 0x%p )\n", ( void * ) * Tree );
*/

    return RCt;
}   /* XFSTreeMake () */
Exemplo n.º 6
0
static
rc_t CC
_ReadMeNodeConstructor (
            const struct XFSModel * Model,
            const struct XFSModelNode * Template,
            const char * Alias,
            const struct XFSNode ** Node
)
{
    rc_t RCt;
    struct XFSNode * TheNode;
    const char * NodeName;
    const char * TextOrSource;
    struct XFSDoc * ReadMe;

    RCt = 0;
    TheNode = NULL;
    NodeName = NULL;
    TextOrSource = NULL;
    ReadMe = NULL;

    if ( Node != NULL ) {
        * Node = NULL;
    }

    if ( Model == NULL || Template == NULL || Node == NULL ) {
        return XFS_RC ( rcNull );
    }

    NodeName = Alias == NULL ? XFSModelNodeName ( Template ) : Alias;

    /*) There could be "text" and "source" parameters, we will leave
      | source for a future development then, and will use it as text
      (*/
    TextOrSource = XFSModelNodeProperty ( Template, XFS_MODEL_TEXT );
    if ( TextOrSource == NULL ) {
        TextOrSource = XFSModelNodeProperty ( Template, XFS_MODEL_SOURCE );
    }

    if ( TextOrSource == NULL ) {
        return XFS_RC ( rcInvalid );
    }

    RCt = XFSTextDocMake ( & ReadMe );
    if ( RCt == 0 ) {

        RCt = XFSTextDocAppend ( ReadMe, "README:\n%s\n", TextOrSource );
        if ( RCt == 0 ) {
            RCt = XFSDocNodeMakeWithFlavor (
                                & TheNode,
                                ReadMe,
                                NodeName,
                                XFSModelNodeSecurity ( Template ),
                                _sFlavorOfReadMe
                                );
            if ( RCt == 0 ) {
                * Node = TheNode;
            }
            else {
                if ( TheNode != NULL ) {
                    XFSNodeDispose ( TheNode );
                }
            }
        }

        XFSDocRelease ( ReadMe );
    }

    return RCt;
}   /* _ReadMeNodeConstructor () */