diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2011-04-10 20:46:25 +0000 |
---|---|---|
committer | IOhannes m zmölnig <zmoelnig@iem.at> | 2015-10-14 15:23:30 +0200 |
commit | 545a9474c2f822f13b25204af0bc0b3d556f1c47 (patch) | |
tree | 178668c1a435ac4efcc71a762a8992a19e01e2bf /playlist | |
parent | 1d4c449ca8d2a49197fe4000df47f6df95e5e380 (diff) |
applying patko's patch #3283782 to fix for Win32
svn path=/trunk/externals/unauthorized/; revision=15068
Diffstat (limited to 'playlist')
-rw-r--r-- | playlist/playlist.c | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/playlist/playlist.c b/playlist/playlist.c index fce68a8..4576267 100644 --- a/playlist/playlist.c +++ b/playlist/playlist.c @@ -37,17 +37,60 @@ #include <regex.h> #include <time.h> #include <sys/time.h> +#include <dirent.h> #include "m_pd.h" #include "m_imp.h" #include "g_canvas.h" - +#include <sys/types.h> #ifdef _WIN32 #include <io.h> +#include <pthread.h> +#include <direct.h> + +int scandir(const char *dir, struct dirent ***namelist, + int (*select)(const struct dirent *), + int (*compar)(const struct dirent **, const struct dirent **)) { + DIR *d; + struct dirent *entry; + register int i=0; + size_t entrysize; + + if ((d=opendir(dir)) == NULL) + return(-1); + + *namelist=NULL; + while ((entry=readdir(d)) != NULL) + { + if (select == NULL || (select != NULL && (*select)(entry))) + { + *namelist=(struct dirent **)realloc((void *)(*namelist), + (size_t)((i+1)*sizeof(struct dirent *))); + if (*namelist == NULL) return(-1); + entrysize=sizeof(struct dirent)-sizeof(entry->d_name)+strlen(entry->d_name)+1; + (*namelist)[i]=(struct dirent *)malloc(entrysize); + if ((*namelist)[i] == NULL) return(-1); + memcpy((*namelist)[i], entry, entrysize); + i++; + } + } + if (closedir(d)) return(-1); + if (i == 0) return(-1); + if (compar != NULL) + qsort((void *)(*namelist), (size_t)i, sizeof(struct dirent *), compar); + + return(i); +} + +int alphasort(const struct dirent **a, const struct dirent **b) { + return(strcmp((*a)->d_name, (*b)->d_name)); + } + +int scandir(const char *, struct dirent ***, int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **)); +int alphasort(const struct dirent **, const struct dirent **); + #else #include <unistd.h> -#include <sys/types.h> -#include <dirent.h> #endif t_widgetbehavior playlist_widgetbehavior; @@ -844,7 +887,19 @@ static t_playlist *playlist_new(t_symbol *s, int argc, t_atom *argv ) // get current directory full path x->x_curdir = ( char * ) getbytes( MAX_DIR_LENGTH ); - if ( ( tmpcurdir = getenv( "PWD" ) ) == NULL ) + +#ifdef _WIN32 + char path[_MAX_DIR]; + + _getcwd (path, _MAX_DIR); + post ("Current directory is: %s", path); + tmpcurdir = path; + +#else + tmpcurdir = getenv( "PWD" ); +#endif + + if ( tmpcurdir == NULL ) { post( "playlist : could not get current directory ( where the hell are you ??? )" ); return NULL; |