From 5a40f23ce50480edd235a309aaaad078d6cc740f Mon Sep 17 00:00:00 2001 From: tlatorre Date: Wed, 28 Aug 2019 13:52:32 -0500 Subject: fix some error handling in zebra.c This commit updates the zebra code to properly handle all the errors from get_bytes(). I also updated fit and cat-zdab to not display the errors about the FTX banks by default unless you run them with the -v command line option. --- src/fit.c | 11 ++++++++--- src/zdab-cat.c | 11 ++++++++--- src/zebra.c | 11 ++++++++--- 3 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/fit.c b/src/fit.c index 37a6aa9..cb8fd6b 100644 --- a/src/fit.c +++ b/src/fit.c @@ -5823,6 +5823,7 @@ void usage(void) fprintf(stderr," scan the likelihood space and write out the results to FILENAME\n"); fprintf(stderr," --gtid only fit a single GTID\n"); fprintf(stderr," -p specify particle combo to fit for\n"); + fprintf(stderr," -v verbose\n"); fprintf(stderr," -h display this help message\n"); exit(1); } @@ -6000,6 +6001,7 @@ int main(int argc, char **argv) char dqxx_file[256]; int32_t gtid = -1; int particle_combo = 0; + int verbose = 0; int nevents = 0; /* Array of events to write out to HDF5 file. @@ -6048,6 +6050,9 @@ int main(int argc, char **argv) case 'p': particle_combo = atoi(argv[++i]); break; + case 'v': + verbose = 1; + break; case 'h': usage(); default: @@ -6290,7 +6295,7 @@ skip_mc: hdf5_events[nevents].dc = get_dc_word(&ev, f, &bmast, &b); if (get_ftpv(f,&b,&bftpv)) { - fprintf(stderr, "%s\n", zdab_err); + if (verbose) fprintf(stderr, "%s\n", zdab_err); hdf5_events[nevents].ftp_x = NAN; hdf5_events[nevents].ftp_y = NAN; hdf5_events[nevents].ftp_z = NAN; @@ -6301,14 +6306,14 @@ skip_mc: } if (get_ftxk(f,&b,&bftxk)) { - fprintf(stderr, "%s\n", zdab_err); + if (verbose) fprintf(stderr, "%s\n", zdab_err); hdf5_events[nevents].ftk_energy = NAN; } else { hdf5_events[nevents].ftk_energy = bftxk.energy; } if (get_rsp(f,&b,&bftxr)) { - fprintf(stderr, "%s\n", zdab_err); + if (verbose) fprintf(stderr, "%s\n", zdab_err); hdf5_events[nevents].rsp_energy = NAN; } else { hdf5_events[nevents].rsp_energy = bftxr.ene; diff --git a/src/zdab-cat.c b/src/zdab-cat.c index 009fdf8..88024d4 100644 --- a/src/zdab-cat.c +++ b/src/zdab-cat.c @@ -48,6 +48,7 @@ void usage(void) fprintf(stderr,"Usage: ./zdab-cat [options] FILENAME\n"); fprintf(stderr," -o output file (default: stdout)\n"); fprintf(stderr," --skip-second-event only fit the first event after a MAST bank\n"); + fprintf(stderr," -v verbose\n"); fprintf(stderr," -h display this help message\n"); exit(1); } @@ -75,6 +76,7 @@ int main(int argc, char **argv) static HDF5Event hdf5_events[MAX_NEVENTS]; int nmcgn = 0; static HDF5MCGN hdf5_mcgn[MAX_NEVENTS]; + int verbose = 0; for (i = 1; i < argc; i++) { if (strlen(argv[i]) >= 2 && !strncmp(argv[i], "--", 2)) { @@ -87,6 +89,9 @@ int main(int argc, char **argv) case 'o': output = argv[++i]; break; + case 'v': + verbose = 1; + break; case 'h': usage(); default: @@ -307,7 +312,7 @@ skip_mc: hdf5_events[nevents].dc = get_dc_word(&ev, f, &bmast, &b); if (get_ftpv(f,&b,&bftpv)) { - fprintf(stderr, "%s\n", zdab_err); + if (verbose) fprintf(stderr, "%s\n", zdab_err); hdf5_events[nevents].ftp_x = NAN; hdf5_events[nevents].ftp_y = NAN; hdf5_events[nevents].ftp_z = NAN; @@ -318,14 +323,14 @@ skip_mc: } if (get_ftxk(f,&b,&bftxk)) { - fprintf(stderr, "%s\n", zdab_err); + if (verbose) fprintf(stderr, "%s\n", zdab_err); hdf5_events[nevents].ftk_energy = NAN; } else { hdf5_events[nevents].ftk_energy = bftxk.energy; } if (get_rsp(f,&b,&bftxr)) { - fprintf(stderr, "%s\n", zdab_err); + if (verbose) fprintf(stderr, "%s\n", zdab_err); hdf5_events[nevents].rsp_energy = NAN; } else { hdf5_events[nevents].rsp_energy = bftxr.ene; diff --git a/src/zebra.c b/src/zebra.c index 1289318..a3a068f 100644 --- a/src/zebra.c +++ b/src/zebra.c @@ -146,6 +146,10 @@ static int get_bytes(zebraFile *z, size_t size) } else if (z->buf_size == 0 && rv == 1) { /* EOF and there are no bytes left. */ return 1; + } else if (rv == 1) { + /* EOF but there are bytes left. */ + sprintf(zebra_err, "got EOF but there are still %zu bytes in the buffer!", z->buf_size); + return -1; } } @@ -228,6 +232,7 @@ int zebra_read_next_logical_record(zebraFile *z) uint32_t size, type, nwtx, nwseg, nwtab, nwuh; uint32_t io, noff; uint32_t offset; + int rv; while (1) { /* Move the next logical record to the start of the buffer. */ @@ -274,12 +279,12 @@ int zebra_read_next_logical_record(zebraFile *z) /* Padding records. */ case 5: case 6: - get_bytes(z,offset+size-1); + if ((rv = get_bytes(z,offset+size-1))) return rv; z->lr_size = (size + 1)*4; continue; /* Start or end of run. */ case 1: - get_bytes(z,offset+size); + if ((rv = get_bytes(z,offset+size))) return rv; z->lr_size = (size + 2)*4; continue; /* Normal records. */ @@ -292,7 +297,7 @@ int zebra_read_next_logical_record(zebraFile *z) /* For normal records the size of the logical record is NWLR + the two * words for the size and type. */ z->lr_size = (size + 2)*4; - get_bytes(z,offset+size); + if ((rv = get_bytes(z,offset+size))) return rv; nwtx = unpacki32(z->buf+(offset+4)*4); nwseg = unpacki32(z->buf+(offset+5)*4); -- cgit