(Switch Error Stack 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 */ . . . /* Minor error code IDs */ hid_t CLIENT_ERR_MINOR_OPEN; /* Error during open */ hid_t CLIENT_ERR_MINOR_WRITE; /* Error during write */ . . . int Client_do_write { const char *dset_name="a_dataset"; hid_t error_stack; . . . /* Make call to HDF5 I/O routine */ if(H5Dopen(file_id, dset_name)<0) { /* Push client error onto error stack */ H5Epush(H5E_DEFAULT,__FILE__,FUNC,__LINE__,CLIENT_ERR_MAJ_IO,CLIENT_ERR_MINOR_OPEN,"H5Dopen failed"); /* Indicate error occurred in function */ return(0); } /* Make call to HDF5 I/O routine */ /* (This shows client library preserves the current error stack before it's cleared by another HDF5 function) */ 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"); /* Preserve the error stack by assigning an object handle to it */ error_stack = H5Eget_current_stack(); /* Close dataset */ H5Dclose(dset_id); /* Replace the current error stack with the preserved one */ H5Eset_current_stack(error_stack); . . . /* Indicate error occurred in function */ return(0); } . . . /* Successful return from function */ return(1); }