From d3deaf5ff52c1908ac32f267c9a918e00e64eead Mon Sep 17 00:00:00 2001 From: Simon Richter Date: Fri, 29 Jun 2018 09:41:44 +0200 Subject: [PATCH] Rewrite test for valid characters in names The ternary operator decays array arguments to pointers, so they can no longer be assigned to array references. --- common/lib_id.cpp | 64 ++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/common/lib_id.cpp b/common/lib_id.cpp index f7b57e5c68..86c9abde31 100644 --- a/common/lib_id.cpp +++ b/common/lib_id.cpp @@ -388,30 +388,29 @@ UTF8 LIB_ID::FixIllegalChars( const UTF8& aLibItemName, LIB_ID_TYPE aType, bool } -///> Set of characters not accepted library entry names. -#define BASE_ILLEGAL_CHARS '\t', '\n', '\r', '/', '\\' -const unsigned schIllegalChars[] = { BASE_ILLEGAL_CHARS, ':', ' ' }; -const unsigned schAliasIllegalChars[] = { BASE_ILLEGAL_CHARS, 0, 0 }; -const unsigned pcbIllegalChars[] = { BASE_ILLEGAL_CHARS, ':', 0 }; -#define ILL_CHAR_SIZE (sizeof(schIllegalChars) / sizeof(int)) - bool LIB_ID::isLegalChar( unsigned aUniChar, LIB_ID_TYPE aType ) { - const unsigned (&illegalChars)[ILL_CHAR_SIZE] = - aType == ID_SCH ? schIllegalChars : - aType == ID_ALIAS ? schAliasIllegalChars : pcbIllegalChars; + bool const colon_allowed = ( aType == ID_ALIAS ); + bool const space_allowed = ( aType != ID_SCH ); - for( const unsigned ch : illegalChars ) - { - if( ch == aUniChar ) - return false; - } - - // Test for "printable" code (aUniChar is a unicode (32 bits) char, not a ASCII value ) if( aUniChar < ' ' ) return false; - return true; + switch( aUniChar ) + { + case '/': + case '\\': + return false; + + case ':': + return colon_allowed; + + case ' ': + return space_allowed; + + default: + return true; + } } @@ -427,28 +426,25 @@ unsigned LIB_ID::FindIllegalLibNicknameChar( const UTF8& aNickname, LIB_ID_TYPE } -///> Set of characters not accepted library nicknames which is different for item names. -#define BASE_ILLEGAL_LIB_NICKNAME_CHARS '\t', '\n', '\r', ':', '\\' -const unsigned schIllegalLibNicknameChars[] = { BASE_ILLEGAL_LIB_NICKNAME_CHARS, ' ' }; -const unsigned pcbIllegalLibNicknameChars[] = { BASE_ILLEGAL_LIB_NICKNAME_CHARS, 0 }; -#define ILL_LIB_NICKNAME_CHAR_SIZE ( sizeof( schIllegalLibNicknameChars ) / sizeof( unsigned ) ) - bool LIB_ID::isLegalLibNicknameChar( unsigned aUniChar, LIB_ID_TYPE aType ) { - const unsigned (&illegalChars)[ILL_LIB_NICKNAME_CHAR_SIZE] = - aType == ID_SCH ? schIllegalLibNicknameChars : pcbIllegalLibNicknameChars; + bool const space_allowed = ( aType != ID_SCH ); - for( const unsigned ch : illegalChars ) - { - if( ch == aUniChar ) - return false; - } - - // Test for "printable" code (aUniChar is a unicode (32 bits) char, not a ASCII value ) if( aUniChar < ' ' ) return false; - return true; + switch( aUniChar ) + { + case '\\': + case ':': + return false; + + case ' ': + return space_allowed; + + default: + return true; + } }