From a4e6bed7d1ef97b26e736297d276dfb4c501a29d Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 11 Oct 2024 13:52:43 -0700 Subject: [PATCH] read_saif leak Signed-off-by: James Cherry --- power/SaifReader.cc | 28 +++++++++++----------------- power/SaifReaderPvt.hh | 2 +- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/power/SaifReader.cc b/power/SaifReader.cc index a66e70e9..437c0be8 100644 --- a/power/SaifReader.cc +++ b/power/SaifReader.cc @@ -175,8 +175,8 @@ SaifReader::setNetDurations(const char *net_name, if (in_scope_level_ > 0) { Instance *parent = path_.empty() ? network_->topInstance() : path_.back(); if (parent) { - const char *net_name1 = unescaped(net_name); - const Pin *pin = sdc_network_->findPin(parent, net_name1); + string unescaped_name = unescaped(net_name); + const Pin *pin = sdc_network_->findPin(parent, unescaped_name.c_str()); if (pin) { double t1 = durations[static_cast(SaifState::T1)]; float duty = t1 / duration_; @@ -195,28 +195,22 @@ SaifReader::setNetDurations(const char *net_name, } } } + stringDelete(net_name); } -const char * +string SaifReader::unescaped(const char *token) { - char *unescaped = new char[strlen(token) + 1]; - char *u = unescaped; - size_t token_length = strlen(token); - - for (size_t i = 0; i < token_length; i++) { - char ch = token[i]; - if (ch == escape_) { - char next_ch = token[i + 1]; - *u++ = next_ch; - i++; - } + string unescaped; + for (const char *t = token; *t; t++) { + char ch = *t; + if (ch == escape_) + unescaped += *(t+1); else // Just the normal noises. - *u++ = ch; + unescaped += ch; } - *u = '\0'; - debugPrint(debug_, "saif_name", 1, "token %s -> %s", token, unescaped); + debugPrint(debug_, "saif_name", 1, "token %s -> %s", token, unescaped.c_str()); return unescaped; } diff --git a/power/SaifReaderPvt.hh b/power/SaifReaderPvt.hh index f81995f0..75705efb 100644 --- a/power/SaifReaderPvt.hh +++ b/power/SaifReaderPvt.hh @@ -84,7 +84,7 @@ public: void notSupported(const char *feature); private: - const char *unescaped(const char *token); + string unescaped(const char *token); const char *filename_; const char *scope_; // Divider delimited scope to begin annotation.