Index: code/mission/missioncampaign.cpp
===================================================================
--- code/mission/missioncampaign.cpp	(revision 9612)
+++ code/mission/missioncampaign.cpp	(working copy)
@@ -814,9 +814,10 @@
 void mission_campaign_delete_all_savefiles( char *pilot_name )
 {
 	int dir_type, num_files, i;
-	char *names[MAX_CAMPAIGNS], file_spec[MAX_FILENAME_LEN + 2], *ext;
+	char file_spec[MAX_FILENAME_LEN + 2], *ext;
 	char filename[1024];
 	int (*filter_save)(char *filename);
+	SCP_vector<SCP_string> names;
 
 	ext = NOX(".csg");
 	dir_type = CF_TYPE_PLAYERS;
@@ -827,14 +828,13 @@
 	// be.  I have to save any file filters
 	filter_save = Get_file_list_filter;
 	Get_file_list_filter = NULL;
-	num_files = cf_get_file_list(MAX_CAMPAIGNS, names, dir_type, file_spec);
+	num_files = cf_get_file_list(names, dir_type, const_cast<char *>(file_spec));
 	Get_file_list_filter = filter_save;
 
 	for (i=0; i<num_files; i++) {
-		strcpy_s(filename, names[i]);
+		strcpy_s(filename, names[i].c_str());
 		strcat_s(filename, ext);
 		cf_delete(filename, dir_type);
-		vm_free(names[i]);
 	}
 }
 
Index: code/cfile/cfilesystem.cpp
===================================================================
--- code/cfile/cfilesystem.cpp	(revision 9612)
+++ code/cfile/cfilesystem.cpp	(working copy)
@@ -1447,12 +1447,9 @@
 	find_handle = _findfirst( filespec, &find );
 	if (find_handle != -1) {
 		do {
-            if (strcmp(strstr(filter, "."), strstr(find.name,".")) != 0)
+            if (strcmp(strrchr(filter, '.'), strrchr(find.name,'.')) != 0)
                 continue;
 
-			if ( strlen(find.name) >= MAX_FILENAME_LEN )
-				continue;
-
 			if (!(find.attrib & _A_SUBDIR)) {
 				if ( !Get_file_list_filter || (*Get_file_list_filter)(find.name) ) {
 					if ( check_duplicates && cf_file_already_in_list(list, find.name) ) {
@@ -1488,9 +1485,6 @@
 	dirp = opendir (filespec);
 	if ( dirp ) {
 		while ((dir = readdir (dirp)) != NULL) {
-			if ( strlen(dir->d_name) >= MAX_FILENAME_LEN ) {
-				continue;
-			}
 
 			if (fnmatch(filter, dir->d_name, 0) != 0)
 				continue;
@@ -1650,7 +1644,7 @@
 			if (num_files >= max)
 				break;
 
-            if (strcmp(strstr(filter, "."), strstr(find.name,".")) != 0)
+            if (strcmp(strrchr(filter, '.'), strrchr(find.name,'.')) != 0)
                 continue;
 
 			if ( strlen(find.name) >= MAX_FILENAME_LEN )
