bool getSavedGamesStack (stackHandler * sH, char * ext) { char * pattern = joinStrings ("*", ext); if (! pattern) return false; variable newName; newName.varType = SVT_NULL; #ifdef _WIN32 WCHAR *w_pattern = ConvertToUTF16(pattern); WIN32_FIND_DATA theData; HANDLE handle = FindFirstFile (w_pattern, & theData); delete w_pattern; if (handle != INVALID_HANDLE_VALUE) { bool keepGoing; do { theData.cFileName[lstrlen (theData.cFileName) - strlen (ext)] = TEXT('\0'); char * fileName = ConvertFromUTF16(theData.cFileName); char * decoded = decodeFilename (fileName); makeTextVar (newName, decoded); delete fileName; delete decoded; if (! addVarToStack (newName, sH -> first)) return false; if (sH -> last == NULL) sH -> last = sH -> first; keepGoing = FindNextFile (handle, & theData); } while (keepGoing); FindClose (handle); } #else DIR * dir = opendir ("."); if (! dir) return false; struct dirent *d = readdir (dir); while (d != NULL) { if (! strcmp(d->d_name + strlen (d->d_name) - strlen (ext), ext)) { d->d_name[strlen (d->d_name) - strlen (ext)] = 0; char * decoded = decodeFilename (d->d_name); makeTextVar (newName, decoded); delete[] decoded; if (! addVarToStack (newName, sH -> first)) return false; if (sH -> last == NULL) sH -> last = sH -> first; } d = readdir (dir); } closedir (dir); #endif delete[] pattern; pattern = NULL; return true; }
QStringList KaraokePlayable_ZIP::enumerate() { QStringList filelist; // http://www.nih.at/libzip/zip_get_num_entries.html int files = zip_get_num_entries( m_zip, ZIP_FL_UNCHANGED ); if ( files == 0 ) { m_errorMsg = "archive has no files"; return filelist; } for ( int i = 0; i < files; i++ ) { // Retrieve the file size struct zip_stat fileinfo; // http://www.nih.at/libzip/zip_stat_index.html if ( zip_stat_index( m_zip, i, 0, &fileinfo) != 0 ) { m_errorMsg = "file info not found"; return QStringList(); } filelist.push_back( decodeFilename( fileinfo.name ) ); } return filelist; }