aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2019-08-28 13:52:32 -0500
committertlatorre <tlatorre@uchicago.edu>2019-08-28 13:52:32 -0500
commit5a40f23ce50480edd235a309aaaad078d6cc740f (patch)
tree1a712c0e32f5c197ccc87f4dd39ce1ecdbc86048
parent8a1d843403cda4b82417167d3473f3cefdfdc463 (diff)
downloadsddm-5a40f23ce50480edd235a309aaaad078d6cc740f.tar.gz
sddm-5a40f23ce50480edd235a309aaaad078d6cc740f.tar.bz2
sddm-5a40f23ce50480edd235a309aaaad078d6cc740f.zip
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.
-rw-r--r--src/fit.c11
-rw-r--r--src/zdab-cat.c11
-rw-r--r--src/zebra.c11
3 files changed, 24 insertions, 9 deletions
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);