Merge remote-tracking branch 'ui/ui'

This commit is contained in:
Yamagi 2022-09-18 09:43:49 +02:00
commit 5a3163a7e4
1 changed files with 14 additions and 28 deletions

View File

@ -5302,7 +5302,6 @@ PlayerDirectoryList(void)
char* findname = "players/*"; char* findname = "players/*";
char** list = 0; char** list = 0;
int num = 0; int num = 0;
int n = 0;
// get a list of "players" subdirectories // get a list of "players" subdirectories
if ((list = FS_ListFiles2(findname, &num, 0, 0)) == 0) if ((list = FS_ListFiles2(findname, &num, 0, 0)) == 0)
@ -5310,35 +5309,20 @@ PlayerDirectoryList(void)
return false; return false;
} }
n = num; if (num > MAX_PLAYERMODELS)
if (n > MAX_PLAYERMODELS)
{ {
n = MAX_PLAYERMODELS - 1; num = MAX_PLAYERMODELS - 1;
}
s_directory.num = 0;
for (int i = 0; i < n; ++i)
{
// last element of FS_FileList maybe null
if (list[i] == 0)
{
break;
}
s_directory.num++;
} }
// malloc directories // malloc directories
char** data = (char**)malloc(s_directory.num * sizeof(char*)); char** data = (char**)malloc(num * sizeof(char*));
YQ2_COM_CHECK_OOM(data, "malloc()", s_directory.num * sizeof(char*)) YQ2_COM_CHECK_OOM(data, "malloc()", num * sizeof(char*))
memset(data, 0, s_directory.num * sizeof(char*)); memset(data, 0, num * sizeof(char*));
s_directory.data = data; s_directory.data = data;
s_directory.num = 0; s_directory.num = num;
for (int i = 0; i < n; ++i) for (int i = 0; i < num; ++i)
{ {
// last element of FS_FileList maybe null // last element of FS_FileList maybe null
if (list[i] == 0) if (list[i] == 0)
@ -5356,14 +5340,14 @@ PlayerDirectoryList(void)
strncpy(s, t, MAX_QPATH - 1); // MAX_QPATH - 1, gcc warns about truncation strncpy(s, t, MAX_QPATH - 1); // MAX_QPATH - 1, gcc warns about truncation
s[strlen(s)] = 0; s[strlen(s)] = 0;
data[s_directory.num++] = s; data[i] = s;
} }
// free file list // free file list
FS_FreeList(list, num); FS_FreeList(list, num);
// sort them male, female, alphabetical // sort them male, female, alphabetical
qsort(s_directory.data, s_directory.num, sizeof(char**), dircmp_func); qsort(s_directory.data, s_directory.num - 1, sizeof(char**), dircmp_func);
return true; return true;
} }
@ -5443,9 +5427,9 @@ PlayerModelList(void)
} }
// malloc skinnames // malloc skinnames
data = (char**)malloc(s_skinnames[mdl].num * sizeof(char*)); data = (char**)malloc((s_skinnames[mdl].num + 1) * sizeof(char*));
YQ2_COM_CHECK_OOM(data, "malloc()", s_skinnames[mdl].num * sizeof(char*)) YQ2_COM_CHECK_OOM(data, "malloc()", (s_skinnames[mdl].num + 1) * sizeof(char*))
memset(data, 0, s_skinnames[mdl].num * sizeof(char*)); memset(data, 0, (s_skinnames[mdl].num + 1) * sizeof(char*));
s_skinnames[mdl].data = data; s_skinnames[mdl].data = data;
s_skinnames[mdl].num = 0; s_skinnames[mdl].num = 0;
@ -5480,6 +5464,8 @@ PlayerModelList(void)
} }
} }
s_skinnames[mdl].num++; // guard pointer
// at this point we have a valid player model // at this point we have a valid player model
s = (char*)malloc(MAX_DISPLAYNAME); s = (char*)malloc(MAX_DISPLAYNAME);
t = strrchr(s_directory.data[i], '/'); t = strrchr(s_directory.data[i], '/');