(Push Error Use Case Scenario)
/* Client error class ID */ hid_t CLIENT_ERROR; /* Major error code IDs */ hid_t CLIENT_ERR_MAJOR_IO; /* Errors on I/O */ hid_t CLIENT_ERR_MAJOR_FILE; /* Errors on file access */ . . . /* Minor error code IDs */ hid_t CLIENT_ERR_MINOR_PERM; /* Invalid permissions */ hid_t CLIENT_ERR_MINOR_HDF5; /* Error in HDF5 */ . . . int Client_do_write { /* Create strings to hold function name for error reporting and a file name */ const char *FUNC="Client_do_write"; const char *file="a_file"; /* Set up client write information, etc. */ . . . /* Check permissions on writing at client level */ /* (This shows client library pushing error onto current stack by itself) */ if(...) { /* Push client error onto error stack */ H5Epush(H5E_DEFAULT,__FILE__,FUNC,__LINE__,CLIENT_ERR_MAJ_IO,CLIENT_ERR_MINOR_PERM,"Can't write to this object"); /* Indicate error occurred in function */ return(0); } . . . /* Make call to HDF5 I/O routine */ /* (This shows client library pushing error onto current stack on top of HDF5 errors) */ if(H5Dwrite(dset_id, mem_type_id, mem_space_id, file_space_id, dset_xfer_plist_id, buf)<0) { /* Push client error onto error stack */ H5Epush(H5E_DEFAULT,__FILE__,FUNC,__LINE__,CLIENT_ERR_MAJ_IO,CLIENT_ERR_MINOR_HDF5,"H5Dwrite failed"); /* Indicate error occurred in function */ return(0); } . . . /* Make a system call */ /* (This shows client library pushing error onto current stack with additional message * generated during run time) */ if(open(file, O_RDONLY)<0) { const char* mesg = strerror(errno); /* Push client error onto error stack */ H5Epush(H5E_DEFAULT,__FILE__,FUNC, __LINE__,CLIENT_ERR_MAJ_IO,CLIENT_ERR_MINOR_OPEN,"Can't open system file, errno=%s", mesg); /* Indicate error occurred in this function */ return(0); } /* Successful return from function */ return(1); }