Skip to content

Commit d242755

Browse files
committed
begin work on making xdifile Valgrind-clean
1 parent 291a8cc commit d242755

File tree

4 files changed

+49
-4
lines changed

4 files changed

+49
-4
lines changed

c/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ includedir = @includedir@
2020
# you may have to alter these settings
2121
#---------------------------------
2222

23-
CCOPTS = -fPIC
23+
CCOPTS = -fPIC -g
2424
## CCOPTS = -arch i386 -arch x86_64
2525

2626
# you shouldn't have to alter anything below this line

c/xdi_reader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,6 @@ int main(int argc, char **argv) {
8282
}
8383
printf("\n");
8484
}
85-
free(xdifile);
85+
XDI_cleanup(xdifile);
8686
return 0;
8787
}

c/xdifile.c

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ XDI_readfile(char *filename, XDIFile *xdifile) {
356356
for (i = nheader-2; i <= ilen; i++) {
357357
/* may find a header line interspersed in array data */
358358
COPY_STRING(line, textlines[i]);
359-
xdifile->error_lineno = i;
359+
xdifile->error_lineno = i;
360360
COPY_STRING(xdifile->error_line, line);
361361

362362
if (strncmp(textlines[i], TOK_COMM, 1) == 0) {
@@ -426,3 +426,47 @@ _EXPORT(int) XDI_get_array_name(XDIFile *xdifile, char *name, double *out) {
426426
}
427427
return ERR_NOARR_NAME;
428428
}
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+
}

c/xdifile.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ typedef struct {
1414
long npts; /* number of data points for all arrays */
1515
long narray_labels; /* number of labeled arrays (may be < narrays) */
1616
long nouter; /* number of points in outer scan */
17-
long error_lineno; /* line numberfor any existing error */
17+
long error_lineno; /* line numberfor any existing error */
1818
double dspacing; /* monochromator d spacing */
1919
char *xdi_libversion; /* XDI version of library */
2020
char *xdi_version; /* XDI version string from file*/
@@ -39,6 +39,7 @@ typedef struct {
3939
_EXPORT(int) XDI_readfile(char *filename, XDIFile *xdifile) ;
4040
_EXPORT(int) XDI_get_array_index(XDIFile *xdifile, long n, double *out);
4141
_EXPORT(int) XDI_get_array_name(XDIFile *xdifile, char *name, double *out);
42+
_EXPORT(void) XDI_cleanup(XDIFile *xdifile) ;
4243

4344

4445
/* Tokens used in XDI File */

0 commit comments

Comments
 (0)