- if (strcmpi(ext, ".zip") == 0 || strcmpi(ext, ".jag") == 0)
- strcpy(&names[i++ * 2048], de->d_name);
+ {
+ if (stricmp(ext, ".zip") == 0 || stricmp(ext, ".jag") == 0)
+ {
+ // Do a QnD insertion sort...
+ // (Yeah, it's n^2/2 time, but there aren't that many items...)
+ uint32 pos = 0;
+
+ for(int k=0; k<i; k++)
+ {
+ if (stricmp(&names[k * FILENAME_MAX], de->d_name) < 0)
+ pos++;
+ else
+ break;
+ }
+
+ uint32 blockSize = (i - pos) * FILENAME_MAX;
+
+ if (blockSize)
+//This only works on Win32 for some reason...
+// memcpy(&names[(pos + 1) * FILENAME_MAX], &names[pos * FILENAME_MAX], blockSize);
+ for(int k=blockSize-1; k>=0; k--)
+ names[((pos + 1) * FILENAME_MAX) + k] = names[(pos * FILENAME_MAX) + k];
+
+ strcpy(&names[pos * FILENAME_MAX], de->d_name);
+ i++;
+ }
+ }