X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ffilter_multi.cpp;h=e563b62a3b67bc1792cecaf6a33f867a5cdd40bf;hb=98baf24c524d68c2bc44e31863a89b0f66e2dbda;hp=5efc6d33d7941e4e5275ea0a7af2e7ceae0d8fd3;hpb=2ed18a489ee3765497d711432fdaeab9b40fd844;p=metaproxy-moved-to-github.git diff --git a/src/filter_multi.cpp b/src/filter_multi.cpp index 5efc6d3..e563b62 100644 --- a/src/filter_multi.cpp +++ b/src/filter_multi.cpp @@ -573,7 +573,7 @@ void yf::Multi::Frontend::record_diagnostics(Z_Records *records, { Z_DiagRec **n = (Z_DiagRec **) odr_malloc(odr, - (1+z_diag->num_diagRecs) * sizeof(*n)); + (1 + z_diag->num_diagRecs) * sizeof(*n)); memcpy(n, z_diag->diagRecs, z_diag->num_diagRecs * sizeof(*n)); z_diag->diagRecs = n; @@ -586,8 +586,24 @@ void yf::Multi::Frontend::record_diagnostics(Z_Records *records, } else if (records->which == Z_Records_multipleNSD) { - // we may set this multiple times (TOO BAD!) - z_diag = records->u.multipleNonSurDiagnostics; + Z_DiagRecs * dr =records->u.multipleNonSurDiagnostics; + + if (!z_diag) + { + z_diag = (Z_DiagRecs *) odr_malloc(odr, sizeof(*z_diag)); + z_diag->num_diagRecs = 0; + z_diag->diagRecs = 0; + } + Z_DiagRec **n = (Z_DiagRec **) + odr_malloc(odr, + (dr->num_diagRecs + z_diag->num_diagRecs) * + sizeof(*n)); + if (z_diag->num_diagRecs) + memcpy(n, z_diag->diagRecs, z_diag->num_diagRecs * sizeof(*n)); + memcpy(n + z_diag->num_diagRecs, + dr->diagRecs, dr->num_diagRecs * sizeof(*n)); + z_diag->diagRecs = n; + z_diag->num_diagRecs += dr->num_diagRecs; } else no_successful++; // probably piggyback