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