diff --git a/src/base/loader/image_file_data.cc b/src/base/loader/image_file_data.cc index 525d577936..b402b3bbb8 100644 --- a/src/base/loader/image_file_data.cc +++ b/src/base/loader/image_file_data.cc @@ -64,13 +64,10 @@ doGzipLoad(int fd) return -1; } - size_t tmp_len = strlen(P_tmpdir); - char *tmpnam = (char*) malloc(tmp_len + 20); - strcpy(tmpnam, P_tmpdir); - strcpy(tmpnam+tmp_len, "/gem5-gz-obj-XXXXXX"); // 19 chars + std::string tmpnam_str = std::string(P_tmpdir) + "/gem5-gz-obj-XXXXXX"; + char *tmpnam = const_cast(tmpnam_str.c_str()); fd = mkstemp(tmpnam); // repurposing fd variable for output if (fd < 0) { - free(tmpnam); gzclose(fdz); return fd; } @@ -78,8 +75,6 @@ doGzipLoad(int fd) if (unlink(tmpnam) != 0) warn("couldn't remove temporary file %s\n", tmpnam); - free(tmpnam); - auto buf = new uint8_t[blk_sz]; int r; // size of (r)emaining uncopied data in (buf)fer while ((r = gzread(fdz, buf, blk_sz)) > 0) {