@@ -356,7 +356,7 @@ XDI_readfile(char *filename, XDIFile *xdifile) {
356
356
for (i = nheader - 2 ; i <= ilen ; i ++ ) {
357
357
/* may find a header line interspersed in array data */
358
358
COPY_STRING (line , textlines [i ]);
359
- xdifile -> error_lineno = i ;
359
+ xdifile -> error_lineno = i ;
360
360
COPY_STRING (xdifile -> error_line , line );
361
361
362
362
if (strncmp (textlines [i ], TOK_COMM , 1 ) == 0 ) {
@@ -426,3 +426,47 @@ _EXPORT(int) XDI_get_array_name(XDIFile *xdifile, char *name, double *out) {
426
426
}
427
427
return ERR_NOARR_NAME ;
428
428
}
429
+
430
+ _EXPORT (void ) XDI_cleanup (XDIFile * xdifile ) {
431
+ /* one needs to explicitly free each part of the struct */
432
+ long j ;
433
+ for (j = 0 ; j < xdifile -> narrays ; j ++ ) {
434
+ free (xdifile -> array [j ]);
435
+ free (xdifile -> array_labels [j ]);
436
+ free (xdifile -> array_units [j ]);
437
+ }
438
+ free (xdifile -> array );
439
+ free (xdifile -> array_labels );
440
+ free (xdifile -> array_units );
441
+
442
+ free (xdifile -> xdi_libversion );
443
+ free (xdifile -> xdi_version );
444
+ free (xdifile -> extra_version );
445
+ free (xdifile -> filename );
446
+ free (xdifile -> element );
447
+ free (xdifile -> edge );
448
+ free (xdifile -> comments );
449
+ free (xdifile -> error_line );
450
+
451
+ for (j = 0 ; j < xdifile -> nmetadata ; j ++ ) {
452
+ free (xdifile -> meta_families [j ]);
453
+ free (xdifile -> meta_keywords [j ]);
454
+ free (xdifile -> meta_values [j ]);
455
+ }
456
+ free (xdifile -> meta_families );
457
+ free (xdifile -> meta_keywords );
458
+ free (xdifile -> meta_values );
459
+
460
+ free (xdifile -> outer_label );
461
+ /* for (j = 0; j < xdifile->nouter; j++) { */
462
+ /* free(xdifile->outer_array[j]); */
463
+ /* free(xdifile->outer_breakpts[j]); */
464
+ /* } */
465
+ free (xdifile -> outer_array );
466
+ free (xdifile -> outer_breakpts );
467
+
468
+
469
+
470
+
471
+ free (xdifile );
472
+ }
0 commit comments