static BOOL SoftwarePicker_AddEntry(HWND hwndPicker, directory_search_info *pSearchInfo) { //software_picker_info *pPickerInfo; LPSTR pszFilename; BOOL rc; char* utf8_FileName; //pPickerInfo = GetSoftwarePickerInfo(hwndPicker); utf8_FileName = utf8_from_tstring(pSearchInfo->fd.cFileName); if( !utf8_FileName ) return FALSE; if (!strcmp(utf8_FileName, ".") || !strcmp(utf8_FileName, "..")) { osd_free(utf8_FileName); return TRUE; } pszFilename = (LPSTR)alloca(strlen(pSearchInfo->directory_name) + 1 + strlen(utf8_FileName) + 1); strcpy(pszFilename, pSearchInfo->directory_name); strcat(pszFilename, "\\"); strcat(pszFilename, utf8_FileName); if (pSearchInfo->fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) rc = SoftwarePicker_AddDirectory(hwndPicker, pszFilename); else rc = SoftwarePicker_InternalAddFile(hwndPicker, pszFilename, FALSE); osd_free(utf8_FileName); return rc; }
// Split multi-directory for SW Files into separate directories. SubDir path not used. // This could be replaced by strtok. static BOOL AddSoftwarePickerDirs(HWND hwndPicker, LPCSTR pszDirectories, LPCSTR pszSubDir) { LPCSTR s; LPSTR pszNewString; char cSeparator = ';'; int nLength = 0; do { s = pszDirectories; while(*s && (*s != cSeparator)) s++; nLength = s - pszDirectories; if (nLength > 0) { pszNewString = (LPSTR) alloca((nLength + 1 + (pszSubDir ? strlen(pszSubDir) + 1 : 0))); memcpy(pszNewString, pszDirectories, nLength); pszNewString[nLength] = '\0'; if (pszSubDir) { pszNewString[nLength++] = '\\'; strcpy(&pszNewString[nLength], pszSubDir); } if (!SoftwarePicker_AddDirectory(hwndPicker, pszNewString)) return FALSE; } pszDirectories = s + 1; } while(*s); return TRUE; }