Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 static char USMID[] = "@(#) libcif/ciffree.c 30.5 07/26/96 07:19:13";
00038
00039
00040
00041
00042
00043
00044
00045 #define CIF_VERSION 3
00046
00047 #ifdef _ABSOFT
00048 #include "cif.h"
00049 #else
00050 #include <cif.h>
00051 #endif
00052
00053 #include <stdio.h>
00054 #include <string.h>
00055 #include <stdlib.h>
00056
00057 #include "cif_int.h"
00058
00059 void Cif_Free
00060 #ifdef __STDC__
00061 (struct Cif_generic *cr)
00062 #else
00063 (cr)
00064 struct Cif_generic *cr;
00065 #endif
00066 {
00067
00068 register int i;
00069
00070 switch (cr->rectype) {
00071 case CIF_CALLSITE:
00072 if (CIFCS(cr)->argids != NULL)
00073 (void) free ( (char *)CIFCS(cr)->argids );
00074 break;
00075
00076 case CIF_CDIR:
00077 if (CIFCDIR(cr)->ids != NULL)
00078 (void) free ( (char *)CIFCDIR(cr)->ids );
00079 break;
00080
00081 case CIF_CDIR_DOSHARED:
00082 if (CIFCDIRDO(cr)->ids != NULL)
00083 (void) free ( (char *)CIFCDIRDO(cr)->ids );
00084 break;
00085
00086 case CIF_GEOMETRY:
00087 if (CIFGEOM(cr)->dim != NULL)
00088 (void) free ( (char *)CIFGEOM(cr)->dim );
00089 if (CIFGEOM(cr)->name != (char *) NULL)
00090 (void) free ( (char *)CIFGEOM(cr)->name );
00091 break;
00092
00093
00094 case CIF_COMBLK:
00095 if (_cif_version == 1) {
00096 (void) free ( (char *)CIFCB1(cr)->name );
00097 }
00098 else {
00099 (void) free ( (char *)CIFCB(cr)->name );
00100 }
00101 break;
00102
00103 case CIF_CONST:
00104 (void) free ( (char *)CIFCON(cr)->name );
00105 (void) free ( (char *)CIFCON(cr)->value );
00106 if (CIFCON(cr)->origform)
00107 (void) free ( (char *)CIFCON(cr)->oform );
00108 break;
00109
00110 case CIF_ENTRY:
00111 if (CIFENTRY(cr)->argids != NULL)
00112 (void) free ( (char *)CIFENTRY(cr)->argids );
00113 (void) free ( (char *)CIFENTRY(cr)->name );
00114 break;
00115
00116 case CIF_FILE:
00117 (void) free ( (char *)CIFFILE(cr)->name );
00118 break;
00119
00120 case CIF_LABEL:
00121 (void) free ( (char *)CIFLABEL(cr)->name );
00122 break;
00123
00124 case CIF_ORIG_CMD:
00125 (void) free ( (char *)CIFOCMD(cr)->name );
00126 break;
00127
00128 case CIF_MESSAGE:
00129 if (_cif_version < 3) {
00130 for (i = 0; i < (int) CIFMSG1(cr)->nargs; i++)
00131 (void) free ((char *)CIFMSG1(cr)->args[i] );
00132 if (CIFMSG1(cr)->args != NULL)
00133 (void) free ((char *)CIFMSG1(cr)->args);
00134 }
00135 else {
00136 for (i = 0; i < (int) CIFMSG(cr)->nargs; i++)
00137 (void) free ((char *)CIFMSG(cr)->args[i] );
00138 if (CIFMSG(cr)->args != NULL)
00139 (void) free ((char *)CIFMSG(cr)->args);
00140 (void) free ( (char *)CIFMSG(cr)->name );
00141 }
00142 break;
00143
00144 case CIF_MISC_OPTS:
00145 if (_cif_version == 1) {
00146
00147 if (CIFMO1(cr)->msgno != NULL)
00148 (void) free ((char *)CIFMO1(cr)->msgno);
00149 for (i = 0; i < (int) CIFMO(cr)->ncdirs; i++)
00150 (void) free (CIFMO(cr)->cdirs[i] );
00151 if (CIFMO1(cr)->cdirs != NULL)
00152 (void) free ((char *)CIFMO1(cr)->cdirs);
00153 if (CIFMO1(cr)->objname != NULL)
00154 (void) free ((char *)CIFMO1(cr)->objname);
00155 if (CIFMO1(cr)->calname != NULL)
00156 (void) free ((char *)CIFMO1(cr)->calname);
00157 if (CIFMO1(cr)->inname != NULL)
00158 (void) free ((char *)CIFMO1(cr)->inname);
00159
00160 }
00161 else {
00162
00163 if (CIFMO(cr)->msgno != NULL)
00164 (void) free ((char *)CIFMO(cr)->msgno);
00165 for (i = 0; i < (int) CIFMO(cr)->ncdirs; i++)
00166 (void) free (CIFMO(cr)->cdirs[i] );
00167 for (i = 0; i < (int) CIFMO(cr)->numincs; i++)
00168 (void) free (CIFMO(cr)->incdirs[i] );
00169 if (CIFMO(cr)->cdirs != NULL)
00170 (void) free ((char *)CIFMO(cr)->cdirs);
00171 if (CIFMO(cr)->objname != NULL)
00172 (void) free ((char *)CIFMO(cr)->objname);
00173 if (CIFMO(cr)->calname != NULL)
00174 (void) free ((char *)CIFMO(cr)->calname);
00175 if (CIFMO(cr)->inname != NULL)
00176 (void) free ((char *)CIFMO(cr)->inname);
00177 if (CIFMO(cr)->lname != NULL)
00178 (void) free ((char *)CIFMO(cr)->lname);
00179 }
00180
00181 break;
00182
00183 case CIF_NAMELIST:
00184 (void) free ( (char *)CIFNL(cr)->name);
00185 (void) free ((char *)CIFNL(cr)->ids);
00186 break;
00187
00188 case CIF_ND_MSG:
00189 for (i = 0; i < (int) CIFNMSG(cr)->nargs; i++)
00190 (void) free ((char *)CIFNMSG(cr)->args[i] );
00191 if (CIFNMSG(cr)->args != NULL)
00192 (void) free ((char *)CIFNMSG(cr)->args);
00193 break;
00194
00195 case CIF_OBJECT:
00196 if (_cif_version == 1) {
00197 if (CIFOBJ1(cr)->name != NULL)
00198 (void) free ( (char *)CIFOBJ1(cr)->name);
00199 if (CIFOBJ1(cr)->ndims > 0)
00200 (void) free ( (char *)CIFOBJ1(cr)->dim );
00201 }
00202 else {
00203 if (CIFOBJ(cr)->name != NULL)
00204 (void) free ( (char *)CIFOBJ(cr)->name);
00205 if (CIFOBJ(cr)->ndims > 0)
00206 (void) free ( (char *)CIFOBJ(cr)->dim );
00207 }
00208 break;
00209
00210 case CIF_UNIT:
00211 (void) free ( (char *)CIFUNIT(cr)->name);
00212 break;
00213
00214 case CIF_ENDUNIT:
00215 (void) free ( (char *)CIFENDU(cr)->name);
00216 break;
00217
00218 case CIF_USAGE:
00219 if (_cif_version == 1) {
00220 (void) free ( (char *)CIFUSAGE1(cr)->use);
00221 }
00222 else {
00223 (void) free ( (char *)CIFUSAGE(cr)->use);
00224 if (CIFUSAGE(cr)->nmembs > 0) {
00225 (void) free ( (char *)CIFUSAGE(cr)->membs);
00226 }
00227 }
00228 break;
00229
00230 case CIF_FILEDIR:
00231 for (i = 0; i < (int) CIFFDIR(cr)->nunits; i++)
00232 (void) free ( (char *)(CIFFDIR(cr)->ut)[i].name );
00233 (void) free ( (char *)CIFFDIR(cr)->ut);
00234 break;
00235
00236 case CIF_UNITDIR:
00237 (void) free ( (char *)CIFUDIR(cr)->ur);
00238 break;
00239
00240 case CIF_C_TAG:
00241 (void) free ((char *)CIFCTAG(cr)->memids);
00242 (void) free ((char *)CIFCTAG(cr)->name);
00243 break;
00244
00245 case CIF_C_OPTS:
00246 for (i = 0; i < (int) CIFCOPTS(cr)->nincs; i++)
00247 (void) free ((char *)(CIFCOPTS(cr)->incs)[i]);
00248 for (i = 0; i < (int) CIFCOPTS(cr)->ndefs; i++)
00249 (void) free ((char *)(CIFCOPTS(cr)->defs)[i]);
00250 for (i = 0; i < (int) CIFCOPTS(cr)->nudefs; i++)
00251 (void) free ((char *)(CIFCOPTS(cr)->udefs)[i]);
00252 (void) free ((char *)CIFCOPTS(cr)->name);
00253 (void) free ((char *)CIFCOPTS(cr)->incs);
00254 (void) free ((char *)CIFCOPTS(cr)->defs);
00255 (void) free ((char *)CIFCOPTS(cr)->udefs);
00256 break;
00257
00258 case CIF_C_MESSAGE:
00259 if (_cif_version == 1) {
00260
00261 for (i = 0; i < (int) CIFCMSG1(cr)->nargs; i++)
00262 (void) free ((char *)(CIFCMSG1(cr)->args)[i]);
00263 (void) free ((char *)CIFCMSG1(cr)->args);
00264
00265 }
00266 else {
00267
00268 for (i = 0; i < (int) CIFCMSG(cr)->nargs; i++)
00269 (void) free ((char *)(CIFCMSG(cr)->args)[i]);
00270 (void) free ((char *)CIFCMSG(cr)->args);
00271
00272 }
00273
00274 break;
00275
00276 case CIF_C_CONST:
00277 (void) free ((char *)CIFCCON(cr)->value);
00278 break;
00279
00280 case CIF_C_ENTRY:
00281
00282 if (_cif_version == 1) {
00283
00284 (void) free ((char *)CIFCENTRY1(cr)->mods);
00285 (void) free ((char *)CIFCENTRY1(cr)->argids);
00286 (void) free ((char *)CIFCENTRY1(cr)->name);
00287
00288 }
00289 else {
00290
00291 (void) free ((char *)CIFCENTRY(cr)->mods);
00292 (void) free ((char *)CIFCENTRY(cr)->argids);
00293 (void) free ((char *)CIFCENTRY(cr)->name);
00294
00295 }
00296
00297 break;
00298
00299 case CIF_C_OBJECT:
00300 (void) free ((char *)CIFCOBJ(cr)->mods);
00301 (void) free ((char *)CIFCOBJ(cr)->name);
00302 break;
00303
00304 case CIF_C_LINT_DIRECTIVE:
00305 (void) free ((char *)CIFCLDIR(cr)->name);
00306 break;
00307
00308 case CIF_C_MACRO_DEF:
00309 (void) free ((char *)CIFCMDEF(cr)->name);
00310 break;
00311
00312 case CIF_C_ENTRY_END:
00313 (void) free ((char *)CIFCEEND(cr)->name);
00314 break;
00315
00316
00317 case CIF_F90_CALLSITE:
00318 if (CIFF90CS(cr)->argids != NULL)
00319 (void) free ((char *)CIFF90CS(cr)->argids);
00320 if (CIFF90CS(cr)->nmembs != NULL)
00321 (void) free ((char *)CIFF90CS(cr)->nmembs);
00322 if (CIFF90CS(cr)->membs != NULL)
00323 (void) free ((char *)CIFF90CS(cr)->membs);
00324 if (CIFF90CS(cr)->rank == 1 &&
00325 CIFF90CS(cr)->ranks != NULL)
00326 (void) free ((char *)CIFF90CS(cr)->ranks);
00327
00328 break;
00329
00330 case CIF_F90_SCOPE_INFO:
00331 if (CIFF90SI(cr)->entryids != NULL)
00332 (void) free ((char *)CIFF90SI(cr)->entryids);
00333 break;
00334
00335 case CIF_F90_COMBLK:
00336 (void) free ((char *)CIFF90CB(cr)->name);
00337 break;
00338
00339 case CIF_F90_CONST:
00340 (void) free ((char *)CIFF90CON(cr)->value);
00341 break;
00342
00343 case CIF_F90_ENTRY:
00344 if (CIFF90ENTRY(cr)->argids != NULL)
00345 (void) free ((char *)CIFF90ENTRY(cr)->argids);
00346
00347 (void) free ((char *)CIFF90ENTRY(cr)->name);
00348 break;
00349
00350 case CIF_F90_DERIVED_TYPE:
00351 if (_cif_version == 2) {
00352 (void) free ((char *)CIFF90DTYPE2(cr)->name);
00353 if (CIFF90DTYPE2(cr)->memids != NULL)
00354 (void) free ((char *)CIFF90DTYPE2(cr)->memids);
00355 }
00356 else {
00357 (void) free ((char *)CIFF90DTYPE(cr)->name);
00358 if (CIFF90DTYPE(cr)->memids != NULL)
00359 (void) free ((char *)CIFF90DTYPE(cr)->memids);
00360 }
00361
00362 break;
00363
00364 case CIF_F90_LABEL:
00365 (void) free ((char *)CIFF90LABEL(cr)->name);
00366 break;
00367
00368 case CIF_F90_NAMELIST:
00369 (void) free ((char *)CIFF90NL(cr)->name);
00370 if (CIFF90NL(cr)->ids != NULL)
00371 (void) free ((char *)CIFF90NL(cr)->ids);
00372 break;
00373
00374 case CIF_F90_OBJECT:
00375 (void) free ((char *)CIFF90OBJ(cr)->name);
00376 if (CIFF90OBJ(cr)->dim != NULL)
00377 (void) free ((char *)CIFF90OBJ(cr)->dim);
00378 break;
00379
00380
00381 case CIF_F90_MISC_OPTS:
00382 if (CIFF90MO(cr)->cifname != NULL)
00383 (void) free ((char *)CIFF90MO(cr)->cifname);
00384
00385 for (i = 0; i < (int) CIFF90MO(cr)->ncdirs; i++)
00386 (void) free (CIFF90MO(cr)->cdirs[i] );
00387 if (CIFF90MO(cr)->cdirs != NULL)
00388 (void) free ((char *)CIFF90MO(cr)->cdirs);
00389
00390 for (i = 0; i < (int) CIFF90MO(cr)->nPdirs; i++)
00391 (void) free (CIFF90MO(cr)->Pdirs[i] );
00392 for (i = 0; i < (int) CIFF90MO(cr)->npdirs; i++)
00393 (void) free (CIFF90MO(cr)->pdirs[i] );
00394 if (CIFF90MO(cr)->cdirs != NULL)
00395 (void) free ((char *)CIFF90MO(cr)->cdirs);
00396
00397 if (CIFF90MO(cr)->objname != NULL)
00398 (void) free ((char *)CIFF90MO(cr)->objname);
00399 if (CIFF90MO(cr)->calname != NULL)
00400 (void) free ((char *)CIFF90MO(cr)->calname);
00401 if (CIFF90MO(cr)->inname != NULL)
00402 (void) free ((char *)CIFF90MO(cr)->inname);
00403 break;
00404
00405 case CIF_F90_OPT_OPTS:
00406 if (CIFF90OPTOPT(cr)->lopts != NULL)
00407 (void) free ((char *)CIFF90OPTOPT(cr)->lopts);
00408 break;
00409
00410 case CIF_F90_INT_BLOCK:
00411 if (_cif_version == 2) {
00412 if (CIFF90IB2(cr)->name != NULL)
00413 (void) free ((char *)CIFF90IB2(cr)->name);
00414 if (CIFF90IB2(cr)->procids != NULL)
00415 (void) free ((char *)CIFF90IB2(cr)->procids);
00416 }
00417 else {
00418 if (CIFF90IB(cr)->name != NULL)
00419 (void) free ((char *)CIFF90IB(cr)->name);
00420 if (CIFF90IB(cr)->procids != NULL)
00421 (void) free ((char *)CIFF90IB(cr)->procids);
00422 }
00423 break;
00424
00425 case CIF_BE_NODE:
00426 if (_cif_version == 2) {
00427 if ((char *)CIFBENODE2(cr)->succs != (char *) NULL) {
00428 (void) free ((char *)CIFBENODE2(cr)->succs);
00429 }
00430 if ((char *)CIFBENODE2(cr)->lines != (char *) NULL) {
00431 (void) free ((char *)CIFBENODE2(cr)->lines);
00432 }
00433 if ((char *)CIFBENODE2(cr)->label != (char *) NULL) {
00434 (void) free ((char *)CIFBENODE2(cr)->label);
00435 }
00436 } else {
00437 if ((char *)CIFBENODE(cr)->succs != (char *) NULL) {
00438 (void) free ((char *)CIFBENODE(cr)->succs);
00439 }
00440 if ((char *)CIFBENODE(cr)->fid != (char *) NULL) {
00441 (void) free ((char *)CIFBENODE(cr)->fid);
00442 }
00443 if ((char *)CIFBENODE(cr)->lines != (char *) NULL) {
00444 (void) free ((char *)CIFBENODE(cr)->lines);
00445 }
00446 if ((char *)CIFBENODE(cr)->label != (char *) NULL) {
00447 (void) free ((char *)CIFBENODE(cr)->label);
00448 }
00449 }
00450 break;
00451
00452 case CIF_BE_FID:
00453 if ((char *)CIFBEFID(cr)->fid != (char *) NULL) {
00454 (void) free ((char *)CIFBEFID(cr)->fid);
00455 }
00456 break;
00457
00458 case CIF_CC_TYPE:
00459 if (CIFCCTYPE(cr)->name != NULL) {
00460 (void) free (CIFCCTYPE(cr)->name);
00461 }
00462 if (CIFCCTYPE(cr)->mem != NULL) {
00463 (void) free ((char *)CIFCCTYPE(cr)->mem);
00464 }
00465 break;
00466
00467 case CIF_CC_ENTRY:
00468 if (CIFCCENT(cr)->name != NULL) {
00469 (void) free (CIFCCENT(cr)->name);
00470 }
00471 if (CIFCCENT(cr)->param != NULL) {
00472 (void) free ((char *)CIFCCENT(cr)->param);
00473 }
00474 break;
00475
00476 case CIF_CC_OBJ:
00477 if (CIFCCOBJ(cr)->name != NULL) {
00478 (void) free (CIFCCOBJ(cr)->name);
00479 }
00480 break;
00481
00482 case CIF_CC_ENUM:
00483 if (CIFCCENUM(cr)->name != NULL) {
00484 (void) free (CIFCCENUM(cr)->name);
00485 }
00486 if (CIFCCENUM(cr)->value != NULL) {
00487 (void) free (CIFCCENUM(cr)->value);
00488 }
00489 break;
00490
00491 case CIF_CC_EXPR:
00492 if (CIFCCEXPR(cr)->oper != NULL) {
00493 (void) free ((char *)CIFCCEXPR(cr)->oper);
00494 }
00495 break;
00496
00497
00498 default:
00499 break;
00500 }
00501
00502 (void) free ((char *)cr);
00503 return;
00504 }