From efb8c495f648c784de87606b862890551c9470ba Mon Sep 17 00:00:00 2001 From: Kp Date: Tue, 5 Aug 2014 02:31:03 +0000 Subject: [PATCH] Use unique_ptr for hmp_track data --- common/include/hmp.h | 2 +- common/misc/hmp.cpp | 20 ++++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/common/include/hmp.h b/common/include/hmp.h index e555a0241..f0bc719a9 100644 --- a/common/include/hmp.h +++ b/common/include/hmp.h @@ -55,7 +55,7 @@ struct event struct hmp_track { - unsigned char *data; + std::unique_ptr data; unsigned char *loop; unsigned int len; unsigned char *cur; diff --git a/common/misc/hmp.cpp b/common/misc/hmp.cpp index cbd8bd6e8..31a5d8784 100644 --- a/common/misc/hmp.cpp +++ b/common/misc/hmp.cpp @@ -38,21 +38,15 @@ void hmp_stop(hmp_file *hmp); hmp_file::~hmp_file() { - int i; - #ifdef _WIN32 hmp_stop(this); #endif - for (i = 0; i < num_trks; i++) - if (trks[i].data) - d_free(trks[i].data); } std::unique_ptr hmp_open(const char *filename) { int i, data, num_tracks, tempo; char buf[256]; PHYSFS_file *fp; - unsigned char *p; if (!(fp = PHYSFSX_openReadBuffered(filename))) return NULL; @@ -111,15 +105,9 @@ std::unique_ptr hmp_open(const char *filename) { data -= 12; hmp->trks[i].len = data; - MALLOC(p, unsigned char, data); - if (!(hmp->trks[i].data = p)) - { - PHYSFS_close(fp); - return NULL; - } - + hmp->trks[i].data.reset(new uint8_t[data]); /* finally, read track data */ - if ((PHYSFSX_fseek(fp, 4, SEEK_CUR)) || (PHYSFS_read(fp, p, data, 1) != 1)) + if ((PHYSFSX_fseek(fp, 4, SEEK_CUR)) || (PHYSFS_read(fp, hmp->trks[i].data.get(), data, 1) != 1)) { PHYSFS_close(fp); return NULL; @@ -366,7 +354,7 @@ static void reset_tracks(struct hmp_file *hmp) if (hmp->trks[i].loop_set) hmp->trks[i].cur = hmp->trks[i].loop; else - hmp->trks[i].cur = hmp->trks[i].data; + hmp->trks[i].cur = hmp->trks[i].data.get(); hmp->trks[i].left = hmp->trks[i].len; hmp->trks[i].cur_time = 0; } @@ -755,7 +743,7 @@ void hmp2mid(const char *hmp_name, unsigned char **midbuf, unsigned int *midlen) mi = 0; *midbuf = (unsigned char *) d_realloc(*midbuf, *midlen + sizeof(mi)); *midlen += sizeof(mi); - mi = hmptrk2mid(hmp->trks[i].data, hmp->trks[i].len, midbuf, midlen); + mi = hmptrk2mid(hmp->trks[i].data.get(), hmp->trks[i].len, midbuf, midlen); mi = MIDIINT(mi); memcpy(&(*midbuf)[midtrklenpos], &mi, 4); }