static idl_action idl_fileOpen( idl_scope scope, const char *name, void *userData) { idl_tmplExp te; c_char tmplFileName[1024]; c_char *tmplPath; c_char *orbPath; int tmplFile; struct os_stat_s tmplStat; unsigned int nRead; OS_UNUSED_ARG(scope); OS_UNUSED_ARG(userData); tmplPath = os_getenv("OSPL_TMPL_PATH"); orbPath = os_getenv("OSPL_ORB_PATH"); if (tmplPath == NULL) { printf ("OSPL_TMPL_PATH not defined\n"); return (idl_abort); } if (orbPath == NULL) { printf ("OSPL_ORB_PATH not defined\n"); return (idl_abort); } /* Prepare file header template */ snprintf(tmplFileName, sizeof(tmplFileName), "%s%c%s%ccorbaCxxStreamsClassSpecHeader", tmplPath, OS_FILESEPCHAR, orbPath, OS_FILESEPCHAR); /* QAC EXPECT 3416; No side effects here */ if ((os_stat(tmplFileName, &tmplStat) != os_resultSuccess) || (os_access(tmplFileName, OS_ROK) != os_resultSuccess)) { printf ("No template found or protection violation (%s)\n", tmplFileName); return (idl_abort); } /* QAC EXPECT 5007; will not use wrapper */ idlpp_template = os_malloc(tmplStat.stat_size+1); tmplFile = open(tmplFileName, O_RDONLY); nRead = (unsigned int)read(tmplFile, idlpp_template, tmplStat.stat_size); memset(&idlpp_template[nRead], 0, tmplStat.stat_size+1-nRead); close(tmplFile); idlpp_macroAttrib = idl_macroAttribNew(IDL_TOKEN_START, IDL_TOKEN_OPEN, IDL_TOKEN_CLOSE); idlpp_macroSet = idl_macroSetNew(); idlpp_inStream = idl_streamInNew(idlpp_template, idlpp_macroAttrib); /* Expand file header */ idl_macroSetAdd(idlpp_macroSet, idl_macroNew("basename", name)); /* set dll stuff */ idl_macroSetAdd(idlpp_macroSet, idl_macroNew(IDL_DLL_TMPLMACRO_MACRO_NAME, idl_dllGetMacro())); idl_macroSetAdd(idlpp_macroSet, idl_macroNew(IDL_DLL_TMPLMACRO_HEADER_NAME, idl_dllGetHeader())); te = idl_tmplExpNew(idlpp_macroSet); idl_tmplExpProcessTmpl(te, idlpp_inStream, idl_fileCur()); idl_streamInFree(idlpp_inStream); idl_tmplExpFree(te); /* Prepare class definition template */ snprintf(tmplFileName, sizeof(tmplFileName), "%s%c%s%ccorbaCxxStreamsClassSpec", tmplPath, OS_FILESEPCHAR, orbPath, OS_FILESEPCHAR); /* QAC EXPECT 3416; No side effects here */ if ((os_stat(tmplFileName, &tmplStat) != os_resultSuccess) || (os_access(tmplFileName, OS_ROK) != os_resultSuccess)) { printf ("No template found or protection violation (%s)\n", tmplFileName); return (idl_abort); } /* QAC EXPECT 5007; will not use wrapper */ idlpp_template = os_malloc(tmplStat.stat_size+1); tmplFile = open(tmplFileName, O_RDONLY); nRead = (unsigned int)read(tmplFile, idlpp_template, tmplStat.stat_size); memset(&idlpp_template[nRead], 0, tmplStat.stat_size+1-nRead); close(tmplFile); idlpp_indent_level = 0; return idl_explore; /* QAC EXPECT 2006; overview does not get better with one exit */ }
/** @brief callback function called on structure definition in the IDL input file. * * Generate code for the following IDL construct: * @verbatim => struct <structure-name> { <structure-member-1>; ... ... <structure-member-n>; }; @endverbatim * * This function generates prototypes for the helper functions to * load the structures metadata, to determine the structures keys * and the scoped name of the struct if the struct is defined in * the global scope or within a module. * The name of the metadata load function is: * @verbatim __<scope-elements>_<structure-name>__load @endverbatim * The name of the key query function is: * @verbatim __<scope-elements>_<structure-name>__keys @endverbatim * The name of the name query function is: * @verbatim __<scope-elements>_<structure-name>__name @endverbatim * If the struct is defined within another struct or within a * union, no key nor its name can be queried. Such a structure * can not be communicated via Splice as a separate entity. * IDL structs are mapped onto C structs for Splice, therefor * a struct definition is opened: * @verbatim struct <scope-elements>_<name> { @endverbatim * * @param scope Current scope (and scope of the structure definition) * @param name Name of the structure * @param structSpec Specification of the struct holding the amount of members * @return Next action for this structure (idl_explore) */ static idl_action idl_structureOpen( idl_scope scope, const char *name, idl_typeStruct structSpec, void *userData) { if (idl_scopeStackSize(scope) == 0 || idl_scopeElementType (idl_scopeCur(scope)) == idl_tModule) { /* define the prototype of the function for metadata load */ idl_fileOutPrintf(idl_fileCur(), "extern c_metaObject __%s__load (c_base base);\n", idl_scopeStack(scope, "_", name)); /* define the prototype of the function for querying the keys */ idl_fileOutPrintf(idl_fileCur(), "extern const char * __%s__keys (void);\n", idl_scopeStack(scope, "_", name)); /* define the prototype of the function for querying scoped structure name */ idl_fileOutPrintf(idl_fileCur(), "extern const char * __%s__name (void);\n", idl_scopeStack(scope, "_", name)); if(!test_mode) { /* define the prototype of the function for performing copyIn/copyOut. This needs to be * exported as well to ensure it can be access by other (ussually also OpenSplice * generated) packages */ idl_fileOutPrintf( idl_fileCur(), "struct _%s ;\n", idl_scopeStack(scope, "_", name)); if(useVoidPtrs) { idl_fileOutPrintf( idl_fileCur(), "extern %s c_bool __%s__copyIn(c_base base, void *from, void *to);\n", idl_dllGetMacro(), idl_scopeStack(scope, "_", name)); } else { idl_fileOutPrintf( idl_fileCur(), "extern %s c_bool __%s__copyIn(c_base base, struct %s *from, struct _%s *to);\n", idl_dllGetMacro(), idl_scopeStack(scope, "_", name), idl_scopeStack(scope, "::", name), idl_scopeStack(scope, "_", name)); } idl_fileOutPrintf( idl_fileCur(), "extern %s void __%s__copyOut(void *_from, void *_to);\n", idl_dllGetMacro(), idl_scopeStack(scope, "_", name)); } } idl_printIndent(indent_level); idl_fileOutPrintf( idl_fileCur(), "struct _%s {\n", idl_scopeStack(scope, "_", name)); indent_level++; /* return idl_explore to indicate that the rest of the structure needs to be processed */ return idl_explore; }