diff options
author | Nathan Woods <npwoods@mess.org> | 2016-09-25 07:30:03 -0400 |
---|---|---|
committer | Nathan Woods <npwoods@mess.org> | 2016-09-25 07:30:03 -0400 |
commit | f83fce0c281cb0b13a323860c8995ae84d3fcb4a (patch) | |
tree | fa401e86ac4d839e3d638c8cc00b73623c8b2ee0 | |
parent | 5f3bb35b126e1e3323f31a748f6b027c8d866587 (diff) |
Putting try { ... } catch(std::bad_alloc &) { ... } around recently introduced resize() calls
At the very least, I suppose this doesn't hurt; I'd just like to discuss how this should work in the long run.
Also, this blog entry sums up my opinion perfectly: http://christiangarbin.blogspot.com/2013/05/the-futility-of-catching-stdbadalloc.html
-rw-r--r-- | src/tools/imgtool/iflopimg.cpp | 3 | ||||
-rw-r--r-- | src/tools/imgtool/modules/amiga.cpp | 4 | ||||
-rw-r--r-- | src/tools/imgtool/modules/pc_hard.cpp | 3 | ||||
-rw-r--r-- | src/tools/imgtool/modules/thomson.cpp | 3 |
4 files changed, 9 insertions, 4 deletions
diff --git a/src/tools/imgtool/iflopimg.cpp b/src/tools/imgtool/iflopimg.cpp index cd5874c6e41..fb0688390df 100644 --- a/src/tools/imgtool/iflopimg.cpp +++ b/src/tools/imgtool/iflopimg.cpp @@ -208,7 +208,8 @@ static imgtoolerr_t imgtool_floppy_read_sector(imgtool_image *image, UINT32 trac return imgtool_floppy_error(ferr); // resize the buffer accordingly - buffer.resize(sector_size); + try { buffer.resize(sector_size); } + catch (std::bad_alloc& b) { return IMGTOOLERR_OUTOFMEMORY; } // and read the sector ferr = floppy_read_sector(imgtool_floppy(image), head, track, sector, 0, &buffer[0], sector_size); diff --git a/src/tools/imgtool/modules/amiga.cpp b/src/tools/imgtool/modules/amiga.cpp index 72e62165ad1..9c3dd3d1001 100644 --- a/src/tools/imgtool/modules/amiga.cpp +++ b/src/tools/imgtool/modules/amiga.cpp @@ -1818,7 +1818,9 @@ static imgtoolerr_t amiga_image_read_sector(imgtool_image* img, UINT32 track, UI static imgtoolerr_t amiga_image_read_sector(imgtool_image* img, UINT32 track, UINT32 head, UINT32 sector, std::vector<UINT8> &buffer) { - buffer.resize(BSIZE); + try { buffer.resize(BSIZE); } + catch (std::bad_alloc& b) { return IMGTOOLERR_OUTOFMEMORY; } + return amiga_image_read_sector(img, track, head, sector, &buffer[0], buffer.size()); } diff --git a/src/tools/imgtool/modules/pc_hard.cpp b/src/tools/imgtool/modules/pc_hard.cpp index 871e0cf2ff7..b4cc315f04a 100644 --- a/src/tools/imgtool/modules/pc_hard.cpp +++ b/src/tools/imgtool/modules/pc_hard.cpp @@ -346,7 +346,8 @@ static imgtoolerr_t pc_chd_image_readsector(imgtool_image *image, UINT32 track, // get the sector size and resize the buffer UINT32 sector_size = imghd_get_header(&info->hard_disk)->sectorbytes; - buffer.resize(sector_size); + try { buffer.resize(sector_size); } + catch (std::bad_alloc& b) { return IMGTOOLERR_OUTOFMEMORY; } // read the data return imghd_read(&info->hard_disk, diff --git a/src/tools/imgtool/modules/thomson.cpp b/src/tools/imgtool/modules/thomson.cpp index 61eaeddaa8f..a272b590a5e 100644 --- a/src/tools/imgtool/modules/thomson.cpp +++ b/src/tools/imgtool/modules/thomson.cpp @@ -811,7 +811,8 @@ static imgtoolerr_t thom_read_sector(imgtool_image* img, UINT32 track, return IMGTOOLERR_SEEKERROR; // resize the buffer - buffer.resize(f->sector_size); + try { buffer.resize(f->sector_size); } + catch (std::bad_alloc& b) { return IMGTOOLERR_OUTOFMEMORY; } memcpy( &buffer[0], thom_get_sector( f, head, track, sector ), f->sector_size); return IMGTOOLERR_SUCCESS; |