📄 gen-free.c
字号:
*/} /* PrintCFreeDefine */static voidPrintCFreeLocals PARAMS ((src, td), FILE *src _AND_ TypeDef *td){ fprintf (src, "\n"); if((td->type->basicType->choiceId == BASICTYPE_SETOF) || (td->type->basicType->choiceId == BASICTYPE_SEQUENCEOF)) { fprintf (src,"\tAsnListNode *l;\n"); fprintf (src,"\tAsnListNode *tmp;\n"); }} /* PrintCFreeLocals */static voidPrintCFreeElmts PARAMS ((src, td, parent, elmts, varName), FILE *src _AND_ TypeDef *td _AND_ Type *parent _AND_ NamedTypeList *elmts _AND_ char *varName){ NamedType *e; if(elmts == NULL) { fprintf (src,"/* ERROR? - expected elmts for this type*/\n"); return; } FOR_EACH_LIST_ELMT (e, elmts) PrintCElmtFree (src, td, parent, e->type, varName);} /* PrintCFreeElmts *//* * Prints code for encoding the elmts of a SEQ or SET */static voidPrintCElmtFree PARAMS ((src, td, parent, e, varName), FILE *src _AND_ TypeDef *td _AND_ Type *parent _AND_ Type *e _AND_ char *varName){ CTRI *ctri; char elmtVarRef[MAX_VAR_REF]; if((e == NULL) || (e->cTypeRefInfo == NULL)) return; ctri = e->cTypeRefInfo; /* build ref to the elmt */ MakeVarPtrRef (genFreeCRulesG, td, parent, e, varName, elmtVarRef); /* if optional then put in NULL check */ if(e->optional || (e->defaultVal != NULL)) fprintf (src, "\tif(%s (%s))\n {\n", ctri->optTestRoutineName, elmtVarRef); /* free contents of elmt first */ switch(ctri->cTypeId) { case C_ANY: case C_ANYDEFINEDBY: case C_LIB: case C_TYPEREF: fprintf (src,"\t%s%s;", ctri->freeRoutineName, elmtVarRef); break; case C_LIST: PrintCFreeListElmts (src, td, e, elmtVarRef); break; /* * this follwing shouldn't happen since embedded * choices/struct are moved to separate typedefs * in normalize.c. */ case C_CHOICE: PrintCFreeChoiceElmts (src, td, e, elmtVarRef); break; case C_STRUCT: PrintCFreeElmts (src, td, e, e->basicType->a.set, elmtVarRef); break; case C_MACROTYPE: break; case C_NO_TYPE: break; default: fprintf (errFileG, "PrintCElmtFree: ERROR - unknown c type id\n"); break; } /* free elmt itself if it is ref'd by ptr */ if(ctri->isPtr) fprintf (src,"\n\tAsn1Free (%s);\n",elmtVarRef); /* write closing brkt for NULL check for optional elmts */ if(e->optional || (e->defaultVal != NULL)) fprintf (src, "\n\t}\n"); fprintf (src,"\n");} /* PrintCElmtFree *//*static voidPrintCFreeListDefine PARAMS ((hdr, td), FILE *hdr _AND_ TypeDef *td){ fprintf(hdr, "#define %s(v) ", td->cTypeDefInfo->freeRoutineName); fprintf (hdr, "ASN1_FREE_LIST (v, %s)", td->type->cTypeRefInfo->freeRoutineName);}*/static voidPrintCFreeListRoutineBody PARAMS ((src, td, t, varName), FILE *src _AND_ TypeDef *td _AND_ Type *t _AND_ char *varName){ Type *e; CTRI *ctri; char *elmtVarRef; fprintf (src,"\tfor (l = FIRST_LIST_NODE (%s); l != NULL; )\n", varName); fprintf (src,"\t{\n"); e = t->basicType->a.setOf; ctri = e->cTypeRefInfo; elmtVarRef = "(l->data)"; switch(ctri->cTypeId) { case C_ANY: case C_LIB: case C_TYPEREF: fprintf (src,"\t\t%s (%s);\n", ctri->freeRoutineName, elmtVarRef); break; case C_LIST: PrintCFreeListElmts (src, td, e, elmtVarRef); break; /* * this follwing shouldn't happen since embedded * choices/struct are moved to separate typedefs * in normalize.c. */ case C_CHOICE: PrintCFreeChoiceElmts (src, td, e, elmtVarRef); break; case C_STRUCT: PrintCFreeElmts (src, td, e, e->basicType->a.set, elmtVarRef); break; case C_MACROTYPE: break; case C_NO_TYPE: break; default: fprintf (errFileG, "PrintCElmtFree: ERROR - unknown c type id\n"); break; } fprintf (src,"\t\ttmp = l->next;\n"); fprintf (src,"\t\tAsn1Free (l->data);\n"); fprintf (src,"\t\tAsn1Free (l);\n"); fprintf (src,"\t\tl = tmp;\n"); fprintf (src,"\t}\n");}static voidPrintCFreeListElmts PARAMS ((src, td, t, varName), FILE *src _AND_ TypeDef *td _AND_ Type *t _AND_ char *varName){ Type *e; CTRI *ctri; char *elmtVarRef; fprintf (src,"\t{\n"); fprintf (src,"\t\tAsnListNode *l;\n"); fprintf (src,"\t\tAsnListNode *tmp;\n"); fprintf (src,"\t\tfor (l = FIRST_LIST_NODE (%s); l != NULL; )\n", varName); fprintf (src,"\t\t{\n"); e = t->basicType->a.setOf; ctri = e->cTypeRefInfo; elmtVarRef = "(l->data)"; switch(ctri->cTypeId) { case C_LIB: case C_TYPEREF: fprintf (src,"\t\t%s (%s);\n", ctri->freeRoutineName, elmtVarRef); break; case C_LIST: PrintCFreeListElmts (src, td, e, elmtVarRef); break; /* * this follwing shouldn't happen since embedded * choices/struct are moved to separate typedefs * in normalize.c. */ case C_CHOICE: PrintCFreeChoiceElmts (src, td, e, elmtVarRef); break; case C_STRUCT: PrintCFreeElmts (src, td, e, e->basicType->a.set, elmtVarRef); break; case C_MACROTYPE: break; case C_NO_TYPE: break; default: fprintf (errFileG, "PrintCElmtFree: ERROR - unknown c type id\n"); break; } fprintf (src,"\t\t tmp = l->next;\n"); fprintf (src,"\t\t Asn1Free (l->data);\n"); fprintf (src,"\t\t Asn1Free (l);\n"); fprintf (src,"\t\t l = tmp;\n"); fprintf (src,"\t\t}\n"); fprintf (src,"\t}\n");} /* PrintCFreeListELmts */static voidPrintCFreeChoiceElmts PARAMS ((src, td, t, varName), FILE *src _AND_ TypeDef *td _AND_ Type *t _AND_ char *varName){ NamedType *e; CTRI *ctri; void *tmp; ctri = t->cTypeRefInfo; fprintf (src,"\tswitch(%s->%s)\n {\n", varName, ctri->choiceIdEnumFieldName); FOR_EACH_LIST_ELMT (e, t->basicType->a.choice) { tmp = (void*)CURR_LIST_NODE (t->basicType->a.choice); if(e->type == NULL) continue; ctri = e->type->cTypeRefInfo; if(e->type->cTypeRefInfo == NULL) fprintf (src, "\t case ????:\n"); else if(ctri->isPtr) { fprintf (src, "\t case %s:\n", ctri->choiceIdSymbol); PrintCElmtFree (src, td, t, e->type, varName); fprintf (src,"\tbreak;\n\n"); } SET_CURR_LIST_NODE (t->basicType->a.choice, tmp); } fprintf (src, "\t}\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -