diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 0f71e78..8b37c98 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -423,18 +423,20 @@ int JackEngine::ClientCheck(const char* name, char* name_res, int protocol, int bool JackEngine::GenerateUniqueName(char* name) { - int tens, ones; + int hundreds, tens, ones; int length = strlen(name); - if (length > JACK_CLIENT_NAME_SIZE - 4) { + if (length > JACK_CLIENT_NAME_SIZE - 5) { jack_error("%s exists and is too long to make unique", name); return true; /* failure */ } - /* generate a unique name by appending "-01".."-99" */ + /* generate a unique name by appending "-001".."-999" */ name[length++] = '-'; + hundreds = length++; tens = length++; ones = length++; + name[hundreds] = '0'; name[tens] = '0'; name[ones] = '1'; name[length] = '\0'; @@ -442,14 +444,21 @@ bool JackEngine::GenerateUniqueName(char* name) while (ClientCheckName(name)) { if (name[ones] == '9') { if (name[tens] == '9') { - jack_error("client %s has 99 extra instances already", name); - return true; /* give up */ + if (name[hundreds] == '9') { + name[hundreds - 1] = 0; + jack_error("client %s has 999 extra instances already", name); + return true; /* give up */ + } + name[hundreds]++; + name[tens] = '0'; + name[ones] = '0'; + continue; } name[tens]++; name[ones] = '0'; - } else { - name[ones]++; + continue; } + name[ones]++; } return false; }