# fix: don't use scandir when qt asks for plname v. 0.2 # (c) 2003 Stanislav Traykov, terms of use: NetHack GPL # # Changes: # v. 0.2: now also qsorting the player list as in the original # version diff -ru nethack-3.4.2-orig/src/files.c nethack-3.4.2/src/files.c --- nethack-3.4.2-orig/src/files.c Sat Aug 30 02:07:31 2003 +++ nethack-3.4.2/src/files.c Wed Nov 5 15:04:48 2003 @@ -29,7 +29,9 @@ #endif #if defined(UNIX) && defined(QT_GRAPHICS) +#include #include +#include #endif #if defined(UNIX) || defined(VMS) @@ -140,6 +142,9 @@ extern int n_dgns; /* from dungeon.c */ +#if defined(UNIX) && defined(QT_GRAPHICS) +STATIC_DCL int FDECL(strcmp_wrap, (const void *, const void *)); +#endif STATIC_DCL char *FDECL(set_bonesfile_name, (char *,d_level*)); STATIC_DCL char *NDECL(set_bonestemp_name); #ifdef COMPRESS @@ -533,6 +538,16 @@ #endif } +#if defined(UNIX) && defined(QT_GRAPHICS) +STATIC_OVL int +strcmp_wrap(p, q) +const void *p; +const void *q; +{ + return strncasecmp(*(char **) p, *(char **) q, 16); +} +#endif + #ifdef HOLD_LOCKFILE_OPEN STATIC_OVL int open_levelfile_exclusively(name, lev, oflag) @@ -993,33 +1008,45 @@ get_saved_games() { #if defined(UNIX) && defined(QT_GRAPHICS) + /* posixly correct version */ int myuid=getuid(); - struct dirent **namelist; - int n = scandir("save", &namelist, 0, alphasort);; - if ( n > 0 ) { - int i,j=0; - char** result = (char**)alloc((n+1)*sizeof(char*)); /* at most */ - for (i=0; id_name, "%d%63s", &uid, name ) == 2 ) { - if ( uid == myuid ) { - char filename[BUFSZ]; - char* r; - Sprintf(filename,"save/%d%s",uid,name); - r = plname_from_file(filename); - if ( r ) - result[j++] = r; + DIR *dir; + if((dir=opendir("save"))) { + int n; + for(n=0; readdir(dir); n++) + ; + closedir(dir); + if(n>0) { + int i,j=0; + char **result; + if(!(dir=opendir("save"))) + return 0; + result = (char**)alloc((n+1)*sizeof(char*)); /* at most */ + for (i=0; id_name, "%d%63s", &uid, name ) == 2 ) { + if ( uid == myuid ) { + char filename[BUFSZ]; + char* r; + Sprintf(filename,"save/%d%s",uid,name); + r = plname_from_file(filename); + if ( r ) + result[j++] = r; + } + } } - } + closedir(dir); + qsort(result, j, sizeof(char *), strcmp_wrap); + result[j++] = 0; + return result; } - result[j++] = 0; - return result; - } else -#endif - { - return 0; } +#endif + return 0; } void