diff options
| author | Clifford Wolf <clifford@clifford.at> | 2016-10-14 18:20:36 +0200 | 
|---|---|---|
| committer | Clifford Wolf <clifford@clifford.at> | 2016-10-14 18:20:36 +0200 | 
| commit | e4c5ee9b893bf7dd2b9102934ebb1f1a6f0671a9 (patch) | |
| tree | 93da7cfbb67ac249cdef4be530792f794de9507e /passes/techmap | |
| parent | 7fc69b309599e91ed7e772722546b2e03e9fc4db (diff) | |
| download | yosys-e4c5ee9b893bf7dd2b9102934ebb1f1a6f0671a9.tar.gz yosys-e4c5ee9b893bf7dd2b9102934ebb1f1a6f0671a9.tar.bz2 yosys-e4c5ee9b893bf7dd2b9102934ebb1f1a6f0671a9.zip | |
Avoid using strcasecmp()
Diffstat (limited to 'passes/techmap')
| -rw-r--r-- | passes/techmap/attrmap.cc | 23 | 
1 files changed, 21 insertions, 2 deletions
| diff --git a/passes/techmap/attrmap.cc b/passes/techmap/attrmap.cc index f715b63ed..dec81d216 100644 --- a/passes/techmap/attrmap.cc +++ b/passes/techmap/attrmap.cc @@ -33,13 +33,32 @@ Const make_value(string &value)  	return sig.as_const();  } +bool string_compare_nocase(const string &str1, const string &str2) +{ +	if (str1.size() != str2.size()) +		return false; + +	for (size_t i = 0; i < str1.size(); i++) +	{ +		char ch1 = str1[i], ch2 = str2[i]; +		if ('a' <= ch1 && ch1 <= 'z') +			ch1 -= 'a' - 'A'; +		if ('a' <= ch2 && ch2 <= 'z') +			ch2 -= 'a' - 'A'; +		if (ch1 != ch2) +			return false; +	} + +	return true; +} +  bool match_name(string &name, IdString &id, bool ignore_case=false)  {  	string str1 = RTLIL::escape_id(name);  	string str2 = id.str();  	if (ignore_case) -		return !strcasecmp(str1.c_str(), str2.c_str()); +		return string_compare_nocase(str1, str2);  	return str1 == str2;  } @@ -49,7 +68,7 @@ bool match_value(string &value, Const &val, bool ignore_case=false)  	if (ignore_case && ((val.flags & RTLIL::CONST_FLAG_STRING) != 0) && GetSize(value) && value.front() == '"' && value.back() == '"') {  		string str1 = value.substr(1, GetSize(value)-2);  		string str2 = val.decode_string(); -		return !strcasecmp(str1.c_str(), str2.c_str()); +		return string_compare_nocase(str1, str2);  	}  	return make_value(value) == val; | 
