2 * iod.c - Iterate a function on each entry of a directory
4 * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr>
5 * Laboratoire MASI, Institut Blaise Pascal
6 * Universite Pierre et Marie Curie (Paris VI)
8 * This file can be redistributed under the terms of the GNU Library General
24 int iterate_on_dir (const char * dir_name,
25 int (*func) (const char *, struct dirent *, void *),
29 struct dirent *de, *dep;
30 int max_len = -1, len, ret = 0;
32 #if HAVE_PATHCONF && defined(_PC_NAME_MAX)
33 max_len = pathconf(dir_name, _PC_NAME_MAX);
36 #ifdef _POSIX_NAME_MAX
37 max_len = _POSIX_NAME_MAX;
44 #endif /* _POSIX_NAME_MAX */
46 max_len += sizeof(struct dirent);
48 de = malloc(max_len+1);
51 memset(de, 0, max_len+1);
53 dir = opendir (dir_name);
58 while ((dep = readdir (dir))) {
59 len = sizeof(struct dirent);
60 #ifdef HAVE_RECLEN_DIRENT
61 if (len < dep->d_reclen)
67 if ((*func)(dir_name, de, private))