1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-24 00:35:18 +03:00

[Horus] Model name greater than Model99.bin allowed

This commit is contained in:
Bertrand Songis 2016-08-27 21:35:36 +02:00
parent 3e960be9ce
commit b105214e32
4 changed files with 21 additions and 8 deletions

View file

@ -117,7 +117,7 @@ void onModelSelectMenu(const char * result)
else if (result == STR_DUPLICATE_MODEL) {
char duplicatedFilename[LEN_MODEL_FILENAME+1];
memcpy(duplicatedFilename, currentModel->name, sizeof(duplicatedFilename));
if (findNextFileIndex(duplicatedFilename, MODELS_PATH)) {
if (findNextFileIndex(duplicatedFilename, LEN_MODEL_FILENAME, MODELS_PATH)) {
sdCopyFile(currentModel->name, MODELS_PATH, duplicatedFilename, MODELS_PATH);
modelslist.addModel(currentCategory, duplicatedFilename);
unsigned int index = currentCategory->size() - 1;

View file

@ -75,20 +75,33 @@ char * getFileIndex(char * filename, unsigned int & value)
return filename;
}
int findNextFileIndex(char * filename, const char * directory)
uint8_t getDigitsCount(unsigned int value)
{
uint8_t count = 1;
while (value >= 10) {
value /= 10;
++count;
}
return count;
}
int findNextFileIndex(char * filename, uint8_t size, const char * directory)
{
unsigned int index;
char * indexPos = getFileIndex(filename, index);
char extension[LEN_FILE_EXTENSION+1];
strncpy(extension, getFileExtension(filename), sizeof(extension));
do {
char * pos = strAppendUnsigned(indexPos, ++index, 2);
while (1) {
index++;
if ((indexPos - filename) + getDigitsCount(index) + LEN_FILE_EXTENSION > size) {
return 0;
}
char * pos = strAppendUnsigned(indexPos, index);
strAppend(pos, extension);
if (!isFileAvailable(filename, directory)) {
return index;
}
} while (index < 99);
return 0;
}
}
bool isExtensionMatching(const char * extension, const char * pattern, uint8_t flags)

View file

@ -125,7 +125,7 @@ T * getFileExtension(T * filename, int size=0)
#endif
bool isFileAvailable(const char * filename);
int findNextFileIndex(char * filename, const char * directory);
int findNextFileIndex(char * filename, uint8_t size, const char * directory);
const char * sdCopyFile(const char * src, const char * dest);
const char * sdCopyFile(const char * srcFilename, const char * srcDir, const char * destFilename, const char * destDir);

View file

@ -218,7 +218,7 @@ const char * createModel()
memset(filename, 0, sizeof(filename));
strcpy(filename, "model.bin");
int index = findNextFileIndex(filename, MODELS_PATH);
int index = findNextFileIndex(filename, LEN_MODEL_FILENAME, MODELS_PATH);
if (index > 0) {
modelDefault(index);
memcpy(g_eeGeneral.currModelFilename, filename, sizeof(g_eeGeneral.currModelFilename));