Skip to content

Commit e1b58b4

Browse files
committed
all test data runs without error in valgrind
1 parent 09213b7 commit e1b58b4

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

c/test_valgrind.pl

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/perl
2+
3+
use strict;
4+
use warnings;
5+
6+
7+
print "Testing good files\n";
8+
foreach my $file (qw(co_metal_rt.xdi
9+
cu_metal_10K.xdi
10+
cu_metal_rt.xdi
11+
fe2o3_rt.xdi
12+
fe3c_rt.xdi
13+
fe_metal_rt.xdi
14+
fen_rt.xdi
15+
feo_rt1.xdi
16+
ni_metal_rt.xdi
17+
nonxafs_1d.xdi
18+
nonxafs_2d.xdi
19+
pt_metal_rt.xdi
20+
se_na2so4_rt.xdi
21+
se_znse_rt.xdi
22+
zn_znse_rt.xdi
23+
)) {
24+
my $command = "valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all ./xdi_reader ../baddata/$file 2>&1";
25+
my $x = `$command`;
26+
printf "\t%-17s: ", $file;
27+
if ($x =~ m{All heap blocks were freed}) {
28+
print "ok\n";
29+
} else {
30+
print "not ok\n";
31+
};
32+
33+
};
34+
35+
36+
print "\nTesting bad files\n";
37+
foreach my $i (0 .. 29) {
38+
my $n = sprintf("%2.2d", $i);
39+
my $command = "valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all ./xdi_reader ../baddata/bad_$n.xdi 2>&1";
40+
#print $command, $/;
41+
my $x = `$command`;
42+
printf "\tbad_%s.xdi: ", $n;
43+
if ($x =~ m{All heap blocks were freed}) {
44+
print "ok\n";
45+
} else {
46+
print "not ok\n";
47+
};
48+
};
49+
50+
51+

c/xdifile.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,17 @@ XDI_readfile(char *filename, XDIFile *xdifile) {
431431
xdifile->array = calloc(ncols, sizeof(double *));
432432
for (j = 0; j < ncols; j++) {
433433
xdifile->array[j] = calloc(npts_+1, sizeof(double));
434-
if (0 != xdi_strtod(words[j], &dval)) { return ERR_NONNUMERIC;}
434+
if (0 != xdi_strtod(words[j], &dval)) {
435+
free(line);
436+
free(outer_arr);
437+
free(outer_pts);
438+
xdifile->narrays = ncols;
439+
xdifile->nmetadata = ndict+1;
440+
for (j=0; j<=ilen; j++) {
441+
free(textlines[j]);
442+
}
443+
return ERR_NONNUMERIC;
444+
}
435445
xdifile->array[j][0] = dval;
436446
}
437447

@@ -465,15 +475,27 @@ XDI_readfile(char *filename, XDIFile *xdifile) {
465475
/* COPY_STRING(line, textlines[i]); */
466476
icol = make_words(textlines[i], words, MAX_WORDS);
467477
if (icol != ncols) {
478+
free(line);
468479
free(outer_arr);
469480
free(outer_pts);
481+
xdifile->narrays = ncols;
482+
xdifile->nmetadata = ndict+1;
483+
for (j=0; j<=ilen; j++) {
484+
free(textlines[j]);
485+
}
470486
return ERR_NCOLS_CHANGE;
471487
}
472488
icol = min(ncols, icol);
473489
for (j = 0; j < icol; j++) {
474490
if (0 != xdi_strtod(words[j], &dval)) {
491+
free(line);
475492
free(outer_arr);
476493
free(outer_pts);
494+
xdifile->narrays = ncols;
495+
xdifile->nmetadata = ndict+1;
496+
for (j=0; j<=ilen; j++) {
497+
free(textlines[j]);
498+
}
477499
return ERR_NONNUMERIC;
478500
}
479501
xdifile->array[j][ipt] = dval;

0 commit comments

Comments
 (0)