#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
unsigned int list_files(char *pathname, unsigned int pathnamelength, unsigned int pathnamesize)
{
DIR *dir;
struct dirent *ptr;
unsigned int l;
unsigned int result = 0;
if (pathnamelength == 0 || pathname[pathnamelength - 1] != '/')
{
pathname[pathnamelength++] = '/';
}
pathname[pathnamelength] = '\0';
if ((dir = opendir(pathname)) != NULL)
{
while ((ptr = readdir(dir)) != NULL)
{
if (ptr->d_name[0] != '.' ||
(ptr->d_name[1] != '\0' && (ptr->d_name[1] != '.' || ptr->d_name[2] != '\0')))
{
l = strlen(ptr->d_name);
if (pathnamelength + l < pathnamesize)
{
strcpy(pathname + pathnamelength, ptr->d_name);
if (ptr->d_type == 4)
{
result += list_files(pathname, pathnamelength + l, pathnamesize);
}
else
{
printf("%s\r\n", pathname);
result++;
}
}
}
}
closedir(dir);
}
return(result);
}
int main(int argc, char *argv[])
{
char pathname[1024];
unsigned int pathnamelength;
pathname[0] = '\0';
if (argc > 1)
{
pathnamelength = strlen(argv[1]);
if (pathnamelength < sizeof(pathname))
{
//getcwd(pathname, sizeof(pathname));
strcpy(pathname, argv[1]);
}
}
pathnamelength = strlen(pathname);
list_files(pathname, pathnamelength, sizeof(pathname));
return 0;
}