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 () */
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 () */
/*))) ||| +++ 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 () */
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 () */
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 () */
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 () */