From 34c312fd52bea10bcb8d023ad610926e14b00f32 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 28 May 2021 09:52:32 -0700 Subject: [PATCH] write_sdf escape non-alnum chars in port name --- sdf/SdfWriter.cc | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/sdf/SdfWriter.cc b/sdf/SdfWriter.cc index 09b408ad..29cc72b5 100644 --- a/sdf/SdfWriter.cc +++ b/sdf/SdfWriter.cc @@ -717,12 +717,6 @@ SdfWriter::sdfEdge(const Transition *tr) //////////////////////////////////////////////////////////////// -char * -SdfWriter::sdfPortName(const Pin *pin) -{ - return const_cast(network_->portName(pin)); -} - char * SdfWriter::sdfPathName(const Pin *pin) { @@ -790,4 +784,30 @@ SdfWriter::sdfName(const Instance *inst) return sdf_name; } +char * +SdfWriter::sdfPortName(const Pin *pin) +{ + const char *name = network_->portName(pin); + char *sdf_name = makeTmpString(strlen(name) * 2 + 1); + const char *p = name; + char *s = sdf_name; + while (*p) { + char ch = *p; + if (ch == network_escape_) { + // Copy escape and escaped char. + *s++ = sdf_escape_; + *s++ = *++p; + } + else { + if (!(isalnum(ch) || ch == '_' || ch == '[' || ch == ']')) + // Insert escape. + *s++ = sdf_escape_; + *s++ = ch; + } + p++; + } + *s = '\0'; + return sdf_name; +} + } // namespace