summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commitf83fce0c281cb0b13a323860c8995ae84d3fcb4a (patch)
treefa401e86ac4d839e3d638c8cc00b73623c8b2ee0
parent5f3bb35b126e1e3323f31a748f6b027c8d866587 (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.cpp3
-rw-r--r--src/tools/imgtool/modules/amiga.cpp4
-rw-r--r--src/tools/imgtool/modules/pc_hard.cpp3
-rw-r--r--src/tools/imgtool/modules/thomson.cpp3
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;