#if defined(DARWIN)
#include <dirent.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include "indirect_util.h"
char **dcc_filenames_in_directory(const char *dir_path, int *numFiles)
{
long basep;
int count = 0;
char dirge[8192];
int fd;
char **filenames;
int numread;
*numFiles = 0;
if ( dir_path == NULL ) {
return NULL;
}
fd = open(dir_path, O_RDONLY, 0777);
if ( fd < 0 ) {
return NULL;
}
filenames = (char **) calloc(20, sizeof(char *));
while ( (numread = getdirentries(fd, dirge, sizeof(dirge), &basep)) > 0 ) {
struct dirent *dent;
for ( dent = (struct dirent *)dirge;
dent < (struct dirent *)(dirge + numread);
dent = (struct dirent *)((char *)dent + dent->d_reclen) ) {
if ( dent->d_fileno == 0 ||
( dent->d_name[0] == '.' &&
( dent->d_namlen == 1 ||
( dent->d_namlen == 2 && dent->d_name[1] == '.') ) ) ) {
continue;
}
filenames[count++] = strdup(dent->d_name);
}
}
filenames[count] = NULL;
close(fd);
if ( numread == -1 || count == 0 ) {
int i;
for ( i = 0; i < count; i++ ) {
free(filenames[i]);
}
free(filenames);
filenames = NULL;
}
if ( filenames != NULL ) {
*numFiles = count;
}
return filenames;
}
#endif // DARWIN