X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=listati%2Fdir_scan.c;fp=listati%2Fdir_scan.c;h=0e7b40bddceb5bf244510d0e88a491db6975a148;hb=5ac64ab2753cbd2198e9b5b17119134b5ef63bc6;hp=0000000000000000000000000000000000000000;hpb=a9150b627f8567902fb2188da4c2ec3df16cf32d;p=gapil.git diff --git a/listati/dir_scan.c b/listati/dir_scan.c new file mode 100644 index 0000000..0e7b40b --- /dev/null +++ b/listati/dir_scan.c @@ -0,0 +1,33 @@ +#include +#include +#include /* directory */ +#include /* C standard library */ +#include + +/* + * Function dir_scan: + * + * Input: the directory name and a computation function + * Return: 0 if OK, -1 on errors + */ +int dir_scan(char * dirname, int(*compute)(struct dirent *)) +{ + DIR * dir; + struct dirent *direntry; + + if ( (dir = opendir(dirname)) == NULL) { /* open directory */ + printf("Opening %s\n", dirname); /* on error print messages */ + perror("Cannot open directory"); /* and then return */ + return -1; + } + fd = dirfd(dir); /* get file descriptor */ + fchdir(fd); /* change directory */ + /* loop on directory entries */ + while ( (direntry = readdir(dir)) != NULL) { /* read entry */ + if (compute(direntry)) { /* execute function on it */ + return -1; /* on error return */ + } + } + closedir(dir); + return 0; +}