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:
parent
3e960be9ce
commit
b105214e32
4 changed files with 21 additions and 8 deletions
|
@ -117,7 +117,7 @@ void onModelSelectMenu(const char * result)
|
||||||
else if (result == STR_DUPLICATE_MODEL) {
|
else if (result == STR_DUPLICATE_MODEL) {
|
||||||
char duplicatedFilename[LEN_MODEL_FILENAME+1];
|
char duplicatedFilename[LEN_MODEL_FILENAME+1];
|
||||||
memcpy(duplicatedFilename, currentModel->name, sizeof(duplicatedFilename));
|
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);
|
sdCopyFile(currentModel->name, MODELS_PATH, duplicatedFilename, MODELS_PATH);
|
||||||
modelslist.addModel(currentCategory, duplicatedFilename);
|
modelslist.addModel(currentCategory, duplicatedFilename);
|
||||||
unsigned int index = currentCategory->size() - 1;
|
unsigned int index = currentCategory->size() - 1;
|
||||||
|
|
|
@ -75,20 +75,33 @@ char * getFileIndex(char * filename, unsigned int & value)
|
||||||
return filename;
|
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;
|
unsigned int index;
|
||||||
char * indexPos = getFileIndex(filename, index);
|
char * indexPos = getFileIndex(filename, index);
|
||||||
char extension[LEN_FILE_EXTENSION+1];
|
char extension[LEN_FILE_EXTENSION+1];
|
||||||
strncpy(extension, getFileExtension(filename), sizeof(extension));
|
strncpy(extension, getFileExtension(filename), sizeof(extension));
|
||||||
do {
|
while (1) {
|
||||||
char * pos = strAppendUnsigned(indexPos, ++index, 2);
|
index++;
|
||||||
|
if ((indexPos - filename) + getDigitsCount(index) + LEN_FILE_EXTENSION > size) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
char * pos = strAppendUnsigned(indexPos, index);
|
||||||
strAppend(pos, extension);
|
strAppend(pos, extension);
|
||||||
if (!isFileAvailable(filename, directory)) {
|
if (!isFileAvailable(filename, directory)) {
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
} while (index < 99);
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isExtensionMatching(const char * extension, const char * pattern, uint8_t flags)
|
bool isExtensionMatching(const char * extension, const char * pattern, uint8_t flags)
|
||||||
|
|
|
@ -125,7 +125,7 @@ T * getFileExtension(T * filename, int size=0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool isFileAvailable(const char * filename);
|
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 * src, const char * dest);
|
||||||
const char * sdCopyFile(const char * srcFilename, const char * srcDir, const char * destFilename, const char * destDir);
|
const char * sdCopyFile(const char * srcFilename, const char * srcDir, const char * destFilename, const char * destDir);
|
||||||
|
|
|
@ -218,7 +218,7 @@ const char * createModel()
|
||||||
memset(filename, 0, sizeof(filename));
|
memset(filename, 0, sizeof(filename));
|
||||||
strcpy(filename, "model.bin");
|
strcpy(filename, "model.bin");
|
||||||
|
|
||||||
int index = findNextFileIndex(filename, MODELS_PATH);
|
int index = findNextFileIndex(filename, LEN_MODEL_FILENAME, MODELS_PATH);
|
||||||
if (index > 0) {
|
if (index > 0) {
|
||||||
modelDefault(index);
|
modelDefault(index);
|
||||||
memcpy(g_eeGeneral.currModelFilename, filename, sizeof(g_eeGeneral.currModelFilename));
|
memcpy(g_eeGeneral.currModelFilename, filename, sizeof(g_eeGeneral.currModelFilename));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue